maude-3.1/0000755000175200017520000000000013741222371007457 500000000000000maude-3.1/ChangeLog0000755000175200017520000005626213733264110011165 000000000000002020-09-24 Steven Eker * tests/ResolvedBugs/CUI_OccursCheckSeptember2020.maude: created ===================================Maude131=========================================== 2020-09-21 Steven Eker * tests/ResolvedBugs/indentityUnificationSeptember2020.maude: added 2020-09-17 Steven Eker * tests/Misc/continue.maude: added test for variant matching 2020-09-16 Steven Eker * tests/Meta/metaNarrow.maude: added delay, filter examples * tests/Meta/metaIntNewNarrow.maude: added delay, filter examples ===================================Maude130=========================================== 2020-09-09 Steven Eker * tests/Meta/metaVariantMatch.maude: added 2020-09-08 Steven Eker * tests/Meta/metaIntVariantMatch.maude: added 2020-09-04 Steven Eker * tests/Misc/variantMatching.maude: added 2020-09-03 Steven Eker * tests/Meta/metaIntVariantUnify2.maude: added 2020-09-02 Steven Eker * tests/Meta/metaVariantUnify2.maude: added * tests/Meta/checkUnifiers.maude: use new version of metaVariantUnify() 2020-09-01 Steven Eker * tests/Misc/filteredVariantUnification.maude: added 2020-07-15 Steven Eker * tests/Meta/metaIntUnify.maude: added examples for getIrredundantUnifier(), getIrredundantDisjointUnifier() * tests/Meta/metaUnify.maude: added examples for metaIrredundantUnify(), metaIrredundantDisjointUnify() ===================================Maude129=========================================== 2020-07-01 Steven Eker * tests/Misc/AU_Unification.maude: added 2020-06-24 Steven Eker * tests/Misc/unification.maude: change the theory in the unsupported theory example to AUl since AU is now partly supported 2020-06-11 Steven Eker * tests/ResolvedBugs/variantUnifyJune2020.maude: added * tests/Meta/checkUnifiers.maude: added 2020-05-28 Steven Eker * tests/ResolvedBugs/ACU_MissingUnifiersMay2020.maude: added * tests/ResolvedBugs/sortCollapseMay2020.maude: added 2020-05-19 Steven Eker * tests/ResolvedBugs/identityUnificationMay2020.maude: added 2020-05-05 Steven Eker * tests/ResolvedBugs/complexParserSyncApril2020.maude: removed line left from metaParseStrategy() test 2020-04-28 Steven Eker * configure.ac: added test for ppoll() existence 2020-04-13 Steven Eker * tests/ResolvedBugs/complexParserSyncApril2020.maude: added * tests/ResolvedBugs/metaParseStrategyApril2020.maude: added ===================================Maude128a=========================================== 2020-03-06 Steven Eker * tests/ResolvedBugs/closeSocketFeb2020.maude: added 2020-02-06 Steven Eker * tests/ResolvedBugs/ascentFunctionsJanuary2020.maude: added ===================================Maude128=========================================== 2019-11-20 Rubén Rubio * tests/Meta/metaIntStrategy.maude: added * tests/StrategyLanguage/metalevel.maude: adapted to the new interface and syntax of the strategy language at the metalevel * tests/StrategyLanguage/parameterization.maude: added 2019-11-11 Steven Eker * tests/Meta/metaIntParse.maude: parseQidList() -> parseTerm() 2019-11-08 Steven Eker * tests/Meta/metaIntParse.maude: use variable alias feature * tests/Meta/metaIntPrint.maude: use variable alias feature 2019-11-05 Steven Eker * tests/Meta/metaPrettyPrint.maude: added tests for variable alias feature 2019-11-04 Steven Eker * tests/Meta/metaParse.maude: added tests for variable alias feature 2019-10-22 Steven Eker * tests/Meta/metaGetVariant.maude: use new variable family based metaGetVariant() * tests/Meta/metaVariantUnify.maude: use new variable family based metaVariantUnify()/metaVariantDisjointUnify() * tests/Meta/legacyMetaGetVariant.maude: created 2019-10-21 Steven Eker * tests/Meta/legacyMetaVariantUnify.maude: created 2019-10-18 Steven Eker * tests/Meta/metaUnify.maude: use new variable family based metaUnify()/metaDisjointUnify() * tests/Meta/legacyMetaUnify.maude: created ===================================Maude125=========================================== 2019-07-31 Steven Eker * tests/ResolvedBugs/instantiationJuly2019.maude: added 2019-05-29 Steven Eker * tests/Misc/parameterizedView.maude: added * tests/Misc/badView.maude: added * tests/ResolvedBugs/viewRecursionMay2019.maude: added * tests/ResolvedBugs/polymorphicOverloadMay2019.maude: added * tests/ResolvedBugs/parameterTheoryCopyMay2019.maude: added * tests/ResolvedBugs/parameterTheoryMay2019.maude: added * tests/ResolvedBugs/moduleSumMay2019.maude: added 2019-05-28 Steven Eker * tests/Meta/russianDollsNonFlat2.maude: added 2019-05-24 Steven Eker * tests/Misc/mapToParameterTheory.maude: added 2019-05-03 Steven Eker * tests/Misc/parameterization.maude: summing modules with bound parameters is now legal ===================================Maude121=========================================== 2018-12-07 Steven Eker * tests/Meta/metaIntNewNarrowSearch.maude: added 2018-12-04 Steven Eker * tests/Meta/metaIntNewNarrow.maude: added 2018-11-12 Steven Eker * tests/Meta/metaIntApply.maude: added 2018-11-09 Steven Eker * tests/ResolvedBugs/metaApplyNov2018.maude: added ===================================Maude120=========================================== 2018-10-23 Steven Eker * tests/ResolvedBugs/physArgIndexOct2018.maude: added * tests/Meta/metaIntParse.maude: added 2018-10-22 Steven Eker * tests/Meta/metaIntPrint.maude: added 2018-10-15 Steven Eker * tests/Meta/metaIntVariantUnify.maude: added 2018-10-11 Steven Eker * tests/ResolvedBugs/metaIntMatchOct2018.maude: added 2018-10-10 Steven Eker * tests/Meta/metaIntVariant.maude: added 2018-10-09 Steven Eker * tests/ResolvedBugs/objectMessageOct2018.maude: added 2018-09-26 Steven Eker * tests/Meta/metaIntUnify.maude: added 2018-09-17 Steven Eker * tests/Meta/metaIntSort.maude: added tests for getMaximalAritySet(); added tests for normalizeTerm() ===================================Maude119=========================================== 2018-08-17 Steven Eker * tests/Meta/metaIntSort.maude: added 2018-08-13 Steven Eker * tests/BuiltIn/string.maude: added tests for upperCase(), lowerCase() 2018-08-09 Steven Eker * tests/ResolvedBugs/metaIntAscentJune2018.maude: updated to new createInterpreter() convention * tests/ResolvedBugs/metaIntImportJune2018.maude: updated to new createInterpreter() convention * tests/ResolvedBugs/metaModuleCacheJune2018.maude: updated to new createInterpreter() convention * tests/ResolvedBugs/metaIntRewriteJune2018.maude: updated to new createInterpreter() convention * tests/ResolvedBugs/showModuleJune2018.maude: updated to new createInterpreter() convention * tests/Meta/metaIntPrelude.maude: updated to new createInterpreter() convention * tests/Meta/metaIntReplace.maude: updated to new createInterpreter() convention * tests/Meta/russianDollsFlat.maude: updated to new createInterpreter() convention * tests/Meta/metaIntReplace2.maude: updated to new createInterpreter() convention * tests/Meta/russianDollsNonFlat.maude: updated to new createInterpreter() convention * tests/Meta/metaIntSearch.maude: updated to new createInterpreter() convention * tests/Meta/metaIntMatch.maude: updated to new createInterpreter() convention 2018-08-08 Steven Eker * tests/Meta/metaIntMatch.maude: added * tests/Meta/metaIntSearch.maude: added ===================================Maude118=========================================== 2018-07-20 Rubén Rubio * test/StrategyLanguage/metalevel.maude: added * test/StrategyLanguage/modules.maude: added * test/StrategyLanguage/srewrite.maude: added 2018-07-09 Steven Eker * tests/Misc/rot13.maude: added 2018-06-28 Steven Eker * tests/ResolvedBugs/metaIntRewriteJune2018.maude: added 2018-06-27 Steven Eker * tests/ResolvedBugs/clearRulesJune2018.maude: added * tests/ResolvedBugs/metaIntAscentJune2018.maude: added * tests/ResolvedBugs/metaIntImportJune2018.maude: added 2018-06-26 Steven Eker * tests/ResolvedBugs/metaModuleCacheJune2018.maude: added * tests/ResolvedBugs/showModuleJune2018.maude: added 2018-06-25 Steven Eker * tests/ResolvedBugs/staleViewJune2018.maude: added * tests/ResolvedBugs/parserJune2018.maude: added 2018-06-08 Steven Eker * tests/Meta/russianDollsFlat.maude: added * tests/Meta/russianDollsNonFlat.maude: added 2018-05-22 Steven Eker * tests/Meta/metaIntReplace2.maude: added * tests/Meta/metaIntReplace.maude: added * tests/Meta/metaIntPrelude.maude: added example to test upModule() running in meta-interpreter 2018-05-21 Steven Eker * tests/Meta/metaIntPrelude.maude: added 2018-05-11 Steven Eker * tests/Misc/view.maude: added 2018-03-27 Steven Eker * configure.ac: removed references to MSCP10 * AUTHORS: removed reference to MSCP10 * tests/Misc/bubble.maude: added two more examples ===================================Maude117=========================================== 2018-03-16 Steven Eker * configure.ac: remove ref to MSCP10 2018-03-15 Steven Eker * src/Makefile.am (SUBDIRS): remove MSCP10 * tests/Misc/Makefile.am: added parse and bubble tests * tests/Misc/bubble (MAUDE_LIB): created * tests/Misc/parse.maude: created * tests/Misc/parse (MAUDE_LIB): created 2018-02-28 Steven Eker * tests/Misc/bubble.maude: created 2017-12-22 Steven Eker * tests/Meta/metaWellFormed.maude: fix issue where none is ambiguous; it can be (none).EmptyTypeSet or (none).Substitution ===================================Maude116=========================================== 2017-07-12 Steven Eker * tests/Misc/smtTest.maude: added tests for violations of SMT restrictions 2017-06-26 Steven Eker * INSTALL: add Yices2 info 2017-06-21 Steven Eker * tests/Misc/smtTest (MAUDE_LIB): check for USE_YICES2 2017-06-20 Steven Eker * configure.ac (GMP_LIBS): add configuration for Yices2 2017-05-30 Steven Eker * tests/Misc/smtTest.maude: move smt continue tests here from continue.maude since they shouldn't be run if we don't have CVC4 linked ===================================Maude114=========================================== 2017-05-26 Steven Eker * tests/Meta/metaNarrow.maude: added tests for metaNarrowingSearchPath() * tests/Misc/narrow.maude: added tests for fvu-narrow 2017-05-02 Steven Eker * tests/Meta/metaNarrow.maude: metaNarrowingApply() no longer takes label argument * tests/Misc/continue.maude: use narrowing attribute 2017-05-01 Steven Eker * tests/Misc/narrow.maude: use narrowing attribute * tests/Meta/metaNarrow.maude: use narrowing attribute ===================================Maude113=========================================== 2017-04-13 Steven Eker * tests/Misc/continue.maude: created ===================================Maude112a=========================================== 2017-03-10 Steven Eker * tests/Meta/metaNarrow.maude: added metaNarrowingSearch() examples * tests/Misc/narrow.maude: created ===================================Maude111b=========================================== 2017-01-09 Steven Eker * tests/Meta/metaNarrow.maude: added examples 2017-01-06 Steven Eker * tests/Meta/metaVariantUnify.maude: fix typo in metaVariantDisjointUnify() ===================================Maude111a=========================================== 2016-12-19 Steven Eker * tests/Meta/metaNarrow.maude: created * tests/Meta/metaNarrow (MAUDE_LIB): created ===================================Maude111=========================================== 2016-06-27 Steven Eker * tests/Misc/smtTest (MAUDE_LIB): skip test if we don't define USE_CVC4 * configure.ac: use no argument form of AM_INIT_AUTOMAKE ===================================Maude110b=========================================== 2016-05-05 Steven Eker * configure.ac: changed bug report address from maude-bugs@maude.cs.uiuc.edu to maude-bugs@lists.cs.illinois.edu ===================================Maude110=========================================== 2016-02-26 Steven Eker * tests/Misc/meseguerFiniteVariant.maude: created * tests/Misc/meseguerFiniteVariant: created ===================================Maude109=========================================== 2014-11-19 Steven Eker * tests/Misc/assocUnification.maude: added examples to test new capabilities ===================================Maude106=========================================== 2014-10-29 Steven Eker * tests/Misc/smtTest.maude: updated with new syntax and examples ===================================Maude105=========================================== 2014-08-14 Steven Eker * tests/Misc/smtTest.maude: use new syntax ===================================Maude104=========================================== 2014-04-22 Steven Eker * configure.ac: added configuration for CVC4 and POSIX Realtime Extensions library (needed by CVC4) ===================================Maude103=========================================== 2014-04-04 Steven Eker * tests/Misc/assocUnification (MAUDE_LIB): created * tests/Misc/assocUnification.maude: created * tests/Misc/unification.maude: change assoc to assoc id: in TEST2 since assoc is now partially supported ===================================Maude102=========================================== 2014-02-06 Steven Eker * configure.ac: removed rope_UGLY_HACK option * src/3rdParty/Makefile.am (noinst_HEADERS): removed rope_UGLY_HACK stuff 2014-01-31 Steven Eker * configure.ac: no longer offer dlmalloc option * src/3rdParty/malloc.c: deleted * src/3rdParty/Makefile.am: remove all mention of dlmalloc ===================================Maude100a=========================================== 2013-03-12 Steven Eker * tests/Misc/unification (MAUDE_LIB): created * tests/Misc/CU_Unification.maude: created 2013-03-11 Steven Eker * tests/ResolvedBugs/unificationMar2013 (MAUDE_LIB): created * tests/ResolvedBugs/unificationMar2013.maude: created 2012-08-06 Steven Eker * src/3rdParty/ropeimpl_UGLY_HACK.h: hacked up verison of Mac ropeimpl.h * src/3rdParty/rope_UGLY_HACK: version of Mac rope that uses ropeimpl_UGLY_HACK.h * configure.ac: added flag for rope ugly hack 2012-07-31 Steven Eker * tests/Misc/variantNarrowing (MAUDE_LIB): created * tests/Misc/variantNarrowing.maude: created * tests/Meta/metaVariantUnify (MAUDE_LIB): created * tests/Meta/metaVariantUnify.maude: created * tests/Misc/variantUnification.maude: created * tests/Misc/variantUnification (MAUDE_LIB): created ===================================Maude96a=========================================== 2010-05-21 Steven Eker * tests/ResolvedBugs/CUIbug12-22-09.maude (CUI_DagNode): use set show timing off . ===================================Maude94=========================================== 2010-03-19 Steven Eker * configure.ac: don't bother with -fomit-frame-pointer -fforce-addr; check for gcc 4.* 2009-12-23 Steven Eker * tests/ResolvedBugs/CUIbug12-22-09 (MAUDE_LIB): added; removed previous tests 2009-11-12 Steven Eker * tests/ResolvedBugs/Makefile.am (RESULT_FILES): added 6 tests 2009-11-11 Steven Eker * tests/ResolvedBugs/santiago9-21-09 (MAUDE_LIB): created * tests/ResolvedBugs/paco10-6-09 (MAUDE_LIB): created * tests/ResolvedBugs/santiago11-2-09 (MAUDE_LIB): created * configure.ac: added tests/ResolvedBugs ===================================Maude92a=========================================== 2008-09-17 Steven Eker * tests/Meta/metaPrintAttr (MAUDE_LIB): created * tests/Meta/metaPrintAttr.maude: created * tests/Misc/attributes (MAUDE_LIB): created * tests/Misc/attributes.maude: created 2008-09-16 Steven Eker * tests/Misc/unification.maude: added simultaneous unification examples * tests/Misc/parameterization.maude: added a check for illegally overriding an operator from a parameter theory ===================================Maude91a=========================================== 2008-04-18 Steven Eker * tests/Meta/metaUnify (MAUDE_LIB): created * tests/Misc/unification (MAUDE_LIB): created * tests/Misc/unification.maude: created ===================================Maude91=========================================== 2006-10-06 Steven Eker * tests/Meta/metaMetadata (MAUDE_LIB): Mixfix -> Main * tests/Meta/metaUpDown (MAUDE_LIB): Mixfix -> Main * tests/Meta/metaPolymorph (MAUDE_LIB): Mixfix -> Main * tests/Meta/metaModExp (MAUDE_LIB): Mixfix -> Main * tests/Meta/metaUpModExp (MAUDE_LIB): Mixfix -> Main * tests/Meta/metaUp2 (MAUDE_LIB): Mixfix -> Main * tests/Meta/metaUp (MAUDE_LIB): Mixfix -> Main * tests/Meta/metaXmatch (MAUDE_LIB): Mixfix -> Main * tests/Meta/metaXapply (MAUDE_LIB): Mixfix -> Main * tests/Meta/metaWellFormed (MAUDE_LIB): Mixfix -> Main * tests/Meta/metaTerm (MAUDE_LIB): Mixfix -> Main * tests/Meta/metaSpecial (MAUDE_LIB): Mixfix -> Main * tests/Meta/metaSort (MAUDE_LIB): Mixfix -> Main * tests/Meta/metaSearch (MAUDE_LIB): Mixfix -> Main * tests/Meta/metaRewrite (MAUDE_LIB): Mixfix -> Main * tests/Meta/metaReduce (MAUDE_LIB): Mixfix -> Main * tests/Meta/metaPrettyPrint (MAUDE_LIB): Mixfix -> Main * tests/Meta/metaParse (MAUDE_LIB): Mixfix -> Main * tests/Meta/metaModule (MAUDE_LIB): Mixfix -> Main * tests/Meta/metaMeta (MAUDE_LIB): Mixfix -> Main * tests/Meta/metaMatch (MAUDE_LIB): Mixfix -> Main * tests/Meta/metaFrewrite (MAUDE_LIB): Mixfix -> Main * tests/Meta/metaApply (MAUDE_LIB): Mixfix -> Main * tests/Misc/parameterization.maude: use new order theories * tests/Misc/dataStructures (MAUDE_LIB): Mixfix -> Main * tests/Misc/dekker (MAUDE_LIB): Mixfix -> Main * tests/Misc/commands (MAUDE_LIB): Mixfix -> Main * tests/Misc/debug (MAUDE_LIB): Mixfix -> Main * tests/Misc/parameterization (MAUDE_LIB): Mixfix -> Main * tests/Misc/diophantine (MAUDE_LIB): Mixfix -> Main * tests/Misc/renaming (MAUDE_LIB): Mixfix -> Main * tests/BuiltIn/nat (MAUDE_LIB): Mixfix -> Main * tests/BuiltIn/int (MAUDE_LIB): Mixfix -> Main * tests/BuiltIn/rat (MAUDE_LIB): Mixfix -> Main * tests/BuiltIn/string (MAUDE_LIB): Mixfix -> Main * tests/BuiltIn/counters (MAUDE_LIB): Mixfix -> Main * configure.ac: support src/Main 2006-09-13 Steven Eker * tests/Misc/parameterization.maude: rewritten with new orderings replacing TAO-SET * tests/Misc/dataStructures.maude: rewritten to test fmod SORTABLE-LIST-AND-SET ===================================Maude88a=========================================== 2006-06-28 Steven Eker * configure.ac: don't tweak -mpreferred-stack-boundary= on Intel Macs because Darwin needs 16 byte alignment 2005-11-16 Steven Eker * configure.ac: don't use Doug Lea's malloc() on x86-64/linux because of linking issues 2005-11-15 Steven Eker * configure.ac: x86-64 specific stuff ===================================Maude86d=========================================== 2005-10-06 Steven Eker * tests/Misc/diophantine.maude: created * tests/Misc/diophantine (MAUDE_LIB): created * tests/Misc/diophantine.expected: created * tests/Misc/parameterization.maude: created * tests/Misc/parameterization (MAUDE_LIB): created * tests/Misc/parameterization.expected: created 2005-10-05 Steven Eker * tests/Misc/dataStructures.expected: created * tests/Misc/dataStructures.maude: created * tests/Misc/dataStructures (MAUDE_LIB): created ===================================Maude86c=========================================== 2005-06-23 Steven Eker * tests/Misc/renaming (MAUDE_LIB): created * tests/Misc/renaming.expected: created * tests/Misc/renaming.maude: added ===================================Maude86b=========================================== 2005-01-07 Steven Eker * tests/Meta/metaPrettyPrint.maude: updated test for print option argument 2004-12-08 Steven Eker * tests/Meta/Makefile.am: added metaMetadata * tests/Meta/metaMetadata: created * tests/Meta/metaMetadata.maude: created ===================================Maude85a=========================================== 2004-12-03 Steven Eker * tests/Meta/metaSort.maude: added maximalAritySet() test; added test for glbSorts() on a kind 2004-12-01 Steven Eker * tests/Meta/metaSearch.maude: added tests for metaSearchPath() * tests/BuiltIn/Makefile.am: added counters * tests/BuiltIn/counters: created * tests/BuiltIn/counters.expected: created * tests/BuiltIn/counters.maude: created 2004-11-30 Steven Eker * configure.ac: CCFLAGS -> CFLAGS replaced ETR_SOCKET_NSL with AC_CHECK_LIB() calls for nsl and socket libraries 2004-11-29 Steven Eker * configure.ac: changed -mcpu=v8 to -march=v8 since -mcpu= is deprecated in gcc versions >= 3.1; added ETR_SOCKET_NSL 2004-10-05 Steven Eker * configure.ac: added --enable-mos option to support legacy apps 2003-09-02 Steven Eker * configure.ac: deleted AC_DEFINE([SPEED_HACKS]) 2003-07-29 Steven Eker * Created standard files that automake expects to see. Look in individual source directories for detailed changes. maude-3.1/mkinstalldirs0000755000175200017520000000341107704647736012226 00000000000000#! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain errstatus=0 dirmode="" usage="\ Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." # process command line arguments while test $# -gt 0 ; do case "${1}" in -h | --help | --h* ) # -h for help echo "${usage}" 1>&2; exit 0 ;; -m ) # -m PERM arg shift test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; } dirmode="${1}" shift ;; -- ) shift; break ;; # stop option processing -* ) echo "${usage}" 1>&2; exit 1 ;; # unknown option * ) break ;; # first non-opt arg esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac case $dirmode in '') if mkdir -p -- . 2>/dev/null; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" fi ;; *) if mkdir -m "$dirmode" -p -- . 2>/dev/null; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" fi ;; esac for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case "$pathcomp" in -* ) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr="" chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp="$pathcomp/" done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 3 # End: # mkinstalldirs ends here maude-3.1/compile0000755000175200017520000000532607705051043010762 00000000000000#! /bin/sh # Wrapper for compilers which do not understand `-c -o'. # Copyright 1999, 2000 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Usage: # compile PROGRAM [ARGS]... # `-o FOO.o' is removed from the args passed to the actual compile. prog=$1 shift ofile= cfile= args= while test $# -gt 0; do case "$1" in -o) # configure might choose to run compile as `compile cc -o foo foo.c'. # So we do something ugly here. ofile=$2 shift case "$ofile" in *.o | *.obj) ;; *) args="$args -o $ofile" ofile= ;; esac ;; *.c) cfile=$1 args="$args $1" ;; *) args="$args $1" ;; esac shift done if test -z "$ofile" || test -z "$cfile"; then # If no `-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # `.c' file was seen then we are probably linking. That is also # ok. exec "$prog" $args fi # Name of file we expect compiler to create. cofile=`echo $cfile | sed -e 's|^.*/||' -e 's/\.c$/.o/'` # Create the lock directory. # Note: use `[/.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo $cofile | sed -e 's|[/.-]|_|g'`.d while true; do if mkdir $lockdir > /dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir $lockdir; exit 1" 1 2 15 # Run the compile. "$prog" $args status=$? if test -f "$cofile"; then mv "$cofile" "$ofile" fi rmdir $lockdir exit $status maude-3.1/configure.ac0000755000175200017520000002341413741175466011710 00000000000000# Process this file with autoconf to produce a configure script. # # Initialize autoconf stuff. # AC_INIT(Maude, 3.1, [maude-bugs@lists.cs.illinois.edu]) # # Allow directory names that look like macros. # m4_pattern_allow([AU_Persistent]) m4_pattern_allow([AU_Theory]) # # Local macros. # AC_CONFIG_MACRO_DIRS([m4]) # # Figure out system we are building for and set $host shell variable. # AC_CANONICAL_HOST # # Initialize automake stuff. # AM_INIT_AUTOMAKE # # Cause defines to be put in a header file rather than passed as # compiler flags. # AC_CONFIG_HEADER(config.h) # # If the user set CFLAGS or CXXFLAGS we leave them alone. # Otherwise we set them to -g -Wall to stop AC_PROG_CC and # AC_PROG_CXX from setting them. # USER_SET_CFLAGS=yes if (test -z "$CFLAGS") then USER_SET_CFLAGS=no CFLAGS="-g -Wall" fi USER_SET_CXXFLAGS=yes if (test -z "$CXXFLAGS") then USER_SET_CXXFLAGS=no CXXFLAGS="-g -Wall" fi # # *** PROGRAMS *** # AC_PROG_CC AC_PROG_CXX if (test "$GXX" = yes) then AC_MSG_CHECKING([g++ compiler version]) GXX_VERSION=`$CXX -dumpversion` AC_MSG_RESULT($GXX_VERSION) fi AC_PROG_RANLIB if (test -z "$BISON") then BISON="bison" fi AC_SUBST(BISON) if (test -z "$FLEX") then FLEX="flex" fi AC_SUBST(FLEX) # # *** SYSTEM CALLS *** # AX_HAVE_PPOLL(AC_DEFINE([HAVE_PPOLL], [], [use ppoll()])) # # *** LIBRARIES *** # # # Figure out what libraries need to be linked in to use sockets. # #AC_CHECK_LIB(nsl, inet_addr) # Adds unnecessary dependencies to the binaries in Linux AC_CHECK_LIB(socket, socket) # # Check if user set particular Buddy library to use and if # not set default. # if (test -z "$BUDDY_LIB") then BUDDY_LIB="-lbdd" fi AC_SUBST(BUDDY_LIB) # # Check to see if we should use Yices2 for SMT solving. # AC_ARG_WITH(yices2, AC_HELP_STRING([--with-yices2], [use Yices2 SMT solver library [default=yes]]), [WITH_YICES2=$withval], [WITH_YICES2=yes]) if (test $WITH_YICES2 = yes) then # # Check if user set a particular Yices2 library to use and if # not set default. # AC_DEFINE([USE_YICES2], [], [use Yices2 SMT solver library]) if (test -z "$YICES2_LIB") then YICES2_LIB="-lyices" fi AC_SUBST(YICES2_LIB) else YICES2_LIB="" fi # # Check to see if we should use CVC4 for SMT solving. # AC_ARG_WITH(cvc4, AC_HELP_STRING([--with-cvc4], [use CVC4 SMT solver library [default=no]]), [WITH_CVC4=$withval], [WITH_CVC4=no]) if (test $WITH_CVC4 = yes) then # # Check if user set a particular CVC4 library to use and if # not set default. # AC_DEFINE([USE_CVC4], [], [use CVC4 SMT solver library]) if (test -z "$CVC4_LIB") then CVC4_LIB="-lcvc4" fi AC_SUBST(CVC4_LIB) # # CVC4 needs the clock_gettime() function from the POSIX Realtime Extensions library. # AC_CHECK_LIB(rt, clock_gettime) else CVC4_LIB="" fi # # Check to see if we should use Tecla for command line editing. # AC_ARG_WITH(tecla, AC_HELP_STRING([--with-tecla], [use Tecla command line editing library [default=yes]]), [WITH_TECLA=$withval], [WITH_TECLA=yes]) if (test $WITH_TECLA = yes) then # # Check if user set particular Tecla libraries to use and if # not set defaults. # AC_DEFINE([USE_TECLA], [], [use Tecla command line editing library]) if (test -z "$TECLA_LIBS") then TECLA_LIBS="-ltecla -lcurses" fi else TECLA_LIBS="" fi AC_SUBST(TECLA_LIBS) # # Check to see if we should use libsigsegv to handle segmentation faults. # AC_ARG_WITH(libsigsegv, AC_HELP_STRING([--with-libsigsegv], [use libsigsegv to handle segmentation faults [default=yes]]), [WITH_LIBSIGSEGV=$withval], [WITH_LIBSIGSEGV=yes]) if (test $WITH_LIBSIGSEGV = yes) then # # Check if user set particular libsigsegv to use and if # not set default. # AC_DEFINE([USE_LIBSIGSEGV], [], [use libsigsegv to handle segmentation faults]) if (test -z "$LIBSIGSEGV_LIB") then LIBSIGSEGV_LIB="-lsigsegv" fi else LIBSIGSEGV_LIB="" fi AC_SUBST(LIBSIGSEGV_LIB) # # Check if user set particular GMP libraries to use and if # not set defaults. # if (test -z "$GMP_LIBS") then GMP_LIBS="-lgmpxx -lgmp" fi AC_SUBST(GMP_LIBS) # # Check if the user set particular GCC libraries to use - otherwise # let the compiler pick. # if (test -z "$GCC_LIBS") then GCC_LIBS="" fi AC_SUBST(GCC_LIBS) # # *** HEADERS *** # AC_LANG(C++) AC_HEADER_TIME AC_CHECK_HEADERS(sys/time.h) AC_CHECK_HEADERS(math.h) AC_CHECK_HEADERS(ieeefp.h) AC_CHECK_HEADERS(sys/termios.h) AC_CHECK_HEADERS(stddef.h) AC_CHECK_HEADERS(limits.h) AC_CHECK_HEADERS(stdlib.h) AC_CHECK_HEADERS(stdio.h) AC_CHECK_HEADERS(ctype.h) AC_CHECK_HEADERS(unistd.h) AC_CHECK_HEADERS(ostream) AC_CHECK_HEADERS(ostream.h) # # *** SIZES *** # AC_CHECK_SIZEOF(short) AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(unsigned long) AC_CHECK_SIZEOF(void *) # # Check to see if we are debugging. # If we are not debugging, assume we are optimizing. # AC_ARG_ENABLE(debug, AC_HELP_STRING([--enable-debug], [no optimization, runtime checks, dump routines [default=no]]), [DEBUGGING=$enableval], [DEBUGGING=no]) if (test "$DEBUGGING" = yes) then AC_DEFINE([DUMP], [], [include dump code]) else AC_DEFINE([NO_ASSERT], [], [don't do runtime checks]) AC_DEFINE([LOCAL_INLINES], [], [inline and discard selected local functions]) # # Set compiler optimization flags if user didn't set CXXFLAGS. # if (test "$GXX" = yes) then OFLAGS="-O2 -fomit-frame-pointer -fforce-addr" case $GXX_VERSION in 3.*) OFLAGS="$OFLAGS -finline-limit=10000" ;; 4.*) OFLAGS="$OFLAGS -finline-limit=10000" ;; esac else OFLAGS="-O" fi if (test $USER_SET_CFLAGS = no) then CFLAGS="$CFLAGS $OFLAGS" fi if (test $USER_SET_CXXFLAGS = no) then CXXFLAGS="$CXXFLAGS $OFLAGS" fi # # Performance tweaks for known hosts. # TWEAKFLAGS="" case $host in sparc-*) # # We assume the v8 instruction set as a baseline in order to # have multiplication and division instructions (gcc defaults # to v7 which does not) but schedule for a more recent v9 # implementation. # TWEAKFLAGS="-march=v8 -mtune=ultrasparc" ;; *-darwin*) # # Changing the stack boundary causes problems on x86 Macs. # ;; # # For the Intel x86 family we select the smallest stack alignment # in order to trade speed for memory on deeply recursive calls. # The Pentium Pro and later have conditional move instructions, # which out-perform various bit twiddling tricks, but gcc will # only use them if given -march=i686. # i386-*) TWEAKFLAGS="-march=i386 -mpreferred-stack-boundary=2" ;; i486-*) TWEAKFLAGS="-march=i486 -mpreferred-stack-boundary=2" ;; i586-*) TWEAKFLAGS="-march=i586 -mpreferred-stack-boundary=2" ;; i686-*) TWEAKFLAGS="-march=i686 -mpreferred-stack-boundary=2" if (test $USER_SET_CXXFLAGS = no) then AC_DEFINE([HAVE_CMOV], [], [have conditional move instruction]) fi ;; # # The x86-64 supports conditional moves and gcc will use # them without being given additional flags. Smallest legal # stack alignment is 4. # x86_64-*) TWEAKFLAGS="-mpreferred-stack-boundary=4" AC_DEFINE([HAVE_CMOV], [], [have conditional move instruction]) ;; # # The DEC Alpha supports conditional moves and gcc will use # them without being given additional flags. # alpha*) AC_DEFINE([HAVE_CMOV], [], [have conditional move instruction]) ;; esac if (test $USER_SET_CFLAGS = no) && (test $GCC = yes) then CFLAGS="$CFLAGS $TWEAKFLAGS" fi if (test $USER_SET_CXXFLAGS = no) && (test $GXX = yes) then CXXFLAGS="$CXXFLAGS $TWEAKFLAGS" fi fi # # Fixes for known hosts. # FIXFLAGS="" case $host in # # Needed to handle +/- infinity and underflow without # causing a SIGFPE. # alpha*) FIXFLAGS="-mieee" ;; # # (no longer deal with dlmalloc) # x86_64-*-linux-*) ;; # # (no longer deal with dlmalloc) # *-darwin*) AC_DEFINE([DARWIN], [], [enable Darwin specific fixes]) ;; esac if (test $USER_SET_CFLAGS = no) && (test $GCC = yes) then CFLAGS="$CFLAGS $FIXFLAGS" fi if (test $USER_SET_CXXFLAGS = no) && (test $GXX = yes) then CXXFLAGS="$CXXFLAGS $FIXFLAGS" fi # # Needed defines. # # Check to see if we should build the compiler. # AC_ARG_ENABLE(compiler, AC_HELP_STRING([--enable-compiler], [build the experimental integrated compiler [default=no]]), [COMPILER=$enableval], [COMPILER=no]) if (test "$COMPILER" = yes) then AC_DEFINE([COMPILER], [], [build the experimental integrated compiler]) AC_DEFINE([ANNOTATED], [], [annotate comiler output]) fi # # Check to see if we should support MOS oracles. # AC_ARG_ENABLE(mos, AC_HELP_STRING([--enable-mos], [support MOS oracles (DO NOT USE!) [default=no]]), [MOS=$enableval], [MOS=no]) if (test "$MOS" = yes) then AC_DEFINE([MOS], [], [support MOS oracles]) fi # # Conditional compilation and linking. # AM_CONDITIONAL(BUILD_COMPILER, test $COMPILER = yes) AC_CONFIG_FILES([Makefile src/Makefile src/3rdParty/Makefile src/Utility/Makefile src/Parser/Makefile src/Temporal/Makefile src/Interface/Makefile src/Core/Makefile src/Variable/Makefile src/NA_Theory/Makefile src/ACU_Persistent/Makefile src/ACU_Theory/Makefile src/AU_Persistent/Makefile src/AU_Theory/Makefile src/CUI_Theory/Makefile src/S_Theory/Makefile src/FreeTheory/Makefile src/Higher/Makefile src/BuiltIn/Makefile src/IO_Stuff/Makefile src/ObjectSystem/Makefile src/Meta/Makefile src/FullCompiler/Makefile src/StrategyLanguage/Makefile src/Mixfix/Makefile src/SMT/Makefile src/Main/Makefile tests/Makefile tests/BuiltIn/Makefile tests/Meta/Makefile tests/Misc/Makefile tests/ResolvedBugs/Makefile tests/StrategyLanguage/Makefile ]) AC_OUTPUT maude-3.1/INSTALL0000755000175200017520000001075313576046423010451 00000000000000Prerequisites ============= Maude requires following the tools: GNU gcc http://gcc.gnu.org/ GNU bison http://www.gnu.org/software/bison/ flex https://github.com/westes/flex It is recommended that you use the latest versions of bison and flex since Maude is known to tickle bugs in certain older versions. You should use gcc 5.2 or later as there are code generation issues with earlier versions. Maude requires the following packages: GNU gmp https://gmplib.org/ GNU libsigsegv https://www.gnu.org/software/libsigsegv/ Tecla http://www.astro.caltech.edu/~mcs/tecla/ BuDDY http://sourceforge.net/projects/buddy CVC4 (optional) https://cvc4.github.io/ Yices2 (optional) https://github.com/SRI-CSL/yices2 Configuring the 3rd party packages ================================== Because of C++ ABI incompatibilities, GNU gmp, BuDDy and CVC4 must be compiled with the same compiler you will use for Maude. GNU gmp must be configured with --enable-cxx to generate the C++ bindings. The option --disable-shared is recommended to avoid linking issues on various platforms. It is recommended that Tecla be configured with CFLAGS set to "-O2 -D_POSIX_C_SOURCE=1". This has the effect of using the thread unsafe library calls which avoids binary compatibility issues on various platforms. It is recommended that Tecla is built and installed with the command: make TARGETS=normal TARGET_LIBS=static install to avoid linking issues on various platforms. As of 2.4 BuDDy has moved to autoconf. The option --disable-shared is recommended to avoid linking issues on various platforms. Yices2 must be built from source, and does not support building in an architecture specific subdirectory. It is recommend that the latest release be used as some ealier releases export a function, tputs(), that conflicts with the function of the same name in the curses/ncurses system library that is needed by Tecla. Building Maude ============== Only one of CVC4 and Yices2 should be linked to provide an SMT backend. By default, Maude is configured to use Yices2. If everything is installed in standard places you can configure and build Maude with the commands: ./configure make Passing --with-yices2=no --with-cvc4=yes to configure will use CVC4 instead of Yices2. Passing both options as no will build Maude without SMT support. A very basic test suite can be run using the command: make check If you installed any of the 3rd party packages in non-standard places you can indicate where the header files are by setting CPPFLAGS and where the library files by setting LDFLAGS. If you have multiple versions of any these libraries in your environment you can select particular versions explicitly by setting: GMP_LIBS (defaults to -lgmpxx -lgmp) LIBSIGSEGV_LIB (defaults to -lsigsegv) TECLA_LIBS (defaults to -ltecla -lcurses) BUDDY_LIB (defaults to -lbuddy) CVC4_LIB (defaults to -lcvc4) YICES2_LIB (defaults to -lyices) A more realistic configure to make, check and install a static binary using a separate build tree might look something like: mkdir Build cd Build ../configure \ CPPFLAGS="-I/home/me/include" \ LDFLAGS="-static -L/home/me/lib" \ GMP_LIBS="/home/me/lib/libgmpxx.a /home/me/lib/libgmp.a" make make check make install The maude binary is installed in $(bindir) and the .maude files are installed in $(datadir). In order for the Maude binary to find the .maude files you should set the environment variable MAUDE_LIB to point to $(datadir). Alternatively you could move the .maude files to $(bindir). Note that if your CVC4 library is built using CLN then you must also link this library (-lcln). Note for Mac users ================== As of Mavericks, Apple no longer supports gcc so Maude must be compiled with clang. The easiest way is to install the Mac Ports version of each of the needed tools and libraries (except Yices2 and CVC4 which must built from source - the Mac Ports version of CVC4 is too old and will cause runtime failures). With Mac Ports installed in /opt/local to build a version without SMT support, I use the configuration line: ../configure \ --with-yices2=no \ --with-cvc4=no \ CC=cc \ CXX=c++ \ FLEX=/opt/local/bin/flex \ BISON=/opt/local/bin/bison \ CFLAGS="-Wall -O2 -I/opt/local/include -fno-stack-protector -fstrict-aliasing" \ CXXFLAGS="-Wall -O2 -I/opt/local/include -fno-stack-protector -fstrict-aliasing" \ BUDDY_LIB="/opt/local/lib/libbdd.a" \ TECLA_LIBS="/opt/local/lib/libtecla.a /usr/lib/libncurses.dylib" \ LIBSIGSEGV_LIB="/opt/local/lib/libsigsegv.a" \ GMP_LIBS="/opt/local/lib/libgmp.a /opt/local/lib/libgmpxx.a" maude-3.1/tests/0000755000175200017520000000000013741222371010621 500000000000000maude-3.1/tests/BuiltIn/0000755000175200017520000000000013741222371012167 500000000000000maude-3.1/tests/BuiltIn/counters.expected0000644000175200017520000001155113140674013015474 00000000000000========================================== rewrite in COUNTER-TEST : counter . rewrites: 1 result Zero: 0 ========================================== rewrite in COUNTER-TEST : f(11) . rewrites: 23 result List: 0 1 2 3 4 5 6 7 8 9 10 ========================================== rewrite in COUNTER-TEST : f(11) . rewrites: 23 result List: 0 1 2 3 4 5 6 7 8 9 10 ========================================== rewrite in COUNTER-TEST : f(11) . rewrites: 23 result List: 11 12 13 14 15 16 17 18 19 20 21 ========================================== rewrite in COUNTER-TEST : f(11) . rewrites: 23 result List: 0 1 2 3 4 5 6 7 8 9 10 ========================================== rewrite in COUNTER-TEST2 : random(counter) . rewrites: 2 result NzNat: 2357136044 ========================================== rewrite in COUNTER-TEST2 : f(11) . rewrites: 34 result List: 2357136044 2546248239 3071714933 3626093760 2588848963 3684848379 2340255427 3638918503 1819583497 2678185683 2774094101 ========================================== rewrite in COUNTER-TEST2 : f(100) . rewrites: 301 result List: 2357136044 2546248239 3071714933 3626093760 2588848963 3684848379 2340255427 3638918503 1819583497 2678185683 2774094101 1650906866 1879422756 1277901399 3830135878 243580376 4138900056 1171049868 1646868794 2051556033 3400433126 3488238119 2271586391 2061486254 2439732824 1686997841 3975407269 3590930969 305097549 1449105480 374217481 2783877012 86837363 1581585360 3576074995 4110950085 3342157822 602801999 3736673711 3736996288 4203133778 2034131043 3432359896 3439885489 1982038771 2235433757 3352347283 2915765395 507984782 3095093671 2748439840 2499755969 615697673 2308000441 4057322111 3258229280 2241321503 454869706 1780959476 2034098327 1136257699 800291326 3325308363 3165039474 1959150775 930076700 2441405218 580757632 80701568 1392175012 2652724277 642848645 2628931110 954863080 2649711348 1659957521 4053367119 3876630916 2928395881 1932520490 1544074682 2633087519 1877037944 3875557633 2996303169 426405863 258666409 4165298233 2863741219 2805215078 2880367735 734051083 903586222 1538251858 553734235 3224172416 1354754446 2610612835 1562125877 1396067212 ========================================== rewrite in FOO : a . rewrites: 1 result Foo: b ========================================== rewrite in FOO : a . rewrites: 1 result Foo: b ========================================== rewrite in FOO : a . rewrites: 1 result Foo: c ========================================== rewrite in FOO : a . rewrites: 1 result Foo: d ========================================== rewrite in FOO : a . rewrites: 1 result Foo: e ========================================== rewrite in FOO : a . rewrites: 1 result Foo: b ========================================== rewrite in FOO : a . rewrites: 1 result Foo: b ========================================== rewrite in COUNTER-TEST3 : f(4) . *********** equation eq f(s N) = counter f(N) . N --> 3 f(4) ---> counter f(3) *********** equation eq f(s N) = counter f(N) . N --> 2 f(3) ---> counter f(2) *********** equation eq f(s N) = counter f(N) . N --> 1 f(2) ---> counter f(1) *********** equation eq f(s N) = counter f(N) . N --> 0 f(1) ---> counter f(0) *********** equation eq f(0) = nil . empty substitution f(0) ---> nil *********** rule (built-in rule for symbol counter) counter ---> 0 0 *********** rule (built-in rule for symbol counter) counter ---> 1 1 ========================================== rewrite in COUNTER-TEST3 : counter . rewrites: 1 result Zero: 0 rewrites: 9 result List: 0 1 1 2 ========================================== frewrite in COUNTER-TEST3 : f(4) . *********** equation eq f(s N) = counter f(N) . N --> 3 f(4) ---> counter f(3) *********** equation eq f(s N) = counter f(N) . N --> 2 f(3) ---> counter f(2) *********** equation eq f(s N) = counter f(N) . N --> 1 f(2) ---> counter f(1) *********** equation eq f(s N) = counter f(N) . N --> 0 f(1) ---> counter f(0) *********** equation eq f(0) = nil . empty substitution f(0) ---> nil *********** rule (built-in rule for symbol counter) counter ---> 0 0 *********** rule (built-in rule for symbol counter) counter ---> 1 1 ========================================== rewrite in COUNTER-TEST3 : counter . rewrites: 1 result Zero: 0 rewrites: 9 result List: 0 1 1 2 ========================================== rewrite [4] in COUNTER-TEST3 : f(8) . rewrites: 13 result [List]: 0 1 2 3 counter counter counter counter rewrites: 4 result List: 0 1 2 3 4 5 6 7 ========================================== rewrite in COUNTER-TEST4 : f(4) . rewrites: 13 result List: 0 0 1 1 2 2 3 3 ========================================== search in COUNTER-TEST4 : f(4) =>* L:List . No solution. states: 1 rewrites: 5 ========================================== reduce in META-LEVEL : metaRewrite(['COUNTER-TEST4], '__['counter.Nat, 'counter.Nat], 2) . rewrites: 4 result ResultPair: {'__['0.Zero,'s_['0.Zero]],'List} Bye. maude-3.1/tests/BuiltIn/counters.maude0000644000175200017520000000335310153437424014773 00000000000000set show timing off . set show advisories off . mod COUNTER-TEST is inc COUNTER . sort List . subsort Nat < List . op __ : List List -> List [assoc id: nil] . op nil : -> List . op f : Nat -> List . var N : Nat . eq f(s N) = counter f(N) . eq f(0) = nil . endm rew counter . rew f(11) . rew f(11) . set clear rules off . rew f(11) . set clear rules on . rew f(11) . mod COUNTER-TEST2 is inc COUNTER . inc RANDOM . sort List . subsort Nat < List . op __ : List List -> List [assoc id: nil] . op nil : -> List . op f : Nat -> List . var N : Nat . eq f(s N) = random(counter) f(N) . eq f(0) = nil . endm rew random(counter) . rew f(11) . rew f(100) . mod FOO is sort Foo . ops a b c d e : -> Foo . rl a => b . rl a => c . rl a => d . rl a => e . endm rew a . rew a . set clear rules off . rew a . rew a . rew a . rew a . set clear rules on . rew a . mod COUNTER-TEST3 is inc COUNTER . sort List . subsort Nat < List . op __ : List List -> List [assoc id: nil] . op nil : -> List . op f : Nat -> List . var N : Nat . eq f(s N) = counter f(N) . eq f(0) = nil . endm debug rew f(4) . step . step . step . step . step . step . step . rew counter . resume . debug frew f(4) . step . step . step . step . step . step . step . rew counter . resume . rew [4] f(8) . cont . mod COUNTER-TEST4 is inc COUNTER . inc COUNTER * (op counter to counter2) . sort List . subsort Nat < List . op __ : List List -> List [assoc id: nil] . op nil : -> List . op f : Nat -> List . var N : Nat . eq f(s N) = counter (counter2 f(N)) . eq f(0) = nil . endm rew f(4) . search f(4) =>* L:List . red in META-LEVEL : metaRewrite(['COUNTER-TEST4], '__['counter.Nat, 'counter.Nat], 2) . maude-3.1/tests/BuiltIn/string.expected0000644000175200017520000002340313334414150015136 00000000000000========================================== reduce in STRING : ascii("A") . rewrites: 1 result NzNat: 65 ========================================== reduce in STRING : ascii("AB") . rewrites: 0 result [FindResult]: ascii("AB") ========================================== reduce in STRING : length("AAA") . rewrites: 1 result NzNat: 3 ========================================== reduce in STRING : length("") . rewrites: 1 result Zero: 0 ========================================== reduce in STRING : length("abcdefghijklmnopqrstuvwxyz") . rewrites: 1 result NzNat: 26 ========================================== reduce in STRING : substr("abcdefghijklmnopqrstuvwxyz", 10, 5) . rewrites: 1 result String: "klmno" ========================================== reduce in STRING : substr("abcdefghijklmnopqrstuvwxyz", 1000000000000000000, 5) . rewrites: 1 result String: "" ========================================== reduce in STRING : substr("abcdefghijklmnopqrstuvwxyz", 10, 500000000000000000) . rewrites: 1 result String: "klmnopqrstuvwxyz" ========================================== reduce in STRING : substr("abcdefghijklmnopqrstuvwxyz", 0, 5) . rewrites: 1 result String: "abcde" ========================================== reduce in STRING : substr("abcdefghijklmnopqrstuvwxyz", 10, 0) . rewrites: 1 result String: "" ========================================== reduce in STRING : find("abcdefghijabcdefghij", "cde", 0) . rewrites: 1 result NzNat: 2 ========================================== reduce in STRING : find("abcdefghijabcdefghij", "cde", 1) . rewrites: 1 result NzNat: 2 ========================================== reduce in STRING : find("abcdefghijabcdefghij", "cde", 2) . rewrites: 1 result NzNat: 2 ========================================== reduce in STRING : find("abcdefghijabcdefghij", "cde", 3) . rewrites: 1 result NzNat: 12 ========================================== reduce in STRING : find("abcdefghijabcdefghij", "cde", 30000000000000000000000) . rewrites: 1 result FindResult: notFound ========================================== reduce in STRING : rfind("abcdefghijabcdefghij", "cde", 0) . rewrites: 1 result FindResult: notFound ========================================== reduce in STRING : rfind("abcdefghijabcdefghij", "cde", 1) . rewrites: 1 result FindResult: notFound ========================================== reduce in STRING : rfind("abcdefghijabcdefghij", "cde", 2) . rewrites: 1 result NzNat: 2 ========================================== reduce in STRING : rfind("abcdefghijabcdefghij", "cde", 12) . rewrites: 1 result NzNat: 12 ========================================== reduce in STRING : rfind("abcdefghijabcdefghij", "cde", 13) . rewrites: 1 result NzNat: 12 ========================================== reduce in STRING : rfind("abcdefghijabcdefghij", "cde", 30000000000000000000000) . rewrites: 1 result NzNat: 12 ========================================== reduce in STRING : char(65) . rewrites: 1 result Char: "A" ========================================== reduce in STRING : char(2000) . rewrites: 0 result [String]: char(2000) ========================================== reduce in STRING : char(20000000000000000000000) . rewrites: 0 result [String]: char(20000000000000000000000) ========================================== reduce in STRING : char(0) . rewrites: 1 result Char: "\000" ========================================== reduce in STRING : char(255) . rewrites: 1 result Char: "\377" ========================================== reduce in STRING : "test" . rewrites: 0 result String: "test" ========================================== reduce in STRING : "test" + "2" . rewrites: 1 result String: "test2" ========================================== reduce in STRING : substr("cat", 1, 1) . rewrites: 1 result Char: "a" ========================================== reduce in STRING : substr("\n\r\f", 1, 1) . rewrites: 1 result Char: "\r" ========================================== reduce in STRING : "\a" . rewrites: 0 result Char: "\a" ========================================== reduce in STRING : substr("a\"\"b", 0, 0) . rewrites: 1 result String: "" ========================================== reduce in STRING : substr("a\"\"b", 0, 2) . rewrites: 1 result String: "a\"" ========================================== reduce in STRING : substr("a\"\"b", 0, 100) . rewrites: 1 result String: "a\"\"b" ========================================== reduce in STRING : substr("a\"\"b", 3, 1) . rewrites: 1 result Char: "b" ========================================== reduce in STRING : substr("a\"\"b", 4, 1) . rewrites: 1 result String: "" ========================================== reduce in STRING : "abracadabra" < "aardvark" . rewrites: 1 result Bool: false ========================================== reduce in STRING : "AAA" < "aardvark" . rewrites: 1 result Bool: true ========================================== reduce in STRING : length("aardvark") . rewrites: 1 result NzNat: 8 ========================================== reduce in STRING : "abc" == "a" + "b" + "c" . rewrites: 3 result Bool: true ========================================== reduce in STRING : find("catcat", "tc", 0) . rewrites: 1 result NzNat: 2 ========================================== reduce in STRING : find("catcat", "jr", 0) . rewrites: 1 result FindResult: notFound ========================================== reduce in STRING : rfind("catcat", "t", 10) . rewrites: 1 result NzNat: 5 ========================================== reduce in STRING : rfind("catcat", "t", 4) . rewrites: 1 result NzNat: 2 ========================================== reduce in STRING : "\000" . rewrites: 0 result Char: "\000" ========================================== reduce in STRING : "\377" . rewrites: 0 result Char: "\377" ========================================== reduce in STRING : "\00399" . rewrites: 0 result String: "\00399" ========================================== reduce in STRING : "?" . rewrites: 0 result Char: "?" ========================================== reduce in STRING : " " . rewrites: 0 result Char: " " ========================================== reduce in STRING : "A" . rewrites: 0 result Char: "A" Warning: , line 80: ambiguous term, two parses are: Foo : ("this is not a string").Foo -versus- String : ("this is not a string").String Arbitrarily taking the first as correct. ========================================== reduce in FOO : ("this is not a string").Foo . rewrites: 0 result Foo: ("this is not a string").Foo ========================================== reduce in FOO : ("this is not a string").Foo . rewrites: 0 result Foo: ("this is not a string").Foo ========================================== reduce in FOO : ("this is not a string").String . rewrites: 0 result String: ("this is not a string").String ========================================== reduce in FOO : "this is a string" . rewrites: 0 result String: "this is a string" ========================================== reduce in STRING : "this is a really long string; this is a really long string; this is a really long string; this is a really long string; this is a really long string." . rewrites: 0 result String: "this is a really long string; this is a really long string; this is a really long string; this is a really long string; this is a really long string." ========================================== reduce in STRING : char(65) . rewrites: 1 result Char: "A" ========================================== reduce in STRING : ascii(" ") . rewrites: 1 result NzNat: 32 ========================================== reduce in STRING : ascii("aa") . rewrites: 0 result [FindResult]: ascii("aa") ========================================== reduce in STRING : char(1000) . rewrites: 0 result [String]: char(1000) ========================================== reduce in STRING : lowerCase("a") . rewrites: 1 result Char: "a" ========================================== reduce in STRING : lowerCase("A") . rewrites: 1 result Char: "a" ========================================== reduce in STRING : lowerCase("123AAAaaa123aaaAAA123") . rewrites: 1 result String: "123aaaaaa123aaaaaa123" ========================================== reduce in STRING : lowerCase("AAAaaa123AAAaaa123aaaAAA123") . rewrites: 1 result String: "aaaaaa123aaaaaa123aaaaaa123" ========================================== reduce in STRING : lowerCase("abcdef") . rewrites: 1 result String: "abcdef" ========================================== reduce in STRING : lowerCase("abcdeF") . rewrites: 1 result String: "abcdef" ========================================== reduce in STRING : lowerCase("AbCdEf") . rewrites: 1 result String: "abcdef" ========================================== reduce in STRING : lowerCase("aBcDeF") . rewrites: 1 result String: "abcdef" ========================================== reduce in STRING : lowerCase("ABCDEF") . rewrites: 1 result String: "abcdef" ========================================== reduce in STRING : upperCase("a") . rewrites: 1 result Char: "A" ========================================== reduce in STRING : upperCase("A") . rewrites: 1 result Char: "A" ========================================== reduce in STRING : upperCase("123AAAaaa123aaaAAA123") . rewrites: 1 result String: "123AAAAAA123AAAAAA123" ========================================== reduce in STRING : upperCase("AAAaaa123AAAaaa123aaaAAA123") . rewrites: 1 result String: "AAAAAA123AAAAAA123AAAAAA123" ========================================== reduce in STRING : upperCase("abcdef") . rewrites: 1 result String: "ABCDEF" ========================================== reduce in STRING : upperCase("abcdeF") . rewrites: 1 result String: "ABCDEF" ========================================== reduce in STRING : upperCase("AbCdEf") . rewrites: 1 result String: "ABCDEF" ========================================== reduce in STRING : upperCase("aBcDeF") . rewrites: 1 result String: "ABCDEF" ========================================== reduce in STRING : upperCase("ABCDEF") . rewrites: 1 result String: "ABCDEF" Bye. maude-3.1/tests/BuiltIn/Makefile.am0000644000175200017520000000045110153435227014143 00000000000000TESTS = \ nat \ int \ rat \ string \ counters MAUDE_FILES = \ nat.maude \ int.maude \ rat.maude \ string.maude \ counters.maude RESULT_FILES = \ nat.expected \ int.expected \ rat.expected \ string.expected \ counters.expected EXTRA_DIST = $(TESTS) $(MAUDE_FILES) $(RESULT_FILES) maude-3.1/tests/BuiltIn/int.maude0000644000175200017520000000277010025656463013731 00000000000000set show timing off . set show advisories off . select INT . red - - s 0 . red - 0 . red - s_^2(0) + s_^5(0) . red s_^10(0) + - s_(0) . red s_^10(0) + - s_^11(0) . red - s_^2(0) * s_^5(0) . red s_^10(0) - s_^11(0) . red s 0 * - s s 0 . red s 0 * - s 0 . red s_^10(0) quo - s_^4(0) . red - s_^10(0) rem s_^4(0) . red - s_^10(0) ^ s_^4(0) . red - s_^2(0) ^ s_^7(0) . red s_^2(0) ^ s_^7(0) . red abs(- s_^140(0)) . red abs(s_^140(0)) . red gcd(gcd(- s_^120(0), X:Nat), gcd(- s_^140(0), Y:Nat)) . red gcd(s_^124(0), - s_^346(0), s_^768(0)) . red gcd(- s_^10(0), s_^8(0)) . red lcm(lcm(- s_^120(0), X:Nat), lcm(- s_^140(0), Y:Nat)) . red lcm(s_^124(0), - s_^346(0), s_^768(0)) . red lcm(- s_^10(0), - s_^8(0)) . red s 0 xor - s s 0 . red s 0 xor - s 0 . red - s 0 xor s 0 . red s 0 & - s s 0 . red s 0 & - s 0 . red - s 0 & s 0 . red s 0 | - s s 0 . red s 0 | - s 0 . red - s s 0 | s 0 . red - s 0 << s s s 0 . red - s_^128(0) >> s s s 0 . red s 0 < - s s 0 . red - s 0 < s 0 . red s 0 <= - s s 0 . red - s 0 <= s 0 . red - s 0 > s s 0 . red s 0 > - s 0 . red s 0 >= - s s 0 . red - s 0 >= s 0 . red - s_^3(0) divides s_^10(0) . red s_^3(0) divides - s_^9(0) . red 1 . red -1 . red 2 + -1 . red -8888888888888888888888888888888888888888888888888888888 . red -42 . set print number off . red - 0 . red 2 ^ 200000000000000000000 . red 1 ^ 200000000000000000000 . red -1 ^ 200000000000000000000 . red -1 ^ 200000000000000000001 . red 0 ^ 200000000000000000001 . red 1 << 200000000000000000001 . red 0 << 200000000000000000001 . maude-3.1/tests/BuiltIn/nat.maude0000644000175200017520000000331010025656407013706 00000000000000set show timing off . set show advisories off . select NAT . red s 0 + s s 0 . red s 0 + s 0 . red _+_(s 0, N:Nat, s 0) . red sd(s s 0, s s s 0) . red sd(s_^3(0), s_^10(0)) . red sd(s_^10(0), s_^4(0)) . red s 0 * s s 0 . red s 0 * s 0 . red s_^10(0) quo s_^4(0) . red s_^10(0) rem s_^4(0) . red s_^10(0) ^ s_^4(0) . red modExp(s_^37(0), s_^1000000000000002(0), s_^100(0)) . red modExp(s_^37(0), s_^1000000000000002(0), s_^1000003(0)) . red modExp(s_^100200300400(0), s_^1000000000000002(0), s_^1000003(0)) . red gcd(gcd(s_^120(0), X:Nat), gcd(s_^140(0), Y:Nat)) . red gcd(s_^124(0), s_^346(0), s_^768(0)) . red lcm(lcm(s_^120(0), X:Nat), lcm(s_^140(0), Y:Nat)) . red lcm(s_^124(0), s_^346(0), s_^768(0)) . red s 0 xor s s 0 . red s 0 xor s 0 . red s 0 & s s 0 . red s 0 & s 0 . red s 0 | s s 0 . red s 0 | s 0 . red s 0 << s s s 0 . red s_^128(0) >> s s s 0 . red s 0 < s s 0 . red s 0 < s 0 . red s 0 <= s s 0 . red s 0 <= s 0 . red s 0 > s s 0 . red s 0 > s 0 . red s 0 >= s s 0 . red s 0 >= s 0 . red s_^3(0) divides s_^10(0) . red s_^3(0) divides s_^9(0) . fmod FACT is inc NAT . op _! : Nat -> NzNat . var N : Nat . eq 0 ! = s 0 . eq (s N) ! = s N * N ! . endfm red s_^100(0) ! . red s_^1000(0) ! . fmod MOD3 is inc NAT . eq s_^3(0) = 0 . endfm red s_^4(0) . fmod FACT' is inc NAT . op _! : Nat -> NzNat . var N : Nat . eq 0 ! = 1 . eq (s N) ! = (s N) * N ! . endfm red 100 ! . red 1000 ! . fmod MOD3' is inc NAT . eq 3 = 0 . endfm red 4445 . select NAT . red 8888888888888888888888888888888888888888888888888888888 . red s_^123456789(s_^123456789(0)) . select NAT . set print graph on . red 123 . set trace on . set trace whole on . red 4 + 5 . set trace off . set print graph off . maude-3.1/tests/BuiltIn/nat0000755000175200017520000000031010511602603012601 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/nat.maude -no-banner -no-advise \ > nat.out 2>&1 diff $srcdir/nat.expected nat.out > /dev/null 2>&1 maude-3.1/tests/BuiltIn/nat.expected0000644000175200017520000002633413140673637014434 00000000000000========================================== reduce in NAT : 1 + 2 . rewrites: 1 result NzNat: 3 ========================================== reduce in NAT : 1 + 1 . rewrites: 1 result NzNat: 2 ========================================== reduce in NAT : N:Nat + 1 + 1 . rewrites: 1 result NzNat: N:Nat + 2 ========================================== reduce in NAT : sd(2, 3) . rewrites: 1 result NzNat: 1 ========================================== reduce in NAT : sd(3, 10) . rewrites: 1 result NzNat: 7 ========================================== reduce in NAT : sd(4, 10) . rewrites: 1 result NzNat: 6 ========================================== reduce in NAT : 1 * 2 . rewrites: 1 result NzNat: 2 ========================================== reduce in NAT : 1 * 1 . rewrites: 1 result NzNat: 1 ========================================== reduce in NAT : 10 quo 4 . rewrites: 1 result NzNat: 2 ========================================== reduce in NAT : 10 rem 4 . rewrites: 1 result NzNat: 2 ========================================== reduce in NAT : 10 ^ 4 . rewrites: 1 result NzNat: 10000 ========================================== reduce in NAT : modExp(37, 1000000000000002, 100) . rewrites: 1 result NzNat: 69 ========================================== reduce in NAT : modExp(37, 1000000000000002, 1000003) . rewrites: 1 result NzNat: 929564 ========================================== reduce in NAT : modExp(100200300400, 1000000000000002, 1000003) . rewrites: 1 result NzNat: 85562 ========================================== reduce in NAT : gcd(gcd(X:Nat, 120), gcd(Y:Nat, 140)) . rewrites: 1 result NzNat: gcd(X:Nat, Y:Nat, 20) ========================================== reduce in NAT : gcd(124, 346, 768) . rewrites: 1 result NzNat: 2 ========================================== reduce in NAT : lcm(lcm(X:Nat, 120), lcm(Y:Nat, 140)) . rewrites: 1 result Nat: lcm(X:Nat, Y:Nat, 840) ========================================== reduce in NAT : lcm(124, 346, 768) . rewrites: 1 result NzNat: 4118784 ========================================== reduce in NAT : 1 xor 2 . rewrites: 1 result NzNat: 3 ========================================== reduce in NAT : 1 xor 1 . rewrites: 1 result Zero: 0 ========================================== reduce in NAT : 1 & 2 . rewrites: 1 result Zero: 0 ========================================== reduce in NAT : 1 & 1 . rewrites: 1 result NzNat: 1 ========================================== reduce in NAT : 1 | 2 . rewrites: 1 result NzNat: 3 ========================================== reduce in NAT : 1 | 1 . rewrites: 1 result NzNat: 1 ========================================== reduce in NAT : 1 << 3 . rewrites: 1 result NzNat: 8 ========================================== reduce in NAT : 128 >> 3 . rewrites: 1 result NzNat: 16 ========================================== reduce in NAT : 1 < 2 . rewrites: 1 result Bool: true ========================================== reduce in NAT : 1 < 1 . rewrites: 1 result Bool: false ========================================== reduce in NAT : 1 <= 2 . rewrites: 1 result Bool: true ========================================== reduce in NAT : 1 <= 1 . rewrites: 1 result Bool: true ========================================== reduce in NAT : 1 > 2 . rewrites: 1 result Bool: false ========================================== reduce in NAT : 1 > 1 . rewrites: 1 result Bool: false ========================================== reduce in NAT : 1 >= 2 . rewrites: 1 result Bool: false ========================================== reduce in NAT : 1 >= 1 . rewrites: 1 result Bool: true ========================================== reduce in NAT : 3 divides 10 . rewrites: 1 result Bool: false ========================================== reduce in NAT : 3 divides 9 . rewrites: 1 result Bool: true ========================================== reduce in FACT : 100 ! . rewrites: 201 result NzNat: 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000 ========================================== reduce in FACT : 1000 ! . rewrites: 2001 result NzNat: 402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921510907788019393178114194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819372388642614839657382291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753472000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ========================================== reduce in MOD3 : 4 . rewrites: 1 result NzNat: 1 ========================================== reduce in FACT' : 100 ! . rewrites: 201 result NzNat: 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000 ========================================== reduce in FACT' : 1000 ! . rewrites: 2001 result NzNat: 402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921510907788019393178114194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819372388642614839657382291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753472000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ========================================== reduce in MOD3' : 4445 . rewrites: 1481 result NzNat: 2 ========================================== reduce in NAT : 8888888888888888888888888888888888888888888888888888888 . rewrites: 0 result NzNat: 8888888888888888888888888888888888888888888888888888888 ========================================== reduce in NAT : 246913578 . rewrites: 0 result NzNat: 246913578 ========================================== reduce in NAT : Begin{Graph Representation} [Term has 2 operator symbols while graph has 2 nodes.] #0 = s_^123(#1) #1 = 0 End{Graph Representation} . rewrites: 0 result NzNat: Begin{Graph Representation} [Term has 2 operator symbols while graph has 2 nodes.] #0 = s_^123(#1) #1 = 0 End{Graph Representation} ========================================== reduce in NAT : Begin{Graph Representation} [Term has 5 operator symbols while graph has 4 nodes.] #0 = _+_(#1, #3) #1 = s_^4(#2) #2 = 0 #3 = s_^5(#2) End{Graph Representation} . *********** equation (built-in equation for symbol _+_) Old: Begin{Graph Representation} [Term has 5 operator symbols while graph has 4 nodes.] #0 = _+_(#1, #3) #1 = s_^4(#2) #2 = 0 #3 = s_^5(#2) End{Graph Representation} Begin{Graph Representation} [Term has 5 operator symbols while graph has 4 nodes.] #0 = _+_(#1, #3) #1 = s_^4(#2) #2 = 0 #3 = s_^5(#2) End{Graph Representation} ---> Begin{Graph Representation} [Term has 2 operator symbols while graph has 2 nodes.] #0 = s_^9(#1) #1 = 0 End{Graph Representation} New: Begin{Graph Representation} [Term has 2 operator symbols while graph has 2 nodes.] #0 = s_^9(#1) #1 = 0 End{Graph Representation} rewrites: 1 result NzNat: Begin{Graph Representation} [Term has 2 operator symbols while graph has 2 nodes.] #0 = s_^9(#1) #1 = 0 End{Graph Representation} Bye. maude-3.1/tests/BuiltIn/int0000755000175200017520000000031010511602572012616 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/int.maude -no-banner -no-advise \ > int.out 2>&1 diff $srcdir/int.expected int.out > /dev/null 2>&1 maude-3.1/tests/BuiltIn/string.maude0000644000175200017520000000516513334413757014451 00000000000000set show timing off . set show advisories off . select STRING . red ascii("A") . red ascii("AB") . red length("AAA") . red length("") . red length("abcdefghijklmnopqrstuvwxyz") . red substr("abcdefghijklmnopqrstuvwxyz", 10, 5) . red substr("abcdefghijklmnopqrstuvwxyz", 1000000000000000000, 5) . red substr("abcdefghijklmnopqrstuvwxyz", 10, 500000000000000000) . red substr("abcdefghijklmnopqrstuvwxyz", 0, 5) . red substr("abcdefghijklmnopqrstuvwxyz", 10, 0) . red find("abcdefghijabcdefghij", "cde", 0) . red find("abcdefghijabcdefghij", "cde", 1) . red find("abcdefghijabcdefghij", "cde", 2) . red find("abcdefghijabcdefghij", "cde", 3) . red find("abcdefghijabcdefghij", "cde", 30000000000000000000000) . red rfind("abcdefghijabcdefghij", "cde", 0) . red rfind("abcdefghijabcdefghij", "cde", 1) . red rfind("abcdefghijabcdefghij", "cde", 2) . red rfind("abcdefghijabcdefghij", "cde", 12) . red rfind("abcdefghijabcdefghij", "cde", 13) . red rfind("abcdefghijabcdefghij", "cde", 30000000000000000000000) . red char(65) . red char(2000) . red char(20000000000000000000000) . red char(0) . red char(255) . red "test" . red "test" + "2" . red substr("cat", 1, 1) . red substr("\n\r\f", 1, 1) . red "\007" . red substr("a\"\"b", 0, 0) . red substr("a\"\"b", 0, 2) . red substr("a\"\"b", 0, 100) . red substr("a\"\"b", 3, 1) . red substr("a\"\"b", 4, 1) . red "abracadabra" < "aardvark" . red "AAA" < "aardvark" . red length("aardvark") . red "abc" == "a" + "b" + "c" . red find("catcat", "tc", 0) . red find("catcat", "jr", 0) . red rfind("catcat", "t", 10) . red rfind("catcat", "t", 4) . red "\0" . red "\377" . red "\399" . red "\477" . red "\40" . red "\101" . fmod FOO is inc STRING . sort Foo . op "this is not a string" : -> Foo . endfm red "this is not a string" . red ("this is not a string").Foo . red ("this is not a string").String . red "this is a string" . select STRING . red "this is a really long string; this is a really long string; this is a really long string; this is a really long string; this is a really long string." . red char(65) . red ascii(" ") . red ascii("aa") . red char(1000) . red lowerCase("a") . red lowerCase("A") . red lowerCase("123AAAaaa123aaaAAA123") . red lowerCase("AAAaaa123AAAaaa123aaaAAA123") . red lowerCase("abcdef") . red lowerCase("abcdeF") . red lowerCase("AbCdEf") . red lowerCase("aBcDeF") . red lowerCase("ABCDEF") . red upperCase("a") . red upperCase("A") . red upperCase("123AAAaaa123aaaAAA123") . red upperCase("AAAaaa123AAAaaa123aaaAAA123") . red upperCase("abcdef") . red upperCase("abcdeF") . red upperCase("AbCdEf") . red upperCase("aBcDeF") . red upperCase("ABCDEF") . maude-3.1/tests/BuiltIn/string0000755000175200017520000000032410511602541013333 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/string.maude -no-banner -no-advise \ > string.out 2>&1 diff $srcdir/string.expected string.out > /dev/null 2>&1 maude-3.1/tests/BuiltIn/counters0000755000175200017520000000033410511602374013674 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/counters.maude -no-banner -no-advise \ > counters.out 2>&1 diff $srcdir/counters.expected counters.out > /dev/null 2>&1 maude-3.1/tests/BuiltIn/rat.maude0000644000175200017520000000223510025674265013721 00000000000000set show timing off . set show advisories off . select RAT . red 2 / 3 + 1 / 4 . red 2 / 3 + -1 / 4 . red trunc(13 / 12) . red trunc(-13 / 12) . red frac(13 / 12) . red frac(-13 / 12) . red floor(13 / 12) . red floor(-13 / 12) . red ceiling(13 / 12) . red ceiling(-13 / 12) . red 2 / 3 + 1 / 3 . red 1/4 divides 1/2 . red 1/4 divides 1/12 . red 2/3 divides 3/2 . red 2/3 divides 4/3 . red 2/3 divides 5 . red 5 quo 2/3 . red -5 quo 2/3 . red -5 quo -2/3 . red 5 quo -2/3 . red 1 quo 3/100 . red 5 rem 2/3 . red -5 rem 2/3 . red -5 rem -2/3 . red 5 rem -2/3 . red 3 rem 2 . red -3 rem 2 . red 3 rem -2 . red -3 rem -2 . red 1 rem 3/100 . red 1 rem 7/100 . red 1 rem 13/100 . red gcd(1/2, 1/3) . red gcd(1/2, 0) . red gcd(5/6, 1/2, 9/13) . red lcm(1/2, 1/3) . red lcm(1/2, 2/3) . red lcm(1/2, 1/6) . red lcm(1/2, 0) . fmod RAT-BENCH is pr RAT . ops f g : Nat -> Rat . var N : Nat . eq f(0) = 1 . eq f(s N) = - f(N) + N / (s N) . eq g(0) = 1 . eq g(s N) = - g(N) * (s N / (N + 2)) . endfm red f(100) . red g(100) . fmod FOO is inc RAT . ops a b c d e : -> Rat . eq a = 42 . eq b = -42 . eq c = -42/1 . eq d = -42/29 . endfm show all FOO . maude-3.1/tests/BuiltIn/rat.expected0000644000175200017520000007166013140673713014435 00000000000000========================================== reduce in RAT : 1/4 + 2/3 . rewrites: 5 result PosRat: 11/12 ========================================== reduce in RAT : 2/3 + -1/4 . rewrites: 5 result PosRat: 5/12 ========================================== reduce in RAT : trunc(13/12) . rewrites: 2 result NzNat: 1 ========================================== reduce in RAT : trunc(-13/12) . rewrites: 2 result NzInt: -1 ========================================== reduce in RAT : frac(13/12) . rewrites: 2 result PosRat: 1/12 ========================================== reduce in RAT : frac(-13/12) . rewrites: 2 result NzRat: -1/12 ========================================== reduce in RAT : floor(13/12) . rewrites: 2 result NzNat: 1 ========================================== reduce in RAT : floor(-13/12) . rewrites: 5 result NzInt: -2 ========================================== reduce in RAT : ceiling(13/12) . rewrites: 4 result NzNat: 2 ========================================== reduce in RAT : ceiling(-13/12) . rewrites: 3 result NzInt: -1 ========================================== reduce in RAT : 1/3 + 2/3 . rewrites: 6 result NzNat: 1 ========================================== reduce in RAT : 1/4 divides 1/2 . rewrites: 7 result Bool: true ========================================== reduce in RAT : 1/4 divides 1/12 . rewrites: 5 result Bool: false ========================================== reduce in RAT : 2/3 divides 3/2 . rewrites: 6 result Bool: false ========================================== reduce in RAT : 2/3 divides 4/3 . rewrites: 5 result Bool: true ========================================== reduce in RAT : 2/3 divides 5 . rewrites: 3 result Bool: false ========================================== reduce in RAT : 5 quo 2/3 . rewrites: 3 result NzNat: 7 ========================================== reduce in RAT : -5 quo 2/3 . rewrites: 3 result NzInt: -7 ========================================== reduce in RAT : -5 quo -2/3 . rewrites: 3 result NzNat: 7 ========================================== reduce in RAT : 5 quo -2/3 . rewrites: 3 result NzInt: -7 ========================================== reduce in RAT : 1 quo 3/100 . rewrites: 3 result NzNat: 33 ========================================== reduce in RAT : 5 rem 2/3 . rewrites: 3 result PosRat: 1/3 ========================================== reduce in RAT : -5 rem 2/3 . rewrites: 3 result NzRat: -1/3 ========================================== reduce in RAT : -5 rem -2/3 . rewrites: 3 result NzRat: -1/3 ========================================== reduce in RAT : 5 rem -2/3 . rewrites: 3 result PosRat: 1/3 ========================================== reduce in RAT : 3 rem 2 . rewrites: 1 result NzNat: 1 ========================================== reduce in RAT : -3 rem 2 . rewrites: 1 result NzInt: -1 ========================================== reduce in RAT : 3 rem -2 . rewrites: 1 result NzNat: 1 ========================================== reduce in RAT : -3 rem -2 . rewrites: 1 result NzInt: -1 ========================================== reduce in RAT : 1 rem 3/100 . rewrites: 3 result PosRat: 1/100 ========================================== reduce in RAT : 1 rem 7/100 . rewrites: 4 result PosRat: 1/50 ========================================== reduce in RAT : 1 rem 13/100 . rewrites: 3 result PosRat: 9/100 ========================================== reduce in RAT : gcd(1/2, 1/3) . rewrites: 8 result PosRat: 1/6 ========================================== reduce in RAT : gcd(0, 1/2) . rewrites: 3 result PosRat: 1/2 ========================================== reduce in RAT : gcd(1/2, 5/6, 9/13) . rewrites: 17 result PosRat: 1/78 ========================================== reduce in RAT : lcm(1/2, 1/3) . rewrites: 8 result NzNat: 1 ========================================== reduce in RAT : lcm(1/2, 2/3) . rewrites: 8 result NzNat: 2 ========================================== reduce in RAT : lcm(1/2, 1/6) . rewrites: 8 result PosRat: 1/2 ========================================== reduce in RAT : lcm(0, 1/2) . rewrites: 4 result Zero: 0 ========================================== reduce in RAT-BENCH : f(100) . rewrites: 818 result PosRat: 117699997793868264083012417974975201679417/69720375229712477164533808935312303556800 ========================================== reduce in RAT-BENCH : g(100) . rewrites: 748 result PosRat: 1/101 fmod FOO is sorts Bool Zero NzNat Nat NzInt Int PosRat NzRat Rat . subsorts Zero NzNat NzNat < Nat . subsort NzNat < NzInt . subsorts NzInt Nat NzInt < Int . subsort NzNat < PosRat . subsorts NzInt PosRat < NzRat . subsorts NzRat Int < Rat . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op 0 : -> Zero [ctor] . op s_ : Nat -> NzNat [ctor iter prec 15 gather (E) special ( id-hook SuccSymbol term-hook zeroTerm (0))] . op _+_ : NzNat Nat -> NzNat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Nat Nat -> Nat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Int Int -> Int [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : PosRat PosRat -> PosRat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : PosRat Nat -> PosRat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Rat Rat -> Rat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op sd : Nat Nat -> Nat [comm special ( id-hook CUI_NumberOpSymbol (sd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : NzNat NzNat -> NzNat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Nat Nat -> Nat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : NzInt NzInt -> NzInt [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Int Int -> Int [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : PosRat PosRat -> PosRat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : NzRat NzRat -> NzRat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Rat Rat -> Rat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Int NzInt -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : PosRat PosRat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Rat NzRat -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Int NzInt -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Rat NzRat -> Rat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Nat Nat -> Nat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzNat Nat -> NzNat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Int Nat -> Int [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzInt Nat -> NzInt [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : PosRat Nat -> PosRat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzRat Nat -> NzRat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Rat Nat -> Rat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op modExp : [Rat] [Rat] [Rat] -> [Rat] [special ( id-hook NumberOpSymbol (modExp) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : NzInt Int -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Int Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : NzRat Rat -> PosRat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Rat Rat -> Rat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzInt NzInt -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Int Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzRat NzRat -> PosRat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Rat Rat -> Rat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzInt NzInt -> NzInt [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Int Int -> Int [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : PosRat PosRat -> PosRat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzRat NzRat -> NzRat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Rat Rat -> Rat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzInt NzInt -> NzInt [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Int Int -> Int [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzNat Int -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Nat Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : PosRat Rat -> PosRat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzRat NzRat -> NzRat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Rat Rat -> Rat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _xor_ : Nat Nat -> Nat [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _xor_ : Int Int -> Int [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Nat Nat -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Nat Int -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Int Int -> Int [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : NzNat Nat -> NzNat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : Nat Nat -> Nat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : NzInt Int -> NzInt [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : Int Int -> Int [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _>>_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _>>_ : Int Nat -> Int [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<<_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<<_ : Int Nat -> Int [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<_ : Rat Rat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Rat Rat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Rat Rat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Rat Rat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzNat Nat -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzInt Int -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzRat Rat -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op -_ : NzNat -> NzInt [ctor prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : NzInt -> NzInt [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : Int -> Int [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : NzRat -> NzRat [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : Rat -> Rat [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _-_ : Int Int -> Int [prec 33 gather (E e) special ( id-hook NumberOpSymbol (-) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _-_ : Rat Rat -> Rat [prec 33 gather (E e) special ( id-hook NumberOpSymbol (-) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : NzInt -> NzNat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : Int -> Nat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : NzRat -> PosRat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : Rat -> Rat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op ~_ : Int -> Int [prec 15 gather (E) special ( id-hook NumberOpSymbol (~) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _/_ : NzInt NzNat -> NzRat [ctor prec 31 gather (E e) special ( id-hook DivisionSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _/_ : NzNat NzNat -> PosRat [ctor prec 31 gather (E e) special ( id-hook DivisionSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _/_ : PosRat PosRat -> PosRat [prec 31 gather (E e) special ( id-hook DivisionSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _/_ : NzRat NzRat -> NzRat [prec 31 gather (E e) special ( id-hook DivisionSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _/_ : Rat NzRat -> Rat [prec 31 gather (E e) special ( id-hook DivisionSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op trunc : PosRat -> Nat . op trunc : Rat -> Int . op frac : Rat -> Rat . op floor : PosRat -> Nat . op floor : Rat -> Int . op ceiling : PosRat -> NzNat . op ceiling : Rat -> Int . op a : -> Rat . op b : -> Rat . op c : -> Rat . op d : -> Rat . op e : -> Rat . eq a = 42 . eq b = -42 . eq c = -42/1 . eq d = -42/29 . eq true and A:Bool = A:Bool . eq false and A:Bool = false . eq A:Bool and A:Bool = A:Bool . eq false xor A:Bool = A:Bool . eq A:Bool xor A:Bool = false . eq A:Bool and (B:Bool xor C:Bool) = A:Bool and B:Bool xor A:Bool and C:Bool . eq not A:Bool = true xor A:Bool . eq A:Bool or B:Bool = A:Bool and B:Bool xor A:Bool xor B:Bool . eq A:Bool implies B:Bool = not (A:Bool xor A:Bool and B:Bool) . eq 0 / Q:NzRat = 0 . eq I:NzInt / - N:NzNat = - I:NzInt / N:NzNat . eq I:NzInt / N:NzNat / (J:NzInt / M:NzNat) = (I:NzInt * M:NzNat) / (J:NzInt * N:NzNat) . eq I:NzInt / N:NzNat / J:NzInt = I:NzInt / (J:NzInt * N:NzNat) . eq I:NzInt / (J:NzInt / M:NzNat) = (I:NzInt * M:NzNat) / J:NzInt . eq - (I:NzInt / N:NzNat) = - I:NzInt / N:NzNat . eq I:NzInt / N:NzNat + J:NzInt / M:NzNat = (I:NzInt * M:NzNat + J:NzInt * N:NzNat) / (N:NzNat * M:NzNat) . eq K:Int + I:NzInt / N:NzNat = (I:NzInt + N:NzNat * K:Int) / N:NzNat . eq I:NzInt / N:NzNat - J:NzInt / M:NzNat = (I:NzInt * M:NzNat - J:NzInt * N:NzNat) / (N:NzNat * M:NzNat) . eq I:NzInt / N:NzNat - K:Int = (I:NzInt - N:NzNat * K:Int) / N:NzNat . eq K:Int - J:NzInt / M:NzNat = (M:NzNat * K:Int - J:NzInt) / M:NzNat . eq 0 * Q:NzRat = 0 . eq (I:NzInt / N:NzNat) * (J:NzInt / M:NzNat) = (I:NzInt * J:NzInt) / (N:NzNat * M:NzNat) . eq K:Int * (I:NzInt / N:NzNat) = (I:NzInt * K:Int) / N:NzNat . eq I:NzInt / N:NzNat quo Q:NzRat = I:NzInt quo (Q:NzRat * N:NzNat) . eq K:Int quo (J:NzInt / M:NzNat) = (M:NzNat * K:Int) quo J:NzInt . eq I:NzInt / N:NzNat rem (J:NzInt / M:NzNat) = (I:NzInt * M:NzNat) rem ( J:NzInt * N:NzNat) / (N:NzNat * M:NzNat) . eq K:Int rem (J:NzInt / M:NzNat) = (M:NzNat * K:Int) rem J:NzInt / M:NzNat . eq I:NzInt / N:NzNat rem J:NzInt = I:NzInt rem (J:NzInt * N:NzNat) / N:NzNat . eq (I:NzInt / N:NzNat) ^ Z:Nat = I:NzInt ^ Z:Nat / N:NzNat ^ Z:Nat . eq abs(I:NzInt / N:NzNat) = abs(I:NzInt) / N:NzNat . eq gcd(R:Rat, I:NzInt / N:NzNat) = gcd(I:NzInt, N:NzNat * R:Rat) / N:NzNat . eq lcm(R:Rat, I:NzInt / N:NzNat) = lcm(I:NzInt, N:NzNat * R:Rat) / N:NzNat . eq min(R:Rat, I:NzInt / N:NzNat) = min(I:NzInt, N:NzNat * R:Rat) / N:NzNat . eq max(R:Rat, I:NzInt / N:NzNat) = max(I:NzInt, N:NzNat * R:Rat) / N:NzNat . eq I:NzInt / N:NzNat < J:NzInt / M:NzNat = I:NzInt * M:NzNat < J:NzInt * N:NzNat . eq I:NzInt / N:NzNat < K:Int = I:NzInt < N:NzNat * K:Int . eq K:Int < J:NzInt / M:NzNat = M:NzNat * K:Int < J:NzInt . eq I:NzInt / N:NzNat <= J:NzInt / M:NzNat = I:NzInt * M:NzNat <= J:NzInt * N:NzNat . eq I:NzInt / N:NzNat <= K:Int = I:NzInt <= N:NzNat * K:Int . eq K:Int <= J:NzInt / M:NzNat = M:NzNat * K:Int <= J:NzInt . eq I:NzInt / N:NzNat > J:NzInt / M:NzNat = I:NzInt * M:NzNat > J:NzInt * N:NzNat . eq I:NzInt / N:NzNat > K:Int = I:NzInt > N:NzNat * K:Int . eq K:Int > J:NzInt / M:NzNat = M:NzNat * K:Int > J:NzInt . eq I:NzInt / N:NzNat >= J:NzInt / M:NzNat = I:NzInt * M:NzNat >= J:NzInt * N:NzNat . eq I:NzInt / N:NzNat >= K:Int = I:NzInt >= N:NzNat * K:Int . eq K:Int >= J:NzInt / M:NzNat = M:NzNat * K:Int >= J:NzInt . eq I:NzInt / N:NzNat divides K:Int = I:NzInt divides N:NzNat * K:Int . eq Q:NzRat divides J:NzInt / M:NzNat = Q:NzRat * M:NzNat divides J:NzInt . eq trunc(K:Int) = K:Int . eq trunc(I:NzInt / N:NzNat) = I:NzInt quo N:NzNat . eq frac(K:Int) = 0 . eq frac(I:NzInt / N:NzNat) = I:NzInt rem N:NzNat / N:NzNat . eq floor(K:Int) = K:Int . eq ceiling(K:Int) = K:Int . eq floor(N:NzNat / M:NzNat) = N:NzNat quo M:NzNat . eq ceiling(N:NzNat / M:NzNat) = ((N:NzNat + M:NzNat) - 1) quo M:NzNat . eq floor(- N:NzNat / M:NzNat) = - ceiling(N:NzNat / M:NzNat) . eq ceiling(- N:NzNat / M:NzNat) = - floor(N:NzNat / M:NzNat) . endfm Bye. maude-3.1/tests/BuiltIn/int.expected0000644000175200017520000001353413140673653014440 00000000000000========================================== reduce in INT : - -1 . rewrites: 1 result NzNat: 1 ========================================== reduce in INT : - 0 . rewrites: 1 result Zero: 0 ========================================== reduce in INT : 5 + -2 . rewrites: 1 result NzNat: 3 ========================================== reduce in INT : 10 + -1 . rewrites: 1 result NzNat: 9 ========================================== reduce in INT : 10 + -11 . rewrites: 1 result NzInt: -1 ========================================== reduce in INT : 5 * -2 . rewrites: 1 result NzInt: -10 ========================================== reduce in INT : 10 - 11 . rewrites: 1 result NzInt: -1 ========================================== reduce in INT : 1 * -2 . rewrites: 1 result NzInt: -2 ========================================== reduce in INT : 1 * -1 . rewrites: 1 result NzInt: -1 ========================================== reduce in INT : 10 quo -4 . rewrites: 1 result NzInt: -2 ========================================== reduce in INT : -10 rem 4 . rewrites: 1 result NzInt: -2 ========================================== reduce in INT : -10 ^ 4 . rewrites: 1 result NzNat: 10000 ========================================== reduce in INT : -2 ^ 7 . rewrites: 1 result NzInt: -128 ========================================== reduce in INT : 2 ^ 7 . rewrites: 1 result NzNat: 128 ========================================== reduce in INT : abs(-140) . rewrites: 1 result NzNat: 140 ========================================== reduce in INT : abs(140) . rewrites: 1 result NzNat: 140 ========================================== reduce in INT : gcd(gcd(X:Nat, -120), gcd(Y:Nat, -140)) . rewrites: 1 result NzNat: gcd(X:Nat, Y:Nat, 20) ========================================== reduce in INT : gcd(124, 768, -346) . rewrites: 1 result NzNat: 2 ========================================== reduce in INT : gcd(8, -10) . rewrites: 1 result NzNat: 2 ========================================== reduce in INT : lcm(lcm(X:Nat, -120), lcm(Y:Nat, -140)) . rewrites: 1 result Nat: lcm(X:Nat, Y:Nat, 840) ========================================== reduce in INT : lcm(124, 768, -346) . rewrites: 1 result NzNat: 4118784 ========================================== reduce in INT : lcm(-8, -10) . rewrites: 1 result NzNat: 40 ========================================== reduce in INT : 1 xor -2 . rewrites: 1 result NzInt: -1 ========================================== reduce in INT : 1 xor -1 . rewrites: 1 result NzInt: -2 ========================================== reduce in INT : 1 xor -1 . rewrites: 1 result NzInt: -2 ========================================== reduce in INT : 1 & -2 . rewrites: 1 result Zero: 0 ========================================== reduce in INT : 1 & -1 . rewrites: 1 result NzNat: 1 ========================================== reduce in INT : 1 & -1 . rewrites: 1 result NzNat: 1 ========================================== reduce in INT : 1 | -2 . rewrites: 1 result NzInt: -1 ========================================== reduce in INT : 1 | -1 . rewrites: 1 result NzInt: -1 ========================================== reduce in INT : 1 | -2 . rewrites: 1 result NzInt: -1 ========================================== reduce in INT : -1 << 3 . rewrites: 1 result NzInt: -8 ========================================== reduce in INT : -128 >> 3 . rewrites: 1 result NzInt: -16 ========================================== reduce in INT : 1 < -2 . rewrites: 1 result Bool: false ========================================== reduce in INT : -1 < 1 . rewrites: 1 result Bool: true ========================================== reduce in INT : 1 <= -2 . rewrites: 1 result Bool: false ========================================== reduce in INT : -1 <= 1 . rewrites: 1 result Bool: true ========================================== reduce in INT : -1 > 2 . rewrites: 1 result Bool: false ========================================== reduce in INT : 1 > -1 . rewrites: 1 result Bool: true ========================================== reduce in INT : 1 >= -2 . rewrites: 1 result Bool: true ========================================== reduce in INT : -1 >= 1 . rewrites: 1 result Bool: false ========================================== reduce in INT : -3 divides 10 . rewrites: 1 result Bool: false ========================================== reduce in INT : 3 divides -9 . rewrites: 1 result Bool: true ========================================== reduce in INT : 1 . rewrites: 0 result NzNat: 1 ========================================== reduce in INT : -1 . rewrites: 0 result NzInt: -1 ========================================== reduce in INT : 2 + -1 . rewrites: 1 result NzNat: 1 ========================================== reduce in INT : -8888888888888888888888888888888888888888888888888888888 . rewrites: 0 result NzInt: -8888888888888888888888888888888888888888888888888888888 ========================================== reduce in INT : -42 . rewrites: 0 result NzInt: -42 ========================================== reduce in INT : - 0 . rewrites: 1 result Zero: 0 ========================================== reduce in INT : s_^2(0) ^ s_^200000000000000000000(0) . rewrites: 0 result NzNat: s_^2(0) ^ s_^200000000000000000000(0) ========================================== reduce in INT : s 0 ^ s_^200000000000000000000(0) . rewrites: 1 result NzNat: s 0 ========================================== reduce in INT : - s 0 ^ s_^200000000000000000000(0) . rewrites: 1 result NzNat: s 0 ========================================== reduce in INT : - s 0 ^ s_^200000000000000000001(0) . rewrites: 1 result NzInt: - s 0 ========================================== reduce in INT : 0 ^ s_^200000000000000000001(0) . rewrites: 1 result Zero: 0 ========================================== reduce in INT : s 0 << s_^200000000000000000001(0) . rewrites: 0 result Nat: s 0 << s_^200000000000000000001(0) ========================================== reduce in INT : 0 << s_^200000000000000000001(0) . rewrites: 1 result Zero: 0 Bye. maude-3.1/tests/BuiltIn/rat0000755000175200017520000000031010511602574012614 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/rat.maude -no-banner -no-advise \ > rat.out 2>&1 diff $srcdir/rat.expected rat.out > /dev/null 2>&1 maude-3.1/tests/BuiltIn/Makefile.in0000644000175200017520000006424613741175703014176 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = tests/BuiltIn ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_have_poll.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/mkinstalldirs \ $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ BUDDY_LIB = @BUDDY_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CVC4_LIB = @CVC4_LIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FLEX = @FLEX@ GCC_LIBS = @GCC_LIBS@ GMP_LIBS = @GMP_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSIGSEGV_LIB = @LIBSIGSEGV_LIB@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TECLA_LIBS = @TECLA_LIBS@ VERSION = @VERSION@ YICES2_LIB = @YICES2_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ TESTS = \ nat \ int \ rat \ string \ counters MAUDE_FILES = \ nat.maude \ int.maude \ rat.maude \ string.maude \ counters.maude RESULT_FILES = \ nat.expected \ int.expected \ rat.expected \ string.expected \ counters.expected EXTRA_DIST = $(TESTS) $(MAUDE_FILES) $(RESULT_FILES) all: all-am .SUFFIXES: .SUFFIXES: .log .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/BuiltIn/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/BuiltIn/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? nat.log: nat @p='nat'; \ b='nat'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) int.log: int @p='int'; \ b='int'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) rat.log: rat @p='rat'; \ b='rat'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) string.log: string @p='string'; \ b='string'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) counters.log: counters @p='counters'; \ b='counters'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: all all-am check check-TESTS check-am clean clean-generic \ cscopelist-am ctags-am distclean distclean-generic distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am recheck tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: maude-3.1/tests/Makefile.am0000644000175200017520000000007213324347300012571 00000000000000SUBDIRS = BuiltIn Misc Meta ResolvedBugs StrategyLanguage maude-3.1/tests/ResolvedBugs/0000755000175200017520000000000013741222371013225 500000000000000maude-3.1/tests/ResolvedBugs/metaParseStrategyApril2020.expected0000644000175200017520000000024213645231763021636 00000000000000========================================== reduce in META-LEVEL : metaParseStrategy(['NAT], none, 'top '`( 'all '`)) . rewrites: 2 result Strategy: top(all) Bye. maude-3.1/tests/ResolvedBugs/metaIntMatchOct2018.maude0000644000175200017520000000352013357775243017537 00000000000000set show timing off . set show advisories off . *** *** Check that mb applications and eq rewrites for the initial *** sort computations in the subject are not counted twice for *** metaMatch()/metaXmatch()/getMatch()/getXmatch(). *** fmod MATCH is sorts Foo Bar . subsorts Foo < Bar . op f : Bar Bar -> Bar [comm] . ops g h : Foo -> Foo . ops a b c d e : -> Foo . vars X Y : Bar . var Z : Foo . cmb f(X, Y) : Foo if h(X) = g(Y) . eq h(a) = b . eq g(c) = b . eq h(c) = d . eq g(a) = d . endfm set trace on . set show breakdown on . red in META-LEVEL : metaMatch(['MATCH], 'Z:Foo, 'f['a.Foo, 'c.Foo], nil, 0) . red in META-LEVEL : metaXmatch(['MATCH], 'Z:Foo, 'f['a.Foo, 'c.Foo], nil, 0, unbounded, 0) . load metaInterpreter mod MATCH-TEST is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op soln:_ : Nat -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('MATCH, true)) . rl < X : User | soln: N, AS > insertedModule(X, Y) => < X : User | AS > getMatch(Y, X, 'MATCH, 'Z:Foo, 'f['a.Foo, 'c.Foo], nil, N) . endm erew in MATCH-TEST : <> < me : User | soln: 0 > createInterpreter(interpreterManager, me, none) . mod XMATCH-TEST is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op soln:_ : Nat -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('MATCH, true)) . rl < X : User | soln: N, AS > insertedModule(X, Y) => < X : User | AS > getXmatch(Y, X, 'MATCH, 'Z:Foo, 'f['a.Foo, 'c.Foo], nil, 0, unbounded, N) . endm erew in XMATCH-TEST : <> < me : User | soln: 0 > createInterpreter(interpreterManager, me, none) . maude-3.1/tests/ResolvedBugs/metaIntRewriteJune20180000755000175200017520000000042413315277314017177 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaIntRewriteJune2018.maude -no-banner -no-advise \ > metaIntRewriteJune2018.out 2>&1 diff $srcdir/metaIntRewriteJune2018.expected metaIntRewriteJune2018.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/metaApplyNov20180000755000175200017520000000037413371445161016034 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaApplyNov2018.maude -no-banner -no-advise \ > metaApplyNov2018.out 2>&1 diff $srcdir/metaApplyNov2018.expected metaApplyNov2018.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/CUIbug12-22-09.maude0000644000175200017520000000200311375622141016105 00000000000000***( Bug discovered 12/22/09. CUI_DagNode::stackArguments() checks the wrong UNSTACKABLE flag for the second argument resulting in a missed rewrite. Resolved in alpha92b. ) set show timing off . mod CUI-BUG is sort Foo . ops a b c d 1 : -> Foo . op f : Foo Foo -> Foo [id: 1] . op g : Foo -> Foo . rl b => c . rl c => d . endm rew f(a, g(b)) . ***( first pass: f does not rewrite - marked unrewritable f stacks a and g(b) a does not rewrite - marked unrewritable g(b) does not rewrite - marked unrewritable a does not stack anything and is unrewritable - marked unstackable g stacks b b rewrites to c and we rebuild f(a, g(c)) with only the a node shared with the previous dag second pass: f is unrewritable f cannot stack a because it is unstackable f cannot stack g(c) because we check the wrong unstackable flag thus we miss c => d ) mod CUI-BUG2 is sort Foo . ops a b c d 1 : -> Foo . op f : Foo Foo -> Foo [id: 1] . op g : Foo -> Foo . rl b => c . rl g(c) => d . endm rew f(a, g(b)) . maude-3.1/tests/ResolvedBugs/ascentFunctionsJanuary2020.expected0000644000175200017520000000334013617160570021700 00000000000000Warning: , line 11 (smod BAD): module NON-EXISTENT does not exist. Warning: , line 10 (smod BAD): this module contains one or more errors that could not be patched up and thus it cannot be used or imported. ========================================== reduce in META-LEVEL : upModule('BAD, false) . rewrites: 0 result [Module]: upModule('BAD, false) ========================================== reduce in META-LEVEL : upImports('BAD) . rewrites: 0 result [ImportList]: upImports('BAD) ========================================== reduce in META-LEVEL : upSorts('BAD, false) . rewrites: 0 result [ModuleExpression,ParameterList,GTermList,QidSet,QidList,TypeListSet, Type?,Header]: upSorts('BAD, false) ========================================== reduce in META-LEVEL : upSubsortDecls('BAD, false) . rewrites: 0 result [SubsortDeclSet]: upSubsortDecls('BAD, false) ========================================== reduce in META-LEVEL : upOpDecls('BAD, false) . rewrites: 0 result [OpDeclSet]: upOpDecls('BAD, false) ========================================== reduce in META-LEVEL : upMbs('BAD, false) . rewrites: 0 result [MembAxSet]: upMbs('BAD, false) ========================================== reduce in META-LEVEL : upEqs('BAD, false) . rewrites: 0 result [EquationSet]: upEqs('BAD, false) ========================================== reduce in META-LEVEL : upRls('BAD, false) . rewrites: 0 result [RuleSet]: upRls('BAD, false) ========================================== reduce in META-LEVEL : upStratDecls('BAD, false) . rewrites: 0 result [StratDeclSet]: upStratDecls('BAD, false) ========================================== reduce in META-LEVEL : upSds('BAD, false) . rewrites: 0 result [StratDefSet]: upSds('BAD, false) Bye. maude-3.1/tests/ResolvedBugs/ACU_MissingUnifiersMay2020.maude0000644000175200017520000000075513664037640020761 00000000000000set show timing off . set show advisories off . *** *** Test for bug where we were losing ACU unifiers because *** they were subsumed by an mgu that failed to sort and code *** intended to detect this situation failed because of a mis-set *** flag. *** fmod FOO is sorts Zero NzNat Nat . subsorts Zero NzNat < Nat . op _+_ : Nat NzNat -> NzNat [assoc comm id: 0] . op _+_ : Nat Nat -> Nat [ditto] . op 0 : -> Zero . op g : Zero -> Nat . endfm unify N:Nat =? g(M:Nat + Z:Zero) . maude-3.1/tests/ResolvedBugs/clearRulesJune20180000755000175200017520000000040413315041334016322 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/clearRulesJune2018.maude -no-banner -no-advise \ > clearRulesJune2018.out 2>&1 diff $srcdir/clearRulesJune2018.expected clearRulesJune2018.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/complexParserSyncApril2020.maude0000644000175200017520000000056313654335066021154 00000000000000set show timing off . set show advisories off . *** *** Check bug where cached simple parser was getting used *** with complex parser auxiliary information leading to crash. *** select META-LEVEL . red metaParse(upModule('NAT, false), none, '0, 'Nat) . red metaParseStrategy(upModule('NAT, false), none, 'idle) . red metaParse(upModule('NAT, false), none, '0, 'Nat) . maude-3.1/tests/ResolvedBugs/polymorphicOverloadMay2019.maude0000644000175200017520000000234513473577521021226 00000000000000set show timing off . set show advisories off . *** polymorphic overloading from two parameter theories (now illegal) fmod COMMON is sort Common . endfm fth T1 is inc COMMON . op g : Universal Common -> Universal [poly (1 0)] . endfth fth T2 is inc COMMON . op g : Universal -> Common [poly (1)] . endfth fmod M{X :: T1, Y :: T2} is sort Dummy{X,Y} . eq g(A:Dummy{X,Y}) = g(A:Dummy{X,Y}) . *** just to track g endfm fmod M2 is inc COMMON . op h : Universal Common -> Universal [poly (1 0)] . endfm view V2 from T1 to M2 is op g to h . endv fmod M3 is inc COMMON . op not-h : Universal -> Common [poly (1)] . endfm view V3 from T2 to M3 is op g to not-h . endv fmod TEST is inc M{V2,V3} . endfm show all . *** polymorphic overloading between parameter theory and parameterized module (now illegal) fth T1 is sort Common . op g : Universal Common -> Universal [poly (1 0)] . endfth fmod M{X :: T1} is op g : Universal -> X$Common [poly (1)] . eq g(A:X$Common) = g(A:X$Common) . *** just to track g endfm fmod M2 is sort Real . op h : Universal Real -> Universal [poly (1 0)] . endfm view V2 from T1 to M2 is sort Common to Real . op g to h . endv fmod TEST is inc M{V2} . endfm show all . maude-3.1/tests/ResolvedBugs/instantiationJuly2019.maude0000644000175200017520000000070013520423230020213 00000000000000set show timing off . set show advisories off . fth FOO is sort Small . op a : -> Small . endfth fmod BAR{X :: FOO} is sort Big . subsort X$Small < Big . op f : Big -> Bool . eq f(a) = true . endfm fmod BAZ is sort Baz . op b : -> Baz . endfm *** make op a to b . *** incorrectly specialize to op a : -> Small to b . view V from FOO to BAZ is sort Small to Baz . op a to b . endv fmod TEST is inc BAR{V} . endfm red b . maude-3.1/tests/ResolvedBugs/unificationMar2013.maude0000644000175200017520000000200112117476420017433 00000000000000set show timing off . fmod FOO is sort Foo . op f : Foo -> Foo . vars X Y Z : Foo . endfm unify X =? f(f(Y)) /\ Y =? X /\ Y =? f(X) . unify X =? f(Y) /\ Y =? f(f(X)) /\ X =? Y . fmod FOO2 is sort Foo . op a : -> Foo . op f : Foo Foo -> Foo [assoc comm] . op g : Foo -> Foo . vars A X Y : Foo . endfm unify f(a, A) =? f(a, X) /\ f(a, Y) =? f(a, X) /\ f(a, g(A)) =? f(a, g(X)) /\ f(a, g(Y)) =? f(a, g(X)) . unify f(a, Y) =? f(a, X) /\ f(a, g(A)) =? f(a, g(X)) /\ f(a, g(Y)) =? f(a, g(X)) . fmod FOO3 is sort Foo . op a : -> Foo . op f : Foo Foo -> Foo [assoc comm] . op g : Foo -> Foo . vars A B C D X Y Z : Foo . endfm unify f(a, X) =? f(a, g(X)) /\ f(a, X) =? f(a, g(g(X))) . unify Y =? X /\ f(a, X) =? f(a, g(Y)) /\ f(a, X) =? f(a, g(g(Y))) . fmod FOO4 is sort Foo . op f : Foo Foo -> Foo [assoc comm] . ops a b c d e : -> Foo . vars W X Y Z : Foo . endfm unify f(a, Y) =? f(a, X) . unify f(X, a) =? f(X, a) . unify f(a, b) =? f(a, b) . unify f(X, Y) =? f(X, Y) . maude-3.1/tests/ResolvedBugs/ascentFunctionsJanuary20200000755000175200017520000000044413617122776020113 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/ascentFunctionsJanuary2020.maude -no-banner -no-advise \ > ascentFunctionsJanuary2020.out 2>&1 diff $srcdir/ascentFunctionsJanuary2020.expected ascentFunctionsJanuary2020.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/metaParseStrategyApril2020.maude0000644000175200017520000000025513645226162021131 00000000000000set show timing off . set show advisories off . *** *** Test metaParseStrategy() on top(all). *** red in META-LEVEL : metaParseStrategy(['NAT], none, 'top '`( 'all '`)) . maude-3.1/tests/ResolvedBugs/sortCollapseMay2020.maude0000644000175200017520000000046213664037072017617 00000000000000set show timing off . set show advisories off . *** *** Test for bug that we weren't warning about a collapse *** up the sort hierarchy for declarations at the kind level. *** fmod FOO is sort Foo . op f : Foo [Foo] -> Foo [id: e] . op e : -> Foo . endfm parse f(e, X:[Foo]) . red f(e, X:[Foo]) . maude-3.1/tests/ResolvedBugs/unificationMar20130000755000175200017520000000040412117476052016352 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/unificationMar2013.maude -no-banner -no-advise \ > unificationMar2013.out 2>&1 diff $srcdir/unificationMar2013.expected unificationMar2013.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/physArgIndexOct2018.maude0000644000175200017520000000162013363757453017565 00000000000000set show timing off . set show advisories off . *** *** Check that we are not confusing nominal and physical *** argument indices for AC(U) terms with arguments having *** multiplicity > 1. *** mod VENDING-MACHINE is sorts Coin Item Place Marking . subsorts Coin Item < Place < Marking . op __ : Marking Marking -> Marking [ctor assoc comm id: null] . op null : -> Marking [ctor] . op $ : -> Coin [ctor format (r! o)] . op q : -> Coin [ctor format (r! o)] . op a : -> Item [ctor format (b! o)] . op c : -> Item [ctor format (b! o)] . rl [buy-c] : $ => c . rl [buy-a] : $ => a q . rl [change]: q q q q => $ . endm *** bad extra results srewrite in VENDING-MACHINE : $ $ $ using all . *** runaway execution search $ $ $ =>! a a M:Marking . mod FOO is sort Foo . op __ : Foo Foo -> Foo [assoc comm] . ops a b c : -> Foo . rl b => c . endm *** runaway execution rew a a b . maude-3.1/tests/ResolvedBugs/ACU_MissingUnifiersMay20200000755000175200017520000000044413664037762017672 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/ACU_MissingUnifiersMay2020.maude -no-banner -no-advise \ > ACU_MissingUnifiersMay2020.out 2>&1 diff $srcdir/ACU_MissingUnifiersMay2020.expected ACU_MissingUnifiersMay2020.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/variantUnifyJune20200000755000175200017520000000041413670540632016703 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/variantUnifyJune2020.maude -no-banner -no-advise \ > variantUnifyJune2020.out 2>&1 diff $srcdir/variantUnifyJune2020.expected variantUnifyJune2020.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/CUIbug12-22-09.expected0000644000175200017520000000034313140751544016622 00000000000000========================================== rewrite in CUI-BUG : f(a, g(b)) . rewrites: 2 result Foo: f(a, g(d)) ========================================== rewrite in CUI-BUG2 : f(a, g(b)) . rewrites: 2 result Foo: f(a, d) Bye. maude-3.1/tests/ResolvedBugs/viewRecursionMay2019.expected0000644000175200017520000000025613473603426020530 00000000000000Warning: , line 5 (view NatSet): recursive use of view NatSet is not allowed. Warning: , line 5 (view NatSet): unusable view NatSet. Bye. maude-3.1/tests/ResolvedBugs/Makefile.am0000644000175200017520000000545513733264327015222 00000000000000TESTS = \ CUIbug12-22-09 \ unificationMar2013 \ parserJune2018 \ staleViewJune2018 \ showModuleJune2018 \ clearRulesJune2018 \ metaIntRewriteJune2018 \ metaModuleCacheJune2018 \ metaIntImportJune2018 \ metaIntAscentJune2018 \ objectMessageOct2018 \ metaIntMatchOct2018 \ physArgIndexOct2018 \ metaApplyNov2018 \ moduleSumMay2019 \ parameterTheoryMay2019 \ parameterTheoryCopyMay2019 \ polymorphicOverloadMay2019 \ viewRecursionMay2019 \ instantiationJuly2019 \ ascentFunctionsJanuary2020 \ closeSocketFeb2020 \ metaParseStrategyApril2020 \ complexParserSyncApril2020 \ identityUnificationMay2020 \ sortCollapseMay2020 \ ACU_MissingUnifiersMay2020 \ variantUnifyJune2020 \ identityUnificationSeptember2020 \ CUI_OccursCheckSeptember2020 MAUDE_FILES = \ CUIbug12-22-09.maude \ unificationMar2013.maude \ parserJune2018.maude \ staleViewJune2018.maude \ showModuleJune2018.maude \ clearRulesJune2018.maude \ metaIntRewriteJune2018.maude \ metaModuleCacheJune2018.maude \ metaIntImportJune2018.maude \ metaIntAscentJune2018.maude \ objectMessageOct2018.maude \ metaIntMatchOct2018.maude \ physArgIndexOct2018.maude \ metaApplyNov2018.maude \ moduleSumMay2019.maude \ parameterTheoryMay2019.maude \ parameterTheoryCopyMay2019.maude \ polymorphicOverloadMay2019.maude \ viewRecursionMay2019.maude \ instantiationJuly2019.maude \ ascentFunctionsJanuary2020.maude \ closeSocketFeb2020.maude \ metaParseStrategyApril2020.maude \ complexParserSyncApril2020.maude \ identityUnificationMay2020.maude \ sortCollapseMay2020.maude \ ACU_MissingUnifiersMay2020.maude \ variantUnifyJune2020.maude \ identityUnificationSeptember2020.maude \ CUI_OccursCheckSeptember2020.maude RESULT_FILES = \ CUIbug12-22-09.expected \ unificationMar2013.expected \ parserJune2018.expected \ staleViewJune2018.expected \ showModuleJune2018.expected \ clearRulesJune2018.expected \ metaIntRewriteJune2018.expected \ metaModuleCacheJune2018.expected \ metaIntImportJune2018.expected \ metaIntAscentJune2018.expected \ objectMessageOct2018.expected \ metaIntMatchOct2018.expected \ physArgIndexOct2018.expected \ metaApplyNov2018.expected \ moduleSumMay2019.expected \ parameterTheoryMay2019.expected \ parameterTheoryCopyMay2019.expected \ polymorphicOverloadMay2019.expected \ viewRecursionMay2019.expected \ instantiationJuly2019.expected \ ascentFunctionsJanuary2020.expected \ closeSocketFeb2020.expected \ metaParseStrategyApril2020.expected \ complexParserSyncApril2020.expected \ identityUnificationMay2020.expected \ sortCollapseMay2020.expected \ ACU_MissingUnifiersMay2020.expected \ variantUnifyJune2020.expected \ identityUnificationSeptember2020.expected \ CUI_OccursCheckSeptember2020.expected EXTRA_DIST = $(TESTS) $(MAUDE_FILES) $(RESULT_FILES) maude-3.1/tests/ResolvedBugs/showModuleJune2018.expected0000644000175200017520000000051413333173152020152 00000000000000========================================== erewrite in TEST : <> < me : User | state: 1 > createInterpreter( interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | state: 4 > showingModule(me, interpreter(0), fmod 'BAR is including 'FOO . sorts none . none none none none endfm) Bye. maude-3.1/tests/ResolvedBugs/metaIntMatchOct2018.expected0000644000175200017520000002466713565216260020252 00000000000000========================================== reduce in META-LEVEL : metaMatch(['MATCH], 'Z:Foo, 'f['a.Foo,'c.Foo], nil, 0) . *********** equation eq [Q:Qid] = sth Q:Qid is including Q:Qid . sorts none . none none none none none none none endsth . Q:Qid --> 'MATCH ['MATCH] ---> sth 'MATCH is including 'MATCH . sorts none . none none none none none none none endsth *********** trial #1 cmb f(X:Bar, Y:Bar) : Foo if h(X:Bar) = g(Y:Bar) . X:Bar --> a Y:Bar --> c *********** solving condition fragment h(X:Bar) = g(Y:Bar) *********** equation eq h(a) = b . empty substitution h(a) ---> b *********** equation eq g(c) = b . empty substitution g(c) ---> b *********** success for condition fragment h(X:Bar) = g(Y:Bar) X:Bar --> a Y:Bar --> c *********** success #1 *********** membership axiom cmb f(X:Bar, Y:Bar) : Foo if h(X:Bar) = g(Y:Bar) . X:Bar --> a Y:Bar --> c Bar: f(a, c) becomes Foo *********** equation (built-in equation for symbol metaMatch) metaMatch(sth 'MATCH is including 'MATCH . sorts none . none none none none none none none endsth, 'Z:Foo, 'f['a.Foo,'c.Foo], nil, 0) ---> 'Z:Foo <- 'f['a.Foo,'c.Foo] rewrites: 5 mb applications: 1 equational rewrites: 4 rule rewrites: 0 variant narrowing steps: 0 narrowing steps: 0 result Assignment: 'Z:Foo <- 'f['a.Foo,'c.Foo] ========================================== reduce in META-LEVEL : metaXmatch(['MATCH], 'Z:Foo, 'f['a.Foo,'c.Foo], nil, 0, unbounded, 0) . *********** equation eq [Q:Qid] = sth Q:Qid is including Q:Qid . sorts none . none none none none none none none endsth . Q:Qid --> 'MATCH ['MATCH] ---> sth 'MATCH is including 'MATCH . sorts none . none none none none none none none endsth *********** trial #1 cmb f(X:Bar, Y:Bar) : Foo if h(X:Bar) = g(Y:Bar) . X:Bar --> a Y:Bar --> c *********** solving condition fragment h(X:Bar) = g(Y:Bar) *********** equation eq h(a) = b . empty substitution h(a) ---> b *********** equation eq g(c) = b . empty substitution g(c) ---> b *********** success for condition fragment h(X:Bar) = g(Y:Bar) X:Bar --> a Y:Bar --> c *********** success #1 *********** membership axiom cmb f(X:Bar, Y:Bar) : Foo if h(X:Bar) = g(Y:Bar) . X:Bar --> a Y:Bar --> c Bar: f(a, c) becomes Foo *********** equation (built-in equation for symbol metaXmatch) metaXmatch(sth 'MATCH is including 'MATCH . sorts none . none none none none none none none endsth, 'Z:Foo, 'f['a.Foo,'c.Foo], nil, 0, unbounded, 0) ---> { 'Z:Foo <- 'f['a.Foo,'c.Foo],[]} rewrites: 5 mb applications: 1 equational rewrites: 4 rule rewrites: 0 variant narrowing steps: 0 narrowing steps: 0 result MatchPair: { 'Z:Foo <- 'f['a.Foo,'c.Foo],[]} ========================================== erewrite in MATCH-TEST : <> < me : User | soln: 0 > createInterpreter( interpreterManager, me, none) . *********** rule rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('MATCH, true)) . X --> me AS --> soln: 0 Y --> interpreterManager Z --> interpreter(0) < me : User | soln: 0 > createdInterpreter(me, interpreterManager, interpreter( 0)) ---> < me : User | soln: 0 > insertModule(interpreter(0), me, upModule('MATCH, true)) *********** equation (built-in equation for symbol upModule) upModule('MATCH, true) ---> fmod 'MATCH is nil sorts 'Bool ; 'Foo ; 'Bar . subsort 'Foo < 'Bar . op 'if_then_else_fi : 'Bool 'Universal 'Universal -> 'Universal [poly(2 3 0) special( id-hook('BranchSymbol, nil) term-hook('1, 'true.Bool) term-hook('2, 'false.Bool))] . op '_==_ : 'Universal 'Universal -> 'Bool [poly(1 2) prec(51) special( id-hook('EqualitySymbol, nil) term-hook('equalTerm, 'true.Bool) term-hook('notEqualTerm, 'false.Bool))] . op '_=/=_ : 'Universal 'Universal -> 'Bool [poly(1 2) prec(51) special( id-hook('EqualitySymbol, nil) term-hook('equalTerm, 'false.Bool) term-hook('notEqualTerm, 'true.Bool))] . op 'true : nil -> 'Bool [ctor special( id-hook('SystemTrue, nil))] . op 'false : nil -> 'Bool [ctor special( id-hook('SystemFalse, nil))] . op '_and_ : 'Bool 'Bool -> 'Bool [prec(55) assoc comm] . op '_or_ : 'Bool 'Bool -> 'Bool [prec(59) assoc comm] . op '_xor_ : 'Bool 'Bool -> 'Bool [prec(57) assoc comm] . op 'not_ : 'Bool -> 'Bool [prec(53)] . op '_implies_ : 'Bool 'Bool -> 'Bool [prec(61) gather('e 'E)] . op 'f : 'Bar 'Bar -> 'Bar [comm] . op 'g : 'Foo -> 'Foo [none] . op 'h : 'Foo -> 'Foo [none] . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'd : nil -> 'Foo [none] . op 'e : nil -> 'Foo [none] . cmb 'f['X:Bar,'Y:Bar] : 'Foo if 'h['X:Bar] = 'g['Y:Bar] [none] . eq 'h['a.Foo] = 'b.Foo [none] . eq 'g['c.Foo] = 'b.Foo [none] . eq 'h['c.Foo] = 'd.Foo [none] . eq 'g['a.Foo] = 'd.Foo [none] . eq '_and_['true.Bool,'A:Bool] = 'A:Bool [none] . eq '_and_['false.Bool,'A:Bool] = 'false.Bool [none] . eq '_and_['A:Bool,'A:Bool] = 'A:Bool [none] . eq '_xor_['false.Bool,'A:Bool] = 'A:Bool [none] . eq '_xor_['A:Bool,'A:Bool] = 'false.Bool [none] . eq '_and_['A:Bool,'_xor_['B:Bool,'C:Bool]] = '_xor_['_and_['A:Bool,'B:Bool], '_and_['A:Bool,'C:Bool]] [none] . eq 'not_['A:Bool] = '_xor_['true.Bool,'A:Bool] [none] . eq '_or_['A:Bool,'B:Bool] = '_xor_['_and_['A:Bool,'B:Bool],'_xor_['A:Bool, 'B:Bool]] [none] . eq '_implies_['A:Bool,'B:Bool] = 'not_['_xor_['A:Bool,'_and_['A:Bool, 'B:Bool]]] [none] . endfm *********** rule rl insertedModule(X, Y) < X : User | AS,soln: N > => < X : User | AS > getMatch(Y, X, 'MATCH, 'Z:Foo, 'f['a.Foo,'c.Foo], nil, N) . X --> me Y --> interpreter(0) AS --> (none).AttributeSet N --> 0 insertedModule(me, interpreter(0)) < me : User | soln: 0 > ---> < me : User | none > getMatch(interpreter(0), me, 'MATCH, 'Z:Foo, 'f['a.Foo, 'c.Foo], nil, 0) *********** trial #1 cmb f(X:Bar, Y:Bar) : Foo if h(X:Bar) = g(Y:Bar) . X:Bar --> a Y:Bar --> c *********** solving condition fragment h(X:Bar) = g(Y:Bar) *********** equation eq h(a) = b . empty substitution h(a) ---> b *********** equation eq g(c) = b . empty substitution g(c) ---> b *********** success for condition fragment h(X:Bar) = g(Y:Bar) X:Bar --> a Y:Bar --> c *********** success #1 *********** membership axiom cmb f(X:Bar, Y:Bar) : Foo if h(X:Bar) = g(Y:Bar) . X:Bar --> a Y:Bar --> c Bar: f(a, c) becomes Foo rewrites: 6 mb applications: 1 equational rewrites: 3 rule rewrites: 2 variant narrowing steps: 0 narrowing steps: 0 result Configuration: <> < me : User | none > gotMatch(me, interpreter(0), 3, 'Z:Foo <- 'f['a.Foo,'c.Foo]) ========================================== erewrite in XMATCH-TEST : <> < me : User | soln: 0 > createInterpreter( interpreterManager, me, none) . *********** rule rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('MATCH, true)) . X --> me AS --> soln: 0 Y --> interpreterManager Z --> interpreter(0) < me : User | soln: 0 > createdInterpreter(me, interpreterManager, interpreter( 0)) ---> < me : User | soln: 0 > insertModule(interpreter(0), me, upModule('MATCH, true)) *********** equation (built-in equation for symbol upModule) upModule('MATCH, true) ---> fmod 'MATCH is nil sorts 'Bool ; 'Foo ; 'Bar . subsort 'Foo < 'Bar . op 'if_then_else_fi : 'Bool 'Universal 'Universal -> 'Universal [poly(2 3 0) special( id-hook('BranchSymbol, nil) term-hook('1, 'true.Bool) term-hook('2, 'false.Bool))] . op '_==_ : 'Universal 'Universal -> 'Bool [poly(1 2) prec(51) special( id-hook('EqualitySymbol, nil) term-hook('equalTerm, 'true.Bool) term-hook('notEqualTerm, 'false.Bool))] . op '_=/=_ : 'Universal 'Universal -> 'Bool [poly(1 2) prec(51) special( id-hook('EqualitySymbol, nil) term-hook('equalTerm, 'false.Bool) term-hook('notEqualTerm, 'true.Bool))] . op 'true : nil -> 'Bool [ctor special( id-hook('SystemTrue, nil))] . op 'false : nil -> 'Bool [ctor special( id-hook('SystemFalse, nil))] . op '_and_ : 'Bool 'Bool -> 'Bool [prec(55) assoc comm] . op '_or_ : 'Bool 'Bool -> 'Bool [prec(59) assoc comm] . op '_xor_ : 'Bool 'Bool -> 'Bool [prec(57) assoc comm] . op 'not_ : 'Bool -> 'Bool [prec(53)] . op '_implies_ : 'Bool 'Bool -> 'Bool [prec(61) gather('e 'E)] . op 'f : 'Bar 'Bar -> 'Bar [comm] . op 'g : 'Foo -> 'Foo [none] . op 'h : 'Foo -> 'Foo [none] . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'd : nil -> 'Foo [none] . op 'e : nil -> 'Foo [none] . cmb 'f['X:Bar,'Y:Bar] : 'Foo if 'h['X:Bar] = 'g['Y:Bar] [none] . eq 'h['a.Foo] = 'b.Foo [none] . eq 'g['c.Foo] = 'b.Foo [none] . eq 'h['c.Foo] = 'd.Foo [none] . eq 'g['a.Foo] = 'd.Foo [none] . eq '_and_['true.Bool,'A:Bool] = 'A:Bool [none] . eq '_and_['false.Bool,'A:Bool] = 'false.Bool [none] . eq '_and_['A:Bool,'A:Bool] = 'A:Bool [none] . eq '_xor_['false.Bool,'A:Bool] = 'A:Bool [none] . eq '_xor_['A:Bool,'A:Bool] = 'false.Bool [none] . eq '_and_['A:Bool,'_xor_['B:Bool,'C:Bool]] = '_xor_['_and_['A:Bool,'B:Bool], '_and_['A:Bool,'C:Bool]] [none] . eq 'not_['A:Bool] = '_xor_['true.Bool,'A:Bool] [none] . eq '_or_['A:Bool,'B:Bool] = '_xor_['_and_['A:Bool,'B:Bool],'_xor_['A:Bool, 'B:Bool]] [none] . eq '_implies_['A:Bool,'B:Bool] = 'not_['_xor_['A:Bool,'_and_['A:Bool, 'B:Bool]]] [none] . endfm *********** rule rl insertedModule(X, Y) < X : User | AS,soln: N > => < X : User | AS > getXmatch(Y, X, 'MATCH, 'Z:Foo, 'f['a.Foo,'c.Foo], nil, 0, unbounded, N) . X --> me Y --> interpreter(0) AS --> (none).AttributeSet N --> 0 insertedModule(me, interpreter(0)) < me : User | soln: 0 > ---> < me : User | none > getXmatch(interpreter(0), me, 'MATCH, 'Z:Foo, 'f['a.Foo, 'c.Foo], nil, 0, unbounded, 0) *********** trial #1 cmb f(X:Bar, Y:Bar) : Foo if h(X:Bar) = g(Y:Bar) . X:Bar --> a Y:Bar --> c *********** solving condition fragment h(X:Bar) = g(Y:Bar) *********** equation eq h(a) = b . empty substitution h(a) ---> b *********** equation eq g(c) = b . empty substitution g(c) ---> b *********** success for condition fragment h(X:Bar) = g(Y:Bar) X:Bar --> a Y:Bar --> c *********** success #1 *********** membership axiom cmb f(X:Bar, Y:Bar) : Foo if h(X:Bar) = g(Y:Bar) . X:Bar --> a Y:Bar --> c Bar: f(a, c) becomes Foo rewrites: 6 mb applications: 1 equational rewrites: 3 rule rewrites: 2 variant narrowing steps: 0 narrowing steps: 0 result Configuration: <> < me : User | none > gotXmatch(me, interpreter(0), 3, 'Z:Foo <- 'f['a.Foo,'c.Foo], []) Bye. maude-3.1/tests/ResolvedBugs/parameterTheoryMay2019.maude0000644000175200017520000000145213473576510020333 00000000000000set show timing off . set show advisories off . *** check number of sorts from parameter theory set include BOOL off . fmod FOO{P :: TRIV} is op a : -> P$Elt . endfm fmod BAR{Q :: TRIV} is inc FOO{Q} * (sort Q$Elt to Bad{Q}) . endfm show all . *** check number of operators from parameter theory set include BOOL off . fth T is sort Elt . op 0 : -> Elt . endfth fmod FOO{P :: T} is op a : -> P$Elt . eq a = 0 . endfm fmod BAR{Q :: T} is inc FOO{Q} * (op 0 to 1) . endfm show all . *** check number of polymorphic operators from parameter theory set include BOOL off . fth T is sort Elt . op f : Poly -> Elt [poly (1)] . endfth fmod FOO{P :: T} is op a : -> P$Elt . op b : -> P$Elt . eq f(a) = b . endfm fmod BAR{Q :: T} is inc FOO{Q} * (op f to g) . endfm show all . maude-3.1/tests/ResolvedBugs/parserJune2018.expected0000644000175200017520000000020613315317327017322 00000000000000Warning: , line 12: didn't expect token b: a b <---*HERE* Warning: , line 12: no parse for term. Bye. maude-3.1/tests/ResolvedBugs/variantUnifyJune2020.expected0000644000175200017520000026052113720021036020473 00000000000000========================================== variant unify in A-UNIF : j(A, f(B, E, C), f(D, E, j(G, H), I)) =? j(U, f(V, W), f(X, j(Y, Z), S)) . Unifier 1 rewrites: 0 A --> j(%14:List, f(%8:List, %9:List), f(%10:List, j(%11:List, %12:List), %13:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> %7:List U --> j(%14:List, f(%1:List, %2:Elt, %3:List), f(%4:List, %2:Elt, j(%5:List, %6:List), %7:List)) V --> %8:List W --> %9:List X --> %10:List Z --> %11:List Y --> %12:List S --> %13:List Unifier 2 rewrites: 0 A --> j(%12:List, f(%8:List, j(%9:List, %10:List), %11:List)) B --> %1:List E --> %2:Elt C --> f(%13:List, %7:List) D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> j(%12:List, f(%3:List, %2:Elt, j(%4:List, %5:List), %6:List)) V --> f(%1:List, %2:Elt, %13:List) W --> %7:List X --> %8:List Z --> %9:List Y --> %10:List S --> %11:List Unifier 3 rewrites: 0 A --> j(%12:List, f(%8:List, j(%9:List, %10:List), %11:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> %7:List U --> j(%12:List, f(%4:List, %2:Elt, j(%5:List, %6:List), %7:List)) V --> f(%1:List, %2:Elt) W --> %3:List X --> %8:List Z --> %9:List Y --> %10:List S --> %11:List Unifier 4 rewrites: 0 A --> j(%12:List, f(%8:List, j(%9:List, %10:List), %11:List)) B --> f(%7:List, %13:List) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> j(%12:List, f(%3:List, %1:Elt, j(%4:List, %5:List), %6:List)) V --> %7:List W --> f(%13:List, %1:Elt, %2:List) X --> %8:List Z --> %9:List Y --> %10:List S --> %11:List Unifier 5 rewrites: 0 A --> j(%12:List, f(%8:List, j(%9:List, %10:List), %11:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> %7:List U --> j(%12:List, f(%4:List, %2:Elt, j(%5:List, %6:List), %7:List)) V --> %1:List W --> f(%2:Elt, %3:List) X --> %8:List Z --> %9:List Y --> %10:List S --> %11:List Unifier 6 rewrites: 0 A --> j(%12:List, f(%8:List, j(%9:List, %10:List), %11:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> f(%13:List, %7:List) U --> j(%12:List, f(%1:List, %2:Elt, %3:List)) V --> f(%4:List, %2:Elt, j(%5:List, %6:List), %13:List) W --> %7:List X --> %8:List Z --> %9:List Y --> %10:List S --> %11:List Unifier 7 rewrites: 0 A --> j(%10:List, f(%6:List, j(%7:List, %8:List), %9:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> f(%11:List, %12:List) G --> 1 I --> %5:List U --> j(%10:List, f(%1:List, %2:Elt, %3:List)) V --> f(%4:List, %2:Elt, %11:List) W --> f(%12:List, %5:List) X --> %6:List Z --> %7:List Y --> %8:List S --> %9:List Unifier 8 rewrites: 0 A --> j(%10:List, f(%6:List, j(%7:List, %8:List), %9:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> 1 G --> f(%11:List, %12:List) I --> %5:List U --> j(%10:List, f(%1:List, %2:Elt, %3:List)) V --> f(%4:List, %2:Elt, %11:List) W --> f(%12:List, %5:List) X --> %6:List Z --> %7:List Y --> %8:List S --> %9:List Unifier 9 rewrites: 0 A --> j(%12:List, f(%8:List, j(%9:List, %10:List), %11:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> %7:List U --> j(%12:List, f(%1:List, %2:Elt, %3:List)) V --> f(%4:List, %2:Elt, j(%5:List, %6:List)) W --> %7:List X --> %8:List Z --> %9:List Y --> %10:List S --> %11:List Unifier 10 rewrites: 0 A --> j(%12:List, f(%8:List, j(%9:List, %10:List), %11:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> %7:List U --> j(%12:List, f(%1:List, %2:Elt, %3:List)) V --> f(%4:List, %2:Elt) W --> f(j(%5:List, %6:List), %7:List) X --> %8:List Z --> %9:List Y --> %10:List S --> %11:List Unifier 11 rewrites: 0 A --> j(%12:List, f(%8:List, j(%9:List, %10:List), %11:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> f(%7:List, %13:List) H --> %4:List G --> %5:List I --> %6:List U --> j(%12:List, f(%1:List, %2:Elt, %3:List)) V --> %7:List W --> f(%13:List, %2:Elt, j(%4:List, %5:List), %6:List) X --> %8:List Z --> %9:List Y --> %10:List S --> %11:List Unifier 12 rewrites: 0 A --> j(%12:List, f(%8:List, j(%9:List, %10:List), %11:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> %7:List U --> j(%12:List, f(%1:List, %2:Elt, %3:List)) V --> %4:List W --> f(%2:Elt, j(%5:List, %6:List), %7:List) X --> %8:List Z --> %9:List Y --> %10:List S --> %11:List Unifier 13 rewrites: 0 A --> j(%12:List, f(%7:List, %8:List)) B --> %1:List E --> %2:Elt C --> f(%13:List, j(%9:List, %10:List), %11:List) D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> j(%12:List, f(%3:List, %2:Elt, j(%4:List, %5:List), %6:List)) V --> %7:List W --> %8:List X --> f(%1:List, %2:Elt, %13:List) Z --> %9:List Y --> %10:List S --> %11:List Unifier 14 rewrites: 0 A --> j(%12:List, f(%7:List, %8:List)) B --> %1:List E --> %2:Elt C --> f(j(%9:List, %10:List), %11:List) D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> j(%12:List, f(%3:List, %2:Elt, j(%4:List, %5:List), %6:List)) V --> %7:List W --> %8:List X --> f(%1:List, %2:Elt) Z --> %9:List Y --> %10:List S --> %11:List Unifier 15 rewrites: 0 A --> j(%10:List, f(%6:List, %7:List)) B --> f(%8:List, %11:List) E --> %1:Elt C --> f(%12:List, %9:List) D --> %2:List H --> %3:List G --> %4:List I --> %5:List U --> j(%10:List, f(%2:List, %1:Elt, j(%3:List, %4:List), %5:List)) V --> %6:List W --> %7:List X --> %8:List Z --> f(%11:List, %1:Elt, %12:List) Y --> 1 S --> %9:List Unifier 16 rewrites: 0 A --> j(%10:List, f(%6:List, %7:List)) B --> f(%8:List, %11:List) E --> %1:Elt C --> f(%12:List, %9:List) D --> %2:List H --> %3:List G --> %4:List I --> %5:List U --> j(%10:List, f(%2:List, %1:Elt, j(%3:List, %4:List), %5:List)) V --> %6:List W --> %7:List X --> %8:List Z --> 1 Y --> f(%11:List, %1:Elt, %12:List) S --> %9:List Unifier 17 rewrites: 0 A --> j(%10:List, f(%7:List, %8:List)) B --> f(%9:List, %11:List) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> j(%10:List, f(%3:List, %1:Elt, j(%4:List, %5:List), %6:List)) V --> %7:List W --> %8:List X --> %9:List Z --> f(%11:List, %1:Elt) Y --> 1 S --> %2:List Unifier 18 rewrites: 0 A --> j(%10:List, f(%7:List, %8:List)) B --> f(%9:List, %11:List) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> j(%10:List, f(%3:List, %1:Elt, j(%4:List, %5:List), %6:List)) V --> %7:List W --> %8:List X --> %9:List Z --> 1 Y --> f(%11:List, %1:Elt) S --> %2:List Unifier 19 rewrites: 0 A --> j(%12:List, f(%7:List, %8:List)) B --> f(%9:List, j(%10:List, %11:List), %13:List) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> j(%12:List, f(%3:List, %1:Elt, j(%4:List, %5:List), %6:List)) V --> %7:List W --> %8:List X --> %9:List Z --> %10:List Y --> %11:List S --> f(%13:List, %1:Elt, %2:List) Unifier 20 rewrites: 0 A --> j(%12:List, f(%7:List, %8:List)) B --> f(%9:List, j(%10:List, %11:List)) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> j(%12:List, f(%3:List, %1:Elt, j(%4:List, %5:List), %6:List)) V --> %7:List W --> %8:List X --> %9:List Z --> %10:List Y --> %11:List S --> f(%1:Elt, %2:List) Unifier 21 rewrites: 0 A --> j(%10:List, f(%7:List, %8:List)) B --> %1:List E --> %2:Elt C --> f(%11:List, %9:List) D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> j(%10:List, f(%3:List, %2:Elt, j(%4:List, %5:List), %6:List)) V --> %7:List W --> %8:List X --> %1:List Z --> f(%2:Elt, %11:List) Y --> 1 S --> %9:List Unifier 22 rewrites: 0 A --> j(%10:List, f(%7:List, %8:List)) B --> %1:List E --> %2:Elt C --> f(%11:List, %9:List) D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> j(%10:List, f(%3:List, %2:Elt, j(%4:List, %5:List), %6:List)) V --> %7:List W --> %8:List X --> %1:List Z --> 1 Y --> f(%2:Elt, %11:List) S --> %9:List Unifier 23 rewrites: 0 A --> j(%10:List, f(%8:List, %9:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> %7:List U --> j(%10:List, f(%4:List, %2:Elt, j(%5:List, %6:List), %7:List)) V --> %8:List W --> %9:List X --> %1:List Z --> %2:Elt Y --> 1 S --> %3:List Unifier 24 rewrites: 0 A --> j(%10:List, f(%8:List, %9:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> %7:List U --> j(%10:List, f(%4:List, %2:Elt, j(%5:List, %6:List), %7:List)) V --> %8:List W --> %9:List X --> %1:List Z --> 1 Y --> %2:Elt S --> %3:List Unifier 25 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> f(%12:List, j(%8:List, %9:List), %10:List) D --> %3:List H --> %4:List G --> %5:List I --> f(%11:List, %7:List) U --> %6:List V --> f(%3:List, %2:Elt, j(%4:List, %5:List), %11:List) W --> %7:List X --> f(%1:List, %2:Elt, %12:List) Z --> %8:List Y --> %9:List S --> %10:List Unifier 26 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> f(%11:List, j(%6:List, %7:List), %8:List) D --> %3:List H --> f(%9:List, %10:List) G --> 1 I --> %4:List U --> %5:List V --> f(%3:List, %2:Elt, %9:List) W --> f(%10:List, %4:List) X --> f(%1:List, %2:Elt, %11:List) Z --> %6:List Y --> %7:List S --> %8:List Unifier 27 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> f(%11:List, j(%6:List, %7:List), %8:List) D --> %3:List H --> 1 G --> f(%9:List, %10:List) I --> %4:List U --> %5:List V --> f(%3:List, %2:Elt, %9:List) W --> f(%10:List, %4:List) X --> f(%1:List, %2:Elt, %11:List) Z --> %6:List Y --> %7:List S --> %8:List Unifier 28 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> f(%11:List, j(%8:List, %9:List), %10:List) D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> f(%3:List, %2:Elt, j(%4:List, %5:List)) W --> %6:List X --> f(%1:List, %2:Elt, %11:List) Z --> %8:List Y --> %9:List S --> %10:List Unifier 29 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> f(%11:List, j(%8:List, %9:List), %10:List) D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> f(%3:List, %2:Elt) W --> f(j(%4:List, %5:List), %6:List) X --> f(%1:List, %2:Elt, %11:List) Z --> %8:List Y --> %9:List S --> %10:List Unifier 30 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> f(%12:List, j(%8:List, %9:List), %10:List) D --> f(%7:List, %11:List) H --> %3:List G --> %4:List I --> %5:List U --> %6:List V --> %7:List W --> f(%11:List, %2:Elt, j(%3:List, %4:List), %5:List) X --> f(%1:List, %2:Elt, %12:List) Z --> %8:List Y --> %9:List S --> %10:List Unifier 31 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> f(%11:List, j(%8:List, %9:List), %10:List) D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> %3:List W --> f(%2:Elt, j(%4:List, %5:List), %6:List) X --> f(%1:List, %2:Elt, %11:List) Z --> %8:List Y --> %9:List S --> %10:List Unifier 32 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> f(j(%8:List, %9:List), %10:List) D --> %3:List H --> %4:List G --> %5:List I --> f(%11:List, %7:List) U --> %6:List V --> f(%3:List, %2:Elt, j(%4:List, %5:List), %11:List) W --> %7:List X --> f(%1:List, %2:Elt) Z --> %8:List Y --> %9:List S --> %10:List Unifier 33 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> f(j(%6:List, %7:List), %8:List) D --> %3:List H --> f(%9:List, %10:List) G --> 1 I --> %4:List U --> %5:List V --> f(%3:List, %2:Elt, %9:List) W --> f(%10:List, %4:List) X --> f(%1:List, %2:Elt) Z --> %6:List Y --> %7:List S --> %8:List Unifier 34 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> f(j(%6:List, %7:List), %8:List) D --> %3:List H --> 1 G --> f(%9:List, %10:List) I --> %4:List U --> %5:List V --> f(%3:List, %2:Elt, %9:List) W --> f(%10:List, %4:List) X --> f(%1:List, %2:Elt) Z --> %6:List Y --> %7:List S --> %8:List Unifier 35 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> f(j(%8:List, %9:List), %10:List) D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> f(%3:List, %2:Elt, j(%4:List, %5:List)) W --> %6:List X --> f(%1:List, %2:Elt) Z --> %8:List Y --> %9:List S --> %10:List Unifier 36 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> f(j(%8:List, %9:List), %10:List) D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> f(%3:List, %2:Elt) W --> f(j(%4:List, %5:List), %6:List) X --> f(%1:List, %2:Elt) Z --> %8:List Y --> %9:List S --> %10:List Unifier 37 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> f(j(%8:List, %9:List), %10:List) D --> f(%7:List, %11:List) H --> %3:List G --> %4:List I --> %5:List U --> %6:List V --> %7:List W --> f(%11:List, %2:Elt, j(%3:List, %4:List), %5:List) X --> f(%1:List, %2:Elt) Z --> %8:List Y --> %9:List S --> %10:List Unifier 38 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> f(j(%8:List, %9:List), %10:List) D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> %3:List W --> f(%2:Elt, j(%4:List, %5:List), %6:List) X --> f(%1:List, %2:Elt) Z --> %8:List Y --> %9:List S --> %10:List Unifier 39 rewrites: 0 A --> %5:List B --> f(%7:List, %10:List) E --> %1:Elt C --> f(%11:List, %8:List) D --> %2:List H --> %3:List G --> %4:List I --> f(%9:List, %6:List) U --> %5:List V --> f(%2:List, %1:Elt, j(%3:List, %4:List), %9:List) W --> %6:List X --> %7:List Z --> f(%10:List, %1:Elt, %11:List) Y --> 1 S --> %8:List Unifier 40 rewrites: 0 A --> %5:List B --> f(%7:List, %10:List) E --> %1:Elt C --> f(%11:List, %8:List) D --> %2:List H --> %3:List G --> %4:List I --> f(%9:List, %6:List) U --> %5:List V --> f(%2:List, %1:Elt, j(%3:List, %4:List), %9:List) W --> %6:List X --> %7:List Z --> 1 Y --> f(%10:List, %1:Elt, %11:List) S --> %8:List Unifier 41 rewrites: 0 A --> %4:List B --> f(%5:List, %9:List) E --> %1:Elt C --> f(%10:List, %6:List) D --> %2:List H --> f(%7:List, %8:List) G --> 1 I --> %3:List U --> %4:List V --> f(%2:List, %1:Elt, %7:List) W --> f(%8:List, %3:List) X --> %5:List Z --> f(%9:List, %1:Elt, %10:List) Y --> 1 S --> %6:List Unifier 42 rewrites: 0 A --> %4:List B --> f(%5:List, %9:List) E --> %1:Elt C --> f(%10:List, %6:List) D --> %2:List H --> f(%7:List, %8:List) G --> 1 I --> %3:List U --> %4:List V --> f(%2:List, %1:Elt, %7:List) W --> f(%8:List, %3:List) X --> %5:List Z --> 1 Y --> f(%9:List, %1:Elt, %10:List) S --> %6:List Unifier 43 rewrites: 0 A --> %4:List B --> f(%5:List, %9:List) E --> %1:Elt C --> f(%10:List, %6:List) D --> %2:List H --> 1 G --> f(%7:List, %8:List) I --> %3:List U --> %4:List V --> f(%2:List, %1:Elt, %7:List) W --> f(%8:List, %3:List) X --> %5:List Z --> f(%9:List, %1:Elt, %10:List) Y --> 1 S --> %6:List Unifier 44 rewrites: 0 A --> %4:List B --> f(%5:List, %9:List) E --> %1:Elt C --> f(%10:List, %6:List) D --> %2:List H --> 1 G --> f(%7:List, %8:List) I --> %3:List U --> %4:List V --> f(%2:List, %1:Elt, %7:List) W --> f(%8:List, %3:List) X --> %5:List Z --> 1 Y --> f(%9:List, %1:Elt, %10:List) S --> %6:List Unifier 45 rewrites: 0 A --> %6:List B --> f(%7:List, %9:List) E --> %1:Elt C --> f(%10:List, %8:List) D --> %2:List H --> %3:List G --> %4:List I --> %5:List U --> %6:List V --> f(%2:List, %1:Elt, j(%3:List, %4:List)) W --> %5:List X --> %7:List Z --> f(%9:List, %1:Elt, %10:List) Y --> 1 S --> %8:List Unifier 46 rewrites: 0 A --> %6:List B --> f(%7:List, %9:List) E --> %1:Elt C --> f(%10:List, %8:List) D --> %2:List H --> %3:List G --> %4:List I --> %5:List U --> %6:List V --> f(%2:List, %1:Elt, j(%3:List, %4:List)) W --> %5:List X --> %7:List Z --> 1 Y --> f(%9:List, %1:Elt, %10:List) S --> %8:List Unifier 47 rewrites: 0 A --> %6:List B --> f(%7:List, %9:List) E --> %1:Elt C --> f(%10:List, %8:List) D --> %2:List H --> %3:List G --> %4:List I --> %5:List U --> %6:List V --> f(%2:List, %1:Elt) W --> f(j(%3:List, %4:List), %5:List) X --> %7:List Z --> f(%9:List, %1:Elt, %10:List) Y --> 1 S --> %8:List Unifier 48 rewrites: 0 A --> %6:List B --> f(%7:List, %9:List) E --> %1:Elt C --> f(%10:List, %8:List) D --> %2:List H --> %3:List G --> %4:List I --> %5:List U --> %6:List V --> f(%2:List, %1:Elt) W --> f(j(%3:List, %4:List), %5:List) X --> %7:List Z --> 1 Y --> f(%9:List, %1:Elt, %10:List) S --> %8:List Unifier 49 rewrites: 0 A --> %5:List B --> f(%7:List, %10:List) E --> %1:Elt C --> f(%11:List, %8:List) D --> f(%6:List, %9:List) H --> %2:List G --> %3:List I --> %4:List U --> %5:List V --> %6:List W --> f(%9:List, %1:Elt, j(%2:List, %3:List), %4:List) X --> %7:List Z --> f(%10:List, %1:Elt, %11:List) Y --> 1 S --> %8:List Unifier 50 rewrites: 0 A --> %5:List B --> f(%7:List, %10:List) E --> %1:Elt C --> f(%11:List, %8:List) D --> f(%6:List, %9:List) H --> %2:List G --> %3:List I --> %4:List U --> %5:List V --> %6:List W --> f(%9:List, %1:Elt, j(%2:List, %3:List), %4:List) X --> %7:List Z --> 1 Y --> f(%10:List, %1:Elt, %11:List) S --> %8:List Unifier 51 rewrites: 0 A --> %6:List B --> f(%7:List, %9:List) E --> %1:Elt C --> f(%10:List, %8:List) D --> %2:List H --> %3:List G --> %4:List I --> %5:List U --> %6:List V --> %2:List W --> f(%1:Elt, j(%3:List, %4:List), %5:List) X --> %7:List Z --> f(%9:List, %1:Elt, %10:List) Y --> 1 S --> %8:List Unifier 52 rewrites: 0 A --> %6:List B --> f(%7:List, %9:List) E --> %1:Elt C --> f(%10:List, %8:List) D --> %2:List H --> %3:List G --> %4:List I --> %5:List U --> %6:List V --> %2:List W --> f(%1:Elt, j(%3:List, %4:List), %5:List) X --> %7:List Z --> 1 Y --> f(%9:List, %1:Elt, %10:List) S --> %8:List Unifier 53 rewrites: 0 A --> %6:List B --> f(%8:List, %10:List) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> f(%9:List, %7:List) U --> %6:List V --> f(%3:List, %1:Elt, j(%4:List, %5:List), %9:List) W --> %7:List X --> %8:List Z --> f(%10:List, %1:Elt) Y --> 1 S --> %2:List Unifier 54 rewrites: 0 A --> %6:List B --> f(%8:List, %10:List) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> f(%9:List, %7:List) U --> %6:List V --> f(%3:List, %1:Elt, j(%4:List, %5:List), %9:List) W --> %7:List X --> %8:List Z --> 1 Y --> f(%10:List, %1:Elt) S --> %2:List Unifier 55 rewrites: 0 A --> %5:List B --> f(%6:List, %9:List) E --> %1:Elt C --> %2:List D --> %3:List H --> f(%7:List, %8:List) G --> 1 I --> %4:List U --> %5:List V --> f(%3:List, %1:Elt, %7:List) W --> f(%8:List, %4:List) X --> %6:List Z --> f(%9:List, %1:Elt) Y --> 1 S --> %2:List Unifier 56 rewrites: 0 A --> %5:List B --> f(%6:List, %9:List) E --> %1:Elt C --> %2:List D --> %3:List H --> f(%7:List, %8:List) G --> 1 I --> %4:List U --> %5:List V --> f(%3:List, %1:Elt, %7:List) W --> f(%8:List, %4:List) X --> %6:List Z --> 1 Y --> f(%9:List, %1:Elt) S --> %2:List Unifier 57 rewrites: 0 A --> %5:List B --> f(%6:List, %9:List) E --> %1:Elt C --> %2:List D --> %3:List H --> 1 G --> f(%7:List, %8:List) I --> %4:List U --> %5:List V --> f(%3:List, %1:Elt, %7:List) W --> f(%8:List, %4:List) X --> %6:List Z --> f(%9:List, %1:Elt) Y --> 1 S --> %2:List Unifier 58 rewrites: 0 A --> %5:List B --> f(%6:List, %9:List) E --> %1:Elt C --> %2:List D --> %3:List H --> 1 G --> f(%7:List, %8:List) I --> %4:List U --> %5:List V --> f(%3:List, %1:Elt, %7:List) W --> f(%8:List, %4:List) X --> %6:List Z --> 1 Y --> f(%9:List, %1:Elt) S --> %2:List Unifier 59 rewrites: 0 A --> %7:List B --> f(%8:List, %9:List) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> f(%3:List, %1:Elt, j(%4:List, %5:List)) W --> %6:List X --> %8:List Z --> f(%9:List, %1:Elt) Y --> 1 S --> %2:List Unifier 60 rewrites: 0 A --> %7:List B --> f(%8:List, %9:List) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> f(%3:List, %1:Elt, j(%4:List, %5:List)) W --> %6:List X --> %8:List Z --> 1 Y --> f(%9:List, %1:Elt) S --> %2:List Unifier 61 rewrites: 0 A --> %7:List B --> f(%8:List, %9:List) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> f(%3:List, %1:Elt) W --> f(j(%4:List, %5:List), %6:List) X --> %8:List Z --> f(%9:List, %1:Elt) Y --> 1 S --> %2:List Unifier 62 rewrites: 0 A --> %7:List B --> f(%8:List, %9:List) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> f(%3:List, %1:Elt) W --> f(j(%4:List, %5:List), %6:List) X --> %8:List Z --> 1 Y --> f(%9:List, %1:Elt) S --> %2:List Unifier 63 rewrites: 0 A --> %6:List B --> f(%8:List, %10:List) E --> %1:Elt C --> %2:List D --> f(%7:List, %9:List) H --> %3:List G --> %4:List I --> %5:List U --> %6:List V --> %7:List W --> f(%9:List, %1:Elt, j(%3:List, %4:List), %5:List) X --> %8:List Z --> f(%10:List, %1:Elt) Y --> 1 S --> %2:List Unifier 64 rewrites: 0 A --> %6:List B --> f(%8:List, %10:List) E --> %1:Elt C --> %2:List D --> f(%7:List, %9:List) H --> %3:List G --> %4:List I --> %5:List U --> %6:List V --> %7:List W --> f(%9:List, %1:Elt, j(%3:List, %4:List), %5:List) X --> %8:List Z --> 1 Y --> f(%10:List, %1:Elt) S --> %2:List Unifier 65 rewrites: 0 A --> %7:List B --> f(%8:List, %9:List) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> %3:List W --> f(%1:Elt, j(%4:List, %5:List), %6:List) X --> %8:List Z --> f(%9:List, %1:Elt) Y --> 1 S --> %2:List Unifier 66 rewrites: 0 A --> %7:List B --> f(%8:List, %9:List) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> %3:List W --> f(%1:Elt, j(%4:List, %5:List), %6:List) X --> %8:List Z --> 1 Y --> f(%9:List, %1:Elt) S --> %2:List Unifier 67 rewrites: 0 A --> %6:List B --> f(%8:List, j(%9:List, %10:List), %12:List) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> f(%11:List, %7:List) U --> %6:List V --> f(%3:List, %1:Elt, j(%4:List, %5:List), %11:List) W --> %7:List X --> %8:List Z --> %9:List Y --> %10:List S --> f(%12:List, %1:Elt, %2:List) Unifier 68 rewrites: 0 A --> %5:List B --> f(%6:List, j(%7:List, %8:List), %11:List) E --> %1:Elt C --> %2:List D --> %3:List H --> f(%9:List, %10:List) G --> 1 I --> %4:List U --> %5:List V --> f(%3:List, %1:Elt, %9:List) W --> f(%10:List, %4:List) X --> %6:List Z --> %7:List Y --> %8:List S --> f(%11:List, %1:Elt, %2:List) Unifier 69 rewrites: 0 A --> %5:List B --> f(%6:List, j(%7:List, %8:List), %11:List) E --> %1:Elt C --> %2:List D --> %3:List H --> 1 G --> f(%9:List, %10:List) I --> %4:List U --> %5:List V --> f(%3:List, %1:Elt, %9:List) W --> f(%10:List, %4:List) X --> %6:List Z --> %7:List Y --> %8:List S --> f(%11:List, %1:Elt, %2:List) Unifier 70 rewrites: 0 A --> %7:List B --> f(%8:List, j(%9:List, %10:List), %11:List) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> f(%3:List, %1:Elt, j(%4:List, %5:List)) W --> %6:List X --> %8:List Z --> %9:List Y --> %10:List S --> f(%11:List, %1:Elt, %2:List) Unifier 71 rewrites: 0 A --> %7:List B --> f(%8:List, j(%9:List, %10:List), %11:List) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> f(%3:List, %1:Elt) W --> f(j(%4:List, %5:List), %6:List) X --> %8:List Z --> %9:List Y --> %10:List S --> f(%11:List, %1:Elt, %2:List) Unifier 72 rewrites: 0 A --> %6:List B --> f(%8:List, j(%9:List, %10:List), %12:List) E --> %1:Elt C --> %2:List D --> f(%7:List, %11:List) H --> %3:List G --> %4:List I --> %5:List U --> %6:List V --> %7:List W --> f(%11:List, %1:Elt, j(%3:List, %4:List), %5:List) X --> %8:List Z --> %9:List Y --> %10:List S --> f(%12:List, %1:Elt, %2:List) Unifier 73 rewrites: 0 A --> %7:List B --> f(%8:List, j(%9:List, %10:List), %11:List) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> %3:List W --> f(%1:Elt, j(%4:List, %5:List), %6:List) X --> %8:List Z --> %9:List Y --> %10:List S --> f(%11:List, %1:Elt, %2:List) Unifier 74 rewrites: 0 A --> %6:List B --> f(%8:List, j(%9:List, %10:List)) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> f(%11:List, %7:List) U --> %6:List V --> f(%3:List, %1:Elt, j(%4:List, %5:List), %11:List) W --> %7:List X --> %8:List Z --> %9:List Y --> %10:List S --> f(%1:Elt, %2:List) Unifier 75 rewrites: 0 A --> %5:List B --> f(%6:List, j(%7:List, %8:List)) E --> %1:Elt C --> %2:List D --> %3:List H --> f(%9:List, %10:List) G --> 1 I --> %4:List U --> %5:List V --> f(%3:List, %1:Elt, %9:List) W --> f(%10:List, %4:List) X --> %6:List Z --> %7:List Y --> %8:List S --> f(%1:Elt, %2:List) Unifier 76 rewrites: 0 A --> %5:List B --> f(%6:List, j(%7:List, %8:List)) E --> %1:Elt C --> %2:List D --> %3:List H --> 1 G --> f(%9:List, %10:List) I --> %4:List U --> %5:List V --> f(%3:List, %1:Elt, %9:List) W --> f(%10:List, %4:List) X --> %6:List Z --> %7:List Y --> %8:List S --> f(%1:Elt, %2:List) Unifier 77 rewrites: 0 A --> %7:List B --> f(%8:List, j(%9:List, %10:List)) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> f(%3:List, %1:Elt, j(%4:List, %5:List)) W --> %6:List X --> %8:List Z --> %9:List Y --> %10:List S --> f(%1:Elt, %2:List) Unifier 78 rewrites: 0 A --> %7:List B --> f(%8:List, j(%9:List, %10:List)) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> f(%3:List, %1:Elt) W --> f(j(%4:List, %5:List), %6:List) X --> %8:List Z --> %9:List Y --> %10:List S --> f(%1:Elt, %2:List) Unifier 79 rewrites: 0 A --> %6:List B --> f(%8:List, j(%9:List, %10:List)) E --> %1:Elt C --> %2:List D --> f(%7:List, %11:List) H --> %3:List G --> %4:List I --> %5:List U --> %6:List V --> %7:List W --> f(%11:List, %1:Elt, j(%3:List, %4:List), %5:List) X --> %8:List Z --> %9:List Y --> %10:List S --> f(%1:Elt, %2:List) Unifier 80 rewrites: 0 A --> %7:List B --> f(%8:List, j(%9:List, %10:List)) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> %3:List W --> f(%1:Elt, j(%4:List, %5:List), %6:List) X --> %8:List Z --> %9:List Y --> %10:List S --> f(%1:Elt, %2:List) Unifier 81 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> f(%10:List, %8:List) D --> %3:List H --> %4:List G --> %5:List I --> f(%9:List, %7:List) U --> %6:List V --> f(%3:List, %2:Elt, j(%4:List, %5:List), %9:List) W --> %7:List X --> %1:List Z --> f(%2:Elt, %10:List) Y --> 1 S --> %8:List Unifier 82 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> f(%10:List, %8:List) D --> %3:List H --> %4:List G --> %5:List I --> f(%9:List, %7:List) U --> %6:List V --> f(%3:List, %2:Elt, j(%4:List, %5:List), %9:List) W --> %7:List X --> %1:List Z --> 1 Y --> f(%2:Elt, %10:List) S --> %8:List Unifier 83 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> f(%9:List, %6:List) D --> %3:List H --> f(%7:List, %8:List) G --> 1 I --> %4:List U --> %5:List V --> f(%3:List, %2:Elt, %7:List) W --> f(%8:List, %4:List) X --> %1:List Z --> f(%2:Elt, %9:List) Y --> 1 S --> %6:List Unifier 84 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> f(%9:List, %6:List) D --> %3:List H --> f(%7:List, %8:List) G --> 1 I --> %4:List U --> %5:List V --> f(%3:List, %2:Elt, %7:List) W --> f(%8:List, %4:List) X --> %1:List Z --> 1 Y --> f(%2:Elt, %9:List) S --> %6:List Unifier 85 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> f(%9:List, %6:List) D --> %3:List H --> 1 G --> f(%7:List, %8:List) I --> %4:List U --> %5:List V --> f(%3:List, %2:Elt, %7:List) W --> f(%8:List, %4:List) X --> %1:List Z --> f(%2:Elt, %9:List) Y --> 1 S --> %6:List Unifier 86 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> f(%9:List, %6:List) D --> %3:List H --> 1 G --> f(%7:List, %8:List) I --> %4:List U --> %5:List V --> f(%3:List, %2:Elt, %7:List) W --> f(%8:List, %4:List) X --> %1:List Z --> 1 Y --> f(%2:Elt, %9:List) S --> %6:List Unifier 87 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> f(%9:List, %8:List) D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> f(%3:List, %2:Elt, j(%4:List, %5:List)) W --> %6:List X --> %1:List Z --> f(%2:Elt, %9:List) Y --> 1 S --> %8:List Unifier 88 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> f(%9:List, %8:List) D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> f(%3:List, %2:Elt, j(%4:List, %5:List)) W --> %6:List X --> %1:List Z --> 1 Y --> f(%2:Elt, %9:List) S --> %8:List Unifier 89 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> f(%9:List, %8:List) D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> f(%3:List, %2:Elt) W --> f(j(%4:List, %5:List), %6:List) X --> %1:List Z --> f(%2:Elt, %9:List) Y --> 1 S --> %8:List Unifier 90 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> f(%9:List, %8:List) D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> f(%3:List, %2:Elt) W --> f(j(%4:List, %5:List), %6:List) X --> %1:List Z --> 1 Y --> f(%2:Elt, %9:List) S --> %8:List Unifier 91 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> f(%10:List, %8:List) D --> f(%7:List, %9:List) H --> %3:List G --> %4:List I --> %5:List U --> %6:List V --> %7:List W --> f(%9:List, %2:Elt, j(%3:List, %4:List), %5:List) X --> %1:List Z --> f(%2:Elt, %10:List) Y --> 1 S --> %8:List Unifier 92 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> f(%10:List, %8:List) D --> f(%7:List, %9:List) H --> %3:List G --> %4:List I --> %5:List U --> %6:List V --> %7:List W --> f(%9:List, %2:Elt, j(%3:List, %4:List), %5:List) X --> %1:List Z --> 1 Y --> f(%2:Elt, %10:List) S --> %8:List Unifier 93 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> f(%9:List, %8:List) D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> %3:List W --> f(%2:Elt, j(%4:List, %5:List), %6:List) X --> %1:List Z --> f(%2:Elt, %9:List) Y --> 1 S --> %8:List Unifier 94 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> f(%9:List, %8:List) D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> %3:List W --> f(%2:Elt, j(%4:List, %5:List), %6:List) X --> %1:List Z --> 1 Y --> f(%2:Elt, %9:List) S --> %8:List Unifier 95 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> f(%9:List, %8:List) U --> %7:List V --> f(%4:List, %2:Elt, j(%5:List, %6:List), %9:List) W --> %8:List X --> %1:List Z --> %2:Elt Y --> 1 S --> %3:List Unifier 96 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> f(%9:List, %8:List) U --> %7:List V --> f(%4:List, %2:Elt, j(%5:List, %6:List), %9:List) W --> %8:List X --> %1:List Z --> 1 Y --> %2:Elt S --> %3:List Unifier 97 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> f(%7:List, %8:List) G --> 1 I --> %5:List U --> %6:List V --> f(%4:List, %2:Elt, %7:List) W --> f(%8:List, %5:List) X --> %1:List Z --> %2:Elt Y --> 1 S --> %3:List Unifier 98 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> f(%7:List, %8:List) G --> 1 I --> %5:List U --> %6:List V --> f(%4:List, %2:Elt, %7:List) W --> f(%8:List, %5:List) X --> %1:List Z --> 1 Y --> %2:Elt S --> %3:List Unifier 99 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> 1 G --> f(%7:List, %8:List) I --> %5:List U --> %6:List V --> f(%4:List, %2:Elt, %7:List) W --> f(%8:List, %5:List) X --> %1:List Z --> %2:Elt Y --> 1 S --> %3:List Unifier 100 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> 1 G --> f(%7:List, %8:List) I --> %5:List U --> %6:List V --> f(%4:List, %2:Elt, %7:List) W --> f(%8:List, %5:List) X --> %1:List Z --> 1 Y --> %2:Elt S --> %3:List Unifier 101 rewrites: 0 A --> %8:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> %7:List U --> %8:List V --> f(%4:List, %2:Elt, j(%5:List, %6:List)) W --> %7:List X --> %1:List Z --> %2:Elt Y --> 1 S --> %3:List Unifier 102 rewrites: 0 A --> %8:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> %7:List U --> %8:List V --> f(%4:List, %2:Elt, j(%5:List, %6:List)) W --> %7:List X --> %1:List Z --> 1 Y --> %2:Elt S --> %3:List Unifier 103 rewrites: 0 A --> %8:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> %7:List U --> %8:List V --> f(%4:List, %2:Elt) W --> f(j(%5:List, %6:List), %7:List) X --> %1:List Z --> %2:Elt Y --> 1 S --> %3:List Unifier 104 rewrites: 0 A --> %8:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> %7:List U --> %8:List V --> f(%4:List, %2:Elt) W --> f(j(%5:List, %6:List), %7:List) X --> %1:List Z --> 1 Y --> %2:Elt S --> %3:List Unifier 105 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> %3:List D --> f(%8:List, %9:List) H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> %8:List W --> f(%9:List, %2:Elt, j(%4:List, %5:List), %6:List) X --> %1:List Z --> %2:Elt Y --> 1 S --> %3:List Unifier 106 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> %3:List D --> f(%8:List, %9:List) H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> %8:List W --> f(%9:List, %2:Elt, j(%4:List, %5:List), %6:List) X --> %1:List Z --> 1 Y --> %2:Elt S --> %3:List Unifier 107 rewrites: 0 A --> %8:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> %7:List U --> %8:List V --> %4:List W --> f(%2:Elt, j(%5:List, %6:List), %7:List) X --> %1:List Z --> %2:Elt Y --> 1 S --> %3:List Unifier 108 rewrites: 0 A --> %8:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> %7:List U --> %8:List V --> %4:List W --> f(%2:Elt, j(%5:List, %6:List), %7:List) X --> %1:List Z --> 1 Y --> %2:Elt S --> %3:List Unifier 109 rewrites: 0 A --> j(%12:List, f(%7:List, %8:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> f(%13:List, j(%9:List, %10:List), %11:List) U --> j(%12:List, f(%1:List, %2:Elt, %3:List)) V --> %7:List W --> %8:List X --> f(%4:List, %2:Elt, j(%5:List, %6:List), %13:List) Z --> %9:List Y --> %10:List S --> %11:List Unifier 110 rewrites: 0 A --> j(%8:List, f(%5:List, %6:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> f(%9:List, %10:List) G --> 1 I --> f(%11:List, %7:List) U --> j(%8:List, f(%1:List, %2:Elt, %3:List)) V --> %5:List W --> %6:List X --> f(%4:List, %2:Elt, %9:List) Z --> f(%10:List, %11:List) Y --> 1 S --> %7:List Unifier 111 rewrites: 0 A --> j(%8:List, f(%5:List, %6:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> f(%9:List, %10:List) G --> 1 I --> f(%11:List, %7:List) U --> j(%8:List, f(%1:List, %2:Elt, %3:List)) V --> %5:List W --> %6:List X --> f(%4:List, %2:Elt, %9:List) Z --> 1 Y --> f(%10:List, %11:List) S --> %7:List Unifier 112 rewrites: 0 A --> j(%8:List, f(%5:List, %6:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> 1 G --> f(%9:List, %10:List) I --> f(%11:List, %7:List) U --> j(%8:List, f(%1:List, %2:Elt, %3:List)) V --> %5:List W --> %6:List X --> f(%4:List, %2:Elt, %9:List) Z --> f(%10:List, %11:List) Y --> 1 S --> %7:List Unifier 113 rewrites: 0 A --> j(%8:List, f(%5:List, %6:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> 1 G --> f(%9:List, %10:List) I --> f(%11:List, %7:List) U --> j(%8:List, f(%1:List, %2:Elt, %3:List)) V --> %5:List W --> %6:List X --> f(%4:List, %2:Elt, %9:List) Z --> 1 Y --> f(%10:List, %11:List) S --> %7:List Unifier 114 rewrites: 0 A --> j(%10:List, f(%6:List, %7:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> f(%11:List, j(%8:List, %9:List), %12:List) G --> 1 I --> %5:List U --> j(%10:List, f(%1:List, %2:Elt, %3:List)) V --> %6:List W --> %7:List X --> f(%4:List, %2:Elt, %11:List) Z --> %8:List Y --> %9:List S --> f(%12:List, %5:List) Unifier 115 rewrites: 0 A --> j(%10:List, f(%6:List, %7:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> 1 G --> f(%11:List, j(%8:List, %9:List), %12:List) I --> %5:List U --> j(%10:List, f(%1:List, %2:Elt, %3:List)) V --> %6:List W --> %7:List X --> f(%4:List, %2:Elt, %11:List) Z --> %8:List Y --> %9:List S --> f(%12:List, %5:List) Unifier 116 rewrites: 0 A --> j(%10:List, f(%6:List, %7:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> f(%11:List, j(%8:List, %9:List)) G --> 1 I --> %5:List U --> j(%10:List, f(%1:List, %2:Elt, %3:List)) V --> %6:List W --> %7:List X --> f(%4:List, %2:Elt, %11:List) Z --> %8:List Y --> %9:List S --> %5:List Unifier 117 rewrites: 0 A --> j(%10:List, f(%6:List, %7:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> 1 G --> f(%11:List, j(%8:List, %9:List)) I --> %5:List U --> j(%10:List, f(%1:List, %2:Elt, %3:List)) V --> %6:List W --> %7:List X --> f(%4:List, %2:Elt, %11:List) Z --> %8:List Y --> %9:List S --> %5:List Unifier 118 rewrites: 0 A --> j(%12:List, f(%7:List, %8:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> f(j(%9:List, %10:List), %11:List) U --> j(%12:List, f(%1:List, %2:Elt, %3:List)) V --> %7:List W --> %8:List X --> f(%4:List, %2:Elt, j(%5:List, %6:List)) Z --> %9:List Y --> %10:List S --> %11:List Unifier 119 rewrites: 0 A --> j(%10:List, f(%7:List, %8:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> f(%11:List, %9:List) U --> j(%10:List, f(%1:List, %2:Elt, %3:List)) V --> %7:List W --> %8:List X --> f(%4:List, %2:Elt) Z --> f(j(%5:List, %6:List), %11:List) Y --> 1 S --> %9:List Unifier 120 rewrites: 0 A --> j(%10:List, f(%7:List, %8:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> f(%11:List, %9:List) U --> j(%10:List, f(%1:List, %2:Elt, %3:List)) V --> %7:List W --> %8:List X --> f(%4:List, %2:Elt) Z --> 1 Y --> f(j(%5:List, %6:List), %11:List) S --> %9:List Unifier 121 rewrites: 0 A --> j(%10:List, f(%6:List, %7:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> f(j(%8:List, %9:List), %11:List) G --> 1 I --> %5:List U --> j(%10:List, f(%1:List, %2:Elt, %3:List)) V --> %6:List W --> %7:List X --> f(%4:List, %2:Elt) Z --> %8:List Y --> %9:List S --> f(%11:List, %5:List) Unifier 122 rewrites: 0 A --> j(%10:List, f(%6:List, %7:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> 1 G --> f(j(%8:List, %9:List), %11:List) I --> %5:List U --> j(%10:List, f(%1:List, %2:Elt, %3:List)) V --> %6:List W --> %7:List X --> f(%4:List, %2:Elt) Z --> %8:List Y --> %9:List S --> f(%11:List, %5:List) Unifier 123 rewrites: 0 A --> j(%8:List, f(%6:List, %7:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> j(%9:List, %11:List) G --> j(%10:List, %12:List) I --> %5:List U --> j(%8:List, f(%1:List, %2:Elt, %3:List)) V --> %6:List W --> %7:List X --> f(%4:List, %2:Elt) Z --> j(%9:List, %10:List) Y --> j(%11:List, %12:List) S --> %5:List Unifier 124 rewrites: 0 A --> j(%10:List, f(%6:List, %7:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> f(%8:List, %11:List) H --> %4:List G --> %5:List I --> f(%12:List, %9:List) U --> j(%10:List, f(%1:List, %2:Elt, %3:List)) V --> %6:List W --> %7:List X --> %8:List Z --> f(%11:List, %2:Elt, j(%4:List, %5:List), %12:List) Y --> 1 S --> %9:List Unifier 125 rewrites: 0 A --> j(%10:List, f(%6:List, %7:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> f(%8:List, %11:List) H --> %4:List G --> %5:List I --> f(%12:List, %9:List) U --> j(%10:List, f(%1:List, %2:Elt, %3:List)) V --> %6:List W --> %7:List X --> %8:List Z --> 1 Y --> f(%11:List, %2:Elt, j(%4:List, %5:List), %12:List) S --> %9:List Unifier 126 rewrites: 0 A --> j(%8:List, f(%5:List, %6:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> f(%7:List, %9:List) H --> f(%10:List, %11:List) G --> 1 I --> %4:List U --> j(%8:List, f(%1:List, %2:Elt, %3:List)) V --> %5:List W --> %6:List X --> %7:List Z --> f(%9:List, %2:Elt, %10:List) Y --> 1 S --> f(%11:List, %4:List) Unifier 127 rewrites: 0 A --> j(%8:List, f(%5:List, %6:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> f(%7:List, %9:List) H --> f(%10:List, %11:List) G --> 1 I --> %4:List U --> j(%8:List, f(%1:List, %2:Elt, %3:List)) V --> %5:List W --> %6:List X --> %7:List Z --> 1 Y --> f(%9:List, %2:Elt, %10:List) S --> f(%11:List, %4:List) Unifier 128 rewrites: 0 A --> j(%8:List, f(%5:List, %6:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> f(%7:List, %9:List) H --> 1 G --> f(%10:List, %11:List) I --> %4:List U --> j(%8:List, f(%1:List, %2:Elt, %3:List)) V --> %5:List W --> %6:List X --> %7:List Z --> f(%9:List, %2:Elt, %10:List) Y --> 1 S --> f(%11:List, %4:List) Unifier 129 rewrites: 0 A --> j(%8:List, f(%5:List, %6:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> f(%7:List, %9:List) H --> 1 G --> f(%10:List, %11:List) I --> %4:List U --> j(%8:List, f(%1:List, %2:Elt, %3:List)) V --> %5:List W --> %6:List X --> %7:List Z --> 1 Y --> f(%9:List, %2:Elt, %10:List) S --> f(%11:List, %4:List) Unifier 130 rewrites: 0 A --> j(%10:List, f(%7:List, %8:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> f(%9:List, %11:List) H --> %4:List G --> %5:List I --> %6:List U --> j(%10:List, f(%1:List, %2:Elt, %3:List)) V --> %7:List W --> %8:List X --> %9:List Z --> f(%11:List, %2:Elt, j(%4:List, %5:List)) Y --> 1 S --> %6:List Unifier 131 rewrites: 0 A --> j(%10:List, f(%7:List, %8:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> f(%9:List, %11:List) H --> %4:List G --> %5:List I --> %6:List U --> j(%10:List, f(%1:List, %2:Elt, %3:List)) V --> %7:List W --> %8:List X --> %9:List Z --> 1 Y --> f(%11:List, %2:Elt, j(%4:List, %5:List)) S --> %6:List Unifier 132 rewrites: 0 A --> j(%10:List, f(%7:List, %8:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> f(%9:List, %11:List) H --> %4:List G --> %5:List I --> %6:List U --> j(%10:List, f(%1:List, %2:Elt, %3:List)) V --> %7:List W --> %8:List X --> %9:List Z --> f(%11:List, %2:Elt) Y --> 1 S --> f(j(%4:List, %5:List), %6:List) Unifier 133 rewrites: 0 A --> j(%10:List, f(%7:List, %8:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> f(%9:List, %11:List) H --> %4:List G --> %5:List I --> %6:List U --> j(%10:List, f(%1:List, %2:Elt, %3:List)) V --> %7:List W --> %8:List X --> %9:List Z --> 1 Y --> f(%11:List, %2:Elt) S --> f(j(%4:List, %5:List), %6:List) Unifier 134 rewrites: 0 A --> j(%12:List, f(%7:List, %8:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> f(%9:List, j(%10:List, %11:List), %13:List) H --> %4:List G --> %5:List I --> %6:List U --> j(%12:List, f(%1:List, %2:Elt, %3:List)) V --> %7:List W --> %8:List X --> %9:List Z --> %10:List Y --> %11:List S --> f(%13:List, %2:Elt, j(%4:List, %5:List), %6:List) Unifier 135 rewrites: 0 A --> j(%12:List, f(%7:List, %8:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> f(%9:List, j(%10:List, %11:List)) H --> %4:List G --> %5:List I --> %6:List U --> j(%12:List, f(%1:List, %2:Elt, %3:List)) V --> %7:List W --> %8:List X --> %9:List Z --> %10:List Y --> %11:List S --> f(%2:Elt, j(%4:List, %5:List), %6:List) Unifier 136 rewrites: 0 A --> j(%10:List, f(%7:List, %8:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> f(%11:List, %9:List) U --> j(%10:List, f(%1:List, %2:Elt, %3:List)) V --> %7:List W --> %8:List X --> %4:List Z --> f(%2:Elt, j(%5:List, %6:List), %11:List) Y --> 1 S --> %9:List Unifier 137 rewrites: 0 A --> j(%10:List, f(%7:List, %8:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> f(%11:List, %9:List) U --> j(%10:List, f(%1:List, %2:Elt, %3:List)) V --> %7:List W --> %8:List X --> %4:List Z --> 1 Y --> f(%2:Elt, j(%5:List, %6:List), %11:List) S --> %9:List Unifier 138 rewrites: 0 A --> j(%8:List, f(%6:List, %7:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> f(%9:List, %10:List) G --> 1 I --> %5:List U --> j(%8:List, f(%1:List, %2:Elt, %3:List)) V --> %6:List W --> %7:List X --> %4:List Z --> f(%2:Elt, %9:List) Y --> 1 S --> f(%10:List, %5:List) Unifier 139 rewrites: 0 A --> j(%8:List, f(%6:List, %7:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> f(%9:List, %10:List) G --> 1 I --> %5:List U --> j(%8:List, f(%1:List, %2:Elt, %3:List)) V --> %6:List W --> %7:List X --> %4:List Z --> 1 Y --> f(%2:Elt, %9:List) S --> f(%10:List, %5:List) Unifier 140 rewrites: 0 A --> j(%8:List, f(%6:List, %7:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> 1 G --> f(%9:List, %10:List) I --> %5:List U --> j(%8:List, f(%1:List, %2:Elt, %3:List)) V --> %6:List W --> %7:List X --> %4:List Z --> f(%2:Elt, %9:List) Y --> 1 S --> f(%10:List, %5:List) Unifier 141 rewrites: 0 A --> j(%8:List, f(%6:List, %7:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> 1 G --> f(%9:List, %10:List) I --> %5:List U --> j(%8:List, f(%1:List, %2:Elt, %3:List)) V --> %6:List W --> %7:List X --> %4:List Z --> 1 Y --> f(%2:Elt, %9:List) S --> f(%10:List, %5:List) Unifier 142 rewrites: 0 A --> j(%10:List, f(%8:List, %9:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> %7:List U --> j(%10:List, f(%1:List, %2:Elt, %3:List)) V --> %8:List W --> %9:List X --> %4:List Z --> f(%2:Elt, j(%5:List, %6:List)) Y --> 1 S --> %7:List Unifier 143 rewrites: 0 A --> j(%10:List, f(%8:List, %9:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> %7:List U --> j(%10:List, f(%1:List, %2:Elt, %3:List)) V --> %8:List W --> %9:List X --> %4:List Z --> 1 Y --> f(%2:Elt, j(%5:List, %6:List)) S --> %7:List Unifier 144 rewrites: 0 A --> j(%10:List, f(%8:List, %9:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> %7:List U --> j(%10:List, f(%1:List, %2:Elt, %3:List)) V --> %8:List W --> %9:List X --> %4:List Z --> %2:Elt Y --> 1 S --> f(j(%5:List, %6:List), %7:List) Unifier 145 rewrites: 0 A --> j(%10:List, f(%8:List, %9:List)) B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> %7:List U --> j(%10:List, f(%1:List, %2:Elt, %3:List)) V --> %8:List W --> %9:List X --> %4:List Z --> 1 Y --> %2:Elt S --> f(j(%5:List, %6:List), %7:List) Unifier 146 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> f(%12:List, %7:List) D --> %3:List H --> %4:List G --> %5:List I --> f(%11:List, j(%8:List, %9:List), %10:List) U --> %6:List V --> f(%1:List, %2:Elt, %12:List) W --> %7:List X --> f(%3:List, %2:Elt, j(%4:List, %5:List), %11:List) Z --> %8:List Y --> %9:List S --> %10:List Unifier 147 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> f(%11:List, j(%8:List, %9:List), %10:List) U --> %7:List V --> f(%1:List, %2:Elt) W --> %3:List X --> f(%4:List, %2:Elt, j(%5:List, %6:List), %11:List) Z --> %8:List Y --> %9:List S --> %10:List Unifier 148 rewrites: 0 A --> %6:List B --> f(%7:List, %12:List) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> f(%11:List, j(%8:List, %9:List), %10:List) U --> %6:List V --> %7:List W --> f(%12:List, %1:Elt, %2:List) X --> f(%3:List, %1:Elt, j(%4:List, %5:List), %11:List) Z --> %8:List Y --> %9:List S --> %10:List Unifier 149 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> f(%11:List, j(%8:List, %9:List), %10:List) U --> %7:List V --> %1:List W --> f(%2:Elt, %3:List) X --> f(%4:List, %2:Elt, j(%5:List, %6:List), %11:List) Z --> %8:List Y --> %9:List S --> %10:List Unifier 150 rewrites: 0 A --> %4:List B --> %1:List E --> %2:Elt C --> f(%10:List, %5:List) D --> %3:List H --> f(%7:List, %8:List) G --> 1 I --> f(%9:List, %6:List) U --> %4:List V --> f(%1:List, %2:Elt, %10:List) W --> %5:List X --> f(%3:List, %2:Elt, %7:List) Z --> f(%8:List, %9:List) Y --> 1 S --> %6:List Unifier 151 rewrites: 0 A --> %4:List B --> %1:List E --> %2:Elt C --> f(%10:List, %5:List) D --> %3:List H --> f(%7:List, %8:List) G --> 1 I --> f(%9:List, %6:List) U --> %4:List V --> f(%1:List, %2:Elt, %10:List) W --> %5:List X --> f(%3:List, %2:Elt, %7:List) Z --> 1 Y --> f(%8:List, %9:List) S --> %6:List Unifier 152 rewrites: 0 A --> %4:List B --> %1:List E --> %2:Elt C --> f(%10:List, %5:List) D --> %3:List H --> 1 G --> f(%7:List, %8:List) I --> f(%9:List, %6:List) U --> %4:List V --> f(%1:List, %2:Elt, %10:List) W --> %5:List X --> f(%3:List, %2:Elt, %7:List) Z --> f(%8:List, %9:List) Y --> 1 S --> %6:List Unifier 153 rewrites: 0 A --> %4:List B --> %1:List E --> %2:Elt C --> f(%10:List, %5:List) D --> %3:List H --> 1 G --> f(%7:List, %8:List) I --> f(%9:List, %6:List) U --> %4:List V --> f(%1:List, %2:Elt, %10:List) W --> %5:List X --> f(%3:List, %2:Elt, %7:List) Z --> 1 Y --> f(%8:List, %9:List) S --> %6:List Unifier 154 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> f(%7:List, %8:List) G --> 1 I --> f(%9:List, %6:List) U --> %5:List V --> f(%1:List, %2:Elt) W --> %3:List X --> f(%4:List, %2:Elt, %7:List) Z --> f(%8:List, %9:List) Y --> 1 S --> %6:List Unifier 155 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> f(%7:List, %8:List) G --> 1 I --> f(%9:List, %6:List) U --> %5:List V --> f(%1:List, %2:Elt) W --> %3:List X --> f(%4:List, %2:Elt, %7:List) Z --> 1 Y --> f(%8:List, %9:List) S --> %6:List Unifier 156 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> 1 G --> f(%7:List, %8:List) I --> f(%9:List, %6:List) U --> %5:List V --> f(%1:List, %2:Elt) W --> %3:List X --> f(%4:List, %2:Elt, %7:List) Z --> f(%8:List, %9:List) Y --> 1 S --> %6:List Unifier 157 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> 1 G --> f(%7:List, %8:List) I --> f(%9:List, %6:List) U --> %5:List V --> f(%1:List, %2:Elt) W --> %3:List X --> f(%4:List, %2:Elt, %7:List) Z --> 1 Y --> f(%8:List, %9:List) S --> %6:List Unifier 158 rewrites: 0 A --> %4:List B --> f(%5:List, %10:List) E --> %1:Elt C --> %2:List D --> %3:List H --> f(%7:List, %8:List) G --> 1 I --> f(%9:List, %6:List) U --> %4:List V --> %5:List W --> f(%10:List, %1:Elt, %2:List) X --> f(%3:List, %1:Elt, %7:List) Z --> f(%8:List, %9:List) Y --> 1 S --> %6:List Unifier 159 rewrites: 0 A --> %4:List B --> f(%5:List, %10:List) E --> %1:Elt C --> %2:List D --> %3:List H --> f(%7:List, %8:List) G --> 1 I --> f(%9:List, %6:List) U --> %4:List V --> %5:List W --> f(%10:List, %1:Elt, %2:List) X --> f(%3:List, %1:Elt, %7:List) Z --> 1 Y --> f(%8:List, %9:List) S --> %6:List Unifier 160 rewrites: 0 A --> %4:List B --> f(%5:List, %10:List) E --> %1:Elt C --> %2:List D --> %3:List H --> 1 G --> f(%7:List, %8:List) I --> f(%9:List, %6:List) U --> %4:List V --> %5:List W --> f(%10:List, %1:Elt, %2:List) X --> f(%3:List, %1:Elt, %7:List) Z --> f(%8:List, %9:List) Y --> 1 S --> %6:List Unifier 161 rewrites: 0 A --> %4:List B --> f(%5:List, %10:List) E --> %1:Elt C --> %2:List D --> %3:List H --> 1 G --> f(%7:List, %8:List) I --> f(%9:List, %6:List) U --> %4:List V --> %5:List W --> f(%10:List, %1:Elt, %2:List) X --> f(%3:List, %1:Elt, %7:List) Z --> 1 Y --> f(%8:List, %9:List) S --> %6:List Unifier 162 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> f(%7:List, %8:List) G --> 1 I --> f(%9:List, %6:List) U --> %5:List V --> %1:List W --> f(%2:Elt, %3:List) X --> f(%4:List, %2:Elt, %7:List) Z --> f(%8:List, %9:List) Y --> 1 S --> %6:List Unifier 163 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> f(%7:List, %8:List) G --> 1 I --> f(%9:List, %6:List) U --> %5:List V --> %1:List W --> f(%2:Elt, %3:List) X --> f(%4:List, %2:Elt, %7:List) Z --> 1 Y --> f(%8:List, %9:List) S --> %6:List Unifier 164 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> 1 G --> f(%7:List, %8:List) I --> f(%9:List, %6:List) U --> %5:List V --> %1:List W --> f(%2:Elt, %3:List) X --> f(%4:List, %2:Elt, %7:List) Z --> f(%8:List, %9:List) Y --> 1 S --> %6:List Unifier 165 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> 1 G --> f(%7:List, %8:List) I --> f(%9:List, %6:List) U --> %5:List V --> %1:List W --> f(%2:Elt, %3:List) X --> f(%4:List, %2:Elt, %7:List) Z --> 1 Y --> f(%8:List, %9:List) S --> %6:List Unifier 166 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> f(%11:List, %6:List) D --> %3:List H --> f(%9:List, j(%7:List, %8:List), %10:List) G --> 1 I --> %4:List U --> %5:List V --> f(%1:List, %2:Elt, %11:List) W --> %6:List X --> f(%3:List, %2:Elt, %9:List) Z --> %7:List Y --> %8:List S --> f(%10:List, %4:List) Unifier 167 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> f(%11:List, %6:List) D --> %3:List H --> 1 G --> f(%9:List, j(%7:List, %8:List), %10:List) I --> %4:List U --> %5:List V --> f(%1:List, %2:Elt, %11:List) W --> %6:List X --> f(%3:List, %2:Elt, %9:List) Z --> %7:List Y --> %8:List S --> f(%10:List, %4:List) Unifier 168 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> f(%9:List, j(%7:List, %8:List), %10:List) G --> 1 I --> %5:List U --> %6:List V --> f(%1:List, %2:Elt) W --> %3:List X --> f(%4:List, %2:Elt, %9:List) Z --> %7:List Y --> %8:List S --> f(%10:List, %5:List) Unifier 169 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> 1 G --> f(%9:List, j(%7:List, %8:List), %10:List) I --> %5:List U --> %6:List V --> f(%1:List, %2:Elt) W --> %3:List X --> f(%4:List, %2:Elt, %9:List) Z --> %7:List Y --> %8:List S --> f(%10:List, %5:List) Unifier 170 rewrites: 0 A --> %5:List B --> f(%6:List, %11:List) E --> %1:Elt C --> %2:List D --> %3:List H --> f(%9:List, j(%7:List, %8:List), %10:List) G --> 1 I --> %4:List U --> %5:List V --> %6:List W --> f(%11:List, %1:Elt, %2:List) X --> f(%3:List, %1:Elt, %9:List) Z --> %7:List Y --> %8:List S --> f(%10:List, %4:List) Unifier 171 rewrites: 0 A --> %5:List B --> f(%6:List, %11:List) E --> %1:Elt C --> %2:List D --> %3:List H --> 1 G --> f(%9:List, j(%7:List, %8:List), %10:List) I --> %4:List U --> %5:List V --> %6:List W --> f(%11:List, %1:Elt, %2:List) X --> f(%3:List, %1:Elt, %9:List) Z --> %7:List Y --> %8:List S --> f(%10:List, %4:List) Unifier 172 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> f(%9:List, j(%7:List, %8:List), %10:List) G --> 1 I --> %5:List U --> %6:List V --> %1:List W --> f(%2:Elt, %3:List) X --> f(%4:List, %2:Elt, %9:List) Z --> %7:List Y --> %8:List S --> f(%10:List, %5:List) Unifier 173 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> 1 G --> f(%9:List, j(%7:List, %8:List), %10:List) I --> %5:List U --> %6:List V --> %1:List W --> f(%2:Elt, %3:List) X --> f(%4:List, %2:Elt, %9:List) Z --> %7:List Y --> %8:List S --> f(%10:List, %5:List) Unifier 174 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> f(%10:List, %6:List) D --> %3:List H --> f(%9:List, j(%7:List, %8:List)) G --> 1 I --> %4:List U --> %5:List V --> f(%1:List, %2:Elt, %10:List) W --> %6:List X --> f(%3:List, %2:Elt, %9:List) Z --> %7:List Y --> %8:List S --> %4:List Unifier 175 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> f(%10:List, %6:List) D --> %3:List H --> 1 G --> f(%9:List, j(%7:List, %8:List)) I --> %4:List U --> %5:List V --> f(%1:List, %2:Elt, %10:List) W --> %6:List X --> f(%3:List, %2:Elt, %9:List) Z --> %7:List Y --> %8:List S --> %4:List Unifier 176 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> f(%9:List, j(%7:List, %8:List)) G --> 1 I --> %5:List U --> %6:List V --> f(%1:List, %2:Elt) W --> %3:List X --> f(%4:List, %2:Elt, %9:List) Z --> %7:List Y --> %8:List S --> %5:List Unifier 177 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> 1 G --> f(%9:List, j(%7:List, %8:List)) I --> %5:List U --> %6:List V --> f(%1:List, %2:Elt) W --> %3:List X --> f(%4:List, %2:Elt, %9:List) Z --> %7:List Y --> %8:List S --> %5:List Unifier 178 rewrites: 0 A --> %5:List B --> f(%6:List, %10:List) E --> %1:Elt C --> %2:List D --> %3:List H --> f(%9:List, j(%7:List, %8:List)) G --> 1 I --> %4:List U --> %5:List V --> %6:List W --> f(%10:List, %1:Elt, %2:List) X --> f(%3:List, %1:Elt, %9:List) Z --> %7:List Y --> %8:List S --> %4:List Unifier 179 rewrites: 0 A --> %5:List B --> f(%6:List, %10:List) E --> %1:Elt C --> %2:List D --> %3:List H --> 1 G --> f(%9:List, j(%7:List, %8:List)) I --> %4:List U --> %5:List V --> %6:List W --> f(%10:List, %1:Elt, %2:List) X --> f(%3:List, %1:Elt, %9:List) Z --> %7:List Y --> %8:List S --> %4:List Unifier 180 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> f(%9:List, j(%7:List, %8:List)) G --> 1 I --> %5:List U --> %6:List V --> %1:List W --> f(%2:Elt, %3:List) X --> f(%4:List, %2:Elt, %9:List) Z --> %7:List Y --> %8:List S --> %5:List Unifier 181 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> 1 G --> f(%9:List, j(%7:List, %8:List)) I --> %5:List U --> %6:List V --> %1:List W --> f(%2:Elt, %3:List) X --> f(%4:List, %2:Elt, %9:List) Z --> %7:List Y --> %8:List S --> %5:List Unifier 182 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> f(%11:List, %7:List) D --> %3:List H --> %4:List G --> %5:List I --> f(j(%8:List, %9:List), %10:List) U --> %6:List V --> f(%1:List, %2:Elt, %11:List) W --> %7:List X --> f(%3:List, %2:Elt, j(%4:List, %5:List)) Z --> %8:List Y --> %9:List S --> %10:List Unifier 183 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> f(j(%8:List, %9:List), %10:List) U --> %7:List V --> f(%1:List, %2:Elt) W --> %3:List X --> f(%4:List, %2:Elt, j(%5:List, %6:List)) Z --> %8:List Y --> %9:List S --> %10:List Unifier 184 rewrites: 0 A --> %6:List B --> f(%7:List, %11:List) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> f(j(%8:List, %9:List), %10:List) U --> %6:List V --> %7:List W --> f(%11:List, %1:Elt, %2:List) X --> f(%3:List, %1:Elt, j(%4:List, %5:List)) Z --> %8:List Y --> %9:List S --> %10:List Unifier 185 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> f(j(%8:List, %9:List), %10:List) U --> %7:List V --> %1:List W --> f(%2:Elt, %3:List) X --> f(%4:List, %2:Elt, j(%5:List, %6:List)) Z --> %8:List Y --> %9:List S --> %10:List Unifier 186 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> f(%10:List, %7:List) D --> %3:List H --> %4:List G --> %5:List I --> f(%9:List, %8:List) U --> %6:List V --> f(%1:List, %2:Elt, %10:List) W --> %7:List X --> f(%3:List, %2:Elt) Z --> f(j(%4:List, %5:List), %9:List) Y --> 1 S --> %8:List Unifier 187 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> f(%10:List, %7:List) D --> %3:List H --> %4:List G --> %5:List I --> f(%9:List, %8:List) U --> %6:List V --> f(%1:List, %2:Elt, %10:List) W --> %7:List X --> f(%3:List, %2:Elt) Z --> 1 Y --> f(j(%4:List, %5:List), %9:List) S --> %8:List Unifier 188 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> f(%9:List, %8:List) U --> %7:List V --> f(%1:List, %2:Elt) W --> %3:List X --> f(%4:List, %2:Elt) Z --> f(j(%5:List, %6:List), %9:List) Y --> 1 S --> %8:List Unifier 189 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> f(%9:List, %8:List) U --> %7:List V --> f(%1:List, %2:Elt) W --> %3:List X --> f(%4:List, %2:Elt) Z --> 1 Y --> f(j(%5:List, %6:List), %9:List) S --> %8:List Unifier 190 rewrites: 0 A --> %6:List B --> f(%7:List, %10:List) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> f(%9:List, %8:List) U --> %6:List V --> %7:List W --> f(%10:List, %1:Elt, %2:List) X --> f(%3:List, %1:Elt) Z --> f(j(%4:List, %5:List), %9:List) Y --> 1 S --> %8:List Unifier 191 rewrites: 0 A --> %6:List B --> f(%7:List, %10:List) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> f(%9:List, %8:List) U --> %6:List V --> %7:List W --> f(%10:List, %1:Elt, %2:List) X --> f(%3:List, %1:Elt) Z --> 1 Y --> f(j(%4:List, %5:List), %9:List) S --> %8:List Unifier 192 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> f(%9:List, %8:List) U --> %7:List V --> %1:List W --> f(%2:Elt, %3:List) X --> f(%4:List, %2:Elt) Z --> f(j(%5:List, %6:List), %9:List) Y --> 1 S --> %8:List Unifier 193 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> f(%9:List, %8:List) U --> %7:List V --> %1:List W --> f(%2:Elt, %3:List) X --> f(%4:List, %2:Elt) Z --> 1 Y --> f(j(%5:List, %6:List), %9:List) S --> %8:List Unifier 194 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> f(%10:List, %6:List) D --> %3:List H --> f(j(%7:List, %8:List), %9:List) G --> 1 I --> %4:List U --> %5:List V --> f(%1:List, %2:Elt, %10:List) W --> %6:List X --> f(%3:List, %2:Elt) Z --> %7:List Y --> %8:List S --> f(%9:List, %4:List) Unifier 195 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> f(%10:List, %6:List) D --> %3:List H --> 1 G --> f(j(%7:List, %8:List), %9:List) I --> %4:List U --> %5:List V --> f(%1:List, %2:Elt, %10:List) W --> %6:List X --> f(%3:List, %2:Elt) Z --> %7:List Y --> %8:List S --> f(%9:List, %4:List) Unifier 196 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> f(j(%7:List, %8:List), %9:List) G --> 1 I --> %5:List U --> %6:List V --> f(%1:List, %2:Elt) W --> %3:List X --> f(%4:List, %2:Elt) Z --> %7:List Y --> %8:List S --> f(%9:List, %5:List) Unifier 197 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> 1 G --> f(j(%7:List, %8:List), %9:List) I --> %5:List U --> %6:List V --> f(%1:List, %2:Elt) W --> %3:List X --> f(%4:List, %2:Elt) Z --> %7:List Y --> %8:List S --> f(%9:List, %5:List) Unifier 198 rewrites: 0 A --> %5:List B --> f(%6:List, %10:List) E --> %1:Elt C --> %2:List D --> %3:List H --> f(j(%7:List, %8:List), %9:List) G --> 1 I --> %4:List U --> %5:List V --> %6:List W --> f(%10:List, %1:Elt, %2:List) X --> f(%3:List, %1:Elt) Z --> %7:List Y --> %8:List S --> f(%9:List, %4:List) Unifier 199 rewrites: 0 A --> %5:List B --> f(%6:List, %10:List) E --> %1:Elt C --> %2:List D --> %3:List H --> 1 G --> f(j(%7:List, %8:List), %9:List) I --> %4:List U --> %5:List V --> %6:List W --> f(%10:List, %1:Elt, %2:List) X --> f(%3:List, %1:Elt) Z --> %7:List Y --> %8:List S --> f(%9:List, %4:List) Unifier 200 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> f(j(%7:List, %8:List), %9:List) G --> 1 I --> %5:List U --> %6:List V --> %1:List W --> f(%2:Elt, %3:List) X --> f(%4:List, %2:Elt) Z --> %7:List Y --> %8:List S --> f(%9:List, %5:List) Unifier 201 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> 1 G --> f(j(%7:List, %8:List), %9:List) I --> %5:List U --> %6:List V --> %1:List W --> f(%2:Elt, %3:List) X --> f(%4:List, %2:Elt) Z --> %7:List Y --> %8:List S --> f(%9:List, %5:List) Unifier 202 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> f(%7:List, %6:List) D --> %3:List H --> j(%8:List, %10:List) G --> j(%9:List, %11:List) I --> %4:List U --> %5:List V --> f(%1:List, %2:Elt, %7:List) W --> %6:List X --> f(%3:List, %2:Elt) Z --> j(%8:List, %9:List) Y --> j(%10:List, %11:List) S --> %4:List Unifier 203 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> j(%7:List, %9:List) G --> j(%8:List, %10:List) I --> %5:List U --> %6:List V --> f(%1:List, %2:Elt) W --> %3:List X --> f(%4:List, %2:Elt) Z --> j(%7:List, %8:List) Y --> j(%9:List, %10:List) S --> %5:List Unifier 204 rewrites: 0 A --> %5:List B --> f(%6:List, %7:List) E --> %1:Elt C --> %2:List D --> %3:List H --> j(%8:List, %10:List) G --> j(%9:List, %11:List) I --> %4:List U --> %5:List V --> %6:List W --> f(%7:List, %1:Elt, %2:List) X --> f(%3:List, %1:Elt) Z --> j(%8:List, %9:List) Y --> j(%10:List, %11:List) S --> %4:List Unifier 205 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> j(%7:List, %9:List) G --> j(%8:List, %10:List) I --> %5:List U --> %6:List V --> %1:List W --> f(%2:Elt, %3:List) X --> f(%4:List, %2:Elt) Z --> j(%7:List, %8:List) Y --> j(%9:List, %10:List) S --> %5:List Unifier 206 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> f(%11:List, %6:List) D --> f(%7:List, %9:List) H --> %3:List G --> %4:List I --> f(%10:List, %8:List) U --> %5:List V --> f(%1:List, %2:Elt, %11:List) W --> %6:List X --> %7:List Z --> f(%9:List, %2:Elt, j(%3:List, %4:List), %10:List) Y --> 1 S --> %8:List Unifier 207 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> f(%11:List, %6:List) D --> f(%7:List, %9:List) H --> %3:List G --> %4:List I --> f(%10:List, %8:List) U --> %5:List V --> f(%1:List, %2:Elt, %11:List) W --> %6:List X --> %7:List Z --> 1 Y --> f(%9:List, %2:Elt, j(%3:List, %4:List), %10:List) S --> %8:List Unifier 208 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> f(%7:List, %9:List) H --> %4:List G --> %5:List I --> f(%10:List, %8:List) U --> %6:List V --> f(%1:List, %2:Elt) W --> %3:List X --> %7:List Z --> f(%9:List, %2:Elt, j(%4:List, %5:List), %10:List) Y --> 1 S --> %8:List Unifier 209 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> f(%7:List, %9:List) H --> %4:List G --> %5:List I --> f(%10:List, %8:List) U --> %6:List V --> f(%1:List, %2:Elt) W --> %3:List X --> %7:List Z --> 1 Y --> f(%9:List, %2:Elt, j(%4:List, %5:List), %10:List) S --> %8:List Unifier 210 rewrites: 0 A --> %5:List B --> f(%6:List, %11:List) E --> %1:Elt C --> %2:List D --> f(%7:List, %9:List) H --> %3:List G --> %4:List I --> f(%10:List, %8:List) U --> %5:List V --> %6:List W --> f(%11:List, %1:Elt, %2:List) X --> %7:List Z --> f(%9:List, %1:Elt, j(%3:List, %4:List), %10:List) Y --> 1 S --> %8:List Unifier 211 rewrites: 0 A --> %5:List B --> f(%6:List, %11:List) E --> %1:Elt C --> %2:List D --> f(%7:List, %9:List) H --> %3:List G --> %4:List I --> f(%10:List, %8:List) U --> %5:List V --> %6:List W --> f(%11:List, %1:Elt, %2:List) X --> %7:List Z --> 1 Y --> f(%9:List, %1:Elt, j(%3:List, %4:List), %10:List) S --> %8:List Unifier 212 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> f(%7:List, %9:List) H --> %4:List G --> %5:List I --> f(%10:List, %8:List) U --> %6:List V --> %1:List W --> f(%2:Elt, %3:List) X --> %7:List Z --> f(%9:List, %2:Elt, j(%4:List, %5:List), %10:List) Y --> 1 S --> %8:List Unifier 213 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> f(%7:List, %9:List) H --> %4:List G --> %5:List I --> f(%10:List, %8:List) U --> %6:List V --> %1:List W --> f(%2:Elt, %3:List) X --> %7:List Z --> 1 Y --> f(%9:List, %2:Elt, j(%4:List, %5:List), %10:List) S --> %8:List Unifier 214 rewrites: 0 A --> %4:List B --> %1:List E --> %2:Elt C --> f(%10:List, %5:List) D --> f(%6:List, %7:List) H --> f(%8:List, %9:List) G --> 1 I --> %3:List U --> %4:List V --> f(%1:List, %2:Elt, %10:List) W --> %5:List X --> %6:List Z --> f(%7:List, %2:Elt, %8:List) Y --> 1 S --> f(%9:List, %3:List) Unifier 215 rewrites: 0 A --> %4:List B --> %1:List E --> %2:Elt C --> f(%10:List, %5:List) D --> f(%6:List, %7:List) H --> f(%8:List, %9:List) G --> 1 I --> %3:List U --> %4:List V --> f(%1:List, %2:Elt, %10:List) W --> %5:List X --> %6:List Z --> 1 Y --> f(%7:List, %2:Elt, %8:List) S --> f(%9:List, %3:List) Unifier 216 rewrites: 0 A --> %4:List B --> %1:List E --> %2:Elt C --> f(%10:List, %5:List) D --> f(%6:List, %7:List) H --> 1 G --> f(%8:List, %9:List) I --> %3:List U --> %4:List V --> f(%1:List, %2:Elt, %10:List) W --> %5:List X --> %6:List Z --> f(%7:List, %2:Elt, %8:List) Y --> 1 S --> f(%9:List, %3:List) Unifier 217 rewrites: 0 A --> %4:List B --> %1:List E --> %2:Elt C --> f(%10:List, %5:List) D --> f(%6:List, %7:List) H --> 1 G --> f(%8:List, %9:List) I --> %3:List U --> %4:List V --> f(%1:List, %2:Elt, %10:List) W --> %5:List X --> %6:List Z --> 1 Y --> f(%7:List, %2:Elt, %8:List) S --> f(%9:List, %3:List) Unifier 218 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> %3:List D --> f(%6:List, %7:List) H --> f(%8:List, %9:List) G --> 1 I --> %4:List U --> %5:List V --> f(%1:List, %2:Elt) W --> %3:List X --> %6:List Z --> f(%7:List, %2:Elt, %8:List) Y --> 1 S --> f(%9:List, %4:List) Unifier 219 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> %3:List D --> f(%6:List, %7:List) H --> f(%8:List, %9:List) G --> 1 I --> %4:List U --> %5:List V --> f(%1:List, %2:Elt) W --> %3:List X --> %6:List Z --> 1 Y --> f(%7:List, %2:Elt, %8:List) S --> f(%9:List, %4:List) Unifier 220 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> %3:List D --> f(%6:List, %7:List) H --> 1 G --> f(%8:List, %9:List) I --> %4:List U --> %5:List V --> f(%1:List, %2:Elt) W --> %3:List X --> %6:List Z --> f(%7:List, %2:Elt, %8:List) Y --> 1 S --> f(%9:List, %4:List) Unifier 221 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> %3:List D --> f(%6:List, %7:List) H --> 1 G --> f(%8:List, %9:List) I --> %4:List U --> %5:List V --> f(%1:List, %2:Elt) W --> %3:List X --> %6:List Z --> 1 Y --> f(%7:List, %2:Elt, %8:List) S --> f(%9:List, %4:List) Unifier 222 rewrites: 0 A --> %4:List B --> f(%5:List, %10:List) E --> %1:Elt C --> %2:List D --> f(%6:List, %7:List) H --> f(%8:List, %9:List) G --> 1 I --> %3:List U --> %4:List V --> %5:List W --> f(%10:List, %1:Elt, %2:List) X --> %6:List Z --> f(%7:List, %1:Elt, %8:List) Y --> 1 S --> f(%9:List, %3:List) Unifier 223 rewrites: 0 A --> %4:List B --> f(%5:List, %10:List) E --> %1:Elt C --> %2:List D --> f(%6:List, %7:List) H --> f(%8:List, %9:List) G --> 1 I --> %3:List U --> %4:List V --> %5:List W --> f(%10:List, %1:Elt, %2:List) X --> %6:List Z --> 1 Y --> f(%7:List, %1:Elt, %8:List) S --> f(%9:List, %3:List) Unifier 224 rewrites: 0 A --> %4:List B --> f(%5:List, %10:List) E --> %1:Elt C --> %2:List D --> f(%6:List, %7:List) H --> 1 G --> f(%8:List, %9:List) I --> %3:List U --> %4:List V --> %5:List W --> f(%10:List, %1:Elt, %2:List) X --> %6:List Z --> f(%7:List, %1:Elt, %8:List) Y --> 1 S --> f(%9:List, %3:List) Unifier 225 rewrites: 0 A --> %4:List B --> f(%5:List, %10:List) E --> %1:Elt C --> %2:List D --> f(%6:List, %7:List) H --> 1 G --> f(%8:List, %9:List) I --> %3:List U --> %4:List V --> %5:List W --> f(%10:List, %1:Elt, %2:List) X --> %6:List Z --> 1 Y --> f(%7:List, %1:Elt, %8:List) S --> f(%9:List, %3:List) Unifier 226 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> %3:List D --> f(%6:List, %7:List) H --> f(%8:List, %9:List) G --> 1 I --> %4:List U --> %5:List V --> %1:List W --> f(%2:Elt, %3:List) X --> %6:List Z --> f(%7:List, %2:Elt, %8:List) Y --> 1 S --> f(%9:List, %4:List) Unifier 227 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> %3:List D --> f(%6:List, %7:List) H --> f(%8:List, %9:List) G --> 1 I --> %4:List U --> %5:List V --> %1:List W --> f(%2:Elt, %3:List) X --> %6:List Z --> 1 Y --> f(%7:List, %2:Elt, %8:List) S --> f(%9:List, %4:List) Unifier 228 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> %3:List D --> f(%6:List, %7:List) H --> 1 G --> f(%8:List, %9:List) I --> %4:List U --> %5:List V --> %1:List W --> f(%2:Elt, %3:List) X --> %6:List Z --> f(%7:List, %2:Elt, %8:List) Y --> 1 S --> f(%9:List, %4:List) Unifier 229 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> %3:List D --> f(%6:List, %7:List) H --> 1 G --> f(%8:List, %9:List) I --> %4:List U --> %5:List V --> %1:List W --> f(%2:Elt, %3:List) X --> %6:List Z --> 1 Y --> f(%7:List, %2:Elt, %8:List) S --> f(%9:List, %4:List) Unifier 230 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> f(%10:List, %7:List) D --> f(%8:List, %9:List) H --> %3:List G --> %4:List I --> %5:List U --> %6:List V --> f(%1:List, %2:Elt, %10:List) W --> %7:List X --> %8:List Z --> f(%9:List, %2:Elt, j(%3:List, %4:List)) Y --> 1 S --> %5:List Unifier 231 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> f(%10:List, %7:List) D --> f(%8:List, %9:List) H --> %3:List G --> %4:List I --> %5:List U --> %6:List V --> f(%1:List, %2:Elt, %10:List) W --> %7:List X --> %8:List Z --> 1 Y --> f(%9:List, %2:Elt, j(%3:List, %4:List)) S --> %5:List Unifier 232 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> %3:List D --> f(%8:List, %9:List) H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> f(%1:List, %2:Elt) W --> %3:List X --> %8:List Z --> f(%9:List, %2:Elt, j(%4:List, %5:List)) Y --> 1 S --> %6:List Unifier 233 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> %3:List D --> f(%8:List, %9:List) H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> f(%1:List, %2:Elt) W --> %3:List X --> %8:List Z --> 1 Y --> f(%9:List, %2:Elt, j(%4:List, %5:List)) S --> %6:List Unifier 234 rewrites: 0 A --> %6:List B --> f(%7:List, %10:List) E --> %1:Elt C --> %2:List D --> f(%8:List, %9:List) H --> %3:List G --> %4:List I --> %5:List U --> %6:List V --> %7:List W --> f(%10:List, %1:Elt, %2:List) X --> %8:List Z --> f(%9:List, %1:Elt, j(%3:List, %4:List)) Y --> 1 S --> %5:List Unifier 235 rewrites: 0 A --> %6:List B --> f(%7:List, %10:List) E --> %1:Elt C --> %2:List D --> f(%8:List, %9:List) H --> %3:List G --> %4:List I --> %5:List U --> %6:List V --> %7:List W --> f(%10:List, %1:Elt, %2:List) X --> %8:List Z --> 1 Y --> f(%9:List, %1:Elt, j(%3:List, %4:List)) S --> %5:List Unifier 236 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> %3:List D --> f(%8:List, %9:List) H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> %1:List W --> f(%2:Elt, %3:List) X --> %8:List Z --> f(%9:List, %2:Elt, j(%4:List, %5:List)) Y --> 1 S --> %6:List Unifier 237 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> %3:List D --> f(%8:List, %9:List) H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> %1:List W --> f(%2:Elt, %3:List) X --> %8:List Z --> 1 Y --> f(%9:List, %2:Elt, j(%4:List, %5:List)) S --> %6:List Unifier 238 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> f(%10:List, %7:List) D --> f(%8:List, %9:List) H --> %3:List G --> %4:List I --> %5:List U --> %6:List V --> f(%1:List, %2:Elt, %10:List) W --> %7:List X --> %8:List Z --> f(%9:List, %2:Elt) Y --> 1 S --> f(j(%3:List, %4:List), %5:List) Unifier 239 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> f(%10:List, %7:List) D --> f(%8:List, %9:List) H --> %3:List G --> %4:List I --> %5:List U --> %6:List V --> f(%1:List, %2:Elt, %10:List) W --> %7:List X --> %8:List Z --> 1 Y --> f(%9:List, %2:Elt) S --> f(j(%3:List, %4:List), %5:List) Unifier 240 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> %3:List D --> f(%8:List, %9:List) H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> f(%1:List, %2:Elt) W --> %3:List X --> %8:List Z --> f(%9:List, %2:Elt) Y --> 1 S --> f(j(%4:List, %5:List), %6:List) Unifier 241 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> %3:List D --> f(%8:List, %9:List) H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> f(%1:List, %2:Elt) W --> %3:List X --> %8:List Z --> 1 Y --> f(%9:List, %2:Elt) S --> f(j(%4:List, %5:List), %6:List) Unifier 242 rewrites: 0 A --> %6:List B --> f(%7:List, %10:List) E --> %1:Elt C --> %2:List D --> f(%8:List, %9:List) H --> %3:List G --> %4:List I --> %5:List U --> %6:List V --> %7:List W --> f(%10:List, %1:Elt, %2:List) X --> %8:List Z --> f(%9:List, %1:Elt) Y --> 1 S --> f(j(%3:List, %4:List), %5:List) Unifier 243 rewrites: 0 A --> %6:List B --> f(%7:List, %10:List) E --> %1:Elt C --> %2:List D --> f(%8:List, %9:List) H --> %3:List G --> %4:List I --> %5:List U --> %6:List V --> %7:List W --> f(%10:List, %1:Elt, %2:List) X --> %8:List Z --> 1 Y --> f(%9:List, %1:Elt) S --> f(j(%3:List, %4:List), %5:List) Unifier 244 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> %3:List D --> f(%8:List, %9:List) H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> %1:List W --> f(%2:Elt, %3:List) X --> %8:List Z --> f(%9:List, %2:Elt) Y --> 1 S --> f(j(%4:List, %5:List), %6:List) Unifier 245 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> %3:List D --> f(%8:List, %9:List) H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> %1:List W --> f(%2:Elt, %3:List) X --> %8:List Z --> 1 Y --> f(%9:List, %2:Elt) S --> f(j(%4:List, %5:List), %6:List) Unifier 246 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> f(%12:List, %7:List) D --> f(%8:List, j(%9:List, %10:List), %11:List) H --> %3:List G --> %4:List I --> %5:List U --> %6:List V --> f(%1:List, %2:Elt, %12:List) W --> %7:List X --> %8:List Z --> %9:List Y --> %10:List S --> f(%11:List, %2:Elt, j(%3:List, %4:List), %5:List) Unifier 247 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> %3:List D --> f(%8:List, j(%9:List, %10:List), %11:List) H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> f(%1:List, %2:Elt) W --> %3:List X --> %8:List Z --> %9:List Y --> %10:List S --> f(%11:List, %2:Elt, j(%4:List, %5:List), %6:List) Unifier 248 rewrites: 0 A --> %6:List B --> f(%7:List, %12:List) E --> %1:Elt C --> %2:List D --> f(%8:List, j(%9:List, %10:List), %11:List) H --> %3:List G --> %4:List I --> %5:List U --> %6:List V --> %7:List W --> f(%12:List, %1:Elt, %2:List) X --> %8:List Z --> %9:List Y --> %10:List S --> f(%11:List, %1:Elt, j(%3:List, %4:List), %5:List) Unifier 249 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> %3:List D --> f(%8:List, j(%9:List, %10:List), %11:List) H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> %1:List W --> f(%2:Elt, %3:List) X --> %8:List Z --> %9:List Y --> %10:List S --> f(%11:List, %2:Elt, j(%4:List, %5:List), %6:List) Unifier 250 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> f(%11:List, %7:List) D --> f(%8:List, j(%9:List, %10:List)) H --> %3:List G --> %4:List I --> %5:List U --> %6:List V --> f(%1:List, %2:Elt, %11:List) W --> %7:List X --> %8:List Z --> %9:List Y --> %10:List S --> f(%2:Elt, j(%3:List, %4:List), %5:List) Unifier 251 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> %3:List D --> f(%8:List, j(%9:List, %10:List)) H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> f(%1:List, %2:Elt) W --> %3:List X --> %8:List Z --> %9:List Y --> %10:List S --> f(%2:Elt, j(%4:List, %5:List), %6:List) Unifier 252 rewrites: 0 A --> %6:List B --> f(%7:List, %11:List) E --> %1:Elt C --> %2:List D --> f(%8:List, j(%9:List, %10:List)) H --> %3:List G --> %4:List I --> %5:List U --> %6:List V --> %7:List W --> f(%11:List, %1:Elt, %2:List) X --> %8:List Z --> %9:List Y --> %10:List S --> f(%1:Elt, j(%3:List, %4:List), %5:List) Unifier 253 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> %3:List D --> f(%8:List, j(%9:List, %10:List)) H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> %1:List W --> f(%2:Elt, %3:List) X --> %8:List Z --> %9:List Y --> %10:List S --> f(%2:Elt, j(%4:List, %5:List), %6:List) Unifier 254 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> f(%10:List, %7:List) D --> %3:List H --> %4:List G --> %5:List I --> f(%9:List, %8:List) U --> %6:List V --> f(%1:List, %2:Elt, %10:List) W --> %7:List X --> %3:List Z --> f(%2:Elt, j(%4:List, %5:List), %9:List) Y --> 1 S --> %8:List Unifier 255 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> f(%10:List, %7:List) D --> %3:List H --> %4:List G --> %5:List I --> f(%9:List, %8:List) U --> %6:List V --> f(%1:List, %2:Elt, %10:List) W --> %7:List X --> %3:List Z --> 1 Y --> f(%2:Elt, j(%4:List, %5:List), %9:List) S --> %8:List Unifier 256 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> f(%9:List, %8:List) U --> %7:List V --> f(%1:List, %2:Elt) W --> %3:List X --> %4:List Z --> f(%2:Elt, j(%5:List, %6:List), %9:List) Y --> 1 S --> %8:List Unifier 257 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> f(%9:List, %8:List) U --> %7:List V --> f(%1:List, %2:Elt) W --> %3:List X --> %4:List Z --> 1 Y --> f(%2:Elt, j(%5:List, %6:List), %9:List) S --> %8:List Unifier 258 rewrites: 0 A --> %6:List B --> f(%7:List, %10:List) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> f(%9:List, %8:List) U --> %6:List V --> %7:List W --> f(%10:List, %1:Elt, %2:List) X --> %3:List Z --> f(%1:Elt, j(%4:List, %5:List), %9:List) Y --> 1 S --> %8:List Unifier 259 rewrites: 0 A --> %6:List B --> f(%7:List, %10:List) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> f(%9:List, %8:List) U --> %6:List V --> %7:List W --> f(%10:List, %1:Elt, %2:List) X --> %3:List Z --> 1 Y --> f(%1:Elt, j(%4:List, %5:List), %9:List) S --> %8:List Unifier 260 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> f(%9:List, %8:List) U --> %7:List V --> %1:List W --> f(%2:Elt, %3:List) X --> %4:List Z --> f(%2:Elt, j(%5:List, %6:List), %9:List) Y --> 1 S --> %8:List Unifier 261 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> f(%9:List, %8:List) U --> %7:List V --> %1:List W --> f(%2:Elt, %3:List) X --> %4:List Z --> 1 Y --> f(%2:Elt, j(%5:List, %6:List), %9:List) S --> %8:List Unifier 262 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> f(%9:List, %6:List) D --> %3:List H --> f(%7:List, %8:List) G --> 1 I --> %4:List U --> %5:List V --> f(%1:List, %2:Elt, %9:List) W --> %6:List X --> %3:List Z --> f(%2:Elt, %7:List) Y --> 1 S --> f(%8:List, %4:List) Unifier 263 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> f(%9:List, %6:List) D --> %3:List H --> f(%7:List, %8:List) G --> 1 I --> %4:List U --> %5:List V --> f(%1:List, %2:Elt, %9:List) W --> %6:List X --> %3:List Z --> 1 Y --> f(%2:Elt, %7:List) S --> f(%8:List, %4:List) Unifier 264 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> f(%9:List, %6:List) D --> %3:List H --> 1 G --> f(%7:List, %8:List) I --> %4:List U --> %5:List V --> f(%1:List, %2:Elt, %9:List) W --> %6:List X --> %3:List Z --> f(%2:Elt, %7:List) Y --> 1 S --> f(%8:List, %4:List) Unifier 265 rewrites: 0 A --> %5:List B --> %1:List E --> %2:Elt C --> f(%9:List, %6:List) D --> %3:List H --> 1 G --> f(%7:List, %8:List) I --> %4:List U --> %5:List V --> f(%1:List, %2:Elt, %9:List) W --> %6:List X --> %3:List Z --> 1 Y --> f(%2:Elt, %7:List) S --> f(%8:List, %4:List) Unifier 266 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> f(%7:List, %8:List) G --> 1 I --> %5:List U --> %6:List V --> f(%1:List, %2:Elt) W --> %3:List X --> %4:List Z --> f(%2:Elt, %7:List) Y --> 1 S --> f(%8:List, %5:List) Unifier 267 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> f(%7:List, %8:List) G --> 1 I --> %5:List U --> %6:List V --> f(%1:List, %2:Elt) W --> %3:List X --> %4:List Z --> 1 Y --> f(%2:Elt, %7:List) S --> f(%8:List, %5:List) Unifier 268 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> 1 G --> f(%7:List, %8:List) I --> %5:List U --> %6:List V --> f(%1:List, %2:Elt) W --> %3:List X --> %4:List Z --> f(%2:Elt, %7:List) Y --> 1 S --> f(%8:List, %5:List) Unifier 269 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> 1 G --> f(%7:List, %8:List) I --> %5:List U --> %6:List V --> f(%1:List, %2:Elt) W --> %3:List X --> %4:List Z --> 1 Y --> f(%2:Elt, %7:List) S --> f(%8:List, %5:List) Unifier 270 rewrites: 0 A --> %5:List B --> f(%6:List, %9:List) E --> %1:Elt C --> %2:List D --> %3:List H --> f(%7:List, %8:List) G --> 1 I --> %4:List U --> %5:List V --> %6:List W --> f(%9:List, %1:Elt, %2:List) X --> %3:List Z --> f(%1:Elt, %7:List) Y --> 1 S --> f(%8:List, %4:List) Unifier 271 rewrites: 0 A --> %5:List B --> f(%6:List, %9:List) E --> %1:Elt C --> %2:List D --> %3:List H --> f(%7:List, %8:List) G --> 1 I --> %4:List U --> %5:List V --> %6:List W --> f(%9:List, %1:Elt, %2:List) X --> %3:List Z --> 1 Y --> f(%1:Elt, %7:List) S --> f(%8:List, %4:List) Unifier 272 rewrites: 0 A --> %5:List B --> f(%6:List, %9:List) E --> %1:Elt C --> %2:List D --> %3:List H --> 1 G --> f(%7:List, %8:List) I --> %4:List U --> %5:List V --> %6:List W --> f(%9:List, %1:Elt, %2:List) X --> %3:List Z --> f(%1:Elt, %7:List) Y --> 1 S --> f(%8:List, %4:List) Unifier 273 rewrites: 0 A --> %5:List B --> f(%6:List, %9:List) E --> %1:Elt C --> %2:List D --> %3:List H --> 1 G --> f(%7:List, %8:List) I --> %4:List U --> %5:List V --> %6:List W --> f(%9:List, %1:Elt, %2:List) X --> %3:List Z --> 1 Y --> f(%1:Elt, %7:List) S --> f(%8:List, %4:List) Unifier 274 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> f(%7:List, %8:List) G --> 1 I --> %5:List U --> %6:List V --> %1:List W --> f(%2:Elt, %3:List) X --> %4:List Z --> f(%2:Elt, %7:List) Y --> 1 S --> f(%8:List, %5:List) Unifier 275 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> f(%7:List, %8:List) G --> 1 I --> %5:List U --> %6:List V --> %1:List W --> f(%2:Elt, %3:List) X --> %4:List Z --> 1 Y --> f(%2:Elt, %7:List) S --> f(%8:List, %5:List) Unifier 276 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> 1 G --> f(%7:List, %8:List) I --> %5:List U --> %6:List V --> %1:List W --> f(%2:Elt, %3:List) X --> %4:List Z --> f(%2:Elt, %7:List) Y --> 1 S --> f(%8:List, %5:List) Unifier 277 rewrites: 0 A --> %6:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> 1 G --> f(%7:List, %8:List) I --> %5:List U --> %6:List V --> %1:List W --> f(%2:Elt, %3:List) X --> %4:List Z --> 1 Y --> f(%2:Elt, %7:List) S --> f(%8:List, %5:List) Unifier 278 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> f(%9:List, %8:List) D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> f(%1:List, %2:Elt, %9:List) W --> %8:List X --> %3:List Z --> f(%2:Elt, j(%4:List, %5:List)) Y --> 1 S --> %6:List Unifier 279 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> f(%9:List, %8:List) D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> f(%1:List, %2:Elt, %9:List) W --> %8:List X --> %3:List Z --> 1 Y --> f(%2:Elt, j(%4:List, %5:List)) S --> %6:List Unifier 280 rewrites: 0 A --> %8:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> %7:List U --> %8:List V --> f(%1:List, %2:Elt) W --> %3:List X --> %4:List Z --> f(%2:Elt, j(%5:List, %6:List)) Y --> 1 S --> %7:List Unifier 281 rewrites: 0 A --> %8:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> %7:List U --> %8:List V --> f(%1:List, %2:Elt) W --> %3:List X --> %4:List Z --> 1 Y --> f(%2:Elt, j(%5:List, %6:List)) S --> %7:List Unifier 282 rewrites: 0 A --> %7:List B --> f(%8:List, %9:List) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> %8:List W --> f(%9:List, %1:Elt, %2:List) X --> %3:List Z --> f(%1:Elt, j(%4:List, %5:List)) Y --> 1 S --> %6:List Unifier 283 rewrites: 0 A --> %7:List B --> f(%8:List, %9:List) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> %8:List W --> f(%9:List, %1:Elt, %2:List) X --> %3:List Z --> 1 Y --> f(%1:Elt, j(%4:List, %5:List)) S --> %6:List Unifier 284 rewrites: 0 A --> %8:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> %7:List U --> %8:List V --> %1:List W --> f(%2:Elt, %3:List) X --> %4:List Z --> f(%2:Elt, j(%5:List, %6:List)) Y --> 1 S --> %7:List Unifier 285 rewrites: 0 A --> %8:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> %7:List U --> %8:List V --> %1:List W --> f(%2:Elt, %3:List) X --> %4:List Z --> 1 Y --> f(%2:Elt, j(%5:List, %6:List)) S --> %7:List Unifier 286 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> f(%9:List, %8:List) D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> f(%1:List, %2:Elt, %9:List) W --> %8:List X --> %3:List Z --> %2:Elt Y --> 1 S --> f(j(%4:List, %5:List), %6:List) Unifier 287 rewrites: 0 A --> %7:List B --> %1:List E --> %2:Elt C --> f(%9:List, %8:List) D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> f(%1:List, %2:Elt, %9:List) W --> %8:List X --> %3:List Z --> 1 Y --> %2:Elt S --> f(j(%4:List, %5:List), %6:List) Unifier 288 rewrites: 0 A --> %8:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> %7:List U --> %8:List V --> f(%1:List, %2:Elt) W --> %3:List X --> %4:List Z --> %2:Elt Y --> 1 S --> f(j(%5:List, %6:List), %7:List) Unifier 289 rewrites: 0 A --> %8:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> %7:List U --> %8:List V --> f(%1:List, %2:Elt) W --> %3:List X --> %4:List Z --> 1 Y --> %2:Elt S --> f(j(%5:List, %6:List), %7:List) Unifier 290 rewrites: 0 A --> %7:List B --> f(%8:List, %9:List) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> %8:List W --> f(%9:List, %1:Elt, %2:List) X --> %3:List Z --> %1:Elt Y --> 1 S --> f(j(%4:List, %5:List), %6:List) Unifier 291 rewrites: 0 A --> %7:List B --> f(%8:List, %9:List) E --> %1:Elt C --> %2:List D --> %3:List H --> %4:List G --> %5:List I --> %6:List U --> %7:List V --> %8:List W --> f(%9:List, %1:Elt, %2:List) X --> %3:List Z --> 1 Y --> %1:Elt S --> f(j(%4:List, %5:List), %6:List) Unifier 292 rewrites: 0 A --> %8:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> %7:List U --> %8:List V --> %1:List W --> f(%2:Elt, %3:List) X --> %4:List Z --> %2:Elt Y --> 1 S --> f(j(%5:List, %6:List), %7:List) Unifier 293 rewrites: 0 A --> %8:List B --> %1:List E --> %2:Elt C --> %3:List D --> %4:List H --> %5:List G --> %6:List I --> %7:List U --> %8:List V --> %1:List W --> f(%2:Elt, %3:List) X --> %4:List Z --> 1 Y --> %2:Elt S --> f(j(%5:List, %6:List), %7:List) No more unifiers. rewrites: 0 Bye. maude-3.1/tests/ResolvedBugs/moduleSumMay20190000755000175200017520000000037413473575774016060 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/moduleSumMay2019.maude -no-banner -no-advise \ > moduleSumMay2019.out 2>&1 diff $srcdir/moduleSumMay2019.expected moduleSumMay2019.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/metaIntMatchOct20180000755000175200017520000000041013357777341016444 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaIntMatchOct2018.maude -no-banner -no-advise \ > metaIntMatchOct2018.out 2>&1 diff $srcdir/metaIntMatchOct2018.expected metaIntMatchOct2018.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/parameterTheoryCopyMay20190000755000175200017520000000044413473577670020107 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/parameterTheoryCopyMay2019.maude -no-banner -no-advise \ > parameterTheoryCopyMay2019.out 2>&1 diff $srcdir/parameterTheoryCopyMay2019.expected parameterTheoryCopyMay2019.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/instantiationJuly20190000755000175200017520000000042013520423354017132 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/instantiationJuly2019.maude -no-banner -no-advise \ > instantiationJuly2019.out 2>&1 diff $srcdir/instantiationJuly2019.expected instantiationJuly2019.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/metaParseStrategyApril20200000755000175200017520000000044413645231365020043 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaParseStrategyApril2020.maude -no-banner -no-advise \ > metaParseStrategyApril2020.out 2>&1 diff $srcdir/metaParseStrategyApril2020.expected metaParseStrategyApril2020.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/staleViewJune2018.maude0000644000175200017520000000152213315500333017254 00000000000000set show timing off . set show advisories off . *** Check that we don't look the mapping for _<_ fmod FOO is op _+_ : Bool Bool -> Bool [prec 10] . op p_ : Bool -> Bool [prec 20] . endfm view V from STRICT-TOTAL-ORDER to FOO is sort Elt to Bool . op X:Elt < Y:Elt to term p X:Bool + Y:Bool . endv show view V . fmod FOO is op _+_ : Bool Bool -> Bool [prec 20] . op p_ : Bool -> Bool [prec 10] . endfm show view V . *** Check the same issue at the metalevel. fmod FOO is op _+_ : Bool Bool -> Bool [prec 10] . op p_ : Bool -> Bool [prec 20] . endfm view V from STRICT-TOTAL-ORDER to FOO is sort Elt to Bool . op X:Elt < Y:Elt to term p X:Bool + Y:Bool . endv red in META-LEVEL : upView('V) . fmod FOO is op _+_ : Bool Bool -> Bool [prec 20] . op p_ : Bool -> Bool [prec 10] . endfm red in META-LEVEL : upView('V) . maude-3.1/tests/ResolvedBugs/showModuleJune2018.maude0000644000175200017520000000227313333171550017450 00000000000000set show timing off . set show advisories off . *** *** Check that showModule message returns imports of non-flattened modules. *** load metaInterpreter mod TEST is pr META-INTERPRETER . op FOO : -> Module . eq FOO = ( fmod 'FOO is nil sorts 'Foo . none op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . none eq 'a.Foo = 'b.Foo [none] . endfm ). op BAR : -> Module . eq BAR = ( fmod 'BAR is including 'FOO . sorts none . none none none none endfm ). op me : -> Oid . op User : -> Cid . var X Y Z : Oid . var N : Nat . var T : Term . var S : Sort . sort State . ops 1 2 3 4 : -> State [ctor] . op state:_ : State -> Attribute [ctor] . rl < X : User | state: 1 > createdInterpreter(X, Y, Z) => < X : User | state: 2 > insertModule(Z, X, FOO) . rl < X : User | state: 2 > insertedModule(X, Y) => < X : User | state: 3 > insertModule(Y, X, BAR) . rl < X : User | state: 3 > insertedModule(X, Y) => < X : User | state: 4 > showModule(Y, X, 'BAR, false) . endm erew <> < me : User | state: 1 > createInterpreter(interpreterManager, me, none) . maude-3.1/tests/ResolvedBugs/metaIntImportJune2018.expected0000644000175200017520000000046213333173452020625 00000000000000========================================== erewrite in TEST : <> < me : User | state: 0 > createInterpreter( interpreterManager, me, none) . rewrites: 11 result Configuration: <> < me : User | state: 3 > reducedTerm(me, interpreter( 0), 2, '`{_`,_`}[''c.Foo.Constant,''Foo.Sort], 'ResultPair) Bye. maude-3.1/tests/ResolvedBugs/moduleSumMay2019.maude0000644000175200017520000000032013473575630017125 00000000000000set show timing off . set show advisories off . *** check for summand commutation fmod FOO is pr NAT + QID . endfm show mod . *** check for memory leak fmod FOO is pr NAT + FLOAT + . endfm show mod . maude-3.1/tests/ResolvedBugs/parameterTheoryCopyMay2019.expected0000644000175200017520000000100113473603324021654 00000000000000Warning: : sort Z$Elt has been imported from both , line 12 (fth TRIV') and , line 7 (fmod FOO). Since it is imported from both a module and a theory, this renders theory Z :: TRIV' unusable. Warning: , line 19 (fmod BAZ): this module contains one or more errors that could not be patched up and thus it cannot be used or imported. Warning: , line 19 (fmod BAZ): module BAZ is unusable due to unpatchable errors. Bye. maude-3.1/tests/ResolvedBugs/parserJune20180000755000175200017520000000036413314314753015531 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/parserJune2018.maude -no-banner -no-advise \ > parserJune2018.out 2>&1 diff $srcdir/parserJune2018.expected parserJune2018.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/sortCollapseMay2020.expected0000644000175200017520000000045213664041203020313 00000000000000Warning: sort declarations for operator f with left identity e can cause collapse from sort Foo to [Foo] (collapsing to a larger or incomparable sort is illegal). Foo: f(e, X:[Foo]) ========================================== reduce in FOO : X:[Foo] . rewrites: 0 result [Foo]: X:[Foo] Bye. maude-3.1/tests/ResolvedBugs/variantUnifyJune2020.maude0000644000175200017520000000106713670540515017777 00000000000000set show timing off . set show advisories off . *** *** Check for substitution size bug that affected both UnifierFilter *** and VariantFolder, because subpatterns were being compiled before *** all abstraction variables were added. *** fmod A-UNIF is sorts List Elt . subsort Elt < List . op f : List List -> List [assoc] . op j : List List -> List [assoc comm id: 1] . op 1 : -> List . vars A B C D G H I S U V W X Y Z : List . var E : Elt . endfm variant unify j(A, f(B, E, C), f(D, E, j(G, H), I)) =? j(U, f(V, W), f(X, j(Y, Z), S)) . maude-3.1/tests/ResolvedBugs/viewRecursionMay20190000755000175200017520000000041413473601114016717 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/viewRecursionMay2019.maude -no-banner -no-advise \ > viewRecursionMay2019.out 2>&1 diff $srcdir/viewRecursionMay2019.expected viewRecursionMay2019.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/metaIntAscentJune2018.expected0000644000175200017520000000064213333173515020570 00000000000000========================================== erewrite in TEST : <> < me : User | state: 0 > createInterpreter( interpreterManager, me, none) . rewrites: 7 result Configuration: <> < me : User | state: 3 > reducedTerm(me, interpreter( 0), 1, 'fmod_is_sorts_.____endfm[''FOO.Sort,'nil.ImportList, ''MetaLevelFoo.Sort,'none.SubsortDeclSet,'none.OpDeclSet,'none.MembAxSet, 'none.EquationSet], 'FModule) Bye. maude-3.1/tests/ResolvedBugs/identityUnificationMay20200000755000175200017520000000044413661125062020072 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/identityUnificationMay2020.maude -no-banner -no-advise \ > identityUnificationMay2020.out 2>&1 diff $srcdir/identityUnificationMay2020.expected identityUnificationMay2020.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/identityUnificationSeptember2020.expected0000644000175200017520000000030413732306714023066 00000000000000========================================== unify in U-TEST : X =? f(g(Z), Y) . Unifier 1 X --> g(#1:Foo) Z --> #1:Foo Y --> 1 Unifier 2 X --> f(g(#1:Foo), #2:Foo) Z --> #1:Foo Y --> #2:Foo Bye. maude-3.1/tests/ResolvedBugs/closeSocketFeb2020.maude0000644000175200017520000000262113630643601017362 00000000000000set show timing off . set show advisories off . *** *** Check that closing a server TCP socket that is waiting *** to accept connections doesn't cause Maude to spin its wheels *** waiting for events on the closed socket. *** load socket mod SERVER-SHUTDOWN is protecting SOCKET . op Server : -> Cid [ctor] . op server : -> Oid [ctor] . op state:_ : ServerState -> Attribute [ctor] . sort ServerState . ops init closing : -> ServerState [ctor] . op accepting : Oid -> ServerState [ctor] . var SSkt : Oid . var Reason : String . rl [createdSocket] : < server : Server | state: init > createdSocket(server, socketManager, SSkt) => < server : Server | state: accepting(SSkt) > acceptClient(SSkt, server) . rl [close] : < server : Server | state: accepting(SSkt) > => < server : Server | state: closing > closeSocket(SSkt, server) . rl [close] : < server : Server | state: closing > closedSocket(server, SSkt, Reason) => none . op initial : -> Configuration . eq initial = <> < server : Server | state: init > createServerTcpSocket(socketManager, server, 1234, 5) . endm erew initial . maude-3.1/tests/ResolvedBugs/identityUnificationMay2020.expected0000644000175200017520000000076613720020767021700 00000000000000========================================== unify in FOO : Z =? f(X, Y) /\ g(Z) =? g(S) . Unifier 1 Z --> #1:Small X --> 1 Y --> #1:Small S --> #1:Small Unifier 2 Z --> #1:Small X --> #1:Small Y --> 1 S --> #1:Small ========================================== variant unify in FOO : Z =? f(X, Y) /\ g(Z) =? g(S) . Unifier 1 rewrites: 0 Z --> %1:Small X --> 1 Y --> %1:Small S --> %1:Small Unifier 2 rewrites: 0 Z --> %1:Small X --> %1:Small Y --> 1 S --> %1:Small No more unifiers. rewrites: 0 Bye. maude-3.1/tests/ResolvedBugs/metaModuleCacheJune20180000755000175200017520000000043013314571437017253 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaModuleCacheJune2018.maude -no-banner -no-advise \ > metaModuleCacheJune2018.out 2>&1 diff $srcdir/metaModuleCacheJune2018.expected metaModuleCacheJune2018.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/identityUnificationSeptember20200000755000175200017520000000047413732277660021310 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/identityUnificationSeptember2020.maude -no-banner -no-advise \ > identityUnificationSeptember2020.out 2>&1 diff $srcdir/identityUnificationSeptember2020.expected identityUnificationSeptember2020.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/metaIntAscentJune20180000755000175200017520000000042013314777043016772 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaIntAscentJune2018.maude -no-banner -no-advise \ > metaIntAscentJune2018.out 2>&1 diff $srcdir/metaIntAscentJune2018.expected metaIntAscentJune2018.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/objectMessageOct2018.maude0000644000175200017520000000110413357257601017721 00000000000000set show timing off . set show advisories off . *** *** Check that object-message rewriting fake rewrites are ignored *** by trace/break/profile code. *** mod FOO is inc CONFIGURATION . op User : -> Cid . ops me other : -> Oid . op no-op : Oid Oid -> Msg [msg] . vars X Y : Oid . var AS : AttributeSet . rl < X : User | AS > no-op(X, Y) => < X : User | AS > . endm set break on . break select __ . set trace on . set trace whole on . set profile on . frew < me : User | none > no-op(me, other) . *** we expect a single break to debugger resume . show profile . maude-3.1/tests/ResolvedBugs/identityUnificationMay2020.maude0000644000175200017520000000064313661124401021156 00000000000000set show timing off . set show advisories off . *** *** Test for bug in C/U/Ul/Ur unification where original *** rather than representative variable was used. *** fmod FOO is sort Small Foo . subsort Small < Foo . op 1 : -> Foo . op f : Foo Foo -> Foo [id: 1] . op g : Foo -> Foo . vars X Y Z : Foo . var S : Small . endfm unify Z =? f(X, Y) /\ g(Z) =? g(S) . variant unify Z =? f(X, Y) /\ g(Z) =? g(S) . maude-3.1/tests/ResolvedBugs/complexParserSyncApril2020.expected0000644000175200017520000000075113654335440021655 00000000000000========================================== reduce in META-LEVEL : metaParse(upModule('NAT, false), none, '0, 'Nat) . rewrites: 2 result ResultPair: {'0.Zero,'Zero} ========================================== reduce in META-LEVEL : metaParseStrategy(upModule('NAT, false), none, 'idle) . rewrites: 2 result Strategy: idle ========================================== reduce in META-LEVEL : metaParse(upModule('NAT, false), none, '0, 'Nat) . rewrites: 2 result ResultPair: {'0.Zero,'Zero} Bye. maude-3.1/tests/ResolvedBugs/ascentFunctionsJanuary2020.maude0000644000175200017520000000114213617123033021161 00000000000000set show timing off . set show advisories off . *** *** Check that contects of bad module cannot be pulled up *** to the metalevel. *** smod BAD is pr NON-EXISTENT . endsm red in META-LEVEL : upModule('BAD, false) . red in META-LEVEL : upImports('BAD) . red in META-LEVEL : upSorts('BAD, false) . red in META-LEVEL : upSubsortDecls('BAD, false) . red in META-LEVEL : upOpDecls('BAD, false) . red in META-LEVEL : upMbs('BAD, false) . red in META-LEVEL : upEqs('BAD, false) . red in META-LEVEL : upRls('BAD, false) . red in META-LEVEL : upStratDecls('BAD, false) . red in META-LEVEL : upSds('BAD, false) . maude-3.1/tests/ResolvedBugs/ACU_MissingUnifiersMay2020.expected0000644000175200017520000000041513703744632021460 00000000000000========================================== unify in FOO : N:Nat =? g(M:Nat + Z:Zero) . Unifier 1 N:Nat --> g(0) M:Nat --> 0 Z:Zero --> 0 Unifier 2 N:Nat --> g(#1:Zero) M:Nat --> #1:Zero Z:Zero --> 0 Unifier 3 N:Nat --> g(#1:Zero) M:Nat --> 0 Z:Zero --> #1:Zero Bye. maude-3.1/tests/ResolvedBugs/CUI_OccursCheckSeptember20200000775000175200017520000000045413733264255020157 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/CUI_OccursCheckSeptember2020.maude -no-banner -no-advise \ > CUI_OccursCheckSeptember2020.out 2>&1 diff $srcdir/CUI_OccursCheckSeptember2020.expected CUI_OccursCheckSeptember2020.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/complexParserSyncApril20200000755000175200017520000000044413645231331020051 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/complexParserSyncApril2020.maude -no-banner -no-advise \ > complexParserSyncApril2020.out 2>&1 diff $srcdir/complexParserSyncApril2020.expected complexParserSyncApril2020.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/staleViewJune2018.expected0000644000175200017520000000132313324347300017764 00000000000000view V from STRICT-TOTAL-ORDER to FOO is sort Elt to Bool . op X:Elt < Y:Elt to term p X:Bool + Y:Bool . endv view V from STRICT-TOTAL-ORDER to FOO is sort Elt to Bool . op X:Elt < Y:Elt to term p X:Bool + Y:Bool . endv ========================================== reduce in META-LEVEL : upView('V) . rewrites: 1 result View: view 'V from 'STRICT-TOTAL-ORDER to 'FOO is sort 'Elt to 'Bool . op '_<_['X:Elt,'Y:Elt] to term 'p_['_+_['X:Bool,'Y:Bool]] . none endv ========================================== reduce in META-LEVEL : upView('V) . rewrites: 1 result View: view 'V from 'STRICT-TOTAL-ORDER to 'FOO is sort 'Elt to 'Bool . op '_<_['X:Elt,'Y:Elt] to term '_+_['p_['X:Bool],'Y:Bool] . none endv Bye. maude-3.1/tests/ResolvedBugs/physArgIndexOct20180000755000175200017520000000041013363757605016471 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/physArgIndexOct2018.maude -no-banner -no-advise \ > physArgIndexOct2018.out 2>&1 diff $srcdir/physArgIndexOct2018.expected physArgIndexOct2018.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/metaIntAscentJune2018.maude0000644000175200017520000000232713333172410020055 00000000000000set show timing off . set show advisories off . *** *** Check that the meta-interpreter ascent functions get module imports from from the *** meta-interpreter and not the object level interpreter. *** set include BOOL off . fmod FOO is sort ObjectLevelFoo . endfm load metaInterpreter mod TEST is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op state:_ : Nat -> Attribute . op foo : -> Module . eq foo = ( fmod 'FOO is nil sorts 'MetaLevelFoo . none none none none endfm) . vars X Y Z : Oid . rl < X : User | state: 0 > createdInterpreter(X, Y, Z) => < X : User | state: 1 > insertModule(Z, X, foo) . rl < X : User | state: 1 > insertedModule(X, Y) => < X : User | state: 2 > insertModule(Y, X, upModule('META-LEVEL, true)) . rl < X : User | state: 2 > insertedModule(X, Y) => < X : User | state: 3 > reduceTerm(Y, X, 'META-LEVEL, 'upModule[''FOO.Qid, 'true.Bool]) . op foo : -> Module . eq foo = ( fmod 'FOO is nil sorts 'MetaLevelFoo . none none none none endfm) . endm *** expecting meta-meta-module to contain sort MetaLevelFoo but get ObjectLevelFoo erew <> < me : User | state: 0 > createInterpreter(interpreterManager, me, none) . maude-3.1/tests/ResolvedBugs/metaIntRewriteJune2018.expected0000644000175200017520000000041113333173235020765 00000000000000========================================== erewrite in TEST : <> < me : User | none > createInterpreter( interpreterManager, me, none) . rewrites: 6 result Configuration: <> < me : User | prev: 'b.Foo > rewroteTerm(me, interpreter(0), 1, 'b.Foo, 'Foo) Bye. maude-3.1/tests/ResolvedBugs/closeSocketFeb20200000755000175200017520000000040413630644760016277 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/closeSocketFeb2020.maude -no-banner -no-advise \ > closeSocketFeb2020.out 2>&1 diff $srcdir/closeSocketFeb2020.expected closeSocketFeb2020.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/metaApplyNov2018.maude0000644000175200017520000000116513371445353017125 00000000000000set show timing off . set show advisories off . *** *** Check that mb applications and eq rewrites for the initial *** reduction of the subject are not counted twice for *** metaApply()/metaXapply() *** mod APPLY is sorts Foo Bar . subsort Foo < Bar . ops a c : -> Bar . op b : -> Foo . op f : Foo Foo -> Foo [comm] . eq a = c . mb c : Foo . rl f(X:Foo, Y:Foo) => X:Foo [label k] . endm set trace on . set show breakdown on . red in META-LEVEL : metaApply(['APPLY], 'f['a.Foo, 'b.Foo], 'k, 'Y:Foo <- 'b.Foo, 0) . red in META-LEVEL : metaXapply(['APPLY], 'f['a.Foo, 'b.Foo], 'k, 'Y:Foo <- 'b.Foo, 0, 0, 0) . maude-3.1/tests/ResolvedBugs/metaModuleCacheJune2018.expected0000644000175200017520000000122213333173404021041 00000000000000========================================== erewrite in TEST : <> < me : User | state: 0 > createInterpreter( interpreterManager, me, none) . rewrites: 6 result Configuration: <> < me : User | state: 3 > reducedTerm(me, interpreter( 0), 1, 'c.Foo, 'Foo) ========================================== reduce in TEST : metaReduce(bar, 'a.Foo) . rewrites: 3 result ResultPair: {'b.Foo,'Foo} ========================================== erewrite in TEST : <> < me : User | state: 0 > createInterpreter( interpreterManager, me, none) . rewrites: 6 result Configuration: <> < me : User | state: 3 > reducedTerm(me, interpreter( 0), 1, 'c.Foo, 'Foo) Bye. maude-3.1/tests/ResolvedBugs/parameterTheoryCopyMay2019.maude0000644000175200017520000000043313473601011021145 00000000000000set show timing off . set show advisories off . *** trick parameter copy into failing fmod FOO is sort Z$Elt . *** nasty endfm fth TRIV' is inc FOO . sort Elt . endfth fmod BAR{Y :: TRIV'} is sort Bar{Y} . endfm fmod BAZ{Z :: TRIV'} is inc BAR{Z} . endfm show all . maude-3.1/tests/ResolvedBugs/sortCollapseMay20200000755000175200017520000000041013664037262016522 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/sortCollapseMay2020.maude -no-banner -no-advise \ > sortCollapseMay2020.out 2>&1 diff $srcdir/sortCollapseMay2020.expected sortCollapseMay2020.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/metaModuleCacheJune2018.maude0000644000175200017520000000244513333172174020346 00000000000000set show timing off . set show advisories off . *** *** Check that the meta-interpreter doesn't use the meta-module cache. *** fmod FOO is sort Foo . ops a b : -> Foo . eq a = b . endfm load metaInterpreter mod TEST is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op state:_ : Nat -> Attribute . vars X Y Z : Oid . rl < X : User | state: 0 > createdInterpreter(X, Y, Z) => < X : User | state: 1 > insertModule(Z, X, foo) . rl < X : User | state: 1 > insertedModule(X, Y) => < X : User | state: 2 > insertModule(Y, X, bar) . rl < X : User | state: 2 > insertedModule(X, Y) => < X : User | state: 3 > reduceTerm(Y, X, 'BAR, 'a.Foo) . op foo : -> Module . eq foo = ( fmod 'FOO is nil sorts 'Foo . none op 'a : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . none eq 'a.Foo = 'c.Foo [none] . endfm ) . op bar : -> Module . eq bar = ( fmod 'BAR is protecting 'FOO . sorts none . none none none none endfm ) . endm *** correct result erew <> < me : User | state: 0 > createInterpreter(interpreterManager, me, none) . *** put a fmod BAR with same meta-syntax but different semantics in cache red metaReduce(bar, 'a.Foo) . *** wrong result erew <> < me : User | state: 0 > createInterpreter(interpreterManager, me, none) . maude-3.1/tests/ResolvedBugs/metaApplyNov2018.expected0000644000175200017520000000437413565216260017636 00000000000000========================================== reduce in META-LEVEL : metaApply(['APPLY], 'f['a.Foo,'b.Foo], 'k, 'Y:Foo <- 'b.Foo, 0) . *********** equation eq [Q:Qid] = sth Q:Qid is including Q:Qid . sorts none . none none none none none none none endsth . Q:Qid --> 'APPLY ['APPLY] ---> sth 'APPLY is including 'APPLY . sorts none . none none none none none none none endsth *********** equation eq a = c . empty substitution a ---> c *********** membership axiom mb c : Foo . empty substitution Bar: c becomes Foo *********** rule rl f(X:Foo, Y:Foo) => X:Foo [label k] . X:Foo --> c Y:Foo --> b f(c, b) ---> c *********** equation (built-in equation for symbol metaApply) metaApply(sth 'APPLY is including 'APPLY . sorts none . none none none none none none none endsth, 'f['a.Foo,'b.Foo], 'k, 'Y:Foo <- 'b.Foo, 0) ---> {'c.Foo,'Foo, 'X:Foo <- 'c.Foo ; 'Y:Foo <- 'b.Foo} rewrites: 5 mb applications: 1 equational rewrites: 3 rule rewrites: 1 variant narrowing steps: 0 narrowing steps: 0 result ResultTriple: {'c.Foo,'Foo, 'X:Foo <- 'c.Foo ; 'Y:Foo <- 'b.Foo} ========================================== reduce in META-LEVEL : metaXapply(['APPLY], 'f['a.Foo,'b.Foo], 'k, 'Y:Foo <- 'b.Foo, 0, 0, 0) . *********** equation eq [Q:Qid] = sth Q:Qid is including Q:Qid . sorts none . none none none none none none none endsth . Q:Qid --> 'APPLY ['APPLY] ---> sth 'APPLY is including 'APPLY . sorts none . none none none none none none none endsth *********** equation eq a = c . empty substitution a ---> c *********** membership axiom mb c : Foo . empty substitution Bar: c becomes Foo *********** rule rl f(X:Foo, Y:Foo) => X:Foo [label k] . X:Foo --> c Y:Foo --> b f(c, b) ---> c *********** equation (built-in equation for symbol metaXapply) metaXapply(sth 'APPLY is including 'APPLY . sorts none . none none none none none none none endsth, 'f['a.Foo,'b.Foo], 'k, 'Y:Foo <- 'b.Foo, 0, 0, 0) ---> {'c.Foo,'Foo, 'X:Foo <- 'c.Foo ; 'Y:Foo <- 'b.Foo,[]} rewrites: 5 mb applications: 1 equational rewrites: 3 rule rewrites: 1 variant narrowing steps: 0 narrowing steps: 0 result Result4Tuple: {'c.Foo,'Foo, 'X:Foo <- 'c.Foo ; 'Y:Foo <- 'b.Foo,[]} Bye. maude-3.1/tests/ResolvedBugs/parserJune2018.maude0000644000175200017520000000035513314321031016603 00000000000000set show advisories off . *** Make sure syntax error is reported in the correct place (after b). fmod FOO is sort Foo . op a_ : Foo -> Foo [prec 1 gather(e)] . op b_ : Foo -> Foo [prec 1] . op c : -> Foo . endfm parse a b c . maude-3.1/tests/ResolvedBugs/CUIbug12-22-090000755000175200017520000000036411314537127015030 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/CUIbug12-22-09.maude -no-banner -no-advise \ > CUIbug12-22-09.out 2>&1 diff $srcdir/CUIbug12-22-09.expected CUIbug12-22-09.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/CUI_OccursCheckSeptember2020.maude0000664000175200017520000000177613733264017021252 00000000000000set show timing off . set show advisories off . *** *** Test for nontermination in U and CU unification due to *** not doing an indirect occurs check. We use irred because *** we might reduce the number of redundant unifiers in the *** future. *** fmod U-TEST is sort Foo . ops 1 a : -> Foo . op f : Foo Foo -> Foo [id: 1] . vars A B C X Y Z : Foo . endfm irred unify X =? f(Z, Y) /\ Z =? f(X, Y) /\ f(X, Y) =? f(A, B) . irred unify f(X, Y) =? a /\ Z =? f(X, Y) /\ X =? f(Z, Y) . irred unify X =? f(f(f(X, Y), X), Y) . irred unify X =? f(f(f(X, X), Z), Y) . irred unify X =? f(f(X, Y), f(Y, X)) . irred unify X =? f(f(f(f(Y, X), Y), X), Z) . fmod CU-TEST is sort Foo . ops 1 a : -> Foo . op f : Foo Foo -> Foo [comm id: 1] . vars A B C X Y Z : Foo . endfm irred unify X =? f(Z, Y) /\ Z =? f(X, Y) /\ f(X, Y) =? f(A, B) . irred unify f(X, Y) =? a /\ Z =? f(X, Y) /\ X =? f(Z, Y) . irred unify X =? f(f(f(X, Y), X), Y) . irred unify X =? f(f(f(X, X), Z), Y) . irred unify X =? f(f(f(f(Y, X), Y), X), Z) . maude-3.1/tests/ResolvedBugs/staleViewJune20180000755000175200017520000000040013314321256016163 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/staleViewJune2018.maude -no-banner -no-advise \ > staleViewJune2018.out 2>&1 diff $srcdir/staleViewJune2018.expected staleViewJune2018.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/identityUnificationSeptember2020.maude0000644000175200017520000000050313732277604022366 00000000000000set show timing off . set show advisories off . *** *** Test for bug in U/Ul/Ur unification where theory purification code *** assumed the operator was commutative. *** fmod U-TEST is sort Foo . op 1 : -> Foo . op f : Foo Foo -> Foo [id: 1] . op g : Foo -> Foo . vars X Y Z : Foo . endfm unify X =? f(g(Z), Y) . maude-3.1/tests/ResolvedBugs/moduleSumMay2019.expected0000644000175200017520000000015513473604330017627 00000000000000fmod FOO is protecting NAT + QID . endfm Warning: , line 14 (fmod FOO): syntax error Bye. maude-3.1/tests/ResolvedBugs/metaIntRewriteJune2018.maude0000644000175200017520000000173513333172015020264 00000000000000set show timing off . set show advisories off . *** *** Check that the meta-interpreter resets the next rule to try at each rewriteTerm() message. *** load metaInterpreter mod FOO is sort Foo . ops a b c : -> Foo . rl a => b . rl a => c . endm mod TEST is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . vars X Y Z : Oid . var T : Term . var S : Sort . var A : AttributeSet . var N : Nat . op prev:_ : Term -> Attribute [ctor] . rl < X : User | A > createdInterpreter(X, Y, Z) => < X : User | A > insertModule(Z, X, upModule('FOO, true)) . rl < X : User | A > insertedModule(X, Y) => < X : User | A > rewriteTerm(Y, X, unbounded, 'FOO, 'a.Foo) . rl < X : User | none > rewroteTerm(X, Y, N, T, S) => < X : User | prev: T > rewriteTerm(Y, X, unbounded, 'FOO, 'a.Foo) . endm *** second rewriteTerm returns different result from first. erew <> < me : User | none > createInterpreter(interpreterManager, me, none) . maude-3.1/tests/ResolvedBugs/objectMessageOct20180000755000175200017520000000041413357257734016644 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/objectMessageOct2018.maude -no-banner -no-advise \ > objectMessageOct2018.out 2>&1 diff $srcdir/objectMessageOct2018.expected objectMessageOct2018.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/CUI_OccursCheckSeptember2020.expected0000644000175200017520000000302713733266363021753 00000000000000========================================== unify in U-TEST : X =? f(Z, Y) /\ Z =? f(X, Y) /\ f(X, Y) =? f(A, B) . Unifier 1 X --> f(#1:Foo, #2:Foo) Z --> f(#1:Foo, #2:Foo) Y --> 1 A --> #1:Foo B --> #2:Foo ========================================== unify in U-TEST : f(X, Y) =? a /\ Z =? f(X, Y) /\ X =? f(Z, Y) . Unifier 1 X --> a Y --> 1 Z --> a ========================================== unify in U-TEST : X =? f(f(f(X, Y), X), Y) . Unifier 1 X --> 1 Y --> 1 ========================================== unify in U-TEST : X =? f(f(f(X, X), Z), Y) . Unifier 1 X --> 1 Z --> 1 Y --> 1 ========================================== unify in U-TEST : X =? f(f(X, Y), f(Y, X)) . Unifier 1 X --> 1 Y --> 1 ========================================== unify in U-TEST : X =? f(f(f(f(Y, X), Y), X), Z) . Unifier 1 X --> 1 Y --> 1 Z --> 1 ========================================== unify in CU-TEST : X =? f(Z, Y) /\ Z =? f(X, Y) /\ f(X, Y) =? f(A, B) . Unifier 1 X --> f(#1:Foo, #2:Foo) Z --> f(#1:Foo, #2:Foo) Y --> 1 A --> #1:Foo B --> #2:Foo ========================================== unify in CU-TEST : f(X, Y) =? a /\ Z =? f(X, Y) /\ X =? f(Z, Y) . Unifier 1 X --> a Y --> 1 Z --> a ========================================== unify in CU-TEST : X =? f(f(f(X, Y), X), Y) . Unifier 1 X --> 1 Y --> 1 ========================================== unify in CU-TEST : X =? f(f(f(X, X), Z), Y) . Unifier 1 X --> 1 Y --> 1 Z --> 1 ========================================== unify in CU-TEST : X =? f(f(f(f(Y, X), Y), X), Z) . Unifier 1 X --> 1 Z --> 1 Y --> 1 Bye. maude-3.1/tests/ResolvedBugs/unificationMar2013.expected0000644000175200017520000000245713703750700020156 00000000000000========================================== unify in FOO : X =? f(f(Y)) /\ Y =? X /\ Y =? f(X) . No unifier. ========================================== unify in FOO : X =? f(Y) /\ Y =? f(f(X)) /\ X =? Y . No unifier. ========================================== unify in FOO2 : f(a, A) =? f(a, X) /\ f(a, Y) =? f(a, X) /\ f(a, g(A)) =? f(a, g(X)) /\ f(a, g(Y)) =? f(a, g(X)) . Unifier 1 A --> #1:Foo X --> #1:Foo Y --> #1:Foo ========================================== unify in FOO2 : f(a, Y) =? f(a, X) /\ f(a, g(A)) =? f(a, g(X)) /\ f(a, g(Y)) =? f(a, g(X)) . Unifier 1 Y --> #1:Foo X --> #1:Foo A --> #1:Foo ========================================== unify in FOO3 : f(a, X) =? f(a, g(X)) /\ f(a, X) =? f(a, g(g(X))) . No unifier. ========================================== unify in FOO3 : Y =? X /\ f(a, X) =? f(a, g(Y)) /\ f(a, X) =? f(a, g(g(Y))) . No unifier. ========================================== unify in FOO4 : f(a, Y) =? f(a, X) . Unifier 1 Y --> #1:Foo X --> #1:Foo ========================================== unify in FOO4 : f(X, a) =? f(X, a) . Unifier 1 X --> #1:Foo ========================================== unify in FOO4 : f(a, b) =? f(a, b) . Unifier 1 empty substitution ========================================== unify in FOO4 : f(X, Y) =? f(X, Y) . Unifier 1 X --> #1:Foo Y --> #2:Foo Bye. maude-3.1/tests/ResolvedBugs/polymorphicOverloadMay2019.expected0000644000175200017520000000242513473603366021730 00000000000000Warning: , line 20 (fmod M): parameterized module M has multiple polymorphic operators with name g. Warning: , line 20 (fmod M): this module contains one or more errors that could not be patched up and thus it cannot be used or imported. Warning: , line 44 (fmod TEST): unable to use module M due to unpatchable errors. Warning: , line 43 (fmod TEST): this module contains one or more errors that could not be patched up and thus it cannot be used or imported. Warning: , line 43 (fmod TEST): module TEST is unusable due to unpatchable errors. Warning: , line 56 (fmod M): parameterized module M has multiple polymorphic operators with name g. Warning: , line 56 (fmod M): this module contains one or more errors that could not be patched up and thus it cannot be used or imported. Warning: , line 72 (fmod TEST): unable to use module M due to unpatchable errors. Warning: , line 71 (fmod TEST): this module contains one or more errors that could not be patched up and thus it cannot be used or imported. Warning: , line 71 (fmod TEST): module TEST is unusable due to unpatchable errors. Bye. maude-3.1/tests/ResolvedBugs/metaIntImportJune20180000755000175200017520000000042013314767762017036 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaIntImportJune2018.maude -no-banner -no-advise \ > metaIntImportJune2018.out 2>&1 diff $srcdir/metaIntImportJune2018.expected metaIntImportJune2018.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/clearRulesJune2018.maude0000644000175200017520000000067513315041451017423 00000000000000set show timing off . set show advisories off . *** *** Check that object-message rewriting is correctly initialized after *** set clear rules off . *** mod TEST is including CONFIGURATION . op m : Oid Oid -> Msg [msg] . ops 1 2 : -> Oid . op User : -> Cid . var A : AttributeSet . vars X Y : Oid . rl < X : User | A > m(X, Y) => < X : User | A > m(Y, X) . endm set clear rules off . frew [1] < 1 : User | none > m(1, 2) . maude-3.1/tests/ResolvedBugs/physArgIndexOct2018.expected0000644000175200017520000000112613363760246020266 00000000000000========================================== srewrite in VENDING-MACHINE : $ $ $ using all . Solution 1 rewrites: 1 result Marking: $ $ c Solution 2 rewrites: 2 result Marking: $ $ q a No more solutions. rewrites: 2 ========================================== search in VENDING-MACHINE : $ $ $ =>! a a M:Marking . Solution 1 (state 8) states: 10 rewrites: 12 M:Marking --> q q c Solution 2 (state 9) states: 10 rewrites: 12 M:Marking --> q q q a No more solutions. states: 10 rewrites: 12 ========================================== rewrite in FOO : a a b . rewrites: 1 result Foo: a a c Bye. maude-3.1/tests/ResolvedBugs/closeSocketFeb2020.expected0000644000175200017520000000016613630645070020074 00000000000000========================================== erewrite in SERVER-SHUTDOWN : initial . rewrites: 4 result Portal: <> Bye. maude-3.1/tests/ResolvedBugs/polymorphicOverloadMay20190000755000175200017520000000044413473577631020137 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/polymorphicOverloadMay2019.maude -no-banner -no-advise \ > polymorphicOverloadMay2019.out 2>&1 diff $srcdir/polymorphicOverloadMay2019.expected polymorphicOverloadMay2019.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/viewRecursionMay2019.maude0000644000175200017520000000022113473601036020005 00000000000000set show timing off . set show advisories off . *** Infinite recursion view NatSet from TRIV to SET{NatSet} is sort Elt to Set{NatSet} . endv maude-3.1/tests/ResolvedBugs/parameterTheoryMay20190000755000175200017520000000042413473576612017245 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/parameterTheoryMay2019.maude -no-banner -no-advise \ > parameterTheoryMay2019.out 2>&1 diff $srcdir/parameterTheoryMay2019.expected parameterTheoryMay2019.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/showModuleJune20180000755000175200017520000000040413314563524016360 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/showModuleJune2018.maude -no-banner -no-advise \ > showModuleJune2018.out 2>&1 diff $srcdir/showModuleJune2018.expected showModuleJune2018.out > /dev/null 2>&1 maude-3.1/tests/ResolvedBugs/objectMessageOct2018.expected0000644000175200017520000000077013357260657020444 00000000000000========================================== frewrite in FOO : no-op(me, other) < me : User | none > . break on symbol: __ *********** rule rl no-op(X, Y) < X : User | AS > => < X : User | AS > . X --> me Y --> other AS --> (none).AttributeSet Old: no-op(me, other) < me : User | none > no-op(me, other) < me : User | none > ---> < me : User | none > New: < me : User | none > rewrites: 1 result Object: < me : User | none > rl no-op(X, Y) < X : User | AS > => < X : User | AS > . rewrites: 1 (100%) Bye. maude-3.1/tests/ResolvedBugs/metaIntImportJune2018.maude0000644000175200017520000000234113333172352020113 00000000000000set show timing off . set show advisories off . *** *** Check that the meta-interpreter gets imports from itself and not the object level interpreter. *** fmod FOO is sort Foo . ops a b : -> Foo . eq a = b . endfm load metaInterpreter mod TEST is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op state:_ : Nat -> Attribute . vars X Y Z : Oid . rl < X : User | state: 0 > createdInterpreter(X, Y, Z) => < X : User | state: 1 > insertModule(Z, X, foo) . rl < X : User | state: 1 > insertedModule(X, Y) => < X : User | state: 2 > insertModule(Y, X, upModule('META-LEVEL, true)) . rl < X : User | state: 2 > insertedModule(X, Y) => < X : User | state: 3 > reduceTerm(Y, X, 'META-LEVEL, 'metaReduce[upTerm(bar) , upTerm('a.Foo)]) . op foo : -> Module . eq foo = ( fmod 'FOO is nil sorts 'Foo . none op 'a : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . none eq 'a.Foo = 'c.Foo [none] . endfm ) . op bar : -> Module . eq bar = ( fmod 'BAR is protecting 'FOO . sorts none . none none none none endfm ) . endm *** expecting ''c.Foo.Constant but get ''b.Foo.Constant erew <> < me : User | state: 0 > createInterpreter(interpreterManager, me, none) . maude-3.1/tests/ResolvedBugs/parameterTheoryMay2019.expected0000644000175200017520000000045513473603232021033 00000000000000fmod BAR{Q :: TRIV} is sort Q$Elt . op a : -> Q$Elt . endfm fmod BAR{Q :: T} is sort Q$Elt . op 0 : -> Q$Elt . op a : -> Q$Elt . eq a = 0 . endfm fmod BAR{Q :: T} is sort Q$Elt . op f : Universal -> Q$Elt [poly (1)] . op a : -> Q$Elt . op b : -> Q$Elt . eq f(a) = b . endfm Bye. maude-3.1/tests/ResolvedBugs/clearRulesJune2018.expected0000644000175200017520000000024313315317757020137 00000000000000========================================== frewrite [1] in TEST : m(1, 2) < 1 : User | none > . rewrites: 1 result Configuration: m(2, 1) < 1 : User | none > Bye. maude-3.1/tests/ResolvedBugs/instantiationJuly2019.expected0000644000175200017520000000013713520423676020743 00000000000000========================================== reduce in TEST : b . rewrites: 0 result Baz: b Bye. maude-3.1/tests/ResolvedBugs/Makefile.in0000644000175200017520000011201613741175703015221 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = tests/ResolvedBugs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_have_poll.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/mkinstalldirs \ $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ BUDDY_LIB = @BUDDY_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CVC4_LIB = @CVC4_LIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FLEX = @FLEX@ GCC_LIBS = @GCC_LIBS@ GMP_LIBS = @GMP_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSIGSEGV_LIB = @LIBSIGSEGV_LIB@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TECLA_LIBS = @TECLA_LIBS@ VERSION = @VERSION@ YICES2_LIB = @YICES2_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ TESTS = \ CUIbug12-22-09 \ unificationMar2013 \ parserJune2018 \ staleViewJune2018 \ showModuleJune2018 \ clearRulesJune2018 \ metaIntRewriteJune2018 \ metaModuleCacheJune2018 \ metaIntImportJune2018 \ metaIntAscentJune2018 \ objectMessageOct2018 \ metaIntMatchOct2018 \ physArgIndexOct2018 \ metaApplyNov2018 \ moduleSumMay2019 \ parameterTheoryMay2019 \ parameterTheoryCopyMay2019 \ polymorphicOverloadMay2019 \ viewRecursionMay2019 \ instantiationJuly2019 \ ascentFunctionsJanuary2020 \ closeSocketFeb2020 \ metaParseStrategyApril2020 \ complexParserSyncApril2020 \ identityUnificationMay2020 \ sortCollapseMay2020 \ ACU_MissingUnifiersMay2020 \ variantUnifyJune2020 \ identityUnificationSeptember2020 \ CUI_OccursCheckSeptember2020 MAUDE_FILES = \ CUIbug12-22-09.maude \ unificationMar2013.maude \ parserJune2018.maude \ staleViewJune2018.maude \ showModuleJune2018.maude \ clearRulesJune2018.maude \ metaIntRewriteJune2018.maude \ metaModuleCacheJune2018.maude \ metaIntImportJune2018.maude \ metaIntAscentJune2018.maude \ objectMessageOct2018.maude \ metaIntMatchOct2018.maude \ physArgIndexOct2018.maude \ metaApplyNov2018.maude \ moduleSumMay2019.maude \ parameterTheoryMay2019.maude \ parameterTheoryCopyMay2019.maude \ polymorphicOverloadMay2019.maude \ viewRecursionMay2019.maude \ instantiationJuly2019.maude \ ascentFunctionsJanuary2020.maude \ closeSocketFeb2020.maude \ metaParseStrategyApril2020.maude \ complexParserSyncApril2020.maude \ identityUnificationMay2020.maude \ sortCollapseMay2020.maude \ ACU_MissingUnifiersMay2020.maude \ variantUnifyJune2020.maude \ identityUnificationSeptember2020.maude \ CUI_OccursCheckSeptember2020.maude RESULT_FILES = \ CUIbug12-22-09.expected \ unificationMar2013.expected \ parserJune2018.expected \ staleViewJune2018.expected \ showModuleJune2018.expected \ clearRulesJune2018.expected \ metaIntRewriteJune2018.expected \ metaModuleCacheJune2018.expected \ metaIntImportJune2018.expected \ metaIntAscentJune2018.expected \ objectMessageOct2018.expected \ metaIntMatchOct2018.expected \ physArgIndexOct2018.expected \ metaApplyNov2018.expected \ moduleSumMay2019.expected \ parameterTheoryMay2019.expected \ parameterTheoryCopyMay2019.expected \ polymorphicOverloadMay2019.expected \ viewRecursionMay2019.expected \ instantiationJuly2019.expected \ ascentFunctionsJanuary2020.expected \ closeSocketFeb2020.expected \ metaParseStrategyApril2020.expected \ complexParserSyncApril2020.expected \ identityUnificationMay2020.expected \ sortCollapseMay2020.expected \ ACU_MissingUnifiersMay2020.expected \ variantUnifyJune2020.expected \ identityUnificationSeptember2020.expected \ CUI_OccursCheckSeptember2020.expected EXTRA_DIST = $(TESTS) $(MAUDE_FILES) $(RESULT_FILES) all: all-am .SUFFIXES: .SUFFIXES: .log .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/ResolvedBugs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/ResolvedBugs/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? CUIbug12-22-09.log: CUIbug12-22-09 @p='CUIbug12-22-09'; \ b='CUIbug12-22-09'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) unificationMar2013.log: unificationMar2013 @p='unificationMar2013'; \ b='unificationMar2013'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) parserJune2018.log: parserJune2018 @p='parserJune2018'; \ b='parserJune2018'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) staleViewJune2018.log: staleViewJune2018 @p='staleViewJune2018'; \ b='staleViewJune2018'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) showModuleJune2018.log: showModuleJune2018 @p='showModuleJune2018'; \ b='showModuleJune2018'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) clearRulesJune2018.log: clearRulesJune2018 @p='clearRulesJune2018'; \ b='clearRulesJune2018'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaIntRewriteJune2018.log: metaIntRewriteJune2018 @p='metaIntRewriteJune2018'; \ b='metaIntRewriteJune2018'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaModuleCacheJune2018.log: metaModuleCacheJune2018 @p='metaModuleCacheJune2018'; \ b='metaModuleCacheJune2018'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaIntImportJune2018.log: metaIntImportJune2018 @p='metaIntImportJune2018'; \ b='metaIntImportJune2018'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaIntAscentJune2018.log: metaIntAscentJune2018 @p='metaIntAscentJune2018'; \ b='metaIntAscentJune2018'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) objectMessageOct2018.log: objectMessageOct2018 @p='objectMessageOct2018'; \ b='objectMessageOct2018'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaIntMatchOct2018.log: metaIntMatchOct2018 @p='metaIntMatchOct2018'; \ b='metaIntMatchOct2018'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) physArgIndexOct2018.log: physArgIndexOct2018 @p='physArgIndexOct2018'; \ b='physArgIndexOct2018'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaApplyNov2018.log: metaApplyNov2018 @p='metaApplyNov2018'; \ b='metaApplyNov2018'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) moduleSumMay2019.log: moduleSumMay2019 @p='moduleSumMay2019'; \ b='moduleSumMay2019'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) parameterTheoryMay2019.log: parameterTheoryMay2019 @p='parameterTheoryMay2019'; \ b='parameterTheoryMay2019'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) parameterTheoryCopyMay2019.log: parameterTheoryCopyMay2019 @p='parameterTheoryCopyMay2019'; \ b='parameterTheoryCopyMay2019'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) polymorphicOverloadMay2019.log: polymorphicOverloadMay2019 @p='polymorphicOverloadMay2019'; \ b='polymorphicOverloadMay2019'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) viewRecursionMay2019.log: viewRecursionMay2019 @p='viewRecursionMay2019'; \ b='viewRecursionMay2019'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) instantiationJuly2019.log: instantiationJuly2019 @p='instantiationJuly2019'; \ b='instantiationJuly2019'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ascentFunctionsJanuary2020.log: ascentFunctionsJanuary2020 @p='ascentFunctionsJanuary2020'; \ b='ascentFunctionsJanuary2020'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) closeSocketFeb2020.log: closeSocketFeb2020 @p='closeSocketFeb2020'; \ b='closeSocketFeb2020'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaParseStrategyApril2020.log: metaParseStrategyApril2020 @p='metaParseStrategyApril2020'; \ b='metaParseStrategyApril2020'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) complexParserSyncApril2020.log: complexParserSyncApril2020 @p='complexParserSyncApril2020'; \ b='complexParserSyncApril2020'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) identityUnificationMay2020.log: identityUnificationMay2020 @p='identityUnificationMay2020'; \ b='identityUnificationMay2020'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) sortCollapseMay2020.log: sortCollapseMay2020 @p='sortCollapseMay2020'; \ b='sortCollapseMay2020'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ACU_MissingUnifiersMay2020.log: ACU_MissingUnifiersMay2020 @p='ACU_MissingUnifiersMay2020'; \ b='ACU_MissingUnifiersMay2020'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) variantUnifyJune2020.log: variantUnifyJune2020 @p='variantUnifyJune2020'; \ b='variantUnifyJune2020'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) identityUnificationSeptember2020.log: identityUnificationSeptember2020 @p='identityUnificationSeptember2020'; \ b='identityUnificationSeptember2020'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) CUI_OccursCheckSeptember2020.log: CUI_OccursCheckSeptember2020 @p='CUI_OccursCheckSeptember2020'; \ b='CUI_OccursCheckSeptember2020'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: all all-am check check-TESTS check-am clean clean-generic \ cscopelist-am ctags-am distclean distclean-generic distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am recheck tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: maude-3.1/tests/StrategyLanguage/0000755000175200017520000000000013741222371014067 500000000000000maude-3.1/tests/StrategyLanguage/Makefile.am0000644000175200017520000000050213565216260016044 00000000000000TESTS = \ metalevel \ modules \ srewrite \ parameterization MAUDE_FILES = \ metalevel.maude \ modules.maude \ srewrite.maude \ parameterization.maude RESULT_FILES = \ metalevel.expected \ modules.expected \ srewrite.expected \ parameterization.expected EXTRA_DIST = $(TESTS) $(MAUDE_FILES) $(RESULT_FILES) maude-3.1/tests/StrategyLanguage/modules.expected0000644000175200017520000003020513642762145017212 00000000000000smod BAR is sorts Bool Zero NzNat Nat String Char FindResult Qid . subsorts Zero NzNat < Nat . subsort Char < String . subsort Nat < FindResult . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op 0 : -> Zero [ctor] . op s_ : Nat -> NzNat [ctor iter prec 15 gather (E) special ( id-hook SuccSymbol term-hook zeroTerm (0))] . op _+_ : NzNat Nat -> NzNat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _+_ : Nat Nat -> Nat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat))] . op sd : Nat Nat -> Nat [comm special ( id-hook CUI_NumberOpSymbol (sd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : NzNat NzNat -> NzNat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : Nat Nat -> Nat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _quo_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _rem_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _^_ : Nat Nat -> Nat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _^_ : NzNat Nat -> NzNat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat))] . op modExp : [FindResult] [FindResult] [FindResult] -> [FindResult] [special ( id-hook NumberOpSymbol (modExp) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op lcm : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat))] . op lcm : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat))] . op min : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat))] . op min : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat))] . op max : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat))] . op max : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _xor_ : Nat Nat -> Nat [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _&_ : Nat Nat -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _|_ : NzNat Nat -> NzNat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _|_ : Nat Nat -> Nat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _>>_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _<<_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _<_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzNat Nat -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op : -> Char [special ( id-hook StringSymbol)] . op : -> String [special ( id-hook StringSymbol)] . op notFound : -> FindResult [ctor] . op ascii : Char -> Nat [special ( id-hook StringOpSymbol (ascii) op-hook stringSymbol ( : ~> Char) op-hook succSymbol (s_ : Nat ~> NzNat))] . op char : [FindResult] -> [String] [special ( id-hook StringOpSymbol (char) op-hook stringSymbol ( : ~> Char) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _+_ : String String -> String [prec 33 gather (E e) special ( id-hook StringOpSymbol (+) op-hook stringSymbol ( : ~> Char))] . op length : String -> Nat [special ( id-hook StringOpSymbol (length) op-hook stringSymbol ( : ~> Char) op-hook succSymbol (s_ : Nat ~> NzNat))] . op substr : String Nat Nat -> String [special ( id-hook StringOpSymbol (substr) op-hook stringSymbol ( : ~> Char) op-hook succSymbol (s_ : Nat ~> NzNat))] . op find : String String Nat -> FindResult [special ( id-hook StringOpSymbol (find) op-hook stringSymbol ( : ~> Char) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook notFoundTerm (notFound))] . op rfind : String String Nat -> FindResult [special ( id-hook StringOpSymbol (rfind) op-hook stringSymbol ( : ~> Char) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook notFoundTerm (notFound))] . op _<_ : String String -> Bool [prec 37 gather (E E) special ( id-hook StringOpSymbol (<) op-hook stringSymbol ( : ~> Char) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : String String -> Bool [prec 37 gather (E E) special ( id-hook StringOpSymbol (<=) op-hook stringSymbol ( : ~> Char) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : String String -> Bool [prec 37 gather (E E) special ( id-hook StringOpSymbol (>) op-hook stringSymbol ( : ~> Char) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : String String -> Bool [prec 37 gather (E E) special ( id-hook StringOpSymbol (>=) op-hook stringSymbol ( : ~> Char) term-hook trueTerm (true) term-hook falseTerm (false))] . op upperCase : String -> String [special ( id-hook StringOpSymbol (upperCase) op-hook stringSymbol ( : ~> Char))] . op lowerCase : String -> String [special ( id-hook StringOpSymbol (lowerCase) op-hook stringSymbol ( : ~> Char))] . op : -> Qid [special ( id-hook QuotedIdentifierSymbol)] . op string : Qid -> String [special ( id-hook QuotedIdentifierOpSymbol (string) op-hook quotedIdentifierSymbol ( : ~> Qid) op-hook stringSymbol ( : ~> Char))] . op qid : [String] -> [Qid] [special ( id-hook QuotedIdentifierOpSymbol (qid) op-hook quotedIdentifierSymbol ( : ~> Qid) op-hook stringSymbol ( : ~> Char))] . eq true and A:Bool = A:Bool . eq false and A:Bool = false . eq A:Bool and A:Bool = A:Bool . eq false xor A:Bool = A:Bool . eq A:Bool xor A:Bool = false . eq A:Bool and (B:Bool xor C:Bool) = A:Bool and B:Bool xor A:Bool and C:Bool . eq not A:Bool = true xor A:Bool . eq A:Bool or B:Bool = A:Bool and B:Bool xor A:Bool xor B:Bool . eq A:Bool implies B:Bool = not (A:Bool xor A:Bool and B:Bool) . rl X:Qid => qid("h" + string(X:Qid)) [label rh] . strat puths : Nat @ Qid . sd puths(0) := idle . sd puths(s N:Nat) := rh ; puths(N:Nat) . endsm ========================================== srewrite in BAR : 'a using puths(8) . Solution 1 rewrites: 32 result Qid: 'hhhhhhhha No more solutions. rewrites: 32 ========================================== reduce in PROMOTED : 'a 'b 'c . rewrites: 0 result NeList{STriv}{Foo}: 'a 'b 'c ========================================== srewrite in CALLS : 'c using cond . *********** trial #1 csd cond := rh[X <- X] if X, S := 'a, 'b, 'c . X --> (unbound) S --> (unbound) *********** solving condition fragment X, S := 'a, 'b, 'c *********** success for condition fragment X, S := 'a, 'b, 'c X --> 'a S --> 'b, 'c *********** success #1 *********** strategy call csd cond := rh[X <- X] if X, S := 'a, 'b, 'c . subject --> 'c X --> 'a S --> 'b, 'c *********** re-solving condition fragment X, S := 'a, 'b, 'c *********** success for condition fragment X, S := 'a, 'b, 'c X --> 'b S --> 'a, 'c *********** success #1 *********** strategy call csd cond := rh[X <- X] if X, S := 'a, 'b, 'c . subject --> 'c X --> 'b S --> 'a, 'c *********** re-solving condition fragment X, S := 'a, 'b, 'c *********** success for condition fragment X, S := 'a, 'b, 'c X --> 'c S --> 'a, 'b *********** success #1 *********** strategy call csd cond := rh[X <- X] if X, S := 'a, 'b, 'c . subject --> 'c X --> 'c S --> 'a, 'b *********** re-solving condition fragment X, S := 'a, 'b, 'c *********** failure for condition fragment X, S := 'a, 'b, 'c *********** failure #1 Solution 1 rewrites: 4 result Qid: 'hc No more solutions. rewrites: 4 ========================================== srewrite in CALLS : 'b using defs . *********** strategy call sd defs := fail . subject --> 'b empty substitution *********** strategy call sd defs := rh . subject --> 'b empty substitution *********** strategy call sd defs := idle . subject --> 'b empty substitution Solution 1 rewrites: 4 result Qid: 'hb Solution 2 rewrites: 4 result Qid: 'b No more solutions. rewrites: 4 ========================================== srewrite in CALLS : 'a using args('a, 'z) . *********** strategy call sd args(X, S) := rh[X <- X] . call term --> args('a, 'z) subject --> 'a X --> 'a S --> 'z *********** strategy call sd args(X, S) := rh[X <- X] . call term --> args('a, 'z) subject --> 'a X --> 'z S --> 'a Solution 1 rewrites: 4 result Qid: 'ha No more solutions. rewrites: 4 Warning: , line 101 (smod BAD): variable Q is used before it is bound in strategy definition: csd st := idle if Q = 'a . Warning: , line 102 (smod BAD): unbound variable Q in application strategy substitution for Q. Warning: , line 103 (smod BAD): variable Q is used before it is bound in condition of test strategy. Warning: , line 104 (smod BAD): unbound variable Q in strategy call argument. ========================================== srewrite in ALLINSMOD : a using next . Solution 1 rewrites: 2 result Letter: b No more solutions. rewrites: 2 ========================================== srewrite in ALLINSMOD : a using next() . Solution 1 rewrites: 4 result Letter: c No more solutions. rewrites: 4 Bye. maude-3.1/tests/StrategyLanguage/modules.maude0000644000175200017520000000403713565216260016504 00000000000000set show timing off . set show advisories off . *** *** Strategy modules, theories and views *** sth STRIV is including TRIV . strat stt @ Elt . endsth mod FOO is protecting QID . var X : Qid . rl [rh] : X => qid("h" + string(X)) . endm view Foo from STRIV to FOO is sort Elt to Qid . strat stt to expr rh . endv smod REPEAT{X :: STRIV} is protecting NAT . var N : Nat . strat repeat : Nat @ X$Elt . sd repeat(0) := idle . sd repeat(s(N)) := stt ; repeat(N) . endsm smod BAR is protecting REPEAT{Foo} * (strat repeat to puths) . endsm show all . srew 'a using puths(8) . view STriv from TRIV to STRIV is endv smod PROMOTED is protecting LIST{STriv}{Foo} . endsm red 'a 'b 'c . *** *** Strategy calls and traces *** smod CALLS is protecting FOO . protecting SET{Qid} . strat cond @ Qid . *** different matches from the assignement condition strat defs @ Qid . *** different matches from different definitions strat args : Set{Qid} @ Qid . *** different matches from the argument var X : Qid . var S : Set{Qid} . csd cond := rh[X <- X] if X, S := 'a, 'b, 'c . sd defs := fail . sd defs := rh . sd defs := idle . sd args((X, S)) := rh[X <- X] . endsm set trace eq off . set trace rl off . set trace whole on . set trace on . srew 'c using cond . srew 'b using defs . srew 'a using args(('a, 'z)) . set trace sd off . set trace off . *** *** Detection of some bad strategy terms *** smod BAD is protecting FOO . var Q R : Qid . strat st @ Qid . strat st : Qid @ Qid . csd st := idle if Q = 'a . sd st := rh[Q <- Q] . sd st := match R s.t. Q == R . sd st := st(Q) . endsm *** *** Strategy modules containing rules and equations *** smod ALLINSMOD is sorts Letter Vowel . subsort Vowel < Letter . ops b c d : -> Letter . ops a e i o u : -> Vowel . op next : Letter -> Letter . eq next(a) = b . eq next(b) = c . var L : Letter . rl [next] : L => next(L) . strat next @ Letter . sd next() := next ; next . endsm srew a using next . srew a using next() . maude-3.1/tests/StrategyLanguage/srewrite0000755000175200017520000000033413324347300015576 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/srewrite.maude -no-banner -no-advise \ > srewrite.out 2>&1 diff $srcdir/srewrite.expected srewrite.out > /dev/null 2>&1 maude-3.1/tests/StrategyLanguage/metalevel0000755000175200017520000000034013324347300015705 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metalevel.maude -no-banner -no-advise \ > metalevel.out 2>&1 diff $srcdir/metalevel.expected metalevel.out > /dev/null 2>&1 maude-3.1/tests/StrategyLanguage/metalevel.expected0000644000175200017520000001663313565216260017525 00000000000000========================================== reduce in META-LEVEL : upModule('SFOO, false) . rewrites: 1 result StratModule: smod 'SFOO is including 'BOOL . protecting 'FOO . sorts none . none none none none none strat 'ac : nil @ 'Foo [none] . sd 'ac[[empty]] := 'ab[none]{empty} ; 'bc[none]{empty} [none] . endsm ========================================== reduce in META-LEVEL : upModule('SFOO, true) . rewrites: 1 result StratModule: smod 'SFOO is nil sorts 'Bool ; 'Foo . none op '_=/=_ : 'Universal 'Universal -> 'Bool [prec(51) poly(1 2) special( id-hook('EqualitySymbol, nil) term-hook('equalTerm, 'false.Bool) term-hook('notEqualTerm, 'true.Bool))] . op '_==_ : 'Universal 'Universal -> 'Bool [prec(51) poly(1 2) special( id-hook('EqualitySymbol, nil) term-hook('equalTerm, 'true.Bool) term-hook('notEqualTerm, 'false.Bool))] . op '_and_ : 'Bool 'Bool -> 'Bool [assoc comm prec(55)] . op '_implies_ : 'Bool 'Bool -> 'Bool [prec(61) gather('e 'E)] . op '_or_ : 'Bool 'Bool -> 'Bool [assoc comm prec(59)] . op '_xor_ : 'Bool 'Bool -> 'Bool [assoc comm prec(57)] . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'false : nil -> 'Bool [ctor special( id-hook('SystemFalse, nil))] . op 'if_then_else_fi : 'Bool 'Universal 'Universal -> 'Universal [poly(2 3 0) special( id-hook('BranchSymbol, nil) term-hook('1, 'true.Bool) term-hook('2, 'false.Bool))] . op 'not_ : 'Bool -> 'Bool [prec(53)] . op 'true : nil -> 'Bool [ctor special( id-hook('SystemTrue, nil))] . none eq '_and_['A:Bool,'A:Bool] = 'A:Bool [none] . eq '_and_['A:Bool,'_xor_['B:Bool,'C:Bool]] = '_xor_['_and_['A:Bool,'B:Bool], '_and_['A:Bool,'C:Bool]] [none] . eq '_and_['false.Bool,'A:Bool] = 'false.Bool [none] . eq '_and_['true.Bool,'A:Bool] = 'A:Bool [none] . eq '_implies_['A:Bool,'B:Bool] = 'not_['_xor_['A:Bool,'_and_['A:Bool, 'B:Bool]]] [none] . eq '_or_['A:Bool,'B:Bool] = '_xor_['_and_['A:Bool,'B:Bool],'_xor_['A:Bool, 'B:Bool]] [none] . eq '_xor_['A:Bool,'A:Bool] = 'false.Bool [none] . eq '_xor_['false.Bool,'A:Bool] = 'A:Bool [none] . eq 'not_['A:Bool] = '_xor_['true.Bool,'A:Bool] [none] . rl 'a.Foo => 'b.Foo [label('ab)] . rl 'b.Foo => 'c.Foo [label('bc)] . strat 'ac : nil @ 'Foo [none] . sd 'ac[[empty]] := 'ab[none]{empty} ; 'bc[none]{empty} [none] . endsm ========================================== reduce in META-LEVEL : upModule('STRIV, false) . rewrites: 1 result StratTheory: sth 'STRIV is including 'BOOL . including 'TRIV . sorts none . none none none none none strat 'st : nil @ 'Elt [none] . none endsth ========================================== reduce in META-LEVEL : upStratDecls('STRIV, true) . rewrites: 1 result StratDecl: strat 'st : nil @ 'Elt [none] . ========================================== reduce in META-LEVEL : upSds('SFOO, false) . rewrites: 1 result StratDefinition: sd 'ac[[empty]] := 'ab[none]{empty} ; 'bc[none]{empty} [none] . ========================================== reduce in META-LEVEL : upView('SFoo) . rewrites: 1 result View: view 'SFoo from 'STRIV to 'SFOO is sort 'Elt to 'Foo . none strat 'st to 'ac . endv ========================================== reduce in META-LEVEL : upView('SFoo2) . rewrites: 1 result View: view 'SFoo2 from 'STRIV to 'FOO is sort 'Elt to 'Foo . none strat 'st[[empty]] to expr 'ab[none]{empty} . endv ========================================== reduce in META-LEVEL : metaSrewrite(upModule('SFOO, false), 'a.Foo, 'ac[[ empty]] | 'ab[none]{empty}, breadthFirst, 0) . rewrites: 2 result ResultPair: {'b.Foo,'Foo} ========================================== reduce in META-LEVEL : metaSrewrite(['SFOO], 'a.Foo, 'ac[[empty]] | 'ab[none]{ empty}, breadthFirst, 0) . rewrites: 2 result ResultPair: {'b.Foo,'Foo} ========================================== reduce in META-LEVEL : metaSrewrite(['SFOO], 'a.Foo, 'ac[[empty]] | 'ab[none]{ empty}, breadthFirst, 0) . rewrites: 2 result ResultPair: {'b.Foo,'Foo} ========================================== reduce in META-LEVEL : metaSrewrite(['SFOO], 'a.Foo, 'ac[[empty]] | 'ab[none]{ empty}, breadthFirst, 1) . rewrites: 2 result ResultPair: {'c.Foo,'Foo} ========================================== reduce in META-LEVEL : metaSrewrite(['SFOO], 'a.Foo, 'ac[[empty]] | 'ab[none]{ empty}, breadthFirst, 2) . rewrites: 2 result ResultPair?: (failure).ResultPair? ========================================== reduce in META-LEVEL : metaSrewrite(['SFOO], 'a.Foo, 'ac[[empty]] | 'ab[none]{ empty}, depthFirst, 1) . rewrites: 2 result ResultPair: {'b.Foo,'Foo} ========================================== reduce in META-LEVEL : metaSrewrite(['SFOO], 'a.Foo, 'ac[[empty]] | 'ab[none]{ empty}, depthFirst, 0) . rewrites: 2 result ResultPair: {'c.Foo,'Foo} ========================================== reduce in META-LEVEL : metaSrewrite(mod 'INC is protecting 'NAT . sorts none . none none none none rl 'N:Nat => 's_['N:Nat] [label('inc)] . endm, '0.Nat, ('inc[none]{empty}) *, breadthFirst, 8) . rewrites: 1 result ResultPair: {'s_^8['0.Zero],'NzNat} ========================================== reduce in META-LEVEL : metaSrewrite(['SFOO], 'a.Foo, 'bad-rule[none]{empty}, depthFirst, 0) . rewrites: 2 result ResultPair?: (failure).ResultPair? ========================================== reduce in META-LEVEL : metaSrewrite(['SFOO], 'a.Foo, 'bad-strat[[empty]], depthFirst, 0) . rewrites: 1 result [ResultPair?]: metaSrewrite(sth 'SFOO is including 'SFOO . sorts none . none none none none none none none endsth, 'a.Foo, 'bad-strat[[empty]], depthFirst, 0) ========================================== reduce in META-LEVEL : metaParseStrategy(['SFOO], none, 'ac '| 'ab) . rewrites: 2 result Strategy: 'ac[[empty]] | 'ab[none]{empty} ========================================== reduce in META-LEVEL : metaParseStrategy(['NAT], 'M:Nat ; 'N:Nat, 'match 'N 's.t. 'M ':= '5 '/\ 'N '> 'M) . rewrites: 2 result Strategy: match 'N:Nat s.t. ('M:Nat := 's_^5['0.Zero] /\ '_>_['N:Nat, 'M:Nat] = 'true.Bool) ========================================== reduce in META-LEVEL : metaParseStrategy(['SFOO], 'N:Nat, 'idle) . rewrites: 1 result [StrategyList,Strategy?]: metaParseStrategy(sth 'SFOO is including 'SFOO . sorts none . none none none none none none none endsth, 'N:Nat, 'idle) ========================================== reduce in META-LEVEL : metaParseStrategy(['SFOO], none, 'ab ';) . rewrites: 2 result Strategy?: noStratParse(2) ========================================== reduce in META-LEVEL : metaPrettyPrintStrategy(['SFOO], none, 'ac[[empty]] ; 'ab[none]{empty}, none) . rewrites: 2 result NeTypeList: 'ac '; 'ab ========================================== reduce in META-LEVEL : metaPrettyPrintStrategy(['NAT], 'N:Nat, match 'N:Nat s.t. ('M:Nat := 's_^5['0.Zero] /\ '_>_['N:Nat,'M:Nat] = 'true.Bool), number) . rewrites: 2 result NeQidList: 'match 'N 's.t. 'M:Nat ':= '5 '/\ '_>_ '`( 'N '`, 'M:Nat '`) '= 'true ========================================== reduce in META-LEVEL : metaPrettyPrintStrategy(smod 'CONFLICT is protecting 'NAT . sorts none . none none none none rl 'N:Nat => '0.Zero [label('cancel)] . strat 'cancel : nil @ 'Nat [none] . sd 'cancel[[empty]] := match '0.Zero s.t. nil or-else 'cancel[none]{empty} [ none] . endsm, none, 'cancel[[empty]] | 'cancel[none]{empty}, none) . rewrites: 1 result NeTypeList: 'cancel '`( '`) '| 'cancel Bye. maude-3.1/tests/StrategyLanguage/srewrite.expected0000644000175200017520000001162213565216260017404 00000000000000========================================== srewrite in STRATEGIES : < 'a, 'b | 'c, 'd, 'e > using matchrew < S1 | S2 > by S1 using rh, S2 using concat ! . Solution 1 rewrites: 93 result Pair: < 'b, 'ha | 'cde > Solution 2 rewrites: 98 result Pair: < 'a, 'hb | 'cde > Solution 3 rewrites: 98 result Pair: < 'b, 'ha | 'ecd > Solution 4 rewrites: 98 result Pair: < 'b, 'ha | 'ced > Solution 5 rewrites: 98 result Pair: < 'a, 'hb | 'ecd > Solution 6 rewrites: 98 result Pair: < 'a, 'hb | 'ced > Solution 7 rewrites: 98 result Pair: < 'b, 'ha | 'dce > Solution 8 rewrites: 98 result Pair: < 'a, 'hb | 'dce > Solution 9 rewrites: 98 result Pair: < 'b, 'ha | 'edc > Solution 10 rewrites: 98 result Pair: < 'a, 'hb | 'edc > Solution 11 rewrites: 98 result Pair: < 'b, 'ha | 'dec > Solution 12 rewrites: 98 result Pair: < 'a, 'hb | 'dec > No more solutions. rewrites: 98 ========================================== srewrite in STRATEGIES : < 'a, 'b | 'a, 'd > using matchrew < S1 | S2 > by S1 using one(concat), S2 using filter(S1) . Solution 1 rewrites: 9 result Pair: < 'ab | 'd > No more solutions. rewrites: 9 ========================================== srewrite [2] in STRATEGIES : < 'a | 'c > using matchrew < S1 | S2 > by S1 using rh *, S2 using rh * . Solution 1 rewrites: 8 result Pair: < 'a | 'c > Solution 2 rewrites: 16 result Pair: < 'ha | 'c > Solution 3 rewrites: 0 result Pair: < 'a | 'hc > ========================================== srewrite in 15PUZZLE : 1 b 2 using idle . Solution 1 rewrites: 0 result Row: 1 b 2 No more solutions. rewrites: 0 ========================================== srewrite in 15PUZZLE : 1 b 2 using fail . No solution. rewrites: 0 ========================================== srewrite in 15PUZZLE : 1 b 2 ; 3 b 4 using right . Solution 1 rewrites: 1 result Puzzle: 1 2 b ; 3 b 4 Solution 2 rewrites: 2 result Puzzle: 1 b 2 ; 3 4 b No more solutions. rewrites: 2 ========================================== srewrite in 15PUZZLE : 1 b 2 ; 3 b 4 using left[T <- 1] . Solution 1 rewrites: 1 result Puzzle: b 1 2 ; 3 b 4 No more solutions. rewrites: 1 ========================================== srewrite in 15PUZZLE-LOG : < nil | 1 b 2 > using move[M <- 'left]{left} . Solution 1 rewrites: 2 result PuzzleLog: < 'left | b 1 2 > No more solutions. rewrites: 2 ========================================== srewrite in 15PUZZLE-LOG : < nil | 1 b 2 > using all . Solution 1 rewrites: 1 result PuzzleLog: < nil | b 1 2 > Solution 2 rewrites: 2 result PuzzleLog: < nil | 1 2 b > No more solutions. rewrites: 2 ========================================== srewrite in 15PUZZLE-LOG : 1 b 2 using xmatch b N:Nat such that N:Nat =/= 1 = true . Solution 1 rewrites: 1 result Row: 1 b 2 No more solutions. rewrites: 1 ========================================== srewrite in 15PUZZLE-LOG : 1 2 ; 3 b using left ; up | up ; left . Solution 1 rewrites: 15 result Puzzle: b 2 ; 1 3 Solution 2 rewrites: 20 result Puzzle: b 1 ; 3 2 No more solutions. rewrites: 20 ========================================== srewrite in 15PUZZLE-LOG : 1 b 2 3 using right * . Solution 1 rewrites: 0 result Row: 1 b 2 3 Solution 2 rewrites: 1 result Row: 1 2 b 3 Solution 3 rewrites: 2 result Row: 1 2 3 b No more solutions. rewrites: 2 ========================================== srewrite in 15PUZZLE-LOG : 1 b 2 3 4 using right * ; (right ? fail : idle) . Solution 1 rewrites: 6 result Row: 1 2 3 4 b No more solutions. rewrites: 6 ========================================== srewrite in 15PUZZLE-LOG : 1 b 2 ; 3 b 4 using matchrew RU:Row ; RD:Row by RU:Row using left, RD:Row using right . Solution 1 rewrites: 2 result Puzzle: b 1 2 ; 3 4 b No more solutions. rewrites: 2 ========================================== srewrite in 15PUZZLE-LOG : 1 b 2 3 using one(right +) . Solution 1 rewrites: 1 result Row: 1 2 b 3 No more solutions. rewrites: 1 ========================================== srewrite [2] in 15PUZZLE-LOG : b 1 2 ; b 3 using right + . Solution 1 rewrites: 2 result Puzzle: 1 b 2 ; b 3 Solution 2 rewrites: 3 result Puzzle: b 1 2 ; 3 b ========================================== dsrewrite [2] in 15PUZZLE-LOG : b 1 2 ; b 3 using right + . Solution 1 rewrites: 1 result Puzzle: 1 b 2 ; b 3 Solution 2 rewrites: 2 result Puzzle: 1 2 b ; b 3 ========================================== srewrite in 15PUZZLE-LOG : 1 b using (left | right)* . Solution 1 rewrites: 0 result Row: 1 b Solution 2 rewrites: 1 result Row: b 1 No more solutions. rewrites: 2 ========================================== srewrite in 15PUZZLE-STRATS : 1 2 3 ; 4 5 6 ; 7 b 8 using move(1, -2) . Solution 1 rewrites: 52 result Puzzle: 1 2 b ; 4 5 3 ; 7 8 6 No more solutions. rewrites: 52 ========================================== srewrite in INSERTION-SORT-INT : 1 |-> 8 ; 2 |-> 3 ; 3 |-> 15 ; 4 |-> 5 ; 5 |-> 2 using insort(2) . Solution 1 rewrites: 116 result NatArray{Int<0}: 1 |-> 2 ; 2 |-> 3 ; 3 |-> 5 ; 4 |-> 8 ; 5 |-> 15 No more solutions. rewrites: 116 Bye. maude-3.1/tests/StrategyLanguage/srewrite.maude0000644000175200017520000001063013565216260016674 00000000000000set show timing off . set show advisories off . mod DATA is protecting SET{Qid} . sort Pair . op <_|_> : Set{Qid} Set{Qid} -> Pair [ctor] . vars Q Q1 Q2 : Qid . rl [concat] : Q1, Q2 => qid(string(Q1) + string(Q2)) . rl [rh] : Q => qid("h" + string(Q)) . rl [rm] : Q => empty . endm smod STRATEGIES is protecting DATA . var Q : Qid . var S S1 S2 : Set{Qid} . strat filter : Set{Qid} @ Set{Qid} . sd filter(S1) := match empty . sd filter(S1) := try(matchrew Q, S s.t. Q in S1 by Q using rm[Q <- Q], S using filter(S1)) . endsm srew < 'a, 'b | 'c, 'd, 'e > using matchrew < S1 | S2 > by S1 using rh , S2 using concat ! . srew < 'a, 'b | 'a, 'd > using matchrew < S1 | S2 > by S1 using one(concat) , S2 using filter(S1) . srew [2] < 'a | 'c > using matchrew < S1 | S2 > by S1 using rh * , S2 using rh * . continue 1 . *** *** Testing all the combinators *** fmod 15PUZZLE-BOARD is protecting NAT . sorts Tile Row Puzzle . subsorts Nat < Tile < Row < Puzzle . op b : -> Tile [ctor] . op nil : -> Row [ctor] . op __ : Row Row -> Row [ctor assoc id: nil prec 25] . op _;_ : Puzzle Puzzle -> Puzzle [ctor assoc] . var T : Tile . var R : Row . op size : Row -> Nat . eq size(nil) = 0 . eq size(T R) = size(R) + 1 . endfm mod 15PUZZLE is protecting 15PUZZLE-BOARD . var T : Tile . vars LU RU LD RD : Row . var P : Puzzle . rl [left] : T b => b T . rl [right] : b T => T b . crl [down] : (LU b RU) ; (LD T RD) => (LU T RU) ; (LD b RD) if size(LU) = size(LD) . crl [up] : (LU T RU) ; (LD b RD) => (LU b RU) ; (LD T RD) if size(LU) = size(LD) . endm srewrite 1 b 2 using idle . srewrite 1 b 2 using fail . srewrite 1 b 2 ; 3 b 4 using right . srewrite 1 b 2 ; 3 b 4 using left[T <- 1] . mod 15PUZZLE-LOG is protecting 15PUZZLE . protecting LIST{Qid} . sort PuzzleLog . op <_|_> : List{Qid} Puzzle -> PuzzleLog [ctor] . var M : Qid . var L : List{Qid} . vars P P' : Puzzle . crl [move] : < L | P > => < L M | P' > if P => P' [nonexec] . endm srewrite < nil | 1 b 2 > using move[M <- 'left]{left} . srewrite < nil | 1 b 2 > using all . srewrite 1 b 2 using xmatch b N:Nat s.t. N:Nat =/= 1 . srewrite 1 2 ; 3 b using left ; up | up ; left . srewrite 1 b 2 3 using right * . srewrite 1 b 2 3 4 using right * ; (right ? fail : idle) . srewrite 1 b 2 ; 3 b 4 using matchrew RU:Row ; RD:Row by RU:Row using left, RD:Row using right . srewrite 1 b 2 3 using one(right +) . srew [2] b 1 2 ; b 3 using right + . dsrew [2] b 1 2 ; b 3 using right + . srew 1 b using (left | right) * . smod 15PUZZLE-STRATS is protecting 15PUZZLE . protecting INT . strat loop @ Puzzle . strat move : Int Int @ Puzzle . var N : Nat . var M : Int . sd loop := left ; up ; right ; down . sd move(0, 0) := idle . sd move(s(N), M) := right ; move(N, M) . sd move(- s(N), M) := left ; move(- N, M) . sd move(0, s(N)) := down ; move(0, N) . sd move(0, - s(N)) := up ; move(0, - N) . endsm srewrite 1 2 3 ; 4 5 6 ; 7 b 8 using move(1, -2) . *** *** Testing more complex strategy definitions *** mod SWAPPING{X :: DEFAULT} is protecting ARRAY{Nat, X} . vars I J : Nat . vars V W : X$Elt . var AR : Array{Nat, X} . rl [swap] : J |-> V ; I |-> W => J |-> W ; I |-> V . op maxIndex : Array{Nat, X} ~> Nat . eq maxIndex(empty) = 0 . eq maxIndex(I |-> V ; AR) = if maxIndex(AR) < I then I else maxIndex(AR) fi . endm view DEFAULT+ from DEFAULT to STRICT-TOTAL-ORDER + DEFAULT is endv smod INSERTION-SORT{X :: STRICT-TOTAL-ORDER + DEFAULT} is protecting SWAPPING{DEFAULT+}{X} * ( sort Array{Nat, DEFAULT+}{X} to NatArray{X} ) . strat swap : Nat Nat @ NatArray{X} . strats insert insort : Nat @ NatArray{X} . vars X Y J I : Nat . vars V W : X$Elt . var AR : NatArray{X} . sd insort(Y) := try(match AR s.t. Y <= maxIndex(AR) ; insert(Y) ; insort(Y + 1)) . sd insert(1) := idle [label base-case] . csd insert(s(X)) := try(xmatch X |-> V ; s(X) |-> W s.t. W < V ; swap(X, s(X)) ; insert(X)) if X > 0 [label recursive-case] . sd swap(X, Y) := swap[J <- X, I <- Y] . endsm view Int<0 from STRICT-TOTAL-ORDER + DEFAULT to INT is sort Elt to Int . endv smod INSERTION-SORT-INT is protecting INSERTION-SORT{Int<0} . endsm srewrite 1 |-> 8 ; 2 |-> 3 ; 3 |-> 15 ; 4 |-> 5 ; 5 |-> 2 using insort(2) . maude-3.1/tests/StrategyLanguage/metalevel.maude0000644000175200017520000000547613565216260017022 00000000000000set show timing off . set show advisories off . *** *** Ascent functions *** mod FOO is sort Foo . ops a b c : -> Foo . rl [ab] : a => b . rl [bc] : b => c . endm smod SFOO is protecting FOO . strat ac @ Foo . sd ac := ab ; bc . endsm sth STRIV is including TRIV . strat st @ Elt . endsth red in META-LEVEL : upModule('SFOO, false) . red in META-LEVEL : upModule('SFOO, true) . red in META-LEVEL : upModule('STRIV, false) . red in META-LEVEL : upStratDecls('STRIV, true) . red in META-LEVEL : upSds('SFOO, false) . view SFoo from STRIV to SFOO is sort Elt to Foo . strat st to ac . endv view SFoo2 from STRIV to FOO is sort Elt to Foo . strat st to expr ab . endv red in META-LEVEL : upView('SFoo) . red in META-LEVEL : upView('SFoo2) . *** *** Strategic rewrite *** red in META-LEVEL : metaSrewrite(upModule('SFOO, false), 'a.Foo, 'ab[none]{empty} | 'ac[[empty]], breadthFirst, 0) . red in META-LEVEL : metaSrewrite(['SFOO], 'a.Foo, 'ab[none]{empty} | 'ac[[empty]], breadthFirst, 0) . red in META-LEVEL : metaSrewrite(['SFOO], 'a.Foo, 'ab[none]{empty} | 'ac[[empty]], breadthFirst, 0) . red in META-LEVEL : metaSrewrite(['SFOO], 'a.Foo, 'ab[none]{empty} | 'ac[[empty]], breadthFirst, 1) . red in META-LEVEL : metaSrewrite(['SFOO], 'a.Foo, 'ab[none]{empty} | 'ac[[empty]], breadthFirst, 2) . red in META-LEVEL : metaSrewrite(['SFOO], 'a.Foo, 'ab[none]{empty} | 'ac[[empty]], depthFirst, 1) . red in META-LEVEL : metaSrewrite(['SFOO], 'a.Foo, 'ab[none]{empty} | 'ac[[empty]], depthFirst, 0) . red in META-LEVEL : metaSrewrite( mod 'INC is protecting 'NAT . sorts none . none none none none rl 'N:Nat => 's_['N:Nat] [label('inc)] . endm, '0.Nat, ('inc[none]{empty}) *, breadthFirst, 8) . red in META-LEVEL : metaSrewrite(['SFOO], 'a.Foo, 'bad-rule[none]{empty}, depthFirst, 0) . red in META-LEVEL : metaSrewrite(['SFOO], 'a.Foo, 'bad-strat[[empty]], depthFirst, 0) . *** *** Parse and pretty-print *** red in META-LEVEL : metaParseStrategy(['SFOO], none, 'ac '| 'ab) . red in META-LEVEL : metaParseStrategy(['NAT], 'N:Nat ; 'M:Nat, 'match 'N 's.t. 'M ':= '5 '/\ 'N '> 'M) . red in META-LEVEL : metaParseStrategy(['SFOO], 'N:Nat, 'idle) . red in META-LEVEL : metaParseStrategy(['SFOO], none, 'ab ';) . red in META-LEVEL : metaPrettyPrintStrategy(['SFOO], none, 'ac[[empty]] ; 'ab[none]{empty}, none) . red in META-LEVEL : metaPrettyPrintStrategy(['NAT], 'N:Nat, match 'N:Nat s.t. ('M:Nat := 's_^5['0.Zero] /\ '_>_['N:Nat, 'M:Nat] = 'true.Bool), number) . red in META-LEVEL : metaPrettyPrintStrategy( smod 'CONFLICT is protecting 'NAT . sorts none . none none none none rl 'N:Nat => '0.Zero [label('cancel)] . strat 'cancel : nil @ 'Nat [none] . sd 'cancel[[empty]] := match '0.Zero s.t. nil or-else ('cancel[none]{empty}) [none] . endsm, none, 'cancel[[empty]] | 'cancel[none]{empty}, none) . maude-3.1/tests/StrategyLanguage/modules0000755000175200017520000000033013324347300015376 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/modules.maude -no-banner -no-advise \ > modules.out 2>&1 diff $srcdir/modules.expected modules.out > /dev/null 2>&1 maude-3.1/tests/StrategyLanguage/parameterization.maude0000644000175200017520000000617613565216260020420 00000000000000set show timing off . set show advisories off . sth BT-ELEMS is protecting BOOL . sort State . op isOk : State -> Bool . op isSolution : State -> Bool . strat expand @ State . endsth smod BT-STRAT{X :: BT-ELEMS} is var S : X$State . strat solve @ X$State . sd solve := (match S s.t. isSolution(S)) ? idle : (expand ; match S s.t. isOk(S) ; solve) . endsm mod QUEENS is protecting LIST{Nat} . protecting SET{Nat} . op isOk : List{Nat} -> Bool . op ok : List{Nat} Nat Nat -> Bool . op isSolution : List{Nat} -> Bool . vars N M Diff : Nat . var L : List{Nat} . var S : Set{Nat} . eq isOk(L N) = ok(L, N, 1) . eq ok(nil, M, Diff) = true . ceq ok(L N, M, Diff) = ok(L, M, Diff + 1) if N =/= M /\ N =/= M + Diff /\ M =/= N + Diff . eq isSolution(L) = size(L) == 8 . crl [next] : L => L N if N,S := 1, 2, 3, 4, 5, 6, 7, 8 . endm view QueensBT from BT-ELEMS to QUEENS is sort State to List{Nat} . strat expand to expr top(next) . endv smod QUEENS-BT is including BT-STRAT{QueensBT} . endsm dsrew [1] nil using solve . srew [1] nil using solve . continue 2 . fmod GRAPHS is pr NAT . sort Edge . op p : Nat Nat -> Edge [ctor comm] . sort Adjacency . subsort Edge < Adjacency . op nil : -> Adjacency [ctor] . op __ : Adjacency Adjacency -> Adjacency [ctor assoc comm id: nil] . var E : Edge . var As : Adjacency . var K L : Nat . eq E E = E . op neighbor : Nat Nat Adjacency -> Bool . eq neighbor(K, L, p(K, L) As) = true . eq neighbor(K, L, As) = false [owise] . endfm mod COLORING is pr GRAPHS . pr NAT-LIST . pr EXT-BOOL . sort Graph . op graph : Nat Nat Adjacency NatList -> Graph [ctor] . op numColors : Graph -> Nat . op alreadyColored : Graph -> Nat . eq numColors(graph(N, M, As, Cs)) = M . eq alreadyColored(graph(N, M, As, Cs)) = size(Cs) . var N M K K' C C' : Nat . var As : Adjacency . var Cs : NatList . op isSolution : Graph -> Bool . op isOk : Graph -> Bool . op admissibleColor : Nat Nat Graph -> Bool . op admissibleColor : Nat Nat Adjacency Nat NatList -> Bool . eq isSolution(graph(N, M, As, Cs)) = N == size(Cs) . eq isOk(G:Graph) = true . eq admissibleColor(C, K, graph(N, M, As, Cs)) = admissibleColor(C, K, As, 0, Cs) . eq admissibleColor(C, K, As, K', nil) = true . eq admissibleColor(C, K, As, K', C' Cs) = (C =/= C' or not neighbor(K, K', As)) and-then admissibleColor(C, K, As, s(K'), Cs) . rl [next] : graph(N, M, As, Cs) => graph(N, M, As, Cs C) [nonexec] . endm smod COLORING-STRAT is protecting COLORING . strat expand @ Graph . strat expand : Nat @ Graph . sd expand := expand(0) . var C : Nat . var G : Graph . sd expand(C) := match G s.t. admissibleColor(C, alreadyColored(G), G) ; next[C <- C] | match G s.t. s(C) < numColors(G) ; expand(s(C)) . endsm view ColoringBT from BT-ELEMS to COLORING-STRAT is sort State to Graph . strat expand to expand . endv smod COLORING-BT is including BT-STRAT{ColoringBT} . endsm srew [4] graph(10, 3, p(0, 1) p(0, 4) p(0, 5) p(1, 2) p(1, 6) p(2, 3) p(2, 7) p(3, 4) p(3, 8) p(4, 9) p(5, 7) p(5, 8) p(6, 8) p(6, 9) p(7, 9), nil) using solve . maude-3.1/tests/StrategyLanguage/parameterization.expected0000644000175200017520000000272313565216260021120 00000000000000========================================== dsrewrite [1] in QUEENS-BT : nil using solve . Solution 1 rewrites: 15602 result NeList{Nat}: 1 5 8 6 3 7 2 4 ========================================== srewrite [1] in QUEENS-BT : nil using solve . Solution 1 rewrites: 285296 result NeList{Nat}: 1 5 8 6 3 7 2 4 Solution 2 rewrites: 0 result NeList{Nat}: 1 6 8 3 7 4 2 5 Solution 3 rewrites: 0 result NeList{Nat}: 1 7 4 6 8 2 5 3 ========================================== srewrite [4] in COLORING-BT : graph(10, 3, p(0, 1) p(0, 4) p(0, 5) p(1, 2) p(1, 6) p(2, 3) p(2, 7) p(3, 4) p(3, 8) p(4, 9) p(5, 7) p(5, 8) p(6, 8) p(6, 9) p(7, 9), nil) using solve . Solution 1 rewrites: 130137 result Graph: graph(10, 3, p(0, 1) p(0, 4) p(0, 5) p(1, 2) p(1, 6) p(2, 3) p(2, 7) p(3, 4) p(3, 8) p(4, 9) p(5, 7) p(5, 8) p(6, 8) p(6, 9) p(7, 9), 0 1 0 1 2 1 2 2 0 0) Solution 2 rewrites: 130137 result Graph: graph(10, 3, p(0, 1) p(0, 4) p(0, 5) p(1, 2) p(1, 6) p(2, 3) p(2, 7) p(3, 4) p(3, 8) p(4, 9) p(5, 7) p(5, 8) p(6, 8) p(6, 9) p(7, 9), 0 1 0 1 2 2 2 1 0 0) Solution 3 rewrites: 130137 result Graph: graph(10, 3, p(0, 1) p(0, 4) p(0, 5) p(1, 2) p(1, 6) p(2, 3) p(2, 7) p(3, 4) p(3, 8) p(4, 9) p(5, 7) p(5, 8) p(6, 8) p(6, 9) p(7, 9), 0 1 0 2 1 1 2 2 0 0) Solution 4 rewrites: 130137 result Graph: graph(10, 3, p(0, 1) p(0, 4) p(0, 5) p(1, 2) p(1, 6) p(2, 3) p(2, 7) p(3, 4) p(3, 8) p(4, 9) p(5, 7) p(5, 8) p(6, 8) p(6, 9) p(7, 9), 0 1 0 2 1 2 2 1 0 0) Bye. maude-3.1/tests/StrategyLanguage/parameterization0000755000175200017520000000037413565216260017323 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/parameterization.maude -no-banner -no-advise \ > parameterization.out 2>&1 diff $srcdir/parameterization.expected parameterization.out > /dev/null 2>&1 maude-3.1/tests/StrategyLanguage/Makefile.in0000644000175200017520000006405213741175703016071 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = tests/StrategyLanguage ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_have_poll.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/mkinstalldirs \ $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ BUDDY_LIB = @BUDDY_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CVC4_LIB = @CVC4_LIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FLEX = @FLEX@ GCC_LIBS = @GCC_LIBS@ GMP_LIBS = @GMP_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSIGSEGV_LIB = @LIBSIGSEGV_LIB@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TECLA_LIBS = @TECLA_LIBS@ VERSION = @VERSION@ YICES2_LIB = @YICES2_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ TESTS = \ metalevel \ modules \ srewrite \ parameterization MAUDE_FILES = \ metalevel.maude \ modules.maude \ srewrite.maude \ parameterization.maude RESULT_FILES = \ metalevel.expected \ modules.expected \ srewrite.expected \ parameterization.expected EXTRA_DIST = $(TESTS) $(MAUDE_FILES) $(RESULT_FILES) all: all-am .SUFFIXES: .SUFFIXES: .log .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/StrategyLanguage/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/StrategyLanguage/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? metalevel.log: metalevel @p='metalevel'; \ b='metalevel'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) modules.log: modules @p='modules'; \ b='modules'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) srewrite.log: srewrite @p='srewrite'; \ b='srewrite'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) parameterization.log: parameterization @p='parameterization'; \ b='parameterization'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: all all-am check check-TESTS check-am clean clean-generic \ cscopelist-am ctags-am distclean distclean-generic distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am recheck tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: maude-3.1/tests/Meta/0000755000175200017520000000000013741222371011507 500000000000000maude-3.1/tests/Meta/metaUp2.expected0000644000175200017520000367412213730553671014516 00000000000000========================================== reduce in META-LEVEL : upSorts('META-LEVEL, true) . rewrites: 1 result NeSortSet: 'Assignment ; 'Attr ; 'AttrSet ; 'Bool ; 'Bound ; 'CallStrategy ; 'Char ; 'Condition ; 'Constant ; 'Context ; 'EmptyCommaList ; 'EmptyQidSet ; 'EqCondition ; 'Equation ; 'EquationSet ; 'Expression ; 'FModule ; 'FTheory ; 'FindResult ; 'GTermList ; 'GroundTerm ; 'GroundTermList ; 'Header ; 'Hook ; 'HookList ; 'Import ; 'ImportList ; 'Kind ; 'KindSet ; 'MatchOrUnificationPair ; 'MatchPair ; 'MatchPair? ; 'MatchingProblem ; 'MembAx ; 'MembAxSet ; 'Module ; 'ModuleExpression ; 'NarrowingApplyResult ; 'NarrowingApplyResult? ; 'NarrowingSearchPathResult ; 'NarrowingSearchPathResult? ; 'NarrowingSearchResult ; 'NarrowingSearchResult? ; 'NarrowingStep ; 'NarrowingTrace ; 'Nat ; 'NatList ; 'NeCTermList ; 'NeGroundTermList ; 'NeHookList ; 'NeKindSet ; 'NeNatList ; 'NeParameterDeclList ; 'NeParameterList ; 'NeQidList ; 'NeQidSet ; 'NeSortSet ; 'NeTermList ; 'NeTypeList ; 'NeTypeSet ; 'NeVariableSet ; 'NzNat ; 'OpDecl ; 'OpDeclSet ; 'OpMapping ; 'OpMappingSet ; 'ParameterDecl ; 'ParameterDeclList ; 'ParameterList ; 'Parent ; 'PatternSubjectPair ; 'PrintOption ; 'PrintOptionSet ; 'Qid ; 'QidList ; 'QidSet ; 'Renaming ; 'RenamingSet ; 'Result4Tuple ; 'Result4Tuple? ; 'ResultPair ; 'ResultPair? ; 'ResultTriple ; 'ResultTriple? ; 'Rule ; 'RuleApplication ; 'RuleSet ; 'SModule ; 'STheory ; 'SmtResult ; 'SmtResult? ; 'Sort ; 'SortMapping ; 'SortMappingSet ; 'SortSet ; 'SrewriteOption ; 'StratDecl ; 'StratDeclSet ; 'StratDefSet ; 'StratDefinition ; 'StratMapping ; 'StratMappingSet ; 'StratModule ; 'StratTheory ; 'Strategy ; 'Strategy? ; 'StrategyList ; 'String ; 'SubsortDecl ; 'SubsortDeclSet ; 'Substitution ; 'Substitution? ; 'Term ; 'TermList ; 'TermQid ; 'Trace ; 'Trace? ; 'TraceStep ; 'Type ; 'Type? ; 'TypeList ; 'TypeListSet ; 'TypeSet ; 'UnificandPair ; 'UnificationPair ; 'UnificationPair? ; 'UnificationProblem ; 'UnificationTriple ; 'UnificationTriple? ; 'UsingPair ; 'UsingPairSet ; 'Variable ; 'VariableSet ; 'Variant ; 'Variant? ; 'VariantOption ; 'VariantOptionSet ; 'View ; 'ViewExpression ; 'Zero ========================================== reduce in META-LEVEL : upSorts('META-LEVEL, false) . rewrites: 1 result NeSortSet: 'MatchOrUnificationPair ; 'MatchPair ; 'MatchPair? ; 'MatchingProblem ; 'NarrowingApplyResult ; 'NarrowingApplyResult? ; 'NarrowingSearchPathResult ; 'NarrowingSearchPathResult? ; 'NarrowingSearchResult ; 'NarrowingSearchResult? ; 'NarrowingStep ; 'NarrowingTrace ; 'NeVariableSet ; 'Parent ; 'PatternSubjectPair ; 'PrintOption ; 'PrintOptionSet ; 'Result4Tuple ; 'Result4Tuple? ; 'ResultPair ; 'ResultPair? ; 'ResultTriple ; 'ResultTriple? ; 'SmtResult ; 'SmtResult? ; 'SrewriteOption ; 'Strategy? ; 'Substitution? ; 'Trace ; 'Trace? ; 'TraceStep ; 'Type? ; 'UnificandPair ; 'UnificationPair ; 'UnificationPair? ; 'UnificationProblem ; 'UnificationTriple ; 'UnificationTriple? ; 'VariableSet ; 'Variant ; 'Variant? ; 'VariantOption ; 'VariantOptionSet ========================================== reduce in META-LEVEL : upSubsortDecls('META-LEVEL, true) . rewrites: 2 result SubsortDeclSet: subsort 'Assignment < 'Substitution . subsort 'Attr < 'AttrSet . subsort 'CallStrategy < 'Strategy . subsort 'Char < 'String . subsort 'Constant < 'GroundTerm . subsort 'Constant < 'TermQid . subsort 'Context < 'NeCTermList . subsort 'EmptyCommaList < 'GroundTermList . subsort 'EmptyCommaList < 'ParameterList . subsort 'EmptyQidSet < 'KindSet . subsort 'EmptyQidSet < 'SortSet . subsort 'EmptyQidSet < 'VariableSet . subsort 'EqCondition < 'Condition . subsort 'Equation < 'EquationSet . subsort 'Expression < 'ModuleExpression . subsort 'Expression < 'ViewExpression . subsort 'FModule < 'SModule . subsort 'FTheory < 'STheory . subsort 'GroundTerm < 'NeGroundTermList . subsort 'GroundTerm < 'Term . subsort 'GroundTermList < 'TermList . subsort 'Hook < 'NeHookList . subsort 'Import < 'ImportList . subsort 'Kind < 'NeKindSet . subsort 'Kind < 'Type . subsort 'KindSet < 'TypeSet . subsort 'MatchPair < 'MatchOrUnificationPair . subsort 'MatchPair < 'MatchPair? . subsort 'MembAx < 'MembAxSet . subsort 'NarrowingApplyResult < 'NarrowingApplyResult? . subsort 'NarrowingSearchPathResult < 'NarrowingSearchPathResult? . subsort 'NarrowingSearchResult < 'NarrowingSearchResult? . subsort 'NarrowingStep < 'NarrowingTrace . subsort 'Nat < 'Bound . subsort 'Nat < 'FindResult . subsort 'Nat < 'NeNatList . subsort 'Nat < 'Parent . subsort 'NeCTermList < 'GTermList . subsort 'NeGroundTermList < 'GroundTermList . subsort 'NeGroundTermList < 'NeTermList . subsort 'NeHookList < 'HookList . subsort 'NeKindSet < 'KindSet . subsort 'NeKindSet < 'NeTypeSet . subsort 'NeNatList < 'NatList . subsort 'NeParameterDeclList < 'ParameterDeclList . subsort 'NeParameterList < 'ParameterList . subsort 'NeQidList < 'QidList . subsort 'NeQidSet < 'QidSet . subsort 'NeSortSet < 'NeTypeSet . subsort 'NeSortSet < 'SortSet . subsort 'NeTermList < 'TermList . subsort 'NeTypeList < 'NeQidList . subsort 'NeTypeList < 'TypeList . subsort 'NeTypeSet < 'NeQidSet . subsort 'NeTypeSet < 'TypeSet . subsort 'NeVariableSet < 'NeQidSet . subsort 'NeVariableSet < 'VariableSet . subsort 'NzNat < 'Nat . subsort 'OpDecl < 'OpDeclSet . subsort 'OpMapping < 'OpMappingSet . subsort 'ParameterDecl < 'NeParameterDeclList . subsort 'PatternSubjectPair < 'MatchingProblem . subsort 'PrintOption < 'PrintOptionSet . subsort 'Qid < 'Header . subsort 'Qid < 'NeQidList . subsort 'Qid < 'NeQidSet . subsort 'Renaming < 'RenamingSet . subsort 'Result4Tuple < 'Result4Tuple? . subsort 'ResultPair < 'ResultPair? . subsort 'ResultTriple < 'ResultTriple? . subsort 'Rule < 'RuleSet . subsort 'RuleApplication < 'Strategy . subsort 'SModule < 'Module . subsort 'STheory < 'Module . subsort 'SmtResult < 'SmtResult? . subsort 'Sort < 'Expression . subsort 'Sort < 'NeSortSet . subsort 'Sort < 'Type . subsort 'SortMapping < 'SortMappingSet . subsort 'SortSet < 'TypeSet . subsort 'StratDecl < 'StratDeclSet . subsort 'StratDefinition < 'StratDefSet . subsort 'StratMapping < 'StratMappingSet . subsort 'StratModule < 'Module . subsort 'StratTheory < 'Module . subsort 'Strategy < 'Strategy? . subsort 'Strategy < 'StrategyList . subsort 'SubsortDecl < 'SubsortDeclSet . subsort 'Substitution < 'Substitution? . subsort 'Term < 'NeTermList . subsort 'TermList < 'GTermList . subsort 'TermQid < 'Qid . subsort 'TermQid < 'Term . subsort 'Trace < 'Trace? . subsort 'TraceStep < 'Trace . subsort 'Type < 'NeTypeList . subsort 'Type < 'NeTypeSet . subsort 'Type < 'Qid . subsort 'Type < 'Type? . subsort 'TypeList < 'QidList . subsort 'TypeList < 'TypeListSet . subsort 'TypeSet < 'QidSet . subsort 'TypeSet < 'TypeListSet . subsort 'UnificandPair < 'UnificationProblem . subsort 'UnificationPair < 'MatchOrUnificationPair . subsort 'UnificationPair < 'UnificationPair? . subsort 'UnificationTriple < 'UnificationTriple? . subsort 'UsingPair < 'UsingPairSet . subsort 'Variable < 'NeVariableSet . subsort 'Variable < 'TermQid . subsort 'VariableSet < 'QidSet . subsort 'Variant < 'Variant? . subsort 'VariantOption < 'VariantOptionSet . subsort 'ViewExpression < 'NeParameterList . subsort 'Zero < 'Nat . ========================================== reduce in META-LEVEL : upSubsortDecls('META-LEVEL, false) . rewrites: 1 result SubsortDeclSet: subsort 'EmptyQidSet < 'VariableSet . subsort 'MatchPair < 'MatchOrUnificationPair . subsort 'MatchPair < 'MatchPair? . subsort 'NarrowingApplyResult < 'NarrowingApplyResult? . subsort 'NarrowingSearchPathResult < 'NarrowingSearchPathResult? . subsort 'NarrowingSearchResult < 'NarrowingSearchResult? . subsort 'NarrowingStep < 'NarrowingTrace . subsort 'Nat < 'Parent . subsort 'NeVariableSet < 'NeQidSet . subsort 'NeVariableSet < 'VariableSet . subsort 'PatternSubjectPair < 'MatchingProblem . subsort 'PrintOption < 'PrintOptionSet . subsort 'Result4Tuple < 'Result4Tuple? . subsort 'ResultPair < 'ResultPair? . subsort 'ResultTriple < 'ResultTriple? . subsort 'SmtResult < 'SmtResult? . subsort 'Strategy < 'Strategy? . subsort 'Substitution < 'Substitution? . subsort 'Trace < 'Trace? . subsort 'TraceStep < 'Trace . subsort 'Type < 'Type? . subsort 'UnificandPair < 'UnificationProblem . subsort 'UnificationPair < 'MatchOrUnificationPair . subsort 'UnificationPair < 'UnificationPair? . subsort 'UnificationTriple < 'UnificationTriple? . subsort 'Variable < 'NeVariableSet . subsort 'VariableSet < 'QidSet . subsort 'Variant < 'Variant? . subsort 'VariantOption < 'VariantOptionSet . ========================================== reduce in META-LEVEL : upImports('META-LEVEL) . rewrites: 1 result ImportList: protecting 'META-VIEW . protecting 'BOUND . ========================================== reduce in META-LEVEL : upImports('NAT) . rewrites: 1 result Import: protecting 'BOOL . ========================================== reduce in META-LEVEL : upImports('TRUTH-VALUE) . rewrites: 1 result ImportList: (nil).ImportList ========================================== reduce in META-LEVEL : upOpDecls('TRUTH-VALUE, true) . *********** equation (built-in equation for symbol upOpDecls) upOpDecls('TRUTH-VALUE, true) ---> op 'true : nil -> 'Bool [ctor special( id-hook('SystemTrue, nil))] . op 'false : nil -> 'Bool [ctor special( id-hook('SystemFalse, nil))] . rewrites: 1 result OpDeclSet: op 'false : nil -> 'Bool [ctor special( id-hook('SystemFalse, nil))] . op 'true : nil -> 'Bool [ctor special( id-hook('SystemTrue, nil))] . ========================================== reduce in META-LEVEL : upOpDecls('META-LEVEL, true) . rewrites: 1 result OpDeclSet: op '$applySubstitution : 'NeTermList 'Substitution -> 'Term [ none] . op '$card : 'QidSet 'Nat -> 'Nat [none] . op '$diff : 'QidSet 'QidSet 'QidSet -> 'QidSet [none] . op '$intersect : 'QidSet 'QidSet 'QidSet -> 'QidSet [none] . op '$reverse : 'NatList 'NatList -> 'NatList [none] . op '$reverse : 'QidList 'QidList -> 'QidList [none] . op '$size : 'NatList 'Nat -> 'Nat [none] . op '$size : 'QidList 'Nat -> 'Nat [none] . op '0 : nil -> 'Zero [ctor] . op ' : nil -> 'Constant [special( id-hook('QuotedIdentifierSymbol, 'constantQid))] . op ' : nil -> 'Kind [special( id-hook('QuotedIdentifierSymbol, 'kindQid))] . op ' : nil -> 'Qid [special( id-hook('QuotedIdentifierSymbol, nil))] . op ' : nil -> 'Sort [special( id-hook('QuotedIdentifierSymbol, 'sortQid))] . op ' : nil -> 'Variable [special( id-hook('QuotedIdentifierSymbol, 'variableQid))] . op ' : nil -> 'Char [special( id-hook('StringSymbol, nil))] . op ' : nil -> 'String [special( id-hook('StringSymbol, nil))] . op '_! : 'Strategy -> 'Strategy [ctor] . op '_&_ : 'Nat 'Nat -> 'Nat [assoc comm prec(53) special( id-hook('ACU_NumberOpSymbol, '&) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_* : 'Strategy -> 'Strategy [ctor] . op '_*_ : 'Nat 'Nat -> 'Nat [assoc comm prec(31) special( id-hook('ACU_NumberOpSymbol, '*) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_*_ : 'NzNat 'NzNat -> 'NzNat [assoc comm prec(31) special( id-hook('ACU_NumberOpSymbol, '*) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_*`(_`) : 'ModuleExpression 'RenamingSet -> 'ModuleExpression [ctor prec( 39) format('d 'd 's 'n++i 'n--i 'd)] . op '_+ : 'Strategy -> 'Strategy [ctor] . op '_+_ : 'ModuleExpression 'ModuleExpression -> 'ModuleExpression [assoc comm ctor] . op '_+_ : 'Nat 'Nat -> 'Nat [assoc comm prec(33) special( id-hook('ACU_NumberOpSymbol, '+) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_+_ : 'NzNat 'Nat -> 'NzNat [assoc comm prec(33) special( id-hook('ACU_NumberOpSymbol, '+) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_+_ : 'String 'String -> 'String [prec(33) gather('E 'e) special( id-hook('StringOpSymbol, '+) op-hook('stringSymbol, ', nil, 'Char))] . op '_/\_ : 'Condition 'Condition -> 'Condition [assoc ctor id('nil.EqCondition) prec(73)] . op '_/\_ : 'EqCondition 'EqCondition -> 'EqCondition [assoc ctor id( 'nil.EqCondition) prec(73)] . op '_/\_ : 'MatchingProblem 'MatchingProblem -> 'MatchingProblem [assoc comm ctor prec(73)] . op '_/\_ : 'UnificationProblem 'UnificationProblem -> 'UnificationProblem [ assoc comm ctor prec(73)] . op '_::_ : 'Sort 'ModuleExpression -> 'ParameterDecl [none] . op '_:=_ : 'Term 'Term -> 'EqCondition [ctor prec(71)] . op '_:_ : 'Term 'Sort -> 'EqCondition [ctor prec(71)] . op '_;_ : 'EmptyQidSet 'EmptyQidSet -> 'EmptyQidSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_;_ : 'KindSet 'KindSet -> 'KindSet [assoc comm ctor id('none.EmptyQidSet) prec(43)] . op '_;_ : 'NeKindSet 'KindSet -> 'NeKindSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_;_ : 'NeQidSet 'QidSet -> 'NeQidSet [assoc comm ctor id('none.EmptyQidSet) prec(43)] . op '_;_ : 'NeSortSet 'SortSet -> 'NeSortSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_;_ : 'NeTypeSet 'TypeSet -> 'NeTypeSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_;_ : 'NeVariableSet 'VariableSet -> 'NeVariableSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_;_ : 'QidSet 'QidSet -> 'QidSet [assoc comm ctor id('none.EmptyQidSet) prec(43)] . op '_;_ : 'SortSet 'SortSet -> 'SortSet [assoc comm ctor id('none.EmptyQidSet) prec(43)] . op '_;_ : 'Strategy 'Strategy -> 'Strategy [assoc ctor id('idle.Strategy) prec( 39) gather('e 'E)] . op '_;_ : 'Substitution 'Substitution -> 'Substitution [assoc comm ctor id( 'none.Substitution) prec(65)] . op '_;_ : 'TypeListSet 'TypeListSet -> 'TypeListSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_;_ : 'TypeSet 'TypeSet -> 'TypeSet [assoc comm ctor id('none.EmptyQidSet) prec(43)] . op '_;_ : 'VariableSet 'VariableSet -> 'VariableSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_<-_ : 'Variable 'Term -> 'Assignment [ctor prec(63) format('n++i 'd 'd '--)] . op '_<<_ : 'Nat 'Nat -> 'Nat [prec(35) gather('E 'e) special( id-hook('NumberOpSymbol, '<<) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_<=?_ : 'Term 'Term -> 'PatternSubjectPair [ctor prec(71)] . op '_<=_ : 'Nat 'Nat -> 'Bool [prec(37) special( id-hook('NumberOpSymbol, '<=) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_<=_ : 'String 'String -> 'Bool [prec(37) special( id-hook('StringOpSymbol, '<=) op-hook('stringSymbol, ', nil, 'Char) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_<_ : 'Nat 'Nat -> 'Bool [prec(37) special( id-hook('NumberOpSymbol, '<) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_<_ : 'String 'String -> 'Bool [prec(37) special( id-hook('StringOpSymbol, '<) op-hook('stringSymbol, ', nil, 'Char) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_=/=_ : 'Universal 'Universal -> 'Bool [prec(51) poly(1 2) special( id-hook('EqualitySymbol, nil) term-hook('equalTerm, 'false.Bool) term-hook('notEqualTerm, 'true.Bool))] . op '_==_ : 'Universal 'Universal -> 'Bool [prec(51) poly(1 2) special( id-hook('EqualitySymbol, nil) term-hook('equalTerm, 'true.Bool) term-hook('notEqualTerm, 'false.Bool))] . op '_=>_ : 'Term 'Term -> 'Condition [ctor prec(71)] . op '_=?_ : 'Term 'Term -> 'UnificandPair [ctor prec(71)] . op '_=_ : 'Term 'Term -> 'EqCondition [ctor prec(71)] . op '_>=_ : 'Nat 'Nat -> 'Bool [prec(37) special( id-hook('NumberOpSymbol, '>=) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_>=_ : 'String 'String -> 'Bool [prec(37) special( id-hook('StringOpSymbol, '>=) op-hook('stringSymbol, ', nil, 'Char) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_>>_ : 'Nat 'Nat -> 'Nat [prec(35) gather('E 'e) special( id-hook('NumberOpSymbol, '>>) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_>_ : 'Nat 'Nat -> 'Bool [prec(37) special( id-hook('NumberOpSymbol, '>) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_>_ : 'String 'String -> 'Bool [prec(37) special( id-hook('StringOpSymbol, '>) op-hook('stringSymbol, ', nil, 'Char) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_?_:_ : 'Strategy 'Strategy 'Strategy -> 'Strategy [ctor prec(55)] . op '_\_ : 'QidSet 'QidSet -> 'QidSet [gather('E 'e)] . op '_^_ : 'Nat 'Nat -> 'Nat [prec(29) gather('E 'e) special( id-hook('NumberOpSymbol, '^) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_^_ : 'NzNat 'Nat -> 'NzNat [prec(29) gather('E 'e) special( id-hook('NumberOpSymbol, '^) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '__ : 'AttrSet 'AttrSet -> 'AttrSet [assoc comm ctor id('none.AttrSet)] . op '__ : 'EquationSet 'EquationSet -> 'EquationSet [assoc comm ctor id( 'none.EquationSet) format('d 'ni 'd)] . op '__ : 'HookList 'HookList -> 'HookList [assoc ctor id('nil.HookList)] . op '__ : 'HookList 'NeHookList -> 'NeHookList [assoc ctor id('nil.HookList)] . op '__ : 'ImportList 'ImportList -> 'ImportList [assoc ctor id('nil.ImportList) format('d 'ni 'd)] . op '__ : 'MembAxSet 'MembAxSet -> 'MembAxSet [assoc comm ctor id( 'none.MembAxSet) format('d 'ni 'd)] . op '__ : 'NarrowingTrace 'NarrowingTrace -> 'NarrowingTrace [assoc ctor id( 'nil.NarrowingTrace)] . op '__ : 'NatList 'NatList -> 'NatList [assoc ctor id('nil.NatList) prec(25)] . op '__ : 'NatList 'NeNatList -> 'NeNatList [assoc ctor id('nil.NatList) prec( 25)] . op '__ : 'NeHookList 'HookList -> 'NeHookList [assoc ctor id('nil.HookList)] . op '__ : 'NeNatList 'NatList -> 'NeNatList [assoc ctor id('nil.NatList) prec( 25)] . op '__ : 'NeQidList 'QidList -> 'NeQidList [assoc ctor id('nil.TypeList) prec( 25)] . op '__ : 'NeTypeList 'TypeList -> 'NeTypeList [assoc ctor id('nil.TypeList) prec(25)] . op '__ : 'OpDeclSet 'OpDeclSet -> 'OpDeclSet [assoc comm ctor id( 'none.OpDeclSet) format('d 'ni 'd)] . op '__ : 'OpMappingSet 'OpMappingSet -> 'OpMappingSet [assoc comm ctor id( 'none.OpMappingSet) format('d 'ni 'd)] . op '__ : 'PrintOptionSet 'PrintOptionSet -> 'PrintOptionSet [assoc comm ctor id('none.PrintOptionSet)] . op '__ : 'QidList 'NeQidList -> 'NeQidList [assoc ctor id('nil.TypeList) prec( 25)] . op '__ : 'QidList 'QidList -> 'QidList [assoc ctor id('nil.TypeList) prec(25)] . op '__ : 'RuleSet 'RuleSet -> 'RuleSet [assoc comm ctor id('none.RuleSet) format('d 'ni 'd)] . op '__ : 'SortMappingSet 'SortMappingSet -> 'SortMappingSet [assoc comm ctor id('none.SortMappingSet) format('d 'ni 'd)] . op '__ : 'StratDeclSet 'StratDeclSet -> 'StratDeclSet [assoc comm ctor id( 'none.StratDeclSet) format('d 'ni 'd)] . op '__ : 'StratDefSet 'StratDefSet -> 'StratDefSet [assoc comm ctor id( 'none.StratDefSet) format('d 'ni 'd)] . op '__ : 'StratMappingSet 'StratMappingSet -> 'StratMappingSet [assoc comm ctor id('none.StratMappingSet) format('d 'ni 'd)] . op '__ : 'SubsortDeclSet 'SubsortDeclSet -> 'SubsortDeclSet [assoc comm ctor id('none.SubsortDeclSet) format('d 'ni 'd)] . op '__ : 'Trace 'Trace -> 'Trace [assoc ctor id('nil.Trace) format('d 'n 'd)] . op '__ : 'TypeList 'NeTypeList -> 'NeTypeList [assoc ctor id('nil.TypeList) prec(25)] . op '__ : 'TypeList 'TypeList -> 'TypeList [assoc ctor id('nil.TypeList) prec( 25)] . op '__ : 'VariantOptionSet 'VariantOptionSet -> 'VariantOptionSet [assoc comm ctor id('none.VariantOptionSet)] . op '_`,_ : 'EmptyCommaList 'EmptyCommaList -> 'EmptyCommaList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'GTermList 'GTermList -> 'GTermList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'GroundTermList 'GroundTermList -> 'GroundTermList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'GroundTermList 'NeGroundTermList -> 'NeGroundTermList [assoc ctor id('empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'NeCTermList 'TermList -> 'NeCTermList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'NeGroundTermList 'GroundTermList -> 'NeGroundTermList [assoc ctor id('empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'NeParameterDeclList 'ParameterDeclList -> 'NeParameterDeclList [ assoc ctor id('nil.ParameterDeclList) prec(121)] . op '_`,_ : 'NeParameterList 'ParameterList -> 'NeParameterList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'NeTermList 'TermList -> 'NeTermList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'ParameterDeclList 'NeParameterDeclList -> 'NeParameterDeclList [ assoc ctor id('nil.ParameterDeclList) prec(121)] . op '_`,_ : 'ParameterDeclList 'ParameterDeclList -> 'ParameterDeclList [assoc ctor id('nil.ParameterDeclList) prec(121)] . op '_`,_ : 'ParameterList 'NeParameterList -> 'NeParameterList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'ParameterList 'ParameterList -> 'ParameterList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'RenamingSet 'RenamingSet -> 'RenamingSet [assoc comm ctor prec(43) format('d 'd 'ni 'd)] . op '_`,_ : 'StrategyList 'StrategyList -> 'StrategyList [assoc ctor id( 'empty.StrategyList)] . op '_`,_ : 'TermList 'NeCTermList -> 'NeCTermList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'TermList 'NeTermList -> 'NeTermList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'TermList 'TermList -> 'TermList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'UsingPairSet 'UsingPairSet -> 'UsingPairSet [assoc comm ctor prec( 61)] . op '_`[_`] : 'Qid 'NeCTermList -> 'Context [ctor] . op '_`[_`] : 'Qid 'NeGroundTermList -> 'GroundTerm [ctor] . op '_`[_`] : 'Qid 'NeTermList -> 'Term [ctor] . op '_`[_`]`{_`} : 'Qid 'Substitution 'StrategyList -> 'RuleApplication [ctor prec(21)] . op '_`[`[_`]`] : 'Qid 'TermList -> 'CallStrategy [ctor prec(21)] . op '_`{_`} : 'Expression 'NeParameterList -> 'Expression [ctor prec(37)] . op '_`{_`} : 'ModuleExpression 'NeParameterList -> 'ModuleExpression [ctor prec(37)] . op '_`{_`} : 'Qid 'ParameterDeclList -> 'Header [ctor] . op '_`{_`} : 'ViewExpression 'NeParameterList -> 'ViewExpression [ctor prec( 37)] . op '_and-then_ : 'Bool 'Bool -> 'Bool [strat(1 0) prec(55) gather('e 'E)] . op '_and_ : 'Bool 'Bool -> 'Bool [assoc comm prec(55)] . op '_divides_ : 'NzNat 'Nat -> 'Bool [prec(51) special( id-hook('NumberOpSymbol, 'divides) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_implies_ : 'Bool 'Bool -> 'Bool [prec(61) gather('e 'E)] . op '_in_ : 'Qid 'QidSet -> 'Bool [none] . op '_or-else_ : 'Bool 'Bool -> 'Bool [strat(1 0) prec(59) gather('e 'E)] . op '_or-else_ : 'Strategy 'Strategy -> 'Strategy [assoc ctor prec(43) gather('e 'E)] . op '_or_ : 'Bool 'Bool -> 'Bool [assoc comm prec(59)] . op '_psubset_ : 'QidSet 'QidSet -> 'Bool [none] . op '_quo_ : 'Nat 'NzNat -> 'Nat [prec(31) gather('E 'e) special( id-hook('NumberOpSymbol, 'quo) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_rem_ : 'Nat 'NzNat -> 'Nat [prec(31) gather('E 'e) special( id-hook('NumberOpSymbol, 'rem) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_subset_ : 'QidSet 'QidSet -> 'Bool [none] . op '_using_ : 'Variable 'Strategy -> 'UsingPair [ctor prec(21)] . op '_xor_ : 'Bool 'Bool -> 'Bool [assoc comm prec(57)] . op '_xor_ : 'Nat 'Nat -> 'Nat [assoc comm prec(55) special( id-hook('ACU_NumberOpSymbol, 'xor) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_|_ : 'Nat 'Nat -> 'Nat [assoc comm prec(57) special( id-hook('ACU_NumberOpSymbol, '|) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_|_ : 'NzNat 'Nat -> 'NzNat [assoc comm prec(57) special( id-hook('ACU_NumberOpSymbol, '|) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_|_ : 'Strategy 'Strategy -> 'Strategy [assoc comm ctor id('fail.Strategy) prec(41) gather('e 'E)] . op '`[_`] : 'Qid -> 'Module [none] . op '`[`] : nil -> 'Context [ctor] . op '`{_`,_`,_`,_`,_`,_`,_`} : 'Context 'Qid 'Substitution 'Qid 'Term 'Type 'Substitution -> 'NarrowingStep [ctor format('ni 'n++i 'd 'ni 'd 'd 'd 'ni 'd 'ni 'd 'd 'd 'd 'n--i 'd)] . op '`{_`,_`,_`,_`,_`,_`,_`} : 'Term 'Type 'Context 'Qid 'Substitution 'Substitution 'Qid -> 'NarrowingApplyResult [ctor format('d 'n++i 'd 'd 'd 'ni 'd 'ni 'd 'd 'd 'd 'd 'ni 'n--i 'd)] . op '`{_`,_`,_`,_`,_`,_`} : 'Term 'Type 'Substitution 'NarrowingTrace 'Substitution 'Qid -> 'NarrowingSearchPathResult [ctor format('d 'n++i 'd 'd 'd 'd 'd 'd 'd 'd 'd 'ni 'n--i 'd)] . op '`{_`,_`,_`,_`,_`,_`} : 'Term 'Type 'Substitution 'Qid 'Substitution 'Qid -> 'NarrowingSearchResult [ctor format('d 'n++i 'd 'd 'd 'd 'd 'ni 'd 'd 'd 'ni 'n--i 'd)] . op '`{_`,_`,_`,_`,_`} : 'Term 'Substitution 'Nat 'Parent 'Bool -> 'Variant [ ctor] . op '`{_`,_`,_`,_`,_`} : 'Term 'Substitution 'Qid 'Parent 'Bool -> 'Variant [ ctor] . op '`{_`,_`,_`,_`} : 'Term 'Substitution 'Term 'Nat -> 'SmtResult [ctor] . op '`{_`,_`,_`,_`} : 'Term 'Type 'Substitution 'Context -> 'Result4Tuple [ctor] . op '`{_`,_`,_`} : 'Substitution 'Substitution 'Nat -> 'UnificationTriple [ctor] . op '`{_`,_`,_`} : 'Substitution 'Substitution 'Qid -> 'UnificationTriple [ctor] . op '`{_`,_`,_`} : 'Term 'Type 'Rule -> 'TraceStep [ctor] . op '`{_`,_`,_`} : 'Term 'Type 'Substitution -> 'ResultTriple [ctor] . op '`{_`,_`} : 'Substitution 'Context -> 'MatchPair [ctor] . op '`{_`,_`} : 'Substitution 'Nat -> 'UnificationPair [ctor] . op '`{_`,_`} : 'Substitution 'Qid -> 'UnificationPair [ctor] . op '`{_`,_`} : 'Term 'Type -> 'ResultPair [ctor] . op 'all : nil -> 'RuleApplication [ctor] . op 'amatch_s.t._ : 'Term 'EqCondition -> 'Strategy [ctor prec(21)] . op 'amatchrew_s.t._by_ : 'Term 'EqCondition 'UsingPairSet -> 'Strategy [ctor] . op 'ambiguity : 'ResultPair 'ResultPair -> 'ResultPair? [ctor] . op 'ambiguity : 'Strategy 'Strategy -> 'Strategy? [ctor] . op 'anyType : nil -> 'Type? [ctor] . op 'append : 'NatList 'NatList -> 'NatList [none] . op 'append : 'NatList 'NeNatList -> 'NeNatList [none] . op 'append : 'NeNatList 'NatList -> 'NeNatList [none] . op 'append : 'NeQidList 'QidList -> 'NeQidList [none] . op 'append : 'QidList 'NeQidList -> 'NeQidList [none] . op 'append : 'QidList 'QidList -> 'QidList [none] . op 'applySubstitution : 'Module 'Term 'Substitution -> 'Term [none] . op 'ascii : 'Char -> 'Nat [special( id-hook('StringOpSymbol, 'ascii) op-hook('stringSymbol, ', nil, 'Char) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'assoc : nil -> 'Attr [ctor] . op 'breadthFirst : nil -> 'SrewriteOption [ctor] . op 'ceq_=_if_`[_`]. : 'Term 'Term 'EqCondition 'AttrSet -> 'Equation [ctor format('d 'd 'd 'd 'd 'd 's 'd 'd 's 'd)] . op 'char : '`[FindResult`,NatList`,Bound`,Parent`] -> '`[String`] [special( id-hook('StringOpSymbol, 'char) op-hook('stringSymbol, ', nil, 'Char) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'cmb_:_if_`[_`]. : 'Term 'Sort 'EqCondition 'AttrSet -> 'MembAx [ctor format('d 'd 'd 'd 'd 'd 's 'd 'd 's 'd)] . op 'comm : nil -> 'Attr [ctor] . op 'completeName : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaCompleteName) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'config : nil -> 'Attr [ctor] . op 'crl_=>_if_`[_`]. : 'Term 'Term 'Condition 'AttrSet -> 'Rule [ctor format('d 'd 'd 'd 'd 'd 's 'd 'd 's 'd)] . op 'csd_:=_if_`[_`]. : 'CallStrategy 'Strategy 'EqCondition 'AttrSet -> 'StratDefinition [ctor format('d 'd 'd 'd 'd 'd 's 'd 'd 's 'd)] . op 'ctor : nil -> 'Attr [ctor] . op 'delay : nil -> 'VariantOption [ctor] . op 'delete : 'Qid 'QidSet -> 'QidSet [none] . op 'depthFirst : nil -> 'SrewriteOption [ctor] . op 'downTerm : 'Term 'Universal -> 'Universal [poly(2 0) special( id-hook('MetaLevelOpSymbol, 'metaDownTerm) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'empty : nil -> 'EmptyCommaList [ctor] . op 'empty : nil -> 'GroundTermList [ctor] . op 'empty : nil -> 'StrategyList [ctor] . op 'eq_=_`[_`]. : 'Term 'Term 'AttrSet -> 'Equation [ctor format('d 'd 'd 'd 's 'd 'd 's 'd)] . op 'extending_. : 'ModuleExpression -> 'Import [ctor] . op 'fail : nil -> 'Strategy [ctor] . op 'failure : nil -> 'NarrowingApplyResult? [ctor] . op 'failure : nil -> 'NarrowingSearchPathResult? [ctor] . op 'failure : nil -> 'NarrowingSearchResult? [ctor] . op 'failure : nil -> 'Result4Tuple? [ctor] . op 'failure : nil -> 'ResultPair? [ctor] . op 'failure : nil -> 'ResultTriple? [ctor] . op 'failure : nil -> 'SmtResult? [ctor] . op 'failure : nil -> 'Trace? [ctor] . op 'failureIncomplete : nil -> 'NarrowingApplyResult? [ctor] . op 'failureIncomplete : nil -> 'NarrowingSearchPathResult? [ctor] . op 'failureIncomplete : nil -> 'NarrowingSearchResult? [ctor] . op 'failureIncomplete : nil -> 'ResultTriple? [ctor] . op 'false : nil -> 'Bool [ctor special( id-hook('SystemFalse, nil))] . op 'filter : nil -> 'VariantOption [ctor] . op 'find : 'String 'String 'Nat -> 'FindResult [special( id-hook('StringOpSymbol, 'find) op-hook('stringSymbol, ', nil, 'Char) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('notFoundTerm, 'notFound.FindResult))] . op 'flat : nil -> 'PrintOption [ctor] . op 'fmod_is_sorts_.____endfm : 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet -> 'FModule [ctor gather('& '& '& '& '& '& '&) format('d 'd 's 'n++i 'ni 'd 'd 'ni 'ni 'ni 'ni 'n--i 'd)] . op 'format : 'QidList -> 'Attr [ctor] . op 'format : nil -> 'PrintOption [ctor] . op 'front : 'NeNatList -> 'NatList [none] . op 'front : 'NeQidList -> 'QidList [none] . op 'frozen : 'NeNatList -> 'Attr [ctor] . op 'fth_is_sorts_.____endfth : 'Qid 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet -> 'FTheory [ctor gather('& '& '& '& '& '& '&) format('d 'd 'd 'n++i 'ni 'd 'd 'ni 'ni 'ni 'ni 'n--i 'd)] . op 'gather : 'QidList -> 'Attr [ctor] . op 'gcd : 'Nat 'Nat -> 'Nat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'gcd) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'gcd : 'NzNat 'Nat -> 'NzNat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'gcd) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'getAccumulatedSubstitution : 'NarrowingSearchResult -> 'Substitution [none] . op 'getAccumulatedSubstitution : 'NarrowingStep -> 'Substitution [none] . op 'getContext : 'MatchPair -> 'Context [none] . op 'getContext : 'NarrowingApplyResult -> 'Context [none] . op 'getContext : 'NarrowingStep -> 'Context [none] . op 'getContext : 'Result4Tuple -> 'Context [none] . op 'getEqs : 'Module -> 'EquationSet [none] . op 'getFrom : 'View -> 'ModuleExpression [none] . op 'getImports : 'Module -> 'ImportList [none] . op 'getInitialSubstitution : 'NarrowingSearchPathResult -> 'Substitution [none] . op 'getInitialTerm : 'NarrowingSearchPathResult -> 'Term [none] . op 'getInitialType : 'NarrowingSearchPathResult -> 'Type [none] . op 'getKind : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaGetKind) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'getKinds : '`[Module`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaGetKinds) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'getLabel : 'NarrowingApplyResult -> 'Qid [none] . op 'getLabel : 'NarrowingStep -> 'Qid [none] . op 'getLhsSubstitution : 'UnificationTriple -> 'Substitution [none] . op 'getMbs : 'Module -> 'MembAxSet [none] . op 'getMoreVariantsInLayerFlag : 'Variant -> 'Bool [none] . op 'getName : 'Constant -> 'Qid [none] . op 'getName : 'Module -> 'Qid [none] . op 'getName : 'Variable -> 'Qid [none] . op 'getName : 'View -> 'Qid [none] . op 'getOpMappings : 'View -> 'OpMappingSet [none] . op 'getOps : 'Module -> 'OpDeclSet [none] . op 'getParent : 'Variant -> 'Parent [none] . op 'getRhsSubstitution : 'UnificationTriple -> 'Substitution [none] . op 'getRls : 'Module -> 'RuleSet [none] . op 'getRule : 'TraceStep -> 'Rule [none] . op 'getRuleSubstitution : 'NarrowingApplyResult -> 'Substitution [none] . op 'getSds : 'Module -> 'StratDefSet [none] . op 'getSortMappings : 'View -> 'SortMappingSet [none] . op 'getSorts : 'Module -> 'SortSet [none] . op 'getStateVariableFamily : 'NarrowingSearchResult -> 'Qid [none] . op 'getStratMappings : 'View -> 'StratMappingSet [none] . op 'getStrats : 'Module -> 'StratDeclSet [none] . op 'getSubsorts : 'Module -> 'SubsortDeclSet [none] . op 'getSubstitution : 'MatchPair -> 'Substitution [none] . op 'getSubstitution : 'Result4Tuple -> 'Substitution [none] . op 'getSubstitution : 'ResultTriple -> 'Substitution [none] . op 'getSubstitution : 'UnificationPair -> 'Substitution [none] . op 'getSubstitution : 'Variant -> 'Substitution [none] . op 'getTerm : 'NarrowingApplyResult -> 'Term [none] . op 'getTerm : 'NarrowingSearchResult -> 'Term [none] . op 'getTerm : 'NarrowingStep -> 'Term [none] . op 'getTerm : 'Result4Tuple -> 'Term [none] . op 'getTerm : 'ResultPair -> 'Term [none] . op 'getTerm : 'ResultTriple -> 'Term [none] . op 'getTerm : 'TraceStep -> 'Term [none] . op 'getTerm : 'Variant -> 'Term [none] . op 'getTermSubstitution : 'NarrowingApplyResult -> 'Substitution [none] . op 'getTo : 'View -> 'ModuleExpression [none] . op 'getTrace : 'NarrowingSearchPathResult -> 'NarrowingTrace [none] . op 'getType : 'Constant -> 'Type [none] . op 'getType : 'NarrowingApplyResult -> 'Type [none] . op 'getType : 'NarrowingSearchResult -> 'Type [none] . op 'getType : 'NarrowingStep -> 'Type [none] . op 'getType : 'Result4Tuple -> 'Type [none] . op 'getType : 'ResultPair -> 'Type [none] . op 'getType : 'ResultTriple -> 'Type [none] . op 'getType : 'TraceStep -> 'Type [none] . op 'getType : 'Variable -> 'Type [none] . op 'getUnifier : 'NarrowingSearchPathResult -> 'Substitution [none] . op 'getUnifier : 'NarrowingSearchResult -> 'Substitution [none] . op 'getUnifier : 'NarrowingStep -> 'Substitution [none] . op 'getUnifierVariableFamily : 'NarrowingSearchPathResult -> 'Qid [none] . op 'getUnifierVariableFamily : 'NarrowingSearchResult -> 'Qid [none] . op 'getUnifierVariableFamily : 'NarrowingStep -> 'Qid [none] . op 'getVariableFamily : 'NarrowingApplyResult -> 'Qid [none] . op 'getVariableFamily : 'UnificationPair -> 'Qid [none] . op 'getVariableFamily : 'UnificationTriple -> 'Qid [none] . op 'getVariableFamily : 'Variant -> 'Qid [none] . op 'glbSorts : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaGlbSorts) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'head : 'NeNatList -> 'Nat [none] . op 'head : 'NeQidList -> 'Qid [none] . op 'id : 'Term -> 'Attr [ctor] . op 'id-hook : 'Qid 'QidList -> 'Hook [ctor format('nssss 'd)] . op 'idem : nil -> 'Attr [ctor] . op 'idle : nil -> 'Strategy [ctor] . op 'if_then_else_fi : 'Bool 'Universal 'Universal -> 'Universal [poly(2 3 0) special( id-hook('BranchSymbol, nil) term-hook('1, 'true.Bool) term-hook('2, 'false.Bool))] . op 'including_. : 'ModuleExpression -> 'Import [ctor] . op 'insert : 'Qid 'QidSet -> 'QidSet [none] . op 'intersection : 'QidSet 'QidSet -> 'QidSet [none] . op 'iter : nil -> 'Attr [ctor] . op 'label : 'Qid -> 'Attr [ctor] . op 'label_to_ : 'Qid 'Qid -> 'Renaming [ctor] . op 'last : 'NeNatList -> 'Nat [none] . op 'last : 'NeQidList -> 'Qid [none] . op 'lcm : 'Nat 'Nat -> 'Nat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'lcm) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'lcm : 'NzNat 'NzNat -> 'NzNat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'lcm) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'leastSort : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaLeastSort) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'left-id : 'Term -> 'Attr [ctor] . op 'length : 'String -> 'Nat [special( id-hook('StringOpSymbol, 'length) op-hook('stringSymbol, ', nil, 'Char) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'lesserSorts : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaLesserSorts) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'lowerCase : 'String -> 'String [special( id-hook('StringOpSymbol, 'lowerCase) op-hook('stringSymbol, ', nil, 'Char))] . op 'match_s.t._ : 'Term 'EqCondition -> 'Strategy [ctor prec(21)] . op 'matchrew_s.t._by_ : 'Term 'EqCondition 'UsingPairSet -> 'Strategy [ctor] . op 'max : 'Nat 'Nat -> 'Nat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'max) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'max : 'NzNat 'Nat -> 'NzNat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'max) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'maximalAritySet : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaMaximalAritySet) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'maximalSorts : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaMaximalSorts) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'mb_:_`[_`]. : 'Term 'Sort 'AttrSet -> 'MembAx [ctor format('d 'd 'd 'd 's 'd 'd 's 'd)] . op 'memo : nil -> 'Attr [ctor] . op 'metaApply : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Substitution?`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultTriple?`] [special( id-hook('MetaLevelOpSymbol, 'metaApply) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaCheck : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[Bool`] [special( id-hook('MetaLevelOpSymbol, 'metaCheck) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [ special( id-hook('MetaLevelOpSymbol, 'legacyMetaDisjointUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [ special( id-hook('MetaLevelOpSymbol, 'metaDisjointUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaFrewrite : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaFrewrite) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaGetIrredundantVariant : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Variant?`] [special( id-hook('MetaLevelOpSymbol, 'legacyMetaGetIrredundantVariant) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaGetIrredundantVariant : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Variant?`] [special( id-hook('MetaLevelOpSymbol, 'metaGetIrredundantVariant) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaGetVariant : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Variant?`] [special( id-hook('MetaLevelOpSymbol, 'legacyMetaGetVariant) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaGetVariant : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Variant?`] [special( id-hook('MetaLevelOpSymbol, 'metaGetVariant) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaIrredundantDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [ special( id-hook('MetaLevelOpSymbol, 'metaIrredundantDisjointUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaIrredundantUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaIrredundantUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaMatch : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Condition`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Substitution?`] [special( id-hook('MetaLevelOpSymbol, 'metaMatch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNarrow : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[Bool`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaNarrow2) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNarrow : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultTriple?`] [special( id-hook('MetaLevelOpSymbol, 'metaNarrow) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNarrowingApply : 'Module 'Term 'TermList 'Qid 'Nat -> 'NarrowingApplyResult? [none] . op 'metaNarrowingApply : 'Module 'Term 'TermList 'Qid 'VariantOptionSet 'Nat -> 'NarrowingApplyResult? [special( id-hook('MetaLevelOpSymbol, 'metaNarrowingApply) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNarrowingSearch : 'Module 'Term 'Term 'Qid 'Bound 'Qid 'Nat -> 'NarrowingSearchResult? [none] . op 'metaNarrowingSearch : 'Module 'Term 'Term 'Qid 'Bound 'Qid 'VariantOptionSet 'Nat -> 'NarrowingSearchResult? [special( id-hook('MetaLevelOpSymbol, 'metaNarrowingSearch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNarrowingSearchPath : 'Module 'Term 'Term 'Qid 'Bound 'Qid 'Nat -> 'NarrowingSearchPathResult? [none] . op 'metaNarrowingSearchPath : 'Module 'Term 'Term 'Qid 'Bound 'Qid 'VariantOptionSet 'Nat -> 'NarrowingSearchPathResult? [special( id-hook('MetaLevelOpSymbol, 'metaNarrowingSearchPath) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNormalize : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaNormalize) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaParse : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ResultPair?`] [ none] . op 'metaParse : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaParse) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaParseStrategy : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[StrategyList`,Strategy?`] [special( id-hook('MetaLevelOpSymbol, 'metaParseStrategy) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaPrettyPrint : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [none] . op 'metaPrettyPrint : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[PrintOptionSet`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [none] . op 'metaPrettyPrint : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[PrintOptionSet`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaPrettyPrint) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaPrettyPrintStrategy : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[StrategyList`,Strategy?`] '`[PrintOptionSet`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaPrettyPrintStrategy) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaReduce : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaReduce) op-hook('qidSymbol, ', nil, 'Qid) op-hook('metaTermSymbol, '_`[_`], 'Qid 'NeGroundTermList, 'GroundTerm) op-hook('metaArgSymbol, '_`,_, 'NeGroundTermList 'GroundTermList, 'NeGroundTermList) op-hook('emptyTermListSymbol, 'empty, nil, 'GroundTermList) op-hook('assignmentSymbol, '_<-_, 'Variable 'Term, 'Assignment) op-hook('emptySubstitutionSymbol, 'none, nil, 'Substitution) op-hook('substitutionSymbol, '_;_, 'Substitution 'Substitution, 'Substitution) op-hook('holeSymbol, '`[`], nil, 'Context) op-hook('noConditionSymbol, 'nil, nil, 'EqCondition) op-hook('equalityConditionSymbol, '_=_, 'Term 'Term, 'EqCondition) op-hook('sortTestConditionSymbol, '_:_, 'Term 'Sort, 'EqCondition) op-hook('matchConditionSymbol, '_:=_, 'Term 'Term, 'EqCondition) op-hook('rewriteConditionSymbol, '_=>_, 'Term 'Term, 'Condition) op-hook('conjunctionSymbol, '_/\_, 'EqCondition 'EqCondition, 'EqCondition) op-hook('failStratSymbol, 'fail, nil, 'Strategy) op-hook('idleStratSymbol, 'idle, nil, 'Strategy) op-hook('allStratSymbol, 'all, nil, 'RuleApplication) op-hook('applicationStratSymbol, '_`[_`]`{_`}, 'Qid 'Substitution 'StrategyList, 'RuleApplication) op-hook('topStratSymbol, 'top, 'RuleApplication, 'Strategy) op-hook('matchStratSymbol, 'match_s.t._, 'Term 'EqCondition, 'Strategy) op-hook('xmatchStratSymbol, 'xmatch_s.t._, 'Term 'EqCondition, 'Strategy) op-hook('amatchStratSymbol, 'amatch_s.t._, 'Term 'EqCondition, 'Strategy) op-hook('unionStratSymbol, '_|_, 'Strategy 'Strategy, 'Strategy) op-hook('concatStratSymbol, '_;_, 'Strategy 'Strategy, 'Strategy) op-hook('orelseStratSymbol, '_or-else_, 'Strategy 'Strategy, 'Strategy) op-hook('plusStratSymbol, '_+, 'Strategy, 'Strategy) op-hook('conditionalStratSymbol, '_?_:_, 'Strategy 'Strategy 'Strategy, 'Strategy) op-hook('matchrewStratSymbol, 'matchrew_s.t._by_, 'Term 'EqCondition 'UsingPairSet, 'Strategy) op-hook('xmatchrewStratSymbol, 'xmatchrew_s.t._by_, 'Term 'EqCondition 'UsingPairSet, 'Strategy) op-hook('amatchrewStratSymbol, 'amatchrew_s.t._by_, 'Term 'EqCondition 'UsingPairSet, 'Strategy) op-hook('callStratSymbol, '_`[`[_`]`], 'Qid 'TermList, 'CallStrategy) op-hook('oneStratSymbol, 'one, 'Strategy, 'Strategy) op-hook('starStratSymbol, '_*, 'Strategy, 'Strategy) op-hook('normalizationStratSymbol, '_!, 'Strategy, 'Strategy) op-hook('notStratSymbol, 'not, 'Strategy, 'Strategy) op-hook('testStratSymbol, 'test, 'Strategy, 'Strategy) op-hook('tryStratSymbol, 'try, 'Strategy, 'Strategy) op-hook('usingStratSymbol, '_using_, 'Variable 'Strategy, 'UsingPair) op-hook('usingListStratSymbol, '_`,_, 'UsingPairSet 'UsingPairSet, 'UsingPairSet) op-hook('emptyStratListSymbol, 'empty, nil, 'StrategyList) op-hook('stratListSymbol, '_`,_, 'StrategyList 'StrategyList, 'StrategyList) op-hook('headerSymbol, '_`{_`}, 'Qid 'ParameterDeclList, 'Header) op-hook('parameterDeclSymbol, '_::_, 'Sort 'ModuleExpression, 'ParameterDecl) op-hook('parameterDeclListSymbol, '_`,_, 'ParameterDeclList 'ParameterDeclList, 'ParameterDeclList) op-hook('protectingSymbol, 'protecting_., 'ModuleExpression, 'Import) op-hook('extendingSymbol, 'extending_., 'ModuleExpression, 'Import) op-hook('includingSymbol, 'including_., 'ModuleExpression, 'Import) op-hook('nilImportListSymbol, 'nil, nil, 'ImportList) op-hook('importListSymbol, '__, 'ImportList 'ImportList, 'ImportList) op-hook('emptySortSetSymbol, 'none, nil, 'QidSet) op-hook('sortSetSymbol, '_;_, 'QidSet 'QidSet, 'QidSet) op-hook('subsortSymbol, 'subsort_<_., 'Sort 'Sort, 'SubsortDecl) op-hook('emptySubsortDeclSetSymbol, 'none, nil, 'SubsortDeclSet) op-hook('subsortDeclSetSymbol, '__, 'SubsortDeclSet 'SubsortDeclSet, 'SubsortDeclSet) op-hook('nilQidListSymbol, 'nil, nil, 'QidList) op-hook('qidListSymbol, '__, 'QidList 'QidList, 'QidList) op-hook('emptyQidSetSymbol, 'none, nil, 'QidSet) op-hook('qidSetSymbol, '_;_, 'QidSet 'QidSet, 'QidSet) op-hook('succSymbol, 's_, 'Nat, 'NzNat) op-hook('natListSymbol, '__, 'NatList 'NatList, 'NatList) op-hook('unboundedSymbol, 'unbounded, nil, 'Bound) op-hook('noParentSymbol, 'none, nil, 'Parent) op-hook('stringSymbol, ', nil, 'Char) op-hook('sortRenamingSymbol, 'sort_to_, 'Qid 'Qid, 'Renaming) op-hook('opRenamingSymbol, 'op_to_`[_`], 'Qid 'Qid 'AttrSet, 'Renaming) op-hook('opRenamingSymbol2, 'op_:_->_to_`[_`], 'Qid 'TypeList 'Type 'Qid 'AttrSet, 'Renaming) op-hook('labelRenamingSymbol, 'label_to_, 'Qid 'Qid, 'Renaming) op-hook('stratRenamingSymbol, 'strat_to_, 'Qid 'Qid, 'Renaming) op-hook('stratRenamingSymbol2, 'strat_:_@_to_, 'Qid 'TypeList 'Type 'Qid, 'Renaming) op-hook('renamingSetSymbol, '_`,_, 'RenamingSet 'RenamingSet, 'RenamingSet) op-hook('sumSymbol, '_+_, 'ModuleExpression 'ModuleExpression, 'ModuleExpression) op-hook('renamingSymbol, '_*`(_`), 'ModuleExpression 'RenamingSet, 'ModuleExpression) op-hook('instantiationSymbol, '_`{_`}, 'Expression 'NeParameterList, 'Expression) op-hook('termHookSymbol, 'term-hook, 'Qid 'Term, 'Hook) op-hook('hookListSymbol, '__, 'HookList 'HookList, 'HookList) op-hook('idHookSymbol, 'id-hook, 'Qid 'QidList, 'Hook) op-hook('opHookSymbol, 'op-hook, 'Qid 'Qid 'QidList 'Qid, 'Hook) op-hook('assocSymbol, 'assoc, nil, 'Attr) op-hook('commSymbol, 'comm, nil, 'Attr) op-hook('idemSymbol, 'idem, nil, 'Attr) op-hook('iterSymbol, 'iter, nil, 'Attr) op-hook('idSymbol, 'id, 'Term, 'Attr) op-hook('leftIdSymbol, 'left-id, 'Term, 'Attr) op-hook('rightIdSymbol, 'right-id, 'Term, 'Attr) op-hook('stratSymbol, 'strat, 'NeNatList, 'Attr) op-hook('memoSymbol, 'memo, nil, 'Attr) op-hook('precSymbol, 'prec, 'Nat, 'Attr) op-hook('gatherSymbol, 'gather, 'QidList, 'Attr) op-hook('formatSymbol, 'format, 'QidList, 'Attr) op-hook('ctorSymbol, 'ctor, nil, 'Attr) op-hook('frozenSymbol, 'frozen, 'NeNatList, 'Attr) op-hook('polySymbol, 'poly, 'NeNatList, 'Attr) op-hook('configSymbol, 'config, nil, 'Attr) op-hook('objectSymbol, 'object, nil, 'Attr) op-hook('msgSymbol, 'msg, nil, 'Attr) op-hook('specialSymbol, 'special, 'NeHookList, 'Attr) op-hook('labelSymbol, 'label, 'Qid, 'Attr) op-hook('metadataSymbol, 'metadata, 'String, 'Attr) op-hook('owiseSymbol, 'owise, nil, 'Attr) op-hook('variantAttrSymbol, 'variant, nil, 'Attr) op-hook('narrowingSymbol, 'narrowing, nil, 'Attr) op-hook('nonexecSymbol, 'nonexec, nil, 'Attr) op-hook('printSymbol, 'print, 'QidList, 'Attr) op-hook('emptyAttrSetSymbol, 'none, nil, 'AttrSet) op-hook('attrSetSymbol, '__, 'AttrSet 'AttrSet, 'AttrSet) op-hook('opDeclSymbol, 'op_:_->_`[_`]., 'Qid 'TypeList 'Type 'AttrSet, 'OpDecl) op-hook('opDeclSetSymbol, '__, 'OpDeclSet 'OpDeclSet, 'OpDeclSet) op-hook('emptyOpDeclSetSymbol, 'none, nil, 'OpDeclSet) op-hook('mbSymbol, 'mb_:_`[_`]., 'Term 'Sort 'AttrSet, 'MembAx) op-hook('cmbSymbol, 'cmb_:_if_`[_`]., 'Term 'Sort 'EqCondition 'AttrSet, 'MembAx) op-hook('emptyMembAxSetSymbol, 'none, nil, 'MembAxSet) op-hook('membAxSetSymbol, '__, 'MembAxSet 'MembAxSet, 'MembAxSet) op-hook('eqSymbol, 'eq_=_`[_`]., 'Term 'Term 'AttrSet, 'Equation) op-hook('ceqSymbol, 'ceq_=_if_`[_`]., 'Term 'Term 'EqCondition 'AttrSet, 'Equation) op-hook('emptyEquationSetSymbol, 'none, nil, 'EquationSet) op-hook('equationSetSymbol, '__, 'EquationSet 'EquationSet, 'EquationSet) op-hook('rlSymbol, 'rl_=>_`[_`]., 'Term 'Term 'AttrSet, 'Rule) op-hook('crlSymbol, 'crl_=>_if_`[_`]., 'Term 'Term 'Condition 'AttrSet, 'Rule) op-hook('emptyRuleSetSymbol, 'none, nil, 'RuleSet) op-hook('ruleSetSymbol, '__, 'RuleSet 'RuleSet, 'RuleSet) op-hook('stratDeclSymbol, 'strat_:_@_`[_`]., 'Qid 'TypeList 'Type 'AttrSet, 'StratDecl) op-hook('emptyStratDeclSetSymbol, 'none, nil, 'StratDeclSet) op-hook('stratDeclSetSymbol, '__, 'StratDeclSet 'StratDeclSet, 'StratDeclSet) op-hook('sdSymbol, 'sd_:=_`[_`]., 'CallStrategy 'Strategy 'AttrSet, 'StratDefinition) op-hook('csdSymbol, 'csd_:=_if_`[_`]., 'CallStrategy 'Strategy 'EqCondition 'AttrSet, 'StratDefinition) op-hook('emptyStratDefSetSymbol, 'none, nil, 'StratDefSet) op-hook('stratDefSetSymbol, '__, 'StratDefSet 'StratDefSet, 'StratDefSet) op-hook('fmodSymbol, 'fmod_is_sorts_.____endfm, 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet, 'FModule) op-hook('fthSymbol, 'fth_is_sorts_.____endfth, 'Qid 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet, 'FTheory) op-hook('modSymbol, 'mod_is_sorts_._____endm, 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet, 'SModule) op-hook('thSymbol, 'th_is_sorts_._____endth, 'Qid 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet, 'STheory) op-hook('smodSymbol, 'smod_is_sorts_._______endsm, 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet 'StratDeclSet 'StratDefSet, 'StratModule) op-hook('sthSymbol, 'sth_is_sorts_._______endsth, 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet 'StratDeclSet 'StratDefSet, 'StratTheory) op-hook('sortMappingSymbol, 'sort_to_., 'Sort 'Sort, 'SortMapping) op-hook('emptySortMappingSetSymbol, 'none, nil, 'SortMappingSet) op-hook('sortMappingSetSymbol, '__, 'SortMappingSet 'SortMappingSet, 'SortMappingSet) op-hook('opMappingSymbol, 'op_to_., 'Qid 'Qid, 'OpMapping) op-hook('opSpecificMappingSymbol, 'op_:_->_to_., 'Qid 'TypeList 'Type 'Qid, 'OpMapping) op-hook('opTermMappingSymbol, 'op_to`term_., 'Term 'Term, 'OpMapping) op-hook('emptyOpMappingSetSymbol, 'none, nil, 'OpMappingSet) op-hook('opMappingSetSymbol, '__, 'OpMappingSet 'OpMappingSet, 'OpMappingSet) op-hook('stratMappingSymbol, 'strat_to_., 'Qid 'Qid, 'StratMapping) op-hook('stratSpecificMappingSymbol, 'strat_:_@_to_., 'Qid 'TypeList 'Type 'Qid, 'StratMapping) op-hook('stratExprMappingSymbol, 'strat_to`expr_., 'CallStrategy 'Strategy, 'StratMapping) op-hook('emptyStratMappingSetSymbol, 'none, nil, 'StratMappingSet) op-hook('stratMappingSetSymbol, '__, 'StratMappingSet 'StratMappingSet, 'StratMappingSet) op-hook('viewSymbol, 'view_from_to_is___endv, 'Header 'ModuleExpression 'ModuleExpression 'SortMappingSet 'OpMappingSet 'StratMappingSet, 'View) op-hook('anyTypeSymbol, 'anyType, nil, 'Type?) op-hook('unificandPairSymbol, '_=?_, 'Term 'Term, 'UnificandPair) op-hook('unificationConjunctionSymbol, '_/\_, 'UnificationProblem 'UnificationProblem, 'UnificationProblem) op-hook('patternSubjectPairSymbol, '_<=?_, 'Term 'Term, 'PatternSubjectPair) op-hook('matchingConjunctionSymbol, '_/\_, 'MatchingProblem 'MatchingProblem, 'MatchingProblem) op-hook('resultPairSymbol, '`{_`,_`}, 'Term 'Type, 'ResultPair) op-hook('resultTripleSymbol, '`{_`,_`,_`}, 'Term 'Type 'Substitution, 'ResultTriple) op-hook('result4TupleSymbol, '`{_`,_`,_`,_`}, 'Term 'Type 'Substitution 'Context, 'Result4Tuple) op-hook('matchPairSymbol, '`{_`,_`}, 'Substitution 'Context, 'MatchPair) op-hook('unificationTripleSymbol, '`{_`,_`,_`}, 'Substitution 'Substitution 'Qid, 'UnificationTriple) op-hook('variantSymbol, '`{_`,_`,_`,_`,_`}, 'Term 'Substitution 'Qid 'Parent 'Bool, 'Variant) op-hook('narrowingApplyResultSymbol, '`{_`,_`,_`,_`,_`,_`,_`}, 'Term 'Type 'Context 'Qid 'Substitution 'Substitution 'Qid, 'NarrowingApplyResult) op-hook('narrowingSearchResultSymbol, '`{_`,_`,_`,_`,_`,_`}, 'Term 'Type 'Substitution 'Qid 'Substitution 'Qid, 'NarrowingSearchResult) op-hook('traceStepSymbol, '`{_`,_`,_`}, 'Term 'Type 'Rule, 'TraceStep) op-hook('nilTraceSymbol, 'nil, nil, 'Trace) op-hook('traceSymbol, '__, 'Trace 'Trace, 'Trace) op-hook('narrowingStepSymbol, '`{_`,_`,_`,_`,_`,_`,_`}, 'Context 'Qid 'Substitution 'Qid 'Term 'Type 'Substitution, 'NarrowingStep) op-hook('nilNarrowingTraceSymbol, 'nil, nil, 'NarrowingTrace) op-hook('narrowingTraceSymbol, '__, 'NarrowingTrace 'NarrowingTrace, 'NarrowingTrace) op-hook('narrowingSearchPathResultSymbol, '`{_`,_`,_`,_`,_`,_`}, 'Term 'Type 'Substitution 'NarrowingTrace 'Substitution 'Qid, 'NarrowingSearchPathResult) op-hook('smtResultSymbol, '`{_`,_`,_`,_`}, 'Term 'Substitution 'Term 'Nat, 'SmtResult) op-hook('noParseSymbol, 'noParse, 'Nat, 'ResultPair?) op-hook('ambiguitySymbol, 'ambiguity, 'ResultPair 'ResultPair, 'ResultPair?) op-hook('failure2Symbol, 'failure, nil, 'ResultPair?) op-hook('failure3Symbol, 'failure, nil, 'ResultTriple?) op-hook('failureIncomplete3Symbol, 'failureIncomplete, nil, 'ResultTriple?) op-hook('failure4Symbol, 'failure, nil, 'Result4Tuple?) op-hook('noUnifierPairSymbol, 'noUnifier, nil, 'UnificationPair?) op-hook('noUnifierTripleSymbol, 'noUnifier, nil, 'UnificationTriple?) op-hook('noUnifierIncompletePairSymbol, 'noUnifierIncomplete, nil, 'UnificationPair?) op-hook('noUnifierIncompleteTripleSymbol, 'noUnifierIncomplete, nil, 'UnificationTriple?) op-hook('noVariantSymbol, 'noVariant, nil, 'Variant?) op-hook('noVariantIncompleteSymbol, 'noVariantIncomplete, nil, 'Variant?) op-hook('narrowingApplyFailureSymbol, 'failure, nil, 'NarrowingApplyResult?) op-hook('narrowingApplyFailureIncompleteSymbol, 'failureIncomplete, nil, 'NarrowingApplyResult?) op-hook('narrowingSearchFailureSymbol, 'failure, nil, 'NarrowingSearchResult?) op-hook('narrowingSearchFailureIncompleteSymbol, 'failureIncomplete, nil, 'NarrowingSearchResult?) op-hook('narrowingSearchPathFailureSymbol, 'failure, nil, 'NarrowingSearchPathResult?) op-hook('narrowingSearchPathFailureIncompleteSymbol, 'failureIncomplete, nil, 'NarrowingSearchPathResult?) op-hook('noMatchSubstSymbol, 'noMatch, nil, 'Substitution?) op-hook('noMatchIncompleteSubstSymbol, 'noMatchIncomplete, nil, 'Substitution?) op-hook('noMatchPairSymbol, 'noMatch, nil, 'MatchPair?) op-hook('failureTraceSymbol, 'failure, nil, 'Trace?) op-hook('smtFailureSymbol, 'failure, nil, 'SmtResult?) op-hook('noStratParseSymbol, 'noStratParse, 'Nat, 'Strategy?) op-hook('stratAmbiguitySymbol, 'ambiguity, 'Strategy 'Strategy, 'Strategy?) op-hook('mixfixSymbol, 'mixfix, nil, 'PrintOption) op-hook('withParensSymbol, 'with-parens, nil, 'PrintOption) op-hook('flatSymbol, 'flat, nil, 'PrintOption) op-hook('formatPrintOptionSymbol, 'format, nil, 'PrintOption) op-hook('numberSymbol, 'number, nil, 'PrintOption) op-hook('ratSymbol, 'rat, nil, 'PrintOption) op-hook('emptyPrintOptionSetSymbol, 'none, nil, 'PrintOptionSet) op-hook('printOptionSetSymbol, '__, 'PrintOptionSet 'PrintOptionSet, 'PrintOptionSet) op-hook('delaySymbol, 'delay, nil, 'VariantOption) op-hook('filterSymbol, 'filter, nil, 'VariantOption) op-hook('emptyVariantOptionSetSymbol, 'none, nil, 'VariantOptionSet) op-hook('variantOptionSetSymbol, '__, 'VariantOptionSet 'VariantOptionSet, 'VariantOptionSet) op-hook('breadthFirstSymbol, 'breadthFirst, nil, 'SrewriteOption) op-hook('depthFirstSymbol, 'depthFirst, nil, 'SrewriteOption) op-hook('legacyUnificationPairSymbol, '`{_`,_`}, 'Substitution 'Nat, 'UnificationPair) op-hook('legacyUnificationTripleSymbol, '`{_`,_`,_`}, 'Substitution 'Substitution 'Nat, 'UnificationTriple) op-hook('legacyVariantSymbol, '`{_`,_`,_`,_`,_`}, 'Term 'Substitution 'Nat 'Parent 'Bool, 'Variant) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op 'metaRewrite : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaRewrite) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaSearch : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Condition`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultTriple?`] [special( id-hook('MetaLevelOpSymbol, 'metaSearch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaSearchPath : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Condition`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Trace?`] [special( id-hook('MetaLevelOpSymbol, 'metaSearchPath) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaSmtSearch : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Condition`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[SmtResult?`] [special( id-hook('MetaLevelOpSymbol, 'metaSmtSearch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaSrewrite : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[StrategyList`,Strategy?`] '`[SrewriteOption`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaSrewrite) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaUnify : '`[Module`] '`[UnificationProblem`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'legacyMetaUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaVariantDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [ special( id-hook('MetaLevelOpSymbol, 'legacyMetaVariantDisjointUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaVariantDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [none] . op 'metaVariantDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[VariantOptionSet`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [special( id-hook('MetaLevelOpSymbol, 'metaVariantDisjointUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaVariantMatch : '`[Module`] '`[MatchingProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[VariantOptionSet`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Substitution?`] [special( id-hook('MetaLevelOpSymbol, 'metaVariantMatch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaVariantUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'legacyMetaVariantUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaVariantUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [none] . op 'metaVariantUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[VariantOptionSet`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaVariantUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaXapply : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Substitution?`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Result4Tuple?`] [special( id-hook('MetaLevelOpSymbol, 'metaXapply) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaXmatch : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Condition`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaXmatch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metadata : 'String -> 'Attr [ctor] . op 'min : 'Nat 'Nat -> 'Nat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'min) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'min : 'NzNat 'NzNat -> 'NzNat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'min) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'minimalSorts : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaMinimalSorts) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'mixfix : nil -> 'PrintOption [ctor] . op 'modExp : '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[FindResult`,NatList`,Bound`,Parent`] [special( id-hook('NumberOpSymbol, 'modExp) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'mod_is_sorts_._____endm : 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet -> 'SModule [ctor gather('& '& '& '& '& '& '& '&) format('d 'd 's 'n++i 'ni 'd 'd 'ni 'ni 'ni 'ni 'ni 'n--i 'd)] . op 'msg : nil -> 'Attr [ctor] . op 'narrowing : nil -> 'Attr [ctor] . op 'nil : nil -> 'EqCondition [ctor] . op 'nil : nil -> 'HookList [ctor] . op 'nil : nil -> 'ImportList [ctor] . op 'nil : nil -> 'NarrowingTrace [ctor] . op 'nil : nil -> 'NatList [ctor] . op 'nil : nil -> 'ParameterDeclList [ctor] . op 'nil : nil -> 'QidList [ctor] . op 'nil : nil -> 'Trace [ctor] . op 'nil : nil -> 'TypeList [ctor] . op 'noMatch : nil -> 'MatchPair? [ctor] . op 'noMatch : nil -> 'Substitution? [ctor] . op 'noMatchIncomplete : nil -> 'Substitution? [ctor] . op 'noParse : 'Nat -> 'ResultPair? [ctor] . op 'noStratParse : 'Nat -> 'Strategy? [ctor] . op 'noUnifier : nil -> 'UnificationPair? [ctor] . op 'noUnifier : nil -> 'UnificationTriple? [ctor] . op 'noUnifierIncomplete : nil -> 'UnificationPair? [ctor] . op 'noUnifierIncomplete : nil -> 'UnificationTriple? [ctor] . op 'noVariant : nil -> 'Variant? [ctor] . op 'noVariantIncomplete : nil -> 'Variant? [ctor] . op 'none : nil -> 'AttrSet [ctor] . op 'none : nil -> 'EmptyQidSet [ctor] . op 'none : nil -> 'EquationSet [ctor] . op 'none : nil -> 'MembAxSet [ctor] . op 'none : nil -> 'OpDeclSet [ctor] . op 'none : nil -> 'OpMappingSet [ctor] . op 'none : nil -> 'Parent [none] . op 'none : nil -> 'PrintOptionSet [ctor] . op 'none : nil -> 'QidSet [ctor] . op 'none : nil -> 'RuleSet [ctor] . op 'none : nil -> 'SortMappingSet [ctor] . op 'none : nil -> 'StratDeclSet [ctor] . op 'none : nil -> 'StratDefSet [ctor] . op 'none : nil -> 'StratMappingSet [ctor] . op 'none : nil -> 'SubsortDeclSet [ctor] . op 'none : nil -> 'Substitution [ctor] . op 'none : nil -> 'VariantOptionSet [ctor] . op 'nonexec : nil -> 'Attr [ctor] . op 'not : 'Strategy -> 'Strategy [ctor] . op 'notFound : nil -> 'FindResult [ctor] . op 'not_ : 'Bool -> 'Bool [prec(53)] . op 'number : nil -> 'PrintOption [ctor] . op 'object : nil -> 'Attr [ctor] . op 'occurs : 'Nat 'NatList -> 'Bool [none] . op 'occurs : 'Qid 'QidList -> 'Bool [none] . op 'one : 'Strategy -> 'Strategy [ctor] . op 'op-hook : 'Qid 'Qid 'QidList 'Qid -> 'Hook [ctor format('nssss 'd)] . op 'op_:_->_`[_`]. : 'Qid 'TypeList 'Type 'AttrSet -> 'OpDecl [ctor format('d 'd 'd 'd 'd 'd 's 'd 'd 's 'd)] . op 'op_:_->_to_. : 'Qid 'TypeList 'Type 'Qid -> 'OpMapping [ctor] . op 'op_:_->_to_`[_`] : 'Qid 'TypeList 'Type 'Qid 'AttrSet -> 'Renaming [ctor format('d 'd 'd 'd 'd 'd 'd 'd 's 'd 'd 'd)] . op 'op_to_. : 'Qid 'Qid -> 'OpMapping [ctor] . op 'op_to_`[_`] : 'Qid 'Qid 'AttrSet -> 'Renaming [ctor format('d 'd 'd 'd 's 'd 'd 'd)] . op 'op_to`term_. : 'Term 'Term -> 'OpMapping [ctor] . op 'owise : nil -> 'Attr [ctor] . op 'poly : 'NeNatList -> 'Attr [ctor] . op 'prec : 'Nat -> 'Attr [ctor] . op 'print : 'QidList -> 'Attr [ctor] . op 'protecting_. : 'ModuleExpression -> 'Import [ctor] . op 'qid : '`[String`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('QuotedIdentifierOpSymbol, 'qid) op-hook('quotedIdentifierSymbol, ', nil, 'Qid) op-hook('stringSymbol, ', nil, 'Char))] . op 'rat : nil -> 'PrintOption [ctor] . op 'reverse : 'NatList -> 'NatList [none] . op 'reverse : 'NeNatList -> 'NeNatList [none] . op 'reverse : 'NeQidList -> 'NeQidList [none] . op 'reverse : 'QidList -> 'QidList [none] . op 'rfind : 'String 'String 'Nat -> 'FindResult [special( id-hook('StringOpSymbol, 'rfind) op-hook('stringSymbol, ', nil, 'Char) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('notFoundTerm, 'notFound.FindResult))] . op 'right-id : 'Term -> 'Attr [ctor] . op 'rl_=>_`[_`]. : 'Term 'Term 'AttrSet -> 'Rule [ctor format('d 'd 'd 'd 's 'd 'd 's 'd)] . op 's_ : 'Nat -> 'NzNat [iter ctor special( id-hook('SuccSymbol, nil) term-hook('zeroTerm, '0.Zero))] . op 'sameKind : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[Bool`] [special( id-hook('MetaLevelOpSymbol, 'metaSameKind) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'sd : 'Nat 'Nat -> 'Nat [comm special( id-hook('CUI_NumberOpSymbol, 'sd) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'sd_:=_`[_`]. : 'CallStrategy 'Strategy 'AttrSet -> 'StratDefinition [ctor format('d 'd 'd 'd 's 'd 'd 's 'd)] . op 'size : 'NatList -> 'Nat [none] . op 'size : 'NeNatList -> 'NzNat [none] . op 'size : 'NeQidList -> 'NzNat [none] . op 'size : 'QidList -> 'Nat [none] . op 'smod_is_sorts_._______endsm : 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet 'StratDeclSet 'StratDefSet -> 'StratModule [ctor gather('& '& '& '& '& '& '& '& '& '&) format('d 'd 's 'n++i 'ni 'd 'd 'ni 'ni 'ni 'ni 'ni 'ni 'ni 'n--i 'd)] . op 'sortLeq : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[Bool`] [special( id-hook('MetaLevelOpSymbol, 'metaSortLeq) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'sort_to_ : 'Qid 'Qid -> 'Renaming [ctor] . op 'sort_to_. : 'Sort 'Sort -> 'SortMapping [ctor] . op 'special : 'NeHookList -> 'Attr [ctor] . op 'sth_is_sorts_._______endsth : 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet 'StratDeclSet 'StratDefSet -> 'StratTheory [ctor gather('& '& '& '& '& '& '& '& '& '&) format('d 'd 's 'n++i 'ni 'd 'd 'ni 'ni 'ni 'ni 'ni 'ni 'ni 'n--i 'd)] . op 'strat : 'NeNatList -> 'Attr [ctor] . op 'strat_:_@_`[_`]. : 'Qid 'TypeList 'Type 'AttrSet -> 'StratDecl [ctor format('d 'd 'd 'd 'd 'd 's 'd 'd 's 'd)] . op 'strat_:_@_to_ : 'Qid 'TypeList 'Type 'Qid -> 'Renaming [ctor] . op 'strat_:_@_to_. : 'Qid 'TypeList 'Type 'Qid -> 'StratMapping [ctor] . op 'strat_to_ : 'Qid 'Qid -> 'Renaming [ctor] . op 'strat_to_. : 'Qid 'Qid -> 'StratMapping [ctor] . op 'strat_to`expr_. : 'CallStrategy 'Strategy -> 'StratMapping [ctor] . op 'string : 'Qid -> 'String [special( id-hook('QuotedIdentifierOpSymbol, 'string) op-hook('quotedIdentifierSymbol, ', nil, 'Qid) op-hook('stringSymbol, ', nil, 'Char))] . op 'subsort_<_. : 'Sort 'Sort -> 'SubsortDecl [ctor] . op 'substr : 'String 'Nat 'Nat -> 'String [special( id-hook('StringOpSymbol, 'substr) op-hook('stringSymbol, ', nil, 'Char) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'tail : 'NeNatList -> 'NatList [none] . op 'tail : 'NeQidList -> 'QidList [none] . op 'term-hook : 'Qid 'Term -> 'Hook [ctor format('nssss 'd)] . op 'test : 'Strategy -> 'Strategy [ctor] . op 'th_is_sorts_._____endth : 'Qid 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet -> 'STheory [ctor gather('& '& '& '& '& '& '& '&) format('d 'd 'd 'n++i 'ni 'd 'd 'ni 'ni 'ni 'ni 'ni 'n--i 'd)] . op 'top : 'RuleApplication -> 'Strategy [ctor] . op 'true : nil -> 'Bool [ctor special( id-hook('SystemTrue, nil))] . op 'try : 'Strategy -> 'Strategy [ctor] . op 'unbounded : nil -> 'Bound [ctor] . op 'union : 'NeQidSet 'QidSet -> 'NeQidSet [none] . op 'union : 'QidSet 'NeQidSet -> 'NeQidSet [none] . op 'union : 'QidSet 'QidSet -> 'QidSet [none] . op 'upEqs : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[EquationSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpEqs) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upImports : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ImportList`] [special( id-hook('MetaLevelOpSymbol, 'metaUpImports) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upMbs : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[MembAxSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpMbs) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upModule : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[Module`] [special( id-hook('MetaLevelOpSymbol, 'metaUpModule) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upOpDecls : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[OpDeclSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpOpDecls) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upRls : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[RuleSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpRls) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upSds : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[StratDefSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpSds) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upSorts : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaUpSorts) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upStratDecls : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[StratDeclSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpStratDecls) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upSubsortDecls : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[SubsortDeclSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpSubsortDecls) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upTerm : 'Universal -> 'Term [poly(1) special( id-hook('MetaLevelOpSymbol, 'metaUpTerm) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upView : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[View`] [special( id-hook('MetaLevelOpSymbol, 'metaUpView) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upperCase : 'String -> 'String [special( id-hook('StringOpSymbol, 'upperCase) op-hook('stringSymbol, ', nil, 'Char))] . op 'variant : nil -> 'Attr [ctor] . op 'view_from_to_is___endv : 'Header 'ModuleExpression 'ModuleExpression 'SortMappingSet 'OpMappingSet 'StratMappingSet -> 'View [ctor gather('& '& '& '& '& '&) format('d 'd 'd 'd 'd 'd 'd 'n++i 'ni 'ni 'n--i 'd)] . op 'wellFormed : 'Module -> 'Bool [special( id-hook('MetaLevelOpSymbol, 'metaWellFormedModule) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'wellFormed : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[Bool`] [special( id-hook('MetaLevelOpSymbol, 'metaWellFormedTerm) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'wellFormed : '`[Module`] '`[Substitution?`] -> '`[Bool`] [special( id-hook('MetaLevelOpSymbol, 'metaWellFormedSubstitution) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'with-parens : nil -> 'PrintOption [ctor] . op 'xmatch_s.t._ : 'Term 'EqCondition -> 'Strategy [ctor prec(21)] . op 'xmatchrew_s.t._by_ : 'Term 'EqCondition 'UsingPairSet -> 'Strategy [ctor] . op '|_| : 'NeQidSet -> 'NzNat [none] . op '|_| : 'QidSet -> 'Nat [none] . ========================================== reduce in META-LEVEL : upOpDecls('META-LEVEL, false) . rewrites: 1 result OpDeclSet: op '$applySubstitution : 'NeTermList 'Substitution -> 'Term [ none] . op '_/\_ : 'MatchingProblem 'MatchingProblem -> 'MatchingProblem [assoc comm ctor prec(73)] . op '_/\_ : 'UnificationProblem 'UnificationProblem -> 'UnificationProblem [ assoc comm ctor prec(73)] . op '_;_ : 'NeVariableSet 'VariableSet -> 'NeVariableSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_;_ : 'VariableSet 'VariableSet -> 'VariableSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_<=?_ : 'Term 'Term -> 'PatternSubjectPair [ctor prec(71)] . op '_=?_ : 'Term 'Term -> 'UnificandPair [ctor prec(71)] . op '__ : 'NarrowingTrace 'NarrowingTrace -> 'NarrowingTrace [assoc ctor id( 'nil.NarrowingTrace)] . op '__ : 'PrintOptionSet 'PrintOptionSet -> 'PrintOptionSet [assoc comm ctor id('none.PrintOptionSet)] . op '__ : 'Trace 'Trace -> 'Trace [assoc ctor id('nil.Trace) format('d 'n 'd)] . op '__ : 'VariantOptionSet 'VariantOptionSet -> 'VariantOptionSet [assoc comm ctor id('none.VariantOptionSet)] . op '`{_`,_`,_`,_`,_`,_`,_`} : 'Context 'Qid 'Substitution 'Qid 'Term 'Type 'Substitution -> 'NarrowingStep [ctor format('ni 'n++i 'd 'ni 'd 'd 'd 'ni 'd 'ni 'd 'd 'd 'd 'n--i 'd)] . op '`{_`,_`,_`,_`,_`,_`,_`} : 'Term 'Type 'Context 'Qid 'Substitution 'Substitution 'Qid -> 'NarrowingApplyResult [ctor format('d 'n++i 'd 'd 'd 'ni 'd 'ni 'd 'd 'd 'd 'd 'ni 'n--i 'd)] . op '`{_`,_`,_`,_`,_`,_`} : 'Term 'Type 'Substitution 'NarrowingTrace 'Substitution 'Qid -> 'NarrowingSearchPathResult [ctor format('d 'n++i 'd 'd 'd 'd 'd 'd 'd 'd 'd 'ni 'n--i 'd)] . op '`{_`,_`,_`,_`,_`,_`} : 'Term 'Type 'Substitution 'Qid 'Substitution 'Qid -> 'NarrowingSearchResult [ctor format('d 'n++i 'd 'd 'd 'd 'd 'ni 'd 'd 'd 'ni 'n--i 'd)] . op '`{_`,_`,_`,_`,_`} : 'Term 'Substitution 'Nat 'Parent 'Bool -> 'Variant [ ctor] . op '`{_`,_`,_`,_`,_`} : 'Term 'Substitution 'Qid 'Parent 'Bool -> 'Variant [ ctor] . op '`{_`,_`,_`,_`} : 'Term 'Substitution 'Term 'Nat -> 'SmtResult [ctor] . op '`{_`,_`,_`,_`} : 'Term 'Type 'Substitution 'Context -> 'Result4Tuple [ctor] . op '`{_`,_`,_`} : 'Substitution 'Substitution 'Nat -> 'UnificationTriple [ctor] . op '`{_`,_`,_`} : 'Substitution 'Substitution 'Qid -> 'UnificationTriple [ctor] . op '`{_`,_`,_`} : 'Term 'Type 'Rule -> 'TraceStep [ctor] . op '`{_`,_`,_`} : 'Term 'Type 'Substitution -> 'ResultTriple [ctor] . op '`{_`,_`} : 'Substitution 'Context -> 'MatchPair [ctor] . op '`{_`,_`} : 'Substitution 'Nat -> 'UnificationPair [ctor] . op '`{_`,_`} : 'Substitution 'Qid -> 'UnificationPair [ctor] . op '`{_`,_`} : 'Term 'Type -> 'ResultPair [ctor] . op 'ambiguity : 'ResultPair 'ResultPair -> 'ResultPair? [ctor] . op 'ambiguity : 'Strategy 'Strategy -> 'Strategy? [ctor] . op 'anyType : nil -> 'Type? [ctor] . op 'applySubstitution : 'Module 'Term 'Substitution -> 'Term [none] . op 'breadthFirst : nil -> 'SrewriteOption [ctor] . op 'completeName : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaCompleteName) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'delay : nil -> 'VariantOption [ctor] . op 'depthFirst : nil -> 'SrewriteOption [ctor] . op 'downTerm : 'Term 'Universal -> 'Universal [poly(2 0) special( id-hook('MetaLevelOpSymbol, 'metaDownTerm) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'failure : nil -> 'NarrowingApplyResult? [ctor] . op 'failure : nil -> 'NarrowingSearchPathResult? [ctor] . op 'failure : nil -> 'NarrowingSearchResult? [ctor] . op 'failure : nil -> 'Result4Tuple? [ctor] . op 'failure : nil -> 'ResultPair? [ctor] . op 'failure : nil -> 'ResultTriple? [ctor] . op 'failure : nil -> 'SmtResult? [ctor] . op 'failure : nil -> 'Trace? [ctor] . op 'failureIncomplete : nil -> 'NarrowingApplyResult? [ctor] . op 'failureIncomplete : nil -> 'NarrowingSearchPathResult? [ctor] . op 'failureIncomplete : nil -> 'NarrowingSearchResult? [ctor] . op 'failureIncomplete : nil -> 'ResultTriple? [ctor] . op 'filter : nil -> 'VariantOption [ctor] . op 'flat : nil -> 'PrintOption [ctor] . op 'format : nil -> 'PrintOption [ctor] . op 'getAccumulatedSubstitution : 'NarrowingSearchResult -> 'Substitution [none] . op 'getAccumulatedSubstitution : 'NarrowingStep -> 'Substitution [none] . op 'getContext : 'MatchPair -> 'Context [none] . op 'getContext : 'NarrowingApplyResult -> 'Context [none] . op 'getContext : 'NarrowingStep -> 'Context [none] . op 'getContext : 'Result4Tuple -> 'Context [none] . op 'getInitialSubstitution : 'NarrowingSearchPathResult -> 'Substitution [none] . op 'getInitialTerm : 'NarrowingSearchPathResult -> 'Term [none] . op 'getInitialType : 'NarrowingSearchPathResult -> 'Type [none] . op 'getKind : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaGetKind) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'getKinds : '`[Module`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaGetKinds) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'getLabel : 'NarrowingApplyResult -> 'Qid [none] . op 'getLabel : 'NarrowingStep -> 'Qid [none] . op 'getLhsSubstitution : 'UnificationTriple -> 'Substitution [none] . op 'getMoreVariantsInLayerFlag : 'Variant -> 'Bool [none] . op 'getParent : 'Variant -> 'Parent [none] . op 'getRhsSubstitution : 'UnificationTriple -> 'Substitution [none] . op 'getRule : 'TraceStep -> 'Rule [none] . op 'getRuleSubstitution : 'NarrowingApplyResult -> 'Substitution [none] . op 'getStateVariableFamily : 'NarrowingSearchResult -> 'Qid [none] . op 'getSubstitution : 'MatchPair -> 'Substitution [none] . op 'getSubstitution : 'Result4Tuple -> 'Substitution [none] . op 'getSubstitution : 'ResultTriple -> 'Substitution [none] . op 'getSubstitution : 'UnificationPair -> 'Substitution [none] . op 'getSubstitution : 'Variant -> 'Substitution [none] . op 'getTerm : 'NarrowingApplyResult -> 'Term [none] . op 'getTerm : 'NarrowingSearchResult -> 'Term [none] . op 'getTerm : 'NarrowingStep -> 'Term [none] . op 'getTerm : 'Result4Tuple -> 'Term [none] . op 'getTerm : 'ResultPair -> 'Term [none] . op 'getTerm : 'ResultTriple -> 'Term [none] . op 'getTerm : 'TraceStep -> 'Term [none] . op 'getTerm : 'Variant -> 'Term [none] . op 'getTermSubstitution : 'NarrowingApplyResult -> 'Substitution [none] . op 'getTrace : 'NarrowingSearchPathResult -> 'NarrowingTrace [none] . op 'getType : 'NarrowingApplyResult -> 'Type [none] . op 'getType : 'NarrowingSearchResult -> 'Type [none] . op 'getType : 'NarrowingStep -> 'Type [none] . op 'getType : 'Result4Tuple -> 'Type [none] . op 'getType : 'ResultPair -> 'Type [none] . op 'getType : 'ResultTriple -> 'Type [none] . op 'getType : 'TraceStep -> 'Type [none] . op 'getUnifier : 'NarrowingSearchPathResult -> 'Substitution [none] . op 'getUnifier : 'NarrowingSearchResult -> 'Substitution [none] . op 'getUnifier : 'NarrowingStep -> 'Substitution [none] . op 'getUnifierVariableFamily : 'NarrowingSearchPathResult -> 'Qid [none] . op 'getUnifierVariableFamily : 'NarrowingSearchResult -> 'Qid [none] . op 'getUnifierVariableFamily : 'NarrowingStep -> 'Qid [none] . op 'getVariableFamily : 'NarrowingApplyResult -> 'Qid [none] . op 'getVariableFamily : 'UnificationPair -> 'Qid [none] . op 'getVariableFamily : 'UnificationTriple -> 'Qid [none] . op 'getVariableFamily : 'Variant -> 'Qid [none] . op 'glbSorts : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaGlbSorts) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'leastSort : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaLeastSort) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'lesserSorts : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaLesserSorts) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'maximalAritySet : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaMaximalAritySet) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'maximalSorts : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaMaximalSorts) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaApply : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Substitution?`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultTriple?`] [special( id-hook('MetaLevelOpSymbol, 'metaApply) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaCheck : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[Bool`] [special( id-hook('MetaLevelOpSymbol, 'metaCheck) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [ special( id-hook('MetaLevelOpSymbol, 'legacyMetaDisjointUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [ special( id-hook('MetaLevelOpSymbol, 'metaDisjointUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaFrewrite : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaFrewrite) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaGetIrredundantVariant : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Variant?`] [special( id-hook('MetaLevelOpSymbol, 'legacyMetaGetIrredundantVariant) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaGetIrredundantVariant : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Variant?`] [special( id-hook('MetaLevelOpSymbol, 'metaGetIrredundantVariant) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaGetVariant : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Variant?`] [special( id-hook('MetaLevelOpSymbol, 'legacyMetaGetVariant) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaGetVariant : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Variant?`] [special( id-hook('MetaLevelOpSymbol, 'metaGetVariant) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaIrredundantDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [ special( id-hook('MetaLevelOpSymbol, 'metaIrredundantDisjointUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaIrredundantUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaIrredundantUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaMatch : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Condition`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Substitution?`] [special( id-hook('MetaLevelOpSymbol, 'metaMatch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNarrow : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[Bool`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaNarrow2) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNarrow : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultTriple?`] [special( id-hook('MetaLevelOpSymbol, 'metaNarrow) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNarrowingApply : 'Module 'Term 'TermList 'Qid 'Nat -> 'NarrowingApplyResult? [none] . op 'metaNarrowingApply : 'Module 'Term 'TermList 'Qid 'VariantOptionSet 'Nat -> 'NarrowingApplyResult? [special( id-hook('MetaLevelOpSymbol, 'metaNarrowingApply) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNarrowingSearch : 'Module 'Term 'Term 'Qid 'Bound 'Qid 'Nat -> 'NarrowingSearchResult? [none] . op 'metaNarrowingSearch : 'Module 'Term 'Term 'Qid 'Bound 'Qid 'VariantOptionSet 'Nat -> 'NarrowingSearchResult? [special( id-hook('MetaLevelOpSymbol, 'metaNarrowingSearch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNarrowingSearchPath : 'Module 'Term 'Term 'Qid 'Bound 'Qid 'Nat -> 'NarrowingSearchPathResult? [none] . op 'metaNarrowingSearchPath : 'Module 'Term 'Term 'Qid 'Bound 'Qid 'VariantOptionSet 'Nat -> 'NarrowingSearchPathResult? [special( id-hook('MetaLevelOpSymbol, 'metaNarrowingSearchPath) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNormalize : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaNormalize) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaParse : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ResultPair?`] [ none] . op 'metaParse : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaParse) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaParseStrategy : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[StrategyList`,Strategy?`] [special( id-hook('MetaLevelOpSymbol, 'metaParseStrategy) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaPrettyPrint : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [none] . op 'metaPrettyPrint : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[PrintOptionSet`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [none] . op 'metaPrettyPrint : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[PrintOptionSet`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaPrettyPrint) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaPrettyPrintStrategy : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[StrategyList`,Strategy?`] '`[PrintOptionSet`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaPrettyPrintStrategy) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaReduce : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaReduce) op-hook('qidSymbol, ', nil, 'Qid) op-hook('metaTermSymbol, '_`[_`], 'Qid 'NeGroundTermList, 'GroundTerm) op-hook('metaArgSymbol, '_`,_, 'NeGroundTermList 'GroundTermList, 'NeGroundTermList) op-hook('emptyTermListSymbol, 'empty, nil, 'GroundTermList) op-hook('assignmentSymbol, '_<-_, 'Variable 'Term, 'Assignment) op-hook('emptySubstitutionSymbol, 'none, nil, 'Substitution) op-hook('substitutionSymbol, '_;_, 'Substitution 'Substitution, 'Substitution) op-hook('holeSymbol, '`[`], nil, 'Context) op-hook('noConditionSymbol, 'nil, nil, 'EqCondition) op-hook('equalityConditionSymbol, '_=_, 'Term 'Term, 'EqCondition) op-hook('sortTestConditionSymbol, '_:_, 'Term 'Sort, 'EqCondition) op-hook('matchConditionSymbol, '_:=_, 'Term 'Term, 'EqCondition) op-hook('rewriteConditionSymbol, '_=>_, 'Term 'Term, 'Condition) op-hook('conjunctionSymbol, '_/\_, 'EqCondition 'EqCondition, 'EqCondition) op-hook('failStratSymbol, 'fail, nil, 'Strategy) op-hook('idleStratSymbol, 'idle, nil, 'Strategy) op-hook('allStratSymbol, 'all, nil, 'RuleApplication) op-hook('applicationStratSymbol, '_`[_`]`{_`}, 'Qid 'Substitution 'StrategyList, 'RuleApplication) op-hook('topStratSymbol, 'top, 'RuleApplication, 'Strategy) op-hook('matchStratSymbol, 'match_s.t._, 'Term 'EqCondition, 'Strategy) op-hook('xmatchStratSymbol, 'xmatch_s.t._, 'Term 'EqCondition, 'Strategy) op-hook('amatchStratSymbol, 'amatch_s.t._, 'Term 'EqCondition, 'Strategy) op-hook('unionStratSymbol, '_|_, 'Strategy 'Strategy, 'Strategy) op-hook('concatStratSymbol, '_;_, 'Strategy 'Strategy, 'Strategy) op-hook('orelseStratSymbol, '_or-else_, 'Strategy 'Strategy, 'Strategy) op-hook('plusStratSymbol, '_+, 'Strategy, 'Strategy) op-hook('conditionalStratSymbol, '_?_:_, 'Strategy 'Strategy 'Strategy, 'Strategy) op-hook('matchrewStratSymbol, 'matchrew_s.t._by_, 'Term 'EqCondition 'UsingPairSet, 'Strategy) op-hook('xmatchrewStratSymbol, 'xmatchrew_s.t._by_, 'Term 'EqCondition 'UsingPairSet, 'Strategy) op-hook('amatchrewStratSymbol, 'amatchrew_s.t._by_, 'Term 'EqCondition 'UsingPairSet, 'Strategy) op-hook('callStratSymbol, '_`[`[_`]`], 'Qid 'TermList, 'CallStrategy) op-hook('oneStratSymbol, 'one, 'Strategy, 'Strategy) op-hook('starStratSymbol, '_*, 'Strategy, 'Strategy) op-hook('normalizationStratSymbol, '_!, 'Strategy, 'Strategy) op-hook('notStratSymbol, 'not, 'Strategy, 'Strategy) op-hook('testStratSymbol, 'test, 'Strategy, 'Strategy) op-hook('tryStratSymbol, 'try, 'Strategy, 'Strategy) op-hook('usingStratSymbol, '_using_, 'Variable 'Strategy, 'UsingPair) op-hook('usingListStratSymbol, '_`,_, 'UsingPairSet 'UsingPairSet, 'UsingPairSet) op-hook('emptyStratListSymbol, 'empty, nil, 'StrategyList) op-hook('stratListSymbol, '_`,_, 'StrategyList 'StrategyList, 'StrategyList) op-hook('headerSymbol, '_`{_`}, 'Qid 'ParameterDeclList, 'Header) op-hook('parameterDeclSymbol, '_::_, 'Sort 'ModuleExpression, 'ParameterDecl) op-hook('parameterDeclListSymbol, '_`,_, 'ParameterDeclList 'ParameterDeclList, 'ParameterDeclList) op-hook('protectingSymbol, 'protecting_., 'ModuleExpression, 'Import) op-hook('extendingSymbol, 'extending_., 'ModuleExpression, 'Import) op-hook('includingSymbol, 'including_., 'ModuleExpression, 'Import) op-hook('nilImportListSymbol, 'nil, nil, 'ImportList) op-hook('importListSymbol, '__, 'ImportList 'ImportList, 'ImportList) op-hook('emptySortSetSymbol, 'none, nil, 'QidSet) op-hook('sortSetSymbol, '_;_, 'QidSet 'QidSet, 'QidSet) op-hook('subsortSymbol, 'subsort_<_., 'Sort 'Sort, 'SubsortDecl) op-hook('emptySubsortDeclSetSymbol, 'none, nil, 'SubsortDeclSet) op-hook('subsortDeclSetSymbol, '__, 'SubsortDeclSet 'SubsortDeclSet, 'SubsortDeclSet) op-hook('nilQidListSymbol, 'nil, nil, 'QidList) op-hook('qidListSymbol, '__, 'QidList 'QidList, 'QidList) op-hook('emptyQidSetSymbol, 'none, nil, 'QidSet) op-hook('qidSetSymbol, '_;_, 'QidSet 'QidSet, 'QidSet) op-hook('succSymbol, 's_, 'Nat, 'NzNat) op-hook('natListSymbol, '__, 'NatList 'NatList, 'NatList) op-hook('unboundedSymbol, 'unbounded, nil, 'Bound) op-hook('noParentSymbol, 'none, nil, 'Parent) op-hook('stringSymbol, ', nil, 'Char) op-hook('sortRenamingSymbol, 'sort_to_, 'Qid 'Qid, 'Renaming) op-hook('opRenamingSymbol, 'op_to_`[_`], 'Qid 'Qid 'AttrSet, 'Renaming) op-hook('opRenamingSymbol2, 'op_:_->_to_`[_`], 'Qid 'TypeList 'Type 'Qid 'AttrSet, 'Renaming) op-hook('labelRenamingSymbol, 'label_to_, 'Qid 'Qid, 'Renaming) op-hook('stratRenamingSymbol, 'strat_to_, 'Qid 'Qid, 'Renaming) op-hook('stratRenamingSymbol2, 'strat_:_@_to_, 'Qid 'TypeList 'Type 'Qid, 'Renaming) op-hook('renamingSetSymbol, '_`,_, 'RenamingSet 'RenamingSet, 'RenamingSet) op-hook('sumSymbol, '_+_, 'ModuleExpression 'ModuleExpression, 'ModuleExpression) op-hook('renamingSymbol, '_*`(_`), 'ModuleExpression 'RenamingSet, 'ModuleExpression) op-hook('instantiationSymbol, '_`{_`}, 'Expression 'NeParameterList, 'Expression) op-hook('termHookSymbol, 'term-hook, 'Qid 'Term, 'Hook) op-hook('hookListSymbol, '__, 'HookList 'HookList, 'HookList) op-hook('idHookSymbol, 'id-hook, 'Qid 'QidList, 'Hook) op-hook('opHookSymbol, 'op-hook, 'Qid 'Qid 'QidList 'Qid, 'Hook) op-hook('assocSymbol, 'assoc, nil, 'Attr) op-hook('commSymbol, 'comm, nil, 'Attr) op-hook('idemSymbol, 'idem, nil, 'Attr) op-hook('iterSymbol, 'iter, nil, 'Attr) op-hook('idSymbol, 'id, 'Term, 'Attr) op-hook('leftIdSymbol, 'left-id, 'Term, 'Attr) op-hook('rightIdSymbol, 'right-id, 'Term, 'Attr) op-hook('stratSymbol, 'strat, 'NeNatList, 'Attr) op-hook('memoSymbol, 'memo, nil, 'Attr) op-hook('precSymbol, 'prec, 'Nat, 'Attr) op-hook('gatherSymbol, 'gather, 'QidList, 'Attr) op-hook('formatSymbol, 'format, 'QidList, 'Attr) op-hook('ctorSymbol, 'ctor, nil, 'Attr) op-hook('frozenSymbol, 'frozen, 'NeNatList, 'Attr) op-hook('polySymbol, 'poly, 'NeNatList, 'Attr) op-hook('configSymbol, 'config, nil, 'Attr) op-hook('objectSymbol, 'object, nil, 'Attr) op-hook('msgSymbol, 'msg, nil, 'Attr) op-hook('specialSymbol, 'special, 'NeHookList, 'Attr) op-hook('labelSymbol, 'label, 'Qid, 'Attr) op-hook('metadataSymbol, 'metadata, 'String, 'Attr) op-hook('owiseSymbol, 'owise, nil, 'Attr) op-hook('variantAttrSymbol, 'variant, nil, 'Attr) op-hook('narrowingSymbol, 'narrowing, nil, 'Attr) op-hook('nonexecSymbol, 'nonexec, nil, 'Attr) op-hook('printSymbol, 'print, 'QidList, 'Attr) op-hook('emptyAttrSetSymbol, 'none, nil, 'AttrSet) op-hook('attrSetSymbol, '__, 'AttrSet 'AttrSet, 'AttrSet) op-hook('opDeclSymbol, 'op_:_->_`[_`]., 'Qid 'TypeList 'Type 'AttrSet, 'OpDecl) op-hook('opDeclSetSymbol, '__, 'OpDeclSet 'OpDeclSet, 'OpDeclSet) op-hook('emptyOpDeclSetSymbol, 'none, nil, 'OpDeclSet) op-hook('mbSymbol, 'mb_:_`[_`]., 'Term 'Sort 'AttrSet, 'MembAx) op-hook('cmbSymbol, 'cmb_:_if_`[_`]., 'Term 'Sort 'EqCondition 'AttrSet, 'MembAx) op-hook('emptyMembAxSetSymbol, 'none, nil, 'MembAxSet) op-hook('membAxSetSymbol, '__, 'MembAxSet 'MembAxSet, 'MembAxSet) op-hook('eqSymbol, 'eq_=_`[_`]., 'Term 'Term 'AttrSet, 'Equation) op-hook('ceqSymbol, 'ceq_=_if_`[_`]., 'Term 'Term 'EqCondition 'AttrSet, 'Equation) op-hook('emptyEquationSetSymbol, 'none, nil, 'EquationSet) op-hook('equationSetSymbol, '__, 'EquationSet 'EquationSet, 'EquationSet) op-hook('rlSymbol, 'rl_=>_`[_`]., 'Term 'Term 'AttrSet, 'Rule) op-hook('crlSymbol, 'crl_=>_if_`[_`]., 'Term 'Term 'Condition 'AttrSet, 'Rule) op-hook('emptyRuleSetSymbol, 'none, nil, 'RuleSet) op-hook('ruleSetSymbol, '__, 'RuleSet 'RuleSet, 'RuleSet) op-hook('stratDeclSymbol, 'strat_:_@_`[_`]., 'Qid 'TypeList 'Type 'AttrSet, 'StratDecl) op-hook('emptyStratDeclSetSymbol, 'none, nil, 'StratDeclSet) op-hook('stratDeclSetSymbol, '__, 'StratDeclSet 'StratDeclSet, 'StratDeclSet) op-hook('sdSymbol, 'sd_:=_`[_`]., 'CallStrategy 'Strategy 'AttrSet, 'StratDefinition) op-hook('csdSymbol, 'csd_:=_if_`[_`]., 'CallStrategy 'Strategy 'EqCondition 'AttrSet, 'StratDefinition) op-hook('emptyStratDefSetSymbol, 'none, nil, 'StratDefSet) op-hook('stratDefSetSymbol, '__, 'StratDefSet 'StratDefSet, 'StratDefSet) op-hook('fmodSymbol, 'fmod_is_sorts_.____endfm, 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet, 'FModule) op-hook('fthSymbol, 'fth_is_sorts_.____endfth, 'Qid 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet, 'FTheory) op-hook('modSymbol, 'mod_is_sorts_._____endm, 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet, 'SModule) op-hook('thSymbol, 'th_is_sorts_._____endth, 'Qid 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet, 'STheory) op-hook('smodSymbol, 'smod_is_sorts_._______endsm, 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet 'StratDeclSet 'StratDefSet, 'StratModule) op-hook('sthSymbol, 'sth_is_sorts_._______endsth, 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet 'StratDeclSet 'StratDefSet, 'StratTheory) op-hook('sortMappingSymbol, 'sort_to_., 'Sort 'Sort, 'SortMapping) op-hook('emptySortMappingSetSymbol, 'none, nil, 'SortMappingSet) op-hook('sortMappingSetSymbol, '__, 'SortMappingSet 'SortMappingSet, 'SortMappingSet) op-hook('opMappingSymbol, 'op_to_., 'Qid 'Qid, 'OpMapping) op-hook('opSpecificMappingSymbol, 'op_:_->_to_., 'Qid 'TypeList 'Type 'Qid, 'OpMapping) op-hook('opTermMappingSymbol, 'op_to`term_., 'Term 'Term, 'OpMapping) op-hook('emptyOpMappingSetSymbol, 'none, nil, 'OpMappingSet) op-hook('opMappingSetSymbol, '__, 'OpMappingSet 'OpMappingSet, 'OpMappingSet) op-hook('stratMappingSymbol, 'strat_to_., 'Qid 'Qid, 'StratMapping) op-hook('stratSpecificMappingSymbol, 'strat_:_@_to_., 'Qid 'TypeList 'Type 'Qid, 'StratMapping) op-hook('stratExprMappingSymbol, 'strat_to`expr_., 'CallStrategy 'Strategy, 'StratMapping) op-hook('emptyStratMappingSetSymbol, 'none, nil, 'StratMappingSet) op-hook('stratMappingSetSymbol, '__, 'StratMappingSet 'StratMappingSet, 'StratMappingSet) op-hook('viewSymbol, 'view_from_to_is___endv, 'Header 'ModuleExpression 'ModuleExpression 'SortMappingSet 'OpMappingSet 'StratMappingSet, 'View) op-hook('anyTypeSymbol, 'anyType, nil, 'Type?) op-hook('unificandPairSymbol, '_=?_, 'Term 'Term, 'UnificandPair) op-hook('unificationConjunctionSymbol, '_/\_, 'UnificationProblem 'UnificationProblem, 'UnificationProblem) op-hook('patternSubjectPairSymbol, '_<=?_, 'Term 'Term, 'PatternSubjectPair) op-hook('matchingConjunctionSymbol, '_/\_, 'MatchingProblem 'MatchingProblem, 'MatchingProblem) op-hook('resultPairSymbol, '`{_`,_`}, 'Term 'Type, 'ResultPair) op-hook('resultTripleSymbol, '`{_`,_`,_`}, 'Term 'Type 'Substitution, 'ResultTriple) op-hook('result4TupleSymbol, '`{_`,_`,_`,_`}, 'Term 'Type 'Substitution 'Context, 'Result4Tuple) op-hook('matchPairSymbol, '`{_`,_`}, 'Substitution 'Context, 'MatchPair) op-hook('unificationTripleSymbol, '`{_`,_`,_`}, 'Substitution 'Substitution 'Qid, 'UnificationTriple) op-hook('variantSymbol, '`{_`,_`,_`,_`,_`}, 'Term 'Substitution 'Qid 'Parent 'Bool, 'Variant) op-hook('narrowingApplyResultSymbol, '`{_`,_`,_`,_`,_`,_`,_`}, 'Term 'Type 'Context 'Qid 'Substitution 'Substitution 'Qid, 'NarrowingApplyResult) op-hook('narrowingSearchResultSymbol, '`{_`,_`,_`,_`,_`,_`}, 'Term 'Type 'Substitution 'Qid 'Substitution 'Qid, 'NarrowingSearchResult) op-hook('traceStepSymbol, '`{_`,_`,_`}, 'Term 'Type 'Rule, 'TraceStep) op-hook('nilTraceSymbol, 'nil, nil, 'Trace) op-hook('traceSymbol, '__, 'Trace 'Trace, 'Trace) op-hook('narrowingStepSymbol, '`{_`,_`,_`,_`,_`,_`,_`}, 'Context 'Qid 'Substitution 'Qid 'Term 'Type 'Substitution, 'NarrowingStep) op-hook('nilNarrowingTraceSymbol, 'nil, nil, 'NarrowingTrace) op-hook('narrowingTraceSymbol, '__, 'NarrowingTrace 'NarrowingTrace, 'NarrowingTrace) op-hook('narrowingSearchPathResultSymbol, '`{_`,_`,_`,_`,_`,_`}, 'Term 'Type 'Substitution 'NarrowingTrace 'Substitution 'Qid, 'NarrowingSearchPathResult) op-hook('smtResultSymbol, '`{_`,_`,_`,_`}, 'Term 'Substitution 'Term 'Nat, 'SmtResult) op-hook('noParseSymbol, 'noParse, 'Nat, 'ResultPair?) op-hook('ambiguitySymbol, 'ambiguity, 'ResultPair 'ResultPair, 'ResultPair?) op-hook('failure2Symbol, 'failure, nil, 'ResultPair?) op-hook('failure3Symbol, 'failure, nil, 'ResultTriple?) op-hook('failureIncomplete3Symbol, 'failureIncomplete, nil, 'ResultTriple?) op-hook('failure4Symbol, 'failure, nil, 'Result4Tuple?) op-hook('noUnifierPairSymbol, 'noUnifier, nil, 'UnificationPair?) op-hook('noUnifierTripleSymbol, 'noUnifier, nil, 'UnificationTriple?) op-hook('noUnifierIncompletePairSymbol, 'noUnifierIncomplete, nil, 'UnificationPair?) op-hook('noUnifierIncompleteTripleSymbol, 'noUnifierIncomplete, nil, 'UnificationTriple?) op-hook('noVariantSymbol, 'noVariant, nil, 'Variant?) op-hook('noVariantIncompleteSymbol, 'noVariantIncomplete, nil, 'Variant?) op-hook('narrowingApplyFailureSymbol, 'failure, nil, 'NarrowingApplyResult?) op-hook('narrowingApplyFailureIncompleteSymbol, 'failureIncomplete, nil, 'NarrowingApplyResult?) op-hook('narrowingSearchFailureSymbol, 'failure, nil, 'NarrowingSearchResult?) op-hook('narrowingSearchFailureIncompleteSymbol, 'failureIncomplete, nil, 'NarrowingSearchResult?) op-hook('narrowingSearchPathFailureSymbol, 'failure, nil, 'NarrowingSearchPathResult?) op-hook('narrowingSearchPathFailureIncompleteSymbol, 'failureIncomplete, nil, 'NarrowingSearchPathResult?) op-hook('noMatchSubstSymbol, 'noMatch, nil, 'Substitution?) op-hook('noMatchIncompleteSubstSymbol, 'noMatchIncomplete, nil, 'Substitution?) op-hook('noMatchPairSymbol, 'noMatch, nil, 'MatchPair?) op-hook('failureTraceSymbol, 'failure, nil, 'Trace?) op-hook('smtFailureSymbol, 'failure, nil, 'SmtResult?) op-hook('noStratParseSymbol, 'noStratParse, 'Nat, 'Strategy?) op-hook('stratAmbiguitySymbol, 'ambiguity, 'Strategy 'Strategy, 'Strategy?) op-hook('mixfixSymbol, 'mixfix, nil, 'PrintOption) op-hook('withParensSymbol, 'with-parens, nil, 'PrintOption) op-hook('flatSymbol, 'flat, nil, 'PrintOption) op-hook('formatPrintOptionSymbol, 'format, nil, 'PrintOption) op-hook('numberSymbol, 'number, nil, 'PrintOption) op-hook('ratSymbol, 'rat, nil, 'PrintOption) op-hook('emptyPrintOptionSetSymbol, 'none, nil, 'PrintOptionSet) op-hook('printOptionSetSymbol, '__, 'PrintOptionSet 'PrintOptionSet, 'PrintOptionSet) op-hook('delaySymbol, 'delay, nil, 'VariantOption) op-hook('filterSymbol, 'filter, nil, 'VariantOption) op-hook('emptyVariantOptionSetSymbol, 'none, nil, 'VariantOptionSet) op-hook('variantOptionSetSymbol, '__, 'VariantOptionSet 'VariantOptionSet, 'VariantOptionSet) op-hook('breadthFirstSymbol, 'breadthFirst, nil, 'SrewriteOption) op-hook('depthFirstSymbol, 'depthFirst, nil, 'SrewriteOption) op-hook('legacyUnificationPairSymbol, '`{_`,_`}, 'Substitution 'Nat, 'UnificationPair) op-hook('legacyUnificationTripleSymbol, '`{_`,_`,_`}, 'Substitution 'Substitution 'Nat, 'UnificationTriple) op-hook('legacyVariantSymbol, '`{_`,_`,_`,_`,_`}, 'Term 'Substitution 'Nat 'Parent 'Bool, 'Variant) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op 'metaRewrite : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaRewrite) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaSearch : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Condition`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultTriple?`] [special( id-hook('MetaLevelOpSymbol, 'metaSearch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaSearchPath : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Condition`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Trace?`] [special( id-hook('MetaLevelOpSymbol, 'metaSearchPath) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaSmtSearch : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Condition`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[SmtResult?`] [special( id-hook('MetaLevelOpSymbol, 'metaSmtSearch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaSrewrite : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[StrategyList`,Strategy?`] '`[SrewriteOption`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaSrewrite) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaUnify : '`[Module`] '`[UnificationProblem`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'legacyMetaUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaVariantDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [ special( id-hook('MetaLevelOpSymbol, 'legacyMetaVariantDisjointUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaVariantDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [none] . op 'metaVariantDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[VariantOptionSet`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [special( id-hook('MetaLevelOpSymbol, 'metaVariantDisjointUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaVariantMatch : '`[Module`] '`[MatchingProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[VariantOptionSet`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Substitution?`] [special( id-hook('MetaLevelOpSymbol, 'metaVariantMatch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaVariantUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'legacyMetaVariantUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaVariantUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [none] . op 'metaVariantUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[VariantOptionSet`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaVariantUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaXapply : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Substitution?`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Result4Tuple?`] [special( id-hook('MetaLevelOpSymbol, 'metaXapply) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaXmatch : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Condition`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaXmatch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'minimalSorts : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaMinimalSorts) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'mixfix : nil -> 'PrintOption [ctor] . op 'nil : nil -> 'NarrowingTrace [ctor] . op 'nil : nil -> 'Trace [ctor] . op 'noMatch : nil -> 'MatchPair? [ctor] . op 'noMatch : nil -> 'Substitution? [ctor] . op 'noMatchIncomplete : nil -> 'Substitution? [ctor] . op 'noParse : 'Nat -> 'ResultPair? [ctor] . op 'noStratParse : 'Nat -> 'Strategy? [ctor] . op 'noUnifier : nil -> 'UnificationPair? [ctor] . op 'noUnifier : nil -> 'UnificationTriple? [ctor] . op 'noUnifierIncomplete : nil -> 'UnificationPair? [ctor] . op 'noUnifierIncomplete : nil -> 'UnificationTriple? [ctor] . op 'noVariant : nil -> 'Variant? [ctor] . op 'noVariantIncomplete : nil -> 'Variant? [ctor] . op 'none : nil -> 'Parent [none] . op 'none : nil -> 'PrintOptionSet [ctor] . op 'none : nil -> 'VariantOptionSet [ctor] . op 'number : nil -> 'PrintOption [ctor] . op 'rat : nil -> 'PrintOption [ctor] . op 'sameKind : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[Bool`] [special( id-hook('MetaLevelOpSymbol, 'metaSameKind) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'sortLeq : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[Bool`] [special( id-hook('MetaLevelOpSymbol, 'metaSortLeq) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upEqs : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[EquationSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpEqs) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upImports : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ImportList`] [special( id-hook('MetaLevelOpSymbol, 'metaUpImports) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upMbs : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[MembAxSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpMbs) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upModule : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[Module`] [special( id-hook('MetaLevelOpSymbol, 'metaUpModule) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upOpDecls : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[OpDeclSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpOpDecls) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upRls : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[RuleSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpRls) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upSds : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[StratDefSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpSds) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upSorts : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaUpSorts) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upStratDecls : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[StratDeclSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpStratDecls) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upSubsortDecls : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[SubsortDeclSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpSubsortDecls) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upTerm : 'Universal -> 'Term [poly(1) special( id-hook('MetaLevelOpSymbol, 'metaUpTerm) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upView : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[View`] [special( id-hook('MetaLevelOpSymbol, 'metaUpView) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'wellFormed : 'Module -> 'Bool [special( id-hook('MetaLevelOpSymbol, 'metaWellFormedModule) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'wellFormed : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[Bool`] [special( id-hook('MetaLevelOpSymbol, 'metaWellFormedTerm) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'wellFormed : '`[Module`] '`[Substitution?`] -> '`[Bool`] [special( id-hook('MetaLevelOpSymbol, 'metaWellFormedSubstitution) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'with-parens : nil -> 'PrintOption [ctor] . ========================================== reduce in META-LEVEL : upOpDecls('IDENTICAL, true) . rewrites: 0 result [OpDeclSet]: upOpDecls('IDENTICAL, true) ========================================== reduce in META-LEVEL : upModule('META-LEVEL, true) . rewrites: 2 result FModule: fmod 'META-LEVEL is nil sorts 'Assignment ; 'Attr ; 'AttrSet ; 'Bool ; 'Bound ; 'CallStrategy ; 'Char ; 'Condition ; 'Constant ; 'Context ; 'EmptyCommaList ; 'EmptyQidSet ; 'EqCondition ; 'Equation ; 'EquationSet ; 'Expression ; 'FModule ; 'FTheory ; 'FindResult ; 'GTermList ; 'GroundTerm ; 'GroundTermList ; 'Header ; 'Hook ; 'HookList ; 'Import ; 'ImportList ; 'Kind ; 'KindSet ; 'MatchOrUnificationPair ; 'MatchPair ; 'MatchPair? ; 'MatchingProblem ; 'MembAx ; 'MembAxSet ; 'Module ; 'ModuleExpression ; 'NarrowingApplyResult ; 'NarrowingApplyResult? ; 'NarrowingSearchPathResult ; 'NarrowingSearchPathResult? ; 'NarrowingSearchResult ; 'NarrowingSearchResult? ; 'NarrowingStep ; 'NarrowingTrace ; 'Nat ; 'NatList ; 'NeCTermList ; 'NeGroundTermList ; 'NeHookList ; 'NeKindSet ; 'NeNatList ; 'NeParameterDeclList ; 'NeParameterList ; 'NeQidList ; 'NeQidSet ; 'NeSortSet ; 'NeTermList ; 'NeTypeList ; 'NeTypeSet ; 'NeVariableSet ; 'NzNat ; 'OpDecl ; 'OpDeclSet ; 'OpMapping ; 'OpMappingSet ; 'ParameterDecl ; 'ParameterDeclList ; 'ParameterList ; 'Parent ; 'PatternSubjectPair ; 'PrintOption ; 'PrintOptionSet ; 'Qid ; 'QidList ; 'QidSet ; 'Renaming ; 'RenamingSet ; 'Result4Tuple ; 'Result4Tuple? ; 'ResultPair ; 'ResultPair? ; 'ResultTriple ; 'ResultTriple? ; 'Rule ; 'RuleApplication ; 'RuleSet ; 'SModule ; 'STheory ; 'SmtResult ; 'SmtResult? ; 'Sort ; 'SortMapping ; 'SortMappingSet ; 'SortSet ; 'SrewriteOption ; 'StratDecl ; 'StratDeclSet ; 'StratDefSet ; 'StratDefinition ; 'StratMapping ; 'StratMappingSet ; 'StratModule ; 'StratTheory ; 'Strategy ; 'Strategy? ; 'StrategyList ; 'String ; 'SubsortDecl ; 'SubsortDeclSet ; 'Substitution ; 'Substitution? ; 'Term ; 'TermList ; 'TermQid ; 'Trace ; 'Trace? ; 'TraceStep ; 'Type ; 'Type? ; 'TypeList ; 'TypeListSet ; 'TypeSet ; 'UnificandPair ; 'UnificationPair ; 'UnificationPair? ; 'UnificationProblem ; 'UnificationTriple ; 'UnificationTriple? ; 'UsingPair ; 'UsingPairSet ; 'Variable ; 'VariableSet ; 'Variant ; 'Variant? ; 'VariantOption ; 'VariantOptionSet ; 'View ; 'ViewExpression ; 'Zero . subsort 'Assignment < 'Substitution . subsort 'Attr < 'AttrSet . subsort 'CallStrategy < 'Strategy . subsort 'Char < 'String . subsort 'Constant < 'GroundTerm . subsort 'Constant < 'TermQid . subsort 'Context < 'NeCTermList . subsort 'EmptyCommaList < 'GroundTermList . subsort 'EmptyCommaList < 'ParameterList . subsort 'EmptyQidSet < 'KindSet . subsort 'EmptyQidSet < 'SortSet . subsort 'EmptyQidSet < 'VariableSet . subsort 'EqCondition < 'Condition . subsort 'Equation < 'EquationSet . subsort 'Expression < 'ModuleExpression . subsort 'Expression < 'ViewExpression . subsort 'FModule < 'SModule . subsort 'FTheory < 'STheory . subsort 'GroundTerm < 'NeGroundTermList . subsort 'GroundTerm < 'Term . subsort 'GroundTermList < 'TermList . subsort 'Hook < 'NeHookList . subsort 'Import < 'ImportList . subsort 'Kind < 'NeKindSet . subsort 'Kind < 'Type . subsort 'KindSet < 'TypeSet . subsort 'MatchPair < 'MatchOrUnificationPair . subsort 'MatchPair < 'MatchPair? . subsort 'MembAx < 'MembAxSet . subsort 'NarrowingApplyResult < 'NarrowingApplyResult? . subsort 'NarrowingSearchPathResult < 'NarrowingSearchPathResult? . subsort 'NarrowingSearchResult < 'NarrowingSearchResult? . subsort 'NarrowingStep < 'NarrowingTrace . subsort 'Nat < 'Bound . subsort 'Nat < 'FindResult . subsort 'Nat < 'NeNatList . subsort 'Nat < 'Parent . subsort 'NeCTermList < 'GTermList . subsort 'NeGroundTermList < 'GroundTermList . subsort 'NeGroundTermList < 'NeTermList . subsort 'NeHookList < 'HookList . subsort 'NeKindSet < 'KindSet . subsort 'NeKindSet < 'NeTypeSet . subsort 'NeNatList < 'NatList . subsort 'NeParameterDeclList < 'ParameterDeclList . subsort 'NeParameterList < 'ParameterList . subsort 'NeQidList < 'QidList . subsort 'NeQidSet < 'QidSet . subsort 'NeSortSet < 'NeTypeSet . subsort 'NeSortSet < 'SortSet . subsort 'NeTermList < 'TermList . subsort 'NeTypeList < 'NeQidList . subsort 'NeTypeList < 'TypeList . subsort 'NeTypeSet < 'NeQidSet . subsort 'NeTypeSet < 'TypeSet . subsort 'NeVariableSet < 'NeQidSet . subsort 'NeVariableSet < 'VariableSet . subsort 'NzNat < 'Nat . subsort 'OpDecl < 'OpDeclSet . subsort 'OpMapping < 'OpMappingSet . subsort 'ParameterDecl < 'NeParameterDeclList . subsort 'PatternSubjectPair < 'MatchingProblem . subsort 'PrintOption < 'PrintOptionSet . subsort 'Qid < 'Header . subsort 'Qid < 'NeQidList . subsort 'Qid < 'NeQidSet . subsort 'Renaming < 'RenamingSet . subsort 'Result4Tuple < 'Result4Tuple? . subsort 'ResultPair < 'ResultPair? . subsort 'ResultTriple < 'ResultTriple? . subsort 'Rule < 'RuleSet . subsort 'RuleApplication < 'Strategy . subsort 'SModule < 'Module . subsort 'STheory < 'Module . subsort 'SmtResult < 'SmtResult? . subsort 'Sort < 'Expression . subsort 'Sort < 'NeSortSet . subsort 'Sort < 'Type . subsort 'SortMapping < 'SortMappingSet . subsort 'SortSet < 'TypeSet . subsort 'StratDecl < 'StratDeclSet . subsort 'StratDefinition < 'StratDefSet . subsort 'StratMapping < 'StratMappingSet . subsort 'StratModule < 'Module . subsort 'StratTheory < 'Module . subsort 'Strategy < 'Strategy? . subsort 'Strategy < 'StrategyList . subsort 'SubsortDecl < 'SubsortDeclSet . subsort 'Substitution < 'Substitution? . subsort 'Term < 'NeTermList . subsort 'TermList < 'GTermList . subsort 'TermQid < 'Qid . subsort 'TermQid < 'Term . subsort 'Trace < 'Trace? . subsort 'TraceStep < 'Trace . subsort 'Type < 'NeTypeList . subsort 'Type < 'NeTypeSet . subsort 'Type < 'Qid . subsort 'Type < 'Type? . subsort 'TypeList < 'QidList . subsort 'TypeList < 'TypeListSet . subsort 'TypeSet < 'QidSet . subsort 'TypeSet < 'TypeListSet . subsort 'UnificandPair < 'UnificationProblem . subsort 'UnificationPair < 'MatchOrUnificationPair . subsort 'UnificationPair < 'UnificationPair? . subsort 'UnificationTriple < 'UnificationTriple? . subsort 'UsingPair < 'UsingPairSet . subsort 'Variable < 'NeVariableSet . subsort 'Variable < 'TermQid . subsort 'VariableSet < 'QidSet . subsort 'Variant < 'Variant? . subsort 'VariantOption < 'VariantOptionSet . subsort 'ViewExpression < 'NeParameterList . subsort 'Zero < 'Nat . op '$applySubstitution : 'NeTermList 'Substitution -> 'Term [none] . op '$card : 'QidSet 'Nat -> 'Nat [none] . op '$diff : 'QidSet 'QidSet 'QidSet -> 'QidSet [none] . op '$intersect : 'QidSet 'QidSet 'QidSet -> 'QidSet [none] . op '$reverse : 'NatList 'NatList -> 'NatList [none] . op '$reverse : 'QidList 'QidList -> 'QidList [none] . op '$size : 'NatList 'Nat -> 'Nat [none] . op '$size : 'QidList 'Nat -> 'Nat [none] . op '0 : nil -> 'Zero [ctor] . op ' : nil -> 'Constant [special( id-hook('QuotedIdentifierSymbol, 'constantQid))] . op ' : nil -> 'Kind [special( id-hook('QuotedIdentifierSymbol, 'kindQid))] . op ' : nil -> 'Qid [special( id-hook('QuotedIdentifierSymbol, nil))] . op ' : nil -> 'Sort [special( id-hook('QuotedIdentifierSymbol, 'sortQid))] . op ' : nil -> 'Variable [special( id-hook('QuotedIdentifierSymbol, 'variableQid))] . op ' : nil -> 'Char [special( id-hook('StringSymbol, nil))] . op ' : nil -> 'String [special( id-hook('StringSymbol, nil))] . op '_! : 'Strategy -> 'Strategy [ctor] . op '_&_ : 'Nat 'Nat -> 'Nat [assoc comm prec(53) special( id-hook('ACU_NumberOpSymbol, '&) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_* : 'Strategy -> 'Strategy [ctor] . op '_*_ : 'Nat 'Nat -> 'Nat [assoc comm prec(31) special( id-hook('ACU_NumberOpSymbol, '*) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_*_ : 'NzNat 'NzNat -> 'NzNat [assoc comm prec(31) special( id-hook('ACU_NumberOpSymbol, '*) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_*`(_`) : 'ModuleExpression 'RenamingSet -> 'ModuleExpression [ctor prec( 39) format('d 'd 's 'n++i 'n--i 'd)] . op '_+ : 'Strategy -> 'Strategy [ctor] . op '_+_ : 'ModuleExpression 'ModuleExpression -> 'ModuleExpression [assoc comm ctor] . op '_+_ : 'Nat 'Nat -> 'Nat [assoc comm prec(33) special( id-hook('ACU_NumberOpSymbol, '+) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_+_ : 'NzNat 'Nat -> 'NzNat [assoc comm prec(33) special( id-hook('ACU_NumberOpSymbol, '+) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_+_ : 'String 'String -> 'String [prec(33) gather('E 'e) special( id-hook('StringOpSymbol, '+) op-hook('stringSymbol, ', nil, 'Char))] . op '_/\_ : 'Condition 'Condition -> 'Condition [assoc ctor id( 'nil.EqCondition) prec(73)] . op '_/\_ : 'EqCondition 'EqCondition -> 'EqCondition [assoc ctor id( 'nil.EqCondition) prec(73)] . op '_/\_ : 'MatchingProblem 'MatchingProblem -> 'MatchingProblem [assoc comm ctor prec(73)] . op '_/\_ : 'UnificationProblem 'UnificationProblem -> 'UnificationProblem [ assoc comm ctor prec(73)] . op '_::_ : 'Sort 'ModuleExpression -> 'ParameterDecl [none] . op '_:=_ : 'Term 'Term -> 'EqCondition [ctor prec(71)] . op '_:_ : 'Term 'Sort -> 'EqCondition [ctor prec(71)] . op '_;_ : 'EmptyQidSet 'EmptyQidSet -> 'EmptyQidSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_;_ : 'KindSet 'KindSet -> 'KindSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_;_ : 'NeKindSet 'KindSet -> 'NeKindSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_;_ : 'NeQidSet 'QidSet -> 'NeQidSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_;_ : 'NeSortSet 'SortSet -> 'NeSortSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_;_ : 'NeTypeSet 'TypeSet -> 'NeTypeSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_;_ : 'NeVariableSet 'VariableSet -> 'NeVariableSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_;_ : 'QidSet 'QidSet -> 'QidSet [assoc comm ctor id('none.EmptyQidSet) prec(43)] . op '_;_ : 'SortSet 'SortSet -> 'SortSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_;_ : 'Strategy 'Strategy -> 'Strategy [assoc ctor id('idle.Strategy) prec(39) gather('e 'E)] . op '_;_ : 'Substitution 'Substitution -> 'Substitution [assoc comm ctor id( 'none.Substitution) prec(65)] . op '_;_ : 'TypeListSet 'TypeListSet -> 'TypeListSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_;_ : 'TypeSet 'TypeSet -> 'TypeSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_;_ : 'VariableSet 'VariableSet -> 'VariableSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_<-_ : 'Variable 'Term -> 'Assignment [ctor prec(63) format('n++i 'd 'd '--)] . op '_<<_ : 'Nat 'Nat -> 'Nat [prec(35) gather('E 'e) special( id-hook('NumberOpSymbol, '<<) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_<=?_ : 'Term 'Term -> 'PatternSubjectPair [ctor prec(71)] . op '_<=_ : 'Nat 'Nat -> 'Bool [prec(37) special( id-hook('NumberOpSymbol, '<=) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_<=_ : 'String 'String -> 'Bool [prec(37) special( id-hook('StringOpSymbol, '<=) op-hook('stringSymbol, ', nil, 'Char) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_<_ : 'Nat 'Nat -> 'Bool [prec(37) special( id-hook('NumberOpSymbol, '<) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_<_ : 'String 'String -> 'Bool [prec(37) special( id-hook('StringOpSymbol, '<) op-hook('stringSymbol, ', nil, 'Char) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_=/=_ : 'Universal 'Universal -> 'Bool [prec(51) poly(1 2) special( id-hook('EqualitySymbol, nil) term-hook('equalTerm, 'false.Bool) term-hook('notEqualTerm, 'true.Bool))] . op '_==_ : 'Universal 'Universal -> 'Bool [prec(51) poly(1 2) special( id-hook('EqualitySymbol, nil) term-hook('equalTerm, 'true.Bool) term-hook('notEqualTerm, 'false.Bool))] . op '_=>_ : 'Term 'Term -> 'Condition [ctor prec(71)] . op '_=?_ : 'Term 'Term -> 'UnificandPair [ctor prec(71)] . op '_=_ : 'Term 'Term -> 'EqCondition [ctor prec(71)] . op '_>=_ : 'Nat 'Nat -> 'Bool [prec(37) special( id-hook('NumberOpSymbol, '>=) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_>=_ : 'String 'String -> 'Bool [prec(37) special( id-hook('StringOpSymbol, '>=) op-hook('stringSymbol, ', nil, 'Char) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_>>_ : 'Nat 'Nat -> 'Nat [prec(35) gather('E 'e) special( id-hook('NumberOpSymbol, '>>) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_>_ : 'Nat 'Nat -> 'Bool [prec(37) special( id-hook('NumberOpSymbol, '>) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_>_ : 'String 'String -> 'Bool [prec(37) special( id-hook('StringOpSymbol, '>) op-hook('stringSymbol, ', nil, 'Char) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_?_:_ : 'Strategy 'Strategy 'Strategy -> 'Strategy [ctor prec(55)] . op '_\_ : 'QidSet 'QidSet -> 'QidSet [gather('E 'e)] . op '_^_ : 'Nat 'Nat -> 'Nat [prec(29) gather('E 'e) special( id-hook('NumberOpSymbol, '^) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_^_ : 'NzNat 'Nat -> 'NzNat [prec(29) gather('E 'e) special( id-hook('NumberOpSymbol, '^) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '__ : 'AttrSet 'AttrSet -> 'AttrSet [assoc comm ctor id('none.AttrSet)] . op '__ : 'EquationSet 'EquationSet -> 'EquationSet [assoc comm ctor id( 'none.EquationSet) format('d 'ni 'd)] . op '__ : 'HookList 'HookList -> 'HookList [assoc ctor id('nil.HookList)] . op '__ : 'HookList 'NeHookList -> 'NeHookList [assoc ctor id('nil.HookList)] . op '__ : 'ImportList 'ImportList -> 'ImportList [assoc ctor id( 'nil.ImportList) format('d 'ni 'd)] . op '__ : 'MembAxSet 'MembAxSet -> 'MembAxSet [assoc comm ctor id( 'none.MembAxSet) format('d 'ni 'd)] . op '__ : 'NarrowingTrace 'NarrowingTrace -> 'NarrowingTrace [assoc ctor id( 'nil.NarrowingTrace)] . op '__ : 'NatList 'NatList -> 'NatList [assoc ctor id('nil.NatList) prec(25)] . op '__ : 'NatList 'NeNatList -> 'NeNatList [assoc ctor id('nil.NatList) prec( 25)] . op '__ : 'NeHookList 'HookList -> 'NeHookList [assoc ctor id('nil.HookList)] . op '__ : 'NeNatList 'NatList -> 'NeNatList [assoc ctor id('nil.NatList) prec( 25)] . op '__ : 'NeQidList 'QidList -> 'NeQidList [assoc ctor id('nil.TypeList) prec(25)] . op '__ : 'NeTypeList 'TypeList -> 'NeTypeList [assoc ctor id('nil.TypeList) prec(25)] . op '__ : 'OpDeclSet 'OpDeclSet -> 'OpDeclSet [assoc comm ctor id( 'none.OpDeclSet) format('d 'ni 'd)] . op '__ : 'OpMappingSet 'OpMappingSet -> 'OpMappingSet [assoc comm ctor id( 'none.OpMappingSet) format('d 'ni 'd)] . op '__ : 'PrintOptionSet 'PrintOptionSet -> 'PrintOptionSet [assoc comm ctor id('none.PrintOptionSet)] . op '__ : 'QidList 'NeQidList -> 'NeQidList [assoc ctor id('nil.TypeList) prec(25)] . op '__ : 'QidList 'QidList -> 'QidList [assoc ctor id('nil.TypeList) prec( 25)] . op '__ : 'RuleSet 'RuleSet -> 'RuleSet [assoc comm ctor id('none.RuleSet) format('d 'ni 'd)] . op '__ : 'SortMappingSet 'SortMappingSet -> 'SortMappingSet [assoc comm ctor id('none.SortMappingSet) format('d 'ni 'd)] . op '__ : 'StratDeclSet 'StratDeclSet -> 'StratDeclSet [assoc comm ctor id( 'none.StratDeclSet) format('d 'ni 'd)] . op '__ : 'StratDefSet 'StratDefSet -> 'StratDefSet [assoc comm ctor id( 'none.StratDefSet) format('d 'ni 'd)] . op '__ : 'StratMappingSet 'StratMappingSet -> 'StratMappingSet [assoc comm ctor id('none.StratMappingSet) format('d 'ni 'd)] . op '__ : 'SubsortDeclSet 'SubsortDeclSet -> 'SubsortDeclSet [assoc comm ctor id('none.SubsortDeclSet) format('d 'ni 'd)] . op '__ : 'Trace 'Trace -> 'Trace [assoc ctor id('nil.Trace) format('d 'n 'd)] . op '__ : 'TypeList 'NeTypeList -> 'NeTypeList [assoc ctor id('nil.TypeList) prec(25)] . op '__ : 'TypeList 'TypeList -> 'TypeList [assoc ctor id('nil.TypeList) prec( 25)] . op '__ : 'VariantOptionSet 'VariantOptionSet -> 'VariantOptionSet [assoc comm ctor id('none.VariantOptionSet)] . op '_`,_ : 'EmptyCommaList 'EmptyCommaList -> 'EmptyCommaList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'GTermList 'GTermList -> 'GTermList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'GroundTermList 'GroundTermList -> 'GroundTermList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'GroundTermList 'NeGroundTermList -> 'NeGroundTermList [assoc ctor id('empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'NeCTermList 'TermList -> 'NeCTermList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'NeGroundTermList 'GroundTermList -> 'NeGroundTermList [assoc ctor id('empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'NeParameterDeclList 'ParameterDeclList -> 'NeParameterDeclList [ assoc ctor id('nil.ParameterDeclList) prec(121)] . op '_`,_ : 'NeParameterList 'ParameterList -> 'NeParameterList [assoc ctor id('empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'NeTermList 'TermList -> 'NeTermList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'ParameterDeclList 'NeParameterDeclList -> 'NeParameterDeclList [ assoc ctor id('nil.ParameterDeclList) prec(121)] . op '_`,_ : 'ParameterDeclList 'ParameterDeclList -> 'ParameterDeclList [assoc ctor id('nil.ParameterDeclList) prec(121)] . op '_`,_ : 'ParameterList 'NeParameterList -> 'NeParameterList [assoc ctor id('empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'ParameterList 'ParameterList -> 'ParameterList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'RenamingSet 'RenamingSet -> 'RenamingSet [assoc comm ctor prec( 43) format('d 'd 'ni 'd)] . op '_`,_ : 'StrategyList 'StrategyList -> 'StrategyList [assoc ctor id( 'empty.StrategyList)] . op '_`,_ : 'TermList 'NeCTermList -> 'NeCTermList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'TermList 'NeTermList -> 'NeTermList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'TermList 'TermList -> 'TermList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'UsingPairSet 'UsingPairSet -> 'UsingPairSet [assoc comm ctor prec(61)] . op '_`[_`] : 'Qid 'NeCTermList -> 'Context [ctor] . op '_`[_`] : 'Qid 'NeGroundTermList -> 'GroundTerm [ctor] . op '_`[_`] : 'Qid 'NeTermList -> 'Term [ctor] . op '_`[_`]`{_`} : 'Qid 'Substitution 'StrategyList -> 'RuleApplication [ctor prec(21)] . op '_`[`[_`]`] : 'Qid 'TermList -> 'CallStrategy [ctor prec(21)] . op '_`{_`} : 'Expression 'NeParameterList -> 'Expression [ctor prec(37)] . op '_`{_`} : 'ModuleExpression 'NeParameterList -> 'ModuleExpression [ctor prec(37)] . op '_`{_`} : 'Qid 'ParameterDeclList -> 'Header [ctor] . op '_`{_`} : 'ViewExpression 'NeParameterList -> 'ViewExpression [ctor prec( 37)] . op '_and-then_ : 'Bool 'Bool -> 'Bool [strat(1 0) prec(55) gather('e 'E)] . op '_and_ : 'Bool 'Bool -> 'Bool [assoc comm prec(55)] . op '_divides_ : 'NzNat 'Nat -> 'Bool [prec(51) special( id-hook('NumberOpSymbol, 'divides) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_implies_ : 'Bool 'Bool -> 'Bool [prec(61) gather('e 'E)] . op '_in_ : 'Qid 'QidSet -> 'Bool [none] . op '_or-else_ : 'Bool 'Bool -> 'Bool [strat(1 0) prec(59) gather('e 'E)] . op '_or-else_ : 'Strategy 'Strategy -> 'Strategy [assoc ctor prec(43) gather( 'e 'E)] . op '_or_ : 'Bool 'Bool -> 'Bool [assoc comm prec(59)] . op '_psubset_ : 'QidSet 'QidSet -> 'Bool [none] . op '_quo_ : 'Nat 'NzNat -> 'Nat [prec(31) gather('E 'e) special( id-hook('NumberOpSymbol, 'quo) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_rem_ : 'Nat 'NzNat -> 'Nat [prec(31) gather('E 'e) special( id-hook('NumberOpSymbol, 'rem) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_subset_ : 'QidSet 'QidSet -> 'Bool [none] . op '_using_ : 'Variable 'Strategy -> 'UsingPair [ctor prec(21)] . op '_xor_ : 'Bool 'Bool -> 'Bool [assoc comm prec(57)] . op '_xor_ : 'Nat 'Nat -> 'Nat [assoc comm prec(55) special( id-hook('ACU_NumberOpSymbol, 'xor) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_|_ : 'Nat 'Nat -> 'Nat [assoc comm prec(57) special( id-hook('ACU_NumberOpSymbol, '|) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_|_ : 'NzNat 'Nat -> 'NzNat [assoc comm prec(57) special( id-hook('ACU_NumberOpSymbol, '|) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_|_ : 'Strategy 'Strategy -> 'Strategy [assoc comm ctor id( 'fail.Strategy) prec(41) gather('e 'E)] . op '`[_`] : 'Qid -> 'Module [none] . op '`[`] : nil -> 'Context [ctor] . op '`{_`,_`,_`,_`,_`,_`,_`} : 'Context 'Qid 'Substitution 'Qid 'Term 'Type 'Substitution -> 'NarrowingStep [ctor format('ni 'n++i 'd 'ni 'd 'd 'd 'ni 'd 'ni 'd 'd 'd 'd 'n--i 'd)] . op '`{_`,_`,_`,_`,_`,_`,_`} : 'Term 'Type 'Context 'Qid 'Substitution 'Substitution 'Qid -> 'NarrowingApplyResult [ctor format('d 'n++i 'd 'd 'd 'ni 'd 'ni 'd 'd 'd 'd 'd 'ni 'n--i 'd)] . op '`{_`,_`,_`,_`,_`,_`} : 'Term 'Type 'Substitution 'NarrowingTrace 'Substitution 'Qid -> 'NarrowingSearchPathResult [ctor format('d 'n++i 'd 'd 'd 'd 'd 'd 'd 'd 'd 'ni 'n--i 'd)] . op '`{_`,_`,_`,_`,_`,_`} : 'Term 'Type 'Substitution 'Qid 'Substitution 'Qid -> 'NarrowingSearchResult [ctor format('d 'n++i 'd 'd 'd 'd 'd 'ni 'd 'd 'd 'ni 'n--i 'd)] . op '`{_`,_`,_`,_`,_`} : 'Term 'Substitution 'Nat 'Parent 'Bool -> 'Variant [ ctor] . op '`{_`,_`,_`,_`,_`} : 'Term 'Substitution 'Qid 'Parent 'Bool -> 'Variant [ ctor] . op '`{_`,_`,_`,_`} : 'Term 'Substitution 'Term 'Nat -> 'SmtResult [ctor] . op '`{_`,_`,_`,_`} : 'Term 'Type 'Substitution 'Context -> 'Result4Tuple [ ctor] . op '`{_`,_`,_`} : 'Substitution 'Substitution 'Nat -> 'UnificationTriple [ ctor] . op '`{_`,_`,_`} : 'Substitution 'Substitution 'Qid -> 'UnificationTriple [ ctor] . op '`{_`,_`,_`} : 'Term 'Type 'Rule -> 'TraceStep [ctor] . op '`{_`,_`,_`} : 'Term 'Type 'Substitution -> 'ResultTriple [ctor] . op '`{_`,_`} : 'Substitution 'Context -> 'MatchPair [ctor] . op '`{_`,_`} : 'Substitution 'Nat -> 'UnificationPair [ctor] . op '`{_`,_`} : 'Substitution 'Qid -> 'UnificationPair [ctor] . op '`{_`,_`} : 'Term 'Type -> 'ResultPair [ctor] . op 'all : nil -> 'RuleApplication [ctor] . op 'amatch_s.t._ : 'Term 'EqCondition -> 'Strategy [ctor prec(21)] . op 'amatchrew_s.t._by_ : 'Term 'EqCondition 'UsingPairSet -> 'Strategy [ctor] . op 'ambiguity : 'ResultPair 'ResultPair -> 'ResultPair? [ctor] . op 'ambiguity : 'Strategy 'Strategy -> 'Strategy? [ctor] . op 'anyType : nil -> 'Type? [ctor] . op 'append : 'NatList 'NatList -> 'NatList [none] . op 'append : 'NatList 'NeNatList -> 'NeNatList [none] . op 'append : 'NeNatList 'NatList -> 'NeNatList [none] . op 'append : 'NeQidList 'QidList -> 'NeQidList [none] . op 'append : 'QidList 'NeQidList -> 'NeQidList [none] . op 'append : 'QidList 'QidList -> 'QidList [none] . op 'applySubstitution : 'Module 'Term 'Substitution -> 'Term [none] . op 'ascii : 'Char -> 'Nat [special( id-hook('StringOpSymbol, 'ascii) op-hook('stringSymbol, ', nil, 'Char) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'assoc : nil -> 'Attr [ctor] . op 'breadthFirst : nil -> 'SrewriteOption [ctor] . op 'ceq_=_if_`[_`]. : 'Term 'Term 'EqCondition 'AttrSet -> 'Equation [ctor format('d 'd 'd 'd 'd 'd 's 'd 'd 's 'd)] . op 'char : '`[FindResult`,NatList`,Bound`,Parent`] -> '`[String`] [special( id-hook('StringOpSymbol, 'char) op-hook('stringSymbol, ', nil, 'Char) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'cmb_:_if_`[_`]. : 'Term 'Sort 'EqCondition 'AttrSet -> 'MembAx [ctor format('d 'd 'd 'd 'd 'd 's 'd 'd 's 'd)] . op 'comm : nil -> 'Attr [ctor] . op 'completeName : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaCompleteName) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'config : nil -> 'Attr [ctor] . op 'crl_=>_if_`[_`]. : 'Term 'Term 'Condition 'AttrSet -> 'Rule [ctor format( 'd 'd 'd 'd 'd 'd 's 'd 'd 's 'd)] . op 'csd_:=_if_`[_`]. : 'CallStrategy 'Strategy 'EqCondition 'AttrSet -> 'StratDefinition [ctor format('d 'd 'd 'd 'd 'd 's 'd 'd 's 'd)] . op 'ctor : nil -> 'Attr [ctor] . op 'delay : nil -> 'VariantOption [ctor] . op 'delete : 'Qid 'QidSet -> 'QidSet [none] . op 'depthFirst : nil -> 'SrewriteOption [ctor] . op 'downTerm : 'Term 'Universal -> 'Universal [poly(2 0) special( id-hook('MetaLevelOpSymbol, 'metaDownTerm) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'empty : nil -> 'EmptyCommaList [ctor] . op 'empty : nil -> 'GroundTermList [ctor] . op 'empty : nil -> 'StrategyList [ctor] . op 'eq_=_`[_`]. : 'Term 'Term 'AttrSet -> 'Equation [ctor format('d 'd 'd 'd 's 'd 'd 's 'd)] . op 'extending_. : 'ModuleExpression -> 'Import [ctor] . op 'fail : nil -> 'Strategy [ctor] . op 'failure : nil -> 'NarrowingApplyResult? [ctor] . op 'failure : nil -> 'NarrowingSearchPathResult? [ctor] . op 'failure : nil -> 'NarrowingSearchResult? [ctor] . op 'failure : nil -> 'Result4Tuple? [ctor] . op 'failure : nil -> 'ResultPair? [ctor] . op 'failure : nil -> 'ResultTriple? [ctor] . op 'failure : nil -> 'SmtResult? [ctor] . op 'failure : nil -> 'Trace? [ctor] . op 'failureIncomplete : nil -> 'NarrowingApplyResult? [ctor] . op 'failureIncomplete : nil -> 'NarrowingSearchPathResult? [ctor] . op 'failureIncomplete : nil -> 'NarrowingSearchResult? [ctor] . op 'failureIncomplete : nil -> 'ResultTriple? [ctor] . op 'false : nil -> 'Bool [ctor special( id-hook('SystemFalse, nil))] . op 'filter : nil -> 'VariantOption [ctor] . op 'find : 'String 'String 'Nat -> 'FindResult [special( id-hook('StringOpSymbol, 'find) op-hook('stringSymbol, ', nil, 'Char) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('notFoundTerm, 'notFound.FindResult))] . op 'flat : nil -> 'PrintOption [ctor] . op 'fmod_is_sorts_.____endfm : 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet -> 'FModule [ctor gather('& '& '& '& '& '& '&) format('d 'd 's 'n++i 'ni 'd 'd 'ni 'ni 'ni 'ni 'n--i 'd)] . op 'format : 'QidList -> 'Attr [ctor] . op 'format : nil -> 'PrintOption [ctor] . op 'front : 'NeNatList -> 'NatList [none] . op 'front : 'NeQidList -> 'QidList [none] . op 'frozen : 'NeNatList -> 'Attr [ctor] . op 'fth_is_sorts_.____endfth : 'Qid 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet -> 'FTheory [ctor gather('& '& '& '& '& '& '&) format('d 'd 'd 'n++i 'ni 'd 'd 'ni 'ni 'ni 'ni 'n--i 'd)] . op 'gather : 'QidList -> 'Attr [ctor] . op 'gcd : 'Nat 'Nat -> 'Nat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'gcd) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'gcd : 'NzNat 'Nat -> 'NzNat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'gcd) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'getAccumulatedSubstitution : 'NarrowingSearchResult -> 'Substitution [ none] . op 'getAccumulatedSubstitution : 'NarrowingStep -> 'Substitution [none] . op 'getContext : 'MatchPair -> 'Context [none] . op 'getContext : 'NarrowingApplyResult -> 'Context [none] . op 'getContext : 'NarrowingStep -> 'Context [none] . op 'getContext : 'Result4Tuple -> 'Context [none] . op 'getEqs : 'Module -> 'EquationSet [none] . op 'getFrom : 'View -> 'ModuleExpression [none] . op 'getImports : 'Module -> 'ImportList [none] . op 'getInitialSubstitution : 'NarrowingSearchPathResult -> 'Substitution [ none] . op 'getInitialTerm : 'NarrowingSearchPathResult -> 'Term [none] . op 'getInitialType : 'NarrowingSearchPathResult -> 'Type [none] . op 'getKind : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaGetKind) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'getKinds : '`[Module`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaGetKinds) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'getLabel : 'NarrowingApplyResult -> 'Qid [none] . op 'getLabel : 'NarrowingStep -> 'Qid [none] . op 'getLhsSubstitution : 'UnificationTriple -> 'Substitution [none] . op 'getMbs : 'Module -> 'MembAxSet [none] . op 'getMoreVariantsInLayerFlag : 'Variant -> 'Bool [none] . op 'getName : 'Constant -> 'Qid [none] . op 'getName : 'Module -> 'Qid [none] . op 'getName : 'Variable -> 'Qid [none] . op 'getName : 'View -> 'Qid [none] . op 'getOpMappings : 'View -> 'OpMappingSet [none] . op 'getOps : 'Module -> 'OpDeclSet [none] . op 'getParent : 'Variant -> 'Parent [none] . op 'getRhsSubstitution : 'UnificationTriple -> 'Substitution [none] . op 'getRls : 'Module -> 'RuleSet [none] . op 'getRule : 'TraceStep -> 'Rule [none] . op 'getRuleSubstitution : 'NarrowingApplyResult -> 'Substitution [none] . op 'getSds : 'Module -> 'StratDefSet [none] . op 'getSortMappings : 'View -> 'SortMappingSet [none] . op 'getSorts : 'Module -> 'SortSet [none] . op 'getStateVariableFamily : 'NarrowingSearchResult -> 'Qid [none] . op 'getStratMappings : 'View -> 'StratMappingSet [none] . op 'getStrats : 'Module -> 'StratDeclSet [none] . op 'getSubsorts : 'Module -> 'SubsortDeclSet [none] . op 'getSubstitution : 'MatchPair -> 'Substitution [none] . op 'getSubstitution : 'Result4Tuple -> 'Substitution [none] . op 'getSubstitution : 'ResultTriple -> 'Substitution [none] . op 'getSubstitution : 'UnificationPair -> 'Substitution [none] . op 'getSubstitution : 'Variant -> 'Substitution [none] . op 'getTerm : 'NarrowingApplyResult -> 'Term [none] . op 'getTerm : 'NarrowingSearchResult -> 'Term [none] . op 'getTerm : 'NarrowingStep -> 'Term [none] . op 'getTerm : 'Result4Tuple -> 'Term [none] . op 'getTerm : 'ResultPair -> 'Term [none] . op 'getTerm : 'ResultTriple -> 'Term [none] . op 'getTerm : 'TraceStep -> 'Term [none] . op 'getTerm : 'Variant -> 'Term [none] . op 'getTermSubstitution : 'NarrowingApplyResult -> 'Substitution [none] . op 'getTo : 'View -> 'ModuleExpression [none] . op 'getTrace : 'NarrowingSearchPathResult -> 'NarrowingTrace [none] . op 'getType : 'Constant -> 'Type [none] . op 'getType : 'NarrowingApplyResult -> 'Type [none] . op 'getType : 'NarrowingSearchResult -> 'Type [none] . op 'getType : 'NarrowingStep -> 'Type [none] . op 'getType : 'Result4Tuple -> 'Type [none] . op 'getType : 'ResultPair -> 'Type [none] . op 'getType : 'ResultTriple -> 'Type [none] . op 'getType : 'TraceStep -> 'Type [none] . op 'getType : 'Variable -> 'Type [none] . op 'getUnifier : 'NarrowingSearchPathResult -> 'Substitution [none] . op 'getUnifier : 'NarrowingSearchResult -> 'Substitution [none] . op 'getUnifier : 'NarrowingStep -> 'Substitution [none] . op 'getUnifierVariableFamily : 'NarrowingSearchPathResult -> 'Qid [none] . op 'getUnifierVariableFamily : 'NarrowingSearchResult -> 'Qid [none] . op 'getUnifierVariableFamily : 'NarrowingStep -> 'Qid [none] . op 'getVariableFamily : 'NarrowingApplyResult -> 'Qid [none] . op 'getVariableFamily : 'UnificationPair -> 'Qid [none] . op 'getVariableFamily : 'UnificationTriple -> 'Qid [none] . op 'getVariableFamily : 'Variant -> 'Qid [none] . op 'glbSorts : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [ special( id-hook('MetaLevelOpSymbol, 'metaGlbSorts) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'head : 'NeNatList -> 'Nat [none] . op 'head : 'NeQidList -> 'Qid [none] . op 'id : 'Term -> 'Attr [ctor] . op 'id-hook : 'Qid 'QidList -> 'Hook [ctor format('nssss 'd)] . op 'idem : nil -> 'Attr [ctor] . op 'idle : nil -> 'Strategy [ctor] . op 'if_then_else_fi : 'Bool 'Universal 'Universal -> 'Universal [poly(2 3 0) special( id-hook('BranchSymbol, nil) term-hook('1, 'true.Bool) term-hook('2, 'false.Bool))] . op 'including_. : 'ModuleExpression -> 'Import [ctor] . op 'insert : 'Qid 'QidSet -> 'QidSet [none] . op 'intersection : 'QidSet 'QidSet -> 'QidSet [none] . op 'iter : nil -> 'Attr [ctor] . op 'label : 'Qid -> 'Attr [ctor] . op 'label_to_ : 'Qid 'Qid -> 'Renaming [ctor] . op 'last : 'NeNatList -> 'Nat [none] . op 'last : 'NeQidList -> 'Qid [none] . op 'lcm : 'Nat 'Nat -> 'Nat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'lcm) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'lcm : 'NzNat 'NzNat -> 'NzNat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'lcm) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'leastSort : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaLeastSort) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'left-id : 'Term -> 'Attr [ctor] . op 'length : 'String -> 'Nat [special( id-hook('StringOpSymbol, 'length) op-hook('stringSymbol, ', nil, 'Char) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'lesserSorts : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaLesserSorts) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'lowerCase : 'String -> 'String [special( id-hook('StringOpSymbol, 'lowerCase) op-hook('stringSymbol, ', nil, 'Char))] . op 'match_s.t._ : 'Term 'EqCondition -> 'Strategy [ctor prec(21)] . op 'matchrew_s.t._by_ : 'Term 'EqCondition 'UsingPairSet -> 'Strategy [ctor] . op 'max : 'Nat 'Nat -> 'Nat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'max) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'max : 'NzNat 'Nat -> 'NzNat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'max) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'maximalAritySet : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaMaximalAritySet) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'maximalSorts : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaMaximalSorts) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'mb_:_`[_`]. : 'Term 'Sort 'AttrSet -> 'MembAx [ctor format('d 'd 'd 'd 's 'd 'd 's 'd)] . op 'memo : nil -> 'Attr [ctor] . op 'metaApply : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Substitution?`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultTriple?`] [special( id-hook('MetaLevelOpSymbol, 'metaApply) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaCheck : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[Bool`] [special( id-hook('MetaLevelOpSymbol, 'metaCheck) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [ special( id-hook('MetaLevelOpSymbol, 'legacyMetaDisjointUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [ special( id-hook('MetaLevelOpSymbol, 'metaDisjointUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaFrewrite : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaFrewrite) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaGetIrredundantVariant : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Variant?`] [special( id-hook('MetaLevelOpSymbol, 'legacyMetaGetIrredundantVariant) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaGetIrredundantVariant : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Variant?`] [special( id-hook('MetaLevelOpSymbol, 'metaGetIrredundantVariant) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaGetVariant : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Variant?`] [special( id-hook('MetaLevelOpSymbol, 'legacyMetaGetVariant) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaGetVariant : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Variant?`] [special( id-hook('MetaLevelOpSymbol, 'metaGetVariant) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaIrredundantDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [ special( id-hook('MetaLevelOpSymbol, 'metaIrredundantDisjointUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaIrredundantUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaIrredundantUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaMatch : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Condition`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Substitution?`] [special( id-hook('MetaLevelOpSymbol, 'metaMatch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNarrow : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[Bool`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaNarrow2) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNarrow : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultTriple?`] [special( id-hook('MetaLevelOpSymbol, 'metaNarrow) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNarrowingApply : 'Module 'Term 'TermList 'Qid 'Nat -> 'NarrowingApplyResult? [none] . op 'metaNarrowingApply : 'Module 'Term 'TermList 'Qid 'VariantOptionSet 'Nat -> 'NarrowingApplyResult? [special( id-hook('MetaLevelOpSymbol, 'metaNarrowingApply) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNarrowingSearch : 'Module 'Term 'Term 'Qid 'Bound 'Qid 'Nat -> 'NarrowingSearchResult? [none] . op 'metaNarrowingSearch : 'Module 'Term 'Term 'Qid 'Bound 'Qid 'VariantOptionSet 'Nat -> 'NarrowingSearchResult? [special( id-hook('MetaLevelOpSymbol, 'metaNarrowingSearch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNarrowingSearchPath : 'Module 'Term 'Term 'Qid 'Bound 'Qid 'Nat -> 'NarrowingSearchPathResult? [none] . op 'metaNarrowingSearchPath : 'Module 'Term 'Term 'Qid 'Bound 'Qid 'VariantOptionSet 'Nat -> 'NarrowingSearchPathResult? [special( id-hook('MetaLevelOpSymbol, 'metaNarrowingSearchPath) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNormalize : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaNormalize) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaParse : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ResultPair?`] [ none] . op 'metaParse : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaParse) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaParseStrategy : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[StrategyList`,Strategy?`] [special( id-hook('MetaLevelOpSymbol, 'metaParseStrategy) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaPrettyPrint : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [none] . op 'metaPrettyPrint : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[PrintOptionSet`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [none] . op 'metaPrettyPrint : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[PrintOptionSet`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaPrettyPrint) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaPrettyPrintStrategy : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[StrategyList`,Strategy?`] '`[PrintOptionSet`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaPrettyPrintStrategy) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaReduce : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaReduce) op-hook('qidSymbol, ', nil, 'Qid) op-hook('metaTermSymbol, '_`[_`], 'Qid 'NeGroundTermList, 'GroundTerm) op-hook('metaArgSymbol, '_`,_, 'NeGroundTermList 'GroundTermList, 'NeGroundTermList) op-hook('emptyTermListSymbol, 'empty, nil, 'GroundTermList) op-hook('assignmentSymbol, '_<-_, 'Variable 'Term, 'Assignment) op-hook('emptySubstitutionSymbol, 'none, nil, 'Substitution) op-hook('substitutionSymbol, '_;_, 'Substitution 'Substitution, 'Substitution) op-hook('holeSymbol, '`[`], nil, 'Context) op-hook('noConditionSymbol, 'nil, nil, 'EqCondition) op-hook('equalityConditionSymbol, '_=_, 'Term 'Term, 'EqCondition) op-hook('sortTestConditionSymbol, '_:_, 'Term 'Sort, 'EqCondition) op-hook('matchConditionSymbol, '_:=_, 'Term 'Term, 'EqCondition) op-hook('rewriteConditionSymbol, '_=>_, 'Term 'Term, 'Condition) op-hook('conjunctionSymbol, '_/\_, 'EqCondition 'EqCondition, 'EqCondition) op-hook('failStratSymbol, 'fail, nil, 'Strategy) op-hook('idleStratSymbol, 'idle, nil, 'Strategy) op-hook('allStratSymbol, 'all, nil, 'RuleApplication) op-hook('applicationStratSymbol, '_`[_`]`{_`}, 'Qid 'Substitution 'StrategyList, 'RuleApplication) op-hook('topStratSymbol, 'top, 'RuleApplication, 'Strategy) op-hook('matchStratSymbol, 'match_s.t._, 'Term 'EqCondition, 'Strategy) op-hook('xmatchStratSymbol, 'xmatch_s.t._, 'Term 'EqCondition, 'Strategy) op-hook('amatchStratSymbol, 'amatch_s.t._, 'Term 'EqCondition, 'Strategy) op-hook('unionStratSymbol, '_|_, 'Strategy 'Strategy, 'Strategy) op-hook('concatStratSymbol, '_;_, 'Strategy 'Strategy, 'Strategy) op-hook('orelseStratSymbol, '_or-else_, 'Strategy 'Strategy, 'Strategy) op-hook('plusStratSymbol, '_+, 'Strategy, 'Strategy) op-hook('conditionalStratSymbol, '_?_:_, 'Strategy 'Strategy 'Strategy, 'Strategy) op-hook('matchrewStratSymbol, 'matchrew_s.t._by_, 'Term 'EqCondition 'UsingPairSet, 'Strategy) op-hook('xmatchrewStratSymbol, 'xmatchrew_s.t._by_, 'Term 'EqCondition 'UsingPairSet, 'Strategy) op-hook('amatchrewStratSymbol, 'amatchrew_s.t._by_, 'Term 'EqCondition 'UsingPairSet, 'Strategy) op-hook('callStratSymbol, '_`[`[_`]`], 'Qid 'TermList, 'CallStrategy) op-hook('oneStratSymbol, 'one, 'Strategy, 'Strategy) op-hook('starStratSymbol, '_*, 'Strategy, 'Strategy) op-hook('normalizationStratSymbol, '_!, 'Strategy, 'Strategy) op-hook('notStratSymbol, 'not, 'Strategy, 'Strategy) op-hook('testStratSymbol, 'test, 'Strategy, 'Strategy) op-hook('tryStratSymbol, 'try, 'Strategy, 'Strategy) op-hook('usingStratSymbol, '_using_, 'Variable 'Strategy, 'UsingPair) op-hook('usingListStratSymbol, '_`,_, 'UsingPairSet 'UsingPairSet, 'UsingPairSet) op-hook('emptyStratListSymbol, 'empty, nil, 'StrategyList) op-hook('stratListSymbol, '_`,_, 'StrategyList 'StrategyList, 'StrategyList) op-hook('headerSymbol, '_`{_`}, 'Qid 'ParameterDeclList, 'Header) op-hook('parameterDeclSymbol, '_::_, 'Sort 'ModuleExpression, 'ParameterDecl) op-hook('parameterDeclListSymbol, '_`,_, 'ParameterDeclList 'ParameterDeclList, 'ParameterDeclList) op-hook('protectingSymbol, 'protecting_., 'ModuleExpression, 'Import) op-hook('extendingSymbol, 'extending_., 'ModuleExpression, 'Import) op-hook('includingSymbol, 'including_., 'ModuleExpression, 'Import) op-hook('nilImportListSymbol, 'nil, nil, 'ImportList) op-hook('importListSymbol, '__, 'ImportList 'ImportList, 'ImportList) op-hook('emptySortSetSymbol, 'none, nil, 'QidSet) op-hook('sortSetSymbol, '_;_, 'QidSet 'QidSet, 'QidSet) op-hook('subsortSymbol, 'subsort_<_., 'Sort 'Sort, 'SubsortDecl) op-hook('emptySubsortDeclSetSymbol, 'none, nil, 'SubsortDeclSet) op-hook('subsortDeclSetSymbol, '__, 'SubsortDeclSet 'SubsortDeclSet, 'SubsortDeclSet) op-hook('nilQidListSymbol, 'nil, nil, 'QidList) op-hook('qidListSymbol, '__, 'QidList 'QidList, 'QidList) op-hook('emptyQidSetSymbol, 'none, nil, 'QidSet) op-hook('qidSetSymbol, '_;_, 'QidSet 'QidSet, 'QidSet) op-hook('succSymbol, 's_, 'Nat, 'NzNat) op-hook('natListSymbol, '__, 'NatList 'NatList, 'NatList) op-hook('unboundedSymbol, 'unbounded, nil, 'Bound) op-hook('noParentSymbol, 'none, nil, 'Parent) op-hook('stringSymbol, ', nil, 'Char) op-hook('sortRenamingSymbol, 'sort_to_, 'Qid 'Qid, 'Renaming) op-hook('opRenamingSymbol, 'op_to_`[_`], 'Qid 'Qid 'AttrSet, 'Renaming) op-hook('opRenamingSymbol2, 'op_:_->_to_`[_`], 'Qid 'TypeList 'Type 'Qid 'AttrSet, 'Renaming) op-hook('labelRenamingSymbol, 'label_to_, 'Qid 'Qid, 'Renaming) op-hook('stratRenamingSymbol, 'strat_to_, 'Qid 'Qid, 'Renaming) op-hook('stratRenamingSymbol2, 'strat_:_@_to_, 'Qid 'TypeList 'Type 'Qid, 'Renaming) op-hook('renamingSetSymbol, '_`,_, 'RenamingSet 'RenamingSet, 'RenamingSet) op-hook('sumSymbol, '_+_, 'ModuleExpression 'ModuleExpression, 'ModuleExpression) op-hook('renamingSymbol, '_*`(_`), 'ModuleExpression 'RenamingSet, 'ModuleExpression) op-hook('instantiationSymbol, '_`{_`}, 'Expression 'NeParameterList, 'Expression) op-hook('termHookSymbol, 'term-hook, 'Qid 'Term, 'Hook) op-hook('hookListSymbol, '__, 'HookList 'HookList, 'HookList) op-hook('idHookSymbol, 'id-hook, 'Qid 'QidList, 'Hook) op-hook('opHookSymbol, 'op-hook, 'Qid 'Qid 'QidList 'Qid, 'Hook) op-hook('assocSymbol, 'assoc, nil, 'Attr) op-hook('commSymbol, 'comm, nil, 'Attr) op-hook('idemSymbol, 'idem, nil, 'Attr) op-hook('iterSymbol, 'iter, nil, 'Attr) op-hook('idSymbol, 'id, 'Term, 'Attr) op-hook('leftIdSymbol, 'left-id, 'Term, 'Attr) op-hook('rightIdSymbol, 'right-id, 'Term, 'Attr) op-hook('stratSymbol, 'strat, 'NeNatList, 'Attr) op-hook('memoSymbol, 'memo, nil, 'Attr) op-hook('precSymbol, 'prec, 'Nat, 'Attr) op-hook('gatherSymbol, 'gather, 'QidList, 'Attr) op-hook('formatSymbol, 'format, 'QidList, 'Attr) op-hook('ctorSymbol, 'ctor, nil, 'Attr) op-hook('frozenSymbol, 'frozen, 'NeNatList, 'Attr) op-hook('polySymbol, 'poly, 'NeNatList, 'Attr) op-hook('configSymbol, 'config, nil, 'Attr) op-hook('objectSymbol, 'object, nil, 'Attr) op-hook('msgSymbol, 'msg, nil, 'Attr) op-hook('specialSymbol, 'special, 'NeHookList, 'Attr) op-hook('labelSymbol, 'label, 'Qid, 'Attr) op-hook('metadataSymbol, 'metadata, 'String, 'Attr) op-hook('owiseSymbol, 'owise, nil, 'Attr) op-hook('variantAttrSymbol, 'variant, nil, 'Attr) op-hook('narrowingSymbol, 'narrowing, nil, 'Attr) op-hook('nonexecSymbol, 'nonexec, nil, 'Attr) op-hook('printSymbol, 'print, 'QidList, 'Attr) op-hook('emptyAttrSetSymbol, 'none, nil, 'AttrSet) op-hook('attrSetSymbol, '__, 'AttrSet 'AttrSet, 'AttrSet) op-hook('opDeclSymbol, 'op_:_->_`[_`]., 'Qid 'TypeList 'Type 'AttrSet, 'OpDecl) op-hook('opDeclSetSymbol, '__, 'OpDeclSet 'OpDeclSet, 'OpDeclSet) op-hook('emptyOpDeclSetSymbol, 'none, nil, 'OpDeclSet) op-hook('mbSymbol, 'mb_:_`[_`]., 'Term 'Sort 'AttrSet, 'MembAx) op-hook('cmbSymbol, 'cmb_:_if_`[_`]., 'Term 'Sort 'EqCondition 'AttrSet, 'MembAx) op-hook('emptyMembAxSetSymbol, 'none, nil, 'MembAxSet) op-hook('membAxSetSymbol, '__, 'MembAxSet 'MembAxSet, 'MembAxSet) op-hook('eqSymbol, 'eq_=_`[_`]., 'Term 'Term 'AttrSet, 'Equation) op-hook('ceqSymbol, 'ceq_=_if_`[_`]., 'Term 'Term 'EqCondition 'AttrSet, 'Equation) op-hook('emptyEquationSetSymbol, 'none, nil, 'EquationSet) op-hook('equationSetSymbol, '__, 'EquationSet 'EquationSet, 'EquationSet) op-hook('rlSymbol, 'rl_=>_`[_`]., 'Term 'Term 'AttrSet, 'Rule) op-hook('crlSymbol, 'crl_=>_if_`[_`]., 'Term 'Term 'Condition 'AttrSet, 'Rule) op-hook('emptyRuleSetSymbol, 'none, nil, 'RuleSet) op-hook('ruleSetSymbol, '__, 'RuleSet 'RuleSet, 'RuleSet) op-hook('stratDeclSymbol, 'strat_:_@_`[_`]., 'Qid 'TypeList 'Type 'AttrSet, 'StratDecl) op-hook('emptyStratDeclSetSymbol, 'none, nil, 'StratDeclSet) op-hook('stratDeclSetSymbol, '__, 'StratDeclSet 'StratDeclSet, 'StratDeclSet) op-hook('sdSymbol, 'sd_:=_`[_`]., 'CallStrategy 'Strategy 'AttrSet, 'StratDefinition) op-hook('csdSymbol, 'csd_:=_if_`[_`]., 'CallStrategy 'Strategy 'EqCondition 'AttrSet, 'StratDefinition) op-hook('emptyStratDefSetSymbol, 'none, nil, 'StratDefSet) op-hook('stratDefSetSymbol, '__, 'StratDefSet 'StratDefSet, 'StratDefSet) op-hook('fmodSymbol, 'fmod_is_sorts_.____endfm, 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet, 'FModule) op-hook('fthSymbol, 'fth_is_sorts_.____endfth, 'Qid 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet, 'FTheory) op-hook('modSymbol, 'mod_is_sorts_._____endm, 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet, 'SModule) op-hook('thSymbol, 'th_is_sorts_._____endth, 'Qid 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet, 'STheory) op-hook('smodSymbol, 'smod_is_sorts_._______endsm, 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet 'StratDeclSet 'StratDefSet, 'StratModule) op-hook('sthSymbol, 'sth_is_sorts_._______endsth, 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet 'StratDeclSet 'StratDefSet, 'StratTheory) op-hook('sortMappingSymbol, 'sort_to_., 'Sort 'Sort, 'SortMapping) op-hook('emptySortMappingSetSymbol, 'none, nil, 'SortMappingSet) op-hook('sortMappingSetSymbol, '__, 'SortMappingSet 'SortMappingSet, 'SortMappingSet) op-hook('opMappingSymbol, 'op_to_., 'Qid 'Qid, 'OpMapping) op-hook('opSpecificMappingSymbol, 'op_:_->_to_., 'Qid 'TypeList 'Type 'Qid, 'OpMapping) op-hook('opTermMappingSymbol, 'op_to`term_., 'Term 'Term, 'OpMapping) op-hook('emptyOpMappingSetSymbol, 'none, nil, 'OpMappingSet) op-hook('opMappingSetSymbol, '__, 'OpMappingSet 'OpMappingSet, 'OpMappingSet) op-hook('stratMappingSymbol, 'strat_to_., 'Qid 'Qid, 'StratMapping) op-hook('stratSpecificMappingSymbol, 'strat_:_@_to_., 'Qid 'TypeList 'Type 'Qid, 'StratMapping) op-hook('stratExprMappingSymbol, 'strat_to`expr_., 'CallStrategy 'Strategy, 'StratMapping) op-hook('emptyStratMappingSetSymbol, 'none, nil, 'StratMappingSet) op-hook('stratMappingSetSymbol, '__, 'StratMappingSet 'StratMappingSet, 'StratMappingSet) op-hook('viewSymbol, 'view_from_to_is___endv, 'Header 'ModuleExpression 'ModuleExpression 'SortMappingSet 'OpMappingSet 'StratMappingSet, 'View) op-hook('anyTypeSymbol, 'anyType, nil, 'Type?) op-hook('unificandPairSymbol, '_=?_, 'Term 'Term, 'UnificandPair) op-hook('unificationConjunctionSymbol, '_/\_, 'UnificationProblem 'UnificationProblem, 'UnificationProblem) op-hook('patternSubjectPairSymbol, '_<=?_, 'Term 'Term, 'PatternSubjectPair) op-hook('matchingConjunctionSymbol, '_/\_, 'MatchingProblem 'MatchingProblem, 'MatchingProblem) op-hook('resultPairSymbol, '`{_`,_`}, 'Term 'Type, 'ResultPair) op-hook('resultTripleSymbol, '`{_`,_`,_`}, 'Term 'Type 'Substitution, 'ResultTriple) op-hook('result4TupleSymbol, '`{_`,_`,_`,_`}, 'Term 'Type 'Substitution 'Context, 'Result4Tuple) op-hook('matchPairSymbol, '`{_`,_`}, 'Substitution 'Context, 'MatchPair) op-hook('unificationTripleSymbol, '`{_`,_`,_`}, 'Substitution 'Substitution 'Qid, 'UnificationTriple) op-hook('variantSymbol, '`{_`,_`,_`,_`,_`}, 'Term 'Substitution 'Qid 'Parent 'Bool, 'Variant) op-hook('narrowingApplyResultSymbol, '`{_`,_`,_`,_`,_`,_`,_`}, 'Term 'Type 'Context 'Qid 'Substitution 'Substitution 'Qid, 'NarrowingApplyResult) op-hook('narrowingSearchResultSymbol, '`{_`,_`,_`,_`,_`,_`}, 'Term 'Type 'Substitution 'Qid 'Substitution 'Qid, 'NarrowingSearchResult) op-hook('traceStepSymbol, '`{_`,_`,_`}, 'Term 'Type 'Rule, 'TraceStep) op-hook('nilTraceSymbol, 'nil, nil, 'Trace) op-hook('traceSymbol, '__, 'Trace 'Trace, 'Trace) op-hook('narrowingStepSymbol, '`{_`,_`,_`,_`,_`,_`,_`}, 'Context 'Qid 'Substitution 'Qid 'Term 'Type 'Substitution, 'NarrowingStep) op-hook('nilNarrowingTraceSymbol, 'nil, nil, 'NarrowingTrace) op-hook('narrowingTraceSymbol, '__, 'NarrowingTrace 'NarrowingTrace, 'NarrowingTrace) op-hook('narrowingSearchPathResultSymbol, '`{_`,_`,_`,_`,_`,_`}, 'Term 'Type 'Substitution 'NarrowingTrace 'Substitution 'Qid, 'NarrowingSearchPathResult) op-hook('smtResultSymbol, '`{_`,_`,_`,_`}, 'Term 'Substitution 'Term 'Nat, 'SmtResult) op-hook('noParseSymbol, 'noParse, 'Nat, 'ResultPair?) op-hook('ambiguitySymbol, 'ambiguity, 'ResultPair 'ResultPair, 'ResultPair?) op-hook('failure2Symbol, 'failure, nil, 'ResultPair?) op-hook('failure3Symbol, 'failure, nil, 'ResultTriple?) op-hook('failureIncomplete3Symbol, 'failureIncomplete, nil, 'ResultTriple?) op-hook('failure4Symbol, 'failure, nil, 'Result4Tuple?) op-hook('noUnifierPairSymbol, 'noUnifier, nil, 'UnificationPair?) op-hook('noUnifierTripleSymbol, 'noUnifier, nil, 'UnificationTriple?) op-hook('noUnifierIncompletePairSymbol, 'noUnifierIncomplete, nil, 'UnificationPair?) op-hook('noUnifierIncompleteTripleSymbol, 'noUnifierIncomplete, nil, 'UnificationTriple?) op-hook('noVariantSymbol, 'noVariant, nil, 'Variant?) op-hook('noVariantIncompleteSymbol, 'noVariantIncomplete, nil, 'Variant?) op-hook('narrowingApplyFailureSymbol, 'failure, nil, 'NarrowingApplyResult?) op-hook('narrowingApplyFailureIncompleteSymbol, 'failureIncomplete, nil, 'NarrowingApplyResult?) op-hook('narrowingSearchFailureSymbol, 'failure, nil, 'NarrowingSearchResult?) op-hook('narrowingSearchFailureIncompleteSymbol, 'failureIncomplete, nil, 'NarrowingSearchResult?) op-hook('narrowingSearchPathFailureSymbol, 'failure, nil, 'NarrowingSearchPathResult?) op-hook('narrowingSearchPathFailureIncompleteSymbol, 'failureIncomplete, nil, 'NarrowingSearchPathResult?) op-hook('noMatchSubstSymbol, 'noMatch, nil, 'Substitution?) op-hook('noMatchIncompleteSubstSymbol, 'noMatchIncomplete, nil, 'Substitution?) op-hook('noMatchPairSymbol, 'noMatch, nil, 'MatchPair?) op-hook('failureTraceSymbol, 'failure, nil, 'Trace?) op-hook('smtFailureSymbol, 'failure, nil, 'SmtResult?) op-hook('noStratParseSymbol, 'noStratParse, 'Nat, 'Strategy?) op-hook('stratAmbiguitySymbol, 'ambiguity, 'Strategy 'Strategy, 'Strategy?) op-hook('mixfixSymbol, 'mixfix, nil, 'PrintOption) op-hook('withParensSymbol, 'with-parens, nil, 'PrintOption) op-hook('flatSymbol, 'flat, nil, 'PrintOption) op-hook('formatPrintOptionSymbol, 'format, nil, 'PrintOption) op-hook('numberSymbol, 'number, nil, 'PrintOption) op-hook('ratSymbol, 'rat, nil, 'PrintOption) op-hook('emptyPrintOptionSetSymbol, 'none, nil, 'PrintOptionSet) op-hook('printOptionSetSymbol, '__, 'PrintOptionSet 'PrintOptionSet, 'PrintOptionSet) op-hook('delaySymbol, 'delay, nil, 'VariantOption) op-hook('filterSymbol, 'filter, nil, 'VariantOption) op-hook('emptyVariantOptionSetSymbol, 'none, nil, 'VariantOptionSet) op-hook('variantOptionSetSymbol, '__, 'VariantOptionSet 'VariantOptionSet, 'VariantOptionSet) op-hook('breadthFirstSymbol, 'breadthFirst, nil, 'SrewriteOption) op-hook('depthFirstSymbol, 'depthFirst, nil, 'SrewriteOption) op-hook('legacyUnificationPairSymbol, '`{_`,_`}, 'Substitution 'Nat, 'UnificationPair) op-hook('legacyUnificationTripleSymbol, '`{_`,_`,_`}, 'Substitution 'Substitution 'Nat, 'UnificationTriple) op-hook('legacyVariantSymbol, '`{_`,_`,_`,_`,_`}, 'Term 'Substitution 'Nat 'Parent 'Bool, 'Variant) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op 'metaRewrite : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaRewrite) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaSearch : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Condition`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultTriple?`] [special( id-hook('MetaLevelOpSymbol, 'metaSearch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaSearchPath : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Condition`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Trace?`] [special( id-hook('MetaLevelOpSymbol, 'metaSearchPath) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaSmtSearch : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Condition`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[SmtResult?`] [special( id-hook('MetaLevelOpSymbol, 'metaSmtSearch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaSrewrite : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[StrategyList`,Strategy?`] '`[SrewriteOption`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaSrewrite) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaUnify : '`[Module`] '`[UnificationProblem`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'legacyMetaUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaVariantDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [ special( id-hook('MetaLevelOpSymbol, 'legacyMetaVariantDisjointUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaVariantDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [none] . op 'metaVariantDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[VariantOptionSet`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [special( id-hook('MetaLevelOpSymbol, 'metaVariantDisjointUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaVariantMatch : '`[Module`] '`[MatchingProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[VariantOptionSet`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Substitution?`] [special( id-hook('MetaLevelOpSymbol, 'metaVariantMatch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaVariantUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'legacyMetaVariantUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaVariantUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [none] . op 'metaVariantUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[VariantOptionSet`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaVariantUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaXapply : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Substitution?`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Result4Tuple?`] [special( id-hook('MetaLevelOpSymbol, 'metaXapply) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaXmatch : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Condition`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaXmatch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metadata : 'String -> 'Attr [ctor] . op 'min : 'Nat 'Nat -> 'Nat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'min) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'min : 'NzNat 'NzNat -> 'NzNat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'min) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'minimalSorts : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaMinimalSorts) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'mixfix : nil -> 'PrintOption [ctor] . op 'modExp : '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[FindResult`,NatList`,Bound`,Parent`] [special( id-hook('NumberOpSymbol, 'modExp) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'mod_is_sorts_._____endm : 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet -> 'SModule [ctor gather('& '& '& '& '& '& '& '&) format('d 'd 's 'n++i 'ni 'd 'd 'ni 'ni 'ni 'ni 'ni 'n--i 'd)] . op 'msg : nil -> 'Attr [ctor] . op 'narrowing : nil -> 'Attr [ctor] . op 'nil : nil -> 'EqCondition [ctor] . op 'nil : nil -> 'HookList [ctor] . op 'nil : nil -> 'ImportList [ctor] . op 'nil : nil -> 'NarrowingTrace [ctor] . op 'nil : nil -> 'NatList [ctor] . op 'nil : nil -> 'ParameterDeclList [ctor] . op 'nil : nil -> 'QidList [ctor] . op 'nil : nil -> 'Trace [ctor] . op 'nil : nil -> 'TypeList [ctor] . op 'noMatch : nil -> 'MatchPair? [ctor] . op 'noMatch : nil -> 'Substitution? [ctor] . op 'noMatchIncomplete : nil -> 'Substitution? [ctor] . op 'noParse : 'Nat -> 'ResultPair? [ctor] . op 'noStratParse : 'Nat -> 'Strategy? [ctor] . op 'noUnifier : nil -> 'UnificationPair? [ctor] . op 'noUnifier : nil -> 'UnificationTriple? [ctor] . op 'noUnifierIncomplete : nil -> 'UnificationPair? [ctor] . op 'noUnifierIncomplete : nil -> 'UnificationTriple? [ctor] . op 'noVariant : nil -> 'Variant? [ctor] . op 'noVariantIncomplete : nil -> 'Variant? [ctor] . op 'none : nil -> 'AttrSet [ctor] . op 'none : nil -> 'EmptyQidSet [ctor] . op 'none : nil -> 'EquationSet [ctor] . op 'none : nil -> 'MembAxSet [ctor] . op 'none : nil -> 'OpDeclSet [ctor] . op 'none : nil -> 'OpMappingSet [ctor] . op 'none : nil -> 'Parent [none] . op 'none : nil -> 'PrintOptionSet [ctor] . op 'none : nil -> 'QidSet [ctor] . op 'none : nil -> 'RuleSet [ctor] . op 'none : nil -> 'SortMappingSet [ctor] . op 'none : nil -> 'StratDeclSet [ctor] . op 'none : nil -> 'StratDefSet [ctor] . op 'none : nil -> 'StratMappingSet [ctor] . op 'none : nil -> 'SubsortDeclSet [ctor] . op 'none : nil -> 'Substitution [ctor] . op 'none : nil -> 'VariantOptionSet [ctor] . op 'nonexec : nil -> 'Attr [ctor] . op 'not : 'Strategy -> 'Strategy [ctor] . op 'notFound : nil -> 'FindResult [ctor] . op 'not_ : 'Bool -> 'Bool [prec(53)] . op 'number : nil -> 'PrintOption [ctor] . op 'object : nil -> 'Attr [ctor] . op 'occurs : 'Nat 'NatList -> 'Bool [none] . op 'occurs : 'Qid 'QidList -> 'Bool [none] . op 'one : 'Strategy -> 'Strategy [ctor] . op 'op-hook : 'Qid 'Qid 'QidList 'Qid -> 'Hook [ctor format('nssss 'd)] . op 'op_:_->_`[_`]. : 'Qid 'TypeList 'Type 'AttrSet -> 'OpDecl [ctor format('d 'd 'd 'd 'd 'd 's 'd 'd 's 'd)] . op 'op_:_->_to_. : 'Qid 'TypeList 'Type 'Qid -> 'OpMapping [ctor] . op 'op_:_->_to_`[_`] : 'Qid 'TypeList 'Type 'Qid 'AttrSet -> 'Renaming [ctor format('d 'd 'd 'd 'd 'd 'd 'd 's 'd 'd 'd)] . op 'op_to_. : 'Qid 'Qid -> 'OpMapping [ctor] . op 'op_to_`[_`] : 'Qid 'Qid 'AttrSet -> 'Renaming [ctor format('d 'd 'd 'd 's 'd 'd 'd)] . op 'op_to`term_. : 'Term 'Term -> 'OpMapping [ctor] . op 'owise : nil -> 'Attr [ctor] . op 'poly : 'NeNatList -> 'Attr [ctor] . op 'prec : 'Nat -> 'Attr [ctor] . op 'print : 'QidList -> 'Attr [ctor] . op 'protecting_. : 'ModuleExpression -> 'Import [ctor] . op 'qid : '`[String`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('QuotedIdentifierOpSymbol, 'qid) op-hook('quotedIdentifierSymbol, ', nil, 'Qid) op-hook('stringSymbol, ', nil, 'Char))] . op 'rat : nil -> 'PrintOption [ctor] . op 'reverse : 'NatList -> 'NatList [none] . op 'reverse : 'NeNatList -> 'NeNatList [none] . op 'reverse : 'NeQidList -> 'NeQidList [none] . op 'reverse : 'QidList -> 'QidList [none] . op 'rfind : 'String 'String 'Nat -> 'FindResult [special( id-hook('StringOpSymbol, 'rfind) op-hook('stringSymbol, ', nil, 'Char) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('notFoundTerm, 'notFound.FindResult))] . op 'right-id : 'Term -> 'Attr [ctor] . op 'rl_=>_`[_`]. : 'Term 'Term 'AttrSet -> 'Rule [ctor format('d 'd 'd 'd 's 'd 'd 's 'd)] . op 's_ : 'Nat -> 'NzNat [iter ctor special( id-hook('SuccSymbol, nil) term-hook('zeroTerm, '0.Zero))] . op 'sameKind : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[Bool`] [special( id-hook('MetaLevelOpSymbol, 'metaSameKind) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'sd : 'Nat 'Nat -> 'Nat [comm special( id-hook('CUI_NumberOpSymbol, 'sd) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'sd_:=_`[_`]. : 'CallStrategy 'Strategy 'AttrSet -> 'StratDefinition [ctor format('d 'd 'd 'd 's 'd 'd 's 'd)] . op 'size : 'NatList -> 'Nat [none] . op 'size : 'NeNatList -> 'NzNat [none] . op 'size : 'NeQidList -> 'NzNat [none] . op 'size : 'QidList -> 'Nat [none] . op 'smod_is_sorts_._______endsm : 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet 'StratDeclSet 'StratDefSet -> 'StratModule [ctor gather('& '& '& '& '& '& '& '& '& '&) format('d 'd 's 'n++i 'ni 'd 'd 'ni 'ni 'ni 'ni 'ni 'ni 'ni 'n--i 'd)] . op 'sortLeq : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[Bool`] [special( id-hook('MetaLevelOpSymbol, 'metaSortLeq) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'sort_to_ : 'Qid 'Qid -> 'Renaming [ctor] . op 'sort_to_. : 'Sort 'Sort -> 'SortMapping [ctor] . op 'special : 'NeHookList -> 'Attr [ctor] . op 'sth_is_sorts_._______endsth : 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet 'StratDeclSet 'StratDefSet -> 'StratTheory [ctor gather('& '& '& '& '& '& '& '& '& '&) format('d 'd 's 'n++i 'ni 'd 'd 'ni 'ni 'ni 'ni 'ni 'ni 'ni 'n--i 'd)] . op 'strat : 'NeNatList -> 'Attr [ctor] . op 'strat_:_@_`[_`]. : 'Qid 'TypeList 'Type 'AttrSet -> 'StratDecl [ctor format('d 'd 'd 'd 'd 'd 's 'd 'd 's 'd)] . op 'strat_:_@_to_ : 'Qid 'TypeList 'Type 'Qid -> 'Renaming [ctor] . op 'strat_:_@_to_. : 'Qid 'TypeList 'Type 'Qid -> 'StratMapping [ctor] . op 'strat_to_ : 'Qid 'Qid -> 'Renaming [ctor] . op 'strat_to_. : 'Qid 'Qid -> 'StratMapping [ctor] . op 'strat_to`expr_. : 'CallStrategy 'Strategy -> 'StratMapping [ctor] . op 'string : 'Qid -> 'String [special( id-hook('QuotedIdentifierOpSymbol, 'string) op-hook('quotedIdentifierSymbol, ', nil, 'Qid) op-hook('stringSymbol, ', nil, 'Char))] . op 'subsort_<_. : 'Sort 'Sort -> 'SubsortDecl [ctor] . op 'substr : 'String 'Nat 'Nat -> 'String [special( id-hook('StringOpSymbol, 'substr) op-hook('stringSymbol, ', nil, 'Char) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'tail : 'NeNatList -> 'NatList [none] . op 'tail : 'NeQidList -> 'QidList [none] . op 'term-hook : 'Qid 'Term -> 'Hook [ctor format('nssss 'd)] . op 'test : 'Strategy -> 'Strategy [ctor] . op 'th_is_sorts_._____endth : 'Qid 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet -> 'STheory [ctor gather('& '& '& '& '& '& '& '&) format('d 'd 'd 'n++i 'ni 'd 'd 'ni 'ni 'ni 'ni 'ni 'n--i 'd)] . op 'top : 'RuleApplication -> 'Strategy [ctor] . op 'true : nil -> 'Bool [ctor special( id-hook('SystemTrue, nil))] . op 'try : 'Strategy -> 'Strategy [ctor] . op 'unbounded : nil -> 'Bound [ctor] . op 'union : 'NeQidSet 'QidSet -> 'NeQidSet [none] . op 'union : 'QidSet 'NeQidSet -> 'NeQidSet [none] . op 'union : 'QidSet 'QidSet -> 'QidSet [none] . op 'upEqs : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[EquationSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpEqs) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upImports : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ImportList`] [special( id-hook('MetaLevelOpSymbol, 'metaUpImports) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upMbs : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[MembAxSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpMbs) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upModule : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[Module`] [special( id-hook('MetaLevelOpSymbol, 'metaUpModule) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upOpDecls : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[OpDeclSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpOpDecls) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upRls : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[RuleSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpRls) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upSds : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[StratDefSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpSds) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upSorts : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaUpSorts) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upStratDecls : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[StratDeclSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpStratDecls) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upSubsortDecls : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[SubsortDeclSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpSubsortDecls) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upTerm : 'Universal -> 'Term [poly(1) special( id-hook('MetaLevelOpSymbol, 'metaUpTerm) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upView : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[View`] [special( id-hook('MetaLevelOpSymbol, 'metaUpView) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upperCase : 'String -> 'String [special( id-hook('StringOpSymbol, 'upperCase) op-hook('stringSymbol, ', nil, 'Char))] . op 'variant : nil -> 'Attr [ctor] . op 'view_from_to_is___endv : 'Header 'ModuleExpression 'ModuleExpression 'SortMappingSet 'OpMappingSet 'StratMappingSet -> 'View [ctor gather('& '& '& '& '& '&) format('d 'd 'd 'd 'd 'd 'd 'n++i 'ni 'ni 'n--i 'd)] . op 'wellFormed : 'Module -> 'Bool [special( id-hook('MetaLevelOpSymbol, 'metaWellFormedModule) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'wellFormed : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[Bool`] [special( id-hook('MetaLevelOpSymbol, 'metaWellFormedTerm) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'wellFormed : '`[Module`] '`[Substitution?`] -> '`[Bool`] [special( id-hook('MetaLevelOpSymbol, 'metaWellFormedSubstitution) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'with-parens : nil -> 'PrintOption [ctor] . op 'xmatch_s.t._ : 'Term 'EqCondition -> 'Strategy [ctor prec(21)] . op 'xmatchrew_s.t._by_ : 'Term 'EqCondition 'UsingPairSet -> 'Strategy [ctor] . op '|_| : 'NeQidSet -> 'NzNat [none] . op '|_| : 'QidSet -> 'Nat [none] . none eq '$applySubstitution['Q:Qid,'S:Substitution] = 'Q:Qid [owise] . eq '$applySubstitution['V:Variable,'_;_['S:Substitution,'_<-_['V:Variable, 'T:Term]]] = 'T:Term [none] . eq '$applySubstitution['_`,_['T:Term,'TL:NeTermList],'S:Substitution] = '_`,_['$applySubstitution['T:Term,'S:Substitution],'$applySubstitution[ 'TL:NeTermList,'S:Substitution]] [none] . eq '$applySubstitution['_`[_`]['Q:Qid,'TL:NeTermList],'S:Substitution] = '_`[_`]['Q:Qid,'$applySubstitution['TL:NeTermList,'S:Substitution]] [none] . eq '$card['none.EmptyQidSet,'C:Nat] = 'C:Nat [none] . eq '$card['_;_['E:Qid,'S:QidSet],'C:Nat] = '$card['S:QidSet,'_+_['C:Nat,'s_[ '0.Zero]]] [owise] . eq '$card['_;_['N:NeQidSet,'N:NeQidSet,'S:QidSet],'C:Nat] = '$card['_;_[ 'N:NeQidSet,'S:QidSet],'C:Nat] [none] . eq '$diff['none.EmptyQidSet,'S':QidSet,'A:QidSet] = 'A:QidSet [none] . eq '$diff['_;_['E:Qid,'S:QidSet],'S':QidSet,'A:QidSet] = '$diff['S:QidSet, 'S':QidSet,'if_then_else_fi['_in_['E:Qid,'S':QidSet],'A:QidSet,'_;_['E:Qid, 'A:QidSet]]] [none] . eq '$intersect['none.EmptyQidSet,'S':QidSet,'A:QidSet] = 'A:QidSet [none] . eq '$intersect['_;_['E:Qid,'S:QidSet],'S':QidSet,'A:QidSet] = '$intersect[ 'S:QidSet,'S':QidSet,'if_then_else_fi['_in_['E:Qid,'S':QidSet],'_;_['E:Qid, 'A:QidSet],'A:QidSet]] [none] . eq '$reverse['nil.NatList,'A:NatList] = 'A:NatList [none] . eq '$reverse['nil.TypeList,'A:QidList] = 'A:QidList [none] . eq '$reverse['__['E:Nat,'L:NatList],'A:NatList] = '$reverse['L:NatList,'__[ 'E:Nat,'A:NatList]] [none] . eq '$reverse['__['E:Qid,'L:QidList],'A:QidList] = '$reverse['L:QidList,'__[ 'E:Qid,'A:QidList]] [none] . eq '$size['nil.NatList,'C:Nat] = 'C:Nat [none] . eq '$size['nil.TypeList,'C:Nat] = 'C:Nat [none] . eq '$size['__['E:Nat,'L:NatList],'C:Nat] = '$size['L:NatList,'_+_['C:Nat,'s_[ '0.Zero]]] [none] . eq '$size['__['E:Qid,'L:QidList],'C:Nat] = '$size['L:QidList,'_+_['C:Nat,'s_[ '0.Zero]]] [none] . eq '_;_['A:Assignment,'A:Assignment] = 'A:Assignment [none] . eq '_;_['N:NeQidSet,'N:NeQidSet] = 'N:NeQidSet [none] . eq '_;_['T:TypeList,'T:TypeList] = 'T:TypeList [none] . eq '_\_['S:QidSet,'N:NeQidSet] = '$diff['S:QidSet,'N:NeQidSet, 'none.EmptyQidSet] [none] . eq '_\_['S:QidSet,'none.EmptyQidSet] = 'S:QidSet [none] . eq '__['A:Attr,'A:Attr] = 'A:Attr [none] . eq '__['D:StratDefinition,'D:StratDefinition] = 'D:StratDefinition [none] . eq '__['E:Equation,'E:Equation] = 'E:Equation [none] . eq '__['M:MembAx,'M:MembAx] = 'M:MembAx [none] . eq '__['O:OpDecl,'O:OpDecl] = 'O:OpDecl [none] . eq '__['O:OpMapping,'O:OpMapping] = 'O:OpMapping [none] . eq '__['O:StratDecl,'O:StratDecl] = 'O:StratDecl [none] . eq '__['R:Rule,'R:Rule] = 'R:Rule [none] . eq '__['S:SortMapping,'S:SortMapping] = 'S:SortMapping [none] . eq '__['S:StratMapping,'S:StratMapping] = 'S:StratMapping [none] . eq '__['S:SubsortDecl,'S:SubsortDecl] = 'S:SubsortDecl [none] . eq '_`,_['U:UsingPair,'U:UsingPair] = 'U:UsingPair [none] . eq '_and-then_['false.Bool,'B:`[Bool`]] = 'false.Bool [none] . eq '_and-then_['true.Bool,'B:`[Bool`]] = 'B:`[Bool`] [none] . eq '_and_['A:Bool,'A:Bool] = 'A:Bool [none] . eq '_and_['A:Bool,'_xor_['B:Bool,'C:Bool]] = '_xor_['_and_['A:Bool,'B:Bool], '_and_['A:Bool,'C:Bool]] [none] . eq '_and_['false.Bool,'A:Bool] = 'false.Bool [none] . eq '_and_['true.Bool,'A:Bool] = 'A:Bool [none] . eq '_implies_['A:Bool,'B:Bool] = 'not_['_xor_['A:Bool,'_and_['A:Bool, 'B:Bool]]] [none] . eq '_in_['E:Qid,'S:QidSet] = 'false.Bool [owise] . eq '_in_['E:Qid,'_;_['E:Qid,'S:QidSet]] = 'true.Bool [none] . eq '_or-else_['false.Bool,'B:`[Bool`]] = 'B:`[Bool`] [none] . eq '_or-else_['true.Bool,'B:`[Bool`]] = 'true.Bool [none] . eq '_or_['A:Bool,'B:Bool] = '_xor_['_and_['A:Bool,'B:Bool],'_xor_['A:Bool, 'B:Bool]] [none] . eq '_psubset_['S:QidSet,'S':QidSet] = '_and-then_['_=/=_['S:QidSet, 'S':QidSet],'_subset_['S:QidSet,'S':QidSet]] [none] . eq '_subset_['none.EmptyQidSet,'S':QidSet] = 'true.Bool [none] . eq '_subset_['_;_['E:Qid,'S:QidSet],'S':QidSet] = '_and-then_['_in_['E:Qid, 'S':QidSet],'_subset_['S:QidSet,'S':QidSet]] [none] . eq '_xor_['A:Bool,'A:Bool] = 'false.Bool [none] . eq '_xor_['false.Bool,'A:Bool] = 'A:Bool [none] . eq '`[_`]['Q:Qid] = 'sth_is_sorts_._______endsth['Q:Qid,'including_.['Q:Qid], 'none.EmptyQidSet,'none.SubsortDeclSet,'none.OpDeclSet,'none.MembAxSet, 'none.EquationSet,'none.RuleSet,'none.StratDeclSet,'none.StratDefSet] [ none] . eq 'append['A:NatList,'L:NatList] = '__['A:NatList,'L:NatList] [none] . eq 'append['A:QidList,'L:QidList] = '__['A:QidList,'L:QidList] [none] . eq 'applySubstitution['M:Module,'T:Term,'S:Substitution] = 'getTerm[ 'metaNormalize['M:Module,'$applySubstitution['T:Term,'S:Substitution]]] [ none] . eq 'delete['E:Qid,'S:QidSet] = 'S:QidSet [owise] . eq 'delete['E:Qid,'_;_['E:Qid,'S:QidSet]] = 'delete['E:Qid,'S:QidSet] [none] . eq 'front['__['L:NatList,'E:Nat]] = 'L:NatList [none] . eq 'front['__['L:QidList,'E:Qid]] = 'L:QidList [none] . eq 'getAccumulatedSubstitution['`{_`,_`,_`,_`,_`,_`,_`}['C:Context,'L:Qid, 'U:Substitution,'UV:Qid,'T:Term,'T:Type,'A:Substitution]] = 'A:Substitution [none] . eq 'getAccumulatedSubstitution['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type, 'A:Substitution,'SV:Qid,'U:Substitution,'UV:Qid]] = 'A:Substitution [none] . eq 'getContext['`{_`,_`,_`,_`,_`,_`,_`}['C:Context,'L:Qid,'U:Substitution, 'UV:Qid,'T:Term,'T:Type,'A:Substitution]] = 'C:Context [none] . eq 'getContext['`{_`,_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'C:Context,'L:Qid, 'TS:Substitution,'RS:Substitution,'V:Qid]] = 'C:Context [none] . eq 'getContext['`{_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution,'C:Context]] = 'C:Context [none] . eq 'getContext['`{_`,_`}['S:Substitution,'C:Context]] = 'C:Context [none] . eq 'getEqs['fmod_is_sorts_.____endfm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'EQS:EquationSet [none] . eq 'getEqs['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'EQS:EquationSet [none] . eq 'getEqs['mod_is_sorts_._____endm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'EQS:EquationSet [none] . eq 'getEqs['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'EQS:EquationSet [ none] . eq 'getEqs['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'EQS:EquationSet [ none] . eq 'getEqs['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'EQS:EquationSet [none] . eq 'getFrom['view_from_to_is___endv['Q:Qid,'ME:ModuleExpression, 'ME':ModuleExpression,'SMS:SortMappingSet,'OMS:OpMappingSet, 'TMS:StratMappingSet]] = 'ME:ModuleExpression [none] . eq 'getImports['fmod_is_sorts_.____endfm['H:Header,'IL:ImportList, 'SS:SortSet,'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet, 'EQS:EquationSet]] = 'IL:ImportList [none] . eq 'getImports['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'IL:ImportList [none] . eq 'getImports['mod_is_sorts_._____endm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'IL:ImportList [none] . eq 'getImports['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList, 'SS:SortSet,'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet, 'EQS:EquationSet,'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'IL:ImportList [none] . eq 'getImports['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList, 'SS:SortSet,'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet, 'EQS:EquationSet,'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'IL:ImportList [none] . eq 'getImports['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'IL:ImportList [none] . eq 'getInitialSubstitution['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type, 'S:Substitution,'T:NarrowingTrace,'U:Substitution,'UV:Qid]] = 'S:Substitution [none] . eq 'getInitialTerm['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution, 'T:NarrowingTrace,'U:Substitution,'UV:Qid]] = 'T:Term [none] . eq 'getInitialType['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution, 'T:NarrowingTrace,'U:Substitution,'UV:Qid]] = 'T:Type [none] . eq 'getLabel['`{_`,_`,_`,_`,_`,_`,_`}['C:Context,'L:Qid,'U:Substitution, 'UV:Qid,'T:Term,'T:Type,'A:Substitution]] = 'L:Qid [none] . eq 'getLabel['`{_`,_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'C:Context,'L:Qid, 'TS:Substitution,'RS:Substitution,'V:Qid]] = 'L:Qid [none] . eq 'getLhsSubstitution['`{_`,_`,_`}['LS:Substitution,'RS:Substitution, 'V:Qid]] = 'LS:Substitution [none] . eq 'getMbs['fmod_is_sorts_.____endfm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'MAS:MembAxSet [none] . eq 'getMbs['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'MAS:MembAxSet [none] . eq 'getMbs['mod_is_sorts_._____endm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'MAS:MembAxSet [none] . eq 'getMbs['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'MAS:MembAxSet [ none] . eq 'getMbs['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'MAS:MembAxSet [ none] . eq 'getMbs['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'MAS:MembAxSet [none] . eq 'getMoreVariantsInLayerFlag['`{_`,_`,_`,_`,_`}['T:Term,'S:Substitution, 'Q:Qid,'P:Parent,'B:Bool]] = 'B:Bool [none] . eq 'getName['C:Constant] = 'qid['substr['string['C:Constant],'0.Zero,'rfind[ 'string['C:Constant],'".".Char,'length['string['C:Constant]]]]] [none] . eq 'getName['V:Variable] = 'qid['substr['string['V:Variable],'0.Zero,'rfind[ 'string['V:Variable],'":".Char,'length['string['V:Variable]]]]] [none] . eq 'getName['fmod_is_sorts_.____endfm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'Q:Qid [none] . eq 'getName['fmod_is_sorts_.____endfm['_`{_`}['Q:Qid,'PDL:ParameterDeclList], 'IL:ImportList,'SS:SortSet,'SSDS:SubsortDeclSet,'OPDS:OpDeclSet, 'MAS:MembAxSet,'EQS:EquationSet]] = 'Q:Qid [none] . eq 'getName['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'Q:Qid [none] . eq 'getName['mod_is_sorts_._____endm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'Q:Qid [none] . eq 'getName['mod_is_sorts_._____endm['_`{_`}['Q:Qid,'PDL:ParameterDeclList], 'IL:ImportList,'SS:SortSet,'SSDS:SubsortDeclSet,'OPDS:OpDeclSet, 'MAS:MembAxSet,'EQS:EquationSet,'RLS:RuleSet]] = 'Q:Qid [none] . eq 'getName['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'Q:Qid [none] . eq 'getName['smod_is_sorts_._______endsm['_`{_`}['Q:Qid, 'PDL:ParameterDeclList],'IL:ImportList,'SS:SortSet,'SSDS:SubsortDeclSet, 'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet,'RLS:RuleSet, 'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'Q:Qid [none] . eq 'getName['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'Q:Qid [none] . eq 'getName['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'Q:Qid [none] . eq 'getName['view_from_to_is___endv['Q:Qid,'ME:ModuleExpression, 'ME':ModuleExpression,'SMS:SortMappingSet,'OMS:OpMappingSet, 'TMS:StratMappingSet]] = 'Q:Qid [none] . eq 'getName['view_from_to_is___endv['_`{_`}['Q:Qid,'PDL:ParameterDeclList], 'ME:ModuleExpression,'ME':ModuleExpression,'SMS:SortMappingSet, 'OMS:OpMappingSet,'TMS:StratMappingSet]] = 'Q:Qid [none] . eq 'getOpMappings['view_from_to_is___endv['Q:Qid,'ME:ModuleExpression, 'ME':ModuleExpression,'SMS:SortMappingSet,'OMS:OpMappingSet, 'TMS:StratMappingSet]] = 'OMS:OpMappingSet [none] . eq 'getOps['fmod_is_sorts_.____endfm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'OPDS:OpDeclSet [none] . eq 'getOps['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'OPDS:OpDeclSet [none] . eq 'getOps['mod_is_sorts_._____endm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'OPDS:OpDeclSet [none] . eq 'getOps['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'OPDS:OpDeclSet [ none] . eq 'getOps['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'OPDS:OpDeclSet [ none] . eq 'getOps['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'OPDS:OpDeclSet [none] . eq 'getParent['`{_`,_`,_`,_`,_`}['T:Term,'S:Substitution,'Q:Qid,'P:Parent, 'B:Bool]] = 'P:Parent [none] . eq 'getRhsSubstitution['`{_`,_`,_`}['LS:Substitution,'RS:Substitution, 'V:Qid]] = 'RS:Substitution [none] . eq 'getRls['fmod_is_sorts_.____endfm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'none.RuleSet [none] . eq 'getRls['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'none.RuleSet [none] . eq 'getRls['mod_is_sorts_._____endm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'RLS:RuleSet [none] . eq 'getRls['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'RLS:RuleSet [none] . eq 'getRls['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'RLS:RuleSet [none] . eq 'getRls['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'RLS:RuleSet [none] . eq 'getRule['`{_`,_`,_`}['T:Term,'T:Type,'R:Rule]] = 'R:Rule [none] . eq 'getRuleSubstitution['`{_`,_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'C:Context, 'L:Qid,'TS:Substitution,'RS:Substitution,'V:Qid]] = 'RS:Substitution [none] . eq 'getSds['fmod_is_sorts_.____endfm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'none.StratDefSet [none] . eq 'getSds['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'none.StratDefSet [none] . eq 'getSds['mod_is_sorts_._____endm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'none.StratDefSet [none] . eq 'getSds['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'STDFS:StratDefSet [ none] . eq 'getSds['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'STDFS:StratDefSet [ none] . eq 'getSds['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'none.StratDefSet [none] . eq 'getSortMappings['view_from_to_is___endv['Q:Qid,'ME:ModuleExpression, 'ME':ModuleExpression,'SMS:SortMappingSet,'OMS:OpMappingSet, 'TMS:StratMappingSet]] = 'SMS:SortMappingSet [none] . eq 'getSorts['fmod_is_sorts_.____endfm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'SS:SortSet [none] . eq 'getSorts['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'SS:SortSet [none] . eq 'getSorts['mod_is_sorts_._____endm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'SS:SortSet [none] . eq 'getSorts['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'SS:SortSet [none] . eq 'getSorts['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'SS:SortSet [none] . eq 'getSorts['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'SS:SortSet [none] . eq 'getStateVariableFamily['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type, 'A:Substitution,'SV:Qid,'U:Substitution,'UV:Qid]] = 'SV:Qid [none] . eq 'getStratMappings['view_from_to_is___endv['Q:Qid,'ME:ModuleExpression, 'ME':ModuleExpression,'SMS:SortMappingSet,'OMS:OpMappingSet, 'TMS:StratMappingSet]] = 'TMS:StratMappingSet [none] . eq 'getStrats['fmod_is_sorts_.____endfm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'none.StratDeclSet [none] . eq 'getStrats['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'none.StratDeclSet [none] . eq 'getStrats['mod_is_sorts_._____endm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'none.StratDeclSet [none] . eq 'getStrats['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'STDS:StratDeclSet [ none] . eq 'getStrats['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'STDS:StratDeclSet [ none] . eq 'getStrats['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'none.StratDeclSet [none] . eq 'getSubsorts['fmod_is_sorts_.____endfm['H:Header,'IL:ImportList, 'SS:SortSet,'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet, 'EQS:EquationSet]] = 'SSDS:SubsortDeclSet [none] . eq 'getSubsorts['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'SSDS:SubsortDeclSet [none] . eq 'getSubsorts['mod_is_sorts_._____endm['H:Header,'IL:ImportList, 'SS:SortSet,'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet, 'EQS:EquationSet,'RLS:RuleSet]] = 'SSDS:SubsortDeclSet [none] . eq 'getSubsorts['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList, 'SS:SortSet,'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet, 'EQS:EquationSet,'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'SSDS:SubsortDeclSet [none] . eq 'getSubsorts['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList, 'SS:SortSet,'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet, 'EQS:EquationSet,'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'SSDS:SubsortDeclSet [none] . eq 'getSubsorts['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'SSDS:SubsortDeclSet [none] . eq 'getSubstitution['`{_`,_`,_`,_`,_`}['T:Term,'S:Substitution,'Q:Qid, 'P:Parent,'B:Bool]] = 'S:Substitution [none] . eq 'getSubstitution['`{_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution, 'C:Context]] = 'S:Substitution [none] . eq 'getSubstitution['`{_`,_`,_`}['T:Term,'T:Type,'S:Substitution]] = 'S:Substitution [none] . eq 'getSubstitution['`{_`,_`}['S:Substitution,'C:Context]] = 'S:Substitution [none] . eq 'getSubstitution['`{_`,_`}['S:Substitution,'V:Qid]] = 'S:Substitution [ none] . eq 'getTerm['`{_`,_`,_`,_`,_`,_`,_`}['C:Context,'L:Qid,'U:Substitution, 'UV:Qid,'T:Term,'T:Type,'A:Substitution]] = 'T:Term [none] . eq 'getTerm['`{_`,_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'C:Context,'L:Qid, 'TS:Substitution,'RS:Substitution,'V:Qid]] = 'T:Term [none] . eq 'getTerm['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'A:Substitution,'SV:Qid, 'U:Substitution,'UV:Qid]] = 'T:Term [none] . eq 'getTerm['`{_`,_`,_`,_`,_`}['T:Term,'S:Substitution,'Q:Qid,'P:Parent, 'B:Bool]] = 'T:Term [none] . eq 'getTerm['`{_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution,'C:Context]] = 'T:Term [none] . eq 'getTerm['`{_`,_`,_`}['T:Term,'T:Type,'R:Rule]] = 'T:Term [none] . eq 'getTerm['`{_`,_`,_`}['T:Term,'T:Type,'S:Substitution]] = 'T:Term [none] . eq 'getTerm['`{_`,_`}['T:Term,'T:Type]] = 'T:Term [none] . eq 'getTermSubstitution['`{_`,_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'C:Context, 'L:Qid,'TS:Substitution,'RS:Substitution,'V:Qid]] = 'TS:Substitution [none] . eq 'getTo['view_from_to_is___endv['Q:Qid,'ME:ModuleExpression, 'ME':ModuleExpression,'SMS:SortMappingSet,'OMS:OpMappingSet, 'TMS:StratMappingSet]] = 'ME':ModuleExpression [none] . eq 'getTrace['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution, 'T:NarrowingTrace,'U:Substitution,'UV:Qid]] = 'T:NarrowingTrace [none] . eq 'getType['C:Constant] = 'qid['substr['string['C:Constant],'_+_['s_[ '0.Zero],'rfind['string['C:Constant],'".".Char,'length['string[ 'C:Constant]]]],'length['string['C:Constant]]]] [none] . eq 'getType['V:Variable] = 'qid['substr['string['V:Variable],'_+_['s_[ '0.Zero],'rfind['string['V:Variable],'":".Char,'length['string[ 'V:Variable]]]],'length['string['V:Variable]]]] [none] . eq 'getType['`{_`,_`,_`,_`,_`,_`,_`}['C:Context,'L:Qid,'U:Substitution, 'UV:Qid,'T:Term,'T:Type,'A:Substitution]] = 'T:Type [none] . eq 'getType['`{_`,_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'C:Context,'L:Qid, 'TS:Substitution,'RS:Substitution,'V:Qid]] = 'T:Type [none] . eq 'getType['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'A:Substitution,'SV:Qid, 'U:Substitution,'UV:Qid]] = 'T:Type [none] . eq 'getType['`{_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution,'C:Context]] = 'T:Type [none] . eq 'getType['`{_`,_`,_`}['T:Term,'T:Type,'R:Rule]] = 'T:Type [none] . eq 'getType['`{_`,_`,_`}['T:Term,'T:Type,'S:Substitution]] = 'T:Type [none] . eq 'getType['`{_`,_`}['T:Term,'T:Type]] = 'T:Type [none] . eq 'getUnifier['`{_`,_`,_`,_`,_`,_`,_`}['C:Context,'L:Qid,'U:Substitution, 'UV:Qid,'T:Term,'T:Type,'A:Substitution]] = 'U:Substitution [none] . eq 'getUnifier['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'A:Substitution,'SV:Qid, 'U:Substitution,'UV:Qid]] = 'U:Substitution [none] . eq 'getUnifier['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution, 'T:NarrowingTrace,'U:Substitution,'UV:Qid]] = 'U:Substitution [none] . eq 'getUnifierVariableFamily['`{_`,_`,_`,_`,_`,_`,_`}['C:Context,'L:Qid, 'U:Substitution,'UV:Qid,'T:Term,'T:Type,'A:Substitution]] = 'UV:Qid [none] . eq 'getUnifierVariableFamily['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type, 'A:Substitution,'SV:Qid,'U:Substitution,'UV:Qid]] = 'UV:Qid [none] . eq 'getUnifierVariableFamily['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type, 'S:Substitution,'T:NarrowingTrace,'U:Substitution,'UV:Qid]] = 'UV:Qid [ none] . eq 'getVariableFamily['`{_`,_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'C:Context, 'L:Qid,'TS:Substitution,'RS:Substitution,'V:Qid]] = 'V:Qid [none] . eq 'getVariableFamily['`{_`,_`,_`,_`,_`}['T:Term,'S:Substitution,'Q:Qid, 'P:Parent,'B:Bool]] = 'Q:Qid [none] . eq 'getVariableFamily['`{_`,_`,_`}['LS:Substitution,'RS:Substitution,'V:Qid]] = 'V:Qid [none] . eq 'getVariableFamily['`{_`,_`}['S:Substitution,'V:Qid]] = 'V:Qid [none] . eq 'head['__['E:Nat,'L:NatList]] = 'E:Nat [none] . eq 'head['__['E:Qid,'L:QidList]] = 'E:Qid [none] . eq 'insert['E:Qid,'S:QidSet] = '_;_['E:Qid,'S:QidSet] [none] . eq 'intersection['S:QidSet,'N:NeQidSet] = '$intersect['S:QidSet,'N:NeQidSet, 'none.EmptyQidSet] [none] . eq 'intersection['S:QidSet,'none.EmptyQidSet] = 'none.EmptyQidSet [none] . eq 'last['__['L:NatList,'E:Nat]] = 'E:Nat [none] . eq 'last['__['L:QidList,'E:Qid]] = 'E:Qid [none] . eq 'metaNarrowingApply['M:Module,'T:Term,'TL:TermList,'Q:Qid,'N:Nat] = 'metaNarrowingApply['M:Module,'T:Term,'TL:TermList,'Q:Qid, 'none.VariantOptionSet,'N:Nat] [none] . eq 'metaNarrowingSearch['M:Module,'T:Term,'T2:Term,'S:Qid,'B:Bound,'F:Qid, 'N:Nat] = 'metaNarrowingSearch['M:Module,'T:Term,'T2:Term,'S:Qid,'B:Bound, 'F:Qid,'none.VariantOptionSet,'N:Nat] [none] . eq 'metaNarrowingSearchPath['M:Module,'T:Term,'T2:Term,'S:Qid,'B:Bound, 'F:Qid,'N:Nat] = 'metaNarrowingSearchPath['M:Module,'T:Term,'T2:Term, 'S:Qid,'B:Bound,'F:Qid,'none.VariantOptionSet,'N:Nat] [none] . eq 'metaParse['M:Module,'Q:QidList,'T:Type?] = 'metaParse['M:Module, 'none.EmptyQidSet,'Q:QidList,'T:Type?] [none] . eq 'metaPrettyPrint['M:Module,'T:Term] = 'metaPrettyPrint['M:Module, 'none.EmptyQidSet,'T:Term,'__['mixfix.PrintOption,'__['flat.PrintOption, '__['format.PrintOption,'__['number.PrintOption,'rat.PrintOption]]]]] [ none] . eq 'metaPrettyPrint['M:Module,'T:Term,'P:PrintOptionSet] = 'metaPrettyPrint[ 'M:Module,'none.EmptyQidSet,'T:Term,'P:PrintOptionSet] [none] . eq 'metaVariantDisjointUnify['M:Module,'U:UnificationProblem,'TL:TermList, 'Q:Qid,'N:Nat] = 'metaVariantDisjointUnify['M:Module,'U:UnificationProblem, 'TL:TermList,'Q:Qid,'none.VariantOptionSet,'N:Nat] [none] . eq 'metaVariantUnify['M:Module,'U:UnificationProblem,'TL:TermList,'Q:Qid, 'N:Nat] = 'metaVariantUnify['M:Module,'U:UnificationProblem,'TL:TermList, 'Q:Qid,'none.VariantOptionSet,'N:Nat] [none] . eq 'not_['A:Bool] = '_xor_['true.Bool,'A:Bool] [none] . eq 'occurs['E:Nat,'nil.NatList] = 'false.Bool [none] . eq 'occurs['E:Nat,'__['E':Nat,'L:NatList]] = 'if_then_else_fi['_==_['E:Nat, 'E':Nat],'true.Bool,'occurs['E:Nat,'L:NatList]] [none] . eq 'occurs['E:Qid,'nil.TypeList] = 'false.Bool [none] . eq 'occurs['E:Qid,'__['E':Qid,'L:QidList]] = 'if_then_else_fi['_==_['E:Qid, 'E':Qid],'true.Bool,'occurs['E:Qid,'L:QidList]] [none] . eq 'reverse['L:NatList] = '$reverse['L:NatList,'nil.NatList] [none] . eq 'reverse['L:QidList] = '$reverse['L:QidList,'nil.TypeList] [none] . eq 'size['L:NatList] = '$size['L:NatList,'0.Zero] [none] . eq 'size['L:QidList] = '$size['L:QidList,'0.Zero] [none] . eq 'tail['__['E:Nat,'L:NatList]] = 'L:NatList [none] . eq 'tail['__['E:Qid,'L:QidList]] = 'L:QidList [none] . eq 'union['S:QidSet,'S':QidSet] = '_;_['S:QidSet,'S':QidSet] [none] . eq '|_|['S:QidSet] = '$card['S:QidSet,'0.Zero] [none] . endfm ========================================== reduce in META-LEVEL : upModule('META-LEVEL, false) . rewrites: 1 result FModule: fmod 'META-LEVEL is protecting 'META-VIEW . protecting 'BOUND . sorts 'MatchOrUnificationPair ; 'MatchPair ; 'MatchPair? ; 'MatchingProblem ; 'NarrowingApplyResult ; 'NarrowingApplyResult? ; 'NarrowingSearchPathResult ; 'NarrowingSearchPathResult? ; 'NarrowingSearchResult ; 'NarrowingSearchResult? ; 'NarrowingStep ; 'NarrowingTrace ; 'NeVariableSet ; 'Parent ; 'PatternSubjectPair ; 'PrintOption ; 'PrintOptionSet ; 'Result4Tuple ; 'Result4Tuple? ; 'ResultPair ; 'ResultPair? ; 'ResultTriple ; 'ResultTriple? ; 'SmtResult ; 'SmtResult? ; 'SrewriteOption ; 'Strategy? ; 'Substitution? ; 'Trace ; 'Trace? ; 'TraceStep ; 'Type? ; 'UnificandPair ; 'UnificationPair ; 'UnificationPair? ; 'UnificationProblem ; 'UnificationTriple ; 'UnificationTriple? ; 'VariableSet ; 'Variant ; 'Variant? ; 'VariantOption ; 'VariantOptionSet . subsort 'EmptyQidSet < 'VariableSet . subsort 'MatchPair < 'MatchOrUnificationPair . subsort 'MatchPair < 'MatchPair? . subsort 'NarrowingApplyResult < 'NarrowingApplyResult? . subsort 'NarrowingSearchPathResult < 'NarrowingSearchPathResult? . subsort 'NarrowingSearchResult < 'NarrowingSearchResult? . subsort 'NarrowingStep < 'NarrowingTrace . subsort 'Nat < 'Parent . subsort 'NeVariableSet < 'NeQidSet . subsort 'NeVariableSet < 'VariableSet . subsort 'PatternSubjectPair < 'MatchingProblem . subsort 'PrintOption < 'PrintOptionSet . subsort 'Result4Tuple < 'Result4Tuple? . subsort 'ResultPair < 'ResultPair? . subsort 'ResultTriple < 'ResultTriple? . subsort 'SmtResult < 'SmtResult? . subsort 'Strategy < 'Strategy? . subsort 'Substitution < 'Substitution? . subsort 'Trace < 'Trace? . subsort 'TraceStep < 'Trace . subsort 'Type < 'Type? . subsort 'UnificandPair < 'UnificationProblem . subsort 'UnificationPair < 'MatchOrUnificationPair . subsort 'UnificationPair < 'UnificationPair? . subsort 'UnificationTriple < 'UnificationTriple? . subsort 'Variable < 'NeVariableSet . subsort 'VariableSet < 'QidSet . subsort 'Variant < 'Variant? . subsort 'VariantOption < 'VariantOptionSet . op '$applySubstitution : 'NeTermList 'Substitution -> 'Term [none] . op '_/\_ : 'MatchingProblem 'MatchingProblem -> 'MatchingProblem [assoc comm ctor prec(73)] . op '_/\_ : 'UnificationProblem 'UnificationProblem -> 'UnificationProblem [ assoc comm ctor prec(73)] . op '_;_ : 'NeVariableSet 'VariableSet -> 'NeVariableSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_;_ : 'VariableSet 'VariableSet -> 'VariableSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_<=?_ : 'Term 'Term -> 'PatternSubjectPair [ctor prec(71)] . op '_=?_ : 'Term 'Term -> 'UnificandPair [ctor prec(71)] . op '__ : 'NarrowingTrace 'NarrowingTrace -> 'NarrowingTrace [assoc ctor id( 'nil.NarrowingTrace)] . op '__ : 'PrintOptionSet 'PrintOptionSet -> 'PrintOptionSet [assoc comm ctor id('none.PrintOptionSet)] . op '__ : 'Trace 'Trace -> 'Trace [assoc ctor id('nil.Trace) format('d 'n 'd)] . op '__ : 'VariantOptionSet 'VariantOptionSet -> 'VariantOptionSet [assoc comm ctor id('none.VariantOptionSet)] . op '`{_`,_`,_`,_`,_`,_`,_`} : 'Context 'Qid 'Substitution 'Qid 'Term 'Type 'Substitution -> 'NarrowingStep [ctor format('ni 'n++i 'd 'ni 'd 'd 'd 'ni 'd 'ni 'd 'd 'd 'd 'n--i 'd)] . op '`{_`,_`,_`,_`,_`,_`,_`} : 'Term 'Type 'Context 'Qid 'Substitution 'Substitution 'Qid -> 'NarrowingApplyResult [ctor format('d 'n++i 'd 'd 'd 'ni 'd 'ni 'd 'd 'd 'd 'd 'ni 'n--i 'd)] . op '`{_`,_`,_`,_`,_`,_`} : 'Term 'Type 'Substitution 'NarrowingTrace 'Substitution 'Qid -> 'NarrowingSearchPathResult [ctor format('d 'n++i 'd 'd 'd 'd 'd 'd 'd 'd 'd 'ni 'n--i 'd)] . op '`{_`,_`,_`,_`,_`,_`} : 'Term 'Type 'Substitution 'Qid 'Substitution 'Qid -> 'NarrowingSearchResult [ctor format('d 'n++i 'd 'd 'd 'd 'd 'ni 'd 'd 'd 'ni 'n--i 'd)] . op '`{_`,_`,_`,_`,_`} : 'Term 'Substitution 'Nat 'Parent 'Bool -> 'Variant [ ctor] . op '`{_`,_`,_`,_`,_`} : 'Term 'Substitution 'Qid 'Parent 'Bool -> 'Variant [ ctor] . op '`{_`,_`,_`,_`} : 'Term 'Substitution 'Term 'Nat -> 'SmtResult [ctor] . op '`{_`,_`,_`,_`} : 'Term 'Type 'Substitution 'Context -> 'Result4Tuple [ ctor] . op '`{_`,_`,_`} : 'Substitution 'Substitution 'Nat -> 'UnificationTriple [ ctor] . op '`{_`,_`,_`} : 'Substitution 'Substitution 'Qid -> 'UnificationTriple [ ctor] . op '`{_`,_`,_`} : 'Term 'Type 'Rule -> 'TraceStep [ctor] . op '`{_`,_`,_`} : 'Term 'Type 'Substitution -> 'ResultTriple [ctor] . op '`{_`,_`} : 'Substitution 'Context -> 'MatchPair [ctor] . op '`{_`,_`} : 'Substitution 'Nat -> 'UnificationPair [ctor] . op '`{_`,_`} : 'Substitution 'Qid -> 'UnificationPair [ctor] . op '`{_`,_`} : 'Term 'Type -> 'ResultPair [ctor] . op 'ambiguity : 'ResultPair 'ResultPair -> 'ResultPair? [ctor] . op 'ambiguity : 'Strategy 'Strategy -> 'Strategy? [ctor] . op 'anyType : nil -> 'Type? [ctor] . op 'applySubstitution : 'Module 'Term 'Substitution -> 'Term [none] . op 'breadthFirst : nil -> 'SrewriteOption [ctor] . op 'completeName : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaCompleteName) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'delay : nil -> 'VariantOption [ctor] . op 'depthFirst : nil -> 'SrewriteOption [ctor] . op 'downTerm : 'Term 'Universal -> 'Universal [poly(2 0) special( id-hook('MetaLevelOpSymbol, 'metaDownTerm) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'failure : nil -> 'NarrowingApplyResult? [ctor] . op 'failure : nil -> 'NarrowingSearchPathResult? [ctor] . op 'failure : nil -> 'NarrowingSearchResult? [ctor] . op 'failure : nil -> 'Result4Tuple? [ctor] . op 'failure : nil -> 'ResultPair? [ctor] . op 'failure : nil -> 'ResultTriple? [ctor] . op 'failure : nil -> 'SmtResult? [ctor] . op 'failure : nil -> 'Trace? [ctor] . op 'failureIncomplete : nil -> 'NarrowingApplyResult? [ctor] . op 'failureIncomplete : nil -> 'NarrowingSearchPathResult? [ctor] . op 'failureIncomplete : nil -> 'NarrowingSearchResult? [ctor] . op 'failureIncomplete : nil -> 'ResultTriple? [ctor] . op 'filter : nil -> 'VariantOption [ctor] . op 'flat : nil -> 'PrintOption [ctor] . op 'format : nil -> 'PrintOption [ctor] . op 'getAccumulatedSubstitution : 'NarrowingSearchResult -> 'Substitution [ none] . op 'getAccumulatedSubstitution : 'NarrowingStep -> 'Substitution [none] . op 'getContext : 'MatchPair -> 'Context [none] . op 'getContext : 'NarrowingApplyResult -> 'Context [none] . op 'getContext : 'NarrowingStep -> 'Context [none] . op 'getContext : 'Result4Tuple -> 'Context [none] . op 'getInitialSubstitution : 'NarrowingSearchPathResult -> 'Substitution [ none] . op 'getInitialTerm : 'NarrowingSearchPathResult -> 'Term [none] . op 'getInitialType : 'NarrowingSearchPathResult -> 'Type [none] . op 'getKind : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaGetKind) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'getKinds : '`[Module`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaGetKinds) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'getLabel : 'NarrowingApplyResult -> 'Qid [none] . op 'getLabel : 'NarrowingStep -> 'Qid [none] . op 'getLhsSubstitution : 'UnificationTriple -> 'Substitution [none] . op 'getMoreVariantsInLayerFlag : 'Variant -> 'Bool [none] . op 'getParent : 'Variant -> 'Parent [none] . op 'getRhsSubstitution : 'UnificationTriple -> 'Substitution [none] . op 'getRule : 'TraceStep -> 'Rule [none] . op 'getRuleSubstitution : 'NarrowingApplyResult -> 'Substitution [none] . op 'getStateVariableFamily : 'NarrowingSearchResult -> 'Qid [none] . op 'getSubstitution : 'MatchPair -> 'Substitution [none] . op 'getSubstitution : 'Result4Tuple -> 'Substitution [none] . op 'getSubstitution : 'ResultTriple -> 'Substitution [none] . op 'getSubstitution : 'UnificationPair -> 'Substitution [none] . op 'getSubstitution : 'Variant -> 'Substitution [none] . op 'getTerm : 'NarrowingApplyResult -> 'Term [none] . op 'getTerm : 'NarrowingSearchResult -> 'Term [none] . op 'getTerm : 'NarrowingStep -> 'Term [none] . op 'getTerm : 'Result4Tuple -> 'Term [none] . op 'getTerm : 'ResultPair -> 'Term [none] . op 'getTerm : 'ResultTriple -> 'Term [none] . op 'getTerm : 'TraceStep -> 'Term [none] . op 'getTerm : 'Variant -> 'Term [none] . op 'getTermSubstitution : 'NarrowingApplyResult -> 'Substitution [none] . op 'getTrace : 'NarrowingSearchPathResult -> 'NarrowingTrace [none] . op 'getType : 'NarrowingApplyResult -> 'Type [none] . op 'getType : 'NarrowingSearchResult -> 'Type [none] . op 'getType : 'NarrowingStep -> 'Type [none] . op 'getType : 'Result4Tuple -> 'Type [none] . op 'getType : 'ResultPair -> 'Type [none] . op 'getType : 'ResultTriple -> 'Type [none] . op 'getType : 'TraceStep -> 'Type [none] . op 'getUnifier : 'NarrowingSearchPathResult -> 'Substitution [none] . op 'getUnifier : 'NarrowingSearchResult -> 'Substitution [none] . op 'getUnifier : 'NarrowingStep -> 'Substitution [none] . op 'getUnifierVariableFamily : 'NarrowingSearchPathResult -> 'Qid [none] . op 'getUnifierVariableFamily : 'NarrowingSearchResult -> 'Qid [none] . op 'getUnifierVariableFamily : 'NarrowingStep -> 'Qid [none] . op 'getVariableFamily : 'NarrowingApplyResult -> 'Qid [none] . op 'getVariableFamily : 'UnificationPair -> 'Qid [none] . op 'getVariableFamily : 'UnificationTriple -> 'Qid [none] . op 'getVariableFamily : 'Variant -> 'Qid [none] . op 'glbSorts : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [ special( id-hook('MetaLevelOpSymbol, 'metaGlbSorts) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'leastSort : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaLeastSort) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'lesserSorts : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaLesserSorts) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'maximalAritySet : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaMaximalAritySet) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'maximalSorts : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaMaximalSorts) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaApply : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Substitution?`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultTriple?`] [special( id-hook('MetaLevelOpSymbol, 'metaApply) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaCheck : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[Bool`] [special( id-hook('MetaLevelOpSymbol, 'metaCheck) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [ special( id-hook('MetaLevelOpSymbol, 'legacyMetaDisjointUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [ special( id-hook('MetaLevelOpSymbol, 'metaDisjointUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaFrewrite : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaFrewrite) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaGetIrredundantVariant : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Variant?`] [special( id-hook('MetaLevelOpSymbol, 'legacyMetaGetIrredundantVariant) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaGetIrredundantVariant : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Variant?`] [special( id-hook('MetaLevelOpSymbol, 'metaGetIrredundantVariant) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaGetVariant : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Variant?`] [special( id-hook('MetaLevelOpSymbol, 'legacyMetaGetVariant) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaGetVariant : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Variant?`] [special( id-hook('MetaLevelOpSymbol, 'metaGetVariant) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaIrredundantDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [ special( id-hook('MetaLevelOpSymbol, 'metaIrredundantDisjointUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaIrredundantUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaIrredundantUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaMatch : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Condition`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Substitution?`] [special( id-hook('MetaLevelOpSymbol, 'metaMatch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNarrow : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[Bool`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaNarrow2) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNarrow : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultTriple?`] [special( id-hook('MetaLevelOpSymbol, 'metaNarrow) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNarrowingApply : 'Module 'Term 'TermList 'Qid 'Nat -> 'NarrowingApplyResult? [none] . op 'metaNarrowingApply : 'Module 'Term 'TermList 'Qid 'VariantOptionSet 'Nat -> 'NarrowingApplyResult? [special( id-hook('MetaLevelOpSymbol, 'metaNarrowingApply) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNarrowingSearch : 'Module 'Term 'Term 'Qid 'Bound 'Qid 'Nat -> 'NarrowingSearchResult? [none] . op 'metaNarrowingSearch : 'Module 'Term 'Term 'Qid 'Bound 'Qid 'VariantOptionSet 'Nat -> 'NarrowingSearchResult? [special( id-hook('MetaLevelOpSymbol, 'metaNarrowingSearch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNarrowingSearchPath : 'Module 'Term 'Term 'Qid 'Bound 'Qid 'Nat -> 'NarrowingSearchPathResult? [none] . op 'metaNarrowingSearchPath : 'Module 'Term 'Term 'Qid 'Bound 'Qid 'VariantOptionSet 'Nat -> 'NarrowingSearchPathResult? [special( id-hook('MetaLevelOpSymbol, 'metaNarrowingSearchPath) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNormalize : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaNormalize) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaParse : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ResultPair?`] [ none] . op 'metaParse : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaParse) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaParseStrategy : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[StrategyList`,Strategy?`] [special( id-hook('MetaLevelOpSymbol, 'metaParseStrategy) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaPrettyPrint : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [none] . op 'metaPrettyPrint : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[PrintOptionSet`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [none] . op 'metaPrettyPrint : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[PrintOptionSet`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaPrettyPrint) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaPrettyPrintStrategy : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[StrategyList`,Strategy?`] '`[PrintOptionSet`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaPrettyPrintStrategy) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaReduce : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaReduce) op-hook('qidSymbol, ', nil, 'Qid) op-hook('metaTermSymbol, '_`[_`], 'Qid 'NeGroundTermList, 'GroundTerm) op-hook('metaArgSymbol, '_`,_, 'NeGroundTermList 'GroundTermList, 'NeGroundTermList) op-hook('emptyTermListSymbol, 'empty, nil, 'GroundTermList) op-hook('assignmentSymbol, '_<-_, 'Variable 'Term, 'Assignment) op-hook('emptySubstitutionSymbol, 'none, nil, 'Substitution) op-hook('substitutionSymbol, '_;_, 'Substitution 'Substitution, 'Substitution) op-hook('holeSymbol, '`[`], nil, 'Context) op-hook('noConditionSymbol, 'nil, nil, 'EqCondition) op-hook('equalityConditionSymbol, '_=_, 'Term 'Term, 'EqCondition) op-hook('sortTestConditionSymbol, '_:_, 'Term 'Sort, 'EqCondition) op-hook('matchConditionSymbol, '_:=_, 'Term 'Term, 'EqCondition) op-hook('rewriteConditionSymbol, '_=>_, 'Term 'Term, 'Condition) op-hook('conjunctionSymbol, '_/\_, 'EqCondition 'EqCondition, 'EqCondition) op-hook('failStratSymbol, 'fail, nil, 'Strategy) op-hook('idleStratSymbol, 'idle, nil, 'Strategy) op-hook('allStratSymbol, 'all, nil, 'RuleApplication) op-hook('applicationStratSymbol, '_`[_`]`{_`}, 'Qid 'Substitution 'StrategyList, 'RuleApplication) op-hook('topStratSymbol, 'top, 'RuleApplication, 'Strategy) op-hook('matchStratSymbol, 'match_s.t._, 'Term 'EqCondition, 'Strategy) op-hook('xmatchStratSymbol, 'xmatch_s.t._, 'Term 'EqCondition, 'Strategy) op-hook('amatchStratSymbol, 'amatch_s.t._, 'Term 'EqCondition, 'Strategy) op-hook('unionStratSymbol, '_|_, 'Strategy 'Strategy, 'Strategy) op-hook('concatStratSymbol, '_;_, 'Strategy 'Strategy, 'Strategy) op-hook('orelseStratSymbol, '_or-else_, 'Strategy 'Strategy, 'Strategy) op-hook('plusStratSymbol, '_+, 'Strategy, 'Strategy) op-hook('conditionalStratSymbol, '_?_:_, 'Strategy 'Strategy 'Strategy, 'Strategy) op-hook('matchrewStratSymbol, 'matchrew_s.t._by_, 'Term 'EqCondition 'UsingPairSet, 'Strategy) op-hook('xmatchrewStratSymbol, 'xmatchrew_s.t._by_, 'Term 'EqCondition 'UsingPairSet, 'Strategy) op-hook('amatchrewStratSymbol, 'amatchrew_s.t._by_, 'Term 'EqCondition 'UsingPairSet, 'Strategy) op-hook('callStratSymbol, '_`[`[_`]`], 'Qid 'TermList, 'CallStrategy) op-hook('oneStratSymbol, 'one, 'Strategy, 'Strategy) op-hook('starStratSymbol, '_*, 'Strategy, 'Strategy) op-hook('normalizationStratSymbol, '_!, 'Strategy, 'Strategy) op-hook('notStratSymbol, 'not, 'Strategy, 'Strategy) op-hook('testStratSymbol, 'test, 'Strategy, 'Strategy) op-hook('tryStratSymbol, 'try, 'Strategy, 'Strategy) op-hook('usingStratSymbol, '_using_, 'Variable 'Strategy, 'UsingPair) op-hook('usingListStratSymbol, '_`,_, 'UsingPairSet 'UsingPairSet, 'UsingPairSet) op-hook('emptyStratListSymbol, 'empty, nil, 'StrategyList) op-hook('stratListSymbol, '_`,_, 'StrategyList 'StrategyList, 'StrategyList) op-hook('headerSymbol, '_`{_`}, 'Qid 'ParameterDeclList, 'Header) op-hook('parameterDeclSymbol, '_::_, 'Sort 'ModuleExpression, 'ParameterDecl) op-hook('parameterDeclListSymbol, '_`,_, 'ParameterDeclList 'ParameterDeclList, 'ParameterDeclList) op-hook('protectingSymbol, 'protecting_., 'ModuleExpression, 'Import) op-hook('extendingSymbol, 'extending_., 'ModuleExpression, 'Import) op-hook('includingSymbol, 'including_., 'ModuleExpression, 'Import) op-hook('nilImportListSymbol, 'nil, nil, 'ImportList) op-hook('importListSymbol, '__, 'ImportList 'ImportList, 'ImportList) op-hook('emptySortSetSymbol, 'none, nil, 'QidSet) op-hook('sortSetSymbol, '_;_, 'QidSet 'QidSet, 'QidSet) op-hook('subsortSymbol, 'subsort_<_., 'Sort 'Sort, 'SubsortDecl) op-hook('emptySubsortDeclSetSymbol, 'none, nil, 'SubsortDeclSet) op-hook('subsortDeclSetSymbol, '__, 'SubsortDeclSet 'SubsortDeclSet, 'SubsortDeclSet) op-hook('nilQidListSymbol, 'nil, nil, 'QidList) op-hook('qidListSymbol, '__, 'QidList 'QidList, 'QidList) op-hook('emptyQidSetSymbol, 'none, nil, 'QidSet) op-hook('qidSetSymbol, '_;_, 'QidSet 'QidSet, 'QidSet) op-hook('succSymbol, 's_, 'Nat, 'NzNat) op-hook('natListSymbol, '__, 'NatList 'NatList, 'NatList) op-hook('unboundedSymbol, 'unbounded, nil, 'Bound) op-hook('noParentSymbol, 'none, nil, 'Parent) op-hook('stringSymbol, ', nil, 'Char) op-hook('sortRenamingSymbol, 'sort_to_, 'Qid 'Qid, 'Renaming) op-hook('opRenamingSymbol, 'op_to_`[_`], 'Qid 'Qid 'AttrSet, 'Renaming) op-hook('opRenamingSymbol2, 'op_:_->_to_`[_`], 'Qid 'TypeList 'Type 'Qid 'AttrSet, 'Renaming) op-hook('labelRenamingSymbol, 'label_to_, 'Qid 'Qid, 'Renaming) op-hook('stratRenamingSymbol, 'strat_to_, 'Qid 'Qid, 'Renaming) op-hook('stratRenamingSymbol2, 'strat_:_@_to_, 'Qid 'TypeList 'Type 'Qid, 'Renaming) op-hook('renamingSetSymbol, '_`,_, 'RenamingSet 'RenamingSet, 'RenamingSet) op-hook('sumSymbol, '_+_, 'ModuleExpression 'ModuleExpression, 'ModuleExpression) op-hook('renamingSymbol, '_*`(_`), 'ModuleExpression 'RenamingSet, 'ModuleExpression) op-hook('instantiationSymbol, '_`{_`}, 'Expression 'NeParameterList, 'Expression) op-hook('termHookSymbol, 'term-hook, 'Qid 'Term, 'Hook) op-hook('hookListSymbol, '__, 'HookList 'HookList, 'HookList) op-hook('idHookSymbol, 'id-hook, 'Qid 'QidList, 'Hook) op-hook('opHookSymbol, 'op-hook, 'Qid 'Qid 'QidList 'Qid, 'Hook) op-hook('assocSymbol, 'assoc, nil, 'Attr) op-hook('commSymbol, 'comm, nil, 'Attr) op-hook('idemSymbol, 'idem, nil, 'Attr) op-hook('iterSymbol, 'iter, nil, 'Attr) op-hook('idSymbol, 'id, 'Term, 'Attr) op-hook('leftIdSymbol, 'left-id, 'Term, 'Attr) op-hook('rightIdSymbol, 'right-id, 'Term, 'Attr) op-hook('stratSymbol, 'strat, 'NeNatList, 'Attr) op-hook('memoSymbol, 'memo, nil, 'Attr) op-hook('precSymbol, 'prec, 'Nat, 'Attr) op-hook('gatherSymbol, 'gather, 'QidList, 'Attr) op-hook('formatSymbol, 'format, 'QidList, 'Attr) op-hook('ctorSymbol, 'ctor, nil, 'Attr) op-hook('frozenSymbol, 'frozen, 'NeNatList, 'Attr) op-hook('polySymbol, 'poly, 'NeNatList, 'Attr) op-hook('configSymbol, 'config, nil, 'Attr) op-hook('objectSymbol, 'object, nil, 'Attr) op-hook('msgSymbol, 'msg, nil, 'Attr) op-hook('specialSymbol, 'special, 'NeHookList, 'Attr) op-hook('labelSymbol, 'label, 'Qid, 'Attr) op-hook('metadataSymbol, 'metadata, 'String, 'Attr) op-hook('owiseSymbol, 'owise, nil, 'Attr) op-hook('variantAttrSymbol, 'variant, nil, 'Attr) op-hook('narrowingSymbol, 'narrowing, nil, 'Attr) op-hook('nonexecSymbol, 'nonexec, nil, 'Attr) op-hook('printSymbol, 'print, 'QidList, 'Attr) op-hook('emptyAttrSetSymbol, 'none, nil, 'AttrSet) op-hook('attrSetSymbol, '__, 'AttrSet 'AttrSet, 'AttrSet) op-hook('opDeclSymbol, 'op_:_->_`[_`]., 'Qid 'TypeList 'Type 'AttrSet, 'OpDecl) op-hook('opDeclSetSymbol, '__, 'OpDeclSet 'OpDeclSet, 'OpDeclSet) op-hook('emptyOpDeclSetSymbol, 'none, nil, 'OpDeclSet) op-hook('mbSymbol, 'mb_:_`[_`]., 'Term 'Sort 'AttrSet, 'MembAx) op-hook('cmbSymbol, 'cmb_:_if_`[_`]., 'Term 'Sort 'EqCondition 'AttrSet, 'MembAx) op-hook('emptyMembAxSetSymbol, 'none, nil, 'MembAxSet) op-hook('membAxSetSymbol, '__, 'MembAxSet 'MembAxSet, 'MembAxSet) op-hook('eqSymbol, 'eq_=_`[_`]., 'Term 'Term 'AttrSet, 'Equation) op-hook('ceqSymbol, 'ceq_=_if_`[_`]., 'Term 'Term 'EqCondition 'AttrSet, 'Equation) op-hook('emptyEquationSetSymbol, 'none, nil, 'EquationSet) op-hook('equationSetSymbol, '__, 'EquationSet 'EquationSet, 'EquationSet) op-hook('rlSymbol, 'rl_=>_`[_`]., 'Term 'Term 'AttrSet, 'Rule) op-hook('crlSymbol, 'crl_=>_if_`[_`]., 'Term 'Term 'Condition 'AttrSet, 'Rule) op-hook('emptyRuleSetSymbol, 'none, nil, 'RuleSet) op-hook('ruleSetSymbol, '__, 'RuleSet 'RuleSet, 'RuleSet) op-hook('stratDeclSymbol, 'strat_:_@_`[_`]., 'Qid 'TypeList 'Type 'AttrSet, 'StratDecl) op-hook('emptyStratDeclSetSymbol, 'none, nil, 'StratDeclSet) op-hook('stratDeclSetSymbol, '__, 'StratDeclSet 'StratDeclSet, 'StratDeclSet) op-hook('sdSymbol, 'sd_:=_`[_`]., 'CallStrategy 'Strategy 'AttrSet, 'StratDefinition) op-hook('csdSymbol, 'csd_:=_if_`[_`]., 'CallStrategy 'Strategy 'EqCondition 'AttrSet, 'StratDefinition) op-hook('emptyStratDefSetSymbol, 'none, nil, 'StratDefSet) op-hook('stratDefSetSymbol, '__, 'StratDefSet 'StratDefSet, 'StratDefSet) op-hook('fmodSymbol, 'fmod_is_sorts_.____endfm, 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet, 'FModule) op-hook('fthSymbol, 'fth_is_sorts_.____endfth, 'Qid 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet, 'FTheory) op-hook('modSymbol, 'mod_is_sorts_._____endm, 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet, 'SModule) op-hook('thSymbol, 'th_is_sorts_._____endth, 'Qid 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet, 'STheory) op-hook('smodSymbol, 'smod_is_sorts_._______endsm, 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet 'StratDeclSet 'StratDefSet, 'StratModule) op-hook('sthSymbol, 'sth_is_sorts_._______endsth, 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet 'StratDeclSet 'StratDefSet, 'StratTheory) op-hook('sortMappingSymbol, 'sort_to_., 'Sort 'Sort, 'SortMapping) op-hook('emptySortMappingSetSymbol, 'none, nil, 'SortMappingSet) op-hook('sortMappingSetSymbol, '__, 'SortMappingSet 'SortMappingSet, 'SortMappingSet) op-hook('opMappingSymbol, 'op_to_., 'Qid 'Qid, 'OpMapping) op-hook('opSpecificMappingSymbol, 'op_:_->_to_., 'Qid 'TypeList 'Type 'Qid, 'OpMapping) op-hook('opTermMappingSymbol, 'op_to`term_., 'Term 'Term, 'OpMapping) op-hook('emptyOpMappingSetSymbol, 'none, nil, 'OpMappingSet) op-hook('opMappingSetSymbol, '__, 'OpMappingSet 'OpMappingSet, 'OpMappingSet) op-hook('stratMappingSymbol, 'strat_to_., 'Qid 'Qid, 'StratMapping) op-hook('stratSpecificMappingSymbol, 'strat_:_@_to_., 'Qid 'TypeList 'Type 'Qid, 'StratMapping) op-hook('stratExprMappingSymbol, 'strat_to`expr_., 'CallStrategy 'Strategy, 'StratMapping) op-hook('emptyStratMappingSetSymbol, 'none, nil, 'StratMappingSet) op-hook('stratMappingSetSymbol, '__, 'StratMappingSet 'StratMappingSet, 'StratMappingSet) op-hook('viewSymbol, 'view_from_to_is___endv, 'Header 'ModuleExpression 'ModuleExpression 'SortMappingSet 'OpMappingSet 'StratMappingSet, 'View) op-hook('anyTypeSymbol, 'anyType, nil, 'Type?) op-hook('unificandPairSymbol, '_=?_, 'Term 'Term, 'UnificandPair) op-hook('unificationConjunctionSymbol, '_/\_, 'UnificationProblem 'UnificationProblem, 'UnificationProblem) op-hook('patternSubjectPairSymbol, '_<=?_, 'Term 'Term, 'PatternSubjectPair) op-hook('matchingConjunctionSymbol, '_/\_, 'MatchingProblem 'MatchingProblem, 'MatchingProblem) op-hook('resultPairSymbol, '`{_`,_`}, 'Term 'Type, 'ResultPair) op-hook('resultTripleSymbol, '`{_`,_`,_`}, 'Term 'Type 'Substitution, 'ResultTriple) op-hook('result4TupleSymbol, '`{_`,_`,_`,_`}, 'Term 'Type 'Substitution 'Context, 'Result4Tuple) op-hook('matchPairSymbol, '`{_`,_`}, 'Substitution 'Context, 'MatchPair) op-hook('unificationTripleSymbol, '`{_`,_`,_`}, 'Substitution 'Substitution 'Qid, 'UnificationTriple) op-hook('variantSymbol, '`{_`,_`,_`,_`,_`}, 'Term 'Substitution 'Qid 'Parent 'Bool, 'Variant) op-hook('narrowingApplyResultSymbol, '`{_`,_`,_`,_`,_`,_`,_`}, 'Term 'Type 'Context 'Qid 'Substitution 'Substitution 'Qid, 'NarrowingApplyResult) op-hook('narrowingSearchResultSymbol, '`{_`,_`,_`,_`,_`,_`}, 'Term 'Type 'Substitution 'Qid 'Substitution 'Qid, 'NarrowingSearchResult) op-hook('traceStepSymbol, '`{_`,_`,_`}, 'Term 'Type 'Rule, 'TraceStep) op-hook('nilTraceSymbol, 'nil, nil, 'Trace) op-hook('traceSymbol, '__, 'Trace 'Trace, 'Trace) op-hook('narrowingStepSymbol, '`{_`,_`,_`,_`,_`,_`,_`}, 'Context 'Qid 'Substitution 'Qid 'Term 'Type 'Substitution, 'NarrowingStep) op-hook('nilNarrowingTraceSymbol, 'nil, nil, 'NarrowingTrace) op-hook('narrowingTraceSymbol, '__, 'NarrowingTrace 'NarrowingTrace, 'NarrowingTrace) op-hook('narrowingSearchPathResultSymbol, '`{_`,_`,_`,_`,_`,_`}, 'Term 'Type 'Substitution 'NarrowingTrace 'Substitution 'Qid, 'NarrowingSearchPathResult) op-hook('smtResultSymbol, '`{_`,_`,_`,_`}, 'Term 'Substitution 'Term 'Nat, 'SmtResult) op-hook('noParseSymbol, 'noParse, 'Nat, 'ResultPair?) op-hook('ambiguitySymbol, 'ambiguity, 'ResultPair 'ResultPair, 'ResultPair?) op-hook('failure2Symbol, 'failure, nil, 'ResultPair?) op-hook('failure3Symbol, 'failure, nil, 'ResultTriple?) op-hook('failureIncomplete3Symbol, 'failureIncomplete, nil, 'ResultTriple?) op-hook('failure4Symbol, 'failure, nil, 'Result4Tuple?) op-hook('noUnifierPairSymbol, 'noUnifier, nil, 'UnificationPair?) op-hook('noUnifierTripleSymbol, 'noUnifier, nil, 'UnificationTriple?) op-hook('noUnifierIncompletePairSymbol, 'noUnifierIncomplete, nil, 'UnificationPair?) op-hook('noUnifierIncompleteTripleSymbol, 'noUnifierIncomplete, nil, 'UnificationTriple?) op-hook('noVariantSymbol, 'noVariant, nil, 'Variant?) op-hook('noVariantIncompleteSymbol, 'noVariantIncomplete, nil, 'Variant?) op-hook('narrowingApplyFailureSymbol, 'failure, nil, 'NarrowingApplyResult?) op-hook('narrowingApplyFailureIncompleteSymbol, 'failureIncomplete, nil, 'NarrowingApplyResult?) op-hook('narrowingSearchFailureSymbol, 'failure, nil, 'NarrowingSearchResult?) op-hook('narrowingSearchFailureIncompleteSymbol, 'failureIncomplete, nil, 'NarrowingSearchResult?) op-hook('narrowingSearchPathFailureSymbol, 'failure, nil, 'NarrowingSearchPathResult?) op-hook('narrowingSearchPathFailureIncompleteSymbol, 'failureIncomplete, nil, 'NarrowingSearchPathResult?) op-hook('noMatchSubstSymbol, 'noMatch, nil, 'Substitution?) op-hook('noMatchIncompleteSubstSymbol, 'noMatchIncomplete, nil, 'Substitution?) op-hook('noMatchPairSymbol, 'noMatch, nil, 'MatchPair?) op-hook('failureTraceSymbol, 'failure, nil, 'Trace?) op-hook('smtFailureSymbol, 'failure, nil, 'SmtResult?) op-hook('noStratParseSymbol, 'noStratParse, 'Nat, 'Strategy?) op-hook('stratAmbiguitySymbol, 'ambiguity, 'Strategy 'Strategy, 'Strategy?) op-hook('mixfixSymbol, 'mixfix, nil, 'PrintOption) op-hook('withParensSymbol, 'with-parens, nil, 'PrintOption) op-hook('flatSymbol, 'flat, nil, 'PrintOption) op-hook('formatPrintOptionSymbol, 'format, nil, 'PrintOption) op-hook('numberSymbol, 'number, nil, 'PrintOption) op-hook('ratSymbol, 'rat, nil, 'PrintOption) op-hook('emptyPrintOptionSetSymbol, 'none, nil, 'PrintOptionSet) op-hook('printOptionSetSymbol, '__, 'PrintOptionSet 'PrintOptionSet, 'PrintOptionSet) op-hook('delaySymbol, 'delay, nil, 'VariantOption) op-hook('filterSymbol, 'filter, nil, 'VariantOption) op-hook('emptyVariantOptionSetSymbol, 'none, nil, 'VariantOptionSet) op-hook('variantOptionSetSymbol, '__, 'VariantOptionSet 'VariantOptionSet, 'VariantOptionSet) op-hook('breadthFirstSymbol, 'breadthFirst, nil, 'SrewriteOption) op-hook('depthFirstSymbol, 'depthFirst, nil, 'SrewriteOption) op-hook('legacyUnificationPairSymbol, '`{_`,_`}, 'Substitution 'Nat, 'UnificationPair) op-hook('legacyUnificationTripleSymbol, '`{_`,_`,_`}, 'Substitution 'Substitution 'Nat, 'UnificationTriple) op-hook('legacyVariantSymbol, '`{_`,_`,_`,_`,_`}, 'Term 'Substitution 'Nat 'Parent 'Bool, 'Variant) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op 'metaRewrite : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaRewrite) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaSearch : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Condition`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultTriple?`] [special( id-hook('MetaLevelOpSymbol, 'metaSearch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaSearchPath : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Condition`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Trace?`] [special( id-hook('MetaLevelOpSymbol, 'metaSearchPath) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaSmtSearch : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Condition`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[SmtResult?`] [special( id-hook('MetaLevelOpSymbol, 'metaSmtSearch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaSrewrite : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[StrategyList`,Strategy?`] '`[SrewriteOption`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaSrewrite) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaUnify : '`[Module`] '`[UnificationProblem`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'legacyMetaUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaVariantDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [ special( id-hook('MetaLevelOpSymbol, 'legacyMetaVariantDisjointUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaVariantDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [none] . op 'metaVariantDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[VariantOptionSet`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [special( id-hook('MetaLevelOpSymbol, 'metaVariantDisjointUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaVariantMatch : '`[Module`] '`[MatchingProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[VariantOptionSet`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Substitution?`] [special( id-hook('MetaLevelOpSymbol, 'metaVariantMatch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaVariantUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'legacyMetaVariantUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaVariantUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [none] . op 'metaVariantUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[VariantOptionSet`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaVariantUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaXapply : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Substitution?`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Result4Tuple?`] [special( id-hook('MetaLevelOpSymbol, 'metaXapply) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaXmatch : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Condition`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaXmatch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'minimalSorts : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaMinimalSorts) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'mixfix : nil -> 'PrintOption [ctor] . op 'nil : nil -> 'NarrowingTrace [ctor] . op 'nil : nil -> 'Trace [ctor] . op 'noMatch : nil -> 'MatchPair? [ctor] . op 'noMatch : nil -> 'Substitution? [ctor] . op 'noMatchIncomplete : nil -> 'Substitution? [ctor] . op 'noParse : 'Nat -> 'ResultPair? [ctor] . op 'noStratParse : 'Nat -> 'Strategy? [ctor] . op 'noUnifier : nil -> 'UnificationPair? [ctor] . op 'noUnifier : nil -> 'UnificationTriple? [ctor] . op 'noUnifierIncomplete : nil -> 'UnificationPair? [ctor] . op 'noUnifierIncomplete : nil -> 'UnificationTriple? [ctor] . op 'noVariant : nil -> 'Variant? [ctor] . op 'noVariantIncomplete : nil -> 'Variant? [ctor] . op 'none : nil -> 'Parent [none] . op 'none : nil -> 'PrintOptionSet [ctor] . op 'none : nil -> 'VariantOptionSet [ctor] . op 'number : nil -> 'PrintOption [ctor] . op 'rat : nil -> 'PrintOption [ctor] . op 'sameKind : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[Bool`] [special( id-hook('MetaLevelOpSymbol, 'metaSameKind) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'sortLeq : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[Bool`] [special( id-hook('MetaLevelOpSymbol, 'metaSortLeq) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upEqs : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[EquationSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpEqs) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upImports : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ImportList`] [special( id-hook('MetaLevelOpSymbol, 'metaUpImports) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upMbs : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[MembAxSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpMbs) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upModule : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[Module`] [special( id-hook('MetaLevelOpSymbol, 'metaUpModule) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upOpDecls : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[OpDeclSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpOpDecls) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upRls : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[RuleSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpRls) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upSds : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[StratDefSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpSds) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upSorts : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaUpSorts) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upStratDecls : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[StratDeclSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpStratDecls) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upSubsortDecls : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[SubsortDeclSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpSubsortDecls) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upTerm : 'Universal -> 'Term [poly(1) special( id-hook('MetaLevelOpSymbol, 'metaUpTerm) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upView : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[View`] [special( id-hook('MetaLevelOpSymbol, 'metaUpView) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'wellFormed : 'Module -> 'Bool [special( id-hook('MetaLevelOpSymbol, 'metaWellFormedModule) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'wellFormed : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[Bool`] [special( id-hook('MetaLevelOpSymbol, 'metaWellFormedTerm) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'wellFormed : '`[Module`] '`[Substitution?`] -> '`[Bool`] [special( id-hook('MetaLevelOpSymbol, 'metaWellFormedSubstitution) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'with-parens : nil -> 'PrintOption [ctor] . none eq '$applySubstitution['Q:Qid,'S:Substitution] = 'Q:Qid [owise] . eq '$applySubstitution['V:Variable,'_;_['S:Substitution,'_<-_['V:Variable, 'T:Term]]] = 'T:Term [none] . eq '$applySubstitution['_`,_['T:Term,'TL:NeTermList],'S:Substitution] = '_`,_['$applySubstitution['T:Term,'S:Substitution],'$applySubstitution[ 'TL:NeTermList,'S:Substitution]] [none] . eq '$applySubstitution['_`[_`]['Q:Qid,'TL:NeTermList],'S:Substitution] = '_`[_`]['Q:Qid,'$applySubstitution['TL:NeTermList,'S:Substitution]] [none] . eq 'applySubstitution['M:Module,'T:Term,'S:Substitution] = 'getTerm[ 'metaNormalize['M:Module,'$applySubstitution['T:Term,'S:Substitution]]] [ none] . eq 'getAccumulatedSubstitution['`{_`,_`,_`,_`,_`,_`,_`}['C:Context,'L:Qid, 'U:Substitution,'UV:Qid,'T:Term,'T:Type,'A:Substitution]] = 'A:Substitution [none] . eq 'getAccumulatedSubstitution['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type, 'A:Substitution,'SV:Qid,'U:Substitution,'UV:Qid]] = 'A:Substitution [none] . eq 'getContext['`{_`,_`,_`,_`,_`,_`,_`}['C:Context,'L:Qid,'U:Substitution, 'UV:Qid,'T:Term,'T:Type,'A:Substitution]] = 'C:Context [none] . eq 'getContext['`{_`,_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'C:Context,'L:Qid, 'TS:Substitution,'RS:Substitution,'V:Qid]] = 'C:Context [none] . eq 'getContext['`{_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution,'C:Context]] = 'C:Context [none] . eq 'getContext['`{_`,_`}['S:Substitution,'C:Context]] = 'C:Context [none] . eq 'getInitialSubstitution['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type, 'S:Substitution,'T:NarrowingTrace,'U:Substitution,'UV:Qid]] = 'S:Substitution [none] . eq 'getInitialTerm['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution, 'T:NarrowingTrace,'U:Substitution,'UV:Qid]] = 'T:Term [none] . eq 'getInitialType['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution, 'T:NarrowingTrace,'U:Substitution,'UV:Qid]] = 'T:Type [none] . eq 'getLabel['`{_`,_`,_`,_`,_`,_`,_`}['C:Context,'L:Qid,'U:Substitution, 'UV:Qid,'T:Term,'T:Type,'A:Substitution]] = 'L:Qid [none] . eq 'getLabel['`{_`,_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'C:Context,'L:Qid, 'TS:Substitution,'RS:Substitution,'V:Qid]] = 'L:Qid [none] . eq 'getLhsSubstitution['`{_`,_`,_`}['LS:Substitution,'RS:Substitution, 'V:Qid]] = 'LS:Substitution [none] . eq 'getMoreVariantsInLayerFlag['`{_`,_`,_`,_`,_`}['T:Term,'S:Substitution, 'Q:Qid,'P:Parent,'B:Bool]] = 'B:Bool [none] . eq 'getParent['`{_`,_`,_`,_`,_`}['T:Term,'S:Substitution,'Q:Qid,'P:Parent, 'B:Bool]] = 'P:Parent [none] . eq 'getRhsSubstitution['`{_`,_`,_`}['LS:Substitution,'RS:Substitution, 'V:Qid]] = 'RS:Substitution [none] . eq 'getRule['`{_`,_`,_`}['T:Term,'T:Type,'R:Rule]] = 'R:Rule [none] . eq 'getRuleSubstitution['`{_`,_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'C:Context, 'L:Qid,'TS:Substitution,'RS:Substitution,'V:Qid]] = 'RS:Substitution [none] . eq 'getStateVariableFamily['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type, 'A:Substitution,'SV:Qid,'U:Substitution,'UV:Qid]] = 'SV:Qid [none] . eq 'getSubstitution['`{_`,_`,_`,_`,_`}['T:Term,'S:Substitution,'Q:Qid, 'P:Parent,'B:Bool]] = 'S:Substitution [none] . eq 'getSubstitution['`{_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution, 'C:Context]] = 'S:Substitution [none] . eq 'getSubstitution['`{_`,_`,_`}['T:Term,'T:Type,'S:Substitution]] = 'S:Substitution [none] . eq 'getSubstitution['`{_`,_`}['S:Substitution,'C:Context]] = 'S:Substitution [none] . eq 'getSubstitution['`{_`,_`}['S:Substitution,'V:Qid]] = 'S:Substitution [ none] . eq 'getTerm['`{_`,_`,_`,_`,_`,_`,_`}['C:Context,'L:Qid,'U:Substitution, 'UV:Qid,'T:Term,'T:Type,'A:Substitution]] = 'T:Term [none] . eq 'getTerm['`{_`,_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'C:Context,'L:Qid, 'TS:Substitution,'RS:Substitution,'V:Qid]] = 'T:Term [none] . eq 'getTerm['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'A:Substitution,'SV:Qid, 'U:Substitution,'UV:Qid]] = 'T:Term [none] . eq 'getTerm['`{_`,_`,_`,_`,_`}['T:Term,'S:Substitution,'Q:Qid,'P:Parent, 'B:Bool]] = 'T:Term [none] . eq 'getTerm['`{_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution,'C:Context]] = 'T:Term [none] . eq 'getTerm['`{_`,_`,_`}['T:Term,'T:Type,'R:Rule]] = 'T:Term [none] . eq 'getTerm['`{_`,_`,_`}['T:Term,'T:Type,'S:Substitution]] = 'T:Term [none] . eq 'getTerm['`{_`,_`}['T:Term,'T:Type]] = 'T:Term [none] . eq 'getTermSubstitution['`{_`,_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'C:Context, 'L:Qid,'TS:Substitution,'RS:Substitution,'V:Qid]] = 'TS:Substitution [none] . eq 'getTrace['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution, 'T:NarrowingTrace,'U:Substitution,'UV:Qid]] = 'T:NarrowingTrace [none] . eq 'getType['`{_`,_`,_`,_`,_`,_`,_`}['C:Context,'L:Qid,'U:Substitution, 'UV:Qid,'T:Term,'T:Type,'A:Substitution]] = 'T:Type [none] . eq 'getType['`{_`,_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'C:Context,'L:Qid, 'TS:Substitution,'RS:Substitution,'V:Qid]] = 'T:Type [none] . eq 'getType['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'A:Substitution,'SV:Qid, 'U:Substitution,'UV:Qid]] = 'T:Type [none] . eq 'getType['`{_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution,'C:Context]] = 'T:Type [none] . eq 'getType['`{_`,_`,_`}['T:Term,'T:Type,'R:Rule]] = 'T:Type [none] . eq 'getType['`{_`,_`,_`}['T:Term,'T:Type,'S:Substitution]] = 'T:Type [none] . eq 'getType['`{_`,_`}['T:Term,'T:Type]] = 'T:Type [none] . eq 'getUnifier['`{_`,_`,_`,_`,_`,_`,_`}['C:Context,'L:Qid,'U:Substitution, 'UV:Qid,'T:Term,'T:Type,'A:Substitution]] = 'U:Substitution [none] . eq 'getUnifier['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'A:Substitution,'SV:Qid, 'U:Substitution,'UV:Qid]] = 'U:Substitution [none] . eq 'getUnifier['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution, 'T:NarrowingTrace,'U:Substitution,'UV:Qid]] = 'U:Substitution [none] . eq 'getUnifierVariableFamily['`{_`,_`,_`,_`,_`,_`,_`}['C:Context,'L:Qid, 'U:Substitution,'UV:Qid,'T:Term,'T:Type,'A:Substitution]] = 'UV:Qid [none] . eq 'getUnifierVariableFamily['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type, 'A:Substitution,'SV:Qid,'U:Substitution,'UV:Qid]] = 'UV:Qid [none] . eq 'getUnifierVariableFamily['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type, 'S:Substitution,'T:NarrowingTrace,'U:Substitution,'UV:Qid]] = 'UV:Qid [ none] . eq 'getVariableFamily['`{_`,_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'C:Context, 'L:Qid,'TS:Substitution,'RS:Substitution,'V:Qid]] = 'V:Qid [none] . eq 'getVariableFamily['`{_`,_`,_`,_`,_`}['T:Term,'S:Substitution,'Q:Qid, 'P:Parent,'B:Bool]] = 'Q:Qid [none] . eq 'getVariableFamily['`{_`,_`,_`}['LS:Substitution,'RS:Substitution,'V:Qid]] = 'V:Qid [none] . eq 'getVariableFamily['`{_`,_`}['S:Substitution,'V:Qid]] = 'V:Qid [none] . eq 'metaNarrowingApply['M:Module,'T:Term,'TL:TermList,'Q:Qid,'N:Nat] = 'metaNarrowingApply['M:Module,'T:Term,'TL:TermList,'Q:Qid, 'none.VariantOptionSet,'N:Nat] [none] . eq 'metaNarrowingSearch['M:Module,'T:Term,'T2:Term,'S:Qid,'B:Bound,'F:Qid, 'N:Nat] = 'metaNarrowingSearch['M:Module,'T:Term,'T2:Term,'S:Qid,'B:Bound, 'F:Qid,'none.VariantOptionSet,'N:Nat] [none] . eq 'metaNarrowingSearchPath['M:Module,'T:Term,'T2:Term,'S:Qid,'B:Bound, 'F:Qid,'N:Nat] = 'metaNarrowingSearchPath['M:Module,'T:Term,'T2:Term, 'S:Qid,'B:Bound,'F:Qid,'none.VariantOptionSet,'N:Nat] [none] . eq 'metaParse['M:Module,'Q:QidList,'T:Type?] = 'metaParse['M:Module, 'none.EmptyQidSet,'Q:QidList,'T:Type?] [none] . eq 'metaPrettyPrint['M:Module,'T:Term] = 'metaPrettyPrint['M:Module, 'none.EmptyQidSet,'T:Term,'__['mixfix.PrintOption,'__['flat.PrintOption, '__['format.PrintOption,'__['number.PrintOption,'rat.PrintOption]]]]] [ none] . eq 'metaPrettyPrint['M:Module,'T:Term,'P:PrintOptionSet] = 'metaPrettyPrint[ 'M:Module,'none.EmptyQidSet,'T:Term,'P:PrintOptionSet] [none] . eq 'metaVariantDisjointUnify['M:Module,'U:UnificationProblem,'TL:TermList, 'Q:Qid,'N:Nat] = 'metaVariantDisjointUnify['M:Module,'U:UnificationProblem, 'TL:TermList,'Q:Qid,'none.VariantOptionSet,'N:Nat] [none] . eq 'metaVariantUnify['M:Module,'U:UnificationProblem,'TL:TermList,'Q:Qid, 'N:Nat] = 'metaVariantUnify['M:Module,'U:UnificationProblem,'TL:TermList, 'Q:Qid,'none.VariantOptionSet,'N:Nat] [none] . endfm ========================================== reduce in META-LEVEL : upModule('BOOL, true) . rewrites: 1 result FModule: fmod 'BOOL is nil sorts 'Bool . none op '_=/=_ : 'Universal 'Universal -> 'Bool [prec(51) poly(1 2) special( id-hook('EqualitySymbol, nil) term-hook('equalTerm, 'false.Bool) term-hook('notEqualTerm, 'true.Bool))] . op '_==_ : 'Universal 'Universal -> 'Bool [prec(51) poly(1 2) special( id-hook('EqualitySymbol, nil) term-hook('equalTerm, 'true.Bool) term-hook('notEqualTerm, 'false.Bool))] . op '_and_ : 'Bool 'Bool -> 'Bool [assoc comm prec(55)] . op '_implies_ : 'Bool 'Bool -> 'Bool [prec(61) gather('e 'E)] . op '_or_ : 'Bool 'Bool -> 'Bool [assoc comm prec(59)] . op '_xor_ : 'Bool 'Bool -> 'Bool [assoc comm prec(57)] . op 'false : nil -> 'Bool [ctor special( id-hook('SystemFalse, nil))] . op 'if_then_else_fi : 'Bool 'Universal 'Universal -> 'Universal [poly(2 3 0) special( id-hook('BranchSymbol, nil) term-hook('1, 'true.Bool) term-hook('2, 'false.Bool))] . op 'not_ : 'Bool -> 'Bool [prec(53)] . op 'true : nil -> 'Bool [ctor special( id-hook('SystemTrue, nil))] . none eq '_and_['A:Bool,'A:Bool] = 'A:Bool [none] . eq '_and_['A:Bool,'_xor_['B:Bool,'C:Bool]] = '_xor_['_and_['A:Bool,'B:Bool], '_and_['A:Bool,'C:Bool]] [none] . eq '_and_['false.Bool,'A:Bool] = 'false.Bool [none] . eq '_and_['true.Bool,'A:Bool] = 'A:Bool [none] . eq '_implies_['A:Bool,'B:Bool] = 'not_['_xor_['A:Bool,'_and_['A:Bool, 'B:Bool]]] [none] . eq '_or_['A:Bool,'B:Bool] = '_xor_['_and_['A:Bool,'B:Bool],'_xor_['A:Bool, 'B:Bool]] [none] . eq '_xor_['A:Bool,'A:Bool] = 'false.Bool [none] . eq '_xor_['false.Bool,'A:Bool] = 'A:Bool [none] . eq 'not_['A:Bool] = '_xor_['true.Bool,'A:Bool] [none] . endfm ========================================== reduce in META-LEVEL : metaReduce(upModule('BOOL, true), '_==_['true.Bool, 'false.Bool]) . rewrites: 3 result ResultPair: {'false.Bool,'Bool} ========================================== reduce in META-LEVEL : upModule('BOOL, false) . rewrites: 1 result FModule: fmod 'BOOL is protecting 'BOOL-OPS . protecting 'TRUTH . sorts none . none none none none endfm ========================================== reduce in META-LEVEL : metaReduce(upModule('BOOL, false), '_==_['true.Bool, 'false.Bool]) . rewrites: 3 result ResultPair: {'false.Bool,'Bool} ========================================== reduce in META-LEVEL : upModule('TRUTH, true) . rewrites: 1 result FModule: fmod 'TRUTH is nil sorts 'Bool . none op '_=/=_ : 'Universal 'Universal -> 'Bool [prec(51) poly(1 2) special( id-hook('EqualitySymbol, nil) term-hook('equalTerm, 'false.Bool) term-hook('notEqualTerm, 'true.Bool))] . op '_==_ : 'Universal 'Universal -> 'Bool [prec(51) poly(1 2) special( id-hook('EqualitySymbol, nil) term-hook('equalTerm, 'true.Bool) term-hook('notEqualTerm, 'false.Bool))] . op 'false : nil -> 'Bool [ctor special( id-hook('SystemFalse, nil))] . op 'if_then_else_fi : 'Bool 'Universal 'Universal -> 'Universal [poly(2 3 0) special( id-hook('BranchSymbol, nil) term-hook('1, 'true.Bool) term-hook('2, 'false.Bool))] . op 'true : nil -> 'Bool [ctor special( id-hook('SystemTrue, nil))] . none none endfm ========================================== reduce in META-LEVEL : upModule('NAT, true) . rewrites: 1 result FModule: fmod 'NAT is nil sorts 'Bool ; 'Nat ; 'NzNat ; 'Zero . subsort 'NzNat < 'Nat . subsort 'Zero < 'Nat . op '0 : nil -> 'Zero [ctor] . op '_&_ : 'Nat 'Nat -> 'Nat [assoc comm prec(53) special( id-hook('ACU_NumberOpSymbol, '&) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_*_ : 'Nat 'Nat -> 'Nat [assoc comm prec(31) special( id-hook('ACU_NumberOpSymbol, '*) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_*_ : 'NzNat 'NzNat -> 'NzNat [assoc comm prec(31) special( id-hook('ACU_NumberOpSymbol, '*) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_+_ : 'Nat 'Nat -> 'Nat [assoc comm prec(33) special( id-hook('ACU_NumberOpSymbol, '+) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_+_ : 'NzNat 'Nat -> 'NzNat [assoc comm prec(33) special( id-hook('ACU_NumberOpSymbol, '+) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_<<_ : 'Nat 'Nat -> 'Nat [prec(35) gather('E 'e) special( id-hook('NumberOpSymbol, '<<) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_<=_ : 'Nat 'Nat -> 'Bool [prec(37) special( id-hook('NumberOpSymbol, '<=) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_<_ : 'Nat 'Nat -> 'Bool [prec(37) special( id-hook('NumberOpSymbol, '<) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_=/=_ : 'Universal 'Universal -> 'Bool [prec(51) poly(1 2) special( id-hook('EqualitySymbol, nil) term-hook('equalTerm, 'false.Bool) term-hook('notEqualTerm, 'true.Bool))] . op '_==_ : 'Universal 'Universal -> 'Bool [prec(51) poly(1 2) special( id-hook('EqualitySymbol, nil) term-hook('equalTerm, 'true.Bool) term-hook('notEqualTerm, 'false.Bool))] . op '_>=_ : 'Nat 'Nat -> 'Bool [prec(37) special( id-hook('NumberOpSymbol, '>=) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_>>_ : 'Nat 'Nat -> 'Nat [prec(35) gather('E 'e) special( id-hook('NumberOpSymbol, '>>) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_>_ : 'Nat 'Nat -> 'Bool [prec(37) special( id-hook('NumberOpSymbol, '>) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_^_ : 'Nat 'Nat -> 'Nat [prec(29) gather('E 'e) special( id-hook('NumberOpSymbol, '^) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_^_ : 'NzNat 'Nat -> 'NzNat [prec(29) gather('E 'e) special( id-hook('NumberOpSymbol, '^) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_and_ : 'Bool 'Bool -> 'Bool [assoc comm prec(55)] . op '_divides_ : 'NzNat 'Nat -> 'Bool [prec(51) special( id-hook('NumberOpSymbol, 'divides) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_implies_ : 'Bool 'Bool -> 'Bool [prec(61) gather('e 'E)] . op '_or_ : 'Bool 'Bool -> 'Bool [assoc comm prec(59)] . op '_quo_ : 'Nat 'NzNat -> 'Nat [prec(31) gather('E 'e) special( id-hook('NumberOpSymbol, 'quo) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_rem_ : 'Nat 'NzNat -> 'Nat [prec(31) gather('E 'e) special( id-hook('NumberOpSymbol, 'rem) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_xor_ : 'Bool 'Bool -> 'Bool [assoc comm prec(57)] . op '_xor_ : 'Nat 'Nat -> 'Nat [assoc comm prec(55) special( id-hook('ACU_NumberOpSymbol, 'xor) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_|_ : 'Nat 'Nat -> 'Nat [assoc comm prec(57) special( id-hook('ACU_NumberOpSymbol, '|) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_|_ : 'NzNat 'Nat -> 'NzNat [assoc comm prec(57) special( id-hook('ACU_NumberOpSymbol, '|) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'false : nil -> 'Bool [ctor special( id-hook('SystemFalse, nil))] . op 'gcd : 'Nat 'Nat -> 'Nat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'gcd) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'gcd : 'NzNat 'Nat -> 'NzNat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'gcd) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'if_then_else_fi : 'Bool 'Universal 'Universal -> 'Universal [poly(2 3 0) special( id-hook('BranchSymbol, nil) term-hook('1, 'true.Bool) term-hook('2, 'false.Bool))] . op 'lcm : 'Nat 'Nat -> 'Nat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'lcm) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'lcm : 'NzNat 'NzNat -> 'NzNat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'lcm) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'max : 'Nat 'Nat -> 'Nat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'max) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'max : 'NzNat 'Nat -> 'NzNat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'max) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'min : 'Nat 'Nat -> 'Nat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'min) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'min : 'NzNat 'NzNat -> 'NzNat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'min) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'modExp : '`[Nat`] '`[Nat`] '`[Nat`] -> '`[Nat`] [special( id-hook('NumberOpSymbol, 'modExp) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'not_ : 'Bool -> 'Bool [prec(53)] . op 's_ : 'Nat -> 'NzNat [iter ctor special( id-hook('SuccSymbol, nil) term-hook('zeroTerm, '0.Zero))] . op 'sd : 'Nat 'Nat -> 'Nat [comm special( id-hook('CUI_NumberOpSymbol, 'sd) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'true : nil -> 'Bool [ctor special( id-hook('SystemTrue, nil))] . none eq '_and_['A:Bool,'A:Bool] = 'A:Bool [none] . eq '_and_['A:Bool,'_xor_['B:Bool,'C:Bool]] = '_xor_['_and_['A:Bool,'B:Bool], '_and_['A:Bool,'C:Bool]] [none] . eq '_and_['false.Bool,'A:Bool] = 'false.Bool [none] . eq '_and_['true.Bool,'A:Bool] = 'A:Bool [none] . eq '_implies_['A:Bool,'B:Bool] = 'not_['_xor_['A:Bool,'_and_['A:Bool, 'B:Bool]]] [none] . eq '_or_['A:Bool,'B:Bool] = '_xor_['_and_['A:Bool,'B:Bool],'_xor_['A:Bool, 'B:Bool]] [none] . eq '_xor_['A:Bool,'A:Bool] = 'false.Bool [none] . eq '_xor_['false.Bool,'A:Bool] = 'A:Bool [none] . eq 'not_['A:Bool] = '_xor_['true.Bool,'A:Bool] [none] . endfm ========================================== reduce in META-LEVEL : metaReduce(upModule('NAT, true), '_+_[upTerm(100), upTerm(66)]) . rewrites: 5 result ResultPair: {'s_^166['0.Zero],'NzNat} ========================================== reduce in META-LEVEL : upModule('NAT, false) . rewrites: 1 result FModule: fmod 'NAT is protecting 'BOOL . sorts 'Nat ; 'NzNat ; 'Zero . subsort 'NzNat < 'Nat . subsort 'Zero < 'Nat . op '0 : nil -> 'Zero [ctor] . op '_&_ : 'Nat 'Nat -> 'Nat [assoc comm prec(53) special( id-hook('ACU_NumberOpSymbol, '&) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_*_ : 'Nat 'Nat -> 'Nat [assoc comm prec(31) special( id-hook('ACU_NumberOpSymbol, '*) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_*_ : 'NzNat 'NzNat -> 'NzNat [assoc comm prec(31) special( id-hook('ACU_NumberOpSymbol, '*) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_+_ : 'Nat 'Nat -> 'Nat [assoc comm prec(33) special( id-hook('ACU_NumberOpSymbol, '+) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_+_ : 'NzNat 'Nat -> 'NzNat [assoc comm prec(33) special( id-hook('ACU_NumberOpSymbol, '+) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_<<_ : 'Nat 'Nat -> 'Nat [prec(35) gather('E 'e) special( id-hook('NumberOpSymbol, '<<) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_<=_ : 'Nat 'Nat -> 'Bool [prec(37) special( id-hook('NumberOpSymbol, '<=) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_<_ : 'Nat 'Nat -> 'Bool [prec(37) special( id-hook('NumberOpSymbol, '<) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_>=_ : 'Nat 'Nat -> 'Bool [prec(37) special( id-hook('NumberOpSymbol, '>=) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_>>_ : 'Nat 'Nat -> 'Nat [prec(35) gather('E 'e) special( id-hook('NumberOpSymbol, '>>) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_>_ : 'Nat 'Nat -> 'Bool [prec(37) special( id-hook('NumberOpSymbol, '>) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_^_ : 'Nat 'Nat -> 'Nat [prec(29) gather('E 'e) special( id-hook('NumberOpSymbol, '^) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_^_ : 'NzNat 'Nat -> 'NzNat [prec(29) gather('E 'e) special( id-hook('NumberOpSymbol, '^) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_divides_ : 'NzNat 'Nat -> 'Bool [prec(51) special( id-hook('NumberOpSymbol, 'divides) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_quo_ : 'Nat 'NzNat -> 'Nat [prec(31) gather('E 'e) special( id-hook('NumberOpSymbol, 'quo) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_rem_ : 'Nat 'NzNat -> 'Nat [prec(31) gather('E 'e) special( id-hook('NumberOpSymbol, 'rem) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_xor_ : 'Nat 'Nat -> 'Nat [assoc comm prec(55) special( id-hook('ACU_NumberOpSymbol, 'xor) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_|_ : 'Nat 'Nat -> 'Nat [assoc comm prec(57) special( id-hook('ACU_NumberOpSymbol, '|) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_|_ : 'NzNat 'Nat -> 'NzNat [assoc comm prec(57) special( id-hook('ACU_NumberOpSymbol, '|) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'gcd : 'Nat 'Nat -> 'Nat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'gcd) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'gcd : 'NzNat 'Nat -> 'NzNat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'gcd) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'lcm : 'Nat 'Nat -> 'Nat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'lcm) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'lcm : 'NzNat 'NzNat -> 'NzNat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'lcm) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'max : 'Nat 'Nat -> 'Nat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'max) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'max : 'NzNat 'Nat -> 'NzNat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'max) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'min : 'Nat 'Nat -> 'Nat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'min) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'min : 'NzNat 'NzNat -> 'NzNat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'min) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'modExp : '`[Nat`] '`[Nat`] '`[Nat`] -> '`[Nat`] [special( id-hook('NumberOpSymbol, 'modExp) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 's_ : 'Nat -> 'NzNat [iter ctor special( id-hook('SuccSymbol, nil) term-hook('zeroTerm, '0.Zero))] . op 'sd : 'Nat 'Nat -> 'Nat [comm special( id-hook('CUI_NumberOpSymbol, 'sd) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . none none endfm ========================================== reduce in META-LEVEL : metaReduce(upModule('NAT, false), '_+_[upTerm(100), upTerm(66)]) . rewrites: 5 result ResultPair: {'s_^166['0.Zero],'NzNat} ========================================== reduce in META-LEVEL : metaReduce(upModule('NAT, true), 'modExp[upTerm(100), upTerm(66),upTerm(17)]) . rewrites: 6 result ResultPair: {'s_^4['0.Zero],'NzNat} ========================================== reduce in META-LEVEL : upModule('META-LEVEL, true) . rewrites: 2 result FModule: fmod 'META-LEVEL is nil sorts 'Assignment ; 'Attr ; 'AttrSet ; 'Bool ; 'Bound ; 'CallStrategy ; 'Char ; 'Condition ; 'Constant ; 'Context ; 'EmptyCommaList ; 'EmptyQidSet ; 'EqCondition ; 'Equation ; 'EquationSet ; 'Expression ; 'FModule ; 'FTheory ; 'FindResult ; 'GTermList ; 'GroundTerm ; 'GroundTermList ; 'Header ; 'Hook ; 'HookList ; 'Import ; 'ImportList ; 'Kind ; 'KindSet ; 'MatchOrUnificationPair ; 'MatchPair ; 'MatchPair? ; 'MatchingProblem ; 'MembAx ; 'MembAxSet ; 'Module ; 'ModuleExpression ; 'NarrowingApplyResult ; 'NarrowingApplyResult? ; 'NarrowingSearchPathResult ; 'NarrowingSearchPathResult? ; 'NarrowingSearchResult ; 'NarrowingSearchResult? ; 'NarrowingStep ; 'NarrowingTrace ; 'Nat ; 'NatList ; 'NeCTermList ; 'NeGroundTermList ; 'NeHookList ; 'NeKindSet ; 'NeNatList ; 'NeParameterDeclList ; 'NeParameterList ; 'NeQidList ; 'NeQidSet ; 'NeSortSet ; 'NeTermList ; 'NeTypeList ; 'NeTypeSet ; 'NeVariableSet ; 'NzNat ; 'OpDecl ; 'OpDeclSet ; 'OpMapping ; 'OpMappingSet ; 'ParameterDecl ; 'ParameterDeclList ; 'ParameterList ; 'Parent ; 'PatternSubjectPair ; 'PrintOption ; 'PrintOptionSet ; 'Qid ; 'QidList ; 'QidSet ; 'Renaming ; 'RenamingSet ; 'Result4Tuple ; 'Result4Tuple? ; 'ResultPair ; 'ResultPair? ; 'ResultTriple ; 'ResultTriple? ; 'Rule ; 'RuleApplication ; 'RuleSet ; 'SModule ; 'STheory ; 'SmtResult ; 'SmtResult? ; 'Sort ; 'SortMapping ; 'SortMappingSet ; 'SortSet ; 'SrewriteOption ; 'StratDecl ; 'StratDeclSet ; 'StratDefSet ; 'StratDefinition ; 'StratMapping ; 'StratMappingSet ; 'StratModule ; 'StratTheory ; 'Strategy ; 'Strategy? ; 'StrategyList ; 'String ; 'SubsortDecl ; 'SubsortDeclSet ; 'Substitution ; 'Substitution? ; 'Term ; 'TermList ; 'TermQid ; 'Trace ; 'Trace? ; 'TraceStep ; 'Type ; 'Type? ; 'TypeList ; 'TypeListSet ; 'TypeSet ; 'UnificandPair ; 'UnificationPair ; 'UnificationPair? ; 'UnificationProblem ; 'UnificationTriple ; 'UnificationTriple? ; 'UsingPair ; 'UsingPairSet ; 'Variable ; 'VariableSet ; 'Variant ; 'Variant? ; 'VariantOption ; 'VariantOptionSet ; 'View ; 'ViewExpression ; 'Zero . subsort 'Assignment < 'Substitution . subsort 'Attr < 'AttrSet . subsort 'CallStrategy < 'Strategy . subsort 'Char < 'String . subsort 'Constant < 'GroundTerm . subsort 'Constant < 'TermQid . subsort 'Context < 'NeCTermList . subsort 'EmptyCommaList < 'GroundTermList . subsort 'EmptyCommaList < 'ParameterList . subsort 'EmptyQidSet < 'KindSet . subsort 'EmptyQidSet < 'SortSet . subsort 'EmptyQidSet < 'VariableSet . subsort 'EqCondition < 'Condition . subsort 'Equation < 'EquationSet . subsort 'Expression < 'ModuleExpression . subsort 'Expression < 'ViewExpression . subsort 'FModule < 'SModule . subsort 'FTheory < 'STheory . subsort 'GroundTerm < 'NeGroundTermList . subsort 'GroundTerm < 'Term . subsort 'GroundTermList < 'TermList . subsort 'Hook < 'NeHookList . subsort 'Import < 'ImportList . subsort 'Kind < 'NeKindSet . subsort 'Kind < 'Type . subsort 'KindSet < 'TypeSet . subsort 'MatchPair < 'MatchOrUnificationPair . subsort 'MatchPair < 'MatchPair? . subsort 'MembAx < 'MembAxSet . subsort 'NarrowingApplyResult < 'NarrowingApplyResult? . subsort 'NarrowingSearchPathResult < 'NarrowingSearchPathResult? . subsort 'NarrowingSearchResult < 'NarrowingSearchResult? . subsort 'NarrowingStep < 'NarrowingTrace . subsort 'Nat < 'Bound . subsort 'Nat < 'FindResult . subsort 'Nat < 'NeNatList . subsort 'Nat < 'Parent . subsort 'NeCTermList < 'GTermList . subsort 'NeGroundTermList < 'GroundTermList . subsort 'NeGroundTermList < 'NeTermList . subsort 'NeHookList < 'HookList . subsort 'NeKindSet < 'KindSet . subsort 'NeKindSet < 'NeTypeSet . subsort 'NeNatList < 'NatList . subsort 'NeParameterDeclList < 'ParameterDeclList . subsort 'NeParameterList < 'ParameterList . subsort 'NeQidList < 'QidList . subsort 'NeQidSet < 'QidSet . subsort 'NeSortSet < 'NeTypeSet . subsort 'NeSortSet < 'SortSet . subsort 'NeTermList < 'TermList . subsort 'NeTypeList < 'NeQidList . subsort 'NeTypeList < 'TypeList . subsort 'NeTypeSet < 'NeQidSet . subsort 'NeTypeSet < 'TypeSet . subsort 'NeVariableSet < 'NeQidSet . subsort 'NeVariableSet < 'VariableSet . subsort 'NzNat < 'Nat . subsort 'OpDecl < 'OpDeclSet . subsort 'OpMapping < 'OpMappingSet . subsort 'ParameterDecl < 'NeParameterDeclList . subsort 'PatternSubjectPair < 'MatchingProblem . subsort 'PrintOption < 'PrintOptionSet . subsort 'Qid < 'Header . subsort 'Qid < 'NeQidList . subsort 'Qid < 'NeQidSet . subsort 'Renaming < 'RenamingSet . subsort 'Result4Tuple < 'Result4Tuple? . subsort 'ResultPair < 'ResultPair? . subsort 'ResultTriple < 'ResultTriple? . subsort 'Rule < 'RuleSet . subsort 'RuleApplication < 'Strategy . subsort 'SModule < 'Module . subsort 'STheory < 'Module . subsort 'SmtResult < 'SmtResult? . subsort 'Sort < 'Expression . subsort 'Sort < 'NeSortSet . subsort 'Sort < 'Type . subsort 'SortMapping < 'SortMappingSet . subsort 'SortSet < 'TypeSet . subsort 'StratDecl < 'StratDeclSet . subsort 'StratDefinition < 'StratDefSet . subsort 'StratMapping < 'StratMappingSet . subsort 'StratModule < 'Module . subsort 'StratTheory < 'Module . subsort 'Strategy < 'Strategy? . subsort 'Strategy < 'StrategyList . subsort 'SubsortDecl < 'SubsortDeclSet . subsort 'Substitution < 'Substitution? . subsort 'Term < 'NeTermList . subsort 'TermList < 'GTermList . subsort 'TermQid < 'Qid . subsort 'TermQid < 'Term . subsort 'Trace < 'Trace? . subsort 'TraceStep < 'Trace . subsort 'Type < 'NeTypeList . subsort 'Type < 'NeTypeSet . subsort 'Type < 'Qid . subsort 'Type < 'Type? . subsort 'TypeList < 'QidList . subsort 'TypeList < 'TypeListSet . subsort 'TypeSet < 'QidSet . subsort 'TypeSet < 'TypeListSet . subsort 'UnificandPair < 'UnificationProblem . subsort 'UnificationPair < 'MatchOrUnificationPair . subsort 'UnificationPair < 'UnificationPair? . subsort 'UnificationTriple < 'UnificationTriple? . subsort 'UsingPair < 'UsingPairSet . subsort 'Variable < 'NeVariableSet . subsort 'Variable < 'TermQid . subsort 'VariableSet < 'QidSet . subsort 'Variant < 'Variant? . subsort 'VariantOption < 'VariantOptionSet . subsort 'ViewExpression < 'NeParameterList . subsort 'Zero < 'Nat . op '$applySubstitution : 'NeTermList 'Substitution -> 'Term [none] . op '$card : 'QidSet 'Nat -> 'Nat [none] . op '$diff : 'QidSet 'QidSet 'QidSet -> 'QidSet [none] . op '$intersect : 'QidSet 'QidSet 'QidSet -> 'QidSet [none] . op '$reverse : 'NatList 'NatList -> 'NatList [none] . op '$reverse : 'QidList 'QidList -> 'QidList [none] . op '$size : 'NatList 'Nat -> 'Nat [none] . op '$size : 'QidList 'Nat -> 'Nat [none] . op '0 : nil -> 'Zero [ctor] . op ' : nil -> 'Constant [special( id-hook('QuotedIdentifierSymbol, 'constantQid))] . op ' : nil -> 'Kind [special( id-hook('QuotedIdentifierSymbol, 'kindQid))] . op ' : nil -> 'Qid [special( id-hook('QuotedIdentifierSymbol, nil))] . op ' : nil -> 'Sort [special( id-hook('QuotedIdentifierSymbol, 'sortQid))] . op ' : nil -> 'Variable [special( id-hook('QuotedIdentifierSymbol, 'variableQid))] . op ' : nil -> 'Char [special( id-hook('StringSymbol, nil))] . op ' : nil -> 'String [special( id-hook('StringSymbol, nil))] . op '_! : 'Strategy -> 'Strategy [ctor] . op '_&_ : 'Nat 'Nat -> 'Nat [assoc comm prec(53) special( id-hook('ACU_NumberOpSymbol, '&) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_* : 'Strategy -> 'Strategy [ctor] . op '_*_ : 'Nat 'Nat -> 'Nat [assoc comm prec(31) special( id-hook('ACU_NumberOpSymbol, '*) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_*_ : 'NzNat 'NzNat -> 'NzNat [assoc comm prec(31) special( id-hook('ACU_NumberOpSymbol, '*) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_*`(_`) : 'ModuleExpression 'RenamingSet -> 'ModuleExpression [ctor prec( 39) format('d 'd 's 'n++i 'n--i 'd)] . op '_+ : 'Strategy -> 'Strategy [ctor] . op '_+_ : 'ModuleExpression 'ModuleExpression -> 'ModuleExpression [assoc comm ctor] . op '_+_ : 'Nat 'Nat -> 'Nat [assoc comm prec(33) special( id-hook('ACU_NumberOpSymbol, '+) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_+_ : 'NzNat 'Nat -> 'NzNat [assoc comm prec(33) special( id-hook('ACU_NumberOpSymbol, '+) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_+_ : 'String 'String -> 'String [prec(33) gather('E 'e) special( id-hook('StringOpSymbol, '+) op-hook('stringSymbol, ', nil, 'Char))] . op '_/\_ : 'Condition 'Condition -> 'Condition [assoc ctor id( 'nil.EqCondition) prec(73)] . op '_/\_ : 'EqCondition 'EqCondition -> 'EqCondition [assoc ctor id( 'nil.EqCondition) prec(73)] . op '_/\_ : 'MatchingProblem 'MatchingProblem -> 'MatchingProblem [assoc comm ctor prec(73)] . op '_/\_ : 'UnificationProblem 'UnificationProblem -> 'UnificationProblem [ assoc comm ctor prec(73)] . op '_::_ : 'Sort 'ModuleExpression -> 'ParameterDecl [none] . op '_:=_ : 'Term 'Term -> 'EqCondition [ctor prec(71)] . op '_:_ : 'Term 'Sort -> 'EqCondition [ctor prec(71)] . op '_;_ : 'EmptyQidSet 'EmptyQidSet -> 'EmptyQidSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_;_ : 'KindSet 'KindSet -> 'KindSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_;_ : 'NeKindSet 'KindSet -> 'NeKindSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_;_ : 'NeQidSet 'QidSet -> 'NeQidSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_;_ : 'NeSortSet 'SortSet -> 'NeSortSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_;_ : 'NeTypeSet 'TypeSet -> 'NeTypeSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_;_ : 'NeVariableSet 'VariableSet -> 'NeVariableSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_;_ : 'QidSet 'QidSet -> 'QidSet [assoc comm ctor id('none.EmptyQidSet) prec(43)] . op '_;_ : 'SortSet 'SortSet -> 'SortSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_;_ : 'Strategy 'Strategy -> 'Strategy [assoc ctor id('idle.Strategy) prec(39) gather('e 'E)] . op '_;_ : 'Substitution 'Substitution -> 'Substitution [assoc comm ctor id( 'none.Substitution) prec(65)] . op '_;_ : 'TypeListSet 'TypeListSet -> 'TypeListSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_;_ : 'TypeSet 'TypeSet -> 'TypeSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_;_ : 'VariableSet 'VariableSet -> 'VariableSet [assoc comm ctor id( 'none.EmptyQidSet) prec(43)] . op '_<-_ : 'Variable 'Term -> 'Assignment [ctor prec(63) format('n++i 'd 'd '--)] . op '_<<_ : 'Nat 'Nat -> 'Nat [prec(35) gather('E 'e) special( id-hook('NumberOpSymbol, '<<) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_<=?_ : 'Term 'Term -> 'PatternSubjectPair [ctor prec(71)] . op '_<=_ : 'Nat 'Nat -> 'Bool [prec(37) special( id-hook('NumberOpSymbol, '<=) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_<=_ : 'String 'String -> 'Bool [prec(37) special( id-hook('StringOpSymbol, '<=) op-hook('stringSymbol, ', nil, 'Char) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_<_ : 'Nat 'Nat -> 'Bool [prec(37) special( id-hook('NumberOpSymbol, '<) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_<_ : 'String 'String -> 'Bool [prec(37) special( id-hook('StringOpSymbol, '<) op-hook('stringSymbol, ', nil, 'Char) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_=/=_ : 'Universal 'Universal -> 'Bool [prec(51) poly(1 2) special( id-hook('EqualitySymbol, nil) term-hook('equalTerm, 'false.Bool) term-hook('notEqualTerm, 'true.Bool))] . op '_==_ : 'Universal 'Universal -> 'Bool [prec(51) poly(1 2) special( id-hook('EqualitySymbol, nil) term-hook('equalTerm, 'true.Bool) term-hook('notEqualTerm, 'false.Bool))] . op '_=>_ : 'Term 'Term -> 'Condition [ctor prec(71)] . op '_=?_ : 'Term 'Term -> 'UnificandPair [ctor prec(71)] . op '_=_ : 'Term 'Term -> 'EqCondition [ctor prec(71)] . op '_>=_ : 'Nat 'Nat -> 'Bool [prec(37) special( id-hook('NumberOpSymbol, '>=) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_>=_ : 'String 'String -> 'Bool [prec(37) special( id-hook('StringOpSymbol, '>=) op-hook('stringSymbol, ', nil, 'Char) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_>>_ : 'Nat 'Nat -> 'Nat [prec(35) gather('E 'e) special( id-hook('NumberOpSymbol, '>>) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_>_ : 'Nat 'Nat -> 'Bool [prec(37) special( id-hook('NumberOpSymbol, '>) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_>_ : 'String 'String -> 'Bool [prec(37) special( id-hook('StringOpSymbol, '>) op-hook('stringSymbol, ', nil, 'Char) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_?_:_ : 'Strategy 'Strategy 'Strategy -> 'Strategy [ctor prec(55)] . op '_\_ : 'QidSet 'QidSet -> 'QidSet [gather('E 'e)] . op '_^_ : 'Nat 'Nat -> 'Nat [prec(29) gather('E 'e) special( id-hook('NumberOpSymbol, '^) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_^_ : 'NzNat 'Nat -> 'NzNat [prec(29) gather('E 'e) special( id-hook('NumberOpSymbol, '^) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '__ : 'AttrSet 'AttrSet -> 'AttrSet [assoc comm ctor id('none.AttrSet)] . op '__ : 'EquationSet 'EquationSet -> 'EquationSet [assoc comm ctor id( 'none.EquationSet) format('d 'ni 'd)] . op '__ : 'HookList 'HookList -> 'HookList [assoc ctor id('nil.HookList)] . op '__ : 'HookList 'NeHookList -> 'NeHookList [assoc ctor id('nil.HookList)] . op '__ : 'ImportList 'ImportList -> 'ImportList [assoc ctor id( 'nil.ImportList) format('d 'ni 'd)] . op '__ : 'MembAxSet 'MembAxSet -> 'MembAxSet [assoc comm ctor id( 'none.MembAxSet) format('d 'ni 'd)] . op '__ : 'NarrowingTrace 'NarrowingTrace -> 'NarrowingTrace [assoc ctor id( 'nil.NarrowingTrace)] . op '__ : 'NatList 'NatList -> 'NatList [assoc ctor id('nil.NatList) prec(25)] . op '__ : 'NatList 'NeNatList -> 'NeNatList [assoc ctor id('nil.NatList) prec( 25)] . op '__ : 'NeHookList 'HookList -> 'NeHookList [assoc ctor id('nil.HookList)] . op '__ : 'NeNatList 'NatList -> 'NeNatList [assoc ctor id('nil.NatList) prec( 25)] . op '__ : 'NeQidList 'QidList -> 'NeQidList [assoc ctor id('nil.TypeList) prec(25)] . op '__ : 'NeTypeList 'TypeList -> 'NeTypeList [assoc ctor id('nil.TypeList) prec(25)] . op '__ : 'OpDeclSet 'OpDeclSet -> 'OpDeclSet [assoc comm ctor id( 'none.OpDeclSet) format('d 'ni 'd)] . op '__ : 'OpMappingSet 'OpMappingSet -> 'OpMappingSet [assoc comm ctor id( 'none.OpMappingSet) format('d 'ni 'd)] . op '__ : 'PrintOptionSet 'PrintOptionSet -> 'PrintOptionSet [assoc comm ctor id('none.PrintOptionSet)] . op '__ : 'QidList 'NeQidList -> 'NeQidList [assoc ctor id('nil.TypeList) prec(25)] . op '__ : 'QidList 'QidList -> 'QidList [assoc ctor id('nil.TypeList) prec( 25)] . op '__ : 'RuleSet 'RuleSet -> 'RuleSet [assoc comm ctor id('none.RuleSet) format('d 'ni 'd)] . op '__ : 'SortMappingSet 'SortMappingSet -> 'SortMappingSet [assoc comm ctor id('none.SortMappingSet) format('d 'ni 'd)] . op '__ : 'StratDeclSet 'StratDeclSet -> 'StratDeclSet [assoc comm ctor id( 'none.StratDeclSet) format('d 'ni 'd)] . op '__ : 'StratDefSet 'StratDefSet -> 'StratDefSet [assoc comm ctor id( 'none.StratDefSet) format('d 'ni 'd)] . op '__ : 'StratMappingSet 'StratMappingSet -> 'StratMappingSet [assoc comm ctor id('none.StratMappingSet) format('d 'ni 'd)] . op '__ : 'SubsortDeclSet 'SubsortDeclSet -> 'SubsortDeclSet [assoc comm ctor id('none.SubsortDeclSet) format('d 'ni 'd)] . op '__ : 'Trace 'Trace -> 'Trace [assoc ctor id('nil.Trace) format('d 'n 'd)] . op '__ : 'TypeList 'NeTypeList -> 'NeTypeList [assoc ctor id('nil.TypeList) prec(25)] . op '__ : 'TypeList 'TypeList -> 'TypeList [assoc ctor id('nil.TypeList) prec( 25)] . op '__ : 'VariantOptionSet 'VariantOptionSet -> 'VariantOptionSet [assoc comm ctor id('none.VariantOptionSet)] . op '_`,_ : 'EmptyCommaList 'EmptyCommaList -> 'EmptyCommaList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'GTermList 'GTermList -> 'GTermList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'GroundTermList 'GroundTermList -> 'GroundTermList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'GroundTermList 'NeGroundTermList -> 'NeGroundTermList [assoc ctor id('empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'NeCTermList 'TermList -> 'NeCTermList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'NeGroundTermList 'GroundTermList -> 'NeGroundTermList [assoc ctor id('empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'NeParameterDeclList 'ParameterDeclList -> 'NeParameterDeclList [ assoc ctor id('nil.ParameterDeclList) prec(121)] . op '_`,_ : 'NeParameterList 'ParameterList -> 'NeParameterList [assoc ctor id('empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'NeTermList 'TermList -> 'NeTermList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'ParameterDeclList 'NeParameterDeclList -> 'NeParameterDeclList [ assoc ctor id('nil.ParameterDeclList) prec(121)] . op '_`,_ : 'ParameterDeclList 'ParameterDeclList -> 'ParameterDeclList [assoc ctor id('nil.ParameterDeclList) prec(121)] . op '_`,_ : 'ParameterList 'NeParameterList -> 'NeParameterList [assoc ctor id('empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'ParameterList 'ParameterList -> 'ParameterList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'RenamingSet 'RenamingSet -> 'RenamingSet [assoc comm ctor prec( 43) format('d 'd 'ni 'd)] . op '_`,_ : 'StrategyList 'StrategyList -> 'StrategyList [assoc ctor id( 'empty.StrategyList)] . op '_`,_ : 'TermList 'NeCTermList -> 'NeCTermList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'TermList 'NeTermList -> 'NeTermList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'TermList 'TermList -> 'TermList [assoc ctor id( 'empty.EmptyCommaList) prec(121) gather('e 'E)] . op '_`,_ : 'UsingPairSet 'UsingPairSet -> 'UsingPairSet [assoc comm ctor prec(61)] . op '_`[_`] : 'Qid 'NeCTermList -> 'Context [ctor] . op '_`[_`] : 'Qid 'NeGroundTermList -> 'GroundTerm [ctor] . op '_`[_`] : 'Qid 'NeTermList -> 'Term [ctor] . op '_`[_`]`{_`} : 'Qid 'Substitution 'StrategyList -> 'RuleApplication [ctor prec(21)] . op '_`[`[_`]`] : 'Qid 'TermList -> 'CallStrategy [ctor prec(21)] . op '_`{_`} : 'Expression 'NeParameterList -> 'Expression [ctor prec(37)] . op '_`{_`} : 'ModuleExpression 'NeParameterList -> 'ModuleExpression [ctor prec(37)] . op '_`{_`} : 'Qid 'ParameterDeclList -> 'Header [ctor] . op '_`{_`} : 'ViewExpression 'NeParameterList -> 'ViewExpression [ctor prec( 37)] . op '_and-then_ : 'Bool 'Bool -> 'Bool [strat(1 0) prec(55) gather('e 'E)] . op '_and_ : 'Bool 'Bool -> 'Bool [assoc comm prec(55)] . op '_divides_ : 'NzNat 'Nat -> 'Bool [prec(51) special( id-hook('NumberOpSymbol, 'divides) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_implies_ : 'Bool 'Bool -> 'Bool [prec(61) gather('e 'E)] . op '_in_ : 'Qid 'QidSet -> 'Bool [none] . op '_or-else_ : 'Bool 'Bool -> 'Bool [strat(1 0) prec(59) gather('e 'E)] . op '_or-else_ : 'Strategy 'Strategy -> 'Strategy [assoc ctor prec(43) gather( 'e 'E)] . op '_or_ : 'Bool 'Bool -> 'Bool [assoc comm prec(59)] . op '_psubset_ : 'QidSet 'QidSet -> 'Bool [none] . op '_quo_ : 'Nat 'NzNat -> 'Nat [prec(31) gather('E 'e) special( id-hook('NumberOpSymbol, 'quo) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_rem_ : 'Nat 'NzNat -> 'Nat [prec(31) gather('E 'e) special( id-hook('NumberOpSymbol, 'rem) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_subset_ : 'QidSet 'QidSet -> 'Bool [none] . op '_using_ : 'Variable 'Strategy -> 'UsingPair [ctor prec(21)] . op '_xor_ : 'Bool 'Bool -> 'Bool [assoc comm prec(57)] . op '_xor_ : 'Nat 'Nat -> 'Nat [assoc comm prec(55) special( id-hook('ACU_NumberOpSymbol, 'xor) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_|_ : 'Nat 'Nat -> 'Nat [assoc comm prec(57) special( id-hook('ACU_NumberOpSymbol, '|) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_|_ : 'NzNat 'Nat -> 'NzNat [assoc comm prec(57) special( id-hook('ACU_NumberOpSymbol, '|) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_|_ : 'Strategy 'Strategy -> 'Strategy [assoc comm ctor id( 'fail.Strategy) prec(41) gather('e 'E)] . op '`[_`] : 'Qid -> 'Module [none] . op '`[`] : nil -> 'Context [ctor] . op '`{_`,_`,_`,_`,_`,_`,_`} : 'Context 'Qid 'Substitution 'Qid 'Term 'Type 'Substitution -> 'NarrowingStep [ctor format('ni 'n++i 'd 'ni 'd 'd 'd 'ni 'd 'ni 'd 'd 'd 'd 'n--i 'd)] . op '`{_`,_`,_`,_`,_`,_`,_`} : 'Term 'Type 'Context 'Qid 'Substitution 'Substitution 'Qid -> 'NarrowingApplyResult [ctor format('d 'n++i 'd 'd 'd 'ni 'd 'ni 'd 'd 'd 'd 'd 'ni 'n--i 'd)] . op '`{_`,_`,_`,_`,_`,_`} : 'Term 'Type 'Substitution 'NarrowingTrace 'Substitution 'Qid -> 'NarrowingSearchPathResult [ctor format('d 'n++i 'd 'd 'd 'd 'd 'd 'd 'd 'd 'ni 'n--i 'd)] . op '`{_`,_`,_`,_`,_`,_`} : 'Term 'Type 'Substitution 'Qid 'Substitution 'Qid -> 'NarrowingSearchResult [ctor format('d 'n++i 'd 'd 'd 'd 'd 'ni 'd 'd 'd 'ni 'n--i 'd)] . op '`{_`,_`,_`,_`,_`} : 'Term 'Substitution 'Nat 'Parent 'Bool -> 'Variant [ ctor] . op '`{_`,_`,_`,_`,_`} : 'Term 'Substitution 'Qid 'Parent 'Bool -> 'Variant [ ctor] . op '`{_`,_`,_`,_`} : 'Term 'Substitution 'Term 'Nat -> 'SmtResult [ctor] . op '`{_`,_`,_`,_`} : 'Term 'Type 'Substitution 'Context -> 'Result4Tuple [ ctor] . op '`{_`,_`,_`} : 'Substitution 'Substitution 'Nat -> 'UnificationTriple [ ctor] . op '`{_`,_`,_`} : 'Substitution 'Substitution 'Qid -> 'UnificationTriple [ ctor] . op '`{_`,_`,_`} : 'Term 'Type 'Rule -> 'TraceStep [ctor] . op '`{_`,_`,_`} : 'Term 'Type 'Substitution -> 'ResultTriple [ctor] . op '`{_`,_`} : 'Substitution 'Context -> 'MatchPair [ctor] . op '`{_`,_`} : 'Substitution 'Nat -> 'UnificationPair [ctor] . op '`{_`,_`} : 'Substitution 'Qid -> 'UnificationPair [ctor] . op '`{_`,_`} : 'Term 'Type -> 'ResultPair [ctor] . op 'all : nil -> 'RuleApplication [ctor] . op 'amatch_s.t._ : 'Term 'EqCondition -> 'Strategy [ctor prec(21)] . op 'amatchrew_s.t._by_ : 'Term 'EqCondition 'UsingPairSet -> 'Strategy [ctor] . op 'ambiguity : 'ResultPair 'ResultPair -> 'ResultPair? [ctor] . op 'ambiguity : 'Strategy 'Strategy -> 'Strategy? [ctor] . op 'anyType : nil -> 'Type? [ctor] . op 'append : 'NatList 'NatList -> 'NatList [none] . op 'append : 'NatList 'NeNatList -> 'NeNatList [none] . op 'append : 'NeNatList 'NatList -> 'NeNatList [none] . op 'append : 'NeQidList 'QidList -> 'NeQidList [none] . op 'append : 'QidList 'NeQidList -> 'NeQidList [none] . op 'append : 'QidList 'QidList -> 'QidList [none] . op 'applySubstitution : 'Module 'Term 'Substitution -> 'Term [none] . op 'ascii : 'Char -> 'Nat [special( id-hook('StringOpSymbol, 'ascii) op-hook('stringSymbol, ', nil, 'Char) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'assoc : nil -> 'Attr [ctor] . op 'breadthFirst : nil -> 'SrewriteOption [ctor] . op 'ceq_=_if_`[_`]. : 'Term 'Term 'EqCondition 'AttrSet -> 'Equation [ctor format('d 'd 'd 'd 'd 'd 's 'd 'd 's 'd)] . op 'char : '`[FindResult`,NatList`,Bound`,Parent`] -> '`[String`] [special( id-hook('StringOpSymbol, 'char) op-hook('stringSymbol, ', nil, 'Char) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'cmb_:_if_`[_`]. : 'Term 'Sort 'EqCondition 'AttrSet -> 'MembAx [ctor format('d 'd 'd 'd 'd 'd 's 'd 'd 's 'd)] . op 'comm : nil -> 'Attr [ctor] . op 'completeName : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaCompleteName) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'config : nil -> 'Attr [ctor] . op 'crl_=>_if_`[_`]. : 'Term 'Term 'Condition 'AttrSet -> 'Rule [ctor format( 'd 'd 'd 'd 'd 'd 's 'd 'd 's 'd)] . op 'csd_:=_if_`[_`]. : 'CallStrategy 'Strategy 'EqCondition 'AttrSet -> 'StratDefinition [ctor format('d 'd 'd 'd 'd 'd 's 'd 'd 's 'd)] . op 'ctor : nil -> 'Attr [ctor] . op 'delay : nil -> 'VariantOption [ctor] . op 'delete : 'Qid 'QidSet -> 'QidSet [none] . op 'depthFirst : nil -> 'SrewriteOption [ctor] . op 'downTerm : 'Term 'Universal -> 'Universal [poly(2 0) special( id-hook('MetaLevelOpSymbol, 'metaDownTerm) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'empty : nil -> 'EmptyCommaList [ctor] . op 'empty : nil -> 'GroundTermList [ctor] . op 'empty : nil -> 'StrategyList [ctor] . op 'eq_=_`[_`]. : 'Term 'Term 'AttrSet -> 'Equation [ctor format('d 'd 'd 'd 's 'd 'd 's 'd)] . op 'extending_. : 'ModuleExpression -> 'Import [ctor] . op 'fail : nil -> 'Strategy [ctor] . op 'failure : nil -> 'NarrowingApplyResult? [ctor] . op 'failure : nil -> 'NarrowingSearchPathResult? [ctor] . op 'failure : nil -> 'NarrowingSearchResult? [ctor] . op 'failure : nil -> 'Result4Tuple? [ctor] . op 'failure : nil -> 'ResultPair? [ctor] . op 'failure : nil -> 'ResultTriple? [ctor] . op 'failure : nil -> 'SmtResult? [ctor] . op 'failure : nil -> 'Trace? [ctor] . op 'failureIncomplete : nil -> 'NarrowingApplyResult? [ctor] . op 'failureIncomplete : nil -> 'NarrowingSearchPathResult? [ctor] . op 'failureIncomplete : nil -> 'NarrowingSearchResult? [ctor] . op 'failureIncomplete : nil -> 'ResultTriple? [ctor] . op 'false : nil -> 'Bool [ctor special( id-hook('SystemFalse, nil))] . op 'filter : nil -> 'VariantOption [ctor] . op 'find : 'String 'String 'Nat -> 'FindResult [special( id-hook('StringOpSymbol, 'find) op-hook('stringSymbol, ', nil, 'Char) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('notFoundTerm, 'notFound.FindResult))] . op 'flat : nil -> 'PrintOption [ctor] . op 'fmod_is_sorts_.____endfm : 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet -> 'FModule [ctor gather('& '& '& '& '& '& '&) format('d 'd 's 'n++i 'ni 'd 'd 'ni 'ni 'ni 'ni 'n--i 'd)] . op 'format : 'QidList -> 'Attr [ctor] . op 'format : nil -> 'PrintOption [ctor] . op 'front : 'NeNatList -> 'NatList [none] . op 'front : 'NeQidList -> 'QidList [none] . op 'frozen : 'NeNatList -> 'Attr [ctor] . op 'fth_is_sorts_.____endfth : 'Qid 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet -> 'FTheory [ctor gather('& '& '& '& '& '& '&) format('d 'd 'd 'n++i 'ni 'd 'd 'ni 'ni 'ni 'ni 'n--i 'd)] . op 'gather : 'QidList -> 'Attr [ctor] . op 'gcd : 'Nat 'Nat -> 'Nat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'gcd) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'gcd : 'NzNat 'Nat -> 'NzNat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'gcd) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'getAccumulatedSubstitution : 'NarrowingSearchResult -> 'Substitution [ none] . op 'getAccumulatedSubstitution : 'NarrowingStep -> 'Substitution [none] . op 'getContext : 'MatchPair -> 'Context [none] . op 'getContext : 'NarrowingApplyResult -> 'Context [none] . op 'getContext : 'NarrowingStep -> 'Context [none] . op 'getContext : 'Result4Tuple -> 'Context [none] . op 'getEqs : 'Module -> 'EquationSet [none] . op 'getFrom : 'View -> 'ModuleExpression [none] . op 'getImports : 'Module -> 'ImportList [none] . op 'getInitialSubstitution : 'NarrowingSearchPathResult -> 'Substitution [ none] . op 'getInitialTerm : 'NarrowingSearchPathResult -> 'Term [none] . op 'getInitialType : 'NarrowingSearchPathResult -> 'Type [none] . op 'getKind : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaGetKind) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'getKinds : '`[Module`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaGetKinds) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'getLabel : 'NarrowingApplyResult -> 'Qid [none] . op 'getLabel : 'NarrowingStep -> 'Qid [none] . op 'getLhsSubstitution : 'UnificationTriple -> 'Substitution [none] . op 'getMbs : 'Module -> 'MembAxSet [none] . op 'getMoreVariantsInLayerFlag : 'Variant -> 'Bool [none] . op 'getName : 'Constant -> 'Qid [none] . op 'getName : 'Module -> 'Qid [none] . op 'getName : 'Variable -> 'Qid [none] . op 'getName : 'View -> 'Qid [none] . op 'getOpMappings : 'View -> 'OpMappingSet [none] . op 'getOps : 'Module -> 'OpDeclSet [none] . op 'getParent : 'Variant -> 'Parent [none] . op 'getRhsSubstitution : 'UnificationTriple -> 'Substitution [none] . op 'getRls : 'Module -> 'RuleSet [none] . op 'getRule : 'TraceStep -> 'Rule [none] . op 'getRuleSubstitution : 'NarrowingApplyResult -> 'Substitution [none] . op 'getSds : 'Module -> 'StratDefSet [none] . op 'getSortMappings : 'View -> 'SortMappingSet [none] . op 'getSorts : 'Module -> 'SortSet [none] . op 'getStateVariableFamily : 'NarrowingSearchResult -> 'Qid [none] . op 'getStratMappings : 'View -> 'StratMappingSet [none] . op 'getStrats : 'Module -> 'StratDeclSet [none] . op 'getSubsorts : 'Module -> 'SubsortDeclSet [none] . op 'getSubstitution : 'MatchPair -> 'Substitution [none] . op 'getSubstitution : 'Result4Tuple -> 'Substitution [none] . op 'getSubstitution : 'ResultTriple -> 'Substitution [none] . op 'getSubstitution : 'UnificationPair -> 'Substitution [none] . op 'getSubstitution : 'Variant -> 'Substitution [none] . op 'getTerm : 'NarrowingApplyResult -> 'Term [none] . op 'getTerm : 'NarrowingSearchResult -> 'Term [none] . op 'getTerm : 'NarrowingStep -> 'Term [none] . op 'getTerm : 'Result4Tuple -> 'Term [none] . op 'getTerm : 'ResultPair -> 'Term [none] . op 'getTerm : 'ResultTriple -> 'Term [none] . op 'getTerm : 'TraceStep -> 'Term [none] . op 'getTerm : 'Variant -> 'Term [none] . op 'getTermSubstitution : 'NarrowingApplyResult -> 'Substitution [none] . op 'getTo : 'View -> 'ModuleExpression [none] . op 'getTrace : 'NarrowingSearchPathResult -> 'NarrowingTrace [none] . op 'getType : 'Constant -> 'Type [none] . op 'getType : 'NarrowingApplyResult -> 'Type [none] . op 'getType : 'NarrowingSearchResult -> 'Type [none] . op 'getType : 'NarrowingStep -> 'Type [none] . op 'getType : 'Result4Tuple -> 'Type [none] . op 'getType : 'ResultPair -> 'Type [none] . op 'getType : 'ResultTriple -> 'Type [none] . op 'getType : 'TraceStep -> 'Type [none] . op 'getType : 'Variable -> 'Type [none] . op 'getUnifier : 'NarrowingSearchPathResult -> 'Substitution [none] . op 'getUnifier : 'NarrowingSearchResult -> 'Substitution [none] . op 'getUnifier : 'NarrowingStep -> 'Substitution [none] . op 'getUnifierVariableFamily : 'NarrowingSearchPathResult -> 'Qid [none] . op 'getUnifierVariableFamily : 'NarrowingSearchResult -> 'Qid [none] . op 'getUnifierVariableFamily : 'NarrowingStep -> 'Qid [none] . op 'getVariableFamily : 'NarrowingApplyResult -> 'Qid [none] . op 'getVariableFamily : 'UnificationPair -> 'Qid [none] . op 'getVariableFamily : 'UnificationTriple -> 'Qid [none] . op 'getVariableFamily : 'Variant -> 'Qid [none] . op 'glbSorts : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [ special( id-hook('MetaLevelOpSymbol, 'metaGlbSorts) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'head : 'NeNatList -> 'Nat [none] . op 'head : 'NeQidList -> 'Qid [none] . op 'id : 'Term -> 'Attr [ctor] . op 'id-hook : 'Qid 'QidList -> 'Hook [ctor format('nssss 'd)] . op 'idem : nil -> 'Attr [ctor] . op 'idle : nil -> 'Strategy [ctor] . op 'if_then_else_fi : 'Bool 'Universal 'Universal -> 'Universal [poly(2 3 0) special( id-hook('BranchSymbol, nil) term-hook('1, 'true.Bool) term-hook('2, 'false.Bool))] . op 'including_. : 'ModuleExpression -> 'Import [ctor] . op 'insert : 'Qid 'QidSet -> 'QidSet [none] . op 'intersection : 'QidSet 'QidSet -> 'QidSet [none] . op 'iter : nil -> 'Attr [ctor] . op 'label : 'Qid -> 'Attr [ctor] . op 'label_to_ : 'Qid 'Qid -> 'Renaming [ctor] . op 'last : 'NeNatList -> 'Nat [none] . op 'last : 'NeQidList -> 'Qid [none] . op 'lcm : 'Nat 'Nat -> 'Nat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'lcm) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'lcm : 'NzNat 'NzNat -> 'NzNat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'lcm) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'leastSort : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaLeastSort) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'left-id : 'Term -> 'Attr [ctor] . op 'length : 'String -> 'Nat [special( id-hook('StringOpSymbol, 'length) op-hook('stringSymbol, ', nil, 'Char) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'lesserSorts : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaLesserSorts) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'lowerCase : 'String -> 'String [special( id-hook('StringOpSymbol, 'lowerCase) op-hook('stringSymbol, ', nil, 'Char))] . op 'match_s.t._ : 'Term 'EqCondition -> 'Strategy [ctor prec(21)] . op 'matchrew_s.t._by_ : 'Term 'EqCondition 'UsingPairSet -> 'Strategy [ctor] . op 'max : 'Nat 'Nat -> 'Nat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'max) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'max : 'NzNat 'Nat -> 'NzNat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'max) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'maximalAritySet : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaMaximalAritySet) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'maximalSorts : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaMaximalSorts) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'mb_:_`[_`]. : 'Term 'Sort 'AttrSet -> 'MembAx [ctor format('d 'd 'd 'd 's 'd 'd 's 'd)] . op 'memo : nil -> 'Attr [ctor] . op 'metaApply : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Substitution?`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultTriple?`] [special( id-hook('MetaLevelOpSymbol, 'metaApply) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaCheck : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[Bool`] [special( id-hook('MetaLevelOpSymbol, 'metaCheck) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [ special( id-hook('MetaLevelOpSymbol, 'legacyMetaDisjointUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [ special( id-hook('MetaLevelOpSymbol, 'metaDisjointUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaFrewrite : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaFrewrite) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaGetIrredundantVariant : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Variant?`] [special( id-hook('MetaLevelOpSymbol, 'legacyMetaGetIrredundantVariant) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaGetIrredundantVariant : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Variant?`] [special( id-hook('MetaLevelOpSymbol, 'metaGetIrredundantVariant) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaGetVariant : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Variant?`] [special( id-hook('MetaLevelOpSymbol, 'legacyMetaGetVariant) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaGetVariant : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Variant?`] [special( id-hook('MetaLevelOpSymbol, 'metaGetVariant) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaIrredundantDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [ special( id-hook('MetaLevelOpSymbol, 'metaIrredundantDisjointUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaIrredundantUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaIrredundantUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaMatch : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Condition`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Substitution?`] [special( id-hook('MetaLevelOpSymbol, 'metaMatch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNarrow : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[Bool`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaNarrow2) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNarrow : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultTriple?`] [special( id-hook('MetaLevelOpSymbol, 'metaNarrow) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNarrowingApply : 'Module 'Term 'TermList 'Qid 'Nat -> 'NarrowingApplyResult? [none] . op 'metaNarrowingApply : 'Module 'Term 'TermList 'Qid 'VariantOptionSet 'Nat -> 'NarrowingApplyResult? [special( id-hook('MetaLevelOpSymbol, 'metaNarrowingApply) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNarrowingSearch : 'Module 'Term 'Term 'Qid 'Bound 'Qid 'Nat -> 'NarrowingSearchResult? [none] . op 'metaNarrowingSearch : 'Module 'Term 'Term 'Qid 'Bound 'Qid 'VariantOptionSet 'Nat -> 'NarrowingSearchResult? [special( id-hook('MetaLevelOpSymbol, 'metaNarrowingSearch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNarrowingSearchPath : 'Module 'Term 'Term 'Qid 'Bound 'Qid 'Nat -> 'NarrowingSearchPathResult? [none] . op 'metaNarrowingSearchPath : 'Module 'Term 'Term 'Qid 'Bound 'Qid 'VariantOptionSet 'Nat -> 'NarrowingSearchPathResult? [special( id-hook('MetaLevelOpSymbol, 'metaNarrowingSearchPath) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaNormalize : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaNormalize) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaParse : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ResultPair?`] [ none] . op 'metaParse : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaParse) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaParseStrategy : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[StrategyList`,Strategy?`] [special( id-hook('MetaLevelOpSymbol, 'metaParseStrategy) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaPrettyPrint : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [none] . op 'metaPrettyPrint : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[PrintOptionSet`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [none] . op 'metaPrettyPrint : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[PrintOptionSet`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaPrettyPrint) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaPrettyPrintStrategy : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[StrategyList`,Strategy?`] '`[PrintOptionSet`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaPrettyPrintStrategy) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaReduce : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaReduce) op-hook('qidSymbol, ', nil, 'Qid) op-hook('metaTermSymbol, '_`[_`], 'Qid 'NeGroundTermList, 'GroundTerm) op-hook('metaArgSymbol, '_`,_, 'NeGroundTermList 'GroundTermList, 'NeGroundTermList) op-hook('emptyTermListSymbol, 'empty, nil, 'GroundTermList) op-hook('assignmentSymbol, '_<-_, 'Variable 'Term, 'Assignment) op-hook('emptySubstitutionSymbol, 'none, nil, 'Substitution) op-hook('substitutionSymbol, '_;_, 'Substitution 'Substitution, 'Substitution) op-hook('holeSymbol, '`[`], nil, 'Context) op-hook('noConditionSymbol, 'nil, nil, 'EqCondition) op-hook('equalityConditionSymbol, '_=_, 'Term 'Term, 'EqCondition) op-hook('sortTestConditionSymbol, '_:_, 'Term 'Sort, 'EqCondition) op-hook('matchConditionSymbol, '_:=_, 'Term 'Term, 'EqCondition) op-hook('rewriteConditionSymbol, '_=>_, 'Term 'Term, 'Condition) op-hook('conjunctionSymbol, '_/\_, 'EqCondition 'EqCondition, 'EqCondition) op-hook('failStratSymbol, 'fail, nil, 'Strategy) op-hook('idleStratSymbol, 'idle, nil, 'Strategy) op-hook('allStratSymbol, 'all, nil, 'RuleApplication) op-hook('applicationStratSymbol, '_`[_`]`{_`}, 'Qid 'Substitution 'StrategyList, 'RuleApplication) op-hook('topStratSymbol, 'top, 'RuleApplication, 'Strategy) op-hook('matchStratSymbol, 'match_s.t._, 'Term 'EqCondition, 'Strategy) op-hook('xmatchStratSymbol, 'xmatch_s.t._, 'Term 'EqCondition, 'Strategy) op-hook('amatchStratSymbol, 'amatch_s.t._, 'Term 'EqCondition, 'Strategy) op-hook('unionStratSymbol, '_|_, 'Strategy 'Strategy, 'Strategy) op-hook('concatStratSymbol, '_;_, 'Strategy 'Strategy, 'Strategy) op-hook('orelseStratSymbol, '_or-else_, 'Strategy 'Strategy, 'Strategy) op-hook('plusStratSymbol, '_+, 'Strategy, 'Strategy) op-hook('conditionalStratSymbol, '_?_:_, 'Strategy 'Strategy 'Strategy, 'Strategy) op-hook('matchrewStratSymbol, 'matchrew_s.t._by_, 'Term 'EqCondition 'UsingPairSet, 'Strategy) op-hook('xmatchrewStratSymbol, 'xmatchrew_s.t._by_, 'Term 'EqCondition 'UsingPairSet, 'Strategy) op-hook('amatchrewStratSymbol, 'amatchrew_s.t._by_, 'Term 'EqCondition 'UsingPairSet, 'Strategy) op-hook('callStratSymbol, '_`[`[_`]`], 'Qid 'TermList, 'CallStrategy) op-hook('oneStratSymbol, 'one, 'Strategy, 'Strategy) op-hook('starStratSymbol, '_*, 'Strategy, 'Strategy) op-hook('normalizationStratSymbol, '_!, 'Strategy, 'Strategy) op-hook('notStratSymbol, 'not, 'Strategy, 'Strategy) op-hook('testStratSymbol, 'test, 'Strategy, 'Strategy) op-hook('tryStratSymbol, 'try, 'Strategy, 'Strategy) op-hook('usingStratSymbol, '_using_, 'Variable 'Strategy, 'UsingPair) op-hook('usingListStratSymbol, '_`,_, 'UsingPairSet 'UsingPairSet, 'UsingPairSet) op-hook('emptyStratListSymbol, 'empty, nil, 'StrategyList) op-hook('stratListSymbol, '_`,_, 'StrategyList 'StrategyList, 'StrategyList) op-hook('headerSymbol, '_`{_`}, 'Qid 'ParameterDeclList, 'Header) op-hook('parameterDeclSymbol, '_::_, 'Sort 'ModuleExpression, 'ParameterDecl) op-hook('parameterDeclListSymbol, '_`,_, 'ParameterDeclList 'ParameterDeclList, 'ParameterDeclList) op-hook('protectingSymbol, 'protecting_., 'ModuleExpression, 'Import) op-hook('extendingSymbol, 'extending_., 'ModuleExpression, 'Import) op-hook('includingSymbol, 'including_., 'ModuleExpression, 'Import) op-hook('nilImportListSymbol, 'nil, nil, 'ImportList) op-hook('importListSymbol, '__, 'ImportList 'ImportList, 'ImportList) op-hook('emptySortSetSymbol, 'none, nil, 'QidSet) op-hook('sortSetSymbol, '_;_, 'QidSet 'QidSet, 'QidSet) op-hook('subsortSymbol, 'subsort_<_., 'Sort 'Sort, 'SubsortDecl) op-hook('emptySubsortDeclSetSymbol, 'none, nil, 'SubsortDeclSet) op-hook('subsortDeclSetSymbol, '__, 'SubsortDeclSet 'SubsortDeclSet, 'SubsortDeclSet) op-hook('nilQidListSymbol, 'nil, nil, 'QidList) op-hook('qidListSymbol, '__, 'QidList 'QidList, 'QidList) op-hook('emptyQidSetSymbol, 'none, nil, 'QidSet) op-hook('qidSetSymbol, '_;_, 'QidSet 'QidSet, 'QidSet) op-hook('succSymbol, 's_, 'Nat, 'NzNat) op-hook('natListSymbol, '__, 'NatList 'NatList, 'NatList) op-hook('unboundedSymbol, 'unbounded, nil, 'Bound) op-hook('noParentSymbol, 'none, nil, 'Parent) op-hook('stringSymbol, ', nil, 'Char) op-hook('sortRenamingSymbol, 'sort_to_, 'Qid 'Qid, 'Renaming) op-hook('opRenamingSymbol, 'op_to_`[_`], 'Qid 'Qid 'AttrSet, 'Renaming) op-hook('opRenamingSymbol2, 'op_:_->_to_`[_`], 'Qid 'TypeList 'Type 'Qid 'AttrSet, 'Renaming) op-hook('labelRenamingSymbol, 'label_to_, 'Qid 'Qid, 'Renaming) op-hook('stratRenamingSymbol, 'strat_to_, 'Qid 'Qid, 'Renaming) op-hook('stratRenamingSymbol2, 'strat_:_@_to_, 'Qid 'TypeList 'Type 'Qid, 'Renaming) op-hook('renamingSetSymbol, '_`,_, 'RenamingSet 'RenamingSet, 'RenamingSet) op-hook('sumSymbol, '_+_, 'ModuleExpression 'ModuleExpression, 'ModuleExpression) op-hook('renamingSymbol, '_*`(_`), 'ModuleExpression 'RenamingSet, 'ModuleExpression) op-hook('instantiationSymbol, '_`{_`}, 'Expression 'NeParameterList, 'Expression) op-hook('termHookSymbol, 'term-hook, 'Qid 'Term, 'Hook) op-hook('hookListSymbol, '__, 'HookList 'HookList, 'HookList) op-hook('idHookSymbol, 'id-hook, 'Qid 'QidList, 'Hook) op-hook('opHookSymbol, 'op-hook, 'Qid 'Qid 'QidList 'Qid, 'Hook) op-hook('assocSymbol, 'assoc, nil, 'Attr) op-hook('commSymbol, 'comm, nil, 'Attr) op-hook('idemSymbol, 'idem, nil, 'Attr) op-hook('iterSymbol, 'iter, nil, 'Attr) op-hook('idSymbol, 'id, 'Term, 'Attr) op-hook('leftIdSymbol, 'left-id, 'Term, 'Attr) op-hook('rightIdSymbol, 'right-id, 'Term, 'Attr) op-hook('stratSymbol, 'strat, 'NeNatList, 'Attr) op-hook('memoSymbol, 'memo, nil, 'Attr) op-hook('precSymbol, 'prec, 'Nat, 'Attr) op-hook('gatherSymbol, 'gather, 'QidList, 'Attr) op-hook('formatSymbol, 'format, 'QidList, 'Attr) op-hook('ctorSymbol, 'ctor, nil, 'Attr) op-hook('frozenSymbol, 'frozen, 'NeNatList, 'Attr) op-hook('polySymbol, 'poly, 'NeNatList, 'Attr) op-hook('configSymbol, 'config, nil, 'Attr) op-hook('objectSymbol, 'object, nil, 'Attr) op-hook('msgSymbol, 'msg, nil, 'Attr) op-hook('specialSymbol, 'special, 'NeHookList, 'Attr) op-hook('labelSymbol, 'label, 'Qid, 'Attr) op-hook('metadataSymbol, 'metadata, 'String, 'Attr) op-hook('owiseSymbol, 'owise, nil, 'Attr) op-hook('variantAttrSymbol, 'variant, nil, 'Attr) op-hook('narrowingSymbol, 'narrowing, nil, 'Attr) op-hook('nonexecSymbol, 'nonexec, nil, 'Attr) op-hook('printSymbol, 'print, 'QidList, 'Attr) op-hook('emptyAttrSetSymbol, 'none, nil, 'AttrSet) op-hook('attrSetSymbol, '__, 'AttrSet 'AttrSet, 'AttrSet) op-hook('opDeclSymbol, 'op_:_->_`[_`]., 'Qid 'TypeList 'Type 'AttrSet, 'OpDecl) op-hook('opDeclSetSymbol, '__, 'OpDeclSet 'OpDeclSet, 'OpDeclSet) op-hook('emptyOpDeclSetSymbol, 'none, nil, 'OpDeclSet) op-hook('mbSymbol, 'mb_:_`[_`]., 'Term 'Sort 'AttrSet, 'MembAx) op-hook('cmbSymbol, 'cmb_:_if_`[_`]., 'Term 'Sort 'EqCondition 'AttrSet, 'MembAx) op-hook('emptyMembAxSetSymbol, 'none, nil, 'MembAxSet) op-hook('membAxSetSymbol, '__, 'MembAxSet 'MembAxSet, 'MembAxSet) op-hook('eqSymbol, 'eq_=_`[_`]., 'Term 'Term 'AttrSet, 'Equation) op-hook('ceqSymbol, 'ceq_=_if_`[_`]., 'Term 'Term 'EqCondition 'AttrSet, 'Equation) op-hook('emptyEquationSetSymbol, 'none, nil, 'EquationSet) op-hook('equationSetSymbol, '__, 'EquationSet 'EquationSet, 'EquationSet) op-hook('rlSymbol, 'rl_=>_`[_`]., 'Term 'Term 'AttrSet, 'Rule) op-hook('crlSymbol, 'crl_=>_if_`[_`]., 'Term 'Term 'Condition 'AttrSet, 'Rule) op-hook('emptyRuleSetSymbol, 'none, nil, 'RuleSet) op-hook('ruleSetSymbol, '__, 'RuleSet 'RuleSet, 'RuleSet) op-hook('stratDeclSymbol, 'strat_:_@_`[_`]., 'Qid 'TypeList 'Type 'AttrSet, 'StratDecl) op-hook('emptyStratDeclSetSymbol, 'none, nil, 'StratDeclSet) op-hook('stratDeclSetSymbol, '__, 'StratDeclSet 'StratDeclSet, 'StratDeclSet) op-hook('sdSymbol, 'sd_:=_`[_`]., 'CallStrategy 'Strategy 'AttrSet, 'StratDefinition) op-hook('csdSymbol, 'csd_:=_if_`[_`]., 'CallStrategy 'Strategy 'EqCondition 'AttrSet, 'StratDefinition) op-hook('emptyStratDefSetSymbol, 'none, nil, 'StratDefSet) op-hook('stratDefSetSymbol, '__, 'StratDefSet 'StratDefSet, 'StratDefSet) op-hook('fmodSymbol, 'fmod_is_sorts_.____endfm, 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet, 'FModule) op-hook('fthSymbol, 'fth_is_sorts_.____endfth, 'Qid 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet, 'FTheory) op-hook('modSymbol, 'mod_is_sorts_._____endm, 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet, 'SModule) op-hook('thSymbol, 'th_is_sorts_._____endth, 'Qid 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet, 'STheory) op-hook('smodSymbol, 'smod_is_sorts_._______endsm, 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet 'StratDeclSet 'StratDefSet, 'StratModule) op-hook('sthSymbol, 'sth_is_sorts_._______endsth, 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet 'StratDeclSet 'StratDefSet, 'StratTheory) op-hook('sortMappingSymbol, 'sort_to_., 'Sort 'Sort, 'SortMapping) op-hook('emptySortMappingSetSymbol, 'none, nil, 'SortMappingSet) op-hook('sortMappingSetSymbol, '__, 'SortMappingSet 'SortMappingSet, 'SortMappingSet) op-hook('opMappingSymbol, 'op_to_., 'Qid 'Qid, 'OpMapping) op-hook('opSpecificMappingSymbol, 'op_:_->_to_., 'Qid 'TypeList 'Type 'Qid, 'OpMapping) op-hook('opTermMappingSymbol, 'op_to`term_., 'Term 'Term, 'OpMapping) op-hook('emptyOpMappingSetSymbol, 'none, nil, 'OpMappingSet) op-hook('opMappingSetSymbol, '__, 'OpMappingSet 'OpMappingSet, 'OpMappingSet) op-hook('stratMappingSymbol, 'strat_to_., 'Qid 'Qid, 'StratMapping) op-hook('stratSpecificMappingSymbol, 'strat_:_@_to_., 'Qid 'TypeList 'Type 'Qid, 'StratMapping) op-hook('stratExprMappingSymbol, 'strat_to`expr_., 'CallStrategy 'Strategy, 'StratMapping) op-hook('emptyStratMappingSetSymbol, 'none, nil, 'StratMappingSet) op-hook('stratMappingSetSymbol, '__, 'StratMappingSet 'StratMappingSet, 'StratMappingSet) op-hook('viewSymbol, 'view_from_to_is___endv, 'Header 'ModuleExpression 'ModuleExpression 'SortMappingSet 'OpMappingSet 'StratMappingSet, 'View) op-hook('anyTypeSymbol, 'anyType, nil, 'Type?) op-hook('unificandPairSymbol, '_=?_, 'Term 'Term, 'UnificandPair) op-hook('unificationConjunctionSymbol, '_/\_, 'UnificationProblem 'UnificationProblem, 'UnificationProblem) op-hook('patternSubjectPairSymbol, '_<=?_, 'Term 'Term, 'PatternSubjectPair) op-hook('matchingConjunctionSymbol, '_/\_, 'MatchingProblem 'MatchingProblem, 'MatchingProblem) op-hook('resultPairSymbol, '`{_`,_`}, 'Term 'Type, 'ResultPair) op-hook('resultTripleSymbol, '`{_`,_`,_`}, 'Term 'Type 'Substitution, 'ResultTriple) op-hook('result4TupleSymbol, '`{_`,_`,_`,_`}, 'Term 'Type 'Substitution 'Context, 'Result4Tuple) op-hook('matchPairSymbol, '`{_`,_`}, 'Substitution 'Context, 'MatchPair) op-hook('unificationTripleSymbol, '`{_`,_`,_`}, 'Substitution 'Substitution 'Qid, 'UnificationTriple) op-hook('variantSymbol, '`{_`,_`,_`,_`,_`}, 'Term 'Substitution 'Qid 'Parent 'Bool, 'Variant) op-hook('narrowingApplyResultSymbol, '`{_`,_`,_`,_`,_`,_`,_`}, 'Term 'Type 'Context 'Qid 'Substitution 'Substitution 'Qid, 'NarrowingApplyResult) op-hook('narrowingSearchResultSymbol, '`{_`,_`,_`,_`,_`,_`}, 'Term 'Type 'Substitution 'Qid 'Substitution 'Qid, 'NarrowingSearchResult) op-hook('traceStepSymbol, '`{_`,_`,_`}, 'Term 'Type 'Rule, 'TraceStep) op-hook('nilTraceSymbol, 'nil, nil, 'Trace) op-hook('traceSymbol, '__, 'Trace 'Trace, 'Trace) op-hook('narrowingStepSymbol, '`{_`,_`,_`,_`,_`,_`,_`}, 'Context 'Qid 'Substitution 'Qid 'Term 'Type 'Substitution, 'NarrowingStep) op-hook('nilNarrowingTraceSymbol, 'nil, nil, 'NarrowingTrace) op-hook('narrowingTraceSymbol, '__, 'NarrowingTrace 'NarrowingTrace, 'NarrowingTrace) op-hook('narrowingSearchPathResultSymbol, '`{_`,_`,_`,_`,_`,_`}, 'Term 'Type 'Substitution 'NarrowingTrace 'Substitution 'Qid, 'NarrowingSearchPathResult) op-hook('smtResultSymbol, '`{_`,_`,_`,_`}, 'Term 'Substitution 'Term 'Nat, 'SmtResult) op-hook('noParseSymbol, 'noParse, 'Nat, 'ResultPair?) op-hook('ambiguitySymbol, 'ambiguity, 'ResultPair 'ResultPair, 'ResultPair?) op-hook('failure2Symbol, 'failure, nil, 'ResultPair?) op-hook('failure3Symbol, 'failure, nil, 'ResultTriple?) op-hook('failureIncomplete3Symbol, 'failureIncomplete, nil, 'ResultTriple?) op-hook('failure4Symbol, 'failure, nil, 'Result4Tuple?) op-hook('noUnifierPairSymbol, 'noUnifier, nil, 'UnificationPair?) op-hook('noUnifierTripleSymbol, 'noUnifier, nil, 'UnificationTriple?) op-hook('noUnifierIncompletePairSymbol, 'noUnifierIncomplete, nil, 'UnificationPair?) op-hook('noUnifierIncompleteTripleSymbol, 'noUnifierIncomplete, nil, 'UnificationTriple?) op-hook('noVariantSymbol, 'noVariant, nil, 'Variant?) op-hook('noVariantIncompleteSymbol, 'noVariantIncomplete, nil, 'Variant?) op-hook('narrowingApplyFailureSymbol, 'failure, nil, 'NarrowingApplyResult?) op-hook('narrowingApplyFailureIncompleteSymbol, 'failureIncomplete, nil, 'NarrowingApplyResult?) op-hook('narrowingSearchFailureSymbol, 'failure, nil, 'NarrowingSearchResult?) op-hook('narrowingSearchFailureIncompleteSymbol, 'failureIncomplete, nil, 'NarrowingSearchResult?) op-hook('narrowingSearchPathFailureSymbol, 'failure, nil, 'NarrowingSearchPathResult?) op-hook('narrowingSearchPathFailureIncompleteSymbol, 'failureIncomplete, nil, 'NarrowingSearchPathResult?) op-hook('noMatchSubstSymbol, 'noMatch, nil, 'Substitution?) op-hook('noMatchIncompleteSubstSymbol, 'noMatchIncomplete, nil, 'Substitution?) op-hook('noMatchPairSymbol, 'noMatch, nil, 'MatchPair?) op-hook('failureTraceSymbol, 'failure, nil, 'Trace?) op-hook('smtFailureSymbol, 'failure, nil, 'SmtResult?) op-hook('noStratParseSymbol, 'noStratParse, 'Nat, 'Strategy?) op-hook('stratAmbiguitySymbol, 'ambiguity, 'Strategy 'Strategy, 'Strategy?) op-hook('mixfixSymbol, 'mixfix, nil, 'PrintOption) op-hook('withParensSymbol, 'with-parens, nil, 'PrintOption) op-hook('flatSymbol, 'flat, nil, 'PrintOption) op-hook('formatPrintOptionSymbol, 'format, nil, 'PrintOption) op-hook('numberSymbol, 'number, nil, 'PrintOption) op-hook('ratSymbol, 'rat, nil, 'PrintOption) op-hook('emptyPrintOptionSetSymbol, 'none, nil, 'PrintOptionSet) op-hook('printOptionSetSymbol, '__, 'PrintOptionSet 'PrintOptionSet, 'PrintOptionSet) op-hook('delaySymbol, 'delay, nil, 'VariantOption) op-hook('filterSymbol, 'filter, nil, 'VariantOption) op-hook('emptyVariantOptionSetSymbol, 'none, nil, 'VariantOptionSet) op-hook('variantOptionSetSymbol, '__, 'VariantOptionSet 'VariantOptionSet, 'VariantOptionSet) op-hook('breadthFirstSymbol, 'breadthFirst, nil, 'SrewriteOption) op-hook('depthFirstSymbol, 'depthFirst, nil, 'SrewriteOption) op-hook('legacyUnificationPairSymbol, '`{_`,_`}, 'Substitution 'Nat, 'UnificationPair) op-hook('legacyUnificationTripleSymbol, '`{_`,_`,_`}, 'Substitution 'Substitution 'Nat, 'UnificationTriple) op-hook('legacyVariantSymbol, '`{_`,_`,_`,_`,_`}, 'Term 'Substitution 'Nat 'Parent 'Bool, 'Variant) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op 'metaRewrite : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaRewrite) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaSearch : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Condition`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultTriple?`] [special( id-hook('MetaLevelOpSymbol, 'metaSearch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaSearchPath : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Condition`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Trace?`] [special( id-hook('MetaLevelOpSymbol, 'metaSearchPath) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaSmtSearch : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Condition`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[SmtResult?`] [special( id-hook('MetaLevelOpSymbol, 'metaSmtSearch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaSrewrite : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[StrategyList`,Strategy?`] '`[SrewriteOption`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[ResultPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaSrewrite) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaUnify : '`[Module`] '`[UnificationProblem`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'legacyMetaUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaVariantDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [ special( id-hook('MetaLevelOpSymbol, 'legacyMetaVariantDisjointUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaVariantDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [none] . op 'metaVariantDisjointUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[VariantOptionSet`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationTriple?`] [special( id-hook('MetaLevelOpSymbol, 'metaVariantDisjointUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaVariantMatch : '`[Module`] '`[MatchingProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[VariantOptionSet`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Substitution?`] [special( id-hook('MetaLevelOpSymbol, 'metaVariantMatch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaVariantUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'legacyMetaVariantUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaVariantUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [none] . op 'metaVariantUnify : '`[Module`] '`[UnificationProblem`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[VariantOptionSet`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaVariantUnify) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaXapply : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Substitution?`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[Result4Tuple?`] [special( id-hook('MetaLevelOpSymbol, 'metaXapply) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metaXmatch : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Condition`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] [special( id-hook('MetaLevelOpSymbol, 'metaXmatch) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'metadata : 'String -> 'Attr [ctor] . op 'min : 'Nat 'Nat -> 'Nat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'min) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'min : 'NzNat 'NzNat -> 'NzNat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'min) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'minimalSorts : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaMinimalSorts) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'mixfix : nil -> 'PrintOption [ctor] . op 'modExp : '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] '`[FindResult`,NatList`,Bound`,Parent`] -> '`[FindResult`,NatList`,Bound`,Parent`] [special( id-hook('NumberOpSymbol, 'modExp) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'mod_is_sorts_._____endm : 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet -> 'SModule [ctor gather('& '& '& '& '& '& '& '&) format('d 'd 's 'n++i 'ni 'd 'd 'ni 'ni 'ni 'ni 'ni 'n--i 'd)] . op 'msg : nil -> 'Attr [ctor] . op 'narrowing : nil -> 'Attr [ctor] . op 'nil : nil -> 'EqCondition [ctor] . op 'nil : nil -> 'HookList [ctor] . op 'nil : nil -> 'ImportList [ctor] . op 'nil : nil -> 'NarrowingTrace [ctor] . op 'nil : nil -> 'NatList [ctor] . op 'nil : nil -> 'ParameterDeclList [ctor] . op 'nil : nil -> 'QidList [ctor] . op 'nil : nil -> 'Trace [ctor] . op 'nil : nil -> 'TypeList [ctor] . op 'noMatch : nil -> 'MatchPair? [ctor] . op 'noMatch : nil -> 'Substitution? [ctor] . op 'noMatchIncomplete : nil -> 'Substitution? [ctor] . op 'noParse : 'Nat -> 'ResultPair? [ctor] . op 'noStratParse : 'Nat -> 'Strategy? [ctor] . op 'noUnifier : nil -> 'UnificationPair? [ctor] . op 'noUnifier : nil -> 'UnificationTriple? [ctor] . op 'noUnifierIncomplete : nil -> 'UnificationPair? [ctor] . op 'noUnifierIncomplete : nil -> 'UnificationTriple? [ctor] . op 'noVariant : nil -> 'Variant? [ctor] . op 'noVariantIncomplete : nil -> 'Variant? [ctor] . op 'none : nil -> 'AttrSet [ctor] . op 'none : nil -> 'EmptyQidSet [ctor] . op 'none : nil -> 'EquationSet [ctor] . op 'none : nil -> 'MembAxSet [ctor] . op 'none : nil -> 'OpDeclSet [ctor] . op 'none : nil -> 'OpMappingSet [ctor] . op 'none : nil -> 'Parent [none] . op 'none : nil -> 'PrintOptionSet [ctor] . op 'none : nil -> 'QidSet [ctor] . op 'none : nil -> 'RuleSet [ctor] . op 'none : nil -> 'SortMappingSet [ctor] . op 'none : nil -> 'StratDeclSet [ctor] . op 'none : nil -> 'StratDefSet [ctor] . op 'none : nil -> 'StratMappingSet [ctor] . op 'none : nil -> 'SubsortDeclSet [ctor] . op 'none : nil -> 'Substitution [ctor] . op 'none : nil -> 'VariantOptionSet [ctor] . op 'nonexec : nil -> 'Attr [ctor] . op 'not : 'Strategy -> 'Strategy [ctor] . op 'notFound : nil -> 'FindResult [ctor] . op 'not_ : 'Bool -> 'Bool [prec(53)] . op 'number : nil -> 'PrintOption [ctor] . op 'object : nil -> 'Attr [ctor] . op 'occurs : 'Nat 'NatList -> 'Bool [none] . op 'occurs : 'Qid 'QidList -> 'Bool [none] . op 'one : 'Strategy -> 'Strategy [ctor] . op 'op-hook : 'Qid 'Qid 'QidList 'Qid -> 'Hook [ctor format('nssss 'd)] . op 'op_:_->_`[_`]. : 'Qid 'TypeList 'Type 'AttrSet -> 'OpDecl [ctor format('d 'd 'd 'd 'd 'd 's 'd 'd 's 'd)] . op 'op_:_->_to_. : 'Qid 'TypeList 'Type 'Qid -> 'OpMapping [ctor] . op 'op_:_->_to_`[_`] : 'Qid 'TypeList 'Type 'Qid 'AttrSet -> 'Renaming [ctor format('d 'd 'd 'd 'd 'd 'd 'd 's 'd 'd 'd)] . op 'op_to_. : 'Qid 'Qid -> 'OpMapping [ctor] . op 'op_to_`[_`] : 'Qid 'Qid 'AttrSet -> 'Renaming [ctor format('d 'd 'd 'd 's 'd 'd 'd)] . op 'op_to`term_. : 'Term 'Term -> 'OpMapping [ctor] . op 'owise : nil -> 'Attr [ctor] . op 'poly : 'NeNatList -> 'Attr [ctor] . op 'prec : 'Nat -> 'Attr [ctor] . op 'print : 'QidList -> 'Attr [ctor] . op 'protecting_. : 'ModuleExpression -> 'Import [ctor] . op 'qid : '`[String`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('QuotedIdentifierOpSymbol, 'qid) op-hook('quotedIdentifierSymbol, ', nil, 'Qid) op-hook('stringSymbol, ', nil, 'Char))] . op 'rat : nil -> 'PrintOption [ctor] . op 'reverse : 'NatList -> 'NatList [none] . op 'reverse : 'NeNatList -> 'NeNatList [none] . op 'reverse : 'NeQidList -> 'NeQidList [none] . op 'reverse : 'QidList -> 'QidList [none] . op 'rfind : 'String 'String 'Nat -> 'FindResult [special( id-hook('StringOpSymbol, 'rfind) op-hook('stringSymbol, ', nil, 'Char) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('notFoundTerm, 'notFound.FindResult))] . op 'right-id : 'Term -> 'Attr [ctor] . op 'rl_=>_`[_`]. : 'Term 'Term 'AttrSet -> 'Rule [ctor format('d 'd 'd 'd 's 'd 'd 's 'd)] . op 's_ : 'Nat -> 'NzNat [iter ctor special( id-hook('SuccSymbol, nil) term-hook('zeroTerm, '0.Zero))] . op 'sameKind : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[Bool`] [special( id-hook('MetaLevelOpSymbol, 'metaSameKind) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'sd : 'Nat 'Nat -> 'Nat [comm special( id-hook('CUI_NumberOpSymbol, 'sd) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'sd_:=_`[_`]. : 'CallStrategy 'Strategy 'AttrSet -> 'StratDefinition [ctor format('d 'd 'd 'd 's 'd 'd 's 'd)] . op 'size : 'NatList -> 'Nat [none] . op 'size : 'NeNatList -> 'NzNat [none] . op 'size : 'NeQidList -> 'NzNat [none] . op 'size : 'QidList -> 'Nat [none] . op 'smod_is_sorts_._______endsm : 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet 'StratDeclSet 'StratDefSet -> 'StratModule [ctor gather('& '& '& '& '& '& '& '& '& '&) format('d 'd 's 'n++i 'ni 'd 'd 'ni 'ni 'ni 'ni 'ni 'ni 'ni 'n--i 'd)] . op 'sortLeq : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[Bool`] [special( id-hook('MetaLevelOpSymbol, 'metaSortLeq) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'sort_to_ : 'Qid 'Qid -> 'Renaming [ctor] . op 'sort_to_. : 'Sort 'Sort -> 'SortMapping [ctor] . op 'special : 'NeHookList -> 'Attr [ctor] . op 'sth_is_sorts_._______endsth : 'Header 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet 'StratDeclSet 'StratDefSet -> 'StratTheory [ctor gather('& '& '& '& '& '& '& '& '& '&) format('d 'd 's 'n++i 'ni 'd 'd 'ni 'ni 'ni 'ni 'ni 'ni 'ni 'n--i 'd)] . op 'strat : 'NeNatList -> 'Attr [ctor] . op 'strat_:_@_`[_`]. : 'Qid 'TypeList 'Type 'AttrSet -> 'StratDecl [ctor format('d 'd 'd 'd 'd 'd 's 'd 'd 's 'd)] . op 'strat_:_@_to_ : 'Qid 'TypeList 'Type 'Qid -> 'Renaming [ctor] . op 'strat_:_@_to_. : 'Qid 'TypeList 'Type 'Qid -> 'StratMapping [ctor] . op 'strat_to_ : 'Qid 'Qid -> 'Renaming [ctor] . op 'strat_to_. : 'Qid 'Qid -> 'StratMapping [ctor] . op 'strat_to`expr_. : 'CallStrategy 'Strategy -> 'StratMapping [ctor] . op 'string : 'Qid -> 'String [special( id-hook('QuotedIdentifierOpSymbol, 'string) op-hook('quotedIdentifierSymbol, ', nil, 'Qid) op-hook('stringSymbol, ', nil, 'Char))] . op 'subsort_<_. : 'Sort 'Sort -> 'SubsortDecl [ctor] . op 'substr : 'String 'Nat 'Nat -> 'String [special( id-hook('StringOpSymbol, 'substr) op-hook('stringSymbol, ', nil, 'Char) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'tail : 'NeNatList -> 'NatList [none] . op 'tail : 'NeQidList -> 'QidList [none] . op 'term-hook : 'Qid 'Term -> 'Hook [ctor format('nssss 'd)] . op 'test : 'Strategy -> 'Strategy [ctor] . op 'th_is_sorts_._____endth : 'Qid 'ImportList 'SortSet 'SubsortDeclSet 'OpDeclSet 'MembAxSet 'EquationSet 'RuleSet -> 'STheory [ctor gather('& '& '& '& '& '& '& '&) format('d 'd 'd 'n++i 'ni 'd 'd 'ni 'ni 'ni 'ni 'ni 'n--i 'd)] . op 'top : 'RuleApplication -> 'Strategy [ctor] . op 'true : nil -> 'Bool [ctor special( id-hook('SystemTrue, nil))] . op 'try : 'Strategy -> 'Strategy [ctor] . op 'unbounded : nil -> 'Bound [ctor] . op 'union : 'NeQidSet 'QidSet -> 'NeQidSet [none] . op 'union : 'QidSet 'NeQidSet -> 'NeQidSet [none] . op 'union : 'QidSet 'QidSet -> 'QidSet [none] . op 'upEqs : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[EquationSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpEqs) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upImports : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[ImportList`] [special( id-hook('MetaLevelOpSymbol, 'metaUpImports) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upMbs : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[MembAxSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpMbs) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upModule : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[Module`] [special( id-hook('MetaLevelOpSymbol, 'metaUpModule) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upOpDecls : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[OpDeclSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpOpDecls) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upRls : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[RuleSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpRls) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upSds : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[StratDefSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpSds) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upSorts : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] [special( id-hook('MetaLevelOpSymbol, 'metaUpSorts) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upStratDecls : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[StratDeclSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpStratDecls) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upSubsortDecls : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] '`[Bool`] -> '`[SubsortDeclSet`] [special( id-hook('MetaLevelOpSymbol, 'metaUpSubsortDecls) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upTerm : 'Universal -> 'Term [poly(1) special( id-hook('MetaLevelOpSymbol, 'metaUpTerm) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upView : '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[View`] [special( id-hook('MetaLevelOpSymbol, 'metaUpView) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'upperCase : 'String -> 'String [special( id-hook('StringOpSymbol, 'upperCase) op-hook('stringSymbol, ', nil, 'Char))] . op 'variant : nil -> 'Attr [ctor] . op 'view_from_to_is___endv : 'Header 'ModuleExpression 'ModuleExpression 'SortMappingSet 'OpMappingSet 'StratMappingSet -> 'View [ctor gather('& '& '& '& '& '&) format('d 'd 'd 'd 'd 'd 'd 'n++i 'ni 'ni 'n--i 'd)] . op 'wellFormed : 'Module -> 'Bool [special( id-hook('MetaLevelOpSymbol, 'metaWellFormedModule) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'wellFormed : '`[Module`] '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] -> '`[Bool`] [special( id-hook('MetaLevelOpSymbol, 'metaWellFormedTerm) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'wellFormed : '`[Module`] '`[Substitution?`] -> '`[Bool`] [special( id-hook('MetaLevelOpSymbol, 'metaWellFormedSubstitution) op-hook('shareWith, 'metaReduce, 'Module 'ModuleExpression, 'ResultPair?))] . op 'with-parens : nil -> 'PrintOption [ctor] . op 'xmatch_s.t._ : 'Term 'EqCondition -> 'Strategy [ctor prec(21)] . op 'xmatchrew_s.t._by_ : 'Term 'EqCondition 'UsingPairSet -> 'Strategy [ctor] . op '|_| : 'NeQidSet -> 'NzNat [none] . op '|_| : 'QidSet -> 'Nat [none] . none eq '$applySubstitution['Q:Qid,'S:Substitution] = 'Q:Qid [owise] . eq '$applySubstitution['V:Variable,'_;_['S:Substitution,'_<-_['V:Variable, 'T:Term]]] = 'T:Term [none] . eq '$applySubstitution['_`,_['T:Term,'TL:NeTermList],'S:Substitution] = '_`,_['$applySubstitution['T:Term,'S:Substitution],'$applySubstitution[ 'TL:NeTermList,'S:Substitution]] [none] . eq '$applySubstitution['_`[_`]['Q:Qid,'TL:NeTermList],'S:Substitution] = '_`[_`]['Q:Qid,'$applySubstitution['TL:NeTermList,'S:Substitution]] [none] . eq '$card['none.EmptyQidSet,'C:Nat] = 'C:Nat [none] . eq '$card['_;_['E:Qid,'S:QidSet],'C:Nat] = '$card['S:QidSet,'_+_['C:Nat,'s_[ '0.Zero]]] [owise] . eq '$card['_;_['N:NeQidSet,'N:NeQidSet,'S:QidSet],'C:Nat] = '$card['_;_[ 'N:NeQidSet,'S:QidSet],'C:Nat] [none] . eq '$diff['none.EmptyQidSet,'S':QidSet,'A:QidSet] = 'A:QidSet [none] . eq '$diff['_;_['E:Qid,'S:QidSet],'S':QidSet,'A:QidSet] = '$diff['S:QidSet, 'S':QidSet,'if_then_else_fi['_in_['E:Qid,'S':QidSet],'A:QidSet,'_;_['E:Qid, 'A:QidSet]]] [none] . eq '$intersect['none.EmptyQidSet,'S':QidSet,'A:QidSet] = 'A:QidSet [none] . eq '$intersect['_;_['E:Qid,'S:QidSet],'S':QidSet,'A:QidSet] = '$intersect[ 'S:QidSet,'S':QidSet,'if_then_else_fi['_in_['E:Qid,'S':QidSet],'_;_['E:Qid, 'A:QidSet],'A:QidSet]] [none] . eq '$reverse['nil.NatList,'A:NatList] = 'A:NatList [none] . eq '$reverse['nil.TypeList,'A:QidList] = 'A:QidList [none] . eq '$reverse['__['E:Nat,'L:NatList],'A:NatList] = '$reverse['L:NatList,'__[ 'E:Nat,'A:NatList]] [none] . eq '$reverse['__['E:Qid,'L:QidList],'A:QidList] = '$reverse['L:QidList,'__[ 'E:Qid,'A:QidList]] [none] . eq '$size['nil.NatList,'C:Nat] = 'C:Nat [none] . eq '$size['nil.TypeList,'C:Nat] = 'C:Nat [none] . eq '$size['__['E:Nat,'L:NatList],'C:Nat] = '$size['L:NatList,'_+_['C:Nat,'s_[ '0.Zero]]] [none] . eq '$size['__['E:Qid,'L:QidList],'C:Nat] = '$size['L:QidList,'_+_['C:Nat,'s_[ '0.Zero]]] [none] . eq '_;_['A:Assignment,'A:Assignment] = 'A:Assignment [none] . eq '_;_['N:NeQidSet,'N:NeQidSet] = 'N:NeQidSet [none] . eq '_;_['T:TypeList,'T:TypeList] = 'T:TypeList [none] . eq '_\_['S:QidSet,'N:NeQidSet] = '$diff['S:QidSet,'N:NeQidSet, 'none.EmptyQidSet] [none] . eq '_\_['S:QidSet,'none.EmptyQidSet] = 'S:QidSet [none] . eq '__['A:Attr,'A:Attr] = 'A:Attr [none] . eq '__['D:StratDefinition,'D:StratDefinition] = 'D:StratDefinition [none] . eq '__['E:Equation,'E:Equation] = 'E:Equation [none] . eq '__['M:MembAx,'M:MembAx] = 'M:MembAx [none] . eq '__['O:OpDecl,'O:OpDecl] = 'O:OpDecl [none] . eq '__['O:OpMapping,'O:OpMapping] = 'O:OpMapping [none] . eq '__['O:StratDecl,'O:StratDecl] = 'O:StratDecl [none] . eq '__['R:Rule,'R:Rule] = 'R:Rule [none] . eq '__['S:SortMapping,'S:SortMapping] = 'S:SortMapping [none] . eq '__['S:StratMapping,'S:StratMapping] = 'S:StratMapping [none] . eq '__['S:SubsortDecl,'S:SubsortDecl] = 'S:SubsortDecl [none] . eq '_`,_['U:UsingPair,'U:UsingPair] = 'U:UsingPair [none] . eq '_and-then_['false.Bool,'B:`[Bool`]] = 'false.Bool [none] . eq '_and-then_['true.Bool,'B:`[Bool`]] = 'B:`[Bool`] [none] . eq '_and_['A:Bool,'A:Bool] = 'A:Bool [none] . eq '_and_['A:Bool,'_xor_['B:Bool,'C:Bool]] = '_xor_['_and_['A:Bool,'B:Bool], '_and_['A:Bool,'C:Bool]] [none] . eq '_and_['false.Bool,'A:Bool] = 'false.Bool [none] . eq '_and_['true.Bool,'A:Bool] = 'A:Bool [none] . eq '_implies_['A:Bool,'B:Bool] = 'not_['_xor_['A:Bool,'_and_['A:Bool, 'B:Bool]]] [none] . eq '_in_['E:Qid,'S:QidSet] = 'false.Bool [owise] . eq '_in_['E:Qid,'_;_['E:Qid,'S:QidSet]] = 'true.Bool [none] . eq '_or-else_['false.Bool,'B:`[Bool`]] = 'B:`[Bool`] [none] . eq '_or-else_['true.Bool,'B:`[Bool`]] = 'true.Bool [none] . eq '_or_['A:Bool,'B:Bool] = '_xor_['_and_['A:Bool,'B:Bool],'_xor_['A:Bool, 'B:Bool]] [none] . eq '_psubset_['S:QidSet,'S':QidSet] = '_and-then_['_=/=_['S:QidSet, 'S':QidSet],'_subset_['S:QidSet,'S':QidSet]] [none] . eq '_subset_['none.EmptyQidSet,'S':QidSet] = 'true.Bool [none] . eq '_subset_['_;_['E:Qid,'S:QidSet],'S':QidSet] = '_and-then_['_in_['E:Qid, 'S':QidSet],'_subset_['S:QidSet,'S':QidSet]] [none] . eq '_xor_['A:Bool,'A:Bool] = 'false.Bool [none] . eq '_xor_['false.Bool,'A:Bool] = 'A:Bool [none] . eq '`[_`]['Q:Qid] = 'sth_is_sorts_._______endsth['Q:Qid,'including_.['Q:Qid], 'none.EmptyQidSet,'none.SubsortDeclSet,'none.OpDeclSet,'none.MembAxSet, 'none.EquationSet,'none.RuleSet,'none.StratDeclSet,'none.StratDefSet] [ none] . eq 'append['A:NatList,'L:NatList] = '__['A:NatList,'L:NatList] [none] . eq 'append['A:QidList,'L:QidList] = '__['A:QidList,'L:QidList] [none] . eq 'applySubstitution['M:Module,'T:Term,'S:Substitution] = 'getTerm[ 'metaNormalize['M:Module,'$applySubstitution['T:Term,'S:Substitution]]] [ none] . eq 'delete['E:Qid,'S:QidSet] = 'S:QidSet [owise] . eq 'delete['E:Qid,'_;_['E:Qid,'S:QidSet]] = 'delete['E:Qid,'S:QidSet] [none] . eq 'front['__['L:NatList,'E:Nat]] = 'L:NatList [none] . eq 'front['__['L:QidList,'E:Qid]] = 'L:QidList [none] . eq 'getAccumulatedSubstitution['`{_`,_`,_`,_`,_`,_`,_`}['C:Context,'L:Qid, 'U:Substitution,'UV:Qid,'T:Term,'T:Type,'A:Substitution]] = 'A:Substitution [none] . eq 'getAccumulatedSubstitution['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type, 'A:Substitution,'SV:Qid,'U:Substitution,'UV:Qid]] = 'A:Substitution [none] . eq 'getContext['`{_`,_`,_`,_`,_`,_`,_`}['C:Context,'L:Qid,'U:Substitution, 'UV:Qid,'T:Term,'T:Type,'A:Substitution]] = 'C:Context [none] . eq 'getContext['`{_`,_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'C:Context,'L:Qid, 'TS:Substitution,'RS:Substitution,'V:Qid]] = 'C:Context [none] . eq 'getContext['`{_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution,'C:Context]] = 'C:Context [none] . eq 'getContext['`{_`,_`}['S:Substitution,'C:Context]] = 'C:Context [none] . eq 'getEqs['fmod_is_sorts_.____endfm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'EQS:EquationSet [none] . eq 'getEqs['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'EQS:EquationSet [none] . eq 'getEqs['mod_is_sorts_._____endm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'EQS:EquationSet [none] . eq 'getEqs['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'EQS:EquationSet [ none] . eq 'getEqs['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'EQS:EquationSet [ none] . eq 'getEqs['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'EQS:EquationSet [none] . eq 'getFrom['view_from_to_is___endv['Q:Qid,'ME:ModuleExpression, 'ME':ModuleExpression,'SMS:SortMappingSet,'OMS:OpMappingSet, 'TMS:StratMappingSet]] = 'ME:ModuleExpression [none] . eq 'getImports['fmod_is_sorts_.____endfm['H:Header,'IL:ImportList, 'SS:SortSet,'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet, 'EQS:EquationSet]] = 'IL:ImportList [none] . eq 'getImports['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'IL:ImportList [none] . eq 'getImports['mod_is_sorts_._____endm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'IL:ImportList [none] . eq 'getImports['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList, 'SS:SortSet,'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet, 'EQS:EquationSet,'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'IL:ImportList [none] . eq 'getImports['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList, 'SS:SortSet,'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet, 'EQS:EquationSet,'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'IL:ImportList [none] . eq 'getImports['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'IL:ImportList [none] . eq 'getInitialSubstitution['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type, 'S:Substitution,'T:NarrowingTrace,'U:Substitution,'UV:Qid]] = 'S:Substitution [none] . eq 'getInitialTerm['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution, 'T:NarrowingTrace,'U:Substitution,'UV:Qid]] = 'T:Term [none] . eq 'getInitialType['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution, 'T:NarrowingTrace,'U:Substitution,'UV:Qid]] = 'T:Type [none] . eq 'getLabel['`{_`,_`,_`,_`,_`,_`,_`}['C:Context,'L:Qid,'U:Substitution, 'UV:Qid,'T:Term,'T:Type,'A:Substitution]] = 'L:Qid [none] . eq 'getLabel['`{_`,_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'C:Context,'L:Qid, 'TS:Substitution,'RS:Substitution,'V:Qid]] = 'L:Qid [none] . eq 'getLhsSubstitution['`{_`,_`,_`}['LS:Substitution,'RS:Substitution, 'V:Qid]] = 'LS:Substitution [none] . eq 'getMbs['fmod_is_sorts_.____endfm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'MAS:MembAxSet [none] . eq 'getMbs['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'MAS:MembAxSet [none] . eq 'getMbs['mod_is_sorts_._____endm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'MAS:MembAxSet [none] . eq 'getMbs['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'MAS:MembAxSet [ none] . eq 'getMbs['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'MAS:MembAxSet [ none] . eq 'getMbs['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'MAS:MembAxSet [none] . eq 'getMoreVariantsInLayerFlag['`{_`,_`,_`,_`,_`}['T:Term,'S:Substitution, 'Q:Qid,'P:Parent,'B:Bool]] = 'B:Bool [none] . eq 'getName['C:Constant] = 'qid['substr['string['C:Constant],'0.Zero,'rfind[ 'string['C:Constant],'".".Char,'length['string['C:Constant]]]]] [none] . eq 'getName['V:Variable] = 'qid['substr['string['V:Variable],'0.Zero,'rfind[ 'string['V:Variable],'":".Char,'length['string['V:Variable]]]]] [none] . eq 'getName['fmod_is_sorts_.____endfm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'Q:Qid [none] . eq 'getName['fmod_is_sorts_.____endfm['_`{_`}['Q:Qid,'PDL:ParameterDeclList], 'IL:ImportList,'SS:SortSet,'SSDS:SubsortDeclSet,'OPDS:OpDeclSet, 'MAS:MembAxSet,'EQS:EquationSet]] = 'Q:Qid [none] . eq 'getName['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'Q:Qid [none] . eq 'getName['mod_is_sorts_._____endm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'Q:Qid [none] . eq 'getName['mod_is_sorts_._____endm['_`{_`}['Q:Qid,'PDL:ParameterDeclList], 'IL:ImportList,'SS:SortSet,'SSDS:SubsortDeclSet,'OPDS:OpDeclSet, 'MAS:MembAxSet,'EQS:EquationSet,'RLS:RuleSet]] = 'Q:Qid [none] . eq 'getName['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'Q:Qid [none] . eq 'getName['smod_is_sorts_._______endsm['_`{_`}['Q:Qid, 'PDL:ParameterDeclList],'IL:ImportList,'SS:SortSet,'SSDS:SubsortDeclSet, 'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet,'RLS:RuleSet, 'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'Q:Qid [none] . eq 'getName['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'Q:Qid [none] . eq 'getName['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'Q:Qid [none] . eq 'getName['view_from_to_is___endv['Q:Qid,'ME:ModuleExpression, 'ME':ModuleExpression,'SMS:SortMappingSet,'OMS:OpMappingSet, 'TMS:StratMappingSet]] = 'Q:Qid [none] . eq 'getName['view_from_to_is___endv['_`{_`}['Q:Qid,'PDL:ParameterDeclList], 'ME:ModuleExpression,'ME':ModuleExpression,'SMS:SortMappingSet, 'OMS:OpMappingSet,'TMS:StratMappingSet]] = 'Q:Qid [none] . eq 'getOpMappings['view_from_to_is___endv['Q:Qid,'ME:ModuleExpression, 'ME':ModuleExpression,'SMS:SortMappingSet,'OMS:OpMappingSet, 'TMS:StratMappingSet]] = 'OMS:OpMappingSet [none] . eq 'getOps['fmod_is_sorts_.____endfm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'OPDS:OpDeclSet [none] . eq 'getOps['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'OPDS:OpDeclSet [none] . eq 'getOps['mod_is_sorts_._____endm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'OPDS:OpDeclSet [none] . eq 'getOps['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'OPDS:OpDeclSet [ none] . eq 'getOps['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'OPDS:OpDeclSet [ none] . eq 'getOps['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'OPDS:OpDeclSet [none] . eq 'getParent['`{_`,_`,_`,_`,_`}['T:Term,'S:Substitution,'Q:Qid,'P:Parent, 'B:Bool]] = 'P:Parent [none] . eq 'getRhsSubstitution['`{_`,_`,_`}['LS:Substitution,'RS:Substitution, 'V:Qid]] = 'RS:Substitution [none] . eq 'getRls['fmod_is_sorts_.____endfm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'none.RuleSet [none] . eq 'getRls['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'none.RuleSet [none] . eq 'getRls['mod_is_sorts_._____endm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'RLS:RuleSet [none] . eq 'getRls['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'RLS:RuleSet [none] . eq 'getRls['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'RLS:RuleSet [none] . eq 'getRls['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'RLS:RuleSet [none] . eq 'getRule['`{_`,_`,_`}['T:Term,'T:Type,'R:Rule]] = 'R:Rule [none] . eq 'getRuleSubstitution['`{_`,_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'C:Context, 'L:Qid,'TS:Substitution,'RS:Substitution,'V:Qid]] = 'RS:Substitution [none] . eq 'getSds['fmod_is_sorts_.____endfm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'none.StratDefSet [none] . eq 'getSds['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'none.StratDefSet [none] . eq 'getSds['mod_is_sorts_._____endm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'none.StratDefSet [none] . eq 'getSds['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'STDFS:StratDefSet [ none] . eq 'getSds['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'STDFS:StratDefSet [ none] . eq 'getSds['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'none.StratDefSet [none] . eq 'getSortMappings['view_from_to_is___endv['Q:Qid,'ME:ModuleExpression, 'ME':ModuleExpression,'SMS:SortMappingSet,'OMS:OpMappingSet, 'TMS:StratMappingSet]] = 'SMS:SortMappingSet [none] . eq 'getSorts['fmod_is_sorts_.____endfm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'SS:SortSet [none] . eq 'getSorts['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'SS:SortSet [none] . eq 'getSorts['mod_is_sorts_._____endm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'SS:SortSet [none] . eq 'getSorts['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'SS:SortSet [none] . eq 'getSorts['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'SS:SortSet [none] . eq 'getSorts['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'SS:SortSet [none] . eq 'getStateVariableFamily['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type, 'A:Substitution,'SV:Qid,'U:Substitution,'UV:Qid]] = 'SV:Qid [none] . eq 'getStratMappings['view_from_to_is___endv['Q:Qid,'ME:ModuleExpression, 'ME':ModuleExpression,'SMS:SortMappingSet,'OMS:OpMappingSet, 'TMS:StratMappingSet]] = 'TMS:StratMappingSet [none] . eq 'getStrats['fmod_is_sorts_.____endfm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'none.StratDeclSet [none] . eq 'getStrats['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'none.StratDeclSet [none] . eq 'getStrats['mod_is_sorts_._____endm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'none.StratDeclSet [none] . eq 'getStrats['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'STDS:StratDeclSet [ none] . eq 'getStrats['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'STDS:StratDeclSet [ none] . eq 'getStrats['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'none.StratDeclSet [none] . eq 'getSubsorts['fmod_is_sorts_.____endfm['H:Header,'IL:ImportList, 'SS:SortSet,'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet, 'EQS:EquationSet]] = 'SSDS:SubsortDeclSet [none] . eq 'getSubsorts['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'SSDS:SubsortDeclSet [none] . eq 'getSubsorts['mod_is_sorts_._____endm['H:Header,'IL:ImportList, 'SS:SortSet,'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet, 'EQS:EquationSet,'RLS:RuleSet]] = 'SSDS:SubsortDeclSet [none] . eq 'getSubsorts['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList, 'SS:SortSet,'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet, 'EQS:EquationSet,'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'SSDS:SubsortDeclSet [none] . eq 'getSubsorts['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList, 'SS:SortSet,'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet, 'EQS:EquationSet,'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'SSDS:SubsortDeclSet [none] . eq 'getSubsorts['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'SSDS:SubsortDeclSet [none] . eq 'getSubstitution['`{_`,_`,_`,_`,_`}['T:Term,'S:Substitution,'Q:Qid, 'P:Parent,'B:Bool]] = 'S:Substitution [none] . eq 'getSubstitution['`{_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution, 'C:Context]] = 'S:Substitution [none] . eq 'getSubstitution['`{_`,_`,_`}['T:Term,'T:Type,'S:Substitution]] = 'S:Substitution [none] . eq 'getSubstitution['`{_`,_`}['S:Substitution,'C:Context]] = 'S:Substitution [none] . eq 'getSubstitution['`{_`,_`}['S:Substitution,'V:Qid]] = 'S:Substitution [ none] . eq 'getTerm['`{_`,_`,_`,_`,_`,_`,_`}['C:Context,'L:Qid,'U:Substitution, 'UV:Qid,'T:Term,'T:Type,'A:Substitution]] = 'T:Term [none] . eq 'getTerm['`{_`,_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'C:Context,'L:Qid, 'TS:Substitution,'RS:Substitution,'V:Qid]] = 'T:Term [none] . eq 'getTerm['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'A:Substitution,'SV:Qid, 'U:Substitution,'UV:Qid]] = 'T:Term [none] . eq 'getTerm['`{_`,_`,_`,_`,_`}['T:Term,'S:Substitution,'Q:Qid,'P:Parent, 'B:Bool]] = 'T:Term [none] . eq 'getTerm['`{_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution,'C:Context]] = 'T:Term [none] . eq 'getTerm['`{_`,_`,_`}['T:Term,'T:Type,'R:Rule]] = 'T:Term [none] . eq 'getTerm['`{_`,_`,_`}['T:Term,'T:Type,'S:Substitution]] = 'T:Term [none] . eq 'getTerm['`{_`,_`}['T:Term,'T:Type]] = 'T:Term [none] . eq 'getTermSubstitution['`{_`,_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'C:Context, 'L:Qid,'TS:Substitution,'RS:Substitution,'V:Qid]] = 'TS:Substitution [none] . eq 'getTo['view_from_to_is___endv['Q:Qid,'ME:ModuleExpression, 'ME':ModuleExpression,'SMS:SortMappingSet,'OMS:OpMappingSet, 'TMS:StratMappingSet]] = 'ME':ModuleExpression [none] . eq 'getTrace['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution, 'T:NarrowingTrace,'U:Substitution,'UV:Qid]] = 'T:NarrowingTrace [none] . eq 'getType['C:Constant] = 'qid['substr['string['C:Constant],'_+_['s_[ '0.Zero],'rfind['string['C:Constant],'".".Char,'length['string[ 'C:Constant]]]],'length['string['C:Constant]]]] [none] . eq 'getType['V:Variable] = 'qid['substr['string['V:Variable],'_+_['s_[ '0.Zero],'rfind['string['V:Variable],'":".Char,'length['string[ 'V:Variable]]]],'length['string['V:Variable]]]] [none] . eq 'getType['`{_`,_`,_`,_`,_`,_`,_`}['C:Context,'L:Qid,'U:Substitution, 'UV:Qid,'T:Term,'T:Type,'A:Substitution]] = 'T:Type [none] . eq 'getType['`{_`,_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'C:Context,'L:Qid, 'TS:Substitution,'RS:Substitution,'V:Qid]] = 'T:Type [none] . eq 'getType['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'A:Substitution,'SV:Qid, 'U:Substitution,'UV:Qid]] = 'T:Type [none] . eq 'getType['`{_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution,'C:Context]] = 'T:Type [none] . eq 'getType['`{_`,_`,_`}['T:Term,'T:Type,'R:Rule]] = 'T:Type [none] . eq 'getType['`{_`,_`,_`}['T:Term,'T:Type,'S:Substitution]] = 'T:Type [none] . eq 'getType['`{_`,_`}['T:Term,'T:Type]] = 'T:Type [none] . eq 'getUnifier['`{_`,_`,_`,_`,_`,_`,_`}['C:Context,'L:Qid,'U:Substitution, 'UV:Qid,'T:Term,'T:Type,'A:Substitution]] = 'U:Substitution [none] . eq 'getUnifier['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'A:Substitution,'SV:Qid, 'U:Substitution,'UV:Qid]] = 'U:Substitution [none] . eq 'getUnifier['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution, 'T:NarrowingTrace,'U:Substitution,'UV:Qid]] = 'U:Substitution [none] . eq 'getUnifierVariableFamily['`{_`,_`,_`,_`,_`,_`,_`}['C:Context,'L:Qid, 'U:Substitution,'UV:Qid,'T:Term,'T:Type,'A:Substitution]] = 'UV:Qid [none] . eq 'getUnifierVariableFamily['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type, 'A:Substitution,'SV:Qid,'U:Substitution,'UV:Qid]] = 'UV:Qid [none] . eq 'getUnifierVariableFamily['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type, 'S:Substitution,'T:NarrowingTrace,'U:Substitution,'UV:Qid]] = 'UV:Qid [ none] . eq 'getVariableFamily['`{_`,_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'C:Context, 'L:Qid,'TS:Substitution,'RS:Substitution,'V:Qid]] = 'V:Qid [none] . eq 'getVariableFamily['`{_`,_`,_`,_`,_`}['T:Term,'S:Substitution,'Q:Qid, 'P:Parent,'B:Bool]] = 'Q:Qid [none] . eq 'getVariableFamily['`{_`,_`,_`}['LS:Substitution,'RS:Substitution,'V:Qid]] = 'V:Qid [none] . eq 'getVariableFamily['`{_`,_`}['S:Substitution,'V:Qid]] = 'V:Qid [none] . eq 'head['__['E:Nat,'L:NatList]] = 'E:Nat [none] . eq 'head['__['E:Qid,'L:QidList]] = 'E:Qid [none] . eq 'insert['E:Qid,'S:QidSet] = '_;_['E:Qid,'S:QidSet] [none] . eq 'intersection['S:QidSet,'N:NeQidSet] = '$intersect['S:QidSet,'N:NeQidSet, 'none.EmptyQidSet] [none] . eq 'intersection['S:QidSet,'none.EmptyQidSet] = 'none.EmptyQidSet [none] . eq 'last['__['L:NatList,'E:Nat]] = 'E:Nat [none] . eq 'last['__['L:QidList,'E:Qid]] = 'E:Qid [none] . eq 'metaNarrowingApply['M:Module,'T:Term,'TL:TermList,'Q:Qid,'N:Nat] = 'metaNarrowingApply['M:Module,'T:Term,'TL:TermList,'Q:Qid, 'none.VariantOptionSet,'N:Nat] [none] . eq 'metaNarrowingSearch['M:Module,'T:Term,'T2:Term,'S:Qid,'B:Bound,'F:Qid, 'N:Nat] = 'metaNarrowingSearch['M:Module,'T:Term,'T2:Term,'S:Qid,'B:Bound, 'F:Qid,'none.VariantOptionSet,'N:Nat] [none] . eq 'metaNarrowingSearchPath['M:Module,'T:Term,'T2:Term,'S:Qid,'B:Bound, 'F:Qid,'N:Nat] = 'metaNarrowingSearchPath['M:Module,'T:Term,'T2:Term, 'S:Qid,'B:Bound,'F:Qid,'none.VariantOptionSet,'N:Nat] [none] . eq 'metaParse['M:Module,'Q:QidList,'T:Type?] = 'metaParse['M:Module, 'none.EmptyQidSet,'Q:QidList,'T:Type?] [none] . eq 'metaPrettyPrint['M:Module,'T:Term] = 'metaPrettyPrint['M:Module, 'none.EmptyQidSet,'T:Term,'__['mixfix.PrintOption,'__['flat.PrintOption, '__['format.PrintOption,'__['number.PrintOption,'rat.PrintOption]]]]] [ none] . eq 'metaPrettyPrint['M:Module,'T:Term,'P:PrintOptionSet] = 'metaPrettyPrint[ 'M:Module,'none.EmptyQidSet,'T:Term,'P:PrintOptionSet] [none] . eq 'metaVariantDisjointUnify['M:Module,'U:UnificationProblem,'TL:TermList, 'Q:Qid,'N:Nat] = 'metaVariantDisjointUnify['M:Module,'U:UnificationProblem, 'TL:TermList,'Q:Qid,'none.VariantOptionSet,'N:Nat] [none] . eq 'metaVariantUnify['M:Module,'U:UnificationProblem,'TL:TermList,'Q:Qid, 'N:Nat] = 'metaVariantUnify['M:Module,'U:UnificationProblem,'TL:TermList, 'Q:Qid,'none.VariantOptionSet,'N:Nat] [none] . eq 'not_['A:Bool] = '_xor_['true.Bool,'A:Bool] [none] . eq 'occurs['E:Nat,'nil.NatList] = 'false.Bool [none] . eq 'occurs['E:Nat,'__['E':Nat,'L:NatList]] = 'if_then_else_fi['_==_['E:Nat, 'E':Nat],'true.Bool,'occurs['E:Nat,'L:NatList]] [none] . eq 'occurs['E:Qid,'nil.TypeList] = 'false.Bool [none] . eq 'occurs['E:Qid,'__['E':Qid,'L:QidList]] = 'if_then_else_fi['_==_['E:Qid, 'E':Qid],'true.Bool,'occurs['E:Qid,'L:QidList]] [none] . eq 'reverse['L:NatList] = '$reverse['L:NatList,'nil.NatList] [none] . eq 'reverse['L:QidList] = '$reverse['L:QidList,'nil.TypeList] [none] . eq 'size['L:NatList] = '$size['L:NatList,'0.Zero] [none] . eq 'size['L:QidList] = '$size['L:QidList,'0.Zero] [none] . eq 'tail['__['E:Nat,'L:NatList]] = 'L:NatList [none] . eq 'tail['__['E:Qid,'L:QidList]] = 'L:QidList [none] . eq 'union['S:QidSet,'S':QidSet] = '_;_['S:QidSet,'S':QidSet] [none] . eq '|_|['S:QidSet] = '$card['S:QidSet,'0.Zero] [none] . endfm ========================================== reduce in META-LEVEL : upModule('STRING, true) . rewrites: 1 result FModule: fmod 'STRING is nil sorts 'Bool ; 'Char ; 'FindResult ; 'Nat ; 'NzNat ; 'String ; 'Zero . subsort 'Char < 'String . subsort 'Nat < 'FindResult . subsort 'NzNat < 'Nat . subsort 'Zero < 'Nat . op '0 : nil -> 'Zero [ctor] . op ' : nil -> 'Char [special( id-hook('StringSymbol, nil))] . op ' : nil -> 'String [special( id-hook('StringSymbol, nil))] . op '_&_ : 'Nat 'Nat -> 'Nat [assoc comm prec(53) special( id-hook('ACU_NumberOpSymbol, '&) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_*_ : 'Nat 'Nat -> 'Nat [assoc comm prec(31) special( id-hook('ACU_NumberOpSymbol, '*) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_*_ : 'NzNat 'NzNat -> 'NzNat [assoc comm prec(31) special( id-hook('ACU_NumberOpSymbol, '*) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_+_ : 'Nat 'Nat -> 'Nat [assoc comm prec(33) special( id-hook('ACU_NumberOpSymbol, '+) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_+_ : 'NzNat 'Nat -> 'NzNat [assoc comm prec(33) special( id-hook('ACU_NumberOpSymbol, '+) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_+_ : 'String 'String -> 'String [prec(33) gather('E 'e) special( id-hook('StringOpSymbol, '+) op-hook('stringSymbol, ', nil, 'Char))] . op '_<<_ : 'Nat 'Nat -> 'Nat [prec(35) gather('E 'e) special( id-hook('NumberOpSymbol, '<<) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_<=_ : 'Nat 'Nat -> 'Bool [prec(37) special( id-hook('NumberOpSymbol, '<=) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_<=_ : 'String 'String -> 'Bool [prec(37) special( id-hook('StringOpSymbol, '<=) op-hook('stringSymbol, ', nil, 'Char) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_<_ : 'Nat 'Nat -> 'Bool [prec(37) special( id-hook('NumberOpSymbol, '<) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_<_ : 'String 'String -> 'Bool [prec(37) special( id-hook('StringOpSymbol, '<) op-hook('stringSymbol, ', nil, 'Char) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_=/=_ : 'Universal 'Universal -> 'Bool [prec(51) poly(1 2) special( id-hook('EqualitySymbol, nil) term-hook('equalTerm, 'false.Bool) term-hook('notEqualTerm, 'true.Bool))] . op '_==_ : 'Universal 'Universal -> 'Bool [prec(51) poly(1 2) special( id-hook('EqualitySymbol, nil) term-hook('equalTerm, 'true.Bool) term-hook('notEqualTerm, 'false.Bool))] . op '_>=_ : 'Nat 'Nat -> 'Bool [prec(37) special( id-hook('NumberOpSymbol, '>=) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_>=_ : 'String 'String -> 'Bool [prec(37) special( id-hook('StringOpSymbol, '>=) op-hook('stringSymbol, ', nil, 'Char) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_>>_ : 'Nat 'Nat -> 'Nat [prec(35) gather('E 'e) special( id-hook('NumberOpSymbol, '>>) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_>_ : 'Nat 'Nat -> 'Bool [prec(37) special( id-hook('NumberOpSymbol, '>) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_>_ : 'String 'String -> 'Bool [prec(37) special( id-hook('StringOpSymbol, '>) op-hook('stringSymbol, ', nil, 'Char) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_^_ : 'Nat 'Nat -> 'Nat [prec(29) gather('E 'e) special( id-hook('NumberOpSymbol, '^) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_^_ : 'NzNat 'Nat -> 'NzNat [prec(29) gather('E 'e) special( id-hook('NumberOpSymbol, '^) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_and_ : 'Bool 'Bool -> 'Bool [assoc comm prec(55)] . op '_divides_ : 'NzNat 'Nat -> 'Bool [prec(51) special( id-hook('NumberOpSymbol, 'divides) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_implies_ : 'Bool 'Bool -> 'Bool [prec(61) gather('e 'E)] . op '_or_ : 'Bool 'Bool -> 'Bool [assoc comm prec(59)] . op '_quo_ : 'Nat 'NzNat -> 'Nat [prec(31) gather('E 'e) special( id-hook('NumberOpSymbol, 'quo) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_rem_ : 'Nat 'NzNat -> 'Nat [prec(31) gather('E 'e) special( id-hook('NumberOpSymbol, 'rem) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_xor_ : 'Bool 'Bool -> 'Bool [assoc comm prec(57)] . op '_xor_ : 'Nat 'Nat -> 'Nat [assoc comm prec(55) special( id-hook('ACU_NumberOpSymbol, 'xor) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_|_ : 'Nat 'Nat -> 'Nat [assoc comm prec(57) special( id-hook('ACU_NumberOpSymbol, '|) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_|_ : 'NzNat 'Nat -> 'NzNat [assoc comm prec(57) special( id-hook('ACU_NumberOpSymbol, '|) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'ascii : 'Char -> 'Nat [special( id-hook('StringOpSymbol, 'ascii) op-hook('stringSymbol, ', nil, 'Char) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'char : '`[FindResult`] -> '`[String`] [special( id-hook('StringOpSymbol, 'char) op-hook('stringSymbol, ', nil, 'Char) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'false : nil -> 'Bool [ctor special( id-hook('SystemFalse, nil))] . op 'find : 'String 'String 'Nat -> 'FindResult [special( id-hook('StringOpSymbol, 'find) op-hook('stringSymbol, ', nil, 'Char) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('notFoundTerm, 'notFound.FindResult))] . op 'gcd : 'Nat 'Nat -> 'Nat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'gcd) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'gcd : 'NzNat 'Nat -> 'NzNat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'gcd) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'if_then_else_fi : 'Bool 'Universal 'Universal -> 'Universal [poly(2 3 0) special( id-hook('BranchSymbol, nil) term-hook('1, 'true.Bool) term-hook('2, 'false.Bool))] . op 'lcm : 'Nat 'Nat -> 'Nat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'lcm) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'lcm : 'NzNat 'NzNat -> 'NzNat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'lcm) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'length : 'String -> 'Nat [special( id-hook('StringOpSymbol, 'length) op-hook('stringSymbol, ', nil, 'Char) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'lowerCase : 'String -> 'String [special( id-hook('StringOpSymbol, 'lowerCase) op-hook('stringSymbol, ', nil, 'Char))] . op 'max : 'Nat 'Nat -> 'Nat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'max) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'max : 'NzNat 'Nat -> 'NzNat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'max) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'min : 'Nat 'Nat -> 'Nat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'min) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'min : 'NzNat 'NzNat -> 'NzNat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'min) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'modExp : '`[FindResult`] '`[FindResult`] '`[FindResult`] -> '`[FindResult`] [special( id-hook('NumberOpSymbol, 'modExp) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'notFound : nil -> 'FindResult [ctor] . op 'not_ : 'Bool -> 'Bool [prec(53)] . op 'rfind : 'String 'String 'Nat -> 'FindResult [special( id-hook('StringOpSymbol, 'rfind) op-hook('stringSymbol, ', nil, 'Char) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('notFoundTerm, 'notFound.FindResult))] . op 's_ : 'Nat -> 'NzNat [iter ctor special( id-hook('SuccSymbol, nil) term-hook('zeroTerm, '0.Zero))] . op 'sd : 'Nat 'Nat -> 'Nat [comm special( id-hook('CUI_NumberOpSymbol, 'sd) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'substr : 'String 'Nat 'Nat -> 'String [special( id-hook('StringOpSymbol, 'substr) op-hook('stringSymbol, ', nil, 'Char) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'true : nil -> 'Bool [ctor special( id-hook('SystemTrue, nil))] . op 'upperCase : 'String -> 'String [special( id-hook('StringOpSymbol, 'upperCase) op-hook('stringSymbol, ', nil, 'Char))] . none eq '_and_['A:Bool,'A:Bool] = 'A:Bool [none] . eq '_and_['A:Bool,'_xor_['B:Bool,'C:Bool]] = '_xor_['_and_['A:Bool,'B:Bool], '_and_['A:Bool,'C:Bool]] [none] . eq '_and_['false.Bool,'A:Bool] = 'false.Bool [none] . eq '_and_['true.Bool,'A:Bool] = 'A:Bool [none] . eq '_implies_['A:Bool,'B:Bool] = 'not_['_xor_['A:Bool,'_and_['A:Bool, 'B:Bool]]] [none] . eq '_or_['A:Bool,'B:Bool] = '_xor_['_and_['A:Bool,'B:Bool],'_xor_['A:Bool, 'B:Bool]] [none] . eq '_xor_['A:Bool,'A:Bool] = 'false.Bool [none] . eq '_xor_['false.Bool,'A:Bool] = 'A:Bool [none] . eq 'not_['A:Bool] = '_xor_['true.Bool,'A:Bool] [none] . endfm ========================================== reduce in META-LEVEL : metaReduce(upModule('STRING, true), '_+_[upTerm("a"), upTerm("b")]) . rewrites: 5 result ResultPair: {'"ab".String,'String} ========================================== reduce in META-LEVEL : metaReduce(upModule('META-LEVEL, true), 'modExp[upTerm( 100),upTerm(66),upTerm(17)]) . rewrites: 7 result ResultPair: {'s_^4['0.Zero],'NzNat} ========================================== reduce in META-LEVEL : metaReduce(upModule('META-LEVEL, true), 'upModule[ upTerm('META-LEVEL),upTerm(true)]) . rewrites: 7 result ResultPair: {'fmod_is_sorts_.____endfm[''META-LEVEL.Sort, 'nil.ImportList,'_;_[''Assignment.Sort,''Attr.Sort,''AttrSet.Sort, ''Bool.Sort,''Bound.Sort,''CallStrategy.Sort,''Char.Sort,''Condition.Sort, ''Constant.Sort,''Context.Sort,''EmptyCommaList.Sort,''EmptyQidSet.Sort, ''EqCondition.Sort,''Equation.Sort,''EquationSet.Sort,''Expression.Sort, ''FModule.Sort,''FTheory.Sort,''FindResult.Sort,''GTermList.Sort, ''GroundTerm.Sort,''GroundTermList.Sort,''Header.Sort,''Hook.Sort, ''HookList.Sort,''Import.Sort,''ImportList.Sort,''Kind.Sort,''KindSet.Sort, ''MatchOrUnificationPair.Sort,''MatchPair.Sort,''MatchPair?.Sort, ''MatchingProblem.Sort,''MembAx.Sort,''MembAxSet.Sort,''Module.Sort, ''ModuleExpression.Sort,''NarrowingApplyResult.Sort, ''NarrowingApplyResult?.Sort,''NarrowingSearchPathResult.Sort, ''NarrowingSearchPathResult?.Sort,''NarrowingSearchResult.Sort, ''NarrowingSearchResult?.Sort,''NarrowingStep.Sort,''NarrowingTrace.Sort, ''Nat.Sort,''NatList.Sort,''NeCTermList.Sort,''NeGroundTermList.Sort, ''NeHookList.Sort,''NeKindSet.Sort,''NeNatList.Sort, ''NeParameterDeclList.Sort,''NeParameterList.Sort,''NeQidList.Sort, ''NeQidSet.Sort,''NeSortSet.Sort,''NeTermList.Sort,''NeTypeList.Sort, ''NeTypeSet.Sort,''NeVariableSet.Sort,''NzNat.Sort,''OpDecl.Sort, ''OpDeclSet.Sort,''OpMapping.Sort,''OpMappingSet.Sort,''ParameterDecl.Sort, ''ParameterDeclList.Sort,''ParameterList.Sort,''Parent.Sort, ''PatternSubjectPair.Sort,''PrintOption.Sort,''PrintOptionSet.Sort, ''Qid.Sort,''QidList.Sort,''QidSet.Sort,''Renaming.Sort,''RenamingSet.Sort, ''Result4Tuple.Sort,''Result4Tuple?.Sort,''ResultPair.Sort, ''ResultPair?.Sort,''ResultTriple.Sort,''ResultTriple?.Sort,''Rule.Sort, ''RuleApplication.Sort,''RuleSet.Sort,''SModule.Sort,''STheory.Sort, ''SmtResult.Sort,''SmtResult?.Sort,''Sort.Sort,''SortMapping.Sort, ''SortMappingSet.Sort,''SortSet.Sort,''SrewriteOption.Sort, ''StratDecl.Sort,''StratDeclSet.Sort,''StratDefSet.Sort, ''StratDefinition.Sort,''StratMapping.Sort,''StratMappingSet.Sort, ''StratModule.Sort,''StratTheory.Sort,''Strategy.Sort,''Strategy?.Sort, ''StrategyList.Sort,''String.Sort,''SubsortDecl.Sort,''SubsortDeclSet.Sort, ''Substitution.Sort,''Substitution?.Sort,''Term.Sort,''TermList.Sort, ''TermQid.Sort,''Trace.Sort,''Trace?.Sort,''TraceStep.Sort,''Type.Sort, ''Type?.Sort,''TypeList.Sort,''TypeListSet.Sort,''TypeSet.Sort, ''UnificandPair.Sort,''UnificationPair.Sort,''UnificationPair?.Sort, ''UnificationProblem.Sort,''UnificationTriple.Sort, ''UnificationTriple?.Sort,''UsingPair.Sort,''UsingPairSet.Sort, ''Variable.Sort,''VariableSet.Sort,''Variant.Sort,''Variant?.Sort, ''VariantOption.Sort,''VariantOptionSet.Sort,''View.Sort, ''ViewExpression.Sort,''Zero.Sort],'__['subsort_<_.[''Assignment.Sort, ''Substitution.Sort],'subsort_<_.[''Attr.Sort,''AttrSet.Sort],'subsort_<_.[ ''CallStrategy.Sort,''Strategy.Sort],'subsort_<_.[''Char.Sort, ''String.Sort],'subsort_<_.[''Constant.Sort,''GroundTerm.Sort], 'subsort_<_.[''Constant.Sort,''TermQid.Sort],'subsort_<_.[''Context.Sort, ''NeCTermList.Sort],'subsort_<_.[''EmptyCommaList.Sort, ''GroundTermList.Sort],'subsort_<_.[''EmptyCommaList.Sort, ''ParameterList.Sort],'subsort_<_.[''EmptyQidSet.Sort,''KindSet.Sort], 'subsort_<_.[''EmptyQidSet.Sort,''SortSet.Sort],'subsort_<_.[ ''EmptyQidSet.Sort,''VariableSet.Sort],'subsort_<_.[''EqCondition.Sort, ''Condition.Sort],'subsort_<_.[''Equation.Sort,''EquationSet.Sort], 'subsort_<_.[''Expression.Sort,''ModuleExpression.Sort],'subsort_<_.[ ''Expression.Sort,''ViewExpression.Sort],'subsort_<_.[''FModule.Sort, ''SModule.Sort],'subsort_<_.[''FTheory.Sort,''STheory.Sort],'subsort_<_.[ ''GroundTerm.Sort,''NeGroundTermList.Sort],'subsort_<_.[''GroundTerm.Sort, ''Term.Sort],'subsort_<_.[''GroundTermList.Sort,''TermList.Sort], 'subsort_<_.[''Hook.Sort,''NeHookList.Sort],'subsort_<_.[''Import.Sort, ''ImportList.Sort],'subsort_<_.[''Kind.Sort,''NeKindSet.Sort],'subsort_<_.[ ''Kind.Sort,''Type.Sort],'subsort_<_.[''KindSet.Sort,''TypeSet.Sort], 'subsort_<_.[''MatchPair.Sort,''MatchOrUnificationPair.Sort],'subsort_<_.[ ''MatchPair.Sort,''MatchPair?.Sort],'subsort_<_.[''MembAx.Sort, ''MembAxSet.Sort],'subsort_<_.[''NarrowingApplyResult.Sort, ''NarrowingApplyResult?.Sort],'subsort_<_.[ ''NarrowingSearchPathResult.Sort,''NarrowingSearchPathResult?.Sort], 'subsort_<_.[''NarrowingSearchResult.Sort,''NarrowingSearchResult?.Sort], 'subsort_<_.[''NarrowingStep.Sort,''NarrowingTrace.Sort],'subsort_<_.[ ''Nat.Sort,''Bound.Sort],'subsort_<_.[''Nat.Sort,''FindResult.Sort], 'subsort_<_.[''Nat.Sort,''NeNatList.Sort],'subsort_<_.[''Nat.Sort, ''Parent.Sort],'subsort_<_.[''NeCTermList.Sort,''GTermList.Sort], 'subsort_<_.[''NeGroundTermList.Sort,''GroundTermList.Sort],'subsort_<_.[ ''NeGroundTermList.Sort,''NeTermList.Sort],'subsort_<_.[''NeHookList.Sort, ''HookList.Sort],'subsort_<_.[''NeKindSet.Sort,''KindSet.Sort], 'subsort_<_.[''NeKindSet.Sort,''NeTypeSet.Sort],'subsort_<_.[ ''NeNatList.Sort,''NatList.Sort],'subsort_<_.[''NeParameterDeclList.Sort, ''ParameterDeclList.Sort],'subsort_<_.[''NeParameterList.Sort, ''ParameterList.Sort],'subsort_<_.[''NeQidList.Sort,''QidList.Sort], 'subsort_<_.[''NeQidSet.Sort,''QidSet.Sort],'subsort_<_.[''NeSortSet.Sort, ''NeTypeSet.Sort],'subsort_<_.[''NeSortSet.Sort,''SortSet.Sort], 'subsort_<_.[''NeTermList.Sort,''TermList.Sort],'subsort_<_.[ ''NeTypeList.Sort,''NeQidList.Sort],'subsort_<_.[''NeTypeList.Sort, ''TypeList.Sort],'subsort_<_.[''NeTypeSet.Sort,''NeQidSet.Sort], 'subsort_<_.[''NeTypeSet.Sort,''TypeSet.Sort],'subsort_<_.[ ''NeVariableSet.Sort,''NeQidSet.Sort],'subsort_<_.[''NeVariableSet.Sort, ''VariableSet.Sort],'subsort_<_.[''NzNat.Sort,''Nat.Sort],'subsort_<_.[ ''OpDecl.Sort,''OpDeclSet.Sort],'subsort_<_.[''OpMapping.Sort, ''OpMappingSet.Sort],'subsort_<_.[''ParameterDecl.Sort, ''NeParameterDeclList.Sort],'subsort_<_.[''PatternSubjectPair.Sort, ''MatchingProblem.Sort],'subsort_<_.[''PrintOption.Sort, ''PrintOptionSet.Sort],'subsort_<_.[''Qid.Sort,''Header.Sort],'subsort_<_.[ ''Qid.Sort,''NeQidList.Sort],'subsort_<_.[''Qid.Sort,''NeQidSet.Sort], 'subsort_<_.[''Renaming.Sort,''RenamingSet.Sort],'subsort_<_.[ ''Result4Tuple.Sort,''Result4Tuple?.Sort],'subsort_<_.[''ResultPair.Sort, ''ResultPair?.Sort],'subsort_<_.[''ResultTriple.Sort,''ResultTriple?.Sort], 'subsort_<_.[''Rule.Sort,''RuleSet.Sort],'subsort_<_.[ ''RuleApplication.Sort,''Strategy.Sort],'subsort_<_.[''SModule.Sort, ''Module.Sort],'subsort_<_.[''STheory.Sort,''Module.Sort],'subsort_<_.[ ''SmtResult.Sort,''SmtResult?.Sort],'subsort_<_.[''Sort.Sort, ''Expression.Sort],'subsort_<_.[''Sort.Sort,''NeSortSet.Sort],'subsort_<_.[ ''Sort.Sort,''Type.Sort],'subsort_<_.[''SortMapping.Sort, ''SortMappingSet.Sort],'subsort_<_.[''SortSet.Sort,''TypeSet.Sort], 'subsort_<_.[''StratDecl.Sort,''StratDeclSet.Sort],'subsort_<_.[ ''StratDefinition.Sort,''StratDefSet.Sort],'subsort_<_.[ ''StratMapping.Sort,''StratMappingSet.Sort],'subsort_<_.[ ''StratModule.Sort,''Module.Sort],'subsort_<_.[''StratTheory.Sort, ''Module.Sort],'subsort_<_.[''Strategy.Sort,''Strategy?.Sort],'subsort_<_.[ ''Strategy.Sort,''StrategyList.Sort],'subsort_<_.[''SubsortDecl.Sort, ''SubsortDeclSet.Sort],'subsort_<_.[''Substitution.Sort, ''Substitution?.Sort],'subsort_<_.[''Term.Sort,''NeTermList.Sort], 'subsort_<_.[''TermList.Sort,''GTermList.Sort],'subsort_<_.[''TermQid.Sort, ''Qid.Sort],'subsort_<_.[''TermQid.Sort,''Term.Sort],'subsort_<_.[ ''Trace.Sort,''Trace?.Sort],'subsort_<_.[''TraceStep.Sort,''Trace.Sort], 'subsort_<_.[''Type.Sort,''NeTypeList.Sort],'subsort_<_.[''Type.Sort, ''NeTypeSet.Sort],'subsort_<_.[''Type.Sort,''Qid.Sort],'subsort_<_.[ ''Type.Sort,''Type?.Sort],'subsort_<_.[''TypeList.Sort,''QidList.Sort], 'subsort_<_.[''TypeList.Sort,''TypeListSet.Sort],'subsort_<_.[ ''TypeSet.Sort,''QidSet.Sort],'subsort_<_.[''TypeSet.Sort, ''TypeListSet.Sort],'subsort_<_.[''UnificandPair.Sort, ''UnificationProblem.Sort],'subsort_<_.[''UnificationPair.Sort, ''MatchOrUnificationPair.Sort],'subsort_<_.[''UnificationPair.Sort, ''UnificationPair?.Sort],'subsort_<_.[''UnificationTriple.Sort, ''UnificationTriple?.Sort],'subsort_<_.[''UsingPair.Sort, ''UsingPairSet.Sort],'subsort_<_.[''Variable.Sort,''NeVariableSet.Sort], 'subsort_<_.[''Variable.Sort,''TermQid.Sort],'subsort_<_.[ ''VariableSet.Sort,''QidSet.Sort],'subsort_<_.[''Variant.Sort, ''Variant?.Sort],'subsort_<_.[''VariantOption.Sort, ''VariantOptionSet.Sort],'subsort_<_.[''ViewExpression.Sort, ''NeParameterList.Sort],'subsort_<_.[''Zero.Sort,''Nat.Sort]],'__[ 'op_:_->_`[_`].[''$applySubstitution.Sort,'__[''NeTermList.Sort, ''Substitution.Sort],''Term.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''$card.Sort,'__[''QidSet.Sort,''Nat.Sort],''Nat.Sort,'none.AttrSet], 'op_:_->_`[_`].[''$diff.Sort,'__[''QidSet.Sort,''QidSet.Sort, ''QidSet.Sort],''QidSet.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''$intersect.Sort,'__[''QidSet.Sort,''QidSet.Sort,''QidSet.Sort], ''QidSet.Sort,'none.AttrSet],'op_:_->_`[_`].[''$reverse.Sort,'__[ ''NatList.Sort,''NatList.Sort],''NatList.Sort,'none.AttrSet], 'op_:_->_`[_`].[''$reverse.Sort,'__[''QidList.Sort,''QidList.Sort], ''QidList.Sort,'none.AttrSet],'op_:_->_`[_`].[''$size.Sort,'__[ ''NatList.Sort,''Nat.Sort],''Nat.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''$size.Sort,'__[''QidList.Sort,''Nat.Sort],''Nat.Sort,'none.AttrSet], 'op_:_->_`[_`].[''0.Sort,'nil.TypeList,''Zero.Sort,'ctor.Attr], 'op_:_->_`[_`].[''.Sort,'nil.TypeList,''Constant.Sort,'special[ 'id-hook[''QuotedIdentifierSymbol.Sort,''constantQid.Sort]]], 'op_:_->_`[_`].[''.Sort,'nil.TypeList,''Kind.Sort,'special['id-hook[ ''QuotedIdentifierSymbol.Sort,''kindQid.Sort]]],'op_:_->_`[_`].[ ''.Sort,'nil.TypeList,''Qid.Sort,'special['id-hook[ ''QuotedIdentifierSymbol.Sort,'nil.TypeList]]],'op_:_->_`[_`].[ ''.Sort,'nil.TypeList,''Sort.Sort,'special['id-hook[ ''QuotedIdentifierSymbol.Sort,''sortQid.Sort]]],'op_:_->_`[_`].[ ''.Sort,'nil.TypeList,''Variable.Sort,'special['id-hook[ ''QuotedIdentifierSymbol.Sort,''variableQid.Sort]]],'op_:_->_`[_`].[ ''.Sort,'nil.TypeList,''Char.Sort,'special['id-hook[ ''StringSymbol.Sort,'nil.TypeList]]],'op_:_->_`[_`].[''.Sort, 'nil.TypeList,''String.Sort,'special['id-hook[''StringSymbol.Sort, 'nil.TypeList]]],'op_:_->_`[_`].[''_!.Sort,''Strategy.Sort,''Strategy.Sort, 'ctor.Attr],'op_:_->_`[_`].[''_&_.Sort,'__[''Nat.Sort,''Nat.Sort], ''Nat.Sort,'__['assoc.Attr,'comm.Attr,'prec['s_^53['0.Zero]],'special['__[ 'id-hook[''ACU_NumberOpSymbol.Sort,''&.Sort],'op-hook[''succSymbol.Sort, ''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[''_*.Sort, ''Strategy.Sort,''Strategy.Sort,'ctor.Attr],'op_:_->_`[_`].[''_*_.Sort,'__[ ''Nat.Sort,''Nat.Sort],''Nat.Sort,'__['assoc.Attr,'comm.Attr,'prec['s_^31[ '0.Zero]],'special['__['id-hook[''ACU_NumberOpSymbol.Sort,''*.Sort], 'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]], 'op_:_->_`[_`].[''_*_.Sort,'__[''NzNat.Sort,''NzNat.Sort],''NzNat.Sort,'__[ 'assoc.Attr,'comm.Attr,'prec['s_^31['0.Zero]],'special['__['id-hook[ ''ACU_NumberOpSymbol.Sort,''*.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[''_*`(_`).Sort,'__[ ''ModuleExpression.Sort,''RenamingSet.Sort],''ModuleExpression.Sort,'__[ 'ctor.Attr,'format['__[''d.Sort,''d.Sort,''s.Sort,''n++i.Sort,''n--i.Sort, ''d.Sort]],'prec['s_^39['0.Zero]]]],'op_:_->_`[_`].[''_+.Sort, ''Strategy.Sort,''Strategy.Sort,'ctor.Attr],'op_:_->_`[_`].[''_+_.Sort,'__[ ''ModuleExpression.Sort,''ModuleExpression.Sort],''ModuleExpression.Sort, '__['assoc.Attr,'comm.Attr,'ctor.Attr]],'op_:_->_`[_`].[''_+_.Sort,'__[ ''Nat.Sort,''Nat.Sort],''Nat.Sort,'__['assoc.Attr,'comm.Attr,'prec['s_^33[ '0.Zero]],'special['__['id-hook[''ACU_NumberOpSymbol.Sort,''+.Sort], 'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]], 'op_:_->_`[_`].[''_+_.Sort,'__[''NzNat.Sort,''Nat.Sort],''NzNat.Sort,'__[ 'assoc.Attr,'comm.Attr,'prec['s_^33['0.Zero]],'special['__['id-hook[ ''ACU_NumberOpSymbol.Sort,''+.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[''_+_.Sort,'__[''String.Sort, ''String.Sort],''String.Sort,'__['gather['__[''E.Sort,''e.Sort]],'prec[ 's_^33['0.Zero]],'special['__['id-hook[''StringOpSymbol.Sort,''+.Sort], 'op-hook[''stringSymbol.Sort,''.Sort,'nil.TypeList, ''Char.Sort]]]]],'op_:_->_`[_`].[''_/\_.Sort,'__[''Condition.Sort, ''Condition.Sort],''Condition.Sort,'__['assoc.Attr,'ctor.Attr,'id[ ''nil.EqCondition.Constant],'prec['s_^73['0.Zero]]]],'op_:_->_`[_`].[ ''_/\_.Sort,'__[''EqCondition.Sort,''EqCondition.Sort],''EqCondition.Sort, '__['assoc.Attr,'ctor.Attr,'id[''nil.EqCondition.Constant],'prec['s_^73[ '0.Zero]]]],'op_:_->_`[_`].[''_/\_.Sort,'__[''MatchingProblem.Sort, ''MatchingProblem.Sort],''MatchingProblem.Sort,'__['assoc.Attr,'comm.Attr, 'ctor.Attr,'prec['s_^73['0.Zero]]]],'op_:_->_`[_`].[''_/\_.Sort,'__[ ''UnificationProblem.Sort,''UnificationProblem.Sort], ''UnificationProblem.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'prec[ 's_^73['0.Zero]]]],'op_:_->_`[_`].[''_::_.Variable,'__[''Sort.Sort, ''ModuleExpression.Sort],''ParameterDecl.Sort,'none.AttrSet], 'op_:_->_`[_`].[''_:=_.Variable,'__[''Term.Sort,''Term.Sort], ''EqCondition.Sort,'__['ctor.Attr,'prec['s_^71['0.Zero]]]],'op_:_->_`[_`].[ ''_:_.Variable,'__[''Term.Sort,''Sort.Sort],''EqCondition.Sort,'__[ 'ctor.Attr,'prec['s_^71['0.Zero]]]],'op_:_->_`[_`].[''_;_.Sort,'__[ ''EmptyQidSet.Sort,''EmptyQidSet.Sort],''EmptyQidSet.Sort,'__['assoc.Attr, 'comm.Attr,'ctor.Attr,'id[''none.EmptyQidSet.Constant],'prec['s_^43[ '0.Zero]]]],'op_:_->_`[_`].[''_;_.Sort,'__[''KindSet.Sort,''KindSet.Sort], ''KindSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.EmptyQidSet.Constant],'prec['s_^43['0.Zero]]]],'op_:_->_`[_`].[ ''_;_.Sort,'__[''NeKindSet.Sort,''KindSet.Sort],''NeKindSet.Sort,'__[ 'assoc.Attr,'comm.Attr,'ctor.Attr,'id[''none.EmptyQidSet.Constant],'prec[ 's_^43['0.Zero]]]],'op_:_->_`[_`].[''_;_.Sort,'__[''NeQidSet.Sort, ''QidSet.Sort],''NeQidSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.EmptyQidSet.Constant],'prec['s_^43['0.Zero]]]],'op_:_->_`[_`].[ ''_;_.Sort,'__[''NeSortSet.Sort,''SortSet.Sort],''NeSortSet.Sort,'__[ 'assoc.Attr,'comm.Attr,'ctor.Attr,'id[''none.EmptyQidSet.Constant],'prec[ 's_^43['0.Zero]]]],'op_:_->_`[_`].[''_;_.Sort,'__[''NeTypeSet.Sort, ''TypeSet.Sort],''NeTypeSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.EmptyQidSet.Constant],'prec['s_^43['0.Zero]]]],'op_:_->_`[_`].[ ''_;_.Sort,'__[''NeVariableSet.Sort,''VariableSet.Sort], ''NeVariableSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.EmptyQidSet.Constant],'prec['s_^43['0.Zero]]]],'op_:_->_`[_`].[ ''_;_.Sort,'__[''QidSet.Sort,''QidSet.Sort],''QidSet.Sort,'__['assoc.Attr, 'comm.Attr,'ctor.Attr,'id[''none.EmptyQidSet.Constant],'prec['s_^43[ '0.Zero]]]],'op_:_->_`[_`].[''_;_.Sort,'__[''SortSet.Sort,''SortSet.Sort], ''SortSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.EmptyQidSet.Constant],'prec['s_^43['0.Zero]]]],'op_:_->_`[_`].[ ''_;_.Sort,'__[''Strategy.Sort,''Strategy.Sort],''Strategy.Sort,'__[ 'assoc.Attr,'ctor.Attr,'gather['__[''e.Sort,''E.Sort]],'id[ ''idle.Strategy.Constant],'prec['s_^39['0.Zero]]]],'op_:_->_`[_`].[ ''_;_.Sort,'__[''Substitution.Sort,''Substitution.Sort], ''Substitution.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.Substitution.Constant],'prec['s_^65['0.Zero]]]],'op_:_->_`[_`].[ ''_;_.Sort,'__[''TypeListSet.Sort,''TypeListSet.Sort],''TypeListSet.Sort, '__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[''none.EmptyQidSet.Constant], 'prec['s_^43['0.Zero]]]],'op_:_->_`[_`].[''_;_.Sort,'__[''TypeSet.Sort, ''TypeSet.Sort],''TypeSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.EmptyQidSet.Constant],'prec['s_^43['0.Zero]]]],'op_:_->_`[_`].[ ''_;_.Sort,'__[''VariableSet.Sort,''VariableSet.Sort],''VariableSet.Sort, '__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[''none.EmptyQidSet.Constant], 'prec['s_^43['0.Zero]]]],'op_:_->_`[_`].[''_<-_.Sort,'__[''Variable.Sort, ''Term.Sort],''Assignment.Sort,'__['ctor.Attr,'format['__[''n++i.Sort, ''d.Sort,''d.Sort,''--.Sort]],'prec['s_^63['0.Zero]]]],'op_:_->_`[_`].[ ''_<<_.Sort,'__[''Nat.Sort,''Nat.Sort],''Nat.Sort,'__['gather['__[''E.Sort, ''e.Sort]],'prec['s_^35['0.Zero]],'special['__['id-hook[ ''NumberOpSymbol.Sort,''<<.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[''_<=?_.Sort,'__[''Term.Sort, ''Term.Sort],''PatternSubjectPair.Sort,'__['ctor.Attr,'prec['s_^71[ '0.Zero]]]],'op_:_->_`[_`].[''_<=_.Sort,'__[''Nat.Sort,''Nat.Sort], ''Bool.Sort,'__['prec['s_^37['0.Zero]],'special['__['id-hook[ ''NumberOpSymbol.Sort,''<=.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort],'term-hook[''trueTerm.Sort,''true.Bool.Constant], 'term-hook[''falseTerm.Sort,''false.Bool.Constant]]]]],'op_:_->_`[_`].[ ''_<=_.Sort,'__[''String.Sort,''String.Sort],''Bool.Sort,'__['prec['s_^37[ '0.Zero]],'special['__['id-hook[''StringOpSymbol.Sort,''<=.Sort],'op-hook[ ''stringSymbol.Sort,''.Sort,'nil.TypeList,''Char.Sort],'term-hook[ ''trueTerm.Sort,''true.Bool.Constant],'term-hook[''falseTerm.Sort, ''false.Bool.Constant]]]]],'op_:_->_`[_`].[''_<_.Sort,'__[''Nat.Sort, ''Nat.Sort],''Bool.Sort,'__['prec['s_^37['0.Zero]],'special['__['id-hook[ ''NumberOpSymbol.Sort,''<.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort],'term-hook[''trueTerm.Sort,''true.Bool.Constant], 'term-hook[''falseTerm.Sort,''false.Bool.Constant]]]]],'op_:_->_`[_`].[ ''_<_.Sort,'__[''String.Sort,''String.Sort],''Bool.Sort,'__['prec['s_^37[ '0.Zero]],'special['__['id-hook[''StringOpSymbol.Sort,''<.Sort],'op-hook[ ''stringSymbol.Sort,''.Sort,'nil.TypeList,''Char.Sort],'term-hook[ ''trueTerm.Sort,''true.Bool.Constant],'term-hook[''falseTerm.Sort, ''false.Bool.Constant]]]]],'op_:_->_`[_`].[''_=/=_.Sort,'__[ ''Universal.Sort,''Universal.Sort],''Bool.Sort,'__['poly['__['s_['0.Zero], 's_^2['0.Zero]]],'prec['s_^51['0.Zero]],'special['__['id-hook[ ''EqualitySymbol.Sort,'nil.TypeList],'term-hook[''equalTerm.Sort, ''false.Bool.Constant],'term-hook[''notEqualTerm.Sort, ''true.Bool.Constant]]]]],'op_:_->_`[_`].[''_==_.Sort,'__[''Universal.Sort, ''Universal.Sort],''Bool.Sort,'__['poly['__['s_['0.Zero],'s_^2['0.Zero]]], 'prec['s_^51['0.Zero]],'special['__['id-hook[''EqualitySymbol.Sort, 'nil.TypeList],'term-hook[''equalTerm.Sort,''true.Bool.Constant], 'term-hook[''notEqualTerm.Sort,''false.Bool.Constant]]]]],'op_:_->_`[_`].[ ''_=>_.Sort,'__[''Term.Sort,''Term.Sort],''Condition.Sort,'__['ctor.Attr, 'prec['s_^71['0.Zero]]]],'op_:_->_`[_`].[''_=?_.Sort,'__[''Term.Sort, ''Term.Sort],''UnificandPair.Sort,'__['ctor.Attr,'prec['s_^71['0.Zero]]]], 'op_:_->_`[_`].[''_=_.Sort,'__[''Term.Sort,''Term.Sort],''EqCondition.Sort, '__['ctor.Attr,'prec['s_^71['0.Zero]]]],'op_:_->_`[_`].[''_>=_.Sort,'__[ ''Nat.Sort,''Nat.Sort],''Bool.Sort,'__['prec['s_^37['0.Zero]],'special['__[ 'id-hook[''NumberOpSymbol.Sort,''>=.Sort],'op-hook[''succSymbol.Sort, ''s_.Sort,''Nat.Sort,''NzNat.Sort],'term-hook[''trueTerm.Sort, ''true.Bool.Constant],'term-hook[''falseTerm.Sort, ''false.Bool.Constant]]]]],'op_:_->_`[_`].[''_>=_.Sort,'__[''String.Sort, ''String.Sort],''Bool.Sort,'__['prec['s_^37['0.Zero]],'special['__[ 'id-hook[''StringOpSymbol.Sort,''>=.Sort],'op-hook[''stringSymbol.Sort, ''.Sort,'nil.TypeList,''Char.Sort],'term-hook[''trueTerm.Sort, ''true.Bool.Constant],'term-hook[''falseTerm.Sort, ''false.Bool.Constant]]]]],'op_:_->_`[_`].[''_>>_.Sort,'__[''Nat.Sort, ''Nat.Sort],''Nat.Sort,'__['gather['__[''E.Sort,''e.Sort]],'prec['s_^35[ '0.Zero]],'special['__['id-hook[''NumberOpSymbol.Sort,''>>.Sort],'op-hook[ ''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[ ''_>_.Sort,'__[''Nat.Sort,''Nat.Sort],''Bool.Sort,'__['prec['s_^37[ '0.Zero]],'special['__['id-hook[''NumberOpSymbol.Sort,''>.Sort],'op-hook[ ''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort],'term-hook[ ''trueTerm.Sort,''true.Bool.Constant],'term-hook[''falseTerm.Sort, ''false.Bool.Constant]]]]],'op_:_->_`[_`].[''_>_.Sort,'__[''String.Sort, ''String.Sort],''Bool.Sort,'__['prec['s_^37['0.Zero]],'special['__[ 'id-hook[''StringOpSymbol.Sort,''>.Sort],'op-hook[''stringSymbol.Sort, ''.Sort,'nil.TypeList,''Char.Sort],'term-hook[''trueTerm.Sort, ''true.Bool.Constant],'term-hook[''falseTerm.Sort, ''false.Bool.Constant]]]]],'op_:_->_`[_`].[''_?_:_.Variable,'__[ ''Strategy.Sort,''Strategy.Sort,''Strategy.Sort],''Strategy.Sort,'__[ 'ctor.Attr,'prec['s_^55['0.Zero]]]],'op_:_->_`[_`].[''_\_.Sort,'__[ ''QidSet.Sort,''QidSet.Sort],''QidSet.Sort,'gather['__[''E.Sort, ''e.Sort]]],'op_:_->_`[_`].[''_^_.Sort,'__[''Nat.Sort,''Nat.Sort], ''Nat.Sort,'__['gather['__[''E.Sort,''e.Sort]],'prec['s_^29['0.Zero]], 'special['__['id-hook[''NumberOpSymbol.Sort,''^.Sort],'op-hook[ ''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[ ''_^_.Sort,'__[''NzNat.Sort,''Nat.Sort],''NzNat.Sort,'__['gather['__[ ''E.Sort,''e.Sort]],'prec['s_^29['0.Zero]],'special['__['id-hook[ ''NumberOpSymbol.Sort,''^.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[''__.Sort,'__[''AttrSet.Sort, ''AttrSet.Sort],''AttrSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.AttrSet.Constant]]],'op_:_->_`[_`].[''__.Sort,'__[ ''EquationSet.Sort,''EquationSet.Sort],''EquationSet.Sort,'__['assoc.Attr, 'comm.Attr,'ctor.Attr,'format['__[''d.Sort,''ni.Sort,''d.Sort]],'id[ ''none.EquationSet.Constant]]],'op_:_->_`[_`].[''__.Sort,'__[ ''HookList.Sort,''HookList.Sort],''HookList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''nil.HookList.Constant]]],'op_:_->_`[_`].[''__.Sort,'__[ ''HookList.Sort,''NeHookList.Sort],''NeHookList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''nil.HookList.Constant]]],'op_:_->_`[_`].[''__.Sort,'__[ ''ImportList.Sort,''ImportList.Sort],''ImportList.Sort,'__['assoc.Attr, 'ctor.Attr,'format['__[''d.Sort,''ni.Sort,''d.Sort]],'id[ ''nil.ImportList.Constant]]],'op_:_->_`[_`].[''__.Sort,'__[ ''MembAxSet.Sort,''MembAxSet.Sort],''MembAxSet.Sort,'__['assoc.Attr, 'comm.Attr,'ctor.Attr,'format['__[''d.Sort,''ni.Sort,''d.Sort]],'id[ ''none.MembAxSet.Constant]]],'op_:_->_`[_`].[''__.Sort,'__[ ''NarrowingTrace.Sort,''NarrowingTrace.Sort],''NarrowingTrace.Sort,'__[ 'assoc.Attr,'ctor.Attr,'id[''nil.NarrowingTrace.Constant]]], 'op_:_->_`[_`].[''__.Sort,'__[''NatList.Sort,''NatList.Sort], ''NatList.Sort,'__['assoc.Attr,'ctor.Attr,'id[''nil.NatList.Constant], 'prec['s_^25['0.Zero]]]],'op_:_->_`[_`].[''__.Sort,'__[''NatList.Sort, ''NeNatList.Sort],''NeNatList.Sort,'__['assoc.Attr,'ctor.Attr,'id[ ''nil.NatList.Constant],'prec['s_^25['0.Zero]]]],'op_:_->_`[_`].[''__.Sort, '__[''NeHookList.Sort,''HookList.Sort],''NeHookList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''nil.HookList.Constant]]],'op_:_->_`[_`].[''__.Sort,'__[ ''NeNatList.Sort,''NatList.Sort],''NeNatList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''nil.NatList.Constant],'prec['s_^25['0.Zero]]]], 'op_:_->_`[_`].[''__.Sort,'__[''NeQidList.Sort,''QidList.Sort], ''NeQidList.Sort,'__['assoc.Attr,'ctor.Attr,'id[''nil.TypeList.Constant], 'prec['s_^25['0.Zero]]]],'op_:_->_`[_`].[''__.Sort,'__[''NeTypeList.Sort, ''TypeList.Sort],''NeTypeList.Sort,'__['assoc.Attr,'ctor.Attr,'id[ ''nil.TypeList.Constant],'prec['s_^25['0.Zero]]]],'op_:_->_`[_`].[ ''__.Sort,'__[''OpDeclSet.Sort,''OpDeclSet.Sort],''OpDeclSet.Sort,'__[ 'assoc.Attr,'comm.Attr,'ctor.Attr,'format['__[''d.Sort,''ni.Sort, ''d.Sort]],'id[''none.OpDeclSet.Constant]]],'op_:_->_`[_`].[''__.Sort,'__[ ''OpMappingSet.Sort,''OpMappingSet.Sort],''OpMappingSet.Sort,'__[ 'assoc.Attr,'comm.Attr,'ctor.Attr,'format['__[''d.Sort,''ni.Sort, ''d.Sort]],'id[''none.OpMappingSet.Constant]]],'op_:_->_`[_`].[''__.Sort, '__[''PrintOptionSet.Sort,''PrintOptionSet.Sort],''PrintOptionSet.Sort,'__[ 'assoc.Attr,'comm.Attr,'ctor.Attr,'id[''none.PrintOptionSet.Constant]]], 'op_:_->_`[_`].[''__.Sort,'__[''QidList.Sort,''NeQidList.Sort], ''NeQidList.Sort,'__['assoc.Attr,'ctor.Attr,'id[''nil.TypeList.Constant], 'prec['s_^25['0.Zero]]]],'op_:_->_`[_`].[''__.Sort,'__[''QidList.Sort, ''QidList.Sort],''QidList.Sort,'__['assoc.Attr,'ctor.Attr,'id[ ''nil.TypeList.Constant],'prec['s_^25['0.Zero]]]],'op_:_->_`[_`].[ ''__.Sort,'__[''RuleSet.Sort,''RuleSet.Sort],''RuleSet.Sort,'__[ 'assoc.Attr,'comm.Attr,'ctor.Attr,'format['__[''d.Sort,''ni.Sort, ''d.Sort]],'id[''none.RuleSet.Constant]]],'op_:_->_`[_`].[''__.Sort,'__[ ''SortMappingSet.Sort,''SortMappingSet.Sort],''SortMappingSet.Sort,'__[ 'assoc.Attr,'comm.Attr,'ctor.Attr,'format['__[''d.Sort,''ni.Sort, ''d.Sort]],'id[''none.SortMappingSet.Constant]]],'op_:_->_`[_`].[''__.Sort, '__[''StratDeclSet.Sort,''StratDeclSet.Sort],''StratDeclSet.Sort,'__[ 'assoc.Attr,'comm.Attr,'ctor.Attr,'format['__[''d.Sort,''ni.Sort, ''d.Sort]],'id[''none.StratDeclSet.Constant]]],'op_:_->_`[_`].[''__.Sort, '__[''StratDefSet.Sort,''StratDefSet.Sort],''StratDefSet.Sort,'__[ 'assoc.Attr,'comm.Attr,'ctor.Attr,'format['__[''d.Sort,''ni.Sort, ''d.Sort]],'id[''none.StratDefSet.Constant]]],'op_:_->_`[_`].[''__.Sort, '__[''StratMappingSet.Sort,''StratMappingSet.Sort],''StratMappingSet.Sort, '__['assoc.Attr,'comm.Attr,'ctor.Attr,'format['__[''d.Sort,''ni.Sort, ''d.Sort]],'id[''none.StratMappingSet.Constant]]],'op_:_->_`[_`].[ ''__.Sort,'__[''SubsortDeclSet.Sort,''SubsortDeclSet.Sort], ''SubsortDeclSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'format['__[ ''d.Sort,''ni.Sort,''d.Sort]],'id[''none.SubsortDeclSet.Constant]]], 'op_:_->_`[_`].[''__.Sort,'__[''Trace.Sort,''Trace.Sort],''Trace.Sort,'__[ 'assoc.Attr,'ctor.Attr,'format['__[''d.Sort,''n.Sort,''d.Sort]],'id[ ''nil.Trace.Constant]]],'op_:_->_`[_`].[''__.Sort,'__[''TypeList.Sort, ''NeTypeList.Sort],''NeTypeList.Sort,'__['assoc.Attr,'ctor.Attr,'id[ ''nil.TypeList.Constant],'prec['s_^25['0.Zero]]]],'op_:_->_`[_`].[ ''__.Sort,'__[''TypeList.Sort,''TypeList.Sort],''TypeList.Sort,'__[ 'assoc.Attr,'ctor.Attr,'id[''nil.TypeList.Constant],'prec['s_^25[ '0.Zero]]]],'op_:_->_`[_`].[''__.Sort,'__[''VariantOptionSet.Sort, ''VariantOptionSet.Sort],''VariantOptionSet.Sort,'__['assoc.Attr, 'comm.Attr,'ctor.Attr,'id[''none.VariantOptionSet.Constant]]], 'op_:_->_`[_`].[''_`,_.Qid,'__[''EmptyCommaList.Sort, ''EmptyCommaList.Sort],''EmptyCommaList.Sort,'__['assoc.Attr,'ctor.Attr, 'gather['__[''e.Sort,''E.Sort]],'id[''empty.EmptyCommaList.Constant],'prec[ 's_^121['0.Zero]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[''GTermList.Sort, ''GTermList.Sort],''GTermList.Sort,'__['assoc.Attr,'ctor.Attr,'gather['__[ ''e.Sort,''E.Sort]],'id[''empty.EmptyCommaList.Constant],'prec['s_^121[ '0.Zero]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[''GroundTermList.Sort, ''GroundTermList.Sort],''GroundTermList.Sort,'__['assoc.Attr,'ctor.Attr, 'gather['__[''e.Sort,''E.Sort]],'id[''empty.EmptyCommaList.Constant],'prec[ 's_^121['0.Zero]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[''GroundTermList.Sort, ''NeGroundTermList.Sort],''NeGroundTermList.Sort,'__['assoc.Attr, 'ctor.Attr,'gather['__[''e.Sort,''E.Sort]],'id[ ''empty.EmptyCommaList.Constant],'prec['s_^121['0.Zero]]]],'op_:_->_`[_`].[ ''_`,_.Qid,'__[''NeCTermList.Sort,''TermList.Sort],''NeCTermList.Sort,'__[ 'assoc.Attr,'ctor.Attr,'gather['__[''e.Sort,''E.Sort]],'id[ ''empty.EmptyCommaList.Constant],'prec['s_^121['0.Zero]]]],'op_:_->_`[_`].[ ''_`,_.Qid,'__[''NeGroundTermList.Sort,''GroundTermList.Sort], ''NeGroundTermList.Sort,'__['assoc.Attr,'ctor.Attr,'gather['__[''e.Sort, ''E.Sort]],'id[''empty.EmptyCommaList.Constant],'prec['s_^121['0.Zero]]]], 'op_:_->_`[_`].[''_`,_.Qid,'__[''NeParameterDeclList.Sort, ''ParameterDeclList.Sort],''NeParameterDeclList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''nil.ParameterDeclList.Constant],'prec['s_^121['0.Zero]]]], 'op_:_->_`[_`].[''_`,_.Qid,'__[''NeParameterList.Sort, ''ParameterList.Sort],''NeParameterList.Sort,'__['assoc.Attr,'ctor.Attr, 'gather['__[''e.Sort,''E.Sort]],'id[''empty.EmptyCommaList.Constant],'prec[ 's_^121['0.Zero]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[''NeTermList.Sort, ''TermList.Sort],''NeTermList.Sort,'__['assoc.Attr,'ctor.Attr,'gather['__[ ''e.Sort,''E.Sort]],'id[''empty.EmptyCommaList.Constant],'prec['s_^121[ '0.Zero]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[''ParameterDeclList.Sort, ''NeParameterDeclList.Sort],''NeParameterDeclList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''nil.ParameterDeclList.Constant],'prec['s_^121['0.Zero]]]], 'op_:_->_`[_`].[''_`,_.Qid,'__[''ParameterDeclList.Sort, ''ParameterDeclList.Sort],''ParameterDeclList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''nil.ParameterDeclList.Constant],'prec['s_^121['0.Zero]]]], 'op_:_->_`[_`].[''_`,_.Qid,'__[''ParameterList.Sort, ''NeParameterList.Sort],''NeParameterList.Sort,'__['assoc.Attr,'ctor.Attr, 'gather['__[''e.Sort,''E.Sort]],'id[''empty.EmptyCommaList.Constant],'prec[ 's_^121['0.Zero]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[''ParameterList.Sort, ''ParameterList.Sort],''ParameterList.Sort,'__['assoc.Attr,'ctor.Attr, 'gather['__[''e.Sort,''E.Sort]],'id[''empty.EmptyCommaList.Constant],'prec[ 's_^121['0.Zero]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[''RenamingSet.Sort, ''RenamingSet.Sort],''RenamingSet.Sort,'__['assoc.Attr,'comm.Attr, 'ctor.Attr,'format['__[''d.Sort,''d.Sort,''ni.Sort,''d.Sort]],'prec['s_^43[ '0.Zero]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[''StrategyList.Sort, ''StrategyList.Sort],''StrategyList.Sort,'__['assoc.Attr,'ctor.Attr,'id[ ''empty.StrategyList.Constant]]],'op_:_->_`[_`].[''_`,_.Qid,'__[ ''TermList.Sort,''NeCTermList.Sort],''NeCTermList.Sort,'__['assoc.Attr, 'ctor.Attr,'gather['__[''e.Sort,''E.Sort]],'id[ ''empty.EmptyCommaList.Constant],'prec['s_^121['0.Zero]]]],'op_:_->_`[_`].[ ''_`,_.Qid,'__[''TermList.Sort,''NeTermList.Sort],''NeTermList.Sort,'__[ 'assoc.Attr,'ctor.Attr,'gather['__[''e.Sort,''E.Sort]],'id[ ''empty.EmptyCommaList.Constant],'prec['s_^121['0.Zero]]]],'op_:_->_`[_`].[ ''_`,_.Qid,'__[''TermList.Sort,''TermList.Sort],''TermList.Sort,'__[ 'assoc.Attr,'ctor.Attr,'gather['__[''e.Sort,''E.Sort]],'id[ ''empty.EmptyCommaList.Constant],'prec['s_^121['0.Zero]]]],'op_:_->_`[_`].[ ''_`,_.Qid,'__[''UsingPairSet.Sort,''UsingPairSet.Sort], ''UsingPairSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'prec['s_^61[ '0.Zero]]]],'op_:_->_`[_`].[''_`[_`].Qid,'__[''Qid.Sort, ''NeCTermList.Sort],''Context.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''_`[_`].Qid,'__[''Qid.Sort,''NeGroundTermList.Sort],''GroundTerm.Sort, 'ctor.Attr],'op_:_->_`[_`].[''_`[_`].Qid,'__[''Qid.Sort,''NeTermList.Sort], ''Term.Sort,'ctor.Attr],'op_:_->_`[_`].[''_`[_`]`{_`}.Qid,'__[''Qid.Sort, ''Substitution.Sort,''StrategyList.Sort],''RuleApplication.Sort,'__[ 'ctor.Attr,'prec['s_^21['0.Zero]]]],'op_:_->_`[_`].[''_`[`[_`]`].Qid,'__[ ''Qid.Sort,''TermList.Sort],''CallStrategy.Sort,'__['ctor.Attr,'prec[ 's_^21['0.Zero]]]],'op_:_->_`[_`].[''_`{_`}.Sort,'__[''Expression.Sort, ''NeParameterList.Sort],''Expression.Sort,'__['ctor.Attr,'prec['s_^37[ '0.Zero]]]],'op_:_->_`[_`].[''_`{_`}.Sort,'__[''ModuleExpression.Sort, ''NeParameterList.Sort],''ModuleExpression.Sort,'__['ctor.Attr,'prec[ 's_^37['0.Zero]]]],'op_:_->_`[_`].[''_`{_`}.Sort,'__[''Qid.Sort, ''ParameterDeclList.Sort],''Header.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''_`{_`}.Sort,'__[''ViewExpression.Sort,''NeParameterList.Sort], ''ViewExpression.Sort,'__['ctor.Attr,'prec['s_^37['0.Zero]]]], 'op_:_->_`[_`].[''_and-then_.Sort,'__[''Bool.Sort,''Bool.Sort],''Bool.Sort, '__['gather['__[''e.Sort,''E.Sort]],'prec['s_^55['0.Zero]],'strat['__['s_[ '0.Zero],'0.Zero]]]],'op_:_->_`[_`].[''_and_.Sort,'__[''Bool.Sort, ''Bool.Sort],''Bool.Sort,'__['assoc.Attr,'comm.Attr,'prec['s_^55[ '0.Zero]]]],'op_:_->_`[_`].[''_divides_.Sort,'__[''NzNat.Sort,''Nat.Sort], ''Bool.Sort,'__['prec['s_^51['0.Zero]],'special['__['id-hook[ ''NumberOpSymbol.Sort,''divides.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort],'term-hook[''trueTerm.Sort,''true.Bool.Constant], 'term-hook[''falseTerm.Sort,''false.Bool.Constant]]]]],'op_:_->_`[_`].[ ''_implies_.Sort,'__[''Bool.Sort,''Bool.Sort],''Bool.Sort,'__['gather['__[ ''e.Sort,''E.Sort]],'prec['s_^61['0.Zero]]]],'op_:_->_`[_`].[''_in_.Sort, '__[''Qid.Sort,''QidSet.Sort],''Bool.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''_or-else_.Sort,'__[''Bool.Sort,''Bool.Sort],''Bool.Sort,'__['gather['__[ ''e.Sort,''E.Sort]],'prec['s_^59['0.Zero]],'strat['__['s_['0.Zero], '0.Zero]]]],'op_:_->_`[_`].[''_or-else_.Sort,'__[''Strategy.Sort, ''Strategy.Sort],''Strategy.Sort,'__['assoc.Attr,'ctor.Attr,'gather['__[ ''e.Sort,''E.Sort]],'prec['s_^43['0.Zero]]]],'op_:_->_`[_`].[''_or_.Sort, '__[''Bool.Sort,''Bool.Sort],''Bool.Sort,'__['assoc.Attr,'comm.Attr,'prec[ 's_^59['0.Zero]]]],'op_:_->_`[_`].[''_psubset_.Sort,'__[''QidSet.Sort, ''QidSet.Sort],''Bool.Sort,'none.AttrSet],'op_:_->_`[_`].[''_quo_.Sort,'__[ ''Nat.Sort,''NzNat.Sort],''Nat.Sort,'__['gather['__[''E.Sort,''e.Sort]], 'prec['s_^31['0.Zero]],'special['__['id-hook[''NumberOpSymbol.Sort, ''quo.Sort],'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort, ''NzNat.Sort]]]]],'op_:_->_`[_`].[''_rem_.Sort,'__[''Nat.Sort, ''NzNat.Sort],''Nat.Sort,'__['gather['__[''E.Sort,''e.Sort]],'prec['s_^31[ '0.Zero]],'special['__['id-hook[''NumberOpSymbol.Sort,''rem.Sort],'op-hook[ ''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[ ''_subset_.Sort,'__[''QidSet.Sort,''QidSet.Sort],''Bool.Sort, 'none.AttrSet],'op_:_->_`[_`].[''_using_.Sort,'__[''Variable.Sort, ''Strategy.Sort],''UsingPair.Sort,'__['ctor.Attr,'prec['s_^21['0.Zero]]]], 'op_:_->_`[_`].[''_xor_.Sort,'__[''Bool.Sort,''Bool.Sort],''Bool.Sort,'__[ 'assoc.Attr,'comm.Attr,'prec['s_^57['0.Zero]]]],'op_:_->_`[_`].[ ''_xor_.Sort,'__[''Nat.Sort,''Nat.Sort],''Nat.Sort,'__['assoc.Attr, 'comm.Attr,'prec['s_^55['0.Zero]],'special['__['id-hook[ ''ACU_NumberOpSymbol.Sort,''xor.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[''_|_.Sort,'__[''Nat.Sort, ''Nat.Sort],''Nat.Sort,'__['assoc.Attr,'comm.Attr,'prec['s_^57['0.Zero]], 'special['__['id-hook[''ACU_NumberOpSymbol.Sort,''|.Sort],'op-hook[ ''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[ ''_|_.Sort,'__[''NzNat.Sort,''Nat.Sort],''NzNat.Sort,'__['assoc.Attr, 'comm.Attr,'prec['s_^57['0.Zero]],'special['__['id-hook[ ''ACU_NumberOpSymbol.Sort,''|.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[''_|_.Sort,'__[ ''Strategy.Sort,''Strategy.Sort],''Strategy.Sort,'__['assoc.Attr, 'comm.Attr,'ctor.Attr,'gather['__[''e.Sort,''E.Sort]],'id[ ''fail.Strategy.Constant],'prec['s_^41['0.Zero]]]],'op_:_->_`[_`].[ ''`[_`].Kind,''Qid.Sort,''Module.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''`[`].Kind,'nil.TypeList,''Context.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'__[''Context.Sort,''Qid.Sort, ''Substitution.Sort,''Qid.Sort,''Term.Sort,''Type.Sort, ''Substitution.Sort],''NarrowingStep.Sort,'__['ctor.Attr,'format['__[ ''ni.Sort,''n++i.Sort,''d.Sort,''ni.Sort,''d.Sort,''d.Sort,''d.Sort, ''ni.Sort,''d.Sort,''ni.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort, ''n--i.Sort,''d.Sort]]]],'op_:_->_`[_`].[''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'__[ ''Term.Sort,''Type.Sort,''Context.Sort,''Qid.Sort,''Substitution.Sort, ''Substitution.Sort,''Qid.Sort],''NarrowingApplyResult.Sort,'__['ctor.Attr, 'format['__[''d.Sort,''n++i.Sort,''d.Sort,''d.Sort,''d.Sort,''ni.Sort, ''d.Sort,''ni.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''ni.Sort, ''n--i.Sort,''d.Sort]]]],'op_:_->_`[_`].[''`{_`,_`,_`,_`,_`,_`}.Qid,'__[ ''Term.Sort,''Type.Sort,''Substitution.Sort,''NarrowingTrace.Sort, ''Substitution.Sort,''Qid.Sort],''NarrowingSearchPathResult.Sort,'__[ 'ctor.Attr,'format['__[''d.Sort,''n++i.Sort,''d.Sort,''d.Sort,''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''ni.Sort, ''n--i.Sort,''d.Sort]]]],'op_:_->_`[_`].[''`{_`,_`,_`,_`,_`,_`}.Qid,'__[ ''Term.Sort,''Type.Sort,''Substitution.Sort,''Qid.Sort,''Substitution.Sort, ''Qid.Sort],''NarrowingSearchResult.Sort,'__['ctor.Attr,'format['__[ ''d.Sort,''n++i.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort, ''ni.Sort,''d.Sort,''d.Sort,''d.Sort,''ni.Sort,''n--i.Sort,''d.Sort]]]], 'op_:_->_`[_`].[''`{_`,_`,_`,_`,_`}.Qid,'__[''Term.Sort, ''Substitution.Sort,''Nat.Sort,''Parent.Sort,''Bool.Sort],''Variant.Sort, 'ctor.Attr],'op_:_->_`[_`].[''`{_`,_`,_`,_`,_`}.Qid,'__[''Term.Sort, ''Substitution.Sort,''Qid.Sort,''Parent.Sort,''Bool.Sort],''Variant.Sort, 'ctor.Attr],'op_:_->_`[_`].[''`{_`,_`,_`,_`}.Qid,'__[''Term.Sort, ''Substitution.Sort,''Term.Sort,''Nat.Sort],''SmtResult.Sort,'ctor.Attr], 'op_:_->_`[_`].[''`{_`,_`,_`,_`}.Qid,'__[''Term.Sort,''Type.Sort, ''Substitution.Sort,''Context.Sort],''Result4Tuple.Sort,'ctor.Attr], 'op_:_->_`[_`].[''`{_`,_`,_`}.Qid,'__[''Substitution.Sort, ''Substitution.Sort,''Nat.Sort],''UnificationTriple.Sort,'ctor.Attr], 'op_:_->_`[_`].[''`{_`,_`,_`}.Qid,'__[''Substitution.Sort, ''Substitution.Sort,''Qid.Sort],''UnificationTriple.Sort,'ctor.Attr], 'op_:_->_`[_`].[''`{_`,_`,_`}.Qid,'__[''Term.Sort,''Type.Sort,''Rule.Sort], ''TraceStep.Sort,'ctor.Attr],'op_:_->_`[_`].[''`{_`,_`,_`}.Qid,'__[ ''Term.Sort,''Type.Sort,''Substitution.Sort],''ResultTriple.Sort, 'ctor.Attr],'op_:_->_`[_`].[''`{_`,_`}.Qid,'__[''Substitution.Sort, ''Context.Sort],''MatchPair.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''`{_`,_`}.Qid,'__[''Substitution.Sort,''Nat.Sort],''UnificationPair.Sort, 'ctor.Attr],'op_:_->_`[_`].[''`{_`,_`}.Qid,'__[''Substitution.Sort, ''Qid.Sort],''UnificationPair.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''`{_`,_`}.Qid,'__[''Term.Sort,''Type.Sort],''ResultPair.Sort,'ctor.Attr], 'op_:_->_`[_`].[''all.Sort,'nil.TypeList,''RuleApplication.Sort, 'ctor.Attr],'op_:_->_`[_`].[''amatch_s.t._.Constant,'__[''Term.Sort, ''EqCondition.Sort],''Strategy.Sort,'__['ctor.Attr,'prec['s_^21[ '0.Zero]]]],'op_:_->_`[_`].[''amatchrew_s.t._by_.Constant,'__[''Term.Sort, ''EqCondition.Sort,''UsingPairSet.Sort],''Strategy.Sort,'ctor.Attr], 'op_:_->_`[_`].[''ambiguity.Sort,'__[''ResultPair.Sort,''ResultPair.Sort], ''ResultPair?.Sort,'ctor.Attr],'op_:_->_`[_`].[''ambiguity.Sort,'__[ ''Strategy.Sort,''Strategy.Sort],''Strategy?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''anyType.Sort,'nil.TypeList,''Type?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''append.Sort,'__[''NatList.Sort,''NatList.Sort], ''NatList.Sort,'none.AttrSet],'op_:_->_`[_`].[''append.Sort,'__[ ''NatList.Sort,''NeNatList.Sort],''NeNatList.Sort,'none.AttrSet], 'op_:_->_`[_`].[''append.Sort,'__[''NeNatList.Sort,''NatList.Sort], ''NeNatList.Sort,'none.AttrSet],'op_:_->_`[_`].[''append.Sort,'__[ ''NeQidList.Sort,''QidList.Sort],''NeQidList.Sort,'none.AttrSet], 'op_:_->_`[_`].[''append.Sort,'__[''QidList.Sort,''NeQidList.Sort], ''NeQidList.Sort,'none.AttrSet],'op_:_->_`[_`].[''append.Sort,'__[ ''QidList.Sort,''QidList.Sort],''QidList.Sort,'none.AttrSet], 'op_:_->_`[_`].[''applySubstitution.Sort,'__[''Module.Sort,''Term.Sort, ''Substitution.Sort],''Term.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''ascii.Sort,''Char.Sort,''Nat.Sort,'special['__['id-hook[ ''StringOpSymbol.Sort,''ascii.Sort],'op-hook[''stringSymbol.Sort, ''.Sort,'nil.TypeList,''Char.Sort],'op-hook[''succSymbol.Sort, ''s_.Sort,''Nat.Sort,''NzNat.Sort]]]],'op_:_->_`[_`].[''assoc.Sort, 'nil.TypeList,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''breadthFirst.Sort, 'nil.TypeList,''SrewriteOption.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''ceq_=_if_`[_`]..Qid,'__[''Term.Sort,''Term.Sort,''EqCondition.Sort, ''AttrSet.Sort],''Equation.Sort,'__['ctor.Attr,'format['__[''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort,''d.Sort, ''s.Sort,''d.Sort]]]],'op_:_->_`[_`].[''char.Sort, ''`[FindResult`,NatList`,Bound`,Parent`].Kind,''`[String`].Kind,'special[ '__['id-hook[''StringOpSymbol.Sort,''char.Sort],'op-hook[ ''stringSymbol.Sort,''.Sort,'nil.TypeList,''Char.Sort],'op-hook[ ''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]],'op_:_->_`[_`].[ ''cmb_:_if_`[_`]..Qid,'__[''Term.Sort,''Sort.Sort,''EqCondition.Sort, ''AttrSet.Sort],''MembAx.Sort,'__['ctor.Attr,'format['__[''d.Sort,''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort,''d.Sort,''s.Sort, ''d.Sort]]]],'op_:_->_`[_`].[''comm.Sort,'nil.TypeList,''Attr.Sort, 'ctor.Attr],'op_:_->_`[_`].[''completeName.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaCompleteName.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''config.Sort,'nil.TypeList,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''crl_=>_if_`[_`]..Qid,'__[''Term.Sort,''Term.Sort,''Condition.Sort, ''AttrSet.Sort],''Rule.Sort,'__['ctor.Attr,'format['__[''d.Sort,''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort,''d.Sort,''s.Sort, ''d.Sort]]]],'op_:_->_`[_`].[''csd_:=_if_`[_`]..Qid,'__[ ''CallStrategy.Sort,''Strategy.Sort,''EqCondition.Sort,''AttrSet.Sort], ''StratDefinition.Sort,'__['ctor.Attr,'format['__[''d.Sort,''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort,''d.Sort,''s.Sort, ''d.Sort]]]],'op_:_->_`[_`].[''ctor.Sort,'nil.TypeList,''Attr.Sort, 'ctor.Attr],'op_:_->_`[_`].[''delay.Sort,'nil.TypeList, ''VariantOption.Sort,'ctor.Attr],'op_:_->_`[_`].[''delete.Sort,'__[ ''Qid.Sort,''QidSet.Sort],''QidSet.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''depthFirst.Sort,'nil.TypeList,''SrewriteOption.Sort,'ctor.Attr], 'op_:_->_`[_`].[''downTerm.Sort,'__[''Term.Sort,''Universal.Sort], ''Universal.Sort,'__['poly['__['s_^2['0.Zero],'0.Zero]],'special['__[ 'id-hook[''MetaLevelOpSymbol.Sort,''metaDownTerm.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]]],'op_:_->_`[_`].[ ''empty.Sort,'nil.TypeList,''EmptyCommaList.Sort,'ctor.Attr], 'op_:_->_`[_`].[''empty.Sort,'nil.TypeList,''GroundTermList.Sort, 'ctor.Attr],'op_:_->_`[_`].[''empty.Sort,'nil.TypeList,''StrategyList.Sort, 'ctor.Attr],'op_:_->_`[_`].[''eq_=_`[_`]..Qid,'__[''Term.Sort,''Term.Sort, ''AttrSet.Sort],''Equation.Sort,'__['ctor.Attr,'format['__[''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort,''d.Sort,''s.Sort, ''d.Sort]]]],'op_:_->_`[_`].[''extending_..Qid,''ModuleExpression.Sort, ''Import.Sort,'ctor.Attr],'op_:_->_`[_`].[''fail.Sort,'nil.TypeList, ''Strategy.Sort,'ctor.Attr],'op_:_->_`[_`].[''failure.Sort,'nil.TypeList, ''NarrowingApplyResult?.Sort,'ctor.Attr],'op_:_->_`[_`].[''failure.Sort, 'nil.TypeList,''NarrowingSearchPathResult?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''failure.Sort,'nil.TypeList,''NarrowingSearchResult?.Sort, 'ctor.Attr],'op_:_->_`[_`].[''failure.Sort,'nil.TypeList, ''Result4Tuple?.Sort,'ctor.Attr],'op_:_->_`[_`].[''failure.Sort, 'nil.TypeList,''ResultPair?.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''failure.Sort,'nil.TypeList,''ResultTriple?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''failure.Sort,'nil.TypeList,''SmtResult?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''failure.Sort,'nil.TypeList,''Trace?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''failureIncomplete.Sort,'nil.TypeList, ''NarrowingApplyResult?.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''failureIncomplete.Sort,'nil.TypeList,''NarrowingSearchPathResult?.Sort, 'ctor.Attr],'op_:_->_`[_`].[''failureIncomplete.Sort,'nil.TypeList, ''NarrowingSearchResult?.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''failureIncomplete.Sort,'nil.TypeList,''ResultTriple?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''false.Sort,'nil.TypeList,''Bool.Sort,'__['ctor.Attr, 'special['id-hook[''SystemFalse.Sort,'nil.TypeList]]]],'op_:_->_`[_`].[ ''filter.Sort,'nil.TypeList,''VariantOption.Sort,'ctor.Attr], 'op_:_->_`[_`].[''find.Sort,'__[''String.Sort,''String.Sort,''Nat.Sort], ''FindResult.Sort,'special['__['id-hook[''StringOpSymbol.Sort,''find.Sort], 'op-hook[''stringSymbol.Sort,''.Sort,'nil.TypeList,''Char.Sort], 'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort],'term-hook[ ''notFoundTerm.Sort,''notFound.FindResult.Constant]]]],'op_:_->_`[_`].[ ''flat.Sort,'nil.TypeList,''PrintOption.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''fmod_is_sorts_.____endfm.Constant,'__[''Header.Sort,''ImportList.Sort, ''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort,''MembAxSet.Sort, ''EquationSet.Sort],''FModule.Sort,'__['ctor.Attr,'format['__[''d.Sort, ''d.Sort,''s.Sort,''n++i.Sort,''ni.Sort,''d.Sort,''d.Sort,''ni.Sort, ''ni.Sort,''ni.Sort,''ni.Sort,''n--i.Sort,''d.Sort]],'gather['__[''&.Sort, ''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort]]]],'op_:_->_`[_`].[ ''format.Sort,''QidList.Sort,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''format.Sort,'nil.TypeList,''PrintOption.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''front.Sort,''NeNatList.Sort,''NatList.Sort,'none.AttrSet], 'op_:_->_`[_`].[''front.Sort,''NeQidList.Sort,''QidList.Sort, 'none.AttrSet],'op_:_->_`[_`].[''frozen.Sort,''NeNatList.Sort,''Attr.Sort, 'ctor.Attr],'op_:_->_`[_`].[''fth_is_sorts_.____endfth.Constant,'__[ ''Qid.Sort,''ImportList.Sort,''SortSet.Sort,''SubsortDeclSet.Sort, ''OpDeclSet.Sort,''MembAxSet.Sort,''EquationSet.Sort],''FTheory.Sort,'__[ 'ctor.Attr,'format['__[''d.Sort,''d.Sort,''d.Sort,''n++i.Sort,''ni.Sort, ''d.Sort,''d.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''n--i.Sort, ''d.Sort]],'gather['__[''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort, ''&.Sort,''&.Sort]]]],'op_:_->_`[_`].[''gather.Sort,''QidList.Sort, ''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''gcd.Sort,'__[''Nat.Sort, ''Nat.Sort],''Nat.Sort,'__['assoc.Attr,'comm.Attr,'special['__['id-hook[ ''ACU_NumberOpSymbol.Sort,''gcd.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[''gcd.Sort,'__[''NzNat.Sort, ''Nat.Sort],''NzNat.Sort,'__['assoc.Attr,'comm.Attr,'special['__['id-hook[ ''ACU_NumberOpSymbol.Sort,''gcd.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[ ''getAccumulatedSubstitution.Sort,''NarrowingSearchResult.Sort, ''Substitution.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getAccumulatedSubstitution.Sort,''NarrowingStep.Sort,''Substitution.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getContext.Sort,''MatchPair.Sort, ''Context.Sort,'none.AttrSet],'op_:_->_`[_`].[''getContext.Sort, ''NarrowingApplyResult.Sort,''Context.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getContext.Sort,''NarrowingStep.Sort,''Context.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getContext.Sort,''Result4Tuple.Sort,''Context.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getEqs.Sort,''Module.Sort, ''EquationSet.Sort,'none.AttrSet],'op_:_->_`[_`].[''getFrom.Sort, ''View.Sort,''ModuleExpression.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getImports.Sort,''Module.Sort,''ImportList.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getInitialSubstitution.Sort, ''NarrowingSearchPathResult.Sort,''Substitution.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getInitialTerm.Sort,''NarrowingSearchPathResult.Sort, ''Term.Sort,'none.AttrSet],'op_:_->_`[_`].[''getInitialType.Sort, ''NarrowingSearchPathResult.Sort,''Type.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getKind.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaGetKind.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''getKinds.Sort,''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaGetKinds.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''getLabel.Sort,''NarrowingApplyResult.Sort,''Qid.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getLabel.Sort,''NarrowingStep.Sort,''Qid.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getLhsSubstitution.Sort, ''UnificationTriple.Sort,''Substitution.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getMbs.Sort,''Module.Sort,''MembAxSet.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getMoreVariantsInLayerFlag.Sort, ''Variant.Sort,''Bool.Sort,'none.AttrSet],'op_:_->_`[_`].[''getName.Sort, ''Constant.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[''getName.Sort, ''Module.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[''getName.Sort, ''Variable.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[''getName.Sort, ''View.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[''getOpMappings.Sort, ''View.Sort,''OpMappingSet.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getOps.Sort,''Module.Sort,''OpDeclSet.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getParent.Sort,''Variant.Sort,''Parent.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getRhsSubstitution.Sort, ''UnificationTriple.Sort,''Substitution.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getRls.Sort,''Module.Sort,''RuleSet.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getRule.Sort,''TraceStep.Sort,''Rule.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getRuleSubstitution.Sort,''NarrowingApplyResult.Sort, ''Substitution.Sort,'none.AttrSet],'op_:_->_`[_`].[''getSds.Sort, ''Module.Sort,''StratDefSet.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getSortMappings.Sort,''View.Sort,''SortMappingSet.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getSorts.Sort,''Module.Sort,''SortSet.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getStateVariableFamily.Sort, ''NarrowingSearchResult.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getStratMappings.Sort,''View.Sort,''StratMappingSet.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getStrats.Sort,''Module.Sort,''StratDeclSet.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getSubsorts.Sort,''Module.Sort, ''SubsortDeclSet.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getSubstitution.Sort,''MatchPair.Sort,''Substitution.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getSubstitution.Sort,''Result4Tuple.Sort, ''Substitution.Sort,'none.AttrSet],'op_:_->_`[_`].[''getSubstitution.Sort, ''ResultTriple.Sort,''Substitution.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getSubstitution.Sort,''UnificationPair.Sort,''Substitution.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getSubstitution.Sort,''Variant.Sort, ''Substitution.Sort,'none.AttrSet],'op_:_->_`[_`].[''getTerm.Sort, ''NarrowingApplyResult.Sort,''Term.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getTerm.Sort,''NarrowingSearchResult.Sort,''Term.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getTerm.Sort,''NarrowingStep.Sort,''Term.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getTerm.Sort,''Result4Tuple.Sort, ''Term.Sort,'none.AttrSet],'op_:_->_`[_`].[''getTerm.Sort, ''ResultPair.Sort,''Term.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getTerm.Sort,''ResultTriple.Sort,''Term.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getTerm.Sort,''TraceStep.Sort,''Term.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getTerm.Sort,''Variant.Sort,''Term.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getTermSubstitution.Sort,''NarrowingApplyResult.Sort, ''Substitution.Sort,'none.AttrSet],'op_:_->_`[_`].[''getTo.Sort, ''View.Sort,''ModuleExpression.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getTrace.Sort,''NarrowingSearchPathResult.Sort,''NarrowingTrace.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getType.Sort,''Constant.Sort,''Type.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getType.Sort,''NarrowingApplyResult.Sort, ''Type.Sort,'none.AttrSet],'op_:_->_`[_`].[''getType.Sort, ''NarrowingSearchResult.Sort,''Type.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getType.Sort,''NarrowingStep.Sort,''Type.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getType.Sort,''Result4Tuple.Sort,''Type.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getType.Sort,''ResultPair.Sort, ''Type.Sort,'none.AttrSet],'op_:_->_`[_`].[''getType.Sort, ''ResultTriple.Sort,''Type.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getType.Sort,''TraceStep.Sort,''Type.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getType.Sort,''Variable.Sort,''Type.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getUnifier.Sort,''NarrowingSearchPathResult.Sort,''Substitution.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getUnifier.Sort, ''NarrowingSearchResult.Sort,''Substitution.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getUnifier.Sort,''NarrowingStep.Sort,''Substitution.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getUnifierVariableFamily.Sort, ''NarrowingSearchPathResult.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getUnifierVariableFamily.Sort,''NarrowingSearchResult.Sort,''Qid.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getUnifierVariableFamily.Sort, ''NarrowingStep.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getVariableFamily.Sort,''NarrowingApplyResult.Sort,''Qid.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getVariableFamily.Sort, ''UnificationPair.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getVariableFamily.Sort,''UnificationTriple.Sort,''Qid.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getVariableFamily.Sort,''Variant.Sort, ''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[''glbSorts.Sort,'__[ ''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaGlbSorts.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''head.Sort,''NeNatList.Sort,''Nat.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''head.Sort,''NeQidList.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''id.Sort,''Term.Sort,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''id-hook.Sort,'__[''Qid.Sort,''QidList.Sort],''Hook.Sort,'__['ctor.Attr, 'format['__[''nssss.Sort,''d.Sort]]]],'op_:_->_`[_`].[''idem.Sort, 'nil.TypeList,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''idle.Sort, 'nil.TypeList,''Strategy.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''if_then_else_fi.Sort,'__[''Bool.Sort,''Universal.Sort,''Universal.Sort], ''Universal.Sort,'__['poly['__['s_^2['0.Zero],'s_^3['0.Zero],'0.Zero]], 'special['__['id-hook[''BranchSymbol.Sort,'nil.TypeList],'term-hook[ ''1.Sort,''true.Bool.Constant],'term-hook[''2.Sort, ''false.Bool.Constant]]]]],'op_:_->_`[_`].[''including_..Qid, ''ModuleExpression.Sort,''Import.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''insert.Sort,'__[''Qid.Sort,''QidSet.Sort],''QidSet.Sort,'none.AttrSet], 'op_:_->_`[_`].[''intersection.Sort,'__[''QidSet.Sort,''QidSet.Sort], ''QidSet.Sort,'none.AttrSet],'op_:_->_`[_`].[''iter.Sort,'nil.TypeList, ''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''label.Sort,''Qid.Sort, ''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''label_to_.Sort,'__[''Qid.Sort, ''Qid.Sort],''Renaming.Sort,'ctor.Attr],'op_:_->_`[_`].[''last.Sort, ''NeNatList.Sort,''Nat.Sort,'none.AttrSet],'op_:_->_`[_`].[''last.Sort, ''NeQidList.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[''lcm.Sort,'__[ ''Nat.Sort,''Nat.Sort],''Nat.Sort,'__['assoc.Attr,'comm.Attr,'special['__[ 'id-hook[''ACU_NumberOpSymbol.Sort,''lcm.Sort],'op-hook[''succSymbol.Sort, ''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[''lcm.Sort,'__[ ''NzNat.Sort,''NzNat.Sort],''NzNat.Sort,'__['assoc.Attr,'comm.Attr, 'special['__['id-hook[''ACU_NumberOpSymbol.Sort,''lcm.Sort],'op-hook[ ''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[ ''leastSort.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaLeastSort.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''left-id.Sort,''Term.Sort,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''length.Sort,''String.Sort,''Nat.Sort,'special['__['id-hook[ ''StringOpSymbol.Sort,''length.Sort],'op-hook[''stringSymbol.Sort, ''.Sort,'nil.TypeList,''Char.Sort],'op-hook[''succSymbol.Sort, ''s_.Sort,''Nat.Sort,''NzNat.Sort]]]],'op_:_->_`[_`].[''lesserSorts.Sort, '__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__[ 'id-hook[''MetaLevelOpSymbol.Sort,''metaLesserSorts.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''lowerCase.Sort,''String.Sort,''String.Sort,'special['__['id-hook[ ''StringOpSymbol.Sort,''lowerCase.Sort],'op-hook[''stringSymbol.Sort, ''.Sort,'nil.TypeList,''Char.Sort]]]],'op_:_->_`[_`].[ ''match_s.t._.Constant,'__[''Term.Sort,''EqCondition.Sort],''Strategy.Sort, '__['ctor.Attr,'prec['s_^21['0.Zero]]]],'op_:_->_`[_`].[ ''matchrew_s.t._by_.Constant,'__[''Term.Sort,''EqCondition.Sort, ''UsingPairSet.Sort],''Strategy.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''max.Sort,'__[''Nat.Sort,''Nat.Sort],''Nat.Sort,'__['assoc.Attr, 'comm.Attr,'special['__['id-hook[''ACU_NumberOpSymbol.Sort,''max.Sort], 'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]], 'op_:_->_`[_`].[''max.Sort,'__[''NzNat.Sort,''Nat.Sort],''NzNat.Sort,'__[ 'assoc.Attr,'comm.Attr,'special['__['id-hook[''ACU_NumberOpSymbol.Sort, ''max.Sort],'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort, ''NzNat.Sort]]]]],'op_:_->_`[_`].[''maximalAritySet.Sort,'__[ ''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaMaximalAritySet.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort, '__[''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''maximalSorts.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaMaximalSorts.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''mb_:_`[_`]..Qid,'__[''Term.Sort,''Sort.Sort, ''AttrSet.Sort],''MembAx.Sort,'__['ctor.Attr,'format['__[''d.Sort,''d.Sort, ''d.Sort,''d.Sort,''s.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort]]]], 'op_:_->_`[_`].[''memo.Sort,'nil.TypeList,''Attr.Sort,'ctor.Attr], 'op_:_->_`[_`].[''metaApply.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Substitution?`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[ResultTriple?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaApply.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaCheck.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[Bool`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaCheck.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaDisjointUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationTriple?`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''legacyMetaDisjointUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaDisjointUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationTriple?`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaDisjointUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaFrewrite.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[ResultPair?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaFrewrite.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaGetIrredundantVariant.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[Variant?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''legacyMetaGetIrredundantVariant.Sort],'op-hook[''shareWith.Sort, ''metaReduce.Sort,'__[''Module.Sort,''ModuleExpression.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaGetIrredundantVariant.Sort, '__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[Variant?`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''metaGetIrredundantVariant.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaGetVariant.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[Variant?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''legacyMetaGetVariant.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort, '__[''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''metaGetVariant.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[Variant?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaGetVariant.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaIrredundantDisjointUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationTriple?`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaIrredundantDisjointUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaIrredundantUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''metaIrredundantUnify.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaMatch.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Condition`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[Substitution?`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaMatch.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''metaNarrow.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[Bool`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[ResultPair?`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaNarrow2.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''metaNarrow.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[ResultTriple?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaNarrow.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaNarrowingApply.Sort,'__[''Module.Sort,''Term.Sort,''TermList.Sort, ''Qid.Sort,''Nat.Sort],''NarrowingApplyResult?.Sort,'none.AttrSet], 'op_:_->_`[_`].[''metaNarrowingApply.Sort,'__[''Module.Sort,''Term.Sort, ''TermList.Sort,''Qid.Sort,''VariantOptionSet.Sort,''Nat.Sort], ''NarrowingApplyResult?.Sort,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaNarrowingApply.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaNarrowingSearch.Sort,'__[''Module.Sort,''Term.Sort,''Term.Sort, ''Qid.Sort,''Bound.Sort,''Qid.Sort,''Nat.Sort], ''NarrowingSearchResult?.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''metaNarrowingSearch.Sort,'__[''Module.Sort,''Term.Sort,''Term.Sort, ''Qid.Sort,''Bound.Sort,''Qid.Sort,''VariantOptionSet.Sort,''Nat.Sort], ''NarrowingSearchResult?.Sort,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaNarrowingSearch.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaNarrowingSearchPath.Sort,'__[''Module.Sort,''Term.Sort,''Term.Sort, ''Qid.Sort,''Bound.Sort,''Qid.Sort,''Nat.Sort], ''NarrowingSearchPathResult?.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''metaNarrowingSearchPath.Sort,'__[''Module.Sort,''Term.Sort,''Term.Sort, ''Qid.Sort,''Bound.Sort,''Qid.Sort,''VariantOptionSet.Sort,''Nat.Sort], ''NarrowingSearchPathResult?.Sort,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaNarrowingSearchPath.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaNormalize.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind], ''`[ResultPair?`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaNormalize.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''metaParse.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ResultPair?`].Kind,'none.AttrSet],'op_:_->_`[_`].[ ''metaParse.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ResultPair?`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaParse.Sort],'op-hook[''shareWith.Sort, ''metaReduce.Sort,'__[''Module.Sort,''ModuleExpression.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaParseStrategy.Sort,'__[ ''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind], ''`[StrategyList`,Strategy?`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaParseStrategy.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaPrettyPrint.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'none.AttrSet],'op_:_->_`[_`].[''metaPrettyPrint.Sort,'__[ ''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[PrintOptionSet`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'none.AttrSet],'op_:_->_`[_`].[''metaPrettyPrint.Sort,'__[ ''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[PrintOptionSet`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaPrettyPrint.Sort],'op-hook[''shareWith.Sort, ''metaReduce.Sort,'__[''Module.Sort,''ModuleExpression.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaPrettyPrintStrategy.Sort,'__[ ''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[StrategyList`,Strategy?`].Kind, ''`[PrintOptionSet`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaPrettyPrintStrategy.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaReduce.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind], ''`[ResultPair?`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaReduce.Sort],'op-hook[''qidSymbol.Sort,''.Sort,'nil.TypeList, ''Qid.Sort],'op-hook[''metaTermSymbol.Sort,''_`[_`].Qid,'__[''Qid.Sort, ''NeGroundTermList.Sort],''GroundTerm.Sort],'op-hook[''metaArgSymbol.Sort, ''_`,_.Qid,'__[''NeGroundTermList.Sort,''GroundTermList.Sort], ''NeGroundTermList.Sort],'op-hook[''emptyTermListSymbol.Sort,''empty.Sort, 'nil.TypeList,''GroundTermList.Sort],'op-hook[''assignmentSymbol.Sort, ''_<-_.Sort,'__[''Variable.Sort,''Term.Sort],''Assignment.Sort],'op-hook[ ''emptySubstitutionSymbol.Sort,''none.Sort,'nil.TypeList, ''Substitution.Sort],'op-hook[''substitutionSymbol.Sort,''_;_.Sort,'__[ ''Substitution.Sort,''Substitution.Sort],''Substitution.Sort],'op-hook[ ''holeSymbol.Sort,''`[`].Kind,'nil.TypeList,''Context.Sort],'op-hook[ ''noConditionSymbol.Sort,''nil.Sort,'nil.TypeList,''EqCondition.Sort], 'op-hook[''equalityConditionSymbol.Sort,''_=_.Sort,'__[''Term.Sort, ''Term.Sort],''EqCondition.Sort],'op-hook[''sortTestConditionSymbol.Sort, ''_:_.Variable,'__[''Term.Sort,''Sort.Sort],''EqCondition.Sort],'op-hook[ ''matchConditionSymbol.Sort,''_:=_.Variable,'__[''Term.Sort,''Term.Sort], ''EqCondition.Sort],'op-hook[''rewriteConditionSymbol.Sort,''_=>_.Sort,'__[ ''Term.Sort,''Term.Sort],''Condition.Sort],'op-hook[ ''conjunctionSymbol.Sort,''_/\_.Sort,'__[''EqCondition.Sort, ''EqCondition.Sort],''EqCondition.Sort],'op-hook[''failStratSymbol.Sort, ''fail.Sort,'nil.TypeList,''Strategy.Sort],'op-hook[''idleStratSymbol.Sort, ''idle.Sort,'nil.TypeList,''Strategy.Sort],'op-hook[''allStratSymbol.Sort, ''all.Sort,'nil.TypeList,''RuleApplication.Sort],'op-hook[ ''applicationStratSymbol.Sort,''_`[_`]`{_`}.Qid,'__[''Qid.Sort, ''Substitution.Sort,''StrategyList.Sort],''RuleApplication.Sort],'op-hook[ ''topStratSymbol.Sort,''top.Sort,''RuleApplication.Sort,''Strategy.Sort], 'op-hook[''matchStratSymbol.Sort,''match_s.t._.Constant,'__[''Term.Sort, ''EqCondition.Sort],''Strategy.Sort],'op-hook[''xmatchStratSymbol.Sort, ''xmatch_s.t._.Constant,'__[''Term.Sort,''EqCondition.Sort], ''Strategy.Sort],'op-hook[''amatchStratSymbol.Sort,''amatch_s.t._.Constant, '__[''Term.Sort,''EqCondition.Sort],''Strategy.Sort],'op-hook[ ''unionStratSymbol.Sort,''_|_.Sort,'__[''Strategy.Sort,''Strategy.Sort], ''Strategy.Sort],'op-hook[''concatStratSymbol.Sort,''_;_.Sort,'__[ ''Strategy.Sort,''Strategy.Sort],''Strategy.Sort],'op-hook[ ''orelseStratSymbol.Sort,''_or-else_.Sort,'__[''Strategy.Sort, ''Strategy.Sort],''Strategy.Sort],'op-hook[''plusStratSymbol.Sort, ''_+.Sort,''Strategy.Sort,''Strategy.Sort],'op-hook[ ''conditionalStratSymbol.Sort,''_?_:_.Variable,'__[''Strategy.Sort, ''Strategy.Sort,''Strategy.Sort],''Strategy.Sort],'op-hook[ ''matchrewStratSymbol.Sort,''matchrew_s.t._by_.Constant,'__[''Term.Sort, ''EqCondition.Sort,''UsingPairSet.Sort],''Strategy.Sort],'op-hook[ ''xmatchrewStratSymbol.Sort,''xmatchrew_s.t._by_.Constant,'__[''Term.Sort, ''EqCondition.Sort,''UsingPairSet.Sort],''Strategy.Sort],'op-hook[ ''amatchrewStratSymbol.Sort,''amatchrew_s.t._by_.Constant,'__[''Term.Sort, ''EqCondition.Sort,''UsingPairSet.Sort],''Strategy.Sort],'op-hook[ ''callStratSymbol.Sort,''_`[`[_`]`].Qid,'__[''Qid.Sort,''TermList.Sort], ''CallStrategy.Sort],'op-hook[''oneStratSymbol.Sort,''one.Sort, ''Strategy.Sort,''Strategy.Sort],'op-hook[''starStratSymbol.Sort,''_*.Sort, ''Strategy.Sort,''Strategy.Sort],'op-hook[''normalizationStratSymbol.Sort, ''_!.Sort,''Strategy.Sort,''Strategy.Sort],'op-hook[''notStratSymbol.Sort, ''not.Sort,''Strategy.Sort,''Strategy.Sort],'op-hook[ ''testStratSymbol.Sort,''test.Sort,''Strategy.Sort,''Strategy.Sort], 'op-hook[''tryStratSymbol.Sort,''try.Sort,''Strategy.Sort,''Strategy.Sort], 'op-hook[''usingStratSymbol.Sort,''_using_.Sort,'__[''Variable.Sort, ''Strategy.Sort],''UsingPair.Sort],'op-hook[''usingListStratSymbol.Sort, ''_`,_.Qid,'__[''UsingPairSet.Sort,''UsingPairSet.Sort], ''UsingPairSet.Sort],'op-hook[''emptyStratListSymbol.Sort,''empty.Sort, 'nil.TypeList,''StrategyList.Sort],'op-hook[''stratListSymbol.Sort, ''_`,_.Qid,'__[''StrategyList.Sort,''StrategyList.Sort], ''StrategyList.Sort],'op-hook[''headerSymbol.Sort,''_`{_`}.Sort,'__[ ''Qid.Sort,''ParameterDeclList.Sort],''Header.Sort],'op-hook[ ''parameterDeclSymbol.Sort,''_::_.Variable,'__[''Sort.Sort, ''ModuleExpression.Sort],''ParameterDecl.Sort],'op-hook[ ''parameterDeclListSymbol.Sort,''_`,_.Qid,'__[''ParameterDeclList.Sort, ''ParameterDeclList.Sort],''ParameterDeclList.Sort],'op-hook[ ''protectingSymbol.Sort,''protecting_..Qid,''ModuleExpression.Sort, ''Import.Sort],'op-hook[''extendingSymbol.Sort,''extending_..Qid, ''ModuleExpression.Sort,''Import.Sort],'op-hook[''includingSymbol.Sort, ''including_..Qid,''ModuleExpression.Sort,''Import.Sort],'op-hook[ ''nilImportListSymbol.Sort,''nil.Sort,'nil.TypeList,''ImportList.Sort], 'op-hook[''importListSymbol.Sort,''__.Sort,'__[''ImportList.Sort, ''ImportList.Sort],''ImportList.Sort],'op-hook[''emptySortSetSymbol.Sort, ''none.Sort,'nil.TypeList,''QidSet.Sort],'op-hook[''sortSetSymbol.Sort, ''_;_.Sort,'__[''QidSet.Sort,''QidSet.Sort],''QidSet.Sort],'op-hook[ ''subsortSymbol.Sort,''subsort_<_..Qid,'__[''Sort.Sort,''Sort.Sort], ''SubsortDecl.Sort],'op-hook[''emptySubsortDeclSetSymbol.Sort,''none.Sort, 'nil.TypeList,''SubsortDeclSet.Sort],'op-hook[''subsortDeclSetSymbol.Sort, ''__.Sort,'__[''SubsortDeclSet.Sort,''SubsortDeclSet.Sort], ''SubsortDeclSet.Sort],'op-hook[''nilQidListSymbol.Sort,''nil.Sort, 'nil.TypeList,''QidList.Sort],'op-hook[''qidListSymbol.Sort,''__.Sort,'__[ ''QidList.Sort,''QidList.Sort],''QidList.Sort],'op-hook[ ''emptyQidSetSymbol.Sort,''none.Sort,'nil.TypeList,''QidSet.Sort],'op-hook[ ''qidSetSymbol.Sort,''_;_.Sort,'__[''QidSet.Sort,''QidSet.Sort], ''QidSet.Sort],'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort, ''NzNat.Sort],'op-hook[''natListSymbol.Sort,''__.Sort,'__[''NatList.Sort, ''NatList.Sort],''NatList.Sort],'op-hook[''unboundedSymbol.Sort, ''unbounded.Sort,'nil.TypeList,''Bound.Sort],'op-hook[ ''noParentSymbol.Sort,''none.Sort,'nil.TypeList,''Parent.Sort],'op-hook[ ''stringSymbol.Sort,''.Sort,'nil.TypeList,''Char.Sort],'op-hook[ ''sortRenamingSymbol.Sort,''sort_to_.Sort,'__[''Qid.Sort,''Qid.Sort], ''Renaming.Sort],'op-hook[''opRenamingSymbol.Sort,''op_to_`[_`].Qid,'__[ ''Qid.Sort,''Qid.Sort,''AttrSet.Sort],''Renaming.Sort],'op-hook[ ''opRenamingSymbol2.Sort,''op_:_->_to_`[_`].Qid,'__[''Qid.Sort, ''TypeList.Sort,''Type.Sort,''Qid.Sort,''AttrSet.Sort],''Renaming.Sort], 'op-hook[''labelRenamingSymbol.Sort,''label_to_.Sort,'__[''Qid.Sort, ''Qid.Sort],''Renaming.Sort],'op-hook[''stratRenamingSymbol.Sort, ''strat_to_.Sort,'__[''Qid.Sort,''Qid.Sort],''Renaming.Sort],'op-hook[ ''stratRenamingSymbol2.Sort,''strat_:_@_to_.Variable,'__[''Qid.Sort, ''TypeList.Sort,''Type.Sort,''Qid.Sort],''Renaming.Sort],'op-hook[ ''renamingSetSymbol.Sort,''_`,_.Qid,'__[''RenamingSet.Sort, ''RenamingSet.Sort],''RenamingSet.Sort],'op-hook[''sumSymbol.Sort, ''_+_.Sort,'__[''ModuleExpression.Sort,''ModuleExpression.Sort], ''ModuleExpression.Sort],'op-hook[''renamingSymbol.Sort,''_*`(_`).Sort,'__[ ''ModuleExpression.Sort,''RenamingSet.Sort],''ModuleExpression.Sort], 'op-hook[''instantiationSymbol.Sort,''_`{_`}.Sort,'__[''Expression.Sort, ''NeParameterList.Sort],''Expression.Sort],'op-hook[''termHookSymbol.Sort, ''term-hook.Sort,'__[''Qid.Sort,''Term.Sort],''Hook.Sort],'op-hook[ ''hookListSymbol.Sort,''__.Sort,'__[''HookList.Sort,''HookList.Sort], ''HookList.Sort],'op-hook[''idHookSymbol.Sort,''id-hook.Sort,'__[ ''Qid.Sort,''QidList.Sort],''Hook.Sort],'op-hook[''opHookSymbol.Sort, ''op-hook.Sort,'__[''Qid.Sort,''Qid.Sort,''QidList.Sort,''Qid.Sort], ''Hook.Sort],'op-hook[''assocSymbol.Sort,''assoc.Sort,'nil.TypeList, ''Attr.Sort],'op-hook[''commSymbol.Sort,''comm.Sort,'nil.TypeList, ''Attr.Sort],'op-hook[''idemSymbol.Sort,''idem.Sort,'nil.TypeList, ''Attr.Sort],'op-hook[''iterSymbol.Sort,''iter.Sort,'nil.TypeList, ''Attr.Sort],'op-hook[''idSymbol.Sort,''id.Sort,''Term.Sort,''Attr.Sort], 'op-hook[''leftIdSymbol.Sort,''left-id.Sort,''Term.Sort,''Attr.Sort], 'op-hook[''rightIdSymbol.Sort,''right-id.Sort,''Term.Sort,''Attr.Sort], 'op-hook[''stratSymbol.Sort,''strat.Sort,''NeNatList.Sort,''Attr.Sort], 'op-hook[''memoSymbol.Sort,''memo.Sort,'nil.TypeList,''Attr.Sort],'op-hook[ ''precSymbol.Sort,''prec.Sort,''Nat.Sort,''Attr.Sort],'op-hook[ ''gatherSymbol.Sort,''gather.Sort,''QidList.Sort,''Attr.Sort],'op-hook[ ''formatSymbol.Sort,''format.Sort,''QidList.Sort,''Attr.Sort],'op-hook[ ''ctorSymbol.Sort,''ctor.Sort,'nil.TypeList,''Attr.Sort],'op-hook[ ''frozenSymbol.Sort,''frozen.Sort,''NeNatList.Sort,''Attr.Sort],'op-hook[ ''polySymbol.Sort,''poly.Sort,''NeNatList.Sort,''Attr.Sort],'op-hook[ ''configSymbol.Sort,''config.Sort,'nil.TypeList,''Attr.Sort],'op-hook[ ''objectSymbol.Sort,''object.Sort,'nil.TypeList,''Attr.Sort],'op-hook[ ''msgSymbol.Sort,''msg.Sort,'nil.TypeList,''Attr.Sort],'op-hook[ ''specialSymbol.Sort,''special.Sort,''NeHookList.Sort,''Attr.Sort], 'op-hook[''labelSymbol.Sort,''label.Sort,''Qid.Sort,''Attr.Sort],'op-hook[ ''metadataSymbol.Sort,''metadata.Sort,''String.Sort,''Attr.Sort],'op-hook[ ''owiseSymbol.Sort,''owise.Sort,'nil.TypeList,''Attr.Sort],'op-hook[ ''variantAttrSymbol.Sort,''variant.Sort,'nil.TypeList,''Attr.Sort], 'op-hook[''narrowingSymbol.Sort,''narrowing.Sort,'nil.TypeList, ''Attr.Sort],'op-hook[''nonexecSymbol.Sort,''nonexec.Sort,'nil.TypeList, ''Attr.Sort],'op-hook[''printSymbol.Sort,''print.Sort,''QidList.Sort, ''Attr.Sort],'op-hook[''emptyAttrSetSymbol.Sort,''none.Sort,'nil.TypeList, ''AttrSet.Sort],'op-hook[''attrSetSymbol.Sort,''__.Sort,'__[''AttrSet.Sort, ''AttrSet.Sort],''AttrSet.Sort],'op-hook[''opDeclSymbol.Sort, ''op_:_->_`[_`]..Qid,'__[''Qid.Sort,''TypeList.Sort,''Type.Sort, ''AttrSet.Sort],''OpDecl.Sort],'op-hook[''opDeclSetSymbol.Sort,''__.Sort, '__[''OpDeclSet.Sort,''OpDeclSet.Sort],''OpDeclSet.Sort],'op-hook[ ''emptyOpDeclSetSymbol.Sort,''none.Sort,'nil.TypeList,''OpDeclSet.Sort], 'op-hook[''mbSymbol.Sort,''mb_:_`[_`]..Qid,'__[''Term.Sort,''Sort.Sort, ''AttrSet.Sort],''MembAx.Sort],'op-hook[''cmbSymbol.Sort, ''cmb_:_if_`[_`]..Qid,'__[''Term.Sort,''Sort.Sort,''EqCondition.Sort, ''AttrSet.Sort],''MembAx.Sort],'op-hook[''emptyMembAxSetSymbol.Sort, ''none.Sort,'nil.TypeList,''MembAxSet.Sort],'op-hook[ ''membAxSetSymbol.Sort,''__.Sort,'__[''MembAxSet.Sort,''MembAxSet.Sort], ''MembAxSet.Sort],'op-hook[''eqSymbol.Sort,''eq_=_`[_`]..Qid,'__[ ''Term.Sort,''Term.Sort,''AttrSet.Sort],''Equation.Sort],'op-hook[ ''ceqSymbol.Sort,''ceq_=_if_`[_`]..Qid,'__[''Term.Sort,''Term.Sort, ''EqCondition.Sort,''AttrSet.Sort],''Equation.Sort],'op-hook[ ''emptyEquationSetSymbol.Sort,''none.Sort,'nil.TypeList, ''EquationSet.Sort],'op-hook[''equationSetSymbol.Sort,''__.Sort,'__[ ''EquationSet.Sort,''EquationSet.Sort],''EquationSet.Sort],'op-hook[ ''rlSymbol.Sort,''rl_=>_`[_`]..Qid,'__[''Term.Sort,''Term.Sort, ''AttrSet.Sort],''Rule.Sort],'op-hook[''crlSymbol.Sort, ''crl_=>_if_`[_`]..Qid,'__[''Term.Sort,''Term.Sort,''Condition.Sort, ''AttrSet.Sort],''Rule.Sort],'op-hook[''emptyRuleSetSymbol.Sort, ''none.Sort,'nil.TypeList,''RuleSet.Sort],'op-hook[''ruleSetSymbol.Sort, ''__.Sort,'__[''RuleSet.Sort,''RuleSet.Sort],''RuleSet.Sort],'op-hook[ ''stratDeclSymbol.Sort,''strat_:_@_`[_`]..Qid,'__[''Qid.Sort, ''TypeList.Sort,''Type.Sort,''AttrSet.Sort],''StratDecl.Sort],'op-hook[ ''emptyStratDeclSetSymbol.Sort,''none.Sort,'nil.TypeList, ''StratDeclSet.Sort],'op-hook[''stratDeclSetSymbol.Sort,''__.Sort,'__[ ''StratDeclSet.Sort,''StratDeclSet.Sort],''StratDeclSet.Sort],'op-hook[ ''sdSymbol.Sort,''sd_:=_`[_`]..Qid,'__[''CallStrategy.Sort,''Strategy.Sort, ''AttrSet.Sort],''StratDefinition.Sort],'op-hook[''csdSymbol.Sort, ''csd_:=_if_`[_`]..Qid,'__[''CallStrategy.Sort,''Strategy.Sort, ''EqCondition.Sort,''AttrSet.Sort],''StratDefinition.Sort],'op-hook[ ''emptyStratDefSetSymbol.Sort,''none.Sort,'nil.TypeList, ''StratDefSet.Sort],'op-hook[''stratDefSetSymbol.Sort,''__.Sort,'__[ ''StratDefSet.Sort,''StratDefSet.Sort],''StratDefSet.Sort],'op-hook[ ''fmodSymbol.Sort,''fmod_is_sorts_.____endfm.Constant,'__[''Header.Sort, ''ImportList.Sort,''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort, ''MembAxSet.Sort,''EquationSet.Sort],''FModule.Sort],'op-hook[ ''fthSymbol.Sort,''fth_is_sorts_.____endfth.Constant,'__[''Qid.Sort, ''ImportList.Sort,''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort, ''MembAxSet.Sort,''EquationSet.Sort],''FTheory.Sort],'op-hook[ ''modSymbol.Sort,''mod_is_sorts_._____endm.Constant,'__[''Header.Sort, ''ImportList.Sort,''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort, ''MembAxSet.Sort,''EquationSet.Sort,''RuleSet.Sort],''SModule.Sort], 'op-hook[''thSymbol.Sort,''th_is_sorts_._____endth.Constant,'__[''Qid.Sort, ''ImportList.Sort,''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort, ''MembAxSet.Sort,''EquationSet.Sort,''RuleSet.Sort],''STheory.Sort], 'op-hook[''smodSymbol.Sort,''smod_is_sorts_._______endsm.Constant,'__[ ''Header.Sort,''ImportList.Sort,''SortSet.Sort,''SubsortDeclSet.Sort, ''OpDeclSet.Sort,''MembAxSet.Sort,''EquationSet.Sort,''RuleSet.Sort, ''StratDeclSet.Sort,''StratDefSet.Sort],''StratModule.Sort],'op-hook[ ''sthSymbol.Sort,''sth_is_sorts_._______endsth.Constant,'__[''Header.Sort, ''ImportList.Sort,''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort, ''MembAxSet.Sort,''EquationSet.Sort,''RuleSet.Sort,''StratDeclSet.Sort, ''StratDefSet.Sort],''StratTheory.Sort],'op-hook[''sortMappingSymbol.Sort, ''sort_to_..Qid,'__[''Sort.Sort,''Sort.Sort],''SortMapping.Sort],'op-hook[ ''emptySortMappingSetSymbol.Sort,''none.Sort,'nil.TypeList, ''SortMappingSet.Sort],'op-hook[''sortMappingSetSymbol.Sort,''__.Sort,'__[ ''SortMappingSet.Sort,''SortMappingSet.Sort],''SortMappingSet.Sort], 'op-hook[''opMappingSymbol.Sort,''op_to_..Qid,'__[''Qid.Sort,''Qid.Sort], ''OpMapping.Sort],'op-hook[''opSpecificMappingSymbol.Sort, ''op_:_->_to_..Qid,'__[''Qid.Sort,''TypeList.Sort,''Type.Sort,''Qid.Sort], ''OpMapping.Sort],'op-hook[''opTermMappingSymbol.Sort,''op_to`term_..Qid, '__[''Term.Sort,''Term.Sort],''OpMapping.Sort],'op-hook[ ''emptyOpMappingSetSymbol.Sort,''none.Sort,'nil.TypeList, ''OpMappingSet.Sort],'op-hook[''opMappingSetSymbol.Sort,''__.Sort,'__[ ''OpMappingSet.Sort,''OpMappingSet.Sort],''OpMappingSet.Sort],'op-hook[ ''stratMappingSymbol.Sort,''strat_to_..Qid,'__[''Qid.Sort,''Qid.Sort], ''StratMapping.Sort],'op-hook[''stratSpecificMappingSymbol.Sort, ''strat_:_@_to_..Qid,'__[''Qid.Sort,''TypeList.Sort,''Type.Sort, ''Qid.Sort],''StratMapping.Sort],'op-hook[''stratExprMappingSymbol.Sort, ''strat_to`expr_..Qid,'__[''CallStrategy.Sort,''Strategy.Sort], ''StratMapping.Sort],'op-hook[''emptyStratMappingSetSymbol.Sort, ''none.Sort,'nil.TypeList,''StratMappingSet.Sort],'op-hook[ ''stratMappingSetSymbol.Sort,''__.Sort,'__[''StratMappingSet.Sort, ''StratMappingSet.Sort],''StratMappingSet.Sort],'op-hook[''viewSymbol.Sort, ''view_from_to_is___endv.Sort,'__[''Header.Sort,''ModuleExpression.Sort, ''ModuleExpression.Sort,''SortMappingSet.Sort,''OpMappingSet.Sort, ''StratMappingSet.Sort],''View.Sort],'op-hook[''anyTypeSymbol.Sort, ''anyType.Sort,'nil.TypeList,''Type?.Sort],'op-hook[ ''unificandPairSymbol.Sort,''_=?_.Sort,'__[''Term.Sort,''Term.Sort], ''UnificandPair.Sort],'op-hook[''unificationConjunctionSymbol.Sort, ''_/\_.Sort,'__[''UnificationProblem.Sort,''UnificationProblem.Sort], ''UnificationProblem.Sort],'op-hook[''patternSubjectPairSymbol.Sort, ''_<=?_.Sort,'__[''Term.Sort,''Term.Sort],''PatternSubjectPair.Sort], 'op-hook[''matchingConjunctionSymbol.Sort,''_/\_.Sort,'__[ ''MatchingProblem.Sort,''MatchingProblem.Sort],''MatchingProblem.Sort], 'op-hook[''resultPairSymbol.Sort,''`{_`,_`}.Qid,'__[''Term.Sort, ''Type.Sort],''ResultPair.Sort],'op-hook[''resultTripleSymbol.Sort, ''`{_`,_`,_`}.Qid,'__[''Term.Sort,''Type.Sort,''Substitution.Sort], ''ResultTriple.Sort],'op-hook[''result4TupleSymbol.Sort, ''`{_`,_`,_`,_`}.Qid,'__[''Term.Sort,''Type.Sort,''Substitution.Sort, ''Context.Sort],''Result4Tuple.Sort],'op-hook[''matchPairSymbol.Sort, ''`{_`,_`}.Qid,'__[''Substitution.Sort,''Context.Sort],''MatchPair.Sort], 'op-hook[''unificationTripleSymbol.Sort,''`{_`,_`,_`}.Qid,'__[ ''Substitution.Sort,''Substitution.Sort,''Qid.Sort], ''UnificationTriple.Sort],'op-hook[''variantSymbol.Sort, ''`{_`,_`,_`,_`,_`}.Qid,'__[''Term.Sort,''Substitution.Sort,''Qid.Sort, ''Parent.Sort,''Bool.Sort],''Variant.Sort],'op-hook[ ''narrowingApplyResultSymbol.Sort,''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'__[ ''Term.Sort,''Type.Sort,''Context.Sort,''Qid.Sort,''Substitution.Sort, ''Substitution.Sort,''Qid.Sort],''NarrowingApplyResult.Sort],'op-hook[ ''narrowingSearchResultSymbol.Sort,''`{_`,_`,_`,_`,_`,_`}.Qid,'__[ ''Term.Sort,''Type.Sort,''Substitution.Sort,''Qid.Sort,''Substitution.Sort, ''Qid.Sort],''NarrowingSearchResult.Sort],'op-hook[''traceStepSymbol.Sort, ''`{_`,_`,_`}.Qid,'__[''Term.Sort,''Type.Sort,''Rule.Sort], ''TraceStep.Sort],'op-hook[''nilTraceSymbol.Sort,''nil.Sort,'nil.TypeList, ''Trace.Sort],'op-hook[''traceSymbol.Sort,''__.Sort,'__[''Trace.Sort, ''Trace.Sort],''Trace.Sort],'op-hook[''narrowingStepSymbol.Sort, ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'__[''Context.Sort,''Qid.Sort, ''Substitution.Sort,''Qid.Sort,''Term.Sort,''Type.Sort, ''Substitution.Sort],''NarrowingStep.Sort],'op-hook[ ''nilNarrowingTraceSymbol.Sort,''nil.Sort,'nil.TypeList, ''NarrowingTrace.Sort],'op-hook[''narrowingTraceSymbol.Sort,''__.Sort,'__[ ''NarrowingTrace.Sort,''NarrowingTrace.Sort],''NarrowingTrace.Sort], 'op-hook[''narrowingSearchPathResultSymbol.Sort,''`{_`,_`,_`,_`,_`,_`}.Qid, '__[''Term.Sort,''Type.Sort,''Substitution.Sort,''NarrowingTrace.Sort, ''Substitution.Sort,''Qid.Sort],''NarrowingSearchPathResult.Sort],'op-hook[ ''smtResultSymbol.Sort,''`{_`,_`,_`,_`}.Qid,'__[''Term.Sort, ''Substitution.Sort,''Term.Sort,''Nat.Sort],''SmtResult.Sort],'op-hook[ ''noParseSymbol.Sort,''noParse.Sort,''Nat.Sort,''ResultPair?.Sort], 'op-hook[''ambiguitySymbol.Sort,''ambiguity.Sort,'__[''ResultPair.Sort, ''ResultPair.Sort],''ResultPair?.Sort],'op-hook[''failure2Symbol.Sort, ''failure.Sort,'nil.TypeList,''ResultPair?.Sort],'op-hook[ ''failure3Symbol.Sort,''failure.Sort,'nil.TypeList,''ResultTriple?.Sort], 'op-hook[''failureIncomplete3Symbol.Sort,''failureIncomplete.Sort, 'nil.TypeList,''ResultTriple?.Sort],'op-hook[''failure4Symbol.Sort, ''failure.Sort,'nil.TypeList,''Result4Tuple?.Sort],'op-hook[ ''noUnifierPairSymbol.Sort,''noUnifier.Sort,'nil.TypeList, ''UnificationPair?.Sort],'op-hook[''noUnifierTripleSymbol.Sort, ''noUnifier.Sort,'nil.TypeList,''UnificationTriple?.Sort],'op-hook[ ''noUnifierIncompletePairSymbol.Sort,''noUnifierIncomplete.Sort, 'nil.TypeList,''UnificationPair?.Sort],'op-hook[ ''noUnifierIncompleteTripleSymbol.Sort,''noUnifierIncomplete.Sort, 'nil.TypeList,''UnificationTriple?.Sort],'op-hook[''noVariantSymbol.Sort, ''noVariant.Sort,'nil.TypeList,''Variant?.Sort],'op-hook[ ''noVariantIncompleteSymbol.Sort,''noVariantIncomplete.Sort,'nil.TypeList, ''Variant?.Sort],'op-hook[''narrowingApplyFailureSymbol.Sort, ''failure.Sort,'nil.TypeList,''NarrowingApplyResult?.Sort],'op-hook[ ''narrowingApplyFailureIncompleteSymbol.Sort,''failureIncomplete.Sort, 'nil.TypeList,''NarrowingApplyResult?.Sort],'op-hook[ ''narrowingSearchFailureSymbol.Sort,''failure.Sort,'nil.TypeList, ''NarrowingSearchResult?.Sort],'op-hook[ ''narrowingSearchFailureIncompleteSymbol.Sort,''failureIncomplete.Sort, 'nil.TypeList,''NarrowingSearchResult?.Sort],'op-hook[ ''narrowingSearchPathFailureSymbol.Sort,''failure.Sort,'nil.TypeList, ''NarrowingSearchPathResult?.Sort],'op-hook[ ''narrowingSearchPathFailureIncompleteSymbol.Sort,''failureIncomplete.Sort, 'nil.TypeList,''NarrowingSearchPathResult?.Sort],'op-hook[ ''noMatchSubstSymbol.Sort,''noMatch.Sort,'nil.TypeList, ''Substitution?.Sort],'op-hook[''noMatchIncompleteSubstSymbol.Sort, ''noMatchIncomplete.Sort,'nil.TypeList,''Substitution?.Sort],'op-hook[ ''noMatchPairSymbol.Sort,''noMatch.Sort,'nil.TypeList,''MatchPair?.Sort], 'op-hook[''failureTraceSymbol.Sort,''failure.Sort,'nil.TypeList, ''Trace?.Sort],'op-hook[''smtFailureSymbol.Sort,''failure.Sort, 'nil.TypeList,''SmtResult?.Sort],'op-hook[''noStratParseSymbol.Sort, ''noStratParse.Sort,''Nat.Sort,''Strategy?.Sort],'op-hook[ ''stratAmbiguitySymbol.Sort,''ambiguity.Sort,'__[''Strategy.Sort, ''Strategy.Sort],''Strategy?.Sort],'op-hook[''mixfixSymbol.Sort, ''mixfix.Sort,'nil.TypeList,''PrintOption.Sort],'op-hook[ ''withParensSymbol.Sort,''with-parens.Sort,'nil.TypeList, ''PrintOption.Sort],'op-hook[''flatSymbol.Sort,''flat.Sort,'nil.TypeList, ''PrintOption.Sort],'op-hook[''formatPrintOptionSymbol.Sort,''format.Sort, 'nil.TypeList,''PrintOption.Sort],'op-hook[''numberSymbol.Sort, ''number.Sort,'nil.TypeList,''PrintOption.Sort],'op-hook[''ratSymbol.Sort, ''rat.Sort,'nil.TypeList,''PrintOption.Sort],'op-hook[ ''emptyPrintOptionSetSymbol.Sort,''none.Sort,'nil.TypeList, ''PrintOptionSet.Sort],'op-hook[''printOptionSetSymbol.Sort,''__.Sort,'__[ ''PrintOptionSet.Sort,''PrintOptionSet.Sort],''PrintOptionSet.Sort], 'op-hook[''delaySymbol.Sort,''delay.Sort,'nil.TypeList, ''VariantOption.Sort],'op-hook[''filterSymbol.Sort,''filter.Sort, 'nil.TypeList,''VariantOption.Sort],'op-hook[ ''emptyVariantOptionSetSymbol.Sort,''none.Sort,'nil.TypeList, ''VariantOptionSet.Sort],'op-hook[''variantOptionSetSymbol.Sort,''__.Sort, '__[''VariantOptionSet.Sort,''VariantOptionSet.Sort], ''VariantOptionSet.Sort],'op-hook[''breadthFirstSymbol.Sort, ''breadthFirst.Sort,'nil.TypeList,''SrewriteOption.Sort],'op-hook[ ''depthFirstSymbol.Sort,''depthFirst.Sort,'nil.TypeList, ''SrewriteOption.Sort],'op-hook[''legacyUnificationPairSymbol.Sort, ''`{_`,_`}.Qid,'__[''Substitution.Sort,''Nat.Sort],''UnificationPair.Sort], 'op-hook[''legacyUnificationTripleSymbol.Sort,''`{_`,_`,_`}.Qid,'__[ ''Substitution.Sort,''Substitution.Sort,''Nat.Sort], ''UnificationTriple.Sort],'op-hook[''legacyVariantSymbol.Sort, ''`{_`,_`,_`,_`,_`}.Qid,'__[''Term.Sort,''Substitution.Sort,''Nat.Sort, ''Parent.Sort,''Bool.Sort],''Variant.Sort],'term-hook[''trueTerm.Sort, ''true.Bool.Constant],'term-hook[''falseTerm.Sort, ''false.Bool.Constant]]]],'op_:_->_`[_`].[''metaRewrite.Sort,'__[ ''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[ResultPair?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaRewrite.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaSearch.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Condition`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[ResultTriple?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaSearch.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaSearchPath.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Condition`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[Trace?`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''metaSearchPath.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaSmtSearch.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Condition`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[SmtResult?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaSmtSearch.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaSrewrite.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[StrategyList`,Strategy?`].Kind,''`[SrewriteOption`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[ResultPair?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaSrewrite.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaUnify.Sort,'__[''`[Module`].Kind,''`[UnificationProblem`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''legacyMetaUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaUnify.Sort,'__[''`[Module`].Kind,''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''metaUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaVariantDisjointUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationTriple?`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''legacyMetaVariantDisjointUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaVariantDisjointUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationTriple?`].Kind,'none.AttrSet],'op_:_->_`[_`].[ ''metaVariantDisjointUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[VariantOptionSet`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationTriple?`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaVariantDisjointUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaVariantMatch.Sort,'__[''`[Module`].Kind,''`[MatchingProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[VariantOptionSet`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[Substitution?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaVariantMatch.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaVariantUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''legacyMetaVariantUnify.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaVariantUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`].Kind, 'none.AttrSet],'op_:_->_`[_`].[''metaVariantUnify.Sort,'__[ ''`[Module`].Kind,''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[VariantOptionSet`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''metaVariantUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaXapply.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Substitution?`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[Result4Tuple?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaXapply.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaXmatch.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Condition`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''metaXmatch.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metadata.Sort,''String.Sort,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''min.Sort,'__[''Nat.Sort,''Nat.Sort],''Nat.Sort,'__['assoc.Attr, 'comm.Attr,'special['__['id-hook[''ACU_NumberOpSymbol.Sort,''min.Sort], 'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]], 'op_:_->_`[_`].[''min.Sort,'__[''NzNat.Sort,''NzNat.Sort],''NzNat.Sort,'__[ 'assoc.Attr,'comm.Attr,'special['__['id-hook[''ACU_NumberOpSymbol.Sort, ''min.Sort],'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort, ''NzNat.Sort]]]]],'op_:_->_`[_`].[''minimalSorts.Sort,'__[ ''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__[ 'id-hook[''MetaLevelOpSymbol.Sort,''metaMinimalSorts.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''mixfix.Sort,'nil.TypeList,''PrintOption.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''modExp.Sort,'__[''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[FindResult`,NatList`,Bound`,Parent`].Kind,'special['__['id-hook[ ''NumberOpSymbol.Sort,''modExp.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort]]]],'op_:_->_`[_`].[ ''mod_is_sorts_._____endm.Constant,'__[''Header.Sort,''ImportList.Sort, ''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort,''MembAxSet.Sort, ''EquationSet.Sort,''RuleSet.Sort],''SModule.Sort,'__['ctor.Attr,'format[ '__[''d.Sort,''d.Sort,''s.Sort,''n++i.Sort,''ni.Sort,''d.Sort,''d.Sort, ''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''n--i.Sort,''d.Sort]], 'gather['__[''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort, ''&.Sort]]]],'op_:_->_`[_`].[''msg.Sort,'nil.TypeList,''Attr.Sort, 'ctor.Attr],'op_:_->_`[_`].[''narrowing.Sort,'nil.TypeList,''Attr.Sort, 'ctor.Attr],'op_:_->_`[_`].[''nil.Sort,'nil.TypeList,''EqCondition.Sort, 'ctor.Attr],'op_:_->_`[_`].[''nil.Sort,'nil.TypeList,''HookList.Sort, 'ctor.Attr],'op_:_->_`[_`].[''nil.Sort,'nil.TypeList,''ImportList.Sort, 'ctor.Attr],'op_:_->_`[_`].[''nil.Sort,'nil.TypeList,''NarrowingTrace.Sort, 'ctor.Attr],'op_:_->_`[_`].[''nil.Sort,'nil.TypeList,''NatList.Sort, 'ctor.Attr],'op_:_->_`[_`].[''nil.Sort,'nil.TypeList, ''ParameterDeclList.Sort,'ctor.Attr],'op_:_->_`[_`].[''nil.Sort, 'nil.TypeList,''QidList.Sort,'ctor.Attr],'op_:_->_`[_`].[''nil.Sort, 'nil.TypeList,''Trace.Sort,'ctor.Attr],'op_:_->_`[_`].[''nil.Sort, 'nil.TypeList,''TypeList.Sort,'ctor.Attr],'op_:_->_`[_`].[''noMatch.Sort, 'nil.TypeList,''MatchPair?.Sort,'ctor.Attr],'op_:_->_`[_`].[''noMatch.Sort, 'nil.TypeList,''Substitution?.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''noMatchIncomplete.Sort,'nil.TypeList,''Substitution?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''noParse.Sort,''Nat.Sort,''ResultPair?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''noStratParse.Sort,''Nat.Sort,''Strategy?.Sort, 'ctor.Attr],'op_:_->_`[_`].[''noUnifier.Sort,'nil.TypeList, ''UnificationPair?.Sort,'ctor.Attr],'op_:_->_`[_`].[''noUnifier.Sort, 'nil.TypeList,''UnificationTriple?.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''noUnifierIncomplete.Sort,'nil.TypeList,''UnificationPair?.Sort, 'ctor.Attr],'op_:_->_`[_`].[''noUnifierIncomplete.Sort,'nil.TypeList, ''UnificationTriple?.Sort,'ctor.Attr],'op_:_->_`[_`].[''noVariant.Sort, 'nil.TypeList,''Variant?.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''noVariantIncomplete.Sort,'nil.TypeList,''Variant?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''AttrSet.Sort,'ctor.Attr], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''EmptyQidSet.Sort,'ctor.Attr], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''EquationSet.Sort,'ctor.Attr], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''MembAxSet.Sort,'ctor.Attr], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''OpDeclSet.Sort,'ctor.Attr], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''OpMappingSet.Sort,'ctor.Attr], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''Parent.Sort,'none.AttrSet], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''PrintOptionSet.Sort, 'ctor.Attr],'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''QidSet.Sort, 'ctor.Attr],'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''RuleSet.Sort, 'ctor.Attr],'op_:_->_`[_`].[''none.Sort,'nil.TypeList, ''SortMappingSet.Sort,'ctor.Attr],'op_:_->_`[_`].[''none.Sort, 'nil.TypeList,''StratDeclSet.Sort,'ctor.Attr],'op_:_->_`[_`].[''none.Sort, 'nil.TypeList,''StratDefSet.Sort,'ctor.Attr],'op_:_->_`[_`].[''none.Sort, 'nil.TypeList,''StratMappingSet.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''none.Sort,'nil.TypeList,''SubsortDeclSet.Sort,'ctor.Attr], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''Substitution.Sort,'ctor.Attr], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''VariantOptionSet.Sort, 'ctor.Attr],'op_:_->_`[_`].[''nonexec.Sort,'nil.TypeList,''Attr.Sort, 'ctor.Attr],'op_:_->_`[_`].[''not.Sort,''Strategy.Sort,''Strategy.Sort, 'ctor.Attr],'op_:_->_`[_`].[''notFound.Sort,'nil.TypeList, ''FindResult.Sort,'ctor.Attr],'op_:_->_`[_`].[''not_.Sort,''Bool.Sort, ''Bool.Sort,'prec['s_^53['0.Zero]]],'op_:_->_`[_`].[''number.Sort, 'nil.TypeList,''PrintOption.Sort,'ctor.Attr],'op_:_->_`[_`].[''object.Sort, 'nil.TypeList,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''occurs.Sort,'__[ ''Nat.Sort,''NatList.Sort],''Bool.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''occurs.Sort,'__[''Qid.Sort,''QidList.Sort],''Bool.Sort,'none.AttrSet], 'op_:_->_`[_`].[''one.Sort,''Strategy.Sort,''Strategy.Sort,'ctor.Attr], 'op_:_->_`[_`].[''op-hook.Sort,'__[''Qid.Sort,''Qid.Sort,''QidList.Sort, ''Qid.Sort],''Hook.Sort,'__['ctor.Attr,'format['__[''nssss.Sort, ''d.Sort]]]],'op_:_->_`[_`].[''op_:_->_`[_`]..Qid,'__[''Qid.Sort, ''TypeList.Sort,''Type.Sort,''AttrSet.Sort],''OpDecl.Sort,'__['ctor.Attr, 'format['__[''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''s.Sort, ''d.Sort,''d.Sort,''s.Sort,''d.Sort]]]],'op_:_->_`[_`].[''op_:_->_to_..Qid, '__[''Qid.Sort,''TypeList.Sort,''Type.Sort,''Qid.Sort],''OpMapping.Sort, 'ctor.Attr],'op_:_->_`[_`].[''op_:_->_to_`[_`].Qid,'__[''Qid.Sort, ''TypeList.Sort,''Type.Sort,''Qid.Sort,''AttrSet.Sort],''Renaming.Sort,'__[ 'ctor.Attr,'format['__[''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort,''d.Sort,''d.Sort]]]], 'op_:_->_`[_`].[''op_to_..Qid,'__[''Qid.Sort,''Qid.Sort],''OpMapping.Sort, 'ctor.Attr],'op_:_->_`[_`].[''op_to_`[_`].Qid,'__[''Qid.Sort,''Qid.Sort, ''AttrSet.Sort],''Renaming.Sort,'__['ctor.Attr,'format['__[''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort,''d.Sort,''d.Sort]]]], 'op_:_->_`[_`].[''op_to`term_..Qid,'__[''Term.Sort,''Term.Sort], ''OpMapping.Sort,'ctor.Attr],'op_:_->_`[_`].[''owise.Sort,'nil.TypeList, ''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''poly.Sort,''NeNatList.Sort, ''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''prec.Sort,''Nat.Sort,''Attr.Sort, 'ctor.Attr],'op_:_->_`[_`].[''print.Sort,''QidList.Sort,''Attr.Sort, 'ctor.Attr],'op_:_->_`[_`].[''protecting_..Qid,''ModuleExpression.Sort, ''Import.Sort,'ctor.Attr],'op_:_->_`[_`].[''qid.Sort,''`[String`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[''QuotedIdentifierOpSymbol.Sort, ''qid.Sort],'op-hook[''quotedIdentifierSymbol.Sort,''.Sort, 'nil.TypeList,''Qid.Sort],'op-hook[''stringSymbol.Sort,''.Sort, 'nil.TypeList,''Char.Sort]]]],'op_:_->_`[_`].[''rat.Sort,'nil.TypeList, ''PrintOption.Sort,'ctor.Attr],'op_:_->_`[_`].[''reverse.Sort, ''NatList.Sort,''NatList.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''reverse.Sort,''NeNatList.Sort,''NeNatList.Sort,'none.AttrSet], 'op_:_->_`[_`].[''reverse.Sort,''NeQidList.Sort,''NeQidList.Sort, 'none.AttrSet],'op_:_->_`[_`].[''reverse.Sort,''QidList.Sort, ''QidList.Sort,'none.AttrSet],'op_:_->_`[_`].[''rfind.Sort,'__[ ''String.Sort,''String.Sort,''Nat.Sort],''FindResult.Sort,'special['__[ 'id-hook[''StringOpSymbol.Sort,''rfind.Sort],'op-hook[''stringSymbol.Sort, ''.Sort,'nil.TypeList,''Char.Sort],'op-hook[''succSymbol.Sort, ''s_.Sort,''Nat.Sort,''NzNat.Sort],'term-hook[''notFoundTerm.Sort, ''notFound.FindResult.Constant]]]],'op_:_->_`[_`].[''right-id.Sort, ''Term.Sort,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''rl_=>_`[_`]..Qid,'__[ ''Term.Sort,''Term.Sort,''AttrSet.Sort],''Rule.Sort,'__['ctor.Attr,'format[ '__[''d.Sort,''d.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort,''d.Sort, ''s.Sort,''d.Sort]]]],'op_:_->_`[_`].[''s_.Sort,''Nat.Sort,''NzNat.Sort, '__['ctor.Attr,'iter.Attr,'special['__['id-hook[''SuccSymbol.Sort, 'nil.TypeList],'term-hook[''zeroTerm.Sort,''0.Zero.Constant]]]]], 'op_:_->_`[_`].[''sameKind.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[Bool`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaSameKind.Sort],'op-hook[''shareWith.Sort, ''metaReduce.Sort,'__[''Module.Sort,''ModuleExpression.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''sd.Sort,'__[''Nat.Sort, ''Nat.Sort],''Nat.Sort,'__['comm.Attr,'special['__['id-hook[ ''CUI_NumberOpSymbol.Sort,''sd.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[''sd_:=_`[_`]..Qid,'__[ ''CallStrategy.Sort,''Strategy.Sort,''AttrSet.Sort],''StratDefinition.Sort, '__['ctor.Attr,'format['__[''d.Sort,''d.Sort,''d.Sort,''d.Sort,''s.Sort, ''d.Sort,''d.Sort,''s.Sort,''d.Sort]]]],'op_:_->_`[_`].[''size.Sort, ''NatList.Sort,''Nat.Sort,'none.AttrSet],'op_:_->_`[_`].[''size.Sort, ''NeNatList.Sort,''NzNat.Sort,'none.AttrSet],'op_:_->_`[_`].[''size.Sort, ''NeQidList.Sort,''NzNat.Sort,'none.AttrSet],'op_:_->_`[_`].[''size.Sort, ''QidList.Sort,''Nat.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''smod_is_sorts_._______endsm.Constant,'__[''Header.Sort,''ImportList.Sort, ''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort,''MembAxSet.Sort, ''EquationSet.Sort,''RuleSet.Sort,''StratDeclSet.Sort,''StratDefSet.Sort], ''StratModule.Sort,'__['ctor.Attr,'format['__[''d.Sort,''d.Sort,''s.Sort, ''n++i.Sort,''ni.Sort,''d.Sort,''d.Sort,''ni.Sort,''ni.Sort,''ni.Sort, ''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''n--i.Sort,''d.Sort]],'gather['__[ ''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort, ''&.Sort,''&.Sort]]]],'op_:_->_`[_`].[''sortLeq.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[Bool`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaSortLeq.Sort],'op-hook[''shareWith.Sort, ''metaReduce.Sort,'__[''Module.Sort,''ModuleExpression.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''sort_to_.Sort,'__[''Qid.Sort, ''Qid.Sort],''Renaming.Sort,'ctor.Attr],'op_:_->_`[_`].[''sort_to_..Qid, '__[''Sort.Sort,''Sort.Sort],''SortMapping.Sort,'ctor.Attr], 'op_:_->_`[_`].[''special.Sort,''NeHookList.Sort,''Attr.Sort,'ctor.Attr], 'op_:_->_`[_`].[''sth_is_sorts_._______endsth.Constant,'__[''Header.Sort, ''ImportList.Sort,''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort, ''MembAxSet.Sort,''EquationSet.Sort,''RuleSet.Sort,''StratDeclSet.Sort, ''StratDefSet.Sort],''StratTheory.Sort,'__['ctor.Attr,'format['__[''d.Sort, ''d.Sort,''s.Sort,''n++i.Sort,''ni.Sort,''d.Sort,''d.Sort,''ni.Sort, ''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''n--i.Sort, ''d.Sort]],'gather['__[''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort, ''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort]]]],'op_:_->_`[_`].[ ''strat.Sort,''NeNatList.Sort,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''strat_:_@_`[_`]..Qid,'__[''Qid.Sort,''TypeList.Sort,''Type.Sort, ''AttrSet.Sort],''StratDecl.Sort,'__['ctor.Attr,'format['__[''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort,''d.Sort, ''s.Sort,''d.Sort]]]],'op_:_->_`[_`].[''strat_:_@_to_.Variable,'__[ ''Qid.Sort,''TypeList.Sort,''Type.Sort,''Qid.Sort],''Renaming.Sort, 'ctor.Attr],'op_:_->_`[_`].[''strat_:_@_to_..Qid,'__[''Qid.Sort, ''TypeList.Sort,''Type.Sort,''Qid.Sort],''StratMapping.Sort,'ctor.Attr], 'op_:_->_`[_`].[''strat_to_.Sort,'__[''Qid.Sort,''Qid.Sort], ''Renaming.Sort,'ctor.Attr],'op_:_->_`[_`].[''strat_to_..Qid,'__[ ''Qid.Sort,''Qid.Sort],''StratMapping.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''strat_to`expr_..Qid,'__[''CallStrategy.Sort,''Strategy.Sort], ''StratMapping.Sort,'ctor.Attr],'op_:_->_`[_`].[''string.Sort,''Qid.Sort, ''String.Sort,'special['__['id-hook[''QuotedIdentifierOpSymbol.Sort, ''string.Sort],'op-hook[''quotedIdentifierSymbol.Sort,''.Sort, 'nil.TypeList,''Qid.Sort],'op-hook[''stringSymbol.Sort,''.Sort, 'nil.TypeList,''Char.Sort]]]],'op_:_->_`[_`].[''subsort_<_..Qid,'__[ ''Sort.Sort,''Sort.Sort],''SubsortDecl.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''substr.Sort,'__[''String.Sort,''Nat.Sort,''Nat.Sort],''String.Sort, 'special['__['id-hook[''StringOpSymbol.Sort,''substr.Sort],'op-hook[ ''stringSymbol.Sort,''.Sort,'nil.TypeList,''Char.Sort],'op-hook[ ''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]],'op_:_->_`[_`].[ ''tail.Sort,''NeNatList.Sort,''NatList.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''tail.Sort,''NeQidList.Sort,''QidList.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''term-hook.Sort,'__[''Qid.Sort,''Term.Sort],''Hook.Sort,'__['ctor.Attr, 'format['__[''nssss.Sort,''d.Sort]]]],'op_:_->_`[_`].[''test.Sort, ''Strategy.Sort,''Strategy.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''th_is_sorts_._____endth.Constant,'__[''Qid.Sort,''ImportList.Sort, ''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort,''MembAxSet.Sort, ''EquationSet.Sort,''RuleSet.Sort],''STheory.Sort,'__['ctor.Attr,'format[ '__[''d.Sort,''d.Sort,''d.Sort,''n++i.Sort,''ni.Sort,''d.Sort,''d.Sort, ''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''n--i.Sort,''d.Sort]], 'gather['__[''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort, ''&.Sort]]]],'op_:_->_`[_`].[''top.Sort,''RuleApplication.Sort, ''Strategy.Sort,'ctor.Attr],'op_:_->_`[_`].[''true.Sort,'nil.TypeList, ''Bool.Sort,'__['ctor.Attr,'special['id-hook[''SystemTrue.Sort, 'nil.TypeList]]]],'op_:_->_`[_`].[''try.Sort,''Strategy.Sort, ''Strategy.Sort,'ctor.Attr],'op_:_->_`[_`].[''unbounded.Sort,'nil.TypeList, ''Bound.Sort,'ctor.Attr],'op_:_->_`[_`].[''union.Sort,'__[''NeQidSet.Sort, ''QidSet.Sort],''NeQidSet.Sort,'none.AttrSet],'op_:_->_`[_`].[''union.Sort, '__[''QidSet.Sort,''NeQidSet.Sort],''NeQidSet.Sort,'none.AttrSet], 'op_:_->_`[_`].[''union.Sort,'__[''QidSet.Sort,''QidSet.Sort], ''QidSet.Sort,'none.AttrSet],'op_:_->_`[_`].[''upEqs.Sort,'__[''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Bool`].Kind],''`[EquationSet`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaUpEqs.Sort],'op-hook[''shareWith.Sort, ''metaReduce.Sort,'__[''Module.Sort,''ModuleExpression.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''upImports.Sort,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[ImportList`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpImports.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''upMbs.Sort,'__[''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Bool`].Kind], ''`[MembAxSet`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpMbs.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''upModule.Sort,'__[''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Bool`].Kind], ''`[Module`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpModule.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''upOpDecls.Sort,'__[''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Bool`].Kind], ''`[OpDeclSet`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpOpDecls.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''upRls.Sort,'__[''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Bool`].Kind], ''`[RuleSet`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpRls.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''upSds.Sort,'__[''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Bool`].Kind], ''`[StratDefSet`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpSds.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''upSorts.Sort,'__[''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Bool`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpSorts.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''upStratDecls.Sort,'__[''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[Bool`].Kind],''`[StratDeclSet`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaUpStratDecls.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''upSubsortDecls.Sort,'__[''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Bool`].Kind], ''`[SubsortDeclSet`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpSubsortDecls.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''upTerm.Sort,''Universal.Sort,''Term.Sort,'__['poly['s_[ '0.Zero]],'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpTerm.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]]], 'op_:_->_`[_`].[''upView.Sort,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[View`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''metaUpView.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''upperCase.Sort,''String.Sort,''String.Sort,'special['__['id-hook[ ''StringOpSymbol.Sort,''upperCase.Sort],'op-hook[''stringSymbol.Sort, ''.Sort,'nil.TypeList,''Char.Sort]]]],'op_:_->_`[_`].[ ''variant.Sort,'nil.TypeList,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''view_from_to_is___endv.Sort,'__[''Header.Sort,''ModuleExpression.Sort, ''ModuleExpression.Sort,''SortMappingSet.Sort,''OpMappingSet.Sort, ''StratMappingSet.Sort],''View.Sort,'__['ctor.Attr,'format['__[''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''n++i.Sort, ''ni.Sort,''ni.Sort,''n--i.Sort,''d.Sort]],'gather['__[''&.Sort,''&.Sort, ''&.Sort,''&.Sort,''&.Sort,''&.Sort]]]],'op_:_->_`[_`].[''wellFormed.Sort, ''Module.Sort,''Bool.Sort,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaWellFormedModule.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort, '__[''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''wellFormed.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[Bool`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaWellFormedTerm.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''wellFormed.Sort,'__[''`[Module`].Kind, ''`[Substitution?`].Kind],''`[Bool`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaWellFormedSubstitution.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''with-parens.Sort,'nil.TypeList,''PrintOption.Sort,'ctor.Attr], 'op_:_->_`[_`].[''xmatch_s.t._.Constant,'__[''Term.Sort, ''EqCondition.Sort],''Strategy.Sort,'__['ctor.Attr,'prec['s_^21[ '0.Zero]]]],'op_:_->_`[_`].[''xmatchrew_s.t._by_.Constant,'__[''Term.Sort, ''EqCondition.Sort,''UsingPairSet.Sort],''Strategy.Sort,'ctor.Attr], 'op_:_->_`[_`].[''|_|.Sort,''NeQidSet.Sort,''NzNat.Sort,'none.AttrSet], 'op_:_->_`[_`].[''|_|.Sort,''QidSet.Sort,''Nat.Sort,'none.AttrSet]], 'none.MembAxSet,'__['eq_=_`[_`].['_`[_`][''$applySubstitution.Sort,'_`,_[ ''Q:Qid.Variable,''S:Substitution.Variable]],''Q:Qid.Variable,'owise.Attr], 'eq_=_`[_`].['_`[_`][''$applySubstitution.Sort,'_`,_[''V:Variable.Variable, '_`[_`][''_;_.Sort,'_`,_[''S:Substitution.Variable,'_`[_`][''_<-_.Sort, '_`,_[''V:Variable.Variable,''T:Term.Variable]]]]]],''T:Term.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''$applySubstitution.Sort,'_`,_[ '_`[_`][''_`,_.Qid,'_`,_[''T:Term.Variable,''TL:NeTermList.Variable]], ''S:Substitution.Variable]],'_`[_`][''_`,_.Qid,'_`,_['_`[_`][ ''$applySubstitution.Sort,'_`,_[''T:Term.Variable, ''S:Substitution.Variable]],'_`[_`][''$applySubstitution.Sort,'_`,_[ ''TL:NeTermList.Variable,''S:Substitution.Variable]]]],'none.AttrSet], 'eq_=_`[_`].['_`[_`][''$applySubstitution.Sort,'_`,_['_`[_`][''_`[_`].Qid, '_`,_[''Q:Qid.Variable,''TL:NeTermList.Variable]], ''S:Substitution.Variable]],'_`[_`][''_`[_`].Qid,'_`,_[''Q:Qid.Variable, '_`[_`][''$applySubstitution.Sort,'_`,_[''TL:NeTermList.Variable, ''S:Substitution.Variable]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''$card.Sort,'_`,_[''none.EmptyQidSet.Constant,''C:Nat.Variable]], ''C:Nat.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''$card.Sort,'_`,_[ '_`[_`][''_;_.Sort,'_`,_[''E:Qid.Variable,''S:QidSet.Variable]], ''C:Nat.Variable]],'_`[_`][''$card.Sort,'_`,_[''S:QidSet.Variable,'_`[_`][ ''_+_.Sort,'_`,_[''C:Nat.Variable,'_`[_`][''s_.Sort,''0.Zero.Constant]]]]], 'owise.Attr],'eq_=_`[_`].['_`[_`][''$card.Sort,'_`,_['_`[_`][''_;_.Sort, '_`,_[''N:NeQidSet.Variable,''N:NeQidSet.Variable,''S:QidSet.Variable]], ''C:Nat.Variable]],'_`[_`][''$card.Sort,'_`,_['_`[_`][''_;_.Sort,'_`,_[ ''N:NeQidSet.Variable,''S:QidSet.Variable]],''C:Nat.Variable]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''$diff.Sort,'_`,_[ ''none.EmptyQidSet.Constant,''S':QidSet.Variable,''A:QidSet.Variable]], ''A:QidSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''$diff.Sort,'_`,_[ '_`[_`][''_;_.Sort,'_`,_[''E:Qid.Variable,''S:QidSet.Variable]], ''S':QidSet.Variable,''A:QidSet.Variable]],'_`[_`][''$diff.Sort,'_`,_[ ''S:QidSet.Variable,''S':QidSet.Variable,'_`[_`][''if_then_else_fi.Sort, '_`,_['_`[_`][''_in_.Sort,'_`,_[''E:Qid.Variable,''S':QidSet.Variable]], ''A:QidSet.Variable,'_`[_`][''_;_.Sort,'_`,_[''E:Qid.Variable, ''A:QidSet.Variable]]]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''$intersect.Sort,'_`,_[''none.EmptyQidSet.Constant,''S':QidSet.Variable, ''A:QidSet.Variable]],''A:QidSet.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''$intersect.Sort,'_`,_['_`[_`][''_;_.Sort,'_`,_[''E:Qid.Variable, ''S:QidSet.Variable]],''S':QidSet.Variable,''A:QidSet.Variable]],'_`[_`][ ''$intersect.Sort,'_`,_[''S:QidSet.Variable,''S':QidSet.Variable,'_`[_`][ ''if_then_else_fi.Sort,'_`,_['_`[_`][''_in_.Sort,'_`,_[''E:Qid.Variable, ''S':QidSet.Variable]],'_`[_`][''_;_.Sort,'_`,_[''E:Qid.Variable, ''A:QidSet.Variable]],''A:QidSet.Variable]]]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''$reverse.Sort,'_`,_[''nil.NatList.Constant, ''A:NatList.Variable]],''A:NatList.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''$reverse.Sort,'_`,_[''nil.TypeList.Constant, ''A:QidList.Variable]],''A:QidList.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''$reverse.Sort,'_`,_['_`[_`][''__.Sort,'_`,_[''E:Nat.Variable, ''L:NatList.Variable]],''A:NatList.Variable]],'_`[_`][''$reverse.Sort, '_`,_[''L:NatList.Variable,'_`[_`][''__.Sort,'_`,_[''E:Nat.Variable, ''A:NatList.Variable]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''$reverse.Sort,'_`,_['_`[_`][''__.Sort,'_`,_[''E:Qid.Variable, ''L:QidList.Variable]],''A:QidList.Variable]],'_`[_`][''$reverse.Sort, '_`,_[''L:QidList.Variable,'_`[_`][''__.Sort,'_`,_[''E:Qid.Variable, ''A:QidList.Variable]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][''$size.Sort, '_`,_[''nil.NatList.Constant,''C:Nat.Variable]],''C:Nat.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''$size.Sort,'_`,_[ ''nil.TypeList.Constant,''C:Nat.Variable]],''C:Nat.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''$size.Sort,'_`,_['_`[_`][''__.Sort,'_`,_[ ''E:Nat.Variable,''L:NatList.Variable]],''C:Nat.Variable]],'_`[_`][ ''$size.Sort,'_`,_[''L:NatList.Variable,'_`[_`][''_+_.Sort,'_`,_[ ''C:Nat.Variable,'_`[_`][''s_.Sort,''0.Zero.Constant]]]]],'none.AttrSet], 'eq_=_`[_`].['_`[_`][''$size.Sort,'_`,_['_`[_`][''__.Sort,'_`,_[ ''E:Qid.Variable,''L:QidList.Variable]],''C:Nat.Variable]],'_`[_`][ ''$size.Sort,'_`,_[''L:QidList.Variable,'_`[_`][''_+_.Sort,'_`,_[ ''C:Nat.Variable,'_`[_`][''s_.Sort,''0.Zero.Constant]]]]],'none.AttrSet], 'eq_=_`[_`].['_`[_`][''_;_.Sort,'_`,_[''A:Assignment.Variable, ''A:Assignment.Variable]],''A:Assignment.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''_;_.Sort,'_`,_[''N:NeQidSet.Variable, ''N:NeQidSet.Variable]],''N:NeQidSet.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''_;_.Sort,'_`,_[''T:TypeList.Variable,''T:TypeList.Variable]], ''T:TypeList.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''_\_.Sort,'_`,_[ ''S:QidSet.Variable,''N:NeQidSet.Variable]],'_`[_`][''$diff.Sort,'_`,_[ ''S:QidSet.Variable,''N:NeQidSet.Variable,''none.EmptyQidSet.Constant]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''_\_.Sort,'_`,_[''S:QidSet.Variable, ''none.EmptyQidSet.Constant]],''S:QidSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''__.Sort,'_`,_[''A:Attr.Variable,''A:Attr.Variable]], ''A:Attr.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''__.Sort,'_`,_[ ''D:StratDefinition.Variable,''D:StratDefinition.Variable]], ''D:StratDefinition.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''__.Sort, '_`,_[''E:Equation.Variable,''E:Equation.Variable]],''E:Equation.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''__.Sort,'_`,_[''M:MembAx.Variable, ''M:MembAx.Variable]],''M:MembAx.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''__.Sort,'_`,_[''O:OpDecl.Variable,''O:OpDecl.Variable]], ''O:OpDecl.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''__.Sort,'_`,_[ ''O:OpMapping.Variable,''O:OpMapping.Variable]],''O:OpMapping.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''__.Sort,'_`,_[''O:StratDecl.Variable, ''O:StratDecl.Variable]],''O:StratDecl.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''__.Sort,'_`,_[''R:Rule.Variable,''R:Rule.Variable]], ''R:Rule.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''__.Sort,'_`,_[ ''S:SortMapping.Variable,''S:SortMapping.Variable]], ''S:SortMapping.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''__.Sort, '_`,_[''S:StratMapping.Variable,''S:StratMapping.Variable]], ''S:StratMapping.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''__.Sort, '_`,_[''S:SubsortDecl.Variable,''S:SubsortDecl.Variable]], ''S:SubsortDecl.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''_`,_.Qid, '_`,_[''U:UsingPair.Variable,''U:UsingPair.Variable]], ''U:UsingPair.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''_and-then_.Sort,'_`,_[''false.Bool.Constant,''B:`[Bool`].Variable]], ''false.Bool.Constant,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''_and-then_.Sort,'_`,_[''true.Bool.Constant,''B:`[Bool`].Variable]], ''B:`[Bool`].Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''_and_.Sort, '_`,_[''A:Bool.Variable,''A:Bool.Variable]],''A:Bool.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''_and_.Sort,'_`,_[''A:Bool.Variable, '_`[_`][''_xor_.Sort,'_`,_[''B:Bool.Variable,''C:Bool.Variable]]]],'_`[_`][ ''_xor_.Sort,'_`,_['_`[_`][''_and_.Sort,'_`,_[''A:Bool.Variable, ''B:Bool.Variable]],'_`[_`][''_and_.Sort,'_`,_[''A:Bool.Variable, ''C:Bool.Variable]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][''_and_.Sort, '_`,_[''false.Bool.Constant,''A:Bool.Variable]],''false.Bool.Constant, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''_and_.Sort,'_`,_[ ''true.Bool.Constant,''A:Bool.Variable]],''A:Bool.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''_implies_.Sort,'_`,_[''A:Bool.Variable, ''B:Bool.Variable]],'_`[_`][''not_.Sort,'_`[_`][''_xor_.Sort,'_`,_[ ''A:Bool.Variable,'_`[_`][''_and_.Sort,'_`,_[''A:Bool.Variable, ''B:Bool.Variable]]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][''_in_.Sort, '_`,_[''E:Qid.Variable,''S:QidSet.Variable]],''false.Bool.Constant, 'owise.Attr],'eq_=_`[_`].['_`[_`][''_in_.Sort,'_`,_[''E:Qid.Variable, '_`[_`][''_;_.Sort,'_`,_[''E:Qid.Variable,''S:QidSet.Variable]]]], ''true.Bool.Constant,'none.AttrSet],'eq_=_`[_`].['_`[_`][''_or-else_.Sort, '_`,_[''false.Bool.Constant,''B:`[Bool`].Variable]],''B:`[Bool`].Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''_or-else_.Sort,'_`,_[ ''true.Bool.Constant,''B:`[Bool`].Variable]],''true.Bool.Constant, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''_or_.Sort,'_`,_[''A:Bool.Variable, ''B:Bool.Variable]],'_`[_`][''_xor_.Sort,'_`,_['_`[_`][''_and_.Sort,'_`,_[ ''A:Bool.Variable,''B:Bool.Variable]],'_`[_`][''_xor_.Sort,'_`,_[ ''A:Bool.Variable,''B:Bool.Variable]]]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''_psubset_.Sort,'_`,_[''S:QidSet.Variable,''S':QidSet.Variable]], '_`[_`][''_and-then_.Sort,'_`,_['_`[_`][''_=/=_.Sort,'_`,_[ ''S:QidSet.Variable,''S':QidSet.Variable]],'_`[_`][''_subset_.Sort,'_`,_[ ''S:QidSet.Variable,''S':QidSet.Variable]]]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''_subset_.Sort,'_`,_[''none.EmptyQidSet.Constant, ''S':QidSet.Variable]],''true.Bool.Constant,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''_subset_.Sort,'_`,_['_`[_`][''_;_.Sort,'_`,_[''E:Qid.Variable, ''S:QidSet.Variable]],''S':QidSet.Variable]],'_`[_`][''_and-then_.Sort, '_`,_['_`[_`][''_in_.Sort,'_`,_[''E:Qid.Variable,''S':QidSet.Variable]], '_`[_`][''_subset_.Sort,'_`,_[''S:QidSet.Variable,''S':QidSet.Variable]]]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''_xor_.Sort,'_`,_[''A:Bool.Variable, ''A:Bool.Variable]],''false.Bool.Constant,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''_xor_.Sort,'_`,_[''false.Bool.Constant,''A:Bool.Variable]], ''A:Bool.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''`[_`].Kind, ''Q:Qid.Variable],'_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[ ''Q:Qid.Variable,'_`[_`][''including_..Qid,''Q:Qid.Variable], ''none.EmptyQidSet.Constant,''none.SubsortDeclSet.Constant, ''none.OpDeclSet.Constant,''none.MembAxSet.Constant, ''none.EquationSet.Constant,''none.RuleSet.Constant, ''none.StratDeclSet.Constant,''none.StratDefSet.Constant]],'none.AttrSet], 'eq_=_`[_`].['_`[_`][''append.Sort,'_`,_[''A:NatList.Variable, ''L:NatList.Variable]],'_`[_`][''__.Sort,'_`,_[''A:NatList.Variable, ''L:NatList.Variable]],'none.AttrSet],'eq_=_`[_`].['_`[_`][''append.Sort, '_`,_[''A:QidList.Variable,''L:QidList.Variable]],'_`[_`][''__.Sort,'_`,_[ ''A:QidList.Variable,''L:QidList.Variable]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''applySubstitution.Sort,'_`,_[''M:Module.Variable, ''T:Term.Variable,''S:Substitution.Variable]],'_`[_`][''getTerm.Sort, '_`[_`][''metaNormalize.Sort,'_`,_[''M:Module.Variable,'_`[_`][ ''$applySubstitution.Sort,'_`,_[''T:Term.Variable, ''S:Substitution.Variable]]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''delete.Sort,'_`,_[''E:Qid.Variable,''S:QidSet.Variable]], ''S:QidSet.Variable,'owise.Attr],'eq_=_`[_`].['_`[_`][''delete.Sort,'_`,_[ ''E:Qid.Variable,'_`[_`][''_;_.Sort,'_`,_[''E:Qid.Variable, ''S:QidSet.Variable]]]],'_`[_`][''delete.Sort,'_`,_[''E:Qid.Variable, ''S:QidSet.Variable]],'none.AttrSet],'eq_=_`[_`].['_`[_`][''front.Sort, '_`[_`][''__.Sort,'_`,_[''L:NatList.Variable,''E:Nat.Variable]]], ''L:NatList.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''front.Sort, '_`[_`][''__.Sort,'_`,_[''L:QidList.Variable,''E:Qid.Variable]]], ''L:QidList.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getAccumulatedSubstitution.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`,_`}.Qid, '_`,_[''C:Context.Variable,''L:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable,''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable]]],''A:Substitution.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getAccumulatedSubstitution.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable,''SV:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable]]],''A:Substitution.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''getContext.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[ ''C:Context.Variable,''L:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable,''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable]]],''C:Context.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getContext.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''C:Context.Variable,''L:Qid.Variable,''TS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''C:Context.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getContext.Sort,'_`[_`][ ''`{_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''S:Substitution.Variable,''C:Context.Variable]]],''C:Context.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getContext.Sort,'_`[_`][ ''`{_`,_`}.Qid,'_`,_[''S:Substitution.Variable,''C:Context.Variable]]], ''C:Context.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getEqs.Sort, '_`[_`][''fmod_is_sorts_.____endfm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''EQS:EquationSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getEqs.Sort,'_`[_`][''fth_is_sorts_.____endfth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''EQS:EquationSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getEqs.Sort,'_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[ ''H:Header.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''EQS:EquationSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getEqs.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''EQS:EquationSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getEqs.Sort,'_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''EQS:EquationSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getEqs.Sort,'_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''EQS:EquationSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getFrom.Sort,'_`[_`][''view_from_to_is___endv.Sort, '_`,_[''Q:Qid.Variable,''ME:ModuleExpression.Variable, ''ME':ModuleExpression.Variable,''SMS:SortMappingSet.Variable, ''OMS:OpMappingSet.Variable,''TMS:StratMappingSet.Variable]]], ''ME:ModuleExpression.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getImports.Sort,'_`[_`][''fmod_is_sorts_.____endfm.Constant,'_`,_[ ''H:Header.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''IL:ImportList.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getImports.Sort,'_`[_`][''fth_is_sorts_.____endfth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''IL:ImportList.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getImports.Sort,'_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[ ''H:Header.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''IL:ImportList.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getImports.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''IL:ImportList.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getImports.Sort,'_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''IL:ImportList.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getImports.Sort,'_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''IL:ImportList.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getInitialSubstitution.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''S:Substitution.Variable,''T:NarrowingTrace.Variable, ''U:Substitution.Variable,''UV:Qid.Variable]]],''S:Substitution.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getInitialTerm.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''S:Substitution.Variable,''T:NarrowingTrace.Variable, ''U:Substitution.Variable,''UV:Qid.Variable]]],''T:Term.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getInitialType.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''S:Substitution.Variable,''T:NarrowingTrace.Variable, ''U:Substitution.Variable,''UV:Qid.Variable]]],''T:Type.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getLabel.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''C:Context.Variable,''L:Qid.Variable, ''U:Substitution.Variable,''UV:Qid.Variable,''T:Term.Variable, ''T:Type.Variable,''A:Substitution.Variable]]],''L:Qid.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getLabel.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''C:Context.Variable,''L:Qid.Variable,''TS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''L:Qid.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getLhsSubstitution.Sort,'_`[_`][ ''`{_`,_`,_`}.Qid,'_`,_[''LS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''LS:Substitution.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getMbs.Sort,'_`[_`][ ''fmod_is_sorts_.____endfm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''MAS:MembAxSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getMbs.Sort, '_`[_`][''fth_is_sorts_.____endfth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''MAS:MembAxSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getMbs.Sort, '_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''MAS:MembAxSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getMbs.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''MAS:MembAxSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getMbs.Sort, '_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''MAS:MembAxSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getMbs.Sort, '_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''MAS:MembAxSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getMoreVariantsInLayerFlag.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''S:Substitution.Variable, ''Q:Qid.Variable,''P:Parent.Variable,''B:Bool.Variable]]], ''B:Bool.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getName.Sort, ''C:Constant.Variable],'_`[_`][''qid.Sort,'_`[_`][''substr.Sort,'_`,_[ '_`[_`][''string.Sort,''C:Constant.Variable],''0.Zero.Constant,'_`[_`][ ''rfind.Sort,'_`,_['_`[_`][''string.Sort,''C:Constant.Variable], ''".".Char.Constant,'_`[_`][''length.Sort,'_`[_`][''string.Sort, ''C:Constant.Variable]]]]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getName.Sort,''V:Variable.Variable],'_`[_`][''qid.Sort,'_`[_`][ ''substr.Sort,'_`,_['_`[_`][''string.Sort,''V:Variable.Variable], ''0.Zero.Constant,'_`[_`][''rfind.Sort,'_`,_['_`[_`][''string.Sort, ''V:Variable.Variable],''":".Char.Constant,'_`[_`][''length.Sort,'_`[_`][ ''string.Sort,''V:Variable.Variable]]]]]]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''getName.Sort,'_`[_`][''fmod_is_sorts_.____endfm.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]],''Q:Qid.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getName.Sort,'_`[_`][ ''fmod_is_sorts_.____endfm.Constant,'_`,_['_`[_`][''_`{_`}.Sort,'_`,_[ ''Q:Qid.Variable,''PDL:ParameterDeclList.Variable]], ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]],''Q:Qid.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getName.Sort,'_`[_`][ ''fth_is_sorts_.____endfth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]],''Q:Qid.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getName.Sort,'_`[_`][ ''mod_is_sorts_._____endm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''Q:Qid.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''getName.Sort,'_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[ '_`[_`][''_`{_`}.Sort,'_`,_[''Q:Qid.Variable, ''PDL:ParameterDeclList.Variable]],''IL:ImportList.Variable, ''SS:SortSet.Variable,''SSDS:SubsortDeclSet.Variable, ''OPDS:OpDeclSet.Variable,''MAS:MembAxSet.Variable, ''EQS:EquationSet.Variable,''RLS:RuleSet.Variable]]],''Q:Qid.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getName.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''Q:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getName.Sort, '_`[_`][''smod_is_sorts_._______endsm.Constant,'_`,_['_`[_`][''_`{_`}.Sort, '_`,_[''Q:Qid.Variable,''PDL:ParameterDeclList.Variable]], ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''Q:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getName.Sort, '_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''Q:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getName.Sort, '_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''Q:Qid.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''getName.Sort,'_`[_`][''view_from_to_is___endv.Sort,'_`,_[ ''Q:Qid.Variable,''ME:ModuleExpression.Variable, ''ME':ModuleExpression.Variable,''SMS:SortMappingSet.Variable, ''OMS:OpMappingSet.Variable,''TMS:StratMappingSet.Variable]]], ''Q:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getName.Sort, '_`[_`][''view_from_to_is___endv.Sort,'_`,_['_`[_`][''_`{_`}.Sort,'_`,_[ ''Q:Qid.Variable,''PDL:ParameterDeclList.Variable]], ''ME:ModuleExpression.Variable,''ME':ModuleExpression.Variable, ''SMS:SortMappingSet.Variable,''OMS:OpMappingSet.Variable, ''TMS:StratMappingSet.Variable]]],''Q:Qid.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getOpMappings.Sort,'_`[_`][ ''view_from_to_is___endv.Sort,'_`,_[''Q:Qid.Variable, ''ME:ModuleExpression.Variable,''ME':ModuleExpression.Variable, ''SMS:SortMappingSet.Variable,''OMS:OpMappingSet.Variable, ''TMS:StratMappingSet.Variable]]],''OMS:OpMappingSet.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getOps.Sort,'_`[_`][ ''fmod_is_sorts_.____endfm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''OPDS:OpDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getOps.Sort,'_`[_`][''fth_is_sorts_.____endfth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''OPDS:OpDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getOps.Sort,'_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[ ''H:Header.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''OPDS:OpDeclSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getOps.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''OPDS:OpDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getOps.Sort,'_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''OPDS:OpDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getOps.Sort,'_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''OPDS:OpDeclSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getParent.Sort,'_`[_`][''`{_`,_`,_`,_`,_`}.Qid, '_`,_[''T:Term.Variable,''S:Substitution.Variable,''Q:Qid.Variable, ''P:Parent.Variable,''B:Bool.Variable]]],''P:Parent.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getRhsSubstitution.Sort,'_`[_`][ ''`{_`,_`,_`}.Qid,'_`,_[''LS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''RS:Substitution.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getRls.Sort,'_`[_`][ ''fmod_is_sorts_.____endfm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''none.RuleSet.Constant,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getRls.Sort, '_`[_`][''fth_is_sorts_.____endfth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''none.RuleSet.Constant,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getRls.Sort, '_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''RLS:RuleSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getRls.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''RLS:RuleSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getRls.Sort, '_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''RLS:RuleSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getRls.Sort, '_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''RLS:RuleSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getRule.Sort,'_`[_`][''`{_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''T:Type.Variable,''R:Rule.Variable]]],''R:Rule.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getRuleSubstitution.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''C:Context.Variable,''L:Qid.Variable,''TS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''RS:Substitution.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getSds.Sort,'_`[_`][ ''fmod_is_sorts_.____endfm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''none.StratDefSet.Constant,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSds.Sort,'_`[_`][''fth_is_sorts_.____endfth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''none.StratDefSet.Constant,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSds.Sort,'_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[ ''H:Header.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''none.StratDefSet.Constant,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getSds.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''STDFS:StratDefSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSds.Sort,'_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''STDFS:StratDefSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSds.Sort,'_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''none.StratDefSet.Constant,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getSortMappings.Sort,'_`[_`][ ''view_from_to_is___endv.Sort,'_`,_[''Q:Qid.Variable, ''ME:ModuleExpression.Variable,''ME':ModuleExpression.Variable, ''SMS:SortMappingSet.Variable,''OMS:OpMappingSet.Variable, ''TMS:StratMappingSet.Variable]]],''SMS:SortMappingSet.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getSorts.Sort,'_`[_`][ ''fmod_is_sorts_.____endfm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''SS:SortSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getSorts.Sort, '_`[_`][''fth_is_sorts_.____endfth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''SS:SortSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getSorts.Sort, '_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''SS:SortSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getSorts.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''SS:SortSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getSorts.Sort, '_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''SS:SortSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getSorts.Sort, '_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''SS:SortSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getStateVariableFamily.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable,''SV:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable]]],''SV:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getStratMappings.Sort,'_`[_`][''view_from_to_is___endv.Sort,'_`,_[ ''Q:Qid.Variable,''ME:ModuleExpression.Variable, ''ME':ModuleExpression.Variable,''SMS:SortMappingSet.Variable, ''OMS:OpMappingSet.Variable,''TMS:StratMappingSet.Variable]]], ''TMS:StratMappingSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getStrats.Sort,'_`[_`][''fmod_is_sorts_.____endfm.Constant,'_`,_[ ''H:Header.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''none.StratDeclSet.Constant,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getStrats.Sort,'_`[_`][''fth_is_sorts_.____endfth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''none.StratDeclSet.Constant,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getStrats.Sort,'_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[ ''H:Header.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''none.StratDeclSet.Constant,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getStrats.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''STDS:StratDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getStrats.Sort,'_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''STDS:StratDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getStrats.Sort,'_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''none.StratDeclSet.Constant,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getSubsorts.Sort,'_`[_`][ ''fmod_is_sorts_.____endfm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''SSDS:SubsortDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSubsorts.Sort,'_`[_`][''fth_is_sorts_.____endfth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''SSDS:SubsortDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSubsorts.Sort,'_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[ ''H:Header.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''SSDS:SubsortDeclSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getSubsorts.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''SSDS:SubsortDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSubsorts.Sort,'_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''SSDS:SubsortDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSubsorts.Sort,'_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''SSDS:SubsortDeclSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getSubstitution.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''S:Substitution.Variable, ''Q:Qid.Variable,''P:Parent.Variable,''B:Bool.Variable]]], ''S:Substitution.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSubstitution.Sort,'_`[_`][''`{_`,_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''T:Type.Variable,''S:Substitution.Variable, ''C:Context.Variable]]],''S:Substitution.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getSubstitution.Sort,'_`[_`][''`{_`,_`,_`}.Qid, '_`,_[''T:Term.Variable,''T:Type.Variable,''S:Substitution.Variable]]], ''S:Substitution.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSubstitution.Sort,'_`[_`][''`{_`,_`}.Qid,'_`,_[ ''S:Substitution.Variable,''C:Context.Variable]]], ''S:Substitution.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSubstitution.Sort,'_`[_`][''`{_`,_`}.Qid,'_`,_[ ''S:Substitution.Variable,''V:Qid.Variable]]],''S:Substitution.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTerm.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''C:Context.Variable,''L:Qid.Variable, ''U:Substitution.Variable,''UV:Qid.Variable,''T:Term.Variable, ''T:Type.Variable,''A:Substitution.Variable]]],''T:Term.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTerm.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''C:Context.Variable,''L:Qid.Variable,''TS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''T:Term.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTerm.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable,''SV:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable]]],''T:Term.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getTerm.Sort,'_`[_`][''`{_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable, ''S:Substitution.Variable,''Q:Qid.Variable,''P:Parent.Variable, ''B:Bool.Variable]]],''T:Term.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getTerm.Sort,'_`[_`][''`{_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable, ''T:Type.Variable,''S:Substitution.Variable,''C:Context.Variable]]], ''T:Term.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTerm.Sort, '_`[_`][''`{_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''R:Rule.Variable]]],''T:Term.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getTerm.Sort,'_`[_`][''`{_`,_`,_`}.Qid,'_`,_[''T:Term.Variable, ''T:Type.Variable,''S:Substitution.Variable]]],''T:Term.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTerm.Sort,'_`[_`][''`{_`,_`}.Qid, '_`,_[''T:Term.Variable,''T:Type.Variable]]],''T:Term.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTermSubstitution.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''C:Context.Variable,''L:Qid.Variable,''TS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''TS:Substitution.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTo.Sort,'_`[_`][ ''view_from_to_is___endv.Sort,'_`,_[''Q:Qid.Variable, ''ME:ModuleExpression.Variable,''ME':ModuleExpression.Variable, ''SMS:SortMappingSet.Variable,''OMS:OpMappingSet.Variable, ''TMS:StratMappingSet.Variable]]],''ME':ModuleExpression.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTrace.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''S:Substitution.Variable,''T:NarrowingTrace.Variable, ''U:Substitution.Variable,''UV:Qid.Variable]]],''T:NarrowingTrace.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getType.Sort,''C:Constant.Variable], '_`[_`][''qid.Sort,'_`[_`][''substr.Sort,'_`,_['_`[_`][''string.Sort, ''C:Constant.Variable],'_`[_`][''_+_.Sort,'_`,_['_`[_`][''s_.Sort, ''0.Zero.Constant],'_`[_`][''rfind.Sort,'_`,_['_`[_`][''string.Sort, ''C:Constant.Variable],''".".Char.Constant,'_`[_`][''length.Sort,'_`[_`][ ''string.Sort,''C:Constant.Variable]]]]]],'_`[_`][''length.Sort,'_`[_`][ ''string.Sort,''C:Constant.Variable]]]]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''getType.Sort,''V:Variable.Variable],'_`[_`][''qid.Sort,'_`[_`][ ''substr.Sort,'_`,_['_`[_`][''string.Sort,''V:Variable.Variable],'_`[_`][ ''_+_.Sort,'_`,_['_`[_`][''s_.Sort,''0.Zero.Constant],'_`[_`][''rfind.Sort, '_`,_['_`[_`][''string.Sort,''V:Variable.Variable],''":".Char.Constant, '_`[_`][''length.Sort,'_`[_`][''string.Sort,''V:Variable.Variable]]]]]], '_`[_`][''length.Sort,'_`[_`][''string.Sort,''V:Variable.Variable]]]]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getType.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''C:Context.Variable,''L:Qid.Variable, ''U:Substitution.Variable,''UV:Qid.Variable,''T:Term.Variable, ''T:Type.Variable,''A:Substitution.Variable]]],''T:Type.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getType.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''C:Context.Variable,''L:Qid.Variable,''TS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''T:Type.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getType.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable,''SV:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable]]],''T:Type.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getType.Sort,'_`[_`][''`{_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable, ''T:Type.Variable,''S:Substitution.Variable,''C:Context.Variable]]], ''T:Type.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getType.Sort, '_`[_`][''`{_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''R:Rule.Variable]]],''T:Type.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getType.Sort,'_`[_`][''`{_`,_`,_`}.Qid,'_`,_[''T:Term.Variable, ''T:Type.Variable,''S:Substitution.Variable]]],''T:Type.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getType.Sort,'_`[_`][''`{_`,_`}.Qid, '_`,_[''T:Term.Variable,''T:Type.Variable]]],''T:Type.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getUnifier.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''C:Context.Variable,''L:Qid.Variable, ''U:Substitution.Variable,''UV:Qid.Variable,''T:Term.Variable, ''T:Type.Variable,''A:Substitution.Variable]]],''U:Substitution.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getUnifier.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable,''SV:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable]]],''U:Substitution.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''getUnifier.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''T:Type.Variable,''S:Substitution.Variable, ''T:NarrowingTrace.Variable,''U:Substitution.Variable,''UV:Qid.Variable]]], ''U:Substitution.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getUnifierVariableFamily.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`,_`}.Qid, '_`,_[''C:Context.Variable,''L:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable,''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable]]],''UV:Qid.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''getUnifierVariableFamily.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`}.Qid, '_`,_[''T:Term.Variable,''T:Type.Variable,''A:Substitution.Variable, ''SV:Qid.Variable,''U:Substitution.Variable,''UV:Qid.Variable]]], ''UV:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getUnifierVariableFamily.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''T:Type.Variable,''S:Substitution.Variable, ''T:NarrowingTrace.Variable,''U:Substitution.Variable,''UV:Qid.Variable]]], ''UV:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getVariableFamily.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''T:Type.Variable,''C:Context.Variable,''L:Qid.Variable, ''TS:Substitution.Variable,''RS:Substitution.Variable,''V:Qid.Variable]]], ''V:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getVariableFamily.Sort,'_`[_`][''`{_`,_`,_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''S:Substitution.Variable,''Q:Qid.Variable, ''P:Parent.Variable,''B:Bool.Variable]]],''Q:Qid.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getVariableFamily.Sort,'_`[_`][''`{_`,_`,_`}.Qid, '_`,_[''LS:Substitution.Variable,''RS:Substitution.Variable, ''V:Qid.Variable]]],''V:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getVariableFamily.Sort,'_`[_`][''`{_`,_`}.Qid,'_`,_[ ''S:Substitution.Variable,''V:Qid.Variable]]],''V:Qid.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''head.Sort,'_`[_`][''__.Sort,'_`,_[ ''E:Nat.Variable,''L:NatList.Variable]]],''E:Nat.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''head.Sort,'_`[_`][''__.Sort,'_`,_[''E:Qid.Variable, ''L:QidList.Variable]]],''E:Qid.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''insert.Sort,'_`,_[''E:Qid.Variable,''S:QidSet.Variable]],'_`[_`][ ''_;_.Sort,'_`,_[''E:Qid.Variable,''S:QidSet.Variable]],'none.AttrSet], 'eq_=_`[_`].['_`[_`][''intersection.Sort,'_`,_[''S:QidSet.Variable, ''N:NeQidSet.Variable]],'_`[_`][''$intersect.Sort,'_`,_[ ''S:QidSet.Variable,''N:NeQidSet.Variable,''none.EmptyQidSet.Constant]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''intersection.Sort,'_`,_[ ''S:QidSet.Variable,''none.EmptyQidSet.Constant]], ''none.EmptyQidSet.Constant,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''last.Sort,'_`[_`][''__.Sort,'_`,_[''L:NatList.Variable, ''E:Nat.Variable]]],''E:Nat.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''last.Sort,'_`[_`][''__.Sort,'_`,_[''L:QidList.Variable, ''E:Qid.Variable]]],''E:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''metaNarrowingApply.Sort,'_`,_[''M:Module.Variable,''T:Term.Variable, ''TL:TermList.Variable,''Q:Qid.Variable,''N:Nat.Variable]],'_`[_`][ ''metaNarrowingApply.Sort,'_`,_[''M:Module.Variable,''T:Term.Variable, ''TL:TermList.Variable,''Q:Qid.Variable,''none.VariantOptionSet.Constant, ''N:Nat.Variable]],'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''metaNarrowingSearch.Sort,'_`,_[''M:Module.Variable,''T:Term.Variable, ''T2:Term.Variable,''S:Qid.Variable,''B:Bound.Variable,''F:Qid.Variable, ''N:Nat.Variable]],'_`[_`][''metaNarrowingSearch.Sort,'_`,_[ ''M:Module.Variable,''T:Term.Variable,''T2:Term.Variable,''S:Qid.Variable, ''B:Bound.Variable,''F:Qid.Variable,''none.VariantOptionSet.Constant, ''N:Nat.Variable]],'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''metaNarrowingSearchPath.Sort,'_`,_[''M:Module.Variable,''T:Term.Variable, ''T2:Term.Variable,''S:Qid.Variable,''B:Bound.Variable,''F:Qid.Variable, ''N:Nat.Variable]],'_`[_`][''metaNarrowingSearchPath.Sort,'_`,_[ ''M:Module.Variable,''T:Term.Variable,''T2:Term.Variable,''S:Qid.Variable, ''B:Bound.Variable,''F:Qid.Variable,''none.VariantOptionSet.Constant, ''N:Nat.Variable]],'none.AttrSet],'eq_=_`[_`].['_`[_`][''metaParse.Sort, '_`,_[''M:Module.Variable,''Q:QidList.Variable,''T:Type?.Variable]], '_`[_`][''metaParse.Sort,'_`,_[''M:Module.Variable, ''none.EmptyQidSet.Constant,''Q:QidList.Variable,''T:Type?.Variable]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''metaPrettyPrint.Sort,'_`,_[ ''M:Module.Variable,''T:Term.Variable]],'_`[_`][''metaPrettyPrint.Sort, '_`,_[''M:Module.Variable,''none.EmptyQidSet.Constant,''T:Term.Variable, '_`[_`][''__.Sort,'_`,_[''mixfix.PrintOption.Constant,'_`[_`][''__.Sort, '_`,_[''flat.PrintOption.Constant,'_`[_`][''__.Sort,'_`,_[ ''format.PrintOption.Constant,'_`[_`][''__.Sort,'_`,_[ ''number.PrintOption.Constant,''rat.PrintOption.Constant]]]]]]]]]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''metaPrettyPrint.Sort,'_`,_[ ''M:Module.Variable,''T:Term.Variable,''P:PrintOptionSet.Variable]], '_`[_`][''metaPrettyPrint.Sort,'_`,_[''M:Module.Variable, ''none.EmptyQidSet.Constant,''T:Term.Variable, ''P:PrintOptionSet.Variable]],'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''metaVariantDisjointUnify.Sort,'_`,_[''M:Module.Variable, ''U:UnificationProblem.Variable,''TL:TermList.Variable,''Q:Qid.Variable, ''N:Nat.Variable]],'_`[_`][''metaVariantDisjointUnify.Sort,'_`,_[ ''M:Module.Variable,''U:UnificationProblem.Variable,''TL:TermList.Variable, ''Q:Qid.Variable,''none.VariantOptionSet.Constant,''N:Nat.Variable]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''metaVariantUnify.Sort,'_`,_[ ''M:Module.Variable,''U:UnificationProblem.Variable,''TL:TermList.Variable, ''Q:Qid.Variable,''N:Nat.Variable]],'_`[_`][''metaVariantUnify.Sort,'_`,_[ ''M:Module.Variable,''U:UnificationProblem.Variable,''TL:TermList.Variable, ''Q:Qid.Variable,''none.VariantOptionSet.Constant,''N:Nat.Variable]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''not_.Sort,''A:Bool.Variable],'_`[_`][ ''_xor_.Sort,'_`,_[''true.Bool.Constant,''A:Bool.Variable]],'none.AttrSet], 'eq_=_`[_`].['_`[_`][''occurs.Sort,'_`,_[''E:Nat.Variable, ''nil.NatList.Constant]],''false.Bool.Constant,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''occurs.Sort,'_`,_[''E:Nat.Variable,'_`[_`][''__.Sort,'_`,_[ ''E':Nat.Variable,''L:NatList.Variable]]]],'_`[_`][''if_then_else_fi.Sort, '_`,_['_`[_`][''_==_.Sort,'_`,_[''E:Nat.Variable,''E':Nat.Variable]], ''true.Bool.Constant,'_`[_`][''occurs.Sort,'_`,_[''E:Nat.Variable, ''L:NatList.Variable]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][''occurs.Sort, '_`,_[''E:Qid.Variable,''nil.TypeList.Constant]],''false.Bool.Constant, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''occurs.Sort,'_`,_[''E:Qid.Variable, '_`[_`][''__.Sort,'_`,_[''E':Qid.Variable,''L:QidList.Variable]]]],'_`[_`][ ''if_then_else_fi.Sort,'_`,_['_`[_`][''_==_.Sort,'_`,_[''E:Qid.Variable, ''E':Qid.Variable]],''true.Bool.Constant,'_`[_`][''occurs.Sort,'_`,_[ ''E:Qid.Variable,''L:QidList.Variable]]]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''reverse.Sort,''L:NatList.Variable],'_`[_`][''$reverse.Sort,'_`,_[ ''L:NatList.Variable,''nil.NatList.Constant]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''reverse.Sort,''L:QidList.Variable],'_`[_`][''$reverse.Sort,'_`,_[ ''L:QidList.Variable,''nil.TypeList.Constant]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''size.Sort,''L:NatList.Variable],'_`[_`][''$size.Sort,'_`,_[ ''L:NatList.Variable,''0.Zero.Constant]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''size.Sort,''L:QidList.Variable],'_`[_`][''$size.Sort,'_`,_[ ''L:QidList.Variable,''0.Zero.Constant]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''tail.Sort,'_`[_`][''__.Sort,'_`,_[''E:Nat.Variable, ''L:NatList.Variable]]],''L:NatList.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''tail.Sort,'_`[_`][''__.Sort,'_`,_[''E:Qid.Variable, ''L:QidList.Variable]]],''L:QidList.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''union.Sort,'_`,_[''S:QidSet.Variable,''S':QidSet.Variable]], '_`[_`][''_;_.Sort,'_`,_[''S:QidSet.Variable,''S':QidSet.Variable]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''|_|.Sort,''S:QidSet.Variable], '_`[_`][''$card.Sort,'_`,_[''S:QidSet.Variable,''0.Zero.Constant]], 'none.AttrSet]]],'FModule} ========================================== reduce in META-LEVEL : upTerm(upModule('META-LEVEL, true)) . rewrites: 3 result GroundTerm: 'fmod_is_sorts_.____endfm[''META-LEVEL.Sort,'nil.ImportList, '_;_[''Assignment.Sort,''Attr.Sort,''AttrSet.Sort,''Bool.Sort,''Bound.Sort, ''CallStrategy.Sort,''Char.Sort,''Condition.Sort,''Constant.Sort, ''Context.Sort,''EmptyCommaList.Sort,''EmptyQidSet.Sort,''EqCondition.Sort, ''Equation.Sort,''EquationSet.Sort,''Expression.Sort,''FModule.Sort, ''FTheory.Sort,''FindResult.Sort,''GTermList.Sort,''GroundTerm.Sort, ''GroundTermList.Sort,''Header.Sort,''Hook.Sort,''HookList.Sort, ''Import.Sort,''ImportList.Sort,''Kind.Sort,''KindSet.Sort, ''MatchOrUnificationPair.Sort,''MatchPair.Sort,''MatchPair?.Sort, ''MatchingProblem.Sort,''MembAx.Sort,''MembAxSet.Sort,''Module.Sort, ''ModuleExpression.Sort,''NarrowingApplyResult.Sort, ''NarrowingApplyResult?.Sort,''NarrowingSearchPathResult.Sort, ''NarrowingSearchPathResult?.Sort,''NarrowingSearchResult.Sort, ''NarrowingSearchResult?.Sort,''NarrowingStep.Sort,''NarrowingTrace.Sort, ''Nat.Sort,''NatList.Sort,''NeCTermList.Sort,''NeGroundTermList.Sort, ''NeHookList.Sort,''NeKindSet.Sort,''NeNatList.Sort, ''NeParameterDeclList.Sort,''NeParameterList.Sort,''NeQidList.Sort, ''NeQidSet.Sort,''NeSortSet.Sort,''NeTermList.Sort,''NeTypeList.Sort, ''NeTypeSet.Sort,''NeVariableSet.Sort,''NzNat.Sort,''OpDecl.Sort, ''OpDeclSet.Sort,''OpMapping.Sort,''OpMappingSet.Sort,''ParameterDecl.Sort, ''ParameterDeclList.Sort,''ParameterList.Sort,''Parent.Sort, ''PatternSubjectPair.Sort,''PrintOption.Sort,''PrintOptionSet.Sort, ''Qid.Sort,''QidList.Sort,''QidSet.Sort,''Renaming.Sort,''RenamingSet.Sort, ''Result4Tuple.Sort,''Result4Tuple?.Sort,''ResultPair.Sort, ''ResultPair?.Sort,''ResultTriple.Sort,''ResultTriple?.Sort,''Rule.Sort, ''RuleApplication.Sort,''RuleSet.Sort,''SModule.Sort,''STheory.Sort, ''SmtResult.Sort,''SmtResult?.Sort,''Sort.Sort,''SortMapping.Sort, ''SortMappingSet.Sort,''SortSet.Sort,''SrewriteOption.Sort, ''StratDecl.Sort,''StratDeclSet.Sort,''StratDefSet.Sort, ''StratDefinition.Sort,''StratMapping.Sort,''StratMappingSet.Sort, ''StratModule.Sort,''StratTheory.Sort,''Strategy.Sort,''Strategy?.Sort, ''StrategyList.Sort,''String.Sort,''SubsortDecl.Sort,''SubsortDeclSet.Sort, ''Substitution.Sort,''Substitution?.Sort,''Term.Sort,''TermList.Sort, ''TermQid.Sort,''Trace.Sort,''Trace?.Sort,''TraceStep.Sort,''Type.Sort, ''Type?.Sort,''TypeList.Sort,''TypeListSet.Sort,''TypeSet.Sort, ''UnificandPair.Sort,''UnificationPair.Sort,''UnificationPair?.Sort, ''UnificationProblem.Sort,''UnificationTriple.Sort, ''UnificationTriple?.Sort,''UsingPair.Sort,''UsingPairSet.Sort, ''Variable.Sort,''VariableSet.Sort,''Variant.Sort,''Variant?.Sort, ''VariantOption.Sort,''VariantOptionSet.Sort,''View.Sort, ''ViewExpression.Sort,''Zero.Sort],'__['subsort_<_.[''Assignment.Sort, ''Substitution.Sort],'subsort_<_.[''Attr.Sort,''AttrSet.Sort],'subsort_<_.[ ''CallStrategy.Sort,''Strategy.Sort],'subsort_<_.[''Char.Sort, ''String.Sort],'subsort_<_.[''Constant.Sort,''GroundTerm.Sort], 'subsort_<_.[''Constant.Sort,''TermQid.Sort],'subsort_<_.[''Context.Sort, ''NeCTermList.Sort],'subsort_<_.[''EmptyCommaList.Sort, ''GroundTermList.Sort],'subsort_<_.[''EmptyCommaList.Sort, ''ParameterList.Sort],'subsort_<_.[''EmptyQidSet.Sort,''KindSet.Sort], 'subsort_<_.[''EmptyQidSet.Sort,''SortSet.Sort],'subsort_<_.[ ''EmptyQidSet.Sort,''VariableSet.Sort],'subsort_<_.[''EqCondition.Sort, ''Condition.Sort],'subsort_<_.[''Equation.Sort,''EquationSet.Sort], 'subsort_<_.[''Expression.Sort,''ModuleExpression.Sort],'subsort_<_.[ ''Expression.Sort,''ViewExpression.Sort],'subsort_<_.[''FModule.Sort, ''SModule.Sort],'subsort_<_.[''FTheory.Sort,''STheory.Sort],'subsort_<_.[ ''GroundTerm.Sort,''NeGroundTermList.Sort],'subsort_<_.[''GroundTerm.Sort, ''Term.Sort],'subsort_<_.[''GroundTermList.Sort,''TermList.Sort], 'subsort_<_.[''Hook.Sort,''NeHookList.Sort],'subsort_<_.[''Import.Sort, ''ImportList.Sort],'subsort_<_.[''Kind.Sort,''NeKindSet.Sort],'subsort_<_.[ ''Kind.Sort,''Type.Sort],'subsort_<_.[''KindSet.Sort,''TypeSet.Sort], 'subsort_<_.[''MatchPair.Sort,''MatchOrUnificationPair.Sort],'subsort_<_.[ ''MatchPair.Sort,''MatchPair?.Sort],'subsort_<_.[''MembAx.Sort, ''MembAxSet.Sort],'subsort_<_.[''NarrowingApplyResult.Sort, ''NarrowingApplyResult?.Sort],'subsort_<_.[ ''NarrowingSearchPathResult.Sort,''NarrowingSearchPathResult?.Sort], 'subsort_<_.[''NarrowingSearchResult.Sort,''NarrowingSearchResult?.Sort], 'subsort_<_.[''NarrowingStep.Sort,''NarrowingTrace.Sort],'subsort_<_.[ ''Nat.Sort,''Bound.Sort],'subsort_<_.[''Nat.Sort,''FindResult.Sort], 'subsort_<_.[''Nat.Sort,''NeNatList.Sort],'subsort_<_.[''Nat.Sort, ''Parent.Sort],'subsort_<_.[''NeCTermList.Sort,''GTermList.Sort], 'subsort_<_.[''NeGroundTermList.Sort,''GroundTermList.Sort],'subsort_<_.[ ''NeGroundTermList.Sort,''NeTermList.Sort],'subsort_<_.[''NeHookList.Sort, ''HookList.Sort],'subsort_<_.[''NeKindSet.Sort,''KindSet.Sort], 'subsort_<_.[''NeKindSet.Sort,''NeTypeSet.Sort],'subsort_<_.[ ''NeNatList.Sort,''NatList.Sort],'subsort_<_.[''NeParameterDeclList.Sort, ''ParameterDeclList.Sort],'subsort_<_.[''NeParameterList.Sort, ''ParameterList.Sort],'subsort_<_.[''NeQidList.Sort,''QidList.Sort], 'subsort_<_.[''NeQidSet.Sort,''QidSet.Sort],'subsort_<_.[''NeSortSet.Sort, ''NeTypeSet.Sort],'subsort_<_.[''NeSortSet.Sort,''SortSet.Sort], 'subsort_<_.[''NeTermList.Sort,''TermList.Sort],'subsort_<_.[ ''NeTypeList.Sort,''NeQidList.Sort],'subsort_<_.[''NeTypeList.Sort, ''TypeList.Sort],'subsort_<_.[''NeTypeSet.Sort,''NeQidSet.Sort], 'subsort_<_.[''NeTypeSet.Sort,''TypeSet.Sort],'subsort_<_.[ ''NeVariableSet.Sort,''NeQidSet.Sort],'subsort_<_.[''NeVariableSet.Sort, ''VariableSet.Sort],'subsort_<_.[''NzNat.Sort,''Nat.Sort],'subsort_<_.[ ''OpDecl.Sort,''OpDeclSet.Sort],'subsort_<_.[''OpMapping.Sort, ''OpMappingSet.Sort],'subsort_<_.[''ParameterDecl.Sort, ''NeParameterDeclList.Sort],'subsort_<_.[''PatternSubjectPair.Sort, ''MatchingProblem.Sort],'subsort_<_.[''PrintOption.Sort, ''PrintOptionSet.Sort],'subsort_<_.[''Qid.Sort,''Header.Sort],'subsort_<_.[ ''Qid.Sort,''NeQidList.Sort],'subsort_<_.[''Qid.Sort,''NeQidSet.Sort], 'subsort_<_.[''Renaming.Sort,''RenamingSet.Sort],'subsort_<_.[ ''Result4Tuple.Sort,''Result4Tuple?.Sort],'subsort_<_.[''ResultPair.Sort, ''ResultPair?.Sort],'subsort_<_.[''ResultTriple.Sort,''ResultTriple?.Sort], 'subsort_<_.[''Rule.Sort,''RuleSet.Sort],'subsort_<_.[ ''RuleApplication.Sort,''Strategy.Sort],'subsort_<_.[''SModule.Sort, ''Module.Sort],'subsort_<_.[''STheory.Sort,''Module.Sort],'subsort_<_.[ ''SmtResult.Sort,''SmtResult?.Sort],'subsort_<_.[''Sort.Sort, ''Expression.Sort],'subsort_<_.[''Sort.Sort,''NeSortSet.Sort],'subsort_<_.[ ''Sort.Sort,''Type.Sort],'subsort_<_.[''SortMapping.Sort, ''SortMappingSet.Sort],'subsort_<_.[''SortSet.Sort,''TypeSet.Sort], 'subsort_<_.[''StratDecl.Sort,''StratDeclSet.Sort],'subsort_<_.[ ''StratDefinition.Sort,''StratDefSet.Sort],'subsort_<_.[ ''StratMapping.Sort,''StratMappingSet.Sort],'subsort_<_.[ ''StratModule.Sort,''Module.Sort],'subsort_<_.[''StratTheory.Sort, ''Module.Sort],'subsort_<_.[''Strategy.Sort,''Strategy?.Sort],'subsort_<_.[ ''Strategy.Sort,''StrategyList.Sort],'subsort_<_.[''SubsortDecl.Sort, ''SubsortDeclSet.Sort],'subsort_<_.[''Substitution.Sort, ''Substitution?.Sort],'subsort_<_.[''Term.Sort,''NeTermList.Sort], 'subsort_<_.[''TermList.Sort,''GTermList.Sort],'subsort_<_.[''TermQid.Sort, ''Qid.Sort],'subsort_<_.[''TermQid.Sort,''Term.Sort],'subsort_<_.[ ''Trace.Sort,''Trace?.Sort],'subsort_<_.[''TraceStep.Sort,''Trace.Sort], 'subsort_<_.[''Type.Sort,''NeTypeList.Sort],'subsort_<_.[''Type.Sort, ''NeTypeSet.Sort],'subsort_<_.[''Type.Sort,''Qid.Sort],'subsort_<_.[ ''Type.Sort,''Type?.Sort],'subsort_<_.[''TypeList.Sort,''QidList.Sort], 'subsort_<_.[''TypeList.Sort,''TypeListSet.Sort],'subsort_<_.[ ''TypeSet.Sort,''QidSet.Sort],'subsort_<_.[''TypeSet.Sort, ''TypeListSet.Sort],'subsort_<_.[''UnificandPair.Sort, ''UnificationProblem.Sort],'subsort_<_.[''UnificationPair.Sort, ''MatchOrUnificationPair.Sort],'subsort_<_.[''UnificationPair.Sort, ''UnificationPair?.Sort],'subsort_<_.[''UnificationTriple.Sort, ''UnificationTriple?.Sort],'subsort_<_.[''UsingPair.Sort, ''UsingPairSet.Sort],'subsort_<_.[''Variable.Sort,''NeVariableSet.Sort], 'subsort_<_.[''Variable.Sort,''TermQid.Sort],'subsort_<_.[ ''VariableSet.Sort,''QidSet.Sort],'subsort_<_.[''Variant.Sort, ''Variant?.Sort],'subsort_<_.[''VariantOption.Sort, ''VariantOptionSet.Sort],'subsort_<_.[''ViewExpression.Sort, ''NeParameterList.Sort],'subsort_<_.[''Zero.Sort,''Nat.Sort]],'__[ 'op_:_->_`[_`].[''$applySubstitution.Sort,'__[''NeTermList.Sort, ''Substitution.Sort],''Term.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''$card.Sort,'__[''QidSet.Sort,''Nat.Sort],''Nat.Sort,'none.AttrSet], 'op_:_->_`[_`].[''$diff.Sort,'__[''QidSet.Sort,''QidSet.Sort, ''QidSet.Sort],''QidSet.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''$intersect.Sort,'__[''QidSet.Sort,''QidSet.Sort,''QidSet.Sort], ''QidSet.Sort,'none.AttrSet],'op_:_->_`[_`].[''$reverse.Sort,'__[ ''NatList.Sort,''NatList.Sort],''NatList.Sort,'none.AttrSet], 'op_:_->_`[_`].[''$reverse.Sort,'__[''QidList.Sort,''QidList.Sort], ''QidList.Sort,'none.AttrSet],'op_:_->_`[_`].[''$size.Sort,'__[ ''NatList.Sort,''Nat.Sort],''Nat.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''$size.Sort,'__[''QidList.Sort,''Nat.Sort],''Nat.Sort,'none.AttrSet], 'op_:_->_`[_`].[''0.Sort,'nil.TypeList,''Zero.Sort,'ctor.Attr], 'op_:_->_`[_`].[''.Sort,'nil.TypeList,''Constant.Sort,'special[ 'id-hook[''QuotedIdentifierSymbol.Sort,''constantQid.Sort]]], 'op_:_->_`[_`].[''.Sort,'nil.TypeList,''Kind.Sort,'special['id-hook[ ''QuotedIdentifierSymbol.Sort,''kindQid.Sort]]],'op_:_->_`[_`].[ ''.Sort,'nil.TypeList,''Qid.Sort,'special['id-hook[ ''QuotedIdentifierSymbol.Sort,'nil.TypeList]]],'op_:_->_`[_`].[ ''.Sort,'nil.TypeList,''Sort.Sort,'special['id-hook[ ''QuotedIdentifierSymbol.Sort,''sortQid.Sort]]],'op_:_->_`[_`].[ ''.Sort,'nil.TypeList,''Variable.Sort,'special['id-hook[ ''QuotedIdentifierSymbol.Sort,''variableQid.Sort]]],'op_:_->_`[_`].[ ''.Sort,'nil.TypeList,''Char.Sort,'special['id-hook[ ''StringSymbol.Sort,'nil.TypeList]]],'op_:_->_`[_`].[''.Sort, 'nil.TypeList,''String.Sort,'special['id-hook[''StringSymbol.Sort, 'nil.TypeList]]],'op_:_->_`[_`].[''_!.Sort,''Strategy.Sort,''Strategy.Sort, 'ctor.Attr],'op_:_->_`[_`].[''_&_.Sort,'__[''Nat.Sort,''Nat.Sort], ''Nat.Sort,'__['assoc.Attr,'comm.Attr,'prec['s_^53['0.Zero]],'special['__[ 'id-hook[''ACU_NumberOpSymbol.Sort,''&.Sort],'op-hook[''succSymbol.Sort, ''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[''_*.Sort, ''Strategy.Sort,''Strategy.Sort,'ctor.Attr],'op_:_->_`[_`].[''_*_.Sort,'__[ ''Nat.Sort,''Nat.Sort],''Nat.Sort,'__['assoc.Attr,'comm.Attr,'prec['s_^31[ '0.Zero]],'special['__['id-hook[''ACU_NumberOpSymbol.Sort,''*.Sort], 'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]], 'op_:_->_`[_`].[''_*_.Sort,'__[''NzNat.Sort,''NzNat.Sort],''NzNat.Sort,'__[ 'assoc.Attr,'comm.Attr,'prec['s_^31['0.Zero]],'special['__['id-hook[ ''ACU_NumberOpSymbol.Sort,''*.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[''_*`(_`).Sort,'__[ ''ModuleExpression.Sort,''RenamingSet.Sort],''ModuleExpression.Sort,'__[ 'ctor.Attr,'prec['s_^39['0.Zero]],'format['__[''d.Sort,''d.Sort,''s.Sort, ''n++i.Sort,''n--i.Sort,''d.Sort]]]],'op_:_->_`[_`].[''_+.Sort, ''Strategy.Sort,''Strategy.Sort,'ctor.Attr],'op_:_->_`[_`].[''_+_.Sort,'__[ ''ModuleExpression.Sort,''ModuleExpression.Sort],''ModuleExpression.Sort, '__['assoc.Attr,'comm.Attr,'ctor.Attr]],'op_:_->_`[_`].[''_+_.Sort,'__[ ''Nat.Sort,''Nat.Sort],''Nat.Sort,'__['assoc.Attr,'comm.Attr,'prec['s_^33[ '0.Zero]],'special['__['id-hook[''ACU_NumberOpSymbol.Sort,''+.Sort], 'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]], 'op_:_->_`[_`].[''_+_.Sort,'__[''NzNat.Sort,''Nat.Sort],''NzNat.Sort,'__[ 'assoc.Attr,'comm.Attr,'prec['s_^33['0.Zero]],'special['__['id-hook[ ''ACU_NumberOpSymbol.Sort,''+.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[''_+_.Sort,'__[''String.Sort, ''String.Sort],''String.Sort,'__['prec['s_^33['0.Zero]],'gather['__[ ''E.Sort,''e.Sort]],'special['__['id-hook[''StringOpSymbol.Sort,''+.Sort], 'op-hook[''stringSymbol.Sort,''.Sort,'nil.TypeList, ''Char.Sort]]]]],'op_:_->_`[_`].[''_/\_.Sort,'__[''Condition.Sort, ''Condition.Sort],''Condition.Sort,'__['assoc.Attr,'ctor.Attr,'id[ ''nil.EqCondition.Constant],'prec['s_^73['0.Zero]]]],'op_:_->_`[_`].[ ''_/\_.Sort,'__[''EqCondition.Sort,''EqCondition.Sort],''EqCondition.Sort, '__['assoc.Attr,'ctor.Attr,'id[''nil.EqCondition.Constant],'prec['s_^73[ '0.Zero]]]],'op_:_->_`[_`].[''_/\_.Sort,'__[''MatchingProblem.Sort, ''MatchingProblem.Sort],''MatchingProblem.Sort,'__['assoc.Attr,'comm.Attr, 'ctor.Attr,'prec['s_^73['0.Zero]]]],'op_:_->_`[_`].[''_/\_.Sort,'__[ ''UnificationProblem.Sort,''UnificationProblem.Sort], ''UnificationProblem.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'prec[ 's_^73['0.Zero]]]],'op_:_->_`[_`].[''_::_.Variable,'__[''Sort.Sort, ''ModuleExpression.Sort],''ParameterDecl.Sort,'none.AttrSet], 'op_:_->_`[_`].[''_:=_.Variable,'__[''Term.Sort,''Term.Sort], ''EqCondition.Sort,'__['ctor.Attr,'prec['s_^71['0.Zero]]]],'op_:_->_`[_`].[ ''_:_.Variable,'__[''Term.Sort,''Sort.Sort],''EqCondition.Sort,'__[ 'ctor.Attr,'prec['s_^71['0.Zero]]]],'op_:_->_`[_`].[''_;_.Sort,'__[ ''EmptyQidSet.Sort,''EmptyQidSet.Sort],''EmptyQidSet.Sort,'__['assoc.Attr, 'comm.Attr,'ctor.Attr,'id[''none.EmptyQidSet.Constant],'prec['s_^43[ '0.Zero]]]],'op_:_->_`[_`].[''_;_.Sort,'__[''KindSet.Sort,''KindSet.Sort], ''KindSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.EmptyQidSet.Constant],'prec['s_^43['0.Zero]]]],'op_:_->_`[_`].[ ''_;_.Sort,'__[''NeKindSet.Sort,''KindSet.Sort],''NeKindSet.Sort,'__[ 'assoc.Attr,'comm.Attr,'ctor.Attr,'id[''none.EmptyQidSet.Constant],'prec[ 's_^43['0.Zero]]]],'op_:_->_`[_`].[''_;_.Sort,'__[''NeQidSet.Sort, ''QidSet.Sort],''NeQidSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.EmptyQidSet.Constant],'prec['s_^43['0.Zero]]]],'op_:_->_`[_`].[ ''_;_.Sort,'__[''NeSortSet.Sort,''SortSet.Sort],''NeSortSet.Sort,'__[ 'assoc.Attr,'comm.Attr,'ctor.Attr,'id[''none.EmptyQidSet.Constant],'prec[ 's_^43['0.Zero]]]],'op_:_->_`[_`].[''_;_.Sort,'__[''NeTypeSet.Sort, ''TypeSet.Sort],''NeTypeSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.EmptyQidSet.Constant],'prec['s_^43['0.Zero]]]],'op_:_->_`[_`].[ ''_;_.Sort,'__[''NeVariableSet.Sort,''VariableSet.Sort], ''NeVariableSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.EmptyQidSet.Constant],'prec['s_^43['0.Zero]]]],'op_:_->_`[_`].[ ''_;_.Sort,'__[''QidSet.Sort,''QidSet.Sort],''QidSet.Sort,'__['assoc.Attr, 'comm.Attr,'ctor.Attr,'id[''none.EmptyQidSet.Constant],'prec['s_^43[ '0.Zero]]]],'op_:_->_`[_`].[''_;_.Sort,'__[''SortSet.Sort,''SortSet.Sort], ''SortSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.EmptyQidSet.Constant],'prec['s_^43['0.Zero]]]],'op_:_->_`[_`].[ ''_;_.Sort,'__[''Strategy.Sort,''Strategy.Sort],''Strategy.Sort,'__[ 'assoc.Attr,'ctor.Attr,'id[''idle.Strategy.Constant],'prec['s_^39[ '0.Zero]],'gather['__[''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_;_.Sort,'__[ ''Substitution.Sort,''Substitution.Sort],''Substitution.Sort,'__[ 'assoc.Attr,'comm.Attr,'ctor.Attr,'id[''none.Substitution.Constant],'prec[ 's_^65['0.Zero]]]],'op_:_->_`[_`].[''_;_.Sort,'__[''TypeListSet.Sort, ''TypeListSet.Sort],''TypeListSet.Sort,'__['assoc.Attr,'comm.Attr, 'ctor.Attr,'id[''none.EmptyQidSet.Constant],'prec['s_^43['0.Zero]]]], 'op_:_->_`[_`].[''_;_.Sort,'__[''TypeSet.Sort,''TypeSet.Sort], ''TypeSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.EmptyQidSet.Constant],'prec['s_^43['0.Zero]]]],'op_:_->_`[_`].[ ''_;_.Sort,'__[''VariableSet.Sort,''VariableSet.Sort],''VariableSet.Sort, '__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[''none.EmptyQidSet.Constant], 'prec['s_^43['0.Zero]]]],'op_:_->_`[_`].[''_<-_.Sort,'__[''Variable.Sort, ''Term.Sort],''Assignment.Sort,'__['ctor.Attr,'prec['s_^63['0.Zero]], 'format['__[''n++i.Sort,''d.Sort,''d.Sort,''--.Sort]]]],'op_:_->_`[_`].[ ''_<<_.Sort,'__[''Nat.Sort,''Nat.Sort],''Nat.Sort,'__['prec['s_^35[ '0.Zero]],'gather['__[''E.Sort,''e.Sort]],'special['__['id-hook[ ''NumberOpSymbol.Sort,''<<.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[''_<=?_.Sort,'__[''Term.Sort, ''Term.Sort],''PatternSubjectPair.Sort,'__['ctor.Attr,'prec['s_^71[ '0.Zero]]]],'op_:_->_`[_`].[''_<=_.Sort,'__[''Nat.Sort,''Nat.Sort], ''Bool.Sort,'__['prec['s_^37['0.Zero]],'special['__['id-hook[ ''NumberOpSymbol.Sort,''<=.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort],'term-hook[''trueTerm.Sort,''true.Bool.Constant], 'term-hook[''falseTerm.Sort,''false.Bool.Constant]]]]],'op_:_->_`[_`].[ ''_<=_.Sort,'__[''String.Sort,''String.Sort],''Bool.Sort,'__['prec['s_^37[ '0.Zero]],'special['__['id-hook[''StringOpSymbol.Sort,''<=.Sort],'op-hook[ ''stringSymbol.Sort,''.Sort,'nil.TypeList,''Char.Sort],'term-hook[ ''trueTerm.Sort,''true.Bool.Constant],'term-hook[''falseTerm.Sort, ''false.Bool.Constant]]]]],'op_:_->_`[_`].[''_<_.Sort,'__[''Nat.Sort, ''Nat.Sort],''Bool.Sort,'__['prec['s_^37['0.Zero]],'special['__['id-hook[ ''NumberOpSymbol.Sort,''<.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort],'term-hook[''trueTerm.Sort,''true.Bool.Constant], 'term-hook[''falseTerm.Sort,''false.Bool.Constant]]]]],'op_:_->_`[_`].[ ''_<_.Sort,'__[''String.Sort,''String.Sort],''Bool.Sort,'__['prec['s_^37[ '0.Zero]],'special['__['id-hook[''StringOpSymbol.Sort,''<.Sort],'op-hook[ ''stringSymbol.Sort,''.Sort,'nil.TypeList,''Char.Sort],'term-hook[ ''trueTerm.Sort,''true.Bool.Constant],'term-hook[''falseTerm.Sort, ''false.Bool.Constant]]]]],'op_:_->_`[_`].[''_=/=_.Sort,'__[ ''Universal.Sort,''Universal.Sort],''Bool.Sort,'__['prec['s_^51['0.Zero]], 'poly['__['s_['0.Zero],'s_^2['0.Zero]]],'special['__['id-hook[ ''EqualitySymbol.Sort,'nil.TypeList],'term-hook[''equalTerm.Sort, ''false.Bool.Constant],'term-hook[''notEqualTerm.Sort, ''true.Bool.Constant]]]]],'op_:_->_`[_`].[''_==_.Sort,'__[''Universal.Sort, ''Universal.Sort],''Bool.Sort,'__['prec['s_^51['0.Zero]],'poly['__['s_[ '0.Zero],'s_^2['0.Zero]]],'special['__['id-hook[''EqualitySymbol.Sort, 'nil.TypeList],'term-hook[''equalTerm.Sort,''true.Bool.Constant], 'term-hook[''notEqualTerm.Sort,''false.Bool.Constant]]]]],'op_:_->_`[_`].[ ''_=>_.Sort,'__[''Term.Sort,''Term.Sort],''Condition.Sort,'__['ctor.Attr, 'prec['s_^71['0.Zero]]]],'op_:_->_`[_`].[''_=?_.Sort,'__[''Term.Sort, ''Term.Sort],''UnificandPair.Sort,'__['ctor.Attr,'prec['s_^71['0.Zero]]]], 'op_:_->_`[_`].[''_=_.Sort,'__[''Term.Sort,''Term.Sort],''EqCondition.Sort, '__['ctor.Attr,'prec['s_^71['0.Zero]]]],'op_:_->_`[_`].[''_>=_.Sort,'__[ ''Nat.Sort,''Nat.Sort],''Bool.Sort,'__['prec['s_^37['0.Zero]],'special['__[ 'id-hook[''NumberOpSymbol.Sort,''>=.Sort],'op-hook[''succSymbol.Sort, ''s_.Sort,''Nat.Sort,''NzNat.Sort],'term-hook[''trueTerm.Sort, ''true.Bool.Constant],'term-hook[''falseTerm.Sort, ''false.Bool.Constant]]]]],'op_:_->_`[_`].[''_>=_.Sort,'__[''String.Sort, ''String.Sort],''Bool.Sort,'__['prec['s_^37['0.Zero]],'special['__[ 'id-hook[''StringOpSymbol.Sort,''>=.Sort],'op-hook[''stringSymbol.Sort, ''.Sort,'nil.TypeList,''Char.Sort],'term-hook[''trueTerm.Sort, ''true.Bool.Constant],'term-hook[''falseTerm.Sort, ''false.Bool.Constant]]]]],'op_:_->_`[_`].[''_>>_.Sort,'__[''Nat.Sort, ''Nat.Sort],''Nat.Sort,'__['prec['s_^35['0.Zero]],'gather['__[''E.Sort, ''e.Sort]],'special['__['id-hook[''NumberOpSymbol.Sort,''>>.Sort],'op-hook[ ''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[ ''_>_.Sort,'__[''Nat.Sort,''Nat.Sort],''Bool.Sort,'__['prec['s_^37[ '0.Zero]],'special['__['id-hook[''NumberOpSymbol.Sort,''>.Sort],'op-hook[ ''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort],'term-hook[ ''trueTerm.Sort,''true.Bool.Constant],'term-hook[''falseTerm.Sort, ''false.Bool.Constant]]]]],'op_:_->_`[_`].[''_>_.Sort,'__[''String.Sort, ''String.Sort],''Bool.Sort,'__['prec['s_^37['0.Zero]],'special['__[ 'id-hook[''StringOpSymbol.Sort,''>.Sort],'op-hook[''stringSymbol.Sort, ''.Sort,'nil.TypeList,''Char.Sort],'term-hook[''trueTerm.Sort, ''true.Bool.Constant],'term-hook[''falseTerm.Sort, ''false.Bool.Constant]]]]],'op_:_->_`[_`].[''_?_:_.Variable,'__[ ''Strategy.Sort,''Strategy.Sort,''Strategy.Sort],''Strategy.Sort,'__[ 'ctor.Attr,'prec['s_^55['0.Zero]]]],'op_:_->_`[_`].[''_\_.Sort,'__[ ''QidSet.Sort,''QidSet.Sort],''QidSet.Sort,'gather['__[''E.Sort, ''e.Sort]]],'op_:_->_`[_`].[''_^_.Sort,'__[''Nat.Sort,''Nat.Sort], ''Nat.Sort,'__['prec['s_^29['0.Zero]],'gather['__[''E.Sort,''e.Sort]], 'special['__['id-hook[''NumberOpSymbol.Sort,''^.Sort],'op-hook[ ''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[ ''_^_.Sort,'__[''NzNat.Sort,''Nat.Sort],''NzNat.Sort,'__['prec['s_^29[ '0.Zero]],'gather['__[''E.Sort,''e.Sort]],'special['__['id-hook[ ''NumberOpSymbol.Sort,''^.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[''__.Sort,'__[''AttrSet.Sort, ''AttrSet.Sort],''AttrSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.AttrSet.Constant]]],'op_:_->_`[_`].[''__.Sort,'__[ ''EquationSet.Sort,''EquationSet.Sort],''EquationSet.Sort,'__['assoc.Attr, 'comm.Attr,'ctor.Attr,'id[''none.EquationSet.Constant],'format['__[ ''d.Sort,''ni.Sort,''d.Sort]]]],'op_:_->_`[_`].[''__.Sort,'__[ ''HookList.Sort,''HookList.Sort],''HookList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''nil.HookList.Constant]]],'op_:_->_`[_`].[''__.Sort,'__[ ''HookList.Sort,''NeHookList.Sort],''NeHookList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''nil.HookList.Constant]]],'op_:_->_`[_`].[''__.Sort,'__[ ''ImportList.Sort,''ImportList.Sort],''ImportList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''nil.ImportList.Constant],'format['__[''d.Sort,''ni.Sort, ''d.Sort]]]],'op_:_->_`[_`].[''__.Sort,'__[''MembAxSet.Sort, ''MembAxSet.Sort],''MembAxSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr, 'id[''none.MembAxSet.Constant],'format['__[''d.Sort,''ni.Sort,''d.Sort]]]], 'op_:_->_`[_`].[''__.Sort,'__[''NarrowingTrace.Sort,''NarrowingTrace.Sort], ''NarrowingTrace.Sort,'__['assoc.Attr,'ctor.Attr,'id[ ''nil.NarrowingTrace.Constant]]],'op_:_->_`[_`].[''__.Sort,'__[ ''NatList.Sort,''NatList.Sort],''NatList.Sort,'__['assoc.Attr,'ctor.Attr, 'id[''nil.NatList.Constant],'prec['s_^25['0.Zero]]]],'op_:_->_`[_`].[ ''__.Sort,'__[''NatList.Sort,''NeNatList.Sort],''NeNatList.Sort,'__[ 'assoc.Attr,'ctor.Attr,'id[''nil.NatList.Constant],'prec['s_^25[ '0.Zero]]]],'op_:_->_`[_`].[''__.Sort,'__[''NeHookList.Sort, ''HookList.Sort],''NeHookList.Sort,'__['assoc.Attr,'ctor.Attr,'id[ ''nil.HookList.Constant]]],'op_:_->_`[_`].[''__.Sort,'__[''NeNatList.Sort, ''NatList.Sort],''NeNatList.Sort,'__['assoc.Attr,'ctor.Attr,'id[ ''nil.NatList.Constant],'prec['s_^25['0.Zero]]]],'op_:_->_`[_`].[''__.Sort, '__[''NeQidList.Sort,''QidList.Sort],''NeQidList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''nil.TypeList.Constant],'prec['s_^25['0.Zero]]]], 'op_:_->_`[_`].[''__.Sort,'__[''NeTypeList.Sort,''TypeList.Sort], ''NeTypeList.Sort,'__['assoc.Attr,'ctor.Attr,'id[''nil.TypeList.Constant], 'prec['s_^25['0.Zero]]]],'op_:_->_`[_`].[''__.Sort,'__[''OpDeclSet.Sort, ''OpDeclSet.Sort],''OpDeclSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr, 'id[''none.OpDeclSet.Constant],'format['__[''d.Sort,''ni.Sort,''d.Sort]]]], 'op_:_->_`[_`].[''__.Sort,'__[''OpMappingSet.Sort,''OpMappingSet.Sort], ''OpMappingSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.OpMappingSet.Constant],'format['__[''d.Sort,''ni.Sort,''d.Sort]]]], 'op_:_->_`[_`].[''__.Sort,'__[''PrintOptionSet.Sort,''PrintOptionSet.Sort], ''PrintOptionSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.PrintOptionSet.Constant]]],'op_:_->_`[_`].[''__.Sort,'__[ ''QidList.Sort,''NeQidList.Sort],''NeQidList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''nil.TypeList.Constant],'prec['s_^25['0.Zero]]]], 'op_:_->_`[_`].[''__.Sort,'__[''QidList.Sort,''QidList.Sort], ''QidList.Sort,'__['assoc.Attr,'ctor.Attr,'id[''nil.TypeList.Constant], 'prec['s_^25['0.Zero]]]],'op_:_->_`[_`].[''__.Sort,'__[''RuleSet.Sort, ''RuleSet.Sort],''RuleSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.RuleSet.Constant],'format['__[''d.Sort,''ni.Sort,''d.Sort]]]], 'op_:_->_`[_`].[''__.Sort,'__[''SortMappingSet.Sort,''SortMappingSet.Sort], ''SortMappingSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.SortMappingSet.Constant],'format['__[''d.Sort,''ni.Sort, ''d.Sort]]]],'op_:_->_`[_`].[''__.Sort,'__[''StratDeclSet.Sort, ''StratDeclSet.Sort],''StratDeclSet.Sort,'__['assoc.Attr,'comm.Attr, 'ctor.Attr,'id[''none.StratDeclSet.Constant],'format['__[''d.Sort, ''ni.Sort,''d.Sort]]]],'op_:_->_`[_`].[''__.Sort,'__[''StratDefSet.Sort, ''StratDefSet.Sort],''StratDefSet.Sort,'__['assoc.Attr,'comm.Attr, 'ctor.Attr,'id[''none.StratDefSet.Constant],'format['__[''d.Sort,''ni.Sort, ''d.Sort]]]],'op_:_->_`[_`].[''__.Sort,'__[''StratMappingSet.Sort, ''StratMappingSet.Sort],''StratMappingSet.Sort,'__['assoc.Attr,'comm.Attr, 'ctor.Attr,'id[''none.StratMappingSet.Constant],'format['__[''d.Sort, ''ni.Sort,''d.Sort]]]],'op_:_->_`[_`].[''__.Sort,'__[''SubsortDeclSet.Sort, ''SubsortDeclSet.Sort],''SubsortDeclSet.Sort,'__['assoc.Attr,'comm.Attr, 'ctor.Attr,'id[''none.SubsortDeclSet.Constant],'format['__[''d.Sort, ''ni.Sort,''d.Sort]]]],'op_:_->_`[_`].[''__.Sort,'__[''Trace.Sort, ''Trace.Sort],''Trace.Sort,'__['assoc.Attr,'ctor.Attr,'id[ ''nil.Trace.Constant],'format['__[''d.Sort,''n.Sort,''d.Sort]]]], 'op_:_->_`[_`].[''__.Sort,'__[''TypeList.Sort,''NeTypeList.Sort], ''NeTypeList.Sort,'__['assoc.Attr,'ctor.Attr,'id[''nil.TypeList.Constant], 'prec['s_^25['0.Zero]]]],'op_:_->_`[_`].[''__.Sort,'__[''TypeList.Sort, ''TypeList.Sort],''TypeList.Sort,'__['assoc.Attr,'ctor.Attr,'id[ ''nil.TypeList.Constant],'prec['s_^25['0.Zero]]]],'op_:_->_`[_`].[ ''__.Sort,'__[''VariantOptionSet.Sort,''VariantOptionSet.Sort], ''VariantOptionSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.VariantOptionSet.Constant]]],'op_:_->_`[_`].[''_`,_.Qid,'__[ ''EmptyCommaList.Sort,''EmptyCommaList.Sort],''EmptyCommaList.Sort,'__[ 'assoc.Attr,'ctor.Attr,'id[''empty.EmptyCommaList.Constant],'prec['s_^121[ '0.Zero]],'gather['__[''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[ ''GTermList.Sort,''GTermList.Sort],''GTermList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''empty.EmptyCommaList.Constant],'prec['s_^121['0.Zero]], 'gather['__[''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[ ''GroundTermList.Sort,''GroundTermList.Sort],''GroundTermList.Sort,'__[ 'assoc.Attr,'ctor.Attr,'id[''empty.EmptyCommaList.Constant],'prec['s_^121[ '0.Zero]],'gather['__[''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[ ''GroundTermList.Sort,''NeGroundTermList.Sort],''NeGroundTermList.Sort,'__[ 'assoc.Attr,'ctor.Attr,'id[''empty.EmptyCommaList.Constant],'prec['s_^121[ '0.Zero]],'gather['__[''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[ ''NeCTermList.Sort,''TermList.Sort],''NeCTermList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''empty.EmptyCommaList.Constant],'prec['s_^121['0.Zero]], 'gather['__[''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[ ''NeGroundTermList.Sort,''GroundTermList.Sort],''NeGroundTermList.Sort,'__[ 'assoc.Attr,'ctor.Attr,'id[''empty.EmptyCommaList.Constant],'prec['s_^121[ '0.Zero]],'gather['__[''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[ ''NeParameterDeclList.Sort,''ParameterDeclList.Sort], ''NeParameterDeclList.Sort,'__['assoc.Attr,'ctor.Attr,'id[ ''nil.ParameterDeclList.Constant],'prec['s_^121['0.Zero]]]], 'op_:_->_`[_`].[''_`,_.Qid,'__[''NeParameterList.Sort, ''ParameterList.Sort],''NeParameterList.Sort,'__['assoc.Attr,'ctor.Attr, 'id[''empty.EmptyCommaList.Constant],'prec['s_^121['0.Zero]],'gather['__[ ''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[''NeTermList.Sort, ''TermList.Sort],''NeTermList.Sort,'__['assoc.Attr,'ctor.Attr,'id[ ''empty.EmptyCommaList.Constant],'prec['s_^121['0.Zero]],'gather['__[ ''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[ ''ParameterDeclList.Sort,''NeParameterDeclList.Sort], ''NeParameterDeclList.Sort,'__['assoc.Attr,'ctor.Attr,'id[ ''nil.ParameterDeclList.Constant],'prec['s_^121['0.Zero]]]], 'op_:_->_`[_`].[''_`,_.Qid,'__[''ParameterDeclList.Sort, ''ParameterDeclList.Sort],''ParameterDeclList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''nil.ParameterDeclList.Constant],'prec['s_^121['0.Zero]]]], 'op_:_->_`[_`].[''_`,_.Qid,'__[''ParameterList.Sort, ''NeParameterList.Sort],''NeParameterList.Sort,'__['assoc.Attr,'ctor.Attr, 'id[''empty.EmptyCommaList.Constant],'prec['s_^121['0.Zero]],'gather['__[ ''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[''ParameterList.Sort, ''ParameterList.Sort],''ParameterList.Sort,'__['assoc.Attr,'ctor.Attr,'id[ ''empty.EmptyCommaList.Constant],'prec['s_^121['0.Zero]],'gather['__[ ''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[''RenamingSet.Sort, ''RenamingSet.Sort],''RenamingSet.Sort,'__['assoc.Attr,'comm.Attr, 'ctor.Attr,'prec['s_^43['0.Zero]],'format['__[''d.Sort,''d.Sort,''ni.Sort, ''d.Sort]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[''StrategyList.Sort, ''StrategyList.Sort],''StrategyList.Sort,'__['assoc.Attr,'ctor.Attr,'id[ ''empty.StrategyList.Constant]]],'op_:_->_`[_`].[''_`,_.Qid,'__[ ''TermList.Sort,''NeCTermList.Sort],''NeCTermList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''empty.EmptyCommaList.Constant],'prec['s_^121['0.Zero]], 'gather['__[''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[ ''TermList.Sort,''NeTermList.Sort],''NeTermList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''empty.EmptyCommaList.Constant],'prec['s_^121['0.Zero]], 'gather['__[''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[ ''TermList.Sort,''TermList.Sort],''TermList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''empty.EmptyCommaList.Constant],'prec['s_^121['0.Zero]], 'gather['__[''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[ ''UsingPairSet.Sort,''UsingPairSet.Sort],''UsingPairSet.Sort,'__[ 'assoc.Attr,'comm.Attr,'ctor.Attr,'prec['s_^61['0.Zero]]]],'op_:_->_`[_`].[ ''_`[_`].Qid,'__[''Qid.Sort,''NeCTermList.Sort],''Context.Sort,'ctor.Attr], 'op_:_->_`[_`].[''_`[_`].Qid,'__[''Qid.Sort,''NeGroundTermList.Sort], ''GroundTerm.Sort,'ctor.Attr],'op_:_->_`[_`].[''_`[_`].Qid,'__[''Qid.Sort, ''NeTermList.Sort],''Term.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''_`[_`]`{_`}.Qid,'__[''Qid.Sort,''Substitution.Sort,''StrategyList.Sort], ''RuleApplication.Sort,'__['ctor.Attr,'prec['s_^21['0.Zero]]]], 'op_:_->_`[_`].[''_`[`[_`]`].Qid,'__[''Qid.Sort,''TermList.Sort], ''CallStrategy.Sort,'__['ctor.Attr,'prec['s_^21['0.Zero]]]], 'op_:_->_`[_`].[''_`{_`}.Sort,'__[''Expression.Sort, ''NeParameterList.Sort],''Expression.Sort,'__['ctor.Attr,'prec['s_^37[ '0.Zero]]]],'op_:_->_`[_`].[''_`{_`}.Sort,'__[''ModuleExpression.Sort, ''NeParameterList.Sort],''ModuleExpression.Sort,'__['ctor.Attr,'prec[ 's_^37['0.Zero]]]],'op_:_->_`[_`].[''_`{_`}.Sort,'__[''Qid.Sort, ''ParameterDeclList.Sort],''Header.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''_`{_`}.Sort,'__[''ViewExpression.Sort,''NeParameterList.Sort], ''ViewExpression.Sort,'__['ctor.Attr,'prec['s_^37['0.Zero]]]], 'op_:_->_`[_`].[''_and-then_.Sort,'__[''Bool.Sort,''Bool.Sort],''Bool.Sort, '__['strat['__['s_['0.Zero],'0.Zero]],'prec['s_^55['0.Zero]],'gather['__[ ''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_and_.Sort,'__[''Bool.Sort, ''Bool.Sort],''Bool.Sort,'__['assoc.Attr,'comm.Attr,'prec['s_^55[ '0.Zero]]]],'op_:_->_`[_`].[''_divides_.Sort,'__[''NzNat.Sort,''Nat.Sort], ''Bool.Sort,'__['prec['s_^51['0.Zero]],'special['__['id-hook[ ''NumberOpSymbol.Sort,''divides.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort],'term-hook[''trueTerm.Sort,''true.Bool.Constant], 'term-hook[''falseTerm.Sort,''false.Bool.Constant]]]]],'op_:_->_`[_`].[ ''_implies_.Sort,'__[''Bool.Sort,''Bool.Sort],''Bool.Sort,'__['prec['s_^61[ '0.Zero]],'gather['__[''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_in_.Sort, '__[''Qid.Sort,''QidSet.Sort],''Bool.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''_or-else_.Sort,'__[''Bool.Sort,''Bool.Sort],''Bool.Sort,'__['strat['__[ 's_['0.Zero],'0.Zero]],'prec['s_^59['0.Zero]],'gather['__[''e.Sort, ''E.Sort]]]],'op_:_->_`[_`].[''_or-else_.Sort,'__[''Strategy.Sort, ''Strategy.Sort],''Strategy.Sort,'__['assoc.Attr,'ctor.Attr,'prec['s_^43[ '0.Zero]],'gather['__[''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_or_.Sort, '__[''Bool.Sort,''Bool.Sort],''Bool.Sort,'__['assoc.Attr,'comm.Attr,'prec[ 's_^59['0.Zero]]]],'op_:_->_`[_`].[''_psubset_.Sort,'__[''QidSet.Sort, ''QidSet.Sort],''Bool.Sort,'none.AttrSet],'op_:_->_`[_`].[''_quo_.Sort,'__[ ''Nat.Sort,''NzNat.Sort],''Nat.Sort,'__['prec['s_^31['0.Zero]],'gather['__[ ''E.Sort,''e.Sort]],'special['__['id-hook[''NumberOpSymbol.Sort, ''quo.Sort],'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort, ''NzNat.Sort]]]]],'op_:_->_`[_`].[''_rem_.Sort,'__[''Nat.Sort, ''NzNat.Sort],''Nat.Sort,'__['prec['s_^31['0.Zero]],'gather['__[''E.Sort, ''e.Sort]],'special['__['id-hook[''NumberOpSymbol.Sort,''rem.Sort], 'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]], 'op_:_->_`[_`].[''_subset_.Sort,'__[''QidSet.Sort,''QidSet.Sort], ''Bool.Sort,'none.AttrSet],'op_:_->_`[_`].[''_using_.Sort,'__[ ''Variable.Sort,''Strategy.Sort],''UsingPair.Sort,'__['ctor.Attr,'prec[ 's_^21['0.Zero]]]],'op_:_->_`[_`].[''_xor_.Sort,'__[''Bool.Sort, ''Bool.Sort],''Bool.Sort,'__['assoc.Attr,'comm.Attr,'prec['s_^57[ '0.Zero]]]],'op_:_->_`[_`].[''_xor_.Sort,'__[''Nat.Sort,''Nat.Sort], ''Nat.Sort,'__['assoc.Attr,'comm.Attr,'prec['s_^55['0.Zero]],'special['__[ 'id-hook[''ACU_NumberOpSymbol.Sort,''xor.Sort],'op-hook[''succSymbol.Sort, ''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[''_|_.Sort,'__[ ''Nat.Sort,''Nat.Sort],''Nat.Sort,'__['assoc.Attr,'comm.Attr,'prec['s_^57[ '0.Zero]],'special['__['id-hook[''ACU_NumberOpSymbol.Sort,''|.Sort], 'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]], 'op_:_->_`[_`].[''_|_.Sort,'__[''NzNat.Sort,''Nat.Sort],''NzNat.Sort,'__[ 'assoc.Attr,'comm.Attr,'prec['s_^57['0.Zero]],'special['__['id-hook[ ''ACU_NumberOpSymbol.Sort,''|.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[''_|_.Sort,'__[ ''Strategy.Sort,''Strategy.Sort],''Strategy.Sort,'__['assoc.Attr, 'comm.Attr,'ctor.Attr,'id[''fail.Strategy.Constant],'prec['s_^41['0.Zero]], 'gather['__[''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''`[_`].Kind,''Qid.Sort, ''Module.Sort,'none.AttrSet],'op_:_->_`[_`].[''`[`].Kind,'nil.TypeList, ''Context.Sort,'ctor.Attr],'op_:_->_`[_`].[''`{_`,_`,_`,_`,_`,_`,_`}.Qid, '__[''Context.Sort,''Qid.Sort,''Substitution.Sort,''Qid.Sort,''Term.Sort, ''Type.Sort,''Substitution.Sort],''NarrowingStep.Sort,'__['ctor.Attr, 'format['__[''ni.Sort,''n++i.Sort,''d.Sort,''ni.Sort,''d.Sort,''d.Sort, ''d.Sort,''ni.Sort,''d.Sort,''ni.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort, ''n--i.Sort,''d.Sort]]]],'op_:_->_`[_`].[''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'__[ ''Term.Sort,''Type.Sort,''Context.Sort,''Qid.Sort,''Substitution.Sort, ''Substitution.Sort,''Qid.Sort],''NarrowingApplyResult.Sort,'__['ctor.Attr, 'format['__[''d.Sort,''n++i.Sort,''d.Sort,''d.Sort,''d.Sort,''ni.Sort, ''d.Sort,''ni.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''ni.Sort, ''n--i.Sort,''d.Sort]]]],'op_:_->_`[_`].[''`{_`,_`,_`,_`,_`,_`}.Qid,'__[ ''Term.Sort,''Type.Sort,''Substitution.Sort,''NarrowingTrace.Sort, ''Substitution.Sort,''Qid.Sort],''NarrowingSearchPathResult.Sort,'__[ 'ctor.Attr,'format['__[''d.Sort,''n++i.Sort,''d.Sort,''d.Sort,''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''ni.Sort, ''n--i.Sort,''d.Sort]]]],'op_:_->_`[_`].[''`{_`,_`,_`,_`,_`,_`}.Qid,'__[ ''Term.Sort,''Type.Sort,''Substitution.Sort,''Qid.Sort,''Substitution.Sort, ''Qid.Sort],''NarrowingSearchResult.Sort,'__['ctor.Attr,'format['__[ ''d.Sort,''n++i.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort, ''ni.Sort,''d.Sort,''d.Sort,''d.Sort,''ni.Sort,''n--i.Sort,''d.Sort]]]], 'op_:_->_`[_`].[''`{_`,_`,_`,_`,_`}.Qid,'__[''Term.Sort, ''Substitution.Sort,''Nat.Sort,''Parent.Sort,''Bool.Sort],''Variant.Sort, 'ctor.Attr],'op_:_->_`[_`].[''`{_`,_`,_`,_`,_`}.Qid,'__[''Term.Sort, ''Substitution.Sort,''Qid.Sort,''Parent.Sort,''Bool.Sort],''Variant.Sort, 'ctor.Attr],'op_:_->_`[_`].[''`{_`,_`,_`,_`}.Qid,'__[''Term.Sort, ''Substitution.Sort,''Term.Sort,''Nat.Sort],''SmtResult.Sort,'ctor.Attr], 'op_:_->_`[_`].[''`{_`,_`,_`,_`}.Qid,'__[''Term.Sort,''Type.Sort, ''Substitution.Sort,''Context.Sort],''Result4Tuple.Sort,'ctor.Attr], 'op_:_->_`[_`].[''`{_`,_`,_`}.Qid,'__[''Substitution.Sort, ''Substitution.Sort,''Nat.Sort],''UnificationTriple.Sort,'ctor.Attr], 'op_:_->_`[_`].[''`{_`,_`,_`}.Qid,'__[''Substitution.Sort, ''Substitution.Sort,''Qid.Sort],''UnificationTriple.Sort,'ctor.Attr], 'op_:_->_`[_`].[''`{_`,_`,_`}.Qid,'__[''Term.Sort,''Type.Sort,''Rule.Sort], ''TraceStep.Sort,'ctor.Attr],'op_:_->_`[_`].[''`{_`,_`,_`}.Qid,'__[ ''Term.Sort,''Type.Sort,''Substitution.Sort],''ResultTriple.Sort, 'ctor.Attr],'op_:_->_`[_`].[''`{_`,_`}.Qid,'__[''Substitution.Sort, ''Context.Sort],''MatchPair.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''`{_`,_`}.Qid,'__[''Substitution.Sort,''Nat.Sort],''UnificationPair.Sort, 'ctor.Attr],'op_:_->_`[_`].[''`{_`,_`}.Qid,'__[''Substitution.Sort, ''Qid.Sort],''UnificationPair.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''`{_`,_`}.Qid,'__[''Term.Sort,''Type.Sort],''ResultPair.Sort,'ctor.Attr], 'op_:_->_`[_`].[''all.Sort,'nil.TypeList,''RuleApplication.Sort, 'ctor.Attr],'op_:_->_`[_`].[''amatch_s.t._.Constant,'__[''Term.Sort, ''EqCondition.Sort],''Strategy.Sort,'__['ctor.Attr,'prec['s_^21[ '0.Zero]]]],'op_:_->_`[_`].[''amatchrew_s.t._by_.Constant,'__[''Term.Sort, ''EqCondition.Sort,''UsingPairSet.Sort],''Strategy.Sort,'ctor.Attr], 'op_:_->_`[_`].[''ambiguity.Sort,'__[''ResultPair.Sort,''ResultPair.Sort], ''ResultPair?.Sort,'ctor.Attr],'op_:_->_`[_`].[''ambiguity.Sort,'__[ ''Strategy.Sort,''Strategy.Sort],''Strategy?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''anyType.Sort,'nil.TypeList,''Type?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''append.Sort,'__[''NatList.Sort,''NatList.Sort], ''NatList.Sort,'none.AttrSet],'op_:_->_`[_`].[''append.Sort,'__[ ''NatList.Sort,''NeNatList.Sort],''NeNatList.Sort,'none.AttrSet], 'op_:_->_`[_`].[''append.Sort,'__[''NeNatList.Sort,''NatList.Sort], ''NeNatList.Sort,'none.AttrSet],'op_:_->_`[_`].[''append.Sort,'__[ ''NeQidList.Sort,''QidList.Sort],''NeQidList.Sort,'none.AttrSet], 'op_:_->_`[_`].[''append.Sort,'__[''QidList.Sort,''NeQidList.Sort], ''NeQidList.Sort,'none.AttrSet],'op_:_->_`[_`].[''append.Sort,'__[ ''QidList.Sort,''QidList.Sort],''QidList.Sort,'none.AttrSet], 'op_:_->_`[_`].[''applySubstitution.Sort,'__[''Module.Sort,''Term.Sort, ''Substitution.Sort],''Term.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''ascii.Sort,''Char.Sort,''Nat.Sort,'special['__['id-hook[ ''StringOpSymbol.Sort,''ascii.Sort],'op-hook[''stringSymbol.Sort, ''.Sort,'nil.TypeList,''Char.Sort],'op-hook[''succSymbol.Sort, ''s_.Sort,''Nat.Sort,''NzNat.Sort]]]],'op_:_->_`[_`].[''assoc.Sort, 'nil.TypeList,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''breadthFirst.Sort, 'nil.TypeList,''SrewriteOption.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''ceq_=_if_`[_`]..Qid,'__[''Term.Sort,''Term.Sort,''EqCondition.Sort, ''AttrSet.Sort],''Equation.Sort,'__['ctor.Attr,'format['__[''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort,''d.Sort, ''s.Sort,''d.Sort]]]],'op_:_->_`[_`].[''char.Sort, ''`[FindResult`,NatList`,Bound`,Parent`].Kind,''`[String`].Kind,'special[ '__['id-hook[''StringOpSymbol.Sort,''char.Sort],'op-hook[ ''stringSymbol.Sort,''.Sort,'nil.TypeList,''Char.Sort],'op-hook[ ''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]],'op_:_->_`[_`].[ ''cmb_:_if_`[_`]..Qid,'__[''Term.Sort,''Sort.Sort,''EqCondition.Sort, ''AttrSet.Sort],''MembAx.Sort,'__['ctor.Attr,'format['__[''d.Sort,''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort,''d.Sort,''s.Sort, ''d.Sort]]]],'op_:_->_`[_`].[''comm.Sort,'nil.TypeList,''Attr.Sort, 'ctor.Attr],'op_:_->_`[_`].[''completeName.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaCompleteName.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''config.Sort,'nil.TypeList,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''crl_=>_if_`[_`]..Qid,'__[''Term.Sort,''Term.Sort,''Condition.Sort, ''AttrSet.Sort],''Rule.Sort,'__['ctor.Attr,'format['__[''d.Sort,''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort,''d.Sort,''s.Sort, ''d.Sort]]]],'op_:_->_`[_`].[''csd_:=_if_`[_`]..Qid,'__[ ''CallStrategy.Sort,''Strategy.Sort,''EqCondition.Sort,''AttrSet.Sort], ''StratDefinition.Sort,'__['ctor.Attr,'format['__[''d.Sort,''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort,''d.Sort,''s.Sort, ''d.Sort]]]],'op_:_->_`[_`].[''ctor.Sort,'nil.TypeList,''Attr.Sort, 'ctor.Attr],'op_:_->_`[_`].[''delay.Sort,'nil.TypeList, ''VariantOption.Sort,'ctor.Attr],'op_:_->_`[_`].[''delete.Sort,'__[ ''Qid.Sort,''QidSet.Sort],''QidSet.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''depthFirst.Sort,'nil.TypeList,''SrewriteOption.Sort,'ctor.Attr], 'op_:_->_`[_`].[''downTerm.Sort,'__[''Term.Sort,''Universal.Sort], ''Universal.Sort,'__['poly['__['s_^2['0.Zero],'0.Zero]],'special['__[ 'id-hook[''MetaLevelOpSymbol.Sort,''metaDownTerm.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]]],'op_:_->_`[_`].[ ''empty.Sort,'nil.TypeList,''EmptyCommaList.Sort,'ctor.Attr], 'op_:_->_`[_`].[''empty.Sort,'nil.TypeList,''GroundTermList.Sort, 'ctor.Attr],'op_:_->_`[_`].[''empty.Sort,'nil.TypeList,''StrategyList.Sort, 'ctor.Attr],'op_:_->_`[_`].[''eq_=_`[_`]..Qid,'__[''Term.Sort,''Term.Sort, ''AttrSet.Sort],''Equation.Sort,'__['ctor.Attr,'format['__[''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort,''d.Sort,''s.Sort, ''d.Sort]]]],'op_:_->_`[_`].[''extending_..Qid,''ModuleExpression.Sort, ''Import.Sort,'ctor.Attr],'op_:_->_`[_`].[''fail.Sort,'nil.TypeList, ''Strategy.Sort,'ctor.Attr],'op_:_->_`[_`].[''failure.Sort,'nil.TypeList, ''NarrowingApplyResult?.Sort,'ctor.Attr],'op_:_->_`[_`].[''failure.Sort, 'nil.TypeList,''NarrowingSearchPathResult?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''failure.Sort,'nil.TypeList,''NarrowingSearchResult?.Sort, 'ctor.Attr],'op_:_->_`[_`].[''failure.Sort,'nil.TypeList, ''Result4Tuple?.Sort,'ctor.Attr],'op_:_->_`[_`].[''failure.Sort, 'nil.TypeList,''ResultPair?.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''failure.Sort,'nil.TypeList,''ResultTriple?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''failure.Sort,'nil.TypeList,''SmtResult?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''failure.Sort,'nil.TypeList,''Trace?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''failureIncomplete.Sort,'nil.TypeList, ''NarrowingApplyResult?.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''failureIncomplete.Sort,'nil.TypeList,''NarrowingSearchPathResult?.Sort, 'ctor.Attr],'op_:_->_`[_`].[''failureIncomplete.Sort,'nil.TypeList, ''NarrowingSearchResult?.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''failureIncomplete.Sort,'nil.TypeList,''ResultTriple?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''false.Sort,'nil.TypeList,''Bool.Sort,'__['ctor.Attr, 'special['id-hook[''SystemFalse.Sort,'nil.TypeList]]]],'op_:_->_`[_`].[ ''filter.Sort,'nil.TypeList,''VariantOption.Sort,'ctor.Attr], 'op_:_->_`[_`].[''find.Sort,'__[''String.Sort,''String.Sort,''Nat.Sort], ''FindResult.Sort,'special['__['id-hook[''StringOpSymbol.Sort,''find.Sort], 'op-hook[''stringSymbol.Sort,''.Sort,'nil.TypeList,''Char.Sort], 'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort],'term-hook[ ''notFoundTerm.Sort,''notFound.FindResult.Constant]]]],'op_:_->_`[_`].[ ''flat.Sort,'nil.TypeList,''PrintOption.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''fmod_is_sorts_.____endfm.Constant,'__[''Header.Sort,''ImportList.Sort, ''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort,''MembAxSet.Sort, ''EquationSet.Sort],''FModule.Sort,'__['ctor.Attr,'gather['__[''&.Sort, ''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort]],'format['__[ ''d.Sort,''d.Sort,''s.Sort,''n++i.Sort,''ni.Sort,''d.Sort,''d.Sort, ''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''n--i.Sort,''d.Sort]]]], 'op_:_->_`[_`].[''format.Sort,''QidList.Sort,''Attr.Sort,'ctor.Attr], 'op_:_->_`[_`].[''format.Sort,'nil.TypeList,''PrintOption.Sort,'ctor.Attr], 'op_:_->_`[_`].[''front.Sort,''NeNatList.Sort,''NatList.Sort, 'none.AttrSet],'op_:_->_`[_`].[''front.Sort,''NeQidList.Sort, ''QidList.Sort,'none.AttrSet],'op_:_->_`[_`].[''frozen.Sort, ''NeNatList.Sort,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''fth_is_sorts_.____endfth.Constant,'__[''Qid.Sort,''ImportList.Sort, ''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort,''MembAxSet.Sort, ''EquationSet.Sort],''FTheory.Sort,'__['ctor.Attr,'gather['__[''&.Sort, ''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort]],'format['__[ ''d.Sort,''d.Sort,''d.Sort,''n++i.Sort,''ni.Sort,''d.Sort,''d.Sort, ''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''n--i.Sort,''d.Sort]]]], 'op_:_->_`[_`].[''gather.Sort,''QidList.Sort,''Attr.Sort,'ctor.Attr], 'op_:_->_`[_`].[''gcd.Sort,'__[''Nat.Sort,''Nat.Sort],''Nat.Sort,'__[ 'assoc.Attr,'comm.Attr,'special['__['id-hook[''ACU_NumberOpSymbol.Sort, ''gcd.Sort],'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort, ''NzNat.Sort]]]]],'op_:_->_`[_`].[''gcd.Sort,'__[''NzNat.Sort,''Nat.Sort], ''NzNat.Sort,'__['assoc.Attr,'comm.Attr,'special['__['id-hook[ ''ACU_NumberOpSymbol.Sort,''gcd.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[ ''getAccumulatedSubstitution.Sort,''NarrowingSearchResult.Sort, ''Substitution.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getAccumulatedSubstitution.Sort,''NarrowingStep.Sort,''Substitution.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getContext.Sort,''MatchPair.Sort, ''Context.Sort,'none.AttrSet],'op_:_->_`[_`].[''getContext.Sort, ''NarrowingApplyResult.Sort,''Context.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getContext.Sort,''NarrowingStep.Sort,''Context.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getContext.Sort,''Result4Tuple.Sort,''Context.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getEqs.Sort,''Module.Sort, ''EquationSet.Sort,'none.AttrSet],'op_:_->_`[_`].[''getFrom.Sort, ''View.Sort,''ModuleExpression.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getImports.Sort,''Module.Sort,''ImportList.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getInitialSubstitution.Sort, ''NarrowingSearchPathResult.Sort,''Substitution.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getInitialTerm.Sort,''NarrowingSearchPathResult.Sort, ''Term.Sort,'none.AttrSet],'op_:_->_`[_`].[''getInitialType.Sort, ''NarrowingSearchPathResult.Sort,''Type.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getKind.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaGetKind.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''getKinds.Sort,''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaGetKinds.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''getLabel.Sort,''NarrowingApplyResult.Sort,''Qid.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getLabel.Sort,''NarrowingStep.Sort,''Qid.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getLhsSubstitution.Sort, ''UnificationTriple.Sort,''Substitution.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getMbs.Sort,''Module.Sort,''MembAxSet.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getMoreVariantsInLayerFlag.Sort, ''Variant.Sort,''Bool.Sort,'none.AttrSet],'op_:_->_`[_`].[''getName.Sort, ''Constant.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[''getName.Sort, ''Module.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[''getName.Sort, ''Variable.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[''getName.Sort, ''View.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[''getOpMappings.Sort, ''View.Sort,''OpMappingSet.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getOps.Sort,''Module.Sort,''OpDeclSet.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getParent.Sort,''Variant.Sort,''Parent.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getRhsSubstitution.Sort, ''UnificationTriple.Sort,''Substitution.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getRls.Sort,''Module.Sort,''RuleSet.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getRule.Sort,''TraceStep.Sort,''Rule.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getRuleSubstitution.Sort,''NarrowingApplyResult.Sort, ''Substitution.Sort,'none.AttrSet],'op_:_->_`[_`].[''getSds.Sort, ''Module.Sort,''StratDefSet.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getSortMappings.Sort,''View.Sort,''SortMappingSet.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getSorts.Sort,''Module.Sort,''SortSet.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getStateVariableFamily.Sort, ''NarrowingSearchResult.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getStratMappings.Sort,''View.Sort,''StratMappingSet.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getStrats.Sort,''Module.Sort,''StratDeclSet.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getSubsorts.Sort,''Module.Sort, ''SubsortDeclSet.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getSubstitution.Sort,''MatchPair.Sort,''Substitution.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getSubstitution.Sort,''Result4Tuple.Sort, ''Substitution.Sort,'none.AttrSet],'op_:_->_`[_`].[''getSubstitution.Sort, ''ResultTriple.Sort,''Substitution.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getSubstitution.Sort,''UnificationPair.Sort,''Substitution.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getSubstitution.Sort,''Variant.Sort, ''Substitution.Sort,'none.AttrSet],'op_:_->_`[_`].[''getTerm.Sort, ''NarrowingApplyResult.Sort,''Term.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getTerm.Sort,''NarrowingSearchResult.Sort,''Term.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getTerm.Sort,''NarrowingStep.Sort,''Term.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getTerm.Sort,''Result4Tuple.Sort, ''Term.Sort,'none.AttrSet],'op_:_->_`[_`].[''getTerm.Sort, ''ResultPair.Sort,''Term.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getTerm.Sort,''ResultTriple.Sort,''Term.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getTerm.Sort,''TraceStep.Sort,''Term.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getTerm.Sort,''Variant.Sort,''Term.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getTermSubstitution.Sort,''NarrowingApplyResult.Sort, ''Substitution.Sort,'none.AttrSet],'op_:_->_`[_`].[''getTo.Sort, ''View.Sort,''ModuleExpression.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getTrace.Sort,''NarrowingSearchPathResult.Sort,''NarrowingTrace.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getType.Sort,''Constant.Sort,''Type.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getType.Sort,''NarrowingApplyResult.Sort, ''Type.Sort,'none.AttrSet],'op_:_->_`[_`].[''getType.Sort, ''NarrowingSearchResult.Sort,''Type.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getType.Sort,''NarrowingStep.Sort,''Type.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getType.Sort,''Result4Tuple.Sort,''Type.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getType.Sort,''ResultPair.Sort, ''Type.Sort,'none.AttrSet],'op_:_->_`[_`].[''getType.Sort, ''ResultTriple.Sort,''Type.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getType.Sort,''TraceStep.Sort,''Type.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getType.Sort,''Variable.Sort,''Type.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getUnifier.Sort,''NarrowingSearchPathResult.Sort,''Substitution.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getUnifier.Sort, ''NarrowingSearchResult.Sort,''Substitution.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getUnifier.Sort,''NarrowingStep.Sort,''Substitution.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getUnifierVariableFamily.Sort, ''NarrowingSearchPathResult.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getUnifierVariableFamily.Sort,''NarrowingSearchResult.Sort,''Qid.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getUnifierVariableFamily.Sort, ''NarrowingStep.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getVariableFamily.Sort,''NarrowingApplyResult.Sort,''Qid.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getVariableFamily.Sort, ''UnificationPair.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getVariableFamily.Sort,''UnificationTriple.Sort,''Qid.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getVariableFamily.Sort,''Variant.Sort, ''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[''glbSorts.Sort,'__[ ''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaGlbSorts.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''head.Sort,''NeNatList.Sort,''Nat.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''head.Sort,''NeQidList.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''id.Sort,''Term.Sort,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''id-hook.Sort,'__[''Qid.Sort,''QidList.Sort],''Hook.Sort,'__['ctor.Attr, 'format['__[''nssss.Sort,''d.Sort]]]],'op_:_->_`[_`].[''idem.Sort, 'nil.TypeList,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''idle.Sort, 'nil.TypeList,''Strategy.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''if_then_else_fi.Sort,'__[''Bool.Sort,''Universal.Sort,''Universal.Sort], ''Universal.Sort,'__['poly['__['s_^2['0.Zero],'s_^3['0.Zero],'0.Zero]], 'special['__['id-hook[''BranchSymbol.Sort,'nil.TypeList],'term-hook[ ''1.Sort,''true.Bool.Constant],'term-hook[''2.Sort, ''false.Bool.Constant]]]]],'op_:_->_`[_`].[''including_..Qid, ''ModuleExpression.Sort,''Import.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''insert.Sort,'__[''Qid.Sort,''QidSet.Sort],''QidSet.Sort,'none.AttrSet], 'op_:_->_`[_`].[''intersection.Sort,'__[''QidSet.Sort,''QidSet.Sort], ''QidSet.Sort,'none.AttrSet],'op_:_->_`[_`].[''iter.Sort,'nil.TypeList, ''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''label.Sort,''Qid.Sort, ''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''label_to_.Sort,'__[''Qid.Sort, ''Qid.Sort],''Renaming.Sort,'ctor.Attr],'op_:_->_`[_`].[''last.Sort, ''NeNatList.Sort,''Nat.Sort,'none.AttrSet],'op_:_->_`[_`].[''last.Sort, ''NeQidList.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[''lcm.Sort,'__[ ''Nat.Sort,''Nat.Sort],''Nat.Sort,'__['assoc.Attr,'comm.Attr,'special['__[ 'id-hook[''ACU_NumberOpSymbol.Sort,''lcm.Sort],'op-hook[''succSymbol.Sort, ''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[''lcm.Sort,'__[ ''NzNat.Sort,''NzNat.Sort],''NzNat.Sort,'__['assoc.Attr,'comm.Attr, 'special['__['id-hook[''ACU_NumberOpSymbol.Sort,''lcm.Sort],'op-hook[ ''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[ ''leastSort.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaLeastSort.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''left-id.Sort,''Term.Sort,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''length.Sort,''String.Sort,''Nat.Sort,'special['__['id-hook[ ''StringOpSymbol.Sort,''length.Sort],'op-hook[''stringSymbol.Sort, ''.Sort,'nil.TypeList,''Char.Sort],'op-hook[''succSymbol.Sort, ''s_.Sort,''Nat.Sort,''NzNat.Sort]]]],'op_:_->_`[_`].[''lesserSorts.Sort, '__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__[ 'id-hook[''MetaLevelOpSymbol.Sort,''metaLesserSorts.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''lowerCase.Sort,''String.Sort,''String.Sort,'special['__['id-hook[ ''StringOpSymbol.Sort,''lowerCase.Sort],'op-hook[''stringSymbol.Sort, ''.Sort,'nil.TypeList,''Char.Sort]]]],'op_:_->_`[_`].[ ''match_s.t._.Constant,'__[''Term.Sort,''EqCondition.Sort],''Strategy.Sort, '__['ctor.Attr,'prec['s_^21['0.Zero]]]],'op_:_->_`[_`].[ ''matchrew_s.t._by_.Constant,'__[''Term.Sort,''EqCondition.Sort, ''UsingPairSet.Sort],''Strategy.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''max.Sort,'__[''Nat.Sort,''Nat.Sort],''Nat.Sort,'__['assoc.Attr, 'comm.Attr,'special['__['id-hook[''ACU_NumberOpSymbol.Sort,''max.Sort], 'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]], 'op_:_->_`[_`].[''max.Sort,'__[''NzNat.Sort,''Nat.Sort],''NzNat.Sort,'__[ 'assoc.Attr,'comm.Attr,'special['__['id-hook[''ACU_NumberOpSymbol.Sort, ''max.Sort],'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort, ''NzNat.Sort]]]]],'op_:_->_`[_`].[''maximalAritySet.Sort,'__[ ''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaMaximalAritySet.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort, '__[''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''maximalSorts.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaMaximalSorts.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''mb_:_`[_`]..Qid,'__[''Term.Sort,''Sort.Sort, ''AttrSet.Sort],''MembAx.Sort,'__['ctor.Attr,'format['__[''d.Sort,''d.Sort, ''d.Sort,''d.Sort,''s.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort]]]], 'op_:_->_`[_`].[''memo.Sort,'nil.TypeList,''Attr.Sort,'ctor.Attr], 'op_:_->_`[_`].[''metaApply.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Substitution?`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[ResultTriple?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaApply.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaCheck.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[Bool`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaCheck.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaDisjointUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationTriple?`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''legacyMetaDisjointUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaDisjointUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationTriple?`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaDisjointUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaFrewrite.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[ResultPair?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaFrewrite.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaGetIrredundantVariant.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[Variant?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''legacyMetaGetIrredundantVariant.Sort],'op-hook[''shareWith.Sort, ''metaReduce.Sort,'__[''Module.Sort,''ModuleExpression.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaGetIrredundantVariant.Sort, '__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[Variant?`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''metaGetIrredundantVariant.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaGetVariant.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[Variant?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''legacyMetaGetVariant.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort, '__[''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''metaGetVariant.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[Variant?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaGetVariant.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaIrredundantDisjointUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationTriple?`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaIrredundantDisjointUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaIrredundantUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''metaIrredundantUnify.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaMatch.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Condition`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[Substitution?`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaMatch.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''metaNarrow.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[Bool`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[ResultPair?`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaNarrow2.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''metaNarrow.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[ResultTriple?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaNarrow.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaNarrowingApply.Sort,'__[''Module.Sort,''Term.Sort,''TermList.Sort, ''Qid.Sort,''Nat.Sort],''NarrowingApplyResult?.Sort,'none.AttrSet], 'op_:_->_`[_`].[''metaNarrowingApply.Sort,'__[''Module.Sort,''Term.Sort, ''TermList.Sort,''Qid.Sort,''VariantOptionSet.Sort,''Nat.Sort], ''NarrowingApplyResult?.Sort,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaNarrowingApply.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaNarrowingSearch.Sort,'__[''Module.Sort,''Term.Sort,''Term.Sort, ''Qid.Sort,''Bound.Sort,''Qid.Sort,''Nat.Sort], ''NarrowingSearchResult?.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''metaNarrowingSearch.Sort,'__[''Module.Sort,''Term.Sort,''Term.Sort, ''Qid.Sort,''Bound.Sort,''Qid.Sort,''VariantOptionSet.Sort,''Nat.Sort], ''NarrowingSearchResult?.Sort,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaNarrowingSearch.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaNarrowingSearchPath.Sort,'__[''Module.Sort,''Term.Sort,''Term.Sort, ''Qid.Sort,''Bound.Sort,''Qid.Sort,''Nat.Sort], ''NarrowingSearchPathResult?.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''metaNarrowingSearchPath.Sort,'__[''Module.Sort,''Term.Sort,''Term.Sort, ''Qid.Sort,''Bound.Sort,''Qid.Sort,''VariantOptionSet.Sort,''Nat.Sort], ''NarrowingSearchPathResult?.Sort,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaNarrowingSearchPath.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaNormalize.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind], ''`[ResultPair?`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaNormalize.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''metaParse.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ResultPair?`].Kind,'none.AttrSet],'op_:_->_`[_`].[ ''metaParse.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ResultPair?`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaParse.Sort],'op-hook[''shareWith.Sort, ''metaReduce.Sort,'__[''Module.Sort,''ModuleExpression.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaParseStrategy.Sort,'__[ ''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind], ''`[StrategyList`,Strategy?`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaParseStrategy.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaPrettyPrint.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'none.AttrSet],'op_:_->_`[_`].[''metaPrettyPrint.Sort,'__[ ''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[PrintOptionSet`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'none.AttrSet],'op_:_->_`[_`].[''metaPrettyPrint.Sort,'__[ ''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[PrintOptionSet`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaPrettyPrint.Sort],'op-hook[''shareWith.Sort, ''metaReduce.Sort,'__[''Module.Sort,''ModuleExpression.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaPrettyPrintStrategy.Sort,'__[ ''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[StrategyList`,Strategy?`].Kind, ''`[PrintOptionSet`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaPrettyPrintStrategy.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaReduce.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind], ''`[ResultPair?`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaReduce.Sort],'op-hook[''qidSymbol.Sort,''.Sort,'nil.TypeList, ''Qid.Sort],'op-hook[''metaTermSymbol.Sort,''_`[_`].Qid,'__[''Qid.Sort, ''NeGroundTermList.Sort],''GroundTerm.Sort],'op-hook[''metaArgSymbol.Sort, ''_`,_.Qid,'__[''NeGroundTermList.Sort,''GroundTermList.Sort], ''NeGroundTermList.Sort],'op-hook[''emptyTermListSymbol.Sort,''empty.Sort, 'nil.TypeList,''GroundTermList.Sort],'op-hook[''assignmentSymbol.Sort, ''_<-_.Sort,'__[''Variable.Sort,''Term.Sort],''Assignment.Sort],'op-hook[ ''emptySubstitutionSymbol.Sort,''none.Sort,'nil.TypeList, ''Substitution.Sort],'op-hook[''substitutionSymbol.Sort,''_;_.Sort,'__[ ''Substitution.Sort,''Substitution.Sort],''Substitution.Sort],'op-hook[ ''holeSymbol.Sort,''`[`].Kind,'nil.TypeList,''Context.Sort],'op-hook[ ''noConditionSymbol.Sort,''nil.Sort,'nil.TypeList,''EqCondition.Sort], 'op-hook[''equalityConditionSymbol.Sort,''_=_.Sort,'__[''Term.Sort, ''Term.Sort],''EqCondition.Sort],'op-hook[''sortTestConditionSymbol.Sort, ''_:_.Variable,'__[''Term.Sort,''Sort.Sort],''EqCondition.Sort],'op-hook[ ''matchConditionSymbol.Sort,''_:=_.Variable,'__[''Term.Sort,''Term.Sort], ''EqCondition.Sort],'op-hook[''rewriteConditionSymbol.Sort,''_=>_.Sort,'__[ ''Term.Sort,''Term.Sort],''Condition.Sort],'op-hook[ ''conjunctionSymbol.Sort,''_/\_.Sort,'__[''EqCondition.Sort, ''EqCondition.Sort],''EqCondition.Sort],'op-hook[''failStratSymbol.Sort, ''fail.Sort,'nil.TypeList,''Strategy.Sort],'op-hook[''idleStratSymbol.Sort, ''idle.Sort,'nil.TypeList,''Strategy.Sort],'op-hook[''allStratSymbol.Sort, ''all.Sort,'nil.TypeList,''RuleApplication.Sort],'op-hook[ ''applicationStratSymbol.Sort,''_`[_`]`{_`}.Qid,'__[''Qid.Sort, ''Substitution.Sort,''StrategyList.Sort],''RuleApplication.Sort],'op-hook[ ''topStratSymbol.Sort,''top.Sort,''RuleApplication.Sort,''Strategy.Sort], 'op-hook[''matchStratSymbol.Sort,''match_s.t._.Constant,'__[''Term.Sort, ''EqCondition.Sort],''Strategy.Sort],'op-hook[''xmatchStratSymbol.Sort, ''xmatch_s.t._.Constant,'__[''Term.Sort,''EqCondition.Sort], ''Strategy.Sort],'op-hook[''amatchStratSymbol.Sort,''amatch_s.t._.Constant, '__[''Term.Sort,''EqCondition.Sort],''Strategy.Sort],'op-hook[ ''unionStratSymbol.Sort,''_|_.Sort,'__[''Strategy.Sort,''Strategy.Sort], ''Strategy.Sort],'op-hook[''concatStratSymbol.Sort,''_;_.Sort,'__[ ''Strategy.Sort,''Strategy.Sort],''Strategy.Sort],'op-hook[ ''orelseStratSymbol.Sort,''_or-else_.Sort,'__[''Strategy.Sort, ''Strategy.Sort],''Strategy.Sort],'op-hook[''plusStratSymbol.Sort, ''_+.Sort,''Strategy.Sort,''Strategy.Sort],'op-hook[ ''conditionalStratSymbol.Sort,''_?_:_.Variable,'__[''Strategy.Sort, ''Strategy.Sort,''Strategy.Sort],''Strategy.Sort],'op-hook[ ''matchrewStratSymbol.Sort,''matchrew_s.t._by_.Constant,'__[''Term.Sort, ''EqCondition.Sort,''UsingPairSet.Sort],''Strategy.Sort],'op-hook[ ''xmatchrewStratSymbol.Sort,''xmatchrew_s.t._by_.Constant,'__[''Term.Sort, ''EqCondition.Sort,''UsingPairSet.Sort],''Strategy.Sort],'op-hook[ ''amatchrewStratSymbol.Sort,''amatchrew_s.t._by_.Constant,'__[''Term.Sort, ''EqCondition.Sort,''UsingPairSet.Sort],''Strategy.Sort],'op-hook[ ''callStratSymbol.Sort,''_`[`[_`]`].Qid,'__[''Qid.Sort,''TermList.Sort], ''CallStrategy.Sort],'op-hook[''oneStratSymbol.Sort,''one.Sort, ''Strategy.Sort,''Strategy.Sort],'op-hook[''starStratSymbol.Sort,''_*.Sort, ''Strategy.Sort,''Strategy.Sort],'op-hook[''normalizationStratSymbol.Sort, ''_!.Sort,''Strategy.Sort,''Strategy.Sort],'op-hook[''notStratSymbol.Sort, ''not.Sort,''Strategy.Sort,''Strategy.Sort],'op-hook[ ''testStratSymbol.Sort,''test.Sort,''Strategy.Sort,''Strategy.Sort], 'op-hook[''tryStratSymbol.Sort,''try.Sort,''Strategy.Sort,''Strategy.Sort], 'op-hook[''usingStratSymbol.Sort,''_using_.Sort,'__[''Variable.Sort, ''Strategy.Sort],''UsingPair.Sort],'op-hook[''usingListStratSymbol.Sort, ''_`,_.Qid,'__[''UsingPairSet.Sort,''UsingPairSet.Sort], ''UsingPairSet.Sort],'op-hook[''emptyStratListSymbol.Sort,''empty.Sort, 'nil.TypeList,''StrategyList.Sort],'op-hook[''stratListSymbol.Sort, ''_`,_.Qid,'__[''StrategyList.Sort,''StrategyList.Sort], ''StrategyList.Sort],'op-hook[''headerSymbol.Sort,''_`{_`}.Sort,'__[ ''Qid.Sort,''ParameterDeclList.Sort],''Header.Sort],'op-hook[ ''parameterDeclSymbol.Sort,''_::_.Variable,'__[''Sort.Sort, ''ModuleExpression.Sort],''ParameterDecl.Sort],'op-hook[ ''parameterDeclListSymbol.Sort,''_`,_.Qid,'__[''ParameterDeclList.Sort, ''ParameterDeclList.Sort],''ParameterDeclList.Sort],'op-hook[ ''protectingSymbol.Sort,''protecting_..Qid,''ModuleExpression.Sort, ''Import.Sort],'op-hook[''extendingSymbol.Sort,''extending_..Qid, ''ModuleExpression.Sort,''Import.Sort],'op-hook[''includingSymbol.Sort, ''including_..Qid,''ModuleExpression.Sort,''Import.Sort],'op-hook[ ''nilImportListSymbol.Sort,''nil.Sort,'nil.TypeList,''ImportList.Sort], 'op-hook[''importListSymbol.Sort,''__.Sort,'__[''ImportList.Sort, ''ImportList.Sort],''ImportList.Sort],'op-hook[''emptySortSetSymbol.Sort, ''none.Sort,'nil.TypeList,''QidSet.Sort],'op-hook[''sortSetSymbol.Sort, ''_;_.Sort,'__[''QidSet.Sort,''QidSet.Sort],''QidSet.Sort],'op-hook[ ''subsortSymbol.Sort,''subsort_<_..Qid,'__[''Sort.Sort,''Sort.Sort], ''SubsortDecl.Sort],'op-hook[''emptySubsortDeclSetSymbol.Sort,''none.Sort, 'nil.TypeList,''SubsortDeclSet.Sort],'op-hook[''subsortDeclSetSymbol.Sort, ''__.Sort,'__[''SubsortDeclSet.Sort,''SubsortDeclSet.Sort], ''SubsortDeclSet.Sort],'op-hook[''nilQidListSymbol.Sort,''nil.Sort, 'nil.TypeList,''QidList.Sort],'op-hook[''qidListSymbol.Sort,''__.Sort,'__[ ''QidList.Sort,''QidList.Sort],''QidList.Sort],'op-hook[ ''emptyQidSetSymbol.Sort,''none.Sort,'nil.TypeList,''QidSet.Sort],'op-hook[ ''qidSetSymbol.Sort,''_;_.Sort,'__[''QidSet.Sort,''QidSet.Sort], ''QidSet.Sort],'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort, ''NzNat.Sort],'op-hook[''natListSymbol.Sort,''__.Sort,'__[''NatList.Sort, ''NatList.Sort],''NatList.Sort],'op-hook[''unboundedSymbol.Sort, ''unbounded.Sort,'nil.TypeList,''Bound.Sort],'op-hook[ ''noParentSymbol.Sort,''none.Sort,'nil.TypeList,''Parent.Sort],'op-hook[ ''stringSymbol.Sort,''.Sort,'nil.TypeList,''Char.Sort],'op-hook[ ''sortRenamingSymbol.Sort,''sort_to_.Sort,'__[''Qid.Sort,''Qid.Sort], ''Renaming.Sort],'op-hook[''opRenamingSymbol.Sort,''op_to_`[_`].Qid,'__[ ''Qid.Sort,''Qid.Sort,''AttrSet.Sort],''Renaming.Sort],'op-hook[ ''opRenamingSymbol2.Sort,''op_:_->_to_`[_`].Qid,'__[''Qid.Sort, ''TypeList.Sort,''Type.Sort,''Qid.Sort,''AttrSet.Sort],''Renaming.Sort], 'op-hook[''labelRenamingSymbol.Sort,''label_to_.Sort,'__[''Qid.Sort, ''Qid.Sort],''Renaming.Sort],'op-hook[''stratRenamingSymbol.Sort, ''strat_to_.Sort,'__[''Qid.Sort,''Qid.Sort],''Renaming.Sort],'op-hook[ ''stratRenamingSymbol2.Sort,''strat_:_@_to_.Variable,'__[''Qid.Sort, ''TypeList.Sort,''Type.Sort,''Qid.Sort],''Renaming.Sort],'op-hook[ ''renamingSetSymbol.Sort,''_`,_.Qid,'__[''RenamingSet.Sort, ''RenamingSet.Sort],''RenamingSet.Sort],'op-hook[''sumSymbol.Sort, ''_+_.Sort,'__[''ModuleExpression.Sort,''ModuleExpression.Sort], ''ModuleExpression.Sort],'op-hook[''renamingSymbol.Sort,''_*`(_`).Sort,'__[ ''ModuleExpression.Sort,''RenamingSet.Sort],''ModuleExpression.Sort], 'op-hook[''instantiationSymbol.Sort,''_`{_`}.Sort,'__[''Expression.Sort, ''NeParameterList.Sort],''Expression.Sort],'op-hook[''termHookSymbol.Sort, ''term-hook.Sort,'__[''Qid.Sort,''Term.Sort],''Hook.Sort],'op-hook[ ''hookListSymbol.Sort,''__.Sort,'__[''HookList.Sort,''HookList.Sort], ''HookList.Sort],'op-hook[''idHookSymbol.Sort,''id-hook.Sort,'__[ ''Qid.Sort,''QidList.Sort],''Hook.Sort],'op-hook[''opHookSymbol.Sort, ''op-hook.Sort,'__[''Qid.Sort,''Qid.Sort,''QidList.Sort,''Qid.Sort], ''Hook.Sort],'op-hook[''assocSymbol.Sort,''assoc.Sort,'nil.TypeList, ''Attr.Sort],'op-hook[''commSymbol.Sort,''comm.Sort,'nil.TypeList, ''Attr.Sort],'op-hook[''idemSymbol.Sort,''idem.Sort,'nil.TypeList, ''Attr.Sort],'op-hook[''iterSymbol.Sort,''iter.Sort,'nil.TypeList, ''Attr.Sort],'op-hook[''idSymbol.Sort,''id.Sort,''Term.Sort,''Attr.Sort], 'op-hook[''leftIdSymbol.Sort,''left-id.Sort,''Term.Sort,''Attr.Sort], 'op-hook[''rightIdSymbol.Sort,''right-id.Sort,''Term.Sort,''Attr.Sort], 'op-hook[''stratSymbol.Sort,''strat.Sort,''NeNatList.Sort,''Attr.Sort], 'op-hook[''memoSymbol.Sort,''memo.Sort,'nil.TypeList,''Attr.Sort],'op-hook[ ''precSymbol.Sort,''prec.Sort,''Nat.Sort,''Attr.Sort],'op-hook[ ''gatherSymbol.Sort,''gather.Sort,''QidList.Sort,''Attr.Sort],'op-hook[ ''formatSymbol.Sort,''format.Sort,''QidList.Sort,''Attr.Sort],'op-hook[ ''ctorSymbol.Sort,''ctor.Sort,'nil.TypeList,''Attr.Sort],'op-hook[ ''frozenSymbol.Sort,''frozen.Sort,''NeNatList.Sort,''Attr.Sort],'op-hook[ ''polySymbol.Sort,''poly.Sort,''NeNatList.Sort,''Attr.Sort],'op-hook[ ''configSymbol.Sort,''config.Sort,'nil.TypeList,''Attr.Sort],'op-hook[ ''objectSymbol.Sort,''object.Sort,'nil.TypeList,''Attr.Sort],'op-hook[ ''msgSymbol.Sort,''msg.Sort,'nil.TypeList,''Attr.Sort],'op-hook[ ''specialSymbol.Sort,''special.Sort,''NeHookList.Sort,''Attr.Sort], 'op-hook[''labelSymbol.Sort,''label.Sort,''Qid.Sort,''Attr.Sort],'op-hook[ ''metadataSymbol.Sort,''metadata.Sort,''String.Sort,''Attr.Sort],'op-hook[ ''owiseSymbol.Sort,''owise.Sort,'nil.TypeList,''Attr.Sort],'op-hook[ ''variantAttrSymbol.Sort,''variant.Sort,'nil.TypeList,''Attr.Sort], 'op-hook[''narrowingSymbol.Sort,''narrowing.Sort,'nil.TypeList, ''Attr.Sort],'op-hook[''nonexecSymbol.Sort,''nonexec.Sort,'nil.TypeList, ''Attr.Sort],'op-hook[''printSymbol.Sort,''print.Sort,''QidList.Sort, ''Attr.Sort],'op-hook[''emptyAttrSetSymbol.Sort,''none.Sort,'nil.TypeList, ''AttrSet.Sort],'op-hook[''attrSetSymbol.Sort,''__.Sort,'__[''AttrSet.Sort, ''AttrSet.Sort],''AttrSet.Sort],'op-hook[''opDeclSymbol.Sort, ''op_:_->_`[_`]..Qid,'__[''Qid.Sort,''TypeList.Sort,''Type.Sort, ''AttrSet.Sort],''OpDecl.Sort],'op-hook[''opDeclSetSymbol.Sort,''__.Sort, '__[''OpDeclSet.Sort,''OpDeclSet.Sort],''OpDeclSet.Sort],'op-hook[ ''emptyOpDeclSetSymbol.Sort,''none.Sort,'nil.TypeList,''OpDeclSet.Sort], 'op-hook[''mbSymbol.Sort,''mb_:_`[_`]..Qid,'__[''Term.Sort,''Sort.Sort, ''AttrSet.Sort],''MembAx.Sort],'op-hook[''cmbSymbol.Sort, ''cmb_:_if_`[_`]..Qid,'__[''Term.Sort,''Sort.Sort,''EqCondition.Sort, ''AttrSet.Sort],''MembAx.Sort],'op-hook[''emptyMembAxSetSymbol.Sort, ''none.Sort,'nil.TypeList,''MembAxSet.Sort],'op-hook[ ''membAxSetSymbol.Sort,''__.Sort,'__[''MembAxSet.Sort,''MembAxSet.Sort], ''MembAxSet.Sort],'op-hook[''eqSymbol.Sort,''eq_=_`[_`]..Qid,'__[ ''Term.Sort,''Term.Sort,''AttrSet.Sort],''Equation.Sort],'op-hook[ ''ceqSymbol.Sort,''ceq_=_if_`[_`]..Qid,'__[''Term.Sort,''Term.Sort, ''EqCondition.Sort,''AttrSet.Sort],''Equation.Sort],'op-hook[ ''emptyEquationSetSymbol.Sort,''none.Sort,'nil.TypeList, ''EquationSet.Sort],'op-hook[''equationSetSymbol.Sort,''__.Sort,'__[ ''EquationSet.Sort,''EquationSet.Sort],''EquationSet.Sort],'op-hook[ ''rlSymbol.Sort,''rl_=>_`[_`]..Qid,'__[''Term.Sort,''Term.Sort, ''AttrSet.Sort],''Rule.Sort],'op-hook[''crlSymbol.Sort, ''crl_=>_if_`[_`]..Qid,'__[''Term.Sort,''Term.Sort,''Condition.Sort, ''AttrSet.Sort],''Rule.Sort],'op-hook[''emptyRuleSetSymbol.Sort, ''none.Sort,'nil.TypeList,''RuleSet.Sort],'op-hook[''ruleSetSymbol.Sort, ''__.Sort,'__[''RuleSet.Sort,''RuleSet.Sort],''RuleSet.Sort],'op-hook[ ''stratDeclSymbol.Sort,''strat_:_@_`[_`]..Qid,'__[''Qid.Sort, ''TypeList.Sort,''Type.Sort,''AttrSet.Sort],''StratDecl.Sort],'op-hook[ ''emptyStratDeclSetSymbol.Sort,''none.Sort,'nil.TypeList, ''StratDeclSet.Sort],'op-hook[''stratDeclSetSymbol.Sort,''__.Sort,'__[ ''StratDeclSet.Sort,''StratDeclSet.Sort],''StratDeclSet.Sort],'op-hook[ ''sdSymbol.Sort,''sd_:=_`[_`]..Qid,'__[''CallStrategy.Sort,''Strategy.Sort, ''AttrSet.Sort],''StratDefinition.Sort],'op-hook[''csdSymbol.Sort, ''csd_:=_if_`[_`]..Qid,'__[''CallStrategy.Sort,''Strategy.Sort, ''EqCondition.Sort,''AttrSet.Sort],''StratDefinition.Sort],'op-hook[ ''emptyStratDefSetSymbol.Sort,''none.Sort,'nil.TypeList, ''StratDefSet.Sort],'op-hook[''stratDefSetSymbol.Sort,''__.Sort,'__[ ''StratDefSet.Sort,''StratDefSet.Sort],''StratDefSet.Sort],'op-hook[ ''fmodSymbol.Sort,''fmod_is_sorts_.____endfm.Constant,'__[''Header.Sort, ''ImportList.Sort,''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort, ''MembAxSet.Sort,''EquationSet.Sort],''FModule.Sort],'op-hook[ ''fthSymbol.Sort,''fth_is_sorts_.____endfth.Constant,'__[''Qid.Sort, ''ImportList.Sort,''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort, ''MembAxSet.Sort,''EquationSet.Sort],''FTheory.Sort],'op-hook[ ''modSymbol.Sort,''mod_is_sorts_._____endm.Constant,'__[''Header.Sort, ''ImportList.Sort,''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort, ''MembAxSet.Sort,''EquationSet.Sort,''RuleSet.Sort],''SModule.Sort], 'op-hook[''thSymbol.Sort,''th_is_sorts_._____endth.Constant,'__[''Qid.Sort, ''ImportList.Sort,''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort, ''MembAxSet.Sort,''EquationSet.Sort,''RuleSet.Sort],''STheory.Sort], 'op-hook[''smodSymbol.Sort,''smod_is_sorts_._______endsm.Constant,'__[ ''Header.Sort,''ImportList.Sort,''SortSet.Sort,''SubsortDeclSet.Sort, ''OpDeclSet.Sort,''MembAxSet.Sort,''EquationSet.Sort,''RuleSet.Sort, ''StratDeclSet.Sort,''StratDefSet.Sort],''StratModule.Sort],'op-hook[ ''sthSymbol.Sort,''sth_is_sorts_._______endsth.Constant,'__[''Header.Sort, ''ImportList.Sort,''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort, ''MembAxSet.Sort,''EquationSet.Sort,''RuleSet.Sort,''StratDeclSet.Sort, ''StratDefSet.Sort],''StratTheory.Sort],'op-hook[''sortMappingSymbol.Sort, ''sort_to_..Qid,'__[''Sort.Sort,''Sort.Sort],''SortMapping.Sort],'op-hook[ ''emptySortMappingSetSymbol.Sort,''none.Sort,'nil.TypeList, ''SortMappingSet.Sort],'op-hook[''sortMappingSetSymbol.Sort,''__.Sort,'__[ ''SortMappingSet.Sort,''SortMappingSet.Sort],''SortMappingSet.Sort], 'op-hook[''opMappingSymbol.Sort,''op_to_..Qid,'__[''Qid.Sort,''Qid.Sort], ''OpMapping.Sort],'op-hook[''opSpecificMappingSymbol.Sort, ''op_:_->_to_..Qid,'__[''Qid.Sort,''TypeList.Sort,''Type.Sort,''Qid.Sort], ''OpMapping.Sort],'op-hook[''opTermMappingSymbol.Sort,''op_to`term_..Qid, '__[''Term.Sort,''Term.Sort],''OpMapping.Sort],'op-hook[ ''emptyOpMappingSetSymbol.Sort,''none.Sort,'nil.TypeList, ''OpMappingSet.Sort],'op-hook[''opMappingSetSymbol.Sort,''__.Sort,'__[ ''OpMappingSet.Sort,''OpMappingSet.Sort],''OpMappingSet.Sort],'op-hook[ ''stratMappingSymbol.Sort,''strat_to_..Qid,'__[''Qid.Sort,''Qid.Sort], ''StratMapping.Sort],'op-hook[''stratSpecificMappingSymbol.Sort, ''strat_:_@_to_..Qid,'__[''Qid.Sort,''TypeList.Sort,''Type.Sort, ''Qid.Sort],''StratMapping.Sort],'op-hook[''stratExprMappingSymbol.Sort, ''strat_to`expr_..Qid,'__[''CallStrategy.Sort,''Strategy.Sort], ''StratMapping.Sort],'op-hook[''emptyStratMappingSetSymbol.Sort, ''none.Sort,'nil.TypeList,''StratMappingSet.Sort],'op-hook[ ''stratMappingSetSymbol.Sort,''__.Sort,'__[''StratMappingSet.Sort, ''StratMappingSet.Sort],''StratMappingSet.Sort],'op-hook[''viewSymbol.Sort, ''view_from_to_is___endv.Sort,'__[''Header.Sort,''ModuleExpression.Sort, ''ModuleExpression.Sort,''SortMappingSet.Sort,''OpMappingSet.Sort, ''StratMappingSet.Sort],''View.Sort],'op-hook[''anyTypeSymbol.Sort, ''anyType.Sort,'nil.TypeList,''Type?.Sort],'op-hook[ ''unificandPairSymbol.Sort,''_=?_.Sort,'__[''Term.Sort,''Term.Sort], ''UnificandPair.Sort],'op-hook[''unificationConjunctionSymbol.Sort, ''_/\_.Sort,'__[''UnificationProblem.Sort,''UnificationProblem.Sort], ''UnificationProblem.Sort],'op-hook[''patternSubjectPairSymbol.Sort, ''_<=?_.Sort,'__[''Term.Sort,''Term.Sort],''PatternSubjectPair.Sort], 'op-hook[''matchingConjunctionSymbol.Sort,''_/\_.Sort,'__[ ''MatchingProblem.Sort,''MatchingProblem.Sort],''MatchingProblem.Sort], 'op-hook[''resultPairSymbol.Sort,''`{_`,_`}.Qid,'__[''Term.Sort, ''Type.Sort],''ResultPair.Sort],'op-hook[''resultTripleSymbol.Sort, ''`{_`,_`,_`}.Qid,'__[''Term.Sort,''Type.Sort,''Substitution.Sort], ''ResultTriple.Sort],'op-hook[''result4TupleSymbol.Sort, ''`{_`,_`,_`,_`}.Qid,'__[''Term.Sort,''Type.Sort,''Substitution.Sort, ''Context.Sort],''Result4Tuple.Sort],'op-hook[''matchPairSymbol.Sort, ''`{_`,_`}.Qid,'__[''Substitution.Sort,''Context.Sort],''MatchPair.Sort], 'op-hook[''unificationTripleSymbol.Sort,''`{_`,_`,_`}.Qid,'__[ ''Substitution.Sort,''Substitution.Sort,''Qid.Sort], ''UnificationTriple.Sort],'op-hook[''variantSymbol.Sort, ''`{_`,_`,_`,_`,_`}.Qid,'__[''Term.Sort,''Substitution.Sort,''Qid.Sort, ''Parent.Sort,''Bool.Sort],''Variant.Sort],'op-hook[ ''narrowingApplyResultSymbol.Sort,''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'__[ ''Term.Sort,''Type.Sort,''Context.Sort,''Qid.Sort,''Substitution.Sort, ''Substitution.Sort,''Qid.Sort],''NarrowingApplyResult.Sort],'op-hook[ ''narrowingSearchResultSymbol.Sort,''`{_`,_`,_`,_`,_`,_`}.Qid,'__[ ''Term.Sort,''Type.Sort,''Substitution.Sort,''Qid.Sort,''Substitution.Sort, ''Qid.Sort],''NarrowingSearchResult.Sort],'op-hook[''traceStepSymbol.Sort, ''`{_`,_`,_`}.Qid,'__[''Term.Sort,''Type.Sort,''Rule.Sort], ''TraceStep.Sort],'op-hook[''nilTraceSymbol.Sort,''nil.Sort,'nil.TypeList, ''Trace.Sort],'op-hook[''traceSymbol.Sort,''__.Sort,'__[''Trace.Sort, ''Trace.Sort],''Trace.Sort],'op-hook[''narrowingStepSymbol.Sort, ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'__[''Context.Sort,''Qid.Sort, ''Substitution.Sort,''Qid.Sort,''Term.Sort,''Type.Sort, ''Substitution.Sort],''NarrowingStep.Sort],'op-hook[ ''nilNarrowingTraceSymbol.Sort,''nil.Sort,'nil.TypeList, ''NarrowingTrace.Sort],'op-hook[''narrowingTraceSymbol.Sort,''__.Sort,'__[ ''NarrowingTrace.Sort,''NarrowingTrace.Sort],''NarrowingTrace.Sort], 'op-hook[''narrowingSearchPathResultSymbol.Sort,''`{_`,_`,_`,_`,_`,_`}.Qid, '__[''Term.Sort,''Type.Sort,''Substitution.Sort,''NarrowingTrace.Sort, ''Substitution.Sort,''Qid.Sort],''NarrowingSearchPathResult.Sort],'op-hook[ ''smtResultSymbol.Sort,''`{_`,_`,_`,_`}.Qid,'__[''Term.Sort, ''Substitution.Sort,''Term.Sort,''Nat.Sort],''SmtResult.Sort],'op-hook[ ''noParseSymbol.Sort,''noParse.Sort,''Nat.Sort,''ResultPair?.Sort], 'op-hook[''ambiguitySymbol.Sort,''ambiguity.Sort,'__[''ResultPair.Sort, ''ResultPair.Sort],''ResultPair?.Sort],'op-hook[''failure2Symbol.Sort, ''failure.Sort,'nil.TypeList,''ResultPair?.Sort],'op-hook[ ''failure3Symbol.Sort,''failure.Sort,'nil.TypeList,''ResultTriple?.Sort], 'op-hook[''failureIncomplete3Symbol.Sort,''failureIncomplete.Sort, 'nil.TypeList,''ResultTriple?.Sort],'op-hook[''failure4Symbol.Sort, ''failure.Sort,'nil.TypeList,''Result4Tuple?.Sort],'op-hook[ ''noUnifierPairSymbol.Sort,''noUnifier.Sort,'nil.TypeList, ''UnificationPair?.Sort],'op-hook[''noUnifierTripleSymbol.Sort, ''noUnifier.Sort,'nil.TypeList,''UnificationTriple?.Sort],'op-hook[ ''noUnifierIncompletePairSymbol.Sort,''noUnifierIncomplete.Sort, 'nil.TypeList,''UnificationPair?.Sort],'op-hook[ ''noUnifierIncompleteTripleSymbol.Sort,''noUnifierIncomplete.Sort, 'nil.TypeList,''UnificationTriple?.Sort],'op-hook[''noVariantSymbol.Sort, ''noVariant.Sort,'nil.TypeList,''Variant?.Sort],'op-hook[ ''noVariantIncompleteSymbol.Sort,''noVariantIncomplete.Sort,'nil.TypeList, ''Variant?.Sort],'op-hook[''narrowingApplyFailureSymbol.Sort, ''failure.Sort,'nil.TypeList,''NarrowingApplyResult?.Sort],'op-hook[ ''narrowingApplyFailureIncompleteSymbol.Sort,''failureIncomplete.Sort, 'nil.TypeList,''NarrowingApplyResult?.Sort],'op-hook[ ''narrowingSearchFailureSymbol.Sort,''failure.Sort,'nil.TypeList, ''NarrowingSearchResult?.Sort],'op-hook[ ''narrowingSearchFailureIncompleteSymbol.Sort,''failureIncomplete.Sort, 'nil.TypeList,''NarrowingSearchResult?.Sort],'op-hook[ ''narrowingSearchPathFailureSymbol.Sort,''failure.Sort,'nil.TypeList, ''NarrowingSearchPathResult?.Sort],'op-hook[ ''narrowingSearchPathFailureIncompleteSymbol.Sort,''failureIncomplete.Sort, 'nil.TypeList,''NarrowingSearchPathResult?.Sort],'op-hook[ ''noMatchSubstSymbol.Sort,''noMatch.Sort,'nil.TypeList, ''Substitution?.Sort],'op-hook[''noMatchIncompleteSubstSymbol.Sort, ''noMatchIncomplete.Sort,'nil.TypeList,''Substitution?.Sort],'op-hook[ ''noMatchPairSymbol.Sort,''noMatch.Sort,'nil.TypeList,''MatchPair?.Sort], 'op-hook[''failureTraceSymbol.Sort,''failure.Sort,'nil.TypeList, ''Trace?.Sort],'op-hook[''smtFailureSymbol.Sort,''failure.Sort, 'nil.TypeList,''SmtResult?.Sort],'op-hook[''noStratParseSymbol.Sort, ''noStratParse.Sort,''Nat.Sort,''Strategy?.Sort],'op-hook[ ''stratAmbiguitySymbol.Sort,''ambiguity.Sort,'__[''Strategy.Sort, ''Strategy.Sort],''Strategy?.Sort],'op-hook[''mixfixSymbol.Sort, ''mixfix.Sort,'nil.TypeList,''PrintOption.Sort],'op-hook[ ''withParensSymbol.Sort,''with-parens.Sort,'nil.TypeList, ''PrintOption.Sort],'op-hook[''flatSymbol.Sort,''flat.Sort,'nil.TypeList, ''PrintOption.Sort],'op-hook[''formatPrintOptionSymbol.Sort,''format.Sort, 'nil.TypeList,''PrintOption.Sort],'op-hook[''numberSymbol.Sort, ''number.Sort,'nil.TypeList,''PrintOption.Sort],'op-hook[''ratSymbol.Sort, ''rat.Sort,'nil.TypeList,''PrintOption.Sort],'op-hook[ ''emptyPrintOptionSetSymbol.Sort,''none.Sort,'nil.TypeList, ''PrintOptionSet.Sort],'op-hook[''printOptionSetSymbol.Sort,''__.Sort,'__[ ''PrintOptionSet.Sort,''PrintOptionSet.Sort],''PrintOptionSet.Sort], 'op-hook[''delaySymbol.Sort,''delay.Sort,'nil.TypeList, ''VariantOption.Sort],'op-hook[''filterSymbol.Sort,''filter.Sort, 'nil.TypeList,''VariantOption.Sort],'op-hook[ ''emptyVariantOptionSetSymbol.Sort,''none.Sort,'nil.TypeList, ''VariantOptionSet.Sort],'op-hook[''variantOptionSetSymbol.Sort,''__.Sort, '__[''VariantOptionSet.Sort,''VariantOptionSet.Sort], ''VariantOptionSet.Sort],'op-hook[''breadthFirstSymbol.Sort, ''breadthFirst.Sort,'nil.TypeList,''SrewriteOption.Sort],'op-hook[ ''depthFirstSymbol.Sort,''depthFirst.Sort,'nil.TypeList, ''SrewriteOption.Sort],'op-hook[''legacyUnificationPairSymbol.Sort, ''`{_`,_`}.Qid,'__[''Substitution.Sort,''Nat.Sort],''UnificationPair.Sort], 'op-hook[''legacyUnificationTripleSymbol.Sort,''`{_`,_`,_`}.Qid,'__[ ''Substitution.Sort,''Substitution.Sort,''Nat.Sort], ''UnificationTriple.Sort],'op-hook[''legacyVariantSymbol.Sort, ''`{_`,_`,_`,_`,_`}.Qid,'__[''Term.Sort,''Substitution.Sort,''Nat.Sort, ''Parent.Sort,''Bool.Sort],''Variant.Sort],'term-hook[''trueTerm.Sort, ''true.Bool.Constant],'term-hook[''falseTerm.Sort, ''false.Bool.Constant]]]],'op_:_->_`[_`].[''metaRewrite.Sort,'__[ ''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[ResultPair?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaRewrite.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaSearch.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Condition`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[ResultTriple?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaSearch.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaSearchPath.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Condition`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[Trace?`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''metaSearchPath.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaSmtSearch.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Condition`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[SmtResult?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaSmtSearch.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaSrewrite.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[StrategyList`,Strategy?`].Kind,''`[SrewriteOption`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[ResultPair?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaSrewrite.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaUnify.Sort,'__[''`[Module`].Kind,''`[UnificationProblem`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''legacyMetaUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaUnify.Sort,'__[''`[Module`].Kind,''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''metaUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaVariantDisjointUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationTriple?`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''legacyMetaVariantDisjointUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaVariantDisjointUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationTriple?`].Kind,'none.AttrSet],'op_:_->_`[_`].[ ''metaVariantDisjointUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[VariantOptionSet`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationTriple?`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaVariantDisjointUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaVariantMatch.Sort,'__[''`[Module`].Kind,''`[MatchingProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[VariantOptionSet`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[Substitution?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaVariantMatch.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaVariantUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''legacyMetaVariantUnify.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaVariantUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`].Kind, 'none.AttrSet],'op_:_->_`[_`].[''metaVariantUnify.Sort,'__[ ''`[Module`].Kind,''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[VariantOptionSet`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''metaVariantUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaXapply.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Substitution?`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[Result4Tuple?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaXapply.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaXmatch.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Condition`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''metaXmatch.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metadata.Sort,''String.Sort,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''min.Sort,'__[''Nat.Sort,''Nat.Sort],''Nat.Sort,'__['assoc.Attr, 'comm.Attr,'special['__['id-hook[''ACU_NumberOpSymbol.Sort,''min.Sort], 'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]], 'op_:_->_`[_`].[''min.Sort,'__[''NzNat.Sort,''NzNat.Sort],''NzNat.Sort,'__[ 'assoc.Attr,'comm.Attr,'special['__['id-hook[''ACU_NumberOpSymbol.Sort, ''min.Sort],'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort, ''NzNat.Sort]]]]],'op_:_->_`[_`].[''minimalSorts.Sort,'__[ ''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__[ 'id-hook[''MetaLevelOpSymbol.Sort,''metaMinimalSorts.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''mixfix.Sort,'nil.TypeList,''PrintOption.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''modExp.Sort,'__[''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[FindResult`,NatList`,Bound`,Parent`].Kind,'special['__['id-hook[ ''NumberOpSymbol.Sort,''modExp.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort]]]],'op_:_->_`[_`].[ ''mod_is_sorts_._____endm.Constant,'__[''Header.Sort,''ImportList.Sort, ''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort,''MembAxSet.Sort, ''EquationSet.Sort,''RuleSet.Sort],''SModule.Sort,'__['ctor.Attr,'gather[ '__[''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort, ''&.Sort]],'format['__[''d.Sort,''d.Sort,''s.Sort,''n++i.Sort,''ni.Sort, ''d.Sort,''d.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort, ''n--i.Sort,''d.Sort]]]],'op_:_->_`[_`].[''msg.Sort,'nil.TypeList, ''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''narrowing.Sort,'nil.TypeList, ''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''nil.Sort,'nil.TypeList, ''EqCondition.Sort,'ctor.Attr],'op_:_->_`[_`].[''nil.Sort,'nil.TypeList, ''HookList.Sort,'ctor.Attr],'op_:_->_`[_`].[''nil.Sort,'nil.TypeList, ''ImportList.Sort,'ctor.Attr],'op_:_->_`[_`].[''nil.Sort,'nil.TypeList, ''NarrowingTrace.Sort,'ctor.Attr],'op_:_->_`[_`].[''nil.Sort,'nil.TypeList, ''NatList.Sort,'ctor.Attr],'op_:_->_`[_`].[''nil.Sort,'nil.TypeList, ''ParameterDeclList.Sort,'ctor.Attr],'op_:_->_`[_`].[''nil.Sort, 'nil.TypeList,''QidList.Sort,'ctor.Attr],'op_:_->_`[_`].[''nil.Sort, 'nil.TypeList,''Trace.Sort,'ctor.Attr],'op_:_->_`[_`].[''nil.Sort, 'nil.TypeList,''TypeList.Sort,'ctor.Attr],'op_:_->_`[_`].[''noMatch.Sort, 'nil.TypeList,''MatchPair?.Sort,'ctor.Attr],'op_:_->_`[_`].[''noMatch.Sort, 'nil.TypeList,''Substitution?.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''noMatchIncomplete.Sort,'nil.TypeList,''Substitution?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''noParse.Sort,''Nat.Sort,''ResultPair?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''noStratParse.Sort,''Nat.Sort,''Strategy?.Sort, 'ctor.Attr],'op_:_->_`[_`].[''noUnifier.Sort,'nil.TypeList, ''UnificationPair?.Sort,'ctor.Attr],'op_:_->_`[_`].[''noUnifier.Sort, 'nil.TypeList,''UnificationTriple?.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''noUnifierIncomplete.Sort,'nil.TypeList,''UnificationPair?.Sort, 'ctor.Attr],'op_:_->_`[_`].[''noUnifierIncomplete.Sort,'nil.TypeList, ''UnificationTriple?.Sort,'ctor.Attr],'op_:_->_`[_`].[''noVariant.Sort, 'nil.TypeList,''Variant?.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''noVariantIncomplete.Sort,'nil.TypeList,''Variant?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''AttrSet.Sort,'ctor.Attr], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''EmptyQidSet.Sort,'ctor.Attr], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''EquationSet.Sort,'ctor.Attr], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''MembAxSet.Sort,'ctor.Attr], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''OpDeclSet.Sort,'ctor.Attr], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''OpMappingSet.Sort,'ctor.Attr], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''Parent.Sort,'none.AttrSet], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''PrintOptionSet.Sort, 'ctor.Attr],'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''QidSet.Sort, 'ctor.Attr],'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''RuleSet.Sort, 'ctor.Attr],'op_:_->_`[_`].[''none.Sort,'nil.TypeList, ''SortMappingSet.Sort,'ctor.Attr],'op_:_->_`[_`].[''none.Sort, 'nil.TypeList,''StratDeclSet.Sort,'ctor.Attr],'op_:_->_`[_`].[''none.Sort, 'nil.TypeList,''StratDefSet.Sort,'ctor.Attr],'op_:_->_`[_`].[''none.Sort, 'nil.TypeList,''StratMappingSet.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''none.Sort,'nil.TypeList,''SubsortDeclSet.Sort,'ctor.Attr], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''Substitution.Sort,'ctor.Attr], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''VariantOptionSet.Sort, 'ctor.Attr],'op_:_->_`[_`].[''nonexec.Sort,'nil.TypeList,''Attr.Sort, 'ctor.Attr],'op_:_->_`[_`].[''not.Sort,''Strategy.Sort,''Strategy.Sort, 'ctor.Attr],'op_:_->_`[_`].[''notFound.Sort,'nil.TypeList, ''FindResult.Sort,'ctor.Attr],'op_:_->_`[_`].[''not_.Sort,''Bool.Sort, ''Bool.Sort,'prec['s_^53['0.Zero]]],'op_:_->_`[_`].[''number.Sort, 'nil.TypeList,''PrintOption.Sort,'ctor.Attr],'op_:_->_`[_`].[''object.Sort, 'nil.TypeList,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''occurs.Sort,'__[ ''Nat.Sort,''NatList.Sort],''Bool.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''occurs.Sort,'__[''Qid.Sort,''QidList.Sort],''Bool.Sort,'none.AttrSet], 'op_:_->_`[_`].[''one.Sort,''Strategy.Sort,''Strategy.Sort,'ctor.Attr], 'op_:_->_`[_`].[''op-hook.Sort,'__[''Qid.Sort,''Qid.Sort,''QidList.Sort, ''Qid.Sort],''Hook.Sort,'__['ctor.Attr,'format['__[''nssss.Sort, ''d.Sort]]]],'op_:_->_`[_`].[''op_:_->_`[_`]..Qid,'__[''Qid.Sort, ''TypeList.Sort,''Type.Sort,''AttrSet.Sort],''OpDecl.Sort,'__['ctor.Attr, 'format['__[''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''s.Sort, ''d.Sort,''d.Sort,''s.Sort,''d.Sort]]]],'op_:_->_`[_`].[''op_:_->_to_..Qid, '__[''Qid.Sort,''TypeList.Sort,''Type.Sort,''Qid.Sort],''OpMapping.Sort, 'ctor.Attr],'op_:_->_`[_`].[''op_:_->_to_`[_`].Qid,'__[''Qid.Sort, ''TypeList.Sort,''Type.Sort,''Qid.Sort,''AttrSet.Sort],''Renaming.Sort,'__[ 'ctor.Attr,'format['__[''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort,''d.Sort,''d.Sort]]]], 'op_:_->_`[_`].[''op_to_..Qid,'__[''Qid.Sort,''Qid.Sort],''OpMapping.Sort, 'ctor.Attr],'op_:_->_`[_`].[''op_to_`[_`].Qid,'__[''Qid.Sort,''Qid.Sort, ''AttrSet.Sort],''Renaming.Sort,'__['ctor.Attr,'format['__[''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort,''d.Sort,''d.Sort]]]], 'op_:_->_`[_`].[''op_to`term_..Qid,'__[''Term.Sort,''Term.Sort], ''OpMapping.Sort,'ctor.Attr],'op_:_->_`[_`].[''owise.Sort,'nil.TypeList, ''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''poly.Sort,''NeNatList.Sort, ''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''prec.Sort,''Nat.Sort,''Attr.Sort, 'ctor.Attr],'op_:_->_`[_`].[''print.Sort,''QidList.Sort,''Attr.Sort, 'ctor.Attr],'op_:_->_`[_`].[''protecting_..Qid,''ModuleExpression.Sort, ''Import.Sort,'ctor.Attr],'op_:_->_`[_`].[''qid.Sort,''`[String`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[''QuotedIdentifierOpSymbol.Sort, ''qid.Sort],'op-hook[''quotedIdentifierSymbol.Sort,''.Sort, 'nil.TypeList,''Qid.Sort],'op-hook[''stringSymbol.Sort,''.Sort, 'nil.TypeList,''Char.Sort]]]],'op_:_->_`[_`].[''rat.Sort,'nil.TypeList, ''PrintOption.Sort,'ctor.Attr],'op_:_->_`[_`].[''reverse.Sort, ''NatList.Sort,''NatList.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''reverse.Sort,''NeNatList.Sort,''NeNatList.Sort,'none.AttrSet], 'op_:_->_`[_`].[''reverse.Sort,''NeQidList.Sort,''NeQidList.Sort, 'none.AttrSet],'op_:_->_`[_`].[''reverse.Sort,''QidList.Sort, ''QidList.Sort,'none.AttrSet],'op_:_->_`[_`].[''rfind.Sort,'__[ ''String.Sort,''String.Sort,''Nat.Sort],''FindResult.Sort,'special['__[ 'id-hook[''StringOpSymbol.Sort,''rfind.Sort],'op-hook[''stringSymbol.Sort, ''.Sort,'nil.TypeList,''Char.Sort],'op-hook[''succSymbol.Sort, ''s_.Sort,''Nat.Sort,''NzNat.Sort],'term-hook[''notFoundTerm.Sort, ''notFound.FindResult.Constant]]]],'op_:_->_`[_`].[''right-id.Sort, ''Term.Sort,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''rl_=>_`[_`]..Qid,'__[ ''Term.Sort,''Term.Sort,''AttrSet.Sort],''Rule.Sort,'__['ctor.Attr,'format[ '__[''d.Sort,''d.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort,''d.Sort, ''s.Sort,''d.Sort]]]],'op_:_->_`[_`].[''s_.Sort,''Nat.Sort,''NzNat.Sort, '__['iter.Attr,'ctor.Attr,'special['__['id-hook[''SuccSymbol.Sort, 'nil.TypeList],'term-hook[''zeroTerm.Sort,''0.Zero.Constant]]]]], 'op_:_->_`[_`].[''sameKind.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[Bool`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaSameKind.Sort],'op-hook[''shareWith.Sort, ''metaReduce.Sort,'__[''Module.Sort,''ModuleExpression.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''sd.Sort,'__[''Nat.Sort, ''Nat.Sort],''Nat.Sort,'__['comm.Attr,'special['__['id-hook[ ''CUI_NumberOpSymbol.Sort,''sd.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[''sd_:=_`[_`]..Qid,'__[ ''CallStrategy.Sort,''Strategy.Sort,''AttrSet.Sort],''StratDefinition.Sort, '__['ctor.Attr,'format['__[''d.Sort,''d.Sort,''d.Sort,''d.Sort,''s.Sort, ''d.Sort,''d.Sort,''s.Sort,''d.Sort]]]],'op_:_->_`[_`].[''size.Sort, ''NatList.Sort,''Nat.Sort,'none.AttrSet],'op_:_->_`[_`].[''size.Sort, ''NeNatList.Sort,''NzNat.Sort,'none.AttrSet],'op_:_->_`[_`].[''size.Sort, ''NeQidList.Sort,''NzNat.Sort,'none.AttrSet],'op_:_->_`[_`].[''size.Sort, ''QidList.Sort,''Nat.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''smod_is_sorts_._______endsm.Constant,'__[''Header.Sort,''ImportList.Sort, ''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort,''MembAxSet.Sort, ''EquationSet.Sort,''RuleSet.Sort,''StratDeclSet.Sort,''StratDefSet.Sort], ''StratModule.Sort,'__['ctor.Attr,'gather['__[''&.Sort,''&.Sort,''&.Sort, ''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort]],'format[ '__[''d.Sort,''d.Sort,''s.Sort,''n++i.Sort,''ni.Sort,''d.Sort,''d.Sort, ''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort, ''n--i.Sort,''d.Sort]]]],'op_:_->_`[_`].[''sortLeq.Sort,'__[ ''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[Bool`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaSortLeq.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''sort_to_.Sort,'__[''Qid.Sort,''Qid.Sort],''Renaming.Sort,'ctor.Attr], 'op_:_->_`[_`].[''sort_to_..Qid,'__[''Sort.Sort,''Sort.Sort], ''SortMapping.Sort,'ctor.Attr],'op_:_->_`[_`].[''special.Sort, ''NeHookList.Sort,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''sth_is_sorts_._______endsth.Constant,'__[''Header.Sort,''ImportList.Sort, ''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort,''MembAxSet.Sort, ''EquationSet.Sort,''RuleSet.Sort,''StratDeclSet.Sort,''StratDefSet.Sort], ''StratTheory.Sort,'__['ctor.Attr,'gather['__[''&.Sort,''&.Sort,''&.Sort, ''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort]],'format[ '__[''d.Sort,''d.Sort,''s.Sort,''n++i.Sort,''ni.Sort,''d.Sort,''d.Sort, ''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort, ''n--i.Sort,''d.Sort]]]],'op_:_->_`[_`].[''strat.Sort,''NeNatList.Sort, ''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''strat_:_@_`[_`]..Qid,'__[ ''Qid.Sort,''TypeList.Sort,''Type.Sort,''AttrSet.Sort],''StratDecl.Sort, '__['ctor.Attr,'format['__[''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort, ''d.Sort,''s.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort]]]],'op_:_->_`[_`].[ ''strat_:_@_to_.Variable,'__[''Qid.Sort,''TypeList.Sort,''Type.Sort, ''Qid.Sort],''Renaming.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''strat_:_@_to_..Qid,'__[''Qid.Sort,''TypeList.Sort,''Type.Sort, ''Qid.Sort],''StratMapping.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''strat_to_.Sort,'__[''Qid.Sort,''Qid.Sort],''Renaming.Sort,'ctor.Attr], 'op_:_->_`[_`].[''strat_to_..Qid,'__[''Qid.Sort,''Qid.Sort], ''StratMapping.Sort,'ctor.Attr],'op_:_->_`[_`].[''strat_to`expr_..Qid,'__[ ''CallStrategy.Sort,''Strategy.Sort],''StratMapping.Sort,'ctor.Attr], 'op_:_->_`[_`].[''string.Sort,''Qid.Sort,''String.Sort,'special['__[ 'id-hook[''QuotedIdentifierOpSymbol.Sort,''string.Sort],'op-hook[ ''quotedIdentifierSymbol.Sort,''.Sort,'nil.TypeList,''Qid.Sort], 'op-hook[''stringSymbol.Sort,''.Sort,'nil.TypeList, ''Char.Sort]]]],'op_:_->_`[_`].[''subsort_<_..Qid,'__[''Sort.Sort, ''Sort.Sort],''SubsortDecl.Sort,'ctor.Attr],'op_:_->_`[_`].[''substr.Sort, '__[''String.Sort,''Nat.Sort,''Nat.Sort],''String.Sort,'special['__[ 'id-hook[''StringOpSymbol.Sort,''substr.Sort],'op-hook[''stringSymbol.Sort, ''.Sort,'nil.TypeList,''Char.Sort],'op-hook[''succSymbol.Sort, ''s_.Sort,''Nat.Sort,''NzNat.Sort]]]],'op_:_->_`[_`].[''tail.Sort, ''NeNatList.Sort,''NatList.Sort,'none.AttrSet],'op_:_->_`[_`].[''tail.Sort, ''NeQidList.Sort,''QidList.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''term-hook.Sort,'__[''Qid.Sort,''Term.Sort],''Hook.Sort,'__['ctor.Attr, 'format['__[''nssss.Sort,''d.Sort]]]],'op_:_->_`[_`].[''test.Sort, ''Strategy.Sort,''Strategy.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''th_is_sorts_._____endth.Constant,'__[''Qid.Sort,''ImportList.Sort, ''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort,''MembAxSet.Sort, ''EquationSet.Sort,''RuleSet.Sort],''STheory.Sort,'__['ctor.Attr,'gather[ '__[''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort, ''&.Sort]],'format['__[''d.Sort,''d.Sort,''d.Sort,''n++i.Sort,''ni.Sort, ''d.Sort,''d.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort, ''n--i.Sort,''d.Sort]]]],'op_:_->_`[_`].[''top.Sort,''RuleApplication.Sort, ''Strategy.Sort,'ctor.Attr],'op_:_->_`[_`].[''true.Sort,'nil.TypeList, ''Bool.Sort,'__['ctor.Attr,'special['id-hook[''SystemTrue.Sort, 'nil.TypeList]]]],'op_:_->_`[_`].[''try.Sort,''Strategy.Sort, ''Strategy.Sort,'ctor.Attr],'op_:_->_`[_`].[''unbounded.Sort,'nil.TypeList, ''Bound.Sort,'ctor.Attr],'op_:_->_`[_`].[''union.Sort,'__[''NeQidSet.Sort, ''QidSet.Sort],''NeQidSet.Sort,'none.AttrSet],'op_:_->_`[_`].[''union.Sort, '__[''QidSet.Sort,''NeQidSet.Sort],''NeQidSet.Sort,'none.AttrSet], 'op_:_->_`[_`].[''union.Sort,'__[''QidSet.Sort,''QidSet.Sort], ''QidSet.Sort,'none.AttrSet],'op_:_->_`[_`].[''upEqs.Sort,'__[''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Bool`].Kind],''`[EquationSet`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaUpEqs.Sort],'op-hook[''shareWith.Sort, ''metaReduce.Sort,'__[''Module.Sort,''ModuleExpression.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''upImports.Sort,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[ImportList`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpImports.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''upMbs.Sort,'__[''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Bool`].Kind], ''`[MembAxSet`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpMbs.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''upModule.Sort,'__[''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Bool`].Kind], ''`[Module`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpModule.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''upOpDecls.Sort,'__[''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Bool`].Kind], ''`[OpDeclSet`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpOpDecls.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''upRls.Sort,'__[''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Bool`].Kind], ''`[RuleSet`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpRls.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''upSds.Sort,'__[''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Bool`].Kind], ''`[StratDefSet`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpSds.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''upSorts.Sort,'__[''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Bool`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpSorts.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''upStratDecls.Sort,'__[''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[Bool`].Kind],''`[StratDeclSet`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaUpStratDecls.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''upSubsortDecls.Sort,'__[''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Bool`].Kind], ''`[SubsortDeclSet`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpSubsortDecls.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''upTerm.Sort,''Universal.Sort,''Term.Sort,'__['poly['s_[ '0.Zero]],'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpTerm.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]]], 'op_:_->_`[_`].[''upView.Sort,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[View`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''metaUpView.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''upperCase.Sort,''String.Sort,''String.Sort,'special['__['id-hook[ ''StringOpSymbol.Sort,''upperCase.Sort],'op-hook[''stringSymbol.Sort, ''.Sort,'nil.TypeList,''Char.Sort]]]],'op_:_->_`[_`].[ ''variant.Sort,'nil.TypeList,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''view_from_to_is___endv.Sort,'__[''Header.Sort,''ModuleExpression.Sort, ''ModuleExpression.Sort,''SortMappingSet.Sort,''OpMappingSet.Sort, ''StratMappingSet.Sort],''View.Sort,'__['ctor.Attr,'gather['__[''&.Sort, ''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort]],'format['__[''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''n++i.Sort, ''ni.Sort,''ni.Sort,''n--i.Sort,''d.Sort]]]],'op_:_->_`[_`].[ ''wellFormed.Sort,''Module.Sort,''Bool.Sort,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaWellFormedModule.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''wellFormed.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind], ''`[Bool`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaWellFormedTerm.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''wellFormed.Sort,'__[''`[Module`].Kind, ''`[Substitution?`].Kind],''`[Bool`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaWellFormedSubstitution.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''with-parens.Sort,'nil.TypeList,''PrintOption.Sort,'ctor.Attr], 'op_:_->_`[_`].[''xmatch_s.t._.Constant,'__[''Term.Sort, ''EqCondition.Sort],''Strategy.Sort,'__['ctor.Attr,'prec['s_^21[ '0.Zero]]]],'op_:_->_`[_`].[''xmatchrew_s.t._by_.Constant,'__[''Term.Sort, ''EqCondition.Sort,''UsingPairSet.Sort],''Strategy.Sort,'ctor.Attr], 'op_:_->_`[_`].[''|_|.Sort,''NeQidSet.Sort,''NzNat.Sort,'none.AttrSet], 'op_:_->_`[_`].[''|_|.Sort,''QidSet.Sort,''Nat.Sort,'none.AttrSet]], 'none.MembAxSet,'__['eq_=_`[_`].['_`[_`][''$applySubstitution.Sort,'_`,_[ ''Q:Qid.Variable,''S:Substitution.Variable]],''Q:Qid.Variable,'owise.Attr], 'eq_=_`[_`].['_`[_`][''$applySubstitution.Sort,'_`,_[''V:Variable.Variable, '_`[_`][''_;_.Sort,'_`,_[''S:Substitution.Variable,'_`[_`][''_<-_.Sort, '_`,_[''V:Variable.Variable,''T:Term.Variable]]]]]],''T:Term.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''$applySubstitution.Sort,'_`,_[ '_`[_`][''_`,_.Qid,'_`,_[''T:Term.Variable,''TL:NeTermList.Variable]], ''S:Substitution.Variable]],'_`[_`][''_`,_.Qid,'_`,_['_`[_`][ ''$applySubstitution.Sort,'_`,_[''T:Term.Variable, ''S:Substitution.Variable]],'_`[_`][''$applySubstitution.Sort,'_`,_[ ''TL:NeTermList.Variable,''S:Substitution.Variable]]]],'none.AttrSet], 'eq_=_`[_`].['_`[_`][''$applySubstitution.Sort,'_`,_['_`[_`][''_`[_`].Qid, '_`,_[''Q:Qid.Variable,''TL:NeTermList.Variable]], ''S:Substitution.Variable]],'_`[_`][''_`[_`].Qid,'_`,_[''Q:Qid.Variable, '_`[_`][''$applySubstitution.Sort,'_`,_[''TL:NeTermList.Variable, ''S:Substitution.Variable]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''$card.Sort,'_`,_[''none.EmptyQidSet.Constant,''C:Nat.Variable]], ''C:Nat.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''$card.Sort,'_`,_[ '_`[_`][''_;_.Sort,'_`,_[''E:Qid.Variable,''S:QidSet.Variable]], ''C:Nat.Variable]],'_`[_`][''$card.Sort,'_`,_[''S:QidSet.Variable,'_`[_`][ ''_+_.Sort,'_`,_[''C:Nat.Variable,'_`[_`][''s_.Sort,''0.Zero.Constant]]]]], 'owise.Attr],'eq_=_`[_`].['_`[_`][''$card.Sort,'_`,_['_`[_`][''_;_.Sort, '_`,_[''N:NeQidSet.Variable,''N:NeQidSet.Variable,''S:QidSet.Variable]], ''C:Nat.Variable]],'_`[_`][''$card.Sort,'_`,_['_`[_`][''_;_.Sort,'_`,_[ ''N:NeQidSet.Variable,''S:QidSet.Variable]],''C:Nat.Variable]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''$diff.Sort,'_`,_[ ''none.EmptyQidSet.Constant,''S':QidSet.Variable,''A:QidSet.Variable]], ''A:QidSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''$diff.Sort,'_`,_[ '_`[_`][''_;_.Sort,'_`,_[''E:Qid.Variable,''S:QidSet.Variable]], ''S':QidSet.Variable,''A:QidSet.Variable]],'_`[_`][''$diff.Sort,'_`,_[ ''S:QidSet.Variable,''S':QidSet.Variable,'_`[_`][''if_then_else_fi.Sort, '_`,_['_`[_`][''_in_.Sort,'_`,_[''E:Qid.Variable,''S':QidSet.Variable]], ''A:QidSet.Variable,'_`[_`][''_;_.Sort,'_`,_[''E:Qid.Variable, ''A:QidSet.Variable]]]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''$intersect.Sort,'_`,_[''none.EmptyQidSet.Constant,''S':QidSet.Variable, ''A:QidSet.Variable]],''A:QidSet.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''$intersect.Sort,'_`,_['_`[_`][''_;_.Sort,'_`,_[''E:Qid.Variable, ''S:QidSet.Variable]],''S':QidSet.Variable,''A:QidSet.Variable]],'_`[_`][ ''$intersect.Sort,'_`,_[''S:QidSet.Variable,''S':QidSet.Variable,'_`[_`][ ''if_then_else_fi.Sort,'_`,_['_`[_`][''_in_.Sort,'_`,_[''E:Qid.Variable, ''S':QidSet.Variable]],'_`[_`][''_;_.Sort,'_`,_[''E:Qid.Variable, ''A:QidSet.Variable]],''A:QidSet.Variable]]]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''$reverse.Sort,'_`,_[''nil.NatList.Constant, ''A:NatList.Variable]],''A:NatList.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''$reverse.Sort,'_`,_[''nil.TypeList.Constant, ''A:QidList.Variable]],''A:QidList.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''$reverse.Sort,'_`,_['_`[_`][''__.Sort,'_`,_[''E:Nat.Variable, ''L:NatList.Variable]],''A:NatList.Variable]],'_`[_`][''$reverse.Sort, '_`,_[''L:NatList.Variable,'_`[_`][''__.Sort,'_`,_[''E:Nat.Variable, ''A:NatList.Variable]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''$reverse.Sort,'_`,_['_`[_`][''__.Sort,'_`,_[''E:Qid.Variable, ''L:QidList.Variable]],''A:QidList.Variable]],'_`[_`][''$reverse.Sort, '_`,_[''L:QidList.Variable,'_`[_`][''__.Sort,'_`,_[''E:Qid.Variable, ''A:QidList.Variable]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][''$size.Sort, '_`,_[''nil.NatList.Constant,''C:Nat.Variable]],''C:Nat.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''$size.Sort,'_`,_[ ''nil.TypeList.Constant,''C:Nat.Variable]],''C:Nat.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''$size.Sort,'_`,_['_`[_`][''__.Sort,'_`,_[ ''E:Nat.Variable,''L:NatList.Variable]],''C:Nat.Variable]],'_`[_`][ ''$size.Sort,'_`,_[''L:NatList.Variable,'_`[_`][''_+_.Sort,'_`,_[ ''C:Nat.Variable,'_`[_`][''s_.Sort,''0.Zero.Constant]]]]],'none.AttrSet], 'eq_=_`[_`].['_`[_`][''$size.Sort,'_`,_['_`[_`][''__.Sort,'_`,_[ ''E:Qid.Variable,''L:QidList.Variable]],''C:Nat.Variable]],'_`[_`][ ''$size.Sort,'_`,_[''L:QidList.Variable,'_`[_`][''_+_.Sort,'_`,_[ ''C:Nat.Variable,'_`[_`][''s_.Sort,''0.Zero.Constant]]]]],'none.AttrSet], 'eq_=_`[_`].['_`[_`][''_;_.Sort,'_`,_[''A:Assignment.Variable, ''A:Assignment.Variable]],''A:Assignment.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''_;_.Sort,'_`,_[''N:NeQidSet.Variable, ''N:NeQidSet.Variable]],''N:NeQidSet.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''_;_.Sort,'_`,_[''T:TypeList.Variable,''T:TypeList.Variable]], ''T:TypeList.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''_\_.Sort,'_`,_[ ''S:QidSet.Variable,''N:NeQidSet.Variable]],'_`[_`][''$diff.Sort,'_`,_[ ''S:QidSet.Variable,''N:NeQidSet.Variable,''none.EmptyQidSet.Constant]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''_\_.Sort,'_`,_[''S:QidSet.Variable, ''none.EmptyQidSet.Constant]],''S:QidSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''__.Sort,'_`,_[''A:Attr.Variable,''A:Attr.Variable]], ''A:Attr.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''__.Sort,'_`,_[ ''D:StratDefinition.Variable,''D:StratDefinition.Variable]], ''D:StratDefinition.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''__.Sort, '_`,_[''E:Equation.Variable,''E:Equation.Variable]],''E:Equation.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''__.Sort,'_`,_[''M:MembAx.Variable, ''M:MembAx.Variable]],''M:MembAx.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''__.Sort,'_`,_[''O:OpDecl.Variable,''O:OpDecl.Variable]], ''O:OpDecl.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''__.Sort,'_`,_[ ''O:OpMapping.Variable,''O:OpMapping.Variable]],''O:OpMapping.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''__.Sort,'_`,_[''O:StratDecl.Variable, ''O:StratDecl.Variable]],''O:StratDecl.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''__.Sort,'_`,_[''R:Rule.Variable,''R:Rule.Variable]], ''R:Rule.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''__.Sort,'_`,_[ ''S:SortMapping.Variable,''S:SortMapping.Variable]], ''S:SortMapping.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''__.Sort, '_`,_[''S:StratMapping.Variable,''S:StratMapping.Variable]], ''S:StratMapping.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''__.Sort, '_`,_[''S:SubsortDecl.Variable,''S:SubsortDecl.Variable]], ''S:SubsortDecl.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''_`,_.Qid, '_`,_[''U:UsingPair.Variable,''U:UsingPair.Variable]], ''U:UsingPair.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''_and-then_.Sort,'_`,_[''false.Bool.Constant,''B:`[Bool`].Variable]], ''false.Bool.Constant,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''_and-then_.Sort,'_`,_[''true.Bool.Constant,''B:`[Bool`].Variable]], ''B:`[Bool`].Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''_and_.Sort, '_`,_[''A:Bool.Variable,''A:Bool.Variable]],''A:Bool.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''_and_.Sort,'_`,_[''A:Bool.Variable, '_`[_`][''_xor_.Sort,'_`,_[''B:Bool.Variable,''C:Bool.Variable]]]],'_`[_`][ ''_xor_.Sort,'_`,_['_`[_`][''_and_.Sort,'_`,_[''A:Bool.Variable, ''B:Bool.Variable]],'_`[_`][''_and_.Sort,'_`,_[''A:Bool.Variable, ''C:Bool.Variable]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][''_and_.Sort, '_`,_[''false.Bool.Constant,''A:Bool.Variable]],''false.Bool.Constant, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''_and_.Sort,'_`,_[ ''true.Bool.Constant,''A:Bool.Variable]],''A:Bool.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''_implies_.Sort,'_`,_[''A:Bool.Variable, ''B:Bool.Variable]],'_`[_`][''not_.Sort,'_`[_`][''_xor_.Sort,'_`,_[ ''A:Bool.Variable,'_`[_`][''_and_.Sort,'_`,_[''A:Bool.Variable, ''B:Bool.Variable]]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][''_in_.Sort, '_`,_[''E:Qid.Variable,''S:QidSet.Variable]],''false.Bool.Constant, 'owise.Attr],'eq_=_`[_`].['_`[_`][''_in_.Sort,'_`,_[''E:Qid.Variable, '_`[_`][''_;_.Sort,'_`,_[''E:Qid.Variable,''S:QidSet.Variable]]]], ''true.Bool.Constant,'none.AttrSet],'eq_=_`[_`].['_`[_`][''_or-else_.Sort, '_`,_[''false.Bool.Constant,''B:`[Bool`].Variable]],''B:`[Bool`].Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''_or-else_.Sort,'_`,_[ ''true.Bool.Constant,''B:`[Bool`].Variable]],''true.Bool.Constant, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''_or_.Sort,'_`,_[''A:Bool.Variable, ''B:Bool.Variable]],'_`[_`][''_xor_.Sort,'_`,_['_`[_`][''_and_.Sort,'_`,_[ ''A:Bool.Variable,''B:Bool.Variable]],'_`[_`][''_xor_.Sort,'_`,_[ ''A:Bool.Variable,''B:Bool.Variable]]]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''_psubset_.Sort,'_`,_[''S:QidSet.Variable,''S':QidSet.Variable]], '_`[_`][''_and-then_.Sort,'_`,_['_`[_`][''_=/=_.Sort,'_`,_[ ''S:QidSet.Variable,''S':QidSet.Variable]],'_`[_`][''_subset_.Sort,'_`,_[ ''S:QidSet.Variable,''S':QidSet.Variable]]]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''_subset_.Sort,'_`,_[''none.EmptyQidSet.Constant, ''S':QidSet.Variable]],''true.Bool.Constant,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''_subset_.Sort,'_`,_['_`[_`][''_;_.Sort,'_`,_[''E:Qid.Variable, ''S:QidSet.Variable]],''S':QidSet.Variable]],'_`[_`][''_and-then_.Sort, '_`,_['_`[_`][''_in_.Sort,'_`,_[''E:Qid.Variable,''S':QidSet.Variable]], '_`[_`][''_subset_.Sort,'_`,_[''S:QidSet.Variable,''S':QidSet.Variable]]]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''_xor_.Sort,'_`,_[''A:Bool.Variable, ''A:Bool.Variable]],''false.Bool.Constant,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''_xor_.Sort,'_`,_[''false.Bool.Constant,''A:Bool.Variable]], ''A:Bool.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''`[_`].Kind, ''Q:Qid.Variable],'_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[ ''Q:Qid.Variable,'_`[_`][''including_..Qid,''Q:Qid.Variable], ''none.EmptyQidSet.Constant,''none.SubsortDeclSet.Constant, ''none.OpDeclSet.Constant,''none.MembAxSet.Constant, ''none.EquationSet.Constant,''none.RuleSet.Constant, ''none.StratDeclSet.Constant,''none.StratDefSet.Constant]],'none.AttrSet], 'eq_=_`[_`].['_`[_`][''append.Sort,'_`,_[''A:NatList.Variable, ''L:NatList.Variable]],'_`[_`][''__.Sort,'_`,_[''A:NatList.Variable, ''L:NatList.Variable]],'none.AttrSet],'eq_=_`[_`].['_`[_`][''append.Sort, '_`,_[''A:QidList.Variable,''L:QidList.Variable]],'_`[_`][''__.Sort,'_`,_[ ''A:QidList.Variable,''L:QidList.Variable]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''applySubstitution.Sort,'_`,_[''M:Module.Variable, ''T:Term.Variable,''S:Substitution.Variable]],'_`[_`][''getTerm.Sort, '_`[_`][''metaNormalize.Sort,'_`,_[''M:Module.Variable,'_`[_`][ ''$applySubstitution.Sort,'_`,_[''T:Term.Variable, ''S:Substitution.Variable]]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''delete.Sort,'_`,_[''E:Qid.Variable,''S:QidSet.Variable]], ''S:QidSet.Variable,'owise.Attr],'eq_=_`[_`].['_`[_`][''delete.Sort,'_`,_[ ''E:Qid.Variable,'_`[_`][''_;_.Sort,'_`,_[''E:Qid.Variable, ''S:QidSet.Variable]]]],'_`[_`][''delete.Sort,'_`,_[''E:Qid.Variable, ''S:QidSet.Variable]],'none.AttrSet],'eq_=_`[_`].['_`[_`][''front.Sort, '_`[_`][''__.Sort,'_`,_[''L:NatList.Variable,''E:Nat.Variable]]], ''L:NatList.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''front.Sort, '_`[_`][''__.Sort,'_`,_[''L:QidList.Variable,''E:Qid.Variable]]], ''L:QidList.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getAccumulatedSubstitution.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`,_`}.Qid, '_`,_[''C:Context.Variable,''L:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable,''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable]]],''A:Substitution.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getAccumulatedSubstitution.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable,''SV:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable]]],''A:Substitution.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''getContext.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[ ''C:Context.Variable,''L:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable,''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable]]],''C:Context.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getContext.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''C:Context.Variable,''L:Qid.Variable,''TS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''C:Context.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getContext.Sort,'_`[_`][ ''`{_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''S:Substitution.Variable,''C:Context.Variable]]],''C:Context.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getContext.Sort,'_`[_`][ ''`{_`,_`}.Qid,'_`,_[''S:Substitution.Variable,''C:Context.Variable]]], ''C:Context.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getEqs.Sort, '_`[_`][''fmod_is_sorts_.____endfm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''EQS:EquationSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getEqs.Sort,'_`[_`][''fth_is_sorts_.____endfth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''EQS:EquationSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getEqs.Sort,'_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[ ''H:Header.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''EQS:EquationSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getEqs.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''EQS:EquationSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getEqs.Sort,'_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''EQS:EquationSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getEqs.Sort,'_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''EQS:EquationSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getFrom.Sort,'_`[_`][''view_from_to_is___endv.Sort, '_`,_[''Q:Qid.Variable,''ME:ModuleExpression.Variable, ''ME':ModuleExpression.Variable,''SMS:SortMappingSet.Variable, ''OMS:OpMappingSet.Variable,''TMS:StratMappingSet.Variable]]], ''ME:ModuleExpression.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getImports.Sort,'_`[_`][''fmod_is_sorts_.____endfm.Constant,'_`,_[ ''H:Header.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''IL:ImportList.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getImports.Sort,'_`[_`][''fth_is_sorts_.____endfth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''IL:ImportList.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getImports.Sort,'_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[ ''H:Header.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''IL:ImportList.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getImports.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''IL:ImportList.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getImports.Sort,'_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''IL:ImportList.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getImports.Sort,'_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''IL:ImportList.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getInitialSubstitution.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''S:Substitution.Variable,''T:NarrowingTrace.Variable, ''U:Substitution.Variable,''UV:Qid.Variable]]],''S:Substitution.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getInitialTerm.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''S:Substitution.Variable,''T:NarrowingTrace.Variable, ''U:Substitution.Variable,''UV:Qid.Variable]]],''T:Term.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getInitialType.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''S:Substitution.Variable,''T:NarrowingTrace.Variable, ''U:Substitution.Variable,''UV:Qid.Variable]]],''T:Type.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getLabel.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''C:Context.Variable,''L:Qid.Variable, ''U:Substitution.Variable,''UV:Qid.Variable,''T:Term.Variable, ''T:Type.Variable,''A:Substitution.Variable]]],''L:Qid.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getLabel.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''C:Context.Variable,''L:Qid.Variable,''TS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''L:Qid.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getLhsSubstitution.Sort,'_`[_`][ ''`{_`,_`,_`}.Qid,'_`,_[''LS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''LS:Substitution.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getMbs.Sort,'_`[_`][ ''fmod_is_sorts_.____endfm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''MAS:MembAxSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getMbs.Sort, '_`[_`][''fth_is_sorts_.____endfth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''MAS:MembAxSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getMbs.Sort, '_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''MAS:MembAxSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getMbs.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''MAS:MembAxSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getMbs.Sort, '_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''MAS:MembAxSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getMbs.Sort, '_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''MAS:MembAxSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getMoreVariantsInLayerFlag.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''S:Substitution.Variable, ''Q:Qid.Variable,''P:Parent.Variable,''B:Bool.Variable]]], ''B:Bool.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getName.Sort, ''C:Constant.Variable],'_`[_`][''qid.Sort,'_`[_`][''substr.Sort,'_`,_[ '_`[_`][''string.Sort,''C:Constant.Variable],''0.Zero.Constant,'_`[_`][ ''rfind.Sort,'_`,_['_`[_`][''string.Sort,''C:Constant.Variable], ''".".Char.Constant,'_`[_`][''length.Sort,'_`[_`][''string.Sort, ''C:Constant.Variable]]]]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getName.Sort,''V:Variable.Variable],'_`[_`][''qid.Sort,'_`[_`][ ''substr.Sort,'_`,_['_`[_`][''string.Sort,''V:Variable.Variable], ''0.Zero.Constant,'_`[_`][''rfind.Sort,'_`,_['_`[_`][''string.Sort, ''V:Variable.Variable],''":".Char.Constant,'_`[_`][''length.Sort,'_`[_`][ ''string.Sort,''V:Variable.Variable]]]]]]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''getName.Sort,'_`[_`][''fmod_is_sorts_.____endfm.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]],''Q:Qid.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getName.Sort,'_`[_`][ ''fmod_is_sorts_.____endfm.Constant,'_`,_['_`[_`][''_`{_`}.Sort,'_`,_[ ''Q:Qid.Variable,''PDL:ParameterDeclList.Variable]], ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]],''Q:Qid.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getName.Sort,'_`[_`][ ''fth_is_sorts_.____endfth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]],''Q:Qid.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getName.Sort,'_`[_`][ ''mod_is_sorts_._____endm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''Q:Qid.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''getName.Sort,'_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[ '_`[_`][''_`{_`}.Sort,'_`,_[''Q:Qid.Variable, ''PDL:ParameterDeclList.Variable]],''IL:ImportList.Variable, ''SS:SortSet.Variable,''SSDS:SubsortDeclSet.Variable, ''OPDS:OpDeclSet.Variable,''MAS:MembAxSet.Variable, ''EQS:EquationSet.Variable,''RLS:RuleSet.Variable]]],''Q:Qid.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getName.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''Q:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getName.Sort, '_`[_`][''smod_is_sorts_._______endsm.Constant,'_`,_['_`[_`][''_`{_`}.Sort, '_`,_[''Q:Qid.Variable,''PDL:ParameterDeclList.Variable]], ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''Q:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getName.Sort, '_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''Q:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getName.Sort, '_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''Q:Qid.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''getName.Sort,'_`[_`][''view_from_to_is___endv.Sort,'_`,_[ ''Q:Qid.Variable,''ME:ModuleExpression.Variable, ''ME':ModuleExpression.Variable,''SMS:SortMappingSet.Variable, ''OMS:OpMappingSet.Variable,''TMS:StratMappingSet.Variable]]], ''Q:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getName.Sort, '_`[_`][''view_from_to_is___endv.Sort,'_`,_['_`[_`][''_`{_`}.Sort,'_`,_[ ''Q:Qid.Variable,''PDL:ParameterDeclList.Variable]], ''ME:ModuleExpression.Variable,''ME':ModuleExpression.Variable, ''SMS:SortMappingSet.Variable,''OMS:OpMappingSet.Variable, ''TMS:StratMappingSet.Variable]]],''Q:Qid.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getOpMappings.Sort,'_`[_`][ ''view_from_to_is___endv.Sort,'_`,_[''Q:Qid.Variable, ''ME:ModuleExpression.Variable,''ME':ModuleExpression.Variable, ''SMS:SortMappingSet.Variable,''OMS:OpMappingSet.Variable, ''TMS:StratMappingSet.Variable]]],''OMS:OpMappingSet.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getOps.Sort,'_`[_`][ ''fmod_is_sorts_.____endfm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''OPDS:OpDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getOps.Sort,'_`[_`][''fth_is_sorts_.____endfth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''OPDS:OpDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getOps.Sort,'_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[ ''H:Header.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''OPDS:OpDeclSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getOps.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''OPDS:OpDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getOps.Sort,'_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''OPDS:OpDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getOps.Sort,'_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''OPDS:OpDeclSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getParent.Sort,'_`[_`][''`{_`,_`,_`,_`,_`}.Qid, '_`,_[''T:Term.Variable,''S:Substitution.Variable,''Q:Qid.Variable, ''P:Parent.Variable,''B:Bool.Variable]]],''P:Parent.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getRhsSubstitution.Sort,'_`[_`][ ''`{_`,_`,_`}.Qid,'_`,_[''LS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''RS:Substitution.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getRls.Sort,'_`[_`][ ''fmod_is_sorts_.____endfm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''none.RuleSet.Constant,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getRls.Sort, '_`[_`][''fth_is_sorts_.____endfth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''none.RuleSet.Constant,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getRls.Sort, '_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''RLS:RuleSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getRls.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''RLS:RuleSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getRls.Sort, '_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''RLS:RuleSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getRls.Sort, '_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''RLS:RuleSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getRule.Sort,'_`[_`][''`{_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''T:Type.Variable,''R:Rule.Variable]]],''R:Rule.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getRuleSubstitution.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''C:Context.Variable,''L:Qid.Variable,''TS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''RS:Substitution.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getSds.Sort,'_`[_`][ ''fmod_is_sorts_.____endfm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''none.StratDefSet.Constant,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSds.Sort,'_`[_`][''fth_is_sorts_.____endfth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''none.StratDefSet.Constant,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSds.Sort,'_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[ ''H:Header.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''none.StratDefSet.Constant,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getSds.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''STDFS:StratDefSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSds.Sort,'_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''STDFS:StratDefSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSds.Sort,'_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''none.StratDefSet.Constant,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getSortMappings.Sort,'_`[_`][ ''view_from_to_is___endv.Sort,'_`,_[''Q:Qid.Variable, ''ME:ModuleExpression.Variable,''ME':ModuleExpression.Variable, ''SMS:SortMappingSet.Variable,''OMS:OpMappingSet.Variable, ''TMS:StratMappingSet.Variable]]],''SMS:SortMappingSet.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getSorts.Sort,'_`[_`][ ''fmod_is_sorts_.____endfm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''SS:SortSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getSorts.Sort, '_`[_`][''fth_is_sorts_.____endfth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''SS:SortSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getSorts.Sort, '_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''SS:SortSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getSorts.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''SS:SortSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getSorts.Sort, '_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''SS:SortSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getSorts.Sort, '_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''SS:SortSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getStateVariableFamily.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable,''SV:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable]]],''SV:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getStratMappings.Sort,'_`[_`][''view_from_to_is___endv.Sort,'_`,_[ ''Q:Qid.Variable,''ME:ModuleExpression.Variable, ''ME':ModuleExpression.Variable,''SMS:SortMappingSet.Variable, ''OMS:OpMappingSet.Variable,''TMS:StratMappingSet.Variable]]], ''TMS:StratMappingSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getStrats.Sort,'_`[_`][''fmod_is_sorts_.____endfm.Constant,'_`,_[ ''H:Header.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''none.StratDeclSet.Constant,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getStrats.Sort,'_`[_`][''fth_is_sorts_.____endfth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''none.StratDeclSet.Constant,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getStrats.Sort,'_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[ ''H:Header.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''none.StratDeclSet.Constant,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getStrats.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''STDS:StratDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getStrats.Sort,'_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''STDS:StratDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getStrats.Sort,'_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''none.StratDeclSet.Constant,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getSubsorts.Sort,'_`[_`][ ''fmod_is_sorts_.____endfm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''SSDS:SubsortDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSubsorts.Sort,'_`[_`][''fth_is_sorts_.____endfth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''SSDS:SubsortDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSubsorts.Sort,'_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[ ''H:Header.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''SSDS:SubsortDeclSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getSubsorts.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''SSDS:SubsortDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSubsorts.Sort,'_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''SSDS:SubsortDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSubsorts.Sort,'_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''SSDS:SubsortDeclSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getSubstitution.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''S:Substitution.Variable, ''Q:Qid.Variable,''P:Parent.Variable,''B:Bool.Variable]]], ''S:Substitution.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSubstitution.Sort,'_`[_`][''`{_`,_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''T:Type.Variable,''S:Substitution.Variable, ''C:Context.Variable]]],''S:Substitution.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getSubstitution.Sort,'_`[_`][''`{_`,_`,_`}.Qid, '_`,_[''T:Term.Variable,''T:Type.Variable,''S:Substitution.Variable]]], ''S:Substitution.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSubstitution.Sort,'_`[_`][''`{_`,_`}.Qid,'_`,_[ ''S:Substitution.Variable,''C:Context.Variable]]], ''S:Substitution.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSubstitution.Sort,'_`[_`][''`{_`,_`}.Qid,'_`,_[ ''S:Substitution.Variable,''V:Qid.Variable]]],''S:Substitution.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTerm.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''C:Context.Variable,''L:Qid.Variable, ''U:Substitution.Variable,''UV:Qid.Variable,''T:Term.Variable, ''T:Type.Variable,''A:Substitution.Variable]]],''T:Term.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTerm.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''C:Context.Variable,''L:Qid.Variable,''TS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''T:Term.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTerm.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable,''SV:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable]]],''T:Term.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getTerm.Sort,'_`[_`][''`{_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable, ''S:Substitution.Variable,''Q:Qid.Variable,''P:Parent.Variable, ''B:Bool.Variable]]],''T:Term.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getTerm.Sort,'_`[_`][''`{_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable, ''T:Type.Variable,''S:Substitution.Variable,''C:Context.Variable]]], ''T:Term.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTerm.Sort, '_`[_`][''`{_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''R:Rule.Variable]]],''T:Term.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getTerm.Sort,'_`[_`][''`{_`,_`,_`}.Qid,'_`,_[''T:Term.Variable, ''T:Type.Variable,''S:Substitution.Variable]]],''T:Term.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTerm.Sort,'_`[_`][''`{_`,_`}.Qid, '_`,_[''T:Term.Variable,''T:Type.Variable]]],''T:Term.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTermSubstitution.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''C:Context.Variable,''L:Qid.Variable,''TS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''TS:Substitution.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTo.Sort,'_`[_`][ ''view_from_to_is___endv.Sort,'_`,_[''Q:Qid.Variable, ''ME:ModuleExpression.Variable,''ME':ModuleExpression.Variable, ''SMS:SortMappingSet.Variable,''OMS:OpMappingSet.Variable, ''TMS:StratMappingSet.Variable]]],''ME':ModuleExpression.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTrace.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''S:Substitution.Variable,''T:NarrowingTrace.Variable, ''U:Substitution.Variable,''UV:Qid.Variable]]],''T:NarrowingTrace.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getType.Sort,''C:Constant.Variable], '_`[_`][''qid.Sort,'_`[_`][''substr.Sort,'_`,_['_`[_`][''string.Sort, ''C:Constant.Variable],'_`[_`][''_+_.Sort,'_`,_['_`[_`][''s_.Sort, ''0.Zero.Constant],'_`[_`][''rfind.Sort,'_`,_['_`[_`][''string.Sort, ''C:Constant.Variable],''".".Char.Constant,'_`[_`][''length.Sort,'_`[_`][ ''string.Sort,''C:Constant.Variable]]]]]],'_`[_`][''length.Sort,'_`[_`][ ''string.Sort,''C:Constant.Variable]]]]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''getType.Sort,''V:Variable.Variable],'_`[_`][''qid.Sort,'_`[_`][ ''substr.Sort,'_`,_['_`[_`][''string.Sort,''V:Variable.Variable],'_`[_`][ ''_+_.Sort,'_`,_['_`[_`][''s_.Sort,''0.Zero.Constant],'_`[_`][''rfind.Sort, '_`,_['_`[_`][''string.Sort,''V:Variable.Variable],''":".Char.Constant, '_`[_`][''length.Sort,'_`[_`][''string.Sort,''V:Variable.Variable]]]]]], '_`[_`][''length.Sort,'_`[_`][''string.Sort,''V:Variable.Variable]]]]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getType.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''C:Context.Variable,''L:Qid.Variable, ''U:Substitution.Variable,''UV:Qid.Variable,''T:Term.Variable, ''T:Type.Variable,''A:Substitution.Variable]]],''T:Type.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getType.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''C:Context.Variable,''L:Qid.Variable,''TS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''T:Type.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getType.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable,''SV:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable]]],''T:Type.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getType.Sort,'_`[_`][''`{_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable, ''T:Type.Variable,''S:Substitution.Variable,''C:Context.Variable]]], ''T:Type.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getType.Sort, '_`[_`][''`{_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''R:Rule.Variable]]],''T:Type.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getType.Sort,'_`[_`][''`{_`,_`,_`}.Qid,'_`,_[''T:Term.Variable, ''T:Type.Variable,''S:Substitution.Variable]]],''T:Type.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getType.Sort,'_`[_`][''`{_`,_`}.Qid, '_`,_[''T:Term.Variable,''T:Type.Variable]]],''T:Type.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getUnifier.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''C:Context.Variable,''L:Qid.Variable, ''U:Substitution.Variable,''UV:Qid.Variable,''T:Term.Variable, ''T:Type.Variable,''A:Substitution.Variable]]],''U:Substitution.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getUnifier.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable,''SV:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable]]],''U:Substitution.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''getUnifier.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''T:Type.Variable,''S:Substitution.Variable, ''T:NarrowingTrace.Variable,''U:Substitution.Variable,''UV:Qid.Variable]]], ''U:Substitution.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getUnifierVariableFamily.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`,_`}.Qid, '_`,_[''C:Context.Variable,''L:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable,''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable]]],''UV:Qid.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''getUnifierVariableFamily.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`}.Qid, '_`,_[''T:Term.Variable,''T:Type.Variable,''A:Substitution.Variable, ''SV:Qid.Variable,''U:Substitution.Variable,''UV:Qid.Variable]]], ''UV:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getUnifierVariableFamily.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''T:Type.Variable,''S:Substitution.Variable, ''T:NarrowingTrace.Variable,''U:Substitution.Variable,''UV:Qid.Variable]]], ''UV:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getVariableFamily.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''T:Type.Variable,''C:Context.Variable,''L:Qid.Variable, ''TS:Substitution.Variable,''RS:Substitution.Variable,''V:Qid.Variable]]], ''V:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getVariableFamily.Sort,'_`[_`][''`{_`,_`,_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''S:Substitution.Variable,''Q:Qid.Variable, ''P:Parent.Variable,''B:Bool.Variable]]],''Q:Qid.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getVariableFamily.Sort,'_`[_`][''`{_`,_`,_`}.Qid, '_`,_[''LS:Substitution.Variable,''RS:Substitution.Variable, ''V:Qid.Variable]]],''V:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getVariableFamily.Sort,'_`[_`][''`{_`,_`}.Qid,'_`,_[ ''S:Substitution.Variable,''V:Qid.Variable]]],''V:Qid.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''head.Sort,'_`[_`][''__.Sort,'_`,_[ ''E:Nat.Variable,''L:NatList.Variable]]],''E:Nat.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''head.Sort,'_`[_`][''__.Sort,'_`,_[''E:Qid.Variable, ''L:QidList.Variable]]],''E:Qid.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''insert.Sort,'_`,_[''E:Qid.Variable,''S:QidSet.Variable]],'_`[_`][ ''_;_.Sort,'_`,_[''E:Qid.Variable,''S:QidSet.Variable]],'none.AttrSet], 'eq_=_`[_`].['_`[_`][''intersection.Sort,'_`,_[''S:QidSet.Variable, ''N:NeQidSet.Variable]],'_`[_`][''$intersect.Sort,'_`,_[ ''S:QidSet.Variable,''N:NeQidSet.Variable,''none.EmptyQidSet.Constant]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''intersection.Sort,'_`,_[ ''S:QidSet.Variable,''none.EmptyQidSet.Constant]], ''none.EmptyQidSet.Constant,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''last.Sort,'_`[_`][''__.Sort,'_`,_[''L:NatList.Variable, ''E:Nat.Variable]]],''E:Nat.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''last.Sort,'_`[_`][''__.Sort,'_`,_[''L:QidList.Variable, ''E:Qid.Variable]]],''E:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''metaNarrowingApply.Sort,'_`,_[''M:Module.Variable,''T:Term.Variable, ''TL:TermList.Variable,''Q:Qid.Variable,''N:Nat.Variable]],'_`[_`][ ''metaNarrowingApply.Sort,'_`,_[''M:Module.Variable,''T:Term.Variable, ''TL:TermList.Variable,''Q:Qid.Variable,''none.VariantOptionSet.Constant, ''N:Nat.Variable]],'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''metaNarrowingSearch.Sort,'_`,_[''M:Module.Variable,''T:Term.Variable, ''T2:Term.Variable,''S:Qid.Variable,''B:Bound.Variable,''F:Qid.Variable, ''N:Nat.Variable]],'_`[_`][''metaNarrowingSearch.Sort,'_`,_[ ''M:Module.Variable,''T:Term.Variable,''T2:Term.Variable,''S:Qid.Variable, ''B:Bound.Variable,''F:Qid.Variable,''none.VariantOptionSet.Constant, ''N:Nat.Variable]],'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''metaNarrowingSearchPath.Sort,'_`,_[''M:Module.Variable,''T:Term.Variable, ''T2:Term.Variable,''S:Qid.Variable,''B:Bound.Variable,''F:Qid.Variable, ''N:Nat.Variable]],'_`[_`][''metaNarrowingSearchPath.Sort,'_`,_[ ''M:Module.Variable,''T:Term.Variable,''T2:Term.Variable,''S:Qid.Variable, ''B:Bound.Variable,''F:Qid.Variable,''none.VariantOptionSet.Constant, ''N:Nat.Variable]],'none.AttrSet],'eq_=_`[_`].['_`[_`][''metaParse.Sort, '_`,_[''M:Module.Variable,''Q:QidList.Variable,''T:Type?.Variable]], '_`[_`][''metaParse.Sort,'_`,_[''M:Module.Variable, ''none.EmptyQidSet.Constant,''Q:QidList.Variable,''T:Type?.Variable]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''metaPrettyPrint.Sort,'_`,_[ ''M:Module.Variable,''T:Term.Variable]],'_`[_`][''metaPrettyPrint.Sort, '_`,_[''M:Module.Variable,''none.EmptyQidSet.Constant,''T:Term.Variable, '_`[_`][''__.Sort,'_`,_[''mixfix.PrintOption.Constant,'_`[_`][''__.Sort, '_`,_[''flat.PrintOption.Constant,'_`[_`][''__.Sort,'_`,_[ ''format.PrintOption.Constant,'_`[_`][''__.Sort,'_`,_[ ''number.PrintOption.Constant,''rat.PrintOption.Constant]]]]]]]]]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''metaPrettyPrint.Sort,'_`,_[ ''M:Module.Variable,''T:Term.Variable,''P:PrintOptionSet.Variable]], '_`[_`][''metaPrettyPrint.Sort,'_`,_[''M:Module.Variable, ''none.EmptyQidSet.Constant,''T:Term.Variable, ''P:PrintOptionSet.Variable]],'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''metaVariantDisjointUnify.Sort,'_`,_[''M:Module.Variable, ''U:UnificationProblem.Variable,''TL:TermList.Variable,''Q:Qid.Variable, ''N:Nat.Variable]],'_`[_`][''metaVariantDisjointUnify.Sort,'_`,_[ ''M:Module.Variable,''U:UnificationProblem.Variable,''TL:TermList.Variable, ''Q:Qid.Variable,''none.VariantOptionSet.Constant,''N:Nat.Variable]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''metaVariantUnify.Sort,'_`,_[ ''M:Module.Variable,''U:UnificationProblem.Variable,''TL:TermList.Variable, ''Q:Qid.Variable,''N:Nat.Variable]],'_`[_`][''metaVariantUnify.Sort,'_`,_[ ''M:Module.Variable,''U:UnificationProblem.Variable,''TL:TermList.Variable, ''Q:Qid.Variable,''none.VariantOptionSet.Constant,''N:Nat.Variable]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''not_.Sort,''A:Bool.Variable],'_`[_`][ ''_xor_.Sort,'_`,_[''true.Bool.Constant,''A:Bool.Variable]],'none.AttrSet], 'eq_=_`[_`].['_`[_`][''occurs.Sort,'_`,_[''E:Nat.Variable, ''nil.NatList.Constant]],''false.Bool.Constant,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''occurs.Sort,'_`,_[''E:Nat.Variable,'_`[_`][''__.Sort,'_`,_[ ''E':Nat.Variable,''L:NatList.Variable]]]],'_`[_`][''if_then_else_fi.Sort, '_`,_['_`[_`][''_==_.Sort,'_`,_[''E:Nat.Variable,''E':Nat.Variable]], ''true.Bool.Constant,'_`[_`][''occurs.Sort,'_`,_[''E:Nat.Variable, ''L:NatList.Variable]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][''occurs.Sort, '_`,_[''E:Qid.Variable,''nil.TypeList.Constant]],''false.Bool.Constant, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''occurs.Sort,'_`,_[''E:Qid.Variable, '_`[_`][''__.Sort,'_`,_[''E':Qid.Variable,''L:QidList.Variable]]]],'_`[_`][ ''if_then_else_fi.Sort,'_`,_['_`[_`][''_==_.Sort,'_`,_[''E:Qid.Variable, ''E':Qid.Variable]],''true.Bool.Constant,'_`[_`][''occurs.Sort,'_`,_[ ''E:Qid.Variable,''L:QidList.Variable]]]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''reverse.Sort,''L:NatList.Variable],'_`[_`][''$reverse.Sort,'_`,_[ ''L:NatList.Variable,''nil.NatList.Constant]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''reverse.Sort,''L:QidList.Variable],'_`[_`][''$reverse.Sort,'_`,_[ ''L:QidList.Variable,''nil.TypeList.Constant]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''size.Sort,''L:NatList.Variable],'_`[_`][''$size.Sort,'_`,_[ ''L:NatList.Variable,''0.Zero.Constant]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''size.Sort,''L:QidList.Variable],'_`[_`][''$size.Sort,'_`,_[ ''L:QidList.Variable,''0.Zero.Constant]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''tail.Sort,'_`[_`][''__.Sort,'_`,_[''E:Nat.Variable, ''L:NatList.Variable]]],''L:NatList.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''tail.Sort,'_`[_`][''__.Sort,'_`,_[''E:Qid.Variable, ''L:QidList.Variable]]],''L:QidList.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''union.Sort,'_`,_[''S:QidSet.Variable,''S':QidSet.Variable]], '_`[_`][''_;_.Sort,'_`,_[''S:QidSet.Variable,''S':QidSet.Variable]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''|_|.Sort,''S:QidSet.Variable], '_`[_`][''$card.Sort,'_`,_[''S:QidSet.Variable,''0.Zero.Constant]], 'none.AttrSet]]] ========================================== reduce in META-LEVEL : {upTerm(upModule('META-LEVEL, true)),'FModule} . rewrites: 3 result ResultPair: {'fmod_is_sorts_.____endfm[''META-LEVEL.Sort, 'nil.ImportList,'_;_[''Assignment.Sort,''Attr.Sort,''AttrSet.Sort, ''Bool.Sort,''Bound.Sort,''CallStrategy.Sort,''Char.Sort,''Condition.Sort, ''Constant.Sort,''Context.Sort,''EmptyCommaList.Sort,''EmptyQidSet.Sort, ''EqCondition.Sort,''Equation.Sort,''EquationSet.Sort,''Expression.Sort, ''FModule.Sort,''FTheory.Sort,''FindResult.Sort,''GTermList.Sort, ''GroundTerm.Sort,''GroundTermList.Sort,''Header.Sort,''Hook.Sort, ''HookList.Sort,''Import.Sort,''ImportList.Sort,''Kind.Sort,''KindSet.Sort, ''MatchOrUnificationPair.Sort,''MatchPair.Sort,''MatchPair?.Sort, ''MatchingProblem.Sort,''MembAx.Sort,''MembAxSet.Sort,''Module.Sort, ''ModuleExpression.Sort,''NarrowingApplyResult.Sort, ''NarrowingApplyResult?.Sort,''NarrowingSearchPathResult.Sort, ''NarrowingSearchPathResult?.Sort,''NarrowingSearchResult.Sort, ''NarrowingSearchResult?.Sort,''NarrowingStep.Sort,''NarrowingTrace.Sort, ''Nat.Sort,''NatList.Sort,''NeCTermList.Sort,''NeGroundTermList.Sort, ''NeHookList.Sort,''NeKindSet.Sort,''NeNatList.Sort, ''NeParameterDeclList.Sort,''NeParameterList.Sort,''NeQidList.Sort, ''NeQidSet.Sort,''NeSortSet.Sort,''NeTermList.Sort,''NeTypeList.Sort, ''NeTypeSet.Sort,''NeVariableSet.Sort,''NzNat.Sort,''OpDecl.Sort, ''OpDeclSet.Sort,''OpMapping.Sort,''OpMappingSet.Sort,''ParameterDecl.Sort, ''ParameterDeclList.Sort,''ParameterList.Sort,''Parent.Sort, ''PatternSubjectPair.Sort,''PrintOption.Sort,''PrintOptionSet.Sort, ''Qid.Sort,''QidList.Sort,''QidSet.Sort,''Renaming.Sort,''RenamingSet.Sort, ''Result4Tuple.Sort,''Result4Tuple?.Sort,''ResultPair.Sort, ''ResultPair?.Sort,''ResultTriple.Sort,''ResultTriple?.Sort,''Rule.Sort, ''RuleApplication.Sort,''RuleSet.Sort,''SModule.Sort,''STheory.Sort, ''SmtResult.Sort,''SmtResult?.Sort,''Sort.Sort,''SortMapping.Sort, ''SortMappingSet.Sort,''SortSet.Sort,''SrewriteOption.Sort, ''StratDecl.Sort,''StratDeclSet.Sort,''StratDefSet.Sort, ''StratDefinition.Sort,''StratMapping.Sort,''StratMappingSet.Sort, ''StratModule.Sort,''StratTheory.Sort,''Strategy.Sort,''Strategy?.Sort, ''StrategyList.Sort,''String.Sort,''SubsortDecl.Sort,''SubsortDeclSet.Sort, ''Substitution.Sort,''Substitution?.Sort,''Term.Sort,''TermList.Sort, ''TermQid.Sort,''Trace.Sort,''Trace?.Sort,''TraceStep.Sort,''Type.Sort, ''Type?.Sort,''TypeList.Sort,''TypeListSet.Sort,''TypeSet.Sort, ''UnificandPair.Sort,''UnificationPair.Sort,''UnificationPair?.Sort, ''UnificationProblem.Sort,''UnificationTriple.Sort, ''UnificationTriple?.Sort,''UsingPair.Sort,''UsingPairSet.Sort, ''Variable.Sort,''VariableSet.Sort,''Variant.Sort,''Variant?.Sort, ''VariantOption.Sort,''VariantOptionSet.Sort,''View.Sort, ''ViewExpression.Sort,''Zero.Sort],'__['subsort_<_.[''Assignment.Sort, ''Substitution.Sort],'subsort_<_.[''Attr.Sort,''AttrSet.Sort],'subsort_<_.[ ''CallStrategy.Sort,''Strategy.Sort],'subsort_<_.[''Char.Sort, ''String.Sort],'subsort_<_.[''Constant.Sort,''GroundTerm.Sort], 'subsort_<_.[''Constant.Sort,''TermQid.Sort],'subsort_<_.[''Context.Sort, ''NeCTermList.Sort],'subsort_<_.[''EmptyCommaList.Sort, ''GroundTermList.Sort],'subsort_<_.[''EmptyCommaList.Sort, ''ParameterList.Sort],'subsort_<_.[''EmptyQidSet.Sort,''KindSet.Sort], 'subsort_<_.[''EmptyQidSet.Sort,''SortSet.Sort],'subsort_<_.[ ''EmptyQidSet.Sort,''VariableSet.Sort],'subsort_<_.[''EqCondition.Sort, ''Condition.Sort],'subsort_<_.[''Equation.Sort,''EquationSet.Sort], 'subsort_<_.[''Expression.Sort,''ModuleExpression.Sort],'subsort_<_.[ ''Expression.Sort,''ViewExpression.Sort],'subsort_<_.[''FModule.Sort, ''SModule.Sort],'subsort_<_.[''FTheory.Sort,''STheory.Sort],'subsort_<_.[ ''GroundTerm.Sort,''NeGroundTermList.Sort],'subsort_<_.[''GroundTerm.Sort, ''Term.Sort],'subsort_<_.[''GroundTermList.Sort,''TermList.Sort], 'subsort_<_.[''Hook.Sort,''NeHookList.Sort],'subsort_<_.[''Import.Sort, ''ImportList.Sort],'subsort_<_.[''Kind.Sort,''NeKindSet.Sort],'subsort_<_.[ ''Kind.Sort,''Type.Sort],'subsort_<_.[''KindSet.Sort,''TypeSet.Sort], 'subsort_<_.[''MatchPair.Sort,''MatchOrUnificationPair.Sort],'subsort_<_.[ ''MatchPair.Sort,''MatchPair?.Sort],'subsort_<_.[''MembAx.Sort, ''MembAxSet.Sort],'subsort_<_.[''NarrowingApplyResult.Sort, ''NarrowingApplyResult?.Sort],'subsort_<_.[ ''NarrowingSearchPathResult.Sort,''NarrowingSearchPathResult?.Sort], 'subsort_<_.[''NarrowingSearchResult.Sort,''NarrowingSearchResult?.Sort], 'subsort_<_.[''NarrowingStep.Sort,''NarrowingTrace.Sort],'subsort_<_.[ ''Nat.Sort,''Bound.Sort],'subsort_<_.[''Nat.Sort,''FindResult.Sort], 'subsort_<_.[''Nat.Sort,''NeNatList.Sort],'subsort_<_.[''Nat.Sort, ''Parent.Sort],'subsort_<_.[''NeCTermList.Sort,''GTermList.Sort], 'subsort_<_.[''NeGroundTermList.Sort,''GroundTermList.Sort],'subsort_<_.[ ''NeGroundTermList.Sort,''NeTermList.Sort],'subsort_<_.[''NeHookList.Sort, ''HookList.Sort],'subsort_<_.[''NeKindSet.Sort,''KindSet.Sort], 'subsort_<_.[''NeKindSet.Sort,''NeTypeSet.Sort],'subsort_<_.[ ''NeNatList.Sort,''NatList.Sort],'subsort_<_.[''NeParameterDeclList.Sort, ''ParameterDeclList.Sort],'subsort_<_.[''NeParameterList.Sort, ''ParameterList.Sort],'subsort_<_.[''NeQidList.Sort,''QidList.Sort], 'subsort_<_.[''NeQidSet.Sort,''QidSet.Sort],'subsort_<_.[''NeSortSet.Sort, ''NeTypeSet.Sort],'subsort_<_.[''NeSortSet.Sort,''SortSet.Sort], 'subsort_<_.[''NeTermList.Sort,''TermList.Sort],'subsort_<_.[ ''NeTypeList.Sort,''NeQidList.Sort],'subsort_<_.[''NeTypeList.Sort, ''TypeList.Sort],'subsort_<_.[''NeTypeSet.Sort,''NeQidSet.Sort], 'subsort_<_.[''NeTypeSet.Sort,''TypeSet.Sort],'subsort_<_.[ ''NeVariableSet.Sort,''NeQidSet.Sort],'subsort_<_.[''NeVariableSet.Sort, ''VariableSet.Sort],'subsort_<_.[''NzNat.Sort,''Nat.Sort],'subsort_<_.[ ''OpDecl.Sort,''OpDeclSet.Sort],'subsort_<_.[''OpMapping.Sort, ''OpMappingSet.Sort],'subsort_<_.[''ParameterDecl.Sort, ''NeParameterDeclList.Sort],'subsort_<_.[''PatternSubjectPair.Sort, ''MatchingProblem.Sort],'subsort_<_.[''PrintOption.Sort, ''PrintOptionSet.Sort],'subsort_<_.[''Qid.Sort,''Header.Sort],'subsort_<_.[ ''Qid.Sort,''NeQidList.Sort],'subsort_<_.[''Qid.Sort,''NeQidSet.Sort], 'subsort_<_.[''Renaming.Sort,''RenamingSet.Sort],'subsort_<_.[ ''Result4Tuple.Sort,''Result4Tuple?.Sort],'subsort_<_.[''ResultPair.Sort, ''ResultPair?.Sort],'subsort_<_.[''ResultTriple.Sort,''ResultTriple?.Sort], 'subsort_<_.[''Rule.Sort,''RuleSet.Sort],'subsort_<_.[ ''RuleApplication.Sort,''Strategy.Sort],'subsort_<_.[''SModule.Sort, ''Module.Sort],'subsort_<_.[''STheory.Sort,''Module.Sort],'subsort_<_.[ ''SmtResult.Sort,''SmtResult?.Sort],'subsort_<_.[''Sort.Sort, ''Expression.Sort],'subsort_<_.[''Sort.Sort,''NeSortSet.Sort],'subsort_<_.[ ''Sort.Sort,''Type.Sort],'subsort_<_.[''SortMapping.Sort, ''SortMappingSet.Sort],'subsort_<_.[''SortSet.Sort,''TypeSet.Sort], 'subsort_<_.[''StratDecl.Sort,''StratDeclSet.Sort],'subsort_<_.[ ''StratDefinition.Sort,''StratDefSet.Sort],'subsort_<_.[ ''StratMapping.Sort,''StratMappingSet.Sort],'subsort_<_.[ ''StratModule.Sort,''Module.Sort],'subsort_<_.[''StratTheory.Sort, ''Module.Sort],'subsort_<_.[''Strategy.Sort,''Strategy?.Sort],'subsort_<_.[ ''Strategy.Sort,''StrategyList.Sort],'subsort_<_.[''SubsortDecl.Sort, ''SubsortDeclSet.Sort],'subsort_<_.[''Substitution.Sort, ''Substitution?.Sort],'subsort_<_.[''Term.Sort,''NeTermList.Sort], 'subsort_<_.[''TermList.Sort,''GTermList.Sort],'subsort_<_.[''TermQid.Sort, ''Qid.Sort],'subsort_<_.[''TermQid.Sort,''Term.Sort],'subsort_<_.[ ''Trace.Sort,''Trace?.Sort],'subsort_<_.[''TraceStep.Sort,''Trace.Sort], 'subsort_<_.[''Type.Sort,''NeTypeList.Sort],'subsort_<_.[''Type.Sort, ''NeTypeSet.Sort],'subsort_<_.[''Type.Sort,''Qid.Sort],'subsort_<_.[ ''Type.Sort,''Type?.Sort],'subsort_<_.[''TypeList.Sort,''QidList.Sort], 'subsort_<_.[''TypeList.Sort,''TypeListSet.Sort],'subsort_<_.[ ''TypeSet.Sort,''QidSet.Sort],'subsort_<_.[''TypeSet.Sort, ''TypeListSet.Sort],'subsort_<_.[''UnificandPair.Sort, ''UnificationProblem.Sort],'subsort_<_.[''UnificationPair.Sort, ''MatchOrUnificationPair.Sort],'subsort_<_.[''UnificationPair.Sort, ''UnificationPair?.Sort],'subsort_<_.[''UnificationTriple.Sort, ''UnificationTriple?.Sort],'subsort_<_.[''UsingPair.Sort, ''UsingPairSet.Sort],'subsort_<_.[''Variable.Sort,''NeVariableSet.Sort], 'subsort_<_.[''Variable.Sort,''TermQid.Sort],'subsort_<_.[ ''VariableSet.Sort,''QidSet.Sort],'subsort_<_.[''Variant.Sort, ''Variant?.Sort],'subsort_<_.[''VariantOption.Sort, ''VariantOptionSet.Sort],'subsort_<_.[''ViewExpression.Sort, ''NeParameterList.Sort],'subsort_<_.[''Zero.Sort,''Nat.Sort]],'__[ 'op_:_->_`[_`].[''$applySubstitution.Sort,'__[''NeTermList.Sort, ''Substitution.Sort],''Term.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''$card.Sort,'__[''QidSet.Sort,''Nat.Sort],''Nat.Sort,'none.AttrSet], 'op_:_->_`[_`].[''$diff.Sort,'__[''QidSet.Sort,''QidSet.Sort, ''QidSet.Sort],''QidSet.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''$intersect.Sort,'__[''QidSet.Sort,''QidSet.Sort,''QidSet.Sort], ''QidSet.Sort,'none.AttrSet],'op_:_->_`[_`].[''$reverse.Sort,'__[ ''NatList.Sort,''NatList.Sort],''NatList.Sort,'none.AttrSet], 'op_:_->_`[_`].[''$reverse.Sort,'__[''QidList.Sort,''QidList.Sort], ''QidList.Sort,'none.AttrSet],'op_:_->_`[_`].[''$size.Sort,'__[ ''NatList.Sort,''Nat.Sort],''Nat.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''$size.Sort,'__[''QidList.Sort,''Nat.Sort],''Nat.Sort,'none.AttrSet], 'op_:_->_`[_`].[''0.Sort,'nil.TypeList,''Zero.Sort,'ctor.Attr], 'op_:_->_`[_`].[''.Sort,'nil.TypeList,''Constant.Sort,'special[ 'id-hook[''QuotedIdentifierSymbol.Sort,''constantQid.Sort]]], 'op_:_->_`[_`].[''.Sort,'nil.TypeList,''Kind.Sort,'special['id-hook[ ''QuotedIdentifierSymbol.Sort,''kindQid.Sort]]],'op_:_->_`[_`].[ ''.Sort,'nil.TypeList,''Qid.Sort,'special['id-hook[ ''QuotedIdentifierSymbol.Sort,'nil.TypeList]]],'op_:_->_`[_`].[ ''.Sort,'nil.TypeList,''Sort.Sort,'special['id-hook[ ''QuotedIdentifierSymbol.Sort,''sortQid.Sort]]],'op_:_->_`[_`].[ ''.Sort,'nil.TypeList,''Variable.Sort,'special['id-hook[ ''QuotedIdentifierSymbol.Sort,''variableQid.Sort]]],'op_:_->_`[_`].[ ''.Sort,'nil.TypeList,''Char.Sort,'special['id-hook[ ''StringSymbol.Sort,'nil.TypeList]]],'op_:_->_`[_`].[''.Sort, 'nil.TypeList,''String.Sort,'special['id-hook[''StringSymbol.Sort, 'nil.TypeList]]],'op_:_->_`[_`].[''_!.Sort,''Strategy.Sort,''Strategy.Sort, 'ctor.Attr],'op_:_->_`[_`].[''_&_.Sort,'__[''Nat.Sort,''Nat.Sort], ''Nat.Sort,'__['assoc.Attr,'comm.Attr,'prec['s_^53['0.Zero]],'special['__[ 'id-hook[''ACU_NumberOpSymbol.Sort,''&.Sort],'op-hook[''succSymbol.Sort, ''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[''_*.Sort, ''Strategy.Sort,''Strategy.Sort,'ctor.Attr],'op_:_->_`[_`].[''_*_.Sort,'__[ ''Nat.Sort,''Nat.Sort],''Nat.Sort,'__['assoc.Attr,'comm.Attr,'prec['s_^31[ '0.Zero]],'special['__['id-hook[''ACU_NumberOpSymbol.Sort,''*.Sort], 'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]], 'op_:_->_`[_`].[''_*_.Sort,'__[''NzNat.Sort,''NzNat.Sort],''NzNat.Sort,'__[ 'assoc.Attr,'comm.Attr,'prec['s_^31['0.Zero]],'special['__['id-hook[ ''ACU_NumberOpSymbol.Sort,''*.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[''_*`(_`).Sort,'__[ ''ModuleExpression.Sort,''RenamingSet.Sort],''ModuleExpression.Sort,'__[ 'ctor.Attr,'prec['s_^39['0.Zero]],'format['__[''d.Sort,''d.Sort,''s.Sort, ''n++i.Sort,''n--i.Sort,''d.Sort]]]],'op_:_->_`[_`].[''_+.Sort, ''Strategy.Sort,''Strategy.Sort,'ctor.Attr],'op_:_->_`[_`].[''_+_.Sort,'__[ ''ModuleExpression.Sort,''ModuleExpression.Sort],''ModuleExpression.Sort, '__['assoc.Attr,'comm.Attr,'ctor.Attr]],'op_:_->_`[_`].[''_+_.Sort,'__[ ''Nat.Sort,''Nat.Sort],''Nat.Sort,'__['assoc.Attr,'comm.Attr,'prec['s_^33[ '0.Zero]],'special['__['id-hook[''ACU_NumberOpSymbol.Sort,''+.Sort], 'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]], 'op_:_->_`[_`].[''_+_.Sort,'__[''NzNat.Sort,''Nat.Sort],''NzNat.Sort,'__[ 'assoc.Attr,'comm.Attr,'prec['s_^33['0.Zero]],'special['__['id-hook[ ''ACU_NumberOpSymbol.Sort,''+.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[''_+_.Sort,'__[''String.Sort, ''String.Sort],''String.Sort,'__['prec['s_^33['0.Zero]],'gather['__[ ''E.Sort,''e.Sort]],'special['__['id-hook[''StringOpSymbol.Sort,''+.Sort], 'op-hook[''stringSymbol.Sort,''.Sort,'nil.TypeList, ''Char.Sort]]]]],'op_:_->_`[_`].[''_/\_.Sort,'__[''Condition.Sort, ''Condition.Sort],''Condition.Sort,'__['assoc.Attr,'ctor.Attr,'id[ ''nil.EqCondition.Constant],'prec['s_^73['0.Zero]]]],'op_:_->_`[_`].[ ''_/\_.Sort,'__[''EqCondition.Sort,''EqCondition.Sort],''EqCondition.Sort, '__['assoc.Attr,'ctor.Attr,'id[''nil.EqCondition.Constant],'prec['s_^73[ '0.Zero]]]],'op_:_->_`[_`].[''_/\_.Sort,'__[''MatchingProblem.Sort, ''MatchingProblem.Sort],''MatchingProblem.Sort,'__['assoc.Attr,'comm.Attr, 'ctor.Attr,'prec['s_^73['0.Zero]]]],'op_:_->_`[_`].[''_/\_.Sort,'__[ ''UnificationProblem.Sort,''UnificationProblem.Sort], ''UnificationProblem.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'prec[ 's_^73['0.Zero]]]],'op_:_->_`[_`].[''_::_.Variable,'__[''Sort.Sort, ''ModuleExpression.Sort],''ParameterDecl.Sort,'none.AttrSet], 'op_:_->_`[_`].[''_:=_.Variable,'__[''Term.Sort,''Term.Sort], ''EqCondition.Sort,'__['ctor.Attr,'prec['s_^71['0.Zero]]]],'op_:_->_`[_`].[ ''_:_.Variable,'__[''Term.Sort,''Sort.Sort],''EqCondition.Sort,'__[ 'ctor.Attr,'prec['s_^71['0.Zero]]]],'op_:_->_`[_`].[''_;_.Sort,'__[ ''EmptyQidSet.Sort,''EmptyQidSet.Sort],''EmptyQidSet.Sort,'__['assoc.Attr, 'comm.Attr,'ctor.Attr,'id[''none.EmptyQidSet.Constant],'prec['s_^43[ '0.Zero]]]],'op_:_->_`[_`].[''_;_.Sort,'__[''KindSet.Sort,''KindSet.Sort], ''KindSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.EmptyQidSet.Constant],'prec['s_^43['0.Zero]]]],'op_:_->_`[_`].[ ''_;_.Sort,'__[''NeKindSet.Sort,''KindSet.Sort],''NeKindSet.Sort,'__[ 'assoc.Attr,'comm.Attr,'ctor.Attr,'id[''none.EmptyQidSet.Constant],'prec[ 's_^43['0.Zero]]]],'op_:_->_`[_`].[''_;_.Sort,'__[''NeQidSet.Sort, ''QidSet.Sort],''NeQidSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.EmptyQidSet.Constant],'prec['s_^43['0.Zero]]]],'op_:_->_`[_`].[ ''_;_.Sort,'__[''NeSortSet.Sort,''SortSet.Sort],''NeSortSet.Sort,'__[ 'assoc.Attr,'comm.Attr,'ctor.Attr,'id[''none.EmptyQidSet.Constant],'prec[ 's_^43['0.Zero]]]],'op_:_->_`[_`].[''_;_.Sort,'__[''NeTypeSet.Sort, ''TypeSet.Sort],''NeTypeSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.EmptyQidSet.Constant],'prec['s_^43['0.Zero]]]],'op_:_->_`[_`].[ ''_;_.Sort,'__[''NeVariableSet.Sort,''VariableSet.Sort], ''NeVariableSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.EmptyQidSet.Constant],'prec['s_^43['0.Zero]]]],'op_:_->_`[_`].[ ''_;_.Sort,'__[''QidSet.Sort,''QidSet.Sort],''QidSet.Sort,'__['assoc.Attr, 'comm.Attr,'ctor.Attr,'id[''none.EmptyQidSet.Constant],'prec['s_^43[ '0.Zero]]]],'op_:_->_`[_`].[''_;_.Sort,'__[''SortSet.Sort,''SortSet.Sort], ''SortSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.EmptyQidSet.Constant],'prec['s_^43['0.Zero]]]],'op_:_->_`[_`].[ ''_;_.Sort,'__[''Strategy.Sort,''Strategy.Sort],''Strategy.Sort,'__[ 'assoc.Attr,'ctor.Attr,'id[''idle.Strategy.Constant],'prec['s_^39[ '0.Zero]],'gather['__[''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_;_.Sort,'__[ ''Substitution.Sort,''Substitution.Sort],''Substitution.Sort,'__[ 'assoc.Attr,'comm.Attr,'ctor.Attr,'id[''none.Substitution.Constant],'prec[ 's_^65['0.Zero]]]],'op_:_->_`[_`].[''_;_.Sort,'__[''TypeListSet.Sort, ''TypeListSet.Sort],''TypeListSet.Sort,'__['assoc.Attr,'comm.Attr, 'ctor.Attr,'id[''none.EmptyQidSet.Constant],'prec['s_^43['0.Zero]]]], 'op_:_->_`[_`].[''_;_.Sort,'__[''TypeSet.Sort,''TypeSet.Sort], ''TypeSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.EmptyQidSet.Constant],'prec['s_^43['0.Zero]]]],'op_:_->_`[_`].[ ''_;_.Sort,'__[''VariableSet.Sort,''VariableSet.Sort],''VariableSet.Sort, '__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[''none.EmptyQidSet.Constant], 'prec['s_^43['0.Zero]]]],'op_:_->_`[_`].[''_<-_.Sort,'__[''Variable.Sort, ''Term.Sort],''Assignment.Sort,'__['ctor.Attr,'prec['s_^63['0.Zero]], 'format['__[''n++i.Sort,''d.Sort,''d.Sort,''--.Sort]]]],'op_:_->_`[_`].[ ''_<<_.Sort,'__[''Nat.Sort,''Nat.Sort],''Nat.Sort,'__['prec['s_^35[ '0.Zero]],'gather['__[''E.Sort,''e.Sort]],'special['__['id-hook[ ''NumberOpSymbol.Sort,''<<.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[''_<=?_.Sort,'__[''Term.Sort, ''Term.Sort],''PatternSubjectPair.Sort,'__['ctor.Attr,'prec['s_^71[ '0.Zero]]]],'op_:_->_`[_`].[''_<=_.Sort,'__[''Nat.Sort,''Nat.Sort], ''Bool.Sort,'__['prec['s_^37['0.Zero]],'special['__['id-hook[ ''NumberOpSymbol.Sort,''<=.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort],'term-hook[''trueTerm.Sort,''true.Bool.Constant], 'term-hook[''falseTerm.Sort,''false.Bool.Constant]]]]],'op_:_->_`[_`].[ ''_<=_.Sort,'__[''String.Sort,''String.Sort],''Bool.Sort,'__['prec['s_^37[ '0.Zero]],'special['__['id-hook[''StringOpSymbol.Sort,''<=.Sort],'op-hook[ ''stringSymbol.Sort,''.Sort,'nil.TypeList,''Char.Sort],'term-hook[ ''trueTerm.Sort,''true.Bool.Constant],'term-hook[''falseTerm.Sort, ''false.Bool.Constant]]]]],'op_:_->_`[_`].[''_<_.Sort,'__[''Nat.Sort, ''Nat.Sort],''Bool.Sort,'__['prec['s_^37['0.Zero]],'special['__['id-hook[ ''NumberOpSymbol.Sort,''<.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort],'term-hook[''trueTerm.Sort,''true.Bool.Constant], 'term-hook[''falseTerm.Sort,''false.Bool.Constant]]]]],'op_:_->_`[_`].[ ''_<_.Sort,'__[''String.Sort,''String.Sort],''Bool.Sort,'__['prec['s_^37[ '0.Zero]],'special['__['id-hook[''StringOpSymbol.Sort,''<.Sort],'op-hook[ ''stringSymbol.Sort,''.Sort,'nil.TypeList,''Char.Sort],'term-hook[ ''trueTerm.Sort,''true.Bool.Constant],'term-hook[''falseTerm.Sort, ''false.Bool.Constant]]]]],'op_:_->_`[_`].[''_=/=_.Sort,'__[ ''Universal.Sort,''Universal.Sort],''Bool.Sort,'__['prec['s_^51['0.Zero]], 'poly['__['s_['0.Zero],'s_^2['0.Zero]]],'special['__['id-hook[ ''EqualitySymbol.Sort,'nil.TypeList],'term-hook[''equalTerm.Sort, ''false.Bool.Constant],'term-hook[''notEqualTerm.Sort, ''true.Bool.Constant]]]]],'op_:_->_`[_`].[''_==_.Sort,'__[''Universal.Sort, ''Universal.Sort],''Bool.Sort,'__['prec['s_^51['0.Zero]],'poly['__['s_[ '0.Zero],'s_^2['0.Zero]]],'special['__['id-hook[''EqualitySymbol.Sort, 'nil.TypeList],'term-hook[''equalTerm.Sort,''true.Bool.Constant], 'term-hook[''notEqualTerm.Sort,''false.Bool.Constant]]]]],'op_:_->_`[_`].[ ''_=>_.Sort,'__[''Term.Sort,''Term.Sort],''Condition.Sort,'__['ctor.Attr, 'prec['s_^71['0.Zero]]]],'op_:_->_`[_`].[''_=?_.Sort,'__[''Term.Sort, ''Term.Sort],''UnificandPair.Sort,'__['ctor.Attr,'prec['s_^71['0.Zero]]]], 'op_:_->_`[_`].[''_=_.Sort,'__[''Term.Sort,''Term.Sort],''EqCondition.Sort, '__['ctor.Attr,'prec['s_^71['0.Zero]]]],'op_:_->_`[_`].[''_>=_.Sort,'__[ ''Nat.Sort,''Nat.Sort],''Bool.Sort,'__['prec['s_^37['0.Zero]],'special['__[ 'id-hook[''NumberOpSymbol.Sort,''>=.Sort],'op-hook[''succSymbol.Sort, ''s_.Sort,''Nat.Sort,''NzNat.Sort],'term-hook[''trueTerm.Sort, ''true.Bool.Constant],'term-hook[''falseTerm.Sort, ''false.Bool.Constant]]]]],'op_:_->_`[_`].[''_>=_.Sort,'__[''String.Sort, ''String.Sort],''Bool.Sort,'__['prec['s_^37['0.Zero]],'special['__[ 'id-hook[''StringOpSymbol.Sort,''>=.Sort],'op-hook[''stringSymbol.Sort, ''.Sort,'nil.TypeList,''Char.Sort],'term-hook[''trueTerm.Sort, ''true.Bool.Constant],'term-hook[''falseTerm.Sort, ''false.Bool.Constant]]]]],'op_:_->_`[_`].[''_>>_.Sort,'__[''Nat.Sort, ''Nat.Sort],''Nat.Sort,'__['prec['s_^35['0.Zero]],'gather['__[''E.Sort, ''e.Sort]],'special['__['id-hook[''NumberOpSymbol.Sort,''>>.Sort],'op-hook[ ''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[ ''_>_.Sort,'__[''Nat.Sort,''Nat.Sort],''Bool.Sort,'__['prec['s_^37[ '0.Zero]],'special['__['id-hook[''NumberOpSymbol.Sort,''>.Sort],'op-hook[ ''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort],'term-hook[ ''trueTerm.Sort,''true.Bool.Constant],'term-hook[''falseTerm.Sort, ''false.Bool.Constant]]]]],'op_:_->_`[_`].[''_>_.Sort,'__[''String.Sort, ''String.Sort],''Bool.Sort,'__['prec['s_^37['0.Zero]],'special['__[ 'id-hook[''StringOpSymbol.Sort,''>.Sort],'op-hook[''stringSymbol.Sort, ''.Sort,'nil.TypeList,''Char.Sort],'term-hook[''trueTerm.Sort, ''true.Bool.Constant],'term-hook[''falseTerm.Sort, ''false.Bool.Constant]]]]],'op_:_->_`[_`].[''_?_:_.Variable,'__[ ''Strategy.Sort,''Strategy.Sort,''Strategy.Sort],''Strategy.Sort,'__[ 'ctor.Attr,'prec['s_^55['0.Zero]]]],'op_:_->_`[_`].[''_\_.Sort,'__[ ''QidSet.Sort,''QidSet.Sort],''QidSet.Sort,'gather['__[''E.Sort, ''e.Sort]]],'op_:_->_`[_`].[''_^_.Sort,'__[''Nat.Sort,''Nat.Sort], ''Nat.Sort,'__['prec['s_^29['0.Zero]],'gather['__[''E.Sort,''e.Sort]], 'special['__['id-hook[''NumberOpSymbol.Sort,''^.Sort],'op-hook[ ''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[ ''_^_.Sort,'__[''NzNat.Sort,''Nat.Sort],''NzNat.Sort,'__['prec['s_^29[ '0.Zero]],'gather['__[''E.Sort,''e.Sort]],'special['__['id-hook[ ''NumberOpSymbol.Sort,''^.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[''__.Sort,'__[''AttrSet.Sort, ''AttrSet.Sort],''AttrSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.AttrSet.Constant]]],'op_:_->_`[_`].[''__.Sort,'__[ ''EquationSet.Sort,''EquationSet.Sort],''EquationSet.Sort,'__['assoc.Attr, 'comm.Attr,'ctor.Attr,'id[''none.EquationSet.Constant],'format['__[ ''d.Sort,''ni.Sort,''d.Sort]]]],'op_:_->_`[_`].[''__.Sort,'__[ ''HookList.Sort,''HookList.Sort],''HookList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''nil.HookList.Constant]]],'op_:_->_`[_`].[''__.Sort,'__[ ''HookList.Sort,''NeHookList.Sort],''NeHookList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''nil.HookList.Constant]]],'op_:_->_`[_`].[''__.Sort,'__[ ''ImportList.Sort,''ImportList.Sort],''ImportList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''nil.ImportList.Constant],'format['__[''d.Sort,''ni.Sort, ''d.Sort]]]],'op_:_->_`[_`].[''__.Sort,'__[''MembAxSet.Sort, ''MembAxSet.Sort],''MembAxSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr, 'id[''none.MembAxSet.Constant],'format['__[''d.Sort,''ni.Sort,''d.Sort]]]], 'op_:_->_`[_`].[''__.Sort,'__[''NarrowingTrace.Sort,''NarrowingTrace.Sort], ''NarrowingTrace.Sort,'__['assoc.Attr,'ctor.Attr,'id[ ''nil.NarrowingTrace.Constant]]],'op_:_->_`[_`].[''__.Sort,'__[ ''NatList.Sort,''NatList.Sort],''NatList.Sort,'__['assoc.Attr,'ctor.Attr, 'id[''nil.NatList.Constant],'prec['s_^25['0.Zero]]]],'op_:_->_`[_`].[ ''__.Sort,'__[''NatList.Sort,''NeNatList.Sort],''NeNatList.Sort,'__[ 'assoc.Attr,'ctor.Attr,'id[''nil.NatList.Constant],'prec['s_^25[ '0.Zero]]]],'op_:_->_`[_`].[''__.Sort,'__[''NeHookList.Sort, ''HookList.Sort],''NeHookList.Sort,'__['assoc.Attr,'ctor.Attr,'id[ ''nil.HookList.Constant]]],'op_:_->_`[_`].[''__.Sort,'__[''NeNatList.Sort, ''NatList.Sort],''NeNatList.Sort,'__['assoc.Attr,'ctor.Attr,'id[ ''nil.NatList.Constant],'prec['s_^25['0.Zero]]]],'op_:_->_`[_`].[''__.Sort, '__[''NeQidList.Sort,''QidList.Sort],''NeQidList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''nil.TypeList.Constant],'prec['s_^25['0.Zero]]]], 'op_:_->_`[_`].[''__.Sort,'__[''NeTypeList.Sort,''TypeList.Sort], ''NeTypeList.Sort,'__['assoc.Attr,'ctor.Attr,'id[''nil.TypeList.Constant], 'prec['s_^25['0.Zero]]]],'op_:_->_`[_`].[''__.Sort,'__[''OpDeclSet.Sort, ''OpDeclSet.Sort],''OpDeclSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr, 'id[''none.OpDeclSet.Constant],'format['__[''d.Sort,''ni.Sort,''d.Sort]]]], 'op_:_->_`[_`].[''__.Sort,'__[''OpMappingSet.Sort,''OpMappingSet.Sort], ''OpMappingSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.OpMappingSet.Constant],'format['__[''d.Sort,''ni.Sort,''d.Sort]]]], 'op_:_->_`[_`].[''__.Sort,'__[''PrintOptionSet.Sort,''PrintOptionSet.Sort], ''PrintOptionSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.PrintOptionSet.Constant]]],'op_:_->_`[_`].[''__.Sort,'__[ ''QidList.Sort,''NeQidList.Sort],''NeQidList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''nil.TypeList.Constant],'prec['s_^25['0.Zero]]]], 'op_:_->_`[_`].[''__.Sort,'__[''QidList.Sort,''QidList.Sort], ''QidList.Sort,'__['assoc.Attr,'ctor.Attr,'id[''nil.TypeList.Constant], 'prec['s_^25['0.Zero]]]],'op_:_->_`[_`].[''__.Sort,'__[''RuleSet.Sort, ''RuleSet.Sort],''RuleSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.RuleSet.Constant],'format['__[''d.Sort,''ni.Sort,''d.Sort]]]], 'op_:_->_`[_`].[''__.Sort,'__[''SortMappingSet.Sort,''SortMappingSet.Sort], ''SortMappingSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.SortMappingSet.Constant],'format['__[''d.Sort,''ni.Sort, ''d.Sort]]]],'op_:_->_`[_`].[''__.Sort,'__[''StratDeclSet.Sort, ''StratDeclSet.Sort],''StratDeclSet.Sort,'__['assoc.Attr,'comm.Attr, 'ctor.Attr,'id[''none.StratDeclSet.Constant],'format['__[''d.Sort, ''ni.Sort,''d.Sort]]]],'op_:_->_`[_`].[''__.Sort,'__[''StratDefSet.Sort, ''StratDefSet.Sort],''StratDefSet.Sort,'__['assoc.Attr,'comm.Attr, 'ctor.Attr,'id[''none.StratDefSet.Constant],'format['__[''d.Sort,''ni.Sort, ''d.Sort]]]],'op_:_->_`[_`].[''__.Sort,'__[''StratMappingSet.Sort, ''StratMappingSet.Sort],''StratMappingSet.Sort,'__['assoc.Attr,'comm.Attr, 'ctor.Attr,'id[''none.StratMappingSet.Constant],'format['__[''d.Sort, ''ni.Sort,''d.Sort]]]],'op_:_->_`[_`].[''__.Sort,'__[''SubsortDeclSet.Sort, ''SubsortDeclSet.Sort],''SubsortDeclSet.Sort,'__['assoc.Attr,'comm.Attr, 'ctor.Attr,'id[''none.SubsortDeclSet.Constant],'format['__[''d.Sort, ''ni.Sort,''d.Sort]]]],'op_:_->_`[_`].[''__.Sort,'__[''Trace.Sort, ''Trace.Sort],''Trace.Sort,'__['assoc.Attr,'ctor.Attr,'id[ ''nil.Trace.Constant],'format['__[''d.Sort,''n.Sort,''d.Sort]]]], 'op_:_->_`[_`].[''__.Sort,'__[''TypeList.Sort,''NeTypeList.Sort], ''NeTypeList.Sort,'__['assoc.Attr,'ctor.Attr,'id[''nil.TypeList.Constant], 'prec['s_^25['0.Zero]]]],'op_:_->_`[_`].[''__.Sort,'__[''TypeList.Sort, ''TypeList.Sort],''TypeList.Sort,'__['assoc.Attr,'ctor.Attr,'id[ ''nil.TypeList.Constant],'prec['s_^25['0.Zero]]]],'op_:_->_`[_`].[ ''__.Sort,'__[''VariantOptionSet.Sort,''VariantOptionSet.Sort], ''VariantOptionSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.VariantOptionSet.Constant]]],'op_:_->_`[_`].[''_`,_.Qid,'__[ ''EmptyCommaList.Sort,''EmptyCommaList.Sort],''EmptyCommaList.Sort,'__[ 'assoc.Attr,'ctor.Attr,'id[''empty.EmptyCommaList.Constant],'prec['s_^121[ '0.Zero]],'gather['__[''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[ ''GTermList.Sort,''GTermList.Sort],''GTermList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''empty.EmptyCommaList.Constant],'prec['s_^121['0.Zero]], 'gather['__[''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[ ''GroundTermList.Sort,''GroundTermList.Sort],''GroundTermList.Sort,'__[ 'assoc.Attr,'ctor.Attr,'id[''empty.EmptyCommaList.Constant],'prec['s_^121[ '0.Zero]],'gather['__[''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[ ''GroundTermList.Sort,''NeGroundTermList.Sort],''NeGroundTermList.Sort,'__[ 'assoc.Attr,'ctor.Attr,'id[''empty.EmptyCommaList.Constant],'prec['s_^121[ '0.Zero]],'gather['__[''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[ ''NeCTermList.Sort,''TermList.Sort],''NeCTermList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''empty.EmptyCommaList.Constant],'prec['s_^121['0.Zero]], 'gather['__[''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[ ''NeGroundTermList.Sort,''GroundTermList.Sort],''NeGroundTermList.Sort,'__[ 'assoc.Attr,'ctor.Attr,'id[''empty.EmptyCommaList.Constant],'prec['s_^121[ '0.Zero]],'gather['__[''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[ ''NeParameterDeclList.Sort,''ParameterDeclList.Sort], ''NeParameterDeclList.Sort,'__['assoc.Attr,'ctor.Attr,'id[ ''nil.ParameterDeclList.Constant],'prec['s_^121['0.Zero]]]], 'op_:_->_`[_`].[''_`,_.Qid,'__[''NeParameterList.Sort, ''ParameterList.Sort],''NeParameterList.Sort,'__['assoc.Attr,'ctor.Attr, 'id[''empty.EmptyCommaList.Constant],'prec['s_^121['0.Zero]],'gather['__[ ''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[''NeTermList.Sort, ''TermList.Sort],''NeTermList.Sort,'__['assoc.Attr,'ctor.Attr,'id[ ''empty.EmptyCommaList.Constant],'prec['s_^121['0.Zero]],'gather['__[ ''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[ ''ParameterDeclList.Sort,''NeParameterDeclList.Sort], ''NeParameterDeclList.Sort,'__['assoc.Attr,'ctor.Attr,'id[ ''nil.ParameterDeclList.Constant],'prec['s_^121['0.Zero]]]], 'op_:_->_`[_`].[''_`,_.Qid,'__[''ParameterDeclList.Sort, ''ParameterDeclList.Sort],''ParameterDeclList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''nil.ParameterDeclList.Constant],'prec['s_^121['0.Zero]]]], 'op_:_->_`[_`].[''_`,_.Qid,'__[''ParameterList.Sort, ''NeParameterList.Sort],''NeParameterList.Sort,'__['assoc.Attr,'ctor.Attr, 'id[''empty.EmptyCommaList.Constant],'prec['s_^121['0.Zero]],'gather['__[ ''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[''ParameterList.Sort, ''ParameterList.Sort],''ParameterList.Sort,'__['assoc.Attr,'ctor.Attr,'id[ ''empty.EmptyCommaList.Constant],'prec['s_^121['0.Zero]],'gather['__[ ''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[''RenamingSet.Sort, ''RenamingSet.Sort],''RenamingSet.Sort,'__['assoc.Attr,'comm.Attr, 'ctor.Attr,'prec['s_^43['0.Zero]],'format['__[''d.Sort,''d.Sort,''ni.Sort, ''d.Sort]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[''StrategyList.Sort, ''StrategyList.Sort],''StrategyList.Sort,'__['assoc.Attr,'ctor.Attr,'id[ ''empty.StrategyList.Constant]]],'op_:_->_`[_`].[''_`,_.Qid,'__[ ''TermList.Sort,''NeCTermList.Sort],''NeCTermList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''empty.EmptyCommaList.Constant],'prec['s_^121['0.Zero]], 'gather['__[''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[ ''TermList.Sort,''NeTermList.Sort],''NeTermList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''empty.EmptyCommaList.Constant],'prec['s_^121['0.Zero]], 'gather['__[''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[ ''TermList.Sort,''TermList.Sort],''TermList.Sort,'__['assoc.Attr, 'ctor.Attr,'id[''empty.EmptyCommaList.Constant],'prec['s_^121['0.Zero]], 'gather['__[''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_`,_.Qid,'__[ ''UsingPairSet.Sort,''UsingPairSet.Sort],''UsingPairSet.Sort,'__[ 'assoc.Attr,'comm.Attr,'ctor.Attr,'prec['s_^61['0.Zero]]]],'op_:_->_`[_`].[ ''_`[_`].Qid,'__[''Qid.Sort,''NeCTermList.Sort],''Context.Sort,'ctor.Attr], 'op_:_->_`[_`].[''_`[_`].Qid,'__[''Qid.Sort,''NeGroundTermList.Sort], ''GroundTerm.Sort,'ctor.Attr],'op_:_->_`[_`].[''_`[_`].Qid,'__[''Qid.Sort, ''NeTermList.Sort],''Term.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''_`[_`]`{_`}.Qid,'__[''Qid.Sort,''Substitution.Sort,''StrategyList.Sort], ''RuleApplication.Sort,'__['ctor.Attr,'prec['s_^21['0.Zero]]]], 'op_:_->_`[_`].[''_`[`[_`]`].Qid,'__[''Qid.Sort,''TermList.Sort], ''CallStrategy.Sort,'__['ctor.Attr,'prec['s_^21['0.Zero]]]], 'op_:_->_`[_`].[''_`{_`}.Sort,'__[''Expression.Sort, ''NeParameterList.Sort],''Expression.Sort,'__['ctor.Attr,'prec['s_^37[ '0.Zero]]]],'op_:_->_`[_`].[''_`{_`}.Sort,'__[''ModuleExpression.Sort, ''NeParameterList.Sort],''ModuleExpression.Sort,'__['ctor.Attr,'prec[ 's_^37['0.Zero]]]],'op_:_->_`[_`].[''_`{_`}.Sort,'__[''Qid.Sort, ''ParameterDeclList.Sort],''Header.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''_`{_`}.Sort,'__[''ViewExpression.Sort,''NeParameterList.Sort], ''ViewExpression.Sort,'__['ctor.Attr,'prec['s_^37['0.Zero]]]], 'op_:_->_`[_`].[''_and-then_.Sort,'__[''Bool.Sort,''Bool.Sort],''Bool.Sort, '__['strat['__['s_['0.Zero],'0.Zero]],'prec['s_^55['0.Zero]],'gather['__[ ''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_and_.Sort,'__[''Bool.Sort, ''Bool.Sort],''Bool.Sort,'__['assoc.Attr,'comm.Attr,'prec['s_^55[ '0.Zero]]]],'op_:_->_`[_`].[''_divides_.Sort,'__[''NzNat.Sort,''Nat.Sort], ''Bool.Sort,'__['prec['s_^51['0.Zero]],'special['__['id-hook[ ''NumberOpSymbol.Sort,''divides.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort],'term-hook[''trueTerm.Sort,''true.Bool.Constant], 'term-hook[''falseTerm.Sort,''false.Bool.Constant]]]]],'op_:_->_`[_`].[ ''_implies_.Sort,'__[''Bool.Sort,''Bool.Sort],''Bool.Sort,'__['prec['s_^61[ '0.Zero]],'gather['__[''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_in_.Sort, '__[''Qid.Sort,''QidSet.Sort],''Bool.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''_or-else_.Sort,'__[''Bool.Sort,''Bool.Sort],''Bool.Sort,'__['strat['__[ 's_['0.Zero],'0.Zero]],'prec['s_^59['0.Zero]],'gather['__[''e.Sort, ''E.Sort]]]],'op_:_->_`[_`].[''_or-else_.Sort,'__[''Strategy.Sort, ''Strategy.Sort],''Strategy.Sort,'__['assoc.Attr,'ctor.Attr,'prec['s_^43[ '0.Zero]],'gather['__[''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''_or_.Sort, '__[''Bool.Sort,''Bool.Sort],''Bool.Sort,'__['assoc.Attr,'comm.Attr,'prec[ 's_^59['0.Zero]]]],'op_:_->_`[_`].[''_psubset_.Sort,'__[''QidSet.Sort, ''QidSet.Sort],''Bool.Sort,'none.AttrSet],'op_:_->_`[_`].[''_quo_.Sort,'__[ ''Nat.Sort,''NzNat.Sort],''Nat.Sort,'__['prec['s_^31['0.Zero]],'gather['__[ ''E.Sort,''e.Sort]],'special['__['id-hook[''NumberOpSymbol.Sort, ''quo.Sort],'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort, ''NzNat.Sort]]]]],'op_:_->_`[_`].[''_rem_.Sort,'__[''Nat.Sort, ''NzNat.Sort],''Nat.Sort,'__['prec['s_^31['0.Zero]],'gather['__[''E.Sort, ''e.Sort]],'special['__['id-hook[''NumberOpSymbol.Sort,''rem.Sort], 'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]], 'op_:_->_`[_`].[''_subset_.Sort,'__[''QidSet.Sort,''QidSet.Sort], ''Bool.Sort,'none.AttrSet],'op_:_->_`[_`].[''_using_.Sort,'__[ ''Variable.Sort,''Strategy.Sort],''UsingPair.Sort,'__['ctor.Attr,'prec[ 's_^21['0.Zero]]]],'op_:_->_`[_`].[''_xor_.Sort,'__[''Bool.Sort, ''Bool.Sort],''Bool.Sort,'__['assoc.Attr,'comm.Attr,'prec['s_^57[ '0.Zero]]]],'op_:_->_`[_`].[''_xor_.Sort,'__[''Nat.Sort,''Nat.Sort], ''Nat.Sort,'__['assoc.Attr,'comm.Attr,'prec['s_^55['0.Zero]],'special['__[ 'id-hook[''ACU_NumberOpSymbol.Sort,''xor.Sort],'op-hook[''succSymbol.Sort, ''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[''_|_.Sort,'__[ ''Nat.Sort,''Nat.Sort],''Nat.Sort,'__['assoc.Attr,'comm.Attr,'prec['s_^57[ '0.Zero]],'special['__['id-hook[''ACU_NumberOpSymbol.Sort,''|.Sort], 'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]], 'op_:_->_`[_`].[''_|_.Sort,'__[''NzNat.Sort,''Nat.Sort],''NzNat.Sort,'__[ 'assoc.Attr,'comm.Attr,'prec['s_^57['0.Zero]],'special['__['id-hook[ ''ACU_NumberOpSymbol.Sort,''|.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[''_|_.Sort,'__[ ''Strategy.Sort,''Strategy.Sort],''Strategy.Sort,'__['assoc.Attr, 'comm.Attr,'ctor.Attr,'id[''fail.Strategy.Constant],'prec['s_^41['0.Zero]], 'gather['__[''e.Sort,''E.Sort]]]],'op_:_->_`[_`].[''`[_`].Kind,''Qid.Sort, ''Module.Sort,'none.AttrSet],'op_:_->_`[_`].[''`[`].Kind,'nil.TypeList, ''Context.Sort,'ctor.Attr],'op_:_->_`[_`].[''`{_`,_`,_`,_`,_`,_`,_`}.Qid, '__[''Context.Sort,''Qid.Sort,''Substitution.Sort,''Qid.Sort,''Term.Sort, ''Type.Sort,''Substitution.Sort],''NarrowingStep.Sort,'__['ctor.Attr, 'format['__[''ni.Sort,''n++i.Sort,''d.Sort,''ni.Sort,''d.Sort,''d.Sort, ''d.Sort,''ni.Sort,''d.Sort,''ni.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort, ''n--i.Sort,''d.Sort]]]],'op_:_->_`[_`].[''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'__[ ''Term.Sort,''Type.Sort,''Context.Sort,''Qid.Sort,''Substitution.Sort, ''Substitution.Sort,''Qid.Sort],''NarrowingApplyResult.Sort,'__['ctor.Attr, 'format['__[''d.Sort,''n++i.Sort,''d.Sort,''d.Sort,''d.Sort,''ni.Sort, ''d.Sort,''ni.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''ni.Sort, ''n--i.Sort,''d.Sort]]]],'op_:_->_`[_`].[''`{_`,_`,_`,_`,_`,_`}.Qid,'__[ ''Term.Sort,''Type.Sort,''Substitution.Sort,''NarrowingTrace.Sort, ''Substitution.Sort,''Qid.Sort],''NarrowingSearchPathResult.Sort,'__[ 'ctor.Attr,'format['__[''d.Sort,''n++i.Sort,''d.Sort,''d.Sort,''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''ni.Sort, ''n--i.Sort,''d.Sort]]]],'op_:_->_`[_`].[''`{_`,_`,_`,_`,_`,_`}.Qid,'__[ ''Term.Sort,''Type.Sort,''Substitution.Sort,''Qid.Sort,''Substitution.Sort, ''Qid.Sort],''NarrowingSearchResult.Sort,'__['ctor.Attr,'format['__[ ''d.Sort,''n++i.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort, ''ni.Sort,''d.Sort,''d.Sort,''d.Sort,''ni.Sort,''n--i.Sort,''d.Sort]]]], 'op_:_->_`[_`].[''`{_`,_`,_`,_`,_`}.Qid,'__[''Term.Sort, ''Substitution.Sort,''Nat.Sort,''Parent.Sort,''Bool.Sort],''Variant.Sort, 'ctor.Attr],'op_:_->_`[_`].[''`{_`,_`,_`,_`,_`}.Qid,'__[''Term.Sort, ''Substitution.Sort,''Qid.Sort,''Parent.Sort,''Bool.Sort],''Variant.Sort, 'ctor.Attr],'op_:_->_`[_`].[''`{_`,_`,_`,_`}.Qid,'__[''Term.Sort, ''Substitution.Sort,''Term.Sort,''Nat.Sort],''SmtResult.Sort,'ctor.Attr], 'op_:_->_`[_`].[''`{_`,_`,_`,_`}.Qid,'__[''Term.Sort,''Type.Sort, ''Substitution.Sort,''Context.Sort],''Result4Tuple.Sort,'ctor.Attr], 'op_:_->_`[_`].[''`{_`,_`,_`}.Qid,'__[''Substitution.Sort, ''Substitution.Sort,''Nat.Sort],''UnificationTriple.Sort,'ctor.Attr], 'op_:_->_`[_`].[''`{_`,_`,_`}.Qid,'__[''Substitution.Sort, ''Substitution.Sort,''Qid.Sort],''UnificationTriple.Sort,'ctor.Attr], 'op_:_->_`[_`].[''`{_`,_`,_`}.Qid,'__[''Term.Sort,''Type.Sort,''Rule.Sort], ''TraceStep.Sort,'ctor.Attr],'op_:_->_`[_`].[''`{_`,_`,_`}.Qid,'__[ ''Term.Sort,''Type.Sort,''Substitution.Sort],''ResultTriple.Sort, 'ctor.Attr],'op_:_->_`[_`].[''`{_`,_`}.Qid,'__[''Substitution.Sort, ''Context.Sort],''MatchPair.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''`{_`,_`}.Qid,'__[''Substitution.Sort,''Nat.Sort],''UnificationPair.Sort, 'ctor.Attr],'op_:_->_`[_`].[''`{_`,_`}.Qid,'__[''Substitution.Sort, ''Qid.Sort],''UnificationPair.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''`{_`,_`}.Qid,'__[''Term.Sort,''Type.Sort],''ResultPair.Sort,'ctor.Attr], 'op_:_->_`[_`].[''all.Sort,'nil.TypeList,''RuleApplication.Sort, 'ctor.Attr],'op_:_->_`[_`].[''amatch_s.t._.Constant,'__[''Term.Sort, ''EqCondition.Sort],''Strategy.Sort,'__['ctor.Attr,'prec['s_^21[ '0.Zero]]]],'op_:_->_`[_`].[''amatchrew_s.t._by_.Constant,'__[''Term.Sort, ''EqCondition.Sort,''UsingPairSet.Sort],''Strategy.Sort,'ctor.Attr], 'op_:_->_`[_`].[''ambiguity.Sort,'__[''ResultPair.Sort,''ResultPair.Sort], ''ResultPair?.Sort,'ctor.Attr],'op_:_->_`[_`].[''ambiguity.Sort,'__[ ''Strategy.Sort,''Strategy.Sort],''Strategy?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''anyType.Sort,'nil.TypeList,''Type?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''append.Sort,'__[''NatList.Sort,''NatList.Sort], ''NatList.Sort,'none.AttrSet],'op_:_->_`[_`].[''append.Sort,'__[ ''NatList.Sort,''NeNatList.Sort],''NeNatList.Sort,'none.AttrSet], 'op_:_->_`[_`].[''append.Sort,'__[''NeNatList.Sort,''NatList.Sort], ''NeNatList.Sort,'none.AttrSet],'op_:_->_`[_`].[''append.Sort,'__[ ''NeQidList.Sort,''QidList.Sort],''NeQidList.Sort,'none.AttrSet], 'op_:_->_`[_`].[''append.Sort,'__[''QidList.Sort,''NeQidList.Sort], ''NeQidList.Sort,'none.AttrSet],'op_:_->_`[_`].[''append.Sort,'__[ ''QidList.Sort,''QidList.Sort],''QidList.Sort,'none.AttrSet], 'op_:_->_`[_`].[''applySubstitution.Sort,'__[''Module.Sort,''Term.Sort, ''Substitution.Sort],''Term.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''ascii.Sort,''Char.Sort,''Nat.Sort,'special['__['id-hook[ ''StringOpSymbol.Sort,''ascii.Sort],'op-hook[''stringSymbol.Sort, ''.Sort,'nil.TypeList,''Char.Sort],'op-hook[''succSymbol.Sort, ''s_.Sort,''Nat.Sort,''NzNat.Sort]]]],'op_:_->_`[_`].[''assoc.Sort, 'nil.TypeList,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''breadthFirst.Sort, 'nil.TypeList,''SrewriteOption.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''ceq_=_if_`[_`]..Qid,'__[''Term.Sort,''Term.Sort,''EqCondition.Sort, ''AttrSet.Sort],''Equation.Sort,'__['ctor.Attr,'format['__[''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort,''d.Sort, ''s.Sort,''d.Sort]]]],'op_:_->_`[_`].[''char.Sort, ''`[FindResult`,NatList`,Bound`,Parent`].Kind,''`[String`].Kind,'special[ '__['id-hook[''StringOpSymbol.Sort,''char.Sort],'op-hook[ ''stringSymbol.Sort,''.Sort,'nil.TypeList,''Char.Sort],'op-hook[ ''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]],'op_:_->_`[_`].[ ''cmb_:_if_`[_`]..Qid,'__[''Term.Sort,''Sort.Sort,''EqCondition.Sort, ''AttrSet.Sort],''MembAx.Sort,'__['ctor.Attr,'format['__[''d.Sort,''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort,''d.Sort,''s.Sort, ''d.Sort]]]],'op_:_->_`[_`].[''comm.Sort,'nil.TypeList,''Attr.Sort, 'ctor.Attr],'op_:_->_`[_`].[''completeName.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaCompleteName.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''config.Sort,'nil.TypeList,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''crl_=>_if_`[_`]..Qid,'__[''Term.Sort,''Term.Sort,''Condition.Sort, ''AttrSet.Sort],''Rule.Sort,'__['ctor.Attr,'format['__[''d.Sort,''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort,''d.Sort,''s.Sort, ''d.Sort]]]],'op_:_->_`[_`].[''csd_:=_if_`[_`]..Qid,'__[ ''CallStrategy.Sort,''Strategy.Sort,''EqCondition.Sort,''AttrSet.Sort], ''StratDefinition.Sort,'__['ctor.Attr,'format['__[''d.Sort,''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort,''d.Sort,''s.Sort, ''d.Sort]]]],'op_:_->_`[_`].[''ctor.Sort,'nil.TypeList,''Attr.Sort, 'ctor.Attr],'op_:_->_`[_`].[''delay.Sort,'nil.TypeList, ''VariantOption.Sort,'ctor.Attr],'op_:_->_`[_`].[''delete.Sort,'__[ ''Qid.Sort,''QidSet.Sort],''QidSet.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''depthFirst.Sort,'nil.TypeList,''SrewriteOption.Sort,'ctor.Attr], 'op_:_->_`[_`].[''downTerm.Sort,'__[''Term.Sort,''Universal.Sort], ''Universal.Sort,'__['poly['__['s_^2['0.Zero],'0.Zero]],'special['__[ 'id-hook[''MetaLevelOpSymbol.Sort,''metaDownTerm.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]]],'op_:_->_`[_`].[ ''empty.Sort,'nil.TypeList,''EmptyCommaList.Sort,'ctor.Attr], 'op_:_->_`[_`].[''empty.Sort,'nil.TypeList,''GroundTermList.Sort, 'ctor.Attr],'op_:_->_`[_`].[''empty.Sort,'nil.TypeList,''StrategyList.Sort, 'ctor.Attr],'op_:_->_`[_`].[''eq_=_`[_`]..Qid,'__[''Term.Sort,''Term.Sort, ''AttrSet.Sort],''Equation.Sort,'__['ctor.Attr,'format['__[''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort,''d.Sort,''s.Sort, ''d.Sort]]]],'op_:_->_`[_`].[''extending_..Qid,''ModuleExpression.Sort, ''Import.Sort,'ctor.Attr],'op_:_->_`[_`].[''fail.Sort,'nil.TypeList, ''Strategy.Sort,'ctor.Attr],'op_:_->_`[_`].[''failure.Sort,'nil.TypeList, ''NarrowingApplyResult?.Sort,'ctor.Attr],'op_:_->_`[_`].[''failure.Sort, 'nil.TypeList,''NarrowingSearchPathResult?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''failure.Sort,'nil.TypeList,''NarrowingSearchResult?.Sort, 'ctor.Attr],'op_:_->_`[_`].[''failure.Sort,'nil.TypeList, ''Result4Tuple?.Sort,'ctor.Attr],'op_:_->_`[_`].[''failure.Sort, 'nil.TypeList,''ResultPair?.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''failure.Sort,'nil.TypeList,''ResultTriple?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''failure.Sort,'nil.TypeList,''SmtResult?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''failure.Sort,'nil.TypeList,''Trace?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''failureIncomplete.Sort,'nil.TypeList, ''NarrowingApplyResult?.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''failureIncomplete.Sort,'nil.TypeList,''NarrowingSearchPathResult?.Sort, 'ctor.Attr],'op_:_->_`[_`].[''failureIncomplete.Sort,'nil.TypeList, ''NarrowingSearchResult?.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''failureIncomplete.Sort,'nil.TypeList,''ResultTriple?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''false.Sort,'nil.TypeList,''Bool.Sort,'__['ctor.Attr, 'special['id-hook[''SystemFalse.Sort,'nil.TypeList]]]],'op_:_->_`[_`].[ ''filter.Sort,'nil.TypeList,''VariantOption.Sort,'ctor.Attr], 'op_:_->_`[_`].[''find.Sort,'__[''String.Sort,''String.Sort,''Nat.Sort], ''FindResult.Sort,'special['__['id-hook[''StringOpSymbol.Sort,''find.Sort], 'op-hook[''stringSymbol.Sort,''.Sort,'nil.TypeList,''Char.Sort], 'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort],'term-hook[ ''notFoundTerm.Sort,''notFound.FindResult.Constant]]]],'op_:_->_`[_`].[ ''flat.Sort,'nil.TypeList,''PrintOption.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''fmod_is_sorts_.____endfm.Constant,'__[''Header.Sort,''ImportList.Sort, ''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort,''MembAxSet.Sort, ''EquationSet.Sort],''FModule.Sort,'__['ctor.Attr,'gather['__[''&.Sort, ''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort]],'format['__[ ''d.Sort,''d.Sort,''s.Sort,''n++i.Sort,''ni.Sort,''d.Sort,''d.Sort, ''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''n--i.Sort,''d.Sort]]]], 'op_:_->_`[_`].[''format.Sort,''QidList.Sort,''Attr.Sort,'ctor.Attr], 'op_:_->_`[_`].[''format.Sort,'nil.TypeList,''PrintOption.Sort,'ctor.Attr], 'op_:_->_`[_`].[''front.Sort,''NeNatList.Sort,''NatList.Sort, 'none.AttrSet],'op_:_->_`[_`].[''front.Sort,''NeQidList.Sort, ''QidList.Sort,'none.AttrSet],'op_:_->_`[_`].[''frozen.Sort, ''NeNatList.Sort,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''fth_is_sorts_.____endfth.Constant,'__[''Qid.Sort,''ImportList.Sort, ''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort,''MembAxSet.Sort, ''EquationSet.Sort],''FTheory.Sort,'__['ctor.Attr,'gather['__[''&.Sort, ''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort]],'format['__[ ''d.Sort,''d.Sort,''d.Sort,''n++i.Sort,''ni.Sort,''d.Sort,''d.Sort, ''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''n--i.Sort,''d.Sort]]]], 'op_:_->_`[_`].[''gather.Sort,''QidList.Sort,''Attr.Sort,'ctor.Attr], 'op_:_->_`[_`].[''gcd.Sort,'__[''Nat.Sort,''Nat.Sort],''Nat.Sort,'__[ 'assoc.Attr,'comm.Attr,'special['__['id-hook[''ACU_NumberOpSymbol.Sort, ''gcd.Sort],'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort, ''NzNat.Sort]]]]],'op_:_->_`[_`].[''gcd.Sort,'__[''NzNat.Sort,''Nat.Sort], ''NzNat.Sort,'__['assoc.Attr,'comm.Attr,'special['__['id-hook[ ''ACU_NumberOpSymbol.Sort,''gcd.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[ ''getAccumulatedSubstitution.Sort,''NarrowingSearchResult.Sort, ''Substitution.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getAccumulatedSubstitution.Sort,''NarrowingStep.Sort,''Substitution.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getContext.Sort,''MatchPair.Sort, ''Context.Sort,'none.AttrSet],'op_:_->_`[_`].[''getContext.Sort, ''NarrowingApplyResult.Sort,''Context.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getContext.Sort,''NarrowingStep.Sort,''Context.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getContext.Sort,''Result4Tuple.Sort,''Context.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getEqs.Sort,''Module.Sort, ''EquationSet.Sort,'none.AttrSet],'op_:_->_`[_`].[''getFrom.Sort, ''View.Sort,''ModuleExpression.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getImports.Sort,''Module.Sort,''ImportList.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getInitialSubstitution.Sort, ''NarrowingSearchPathResult.Sort,''Substitution.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getInitialTerm.Sort,''NarrowingSearchPathResult.Sort, ''Term.Sort,'none.AttrSet],'op_:_->_`[_`].[''getInitialType.Sort, ''NarrowingSearchPathResult.Sort,''Type.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getKind.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaGetKind.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''getKinds.Sort,''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaGetKinds.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''getLabel.Sort,''NarrowingApplyResult.Sort,''Qid.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getLabel.Sort,''NarrowingStep.Sort,''Qid.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getLhsSubstitution.Sort, ''UnificationTriple.Sort,''Substitution.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getMbs.Sort,''Module.Sort,''MembAxSet.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getMoreVariantsInLayerFlag.Sort, ''Variant.Sort,''Bool.Sort,'none.AttrSet],'op_:_->_`[_`].[''getName.Sort, ''Constant.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[''getName.Sort, ''Module.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[''getName.Sort, ''Variable.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[''getName.Sort, ''View.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[''getOpMappings.Sort, ''View.Sort,''OpMappingSet.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getOps.Sort,''Module.Sort,''OpDeclSet.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getParent.Sort,''Variant.Sort,''Parent.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getRhsSubstitution.Sort, ''UnificationTriple.Sort,''Substitution.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getRls.Sort,''Module.Sort,''RuleSet.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getRule.Sort,''TraceStep.Sort,''Rule.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getRuleSubstitution.Sort,''NarrowingApplyResult.Sort, ''Substitution.Sort,'none.AttrSet],'op_:_->_`[_`].[''getSds.Sort, ''Module.Sort,''StratDefSet.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getSortMappings.Sort,''View.Sort,''SortMappingSet.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getSorts.Sort,''Module.Sort,''SortSet.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getStateVariableFamily.Sort, ''NarrowingSearchResult.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getStratMappings.Sort,''View.Sort,''StratMappingSet.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getStrats.Sort,''Module.Sort,''StratDeclSet.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getSubsorts.Sort,''Module.Sort, ''SubsortDeclSet.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getSubstitution.Sort,''MatchPair.Sort,''Substitution.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getSubstitution.Sort,''Result4Tuple.Sort, ''Substitution.Sort,'none.AttrSet],'op_:_->_`[_`].[''getSubstitution.Sort, ''ResultTriple.Sort,''Substitution.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getSubstitution.Sort,''UnificationPair.Sort,''Substitution.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getSubstitution.Sort,''Variant.Sort, ''Substitution.Sort,'none.AttrSet],'op_:_->_`[_`].[''getTerm.Sort, ''NarrowingApplyResult.Sort,''Term.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getTerm.Sort,''NarrowingSearchResult.Sort,''Term.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getTerm.Sort,''NarrowingStep.Sort,''Term.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getTerm.Sort,''Result4Tuple.Sort, ''Term.Sort,'none.AttrSet],'op_:_->_`[_`].[''getTerm.Sort, ''ResultPair.Sort,''Term.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getTerm.Sort,''ResultTriple.Sort,''Term.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getTerm.Sort,''TraceStep.Sort,''Term.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getTerm.Sort,''Variant.Sort,''Term.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getTermSubstitution.Sort,''NarrowingApplyResult.Sort, ''Substitution.Sort,'none.AttrSet],'op_:_->_`[_`].[''getTo.Sort, ''View.Sort,''ModuleExpression.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getTrace.Sort,''NarrowingSearchPathResult.Sort,''NarrowingTrace.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getType.Sort,''Constant.Sort,''Type.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getType.Sort,''NarrowingApplyResult.Sort, ''Type.Sort,'none.AttrSet],'op_:_->_`[_`].[''getType.Sort, ''NarrowingSearchResult.Sort,''Type.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getType.Sort,''NarrowingStep.Sort,''Type.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getType.Sort,''Result4Tuple.Sort,''Type.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getType.Sort,''ResultPair.Sort, ''Type.Sort,'none.AttrSet],'op_:_->_`[_`].[''getType.Sort, ''ResultTriple.Sort,''Type.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getType.Sort,''TraceStep.Sort,''Type.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getType.Sort,''Variable.Sort,''Type.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getUnifier.Sort,''NarrowingSearchPathResult.Sort,''Substitution.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getUnifier.Sort, ''NarrowingSearchResult.Sort,''Substitution.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getUnifier.Sort,''NarrowingStep.Sort,''Substitution.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getUnifierVariableFamily.Sort, ''NarrowingSearchPathResult.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getUnifierVariableFamily.Sort,''NarrowingSearchResult.Sort,''Qid.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getUnifierVariableFamily.Sort, ''NarrowingStep.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getVariableFamily.Sort,''NarrowingApplyResult.Sort,''Qid.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getVariableFamily.Sort, ''UnificationPair.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getVariableFamily.Sort,''UnificationTriple.Sort,''Qid.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getVariableFamily.Sort,''Variant.Sort, ''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[''glbSorts.Sort,'__[ ''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaGlbSorts.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''head.Sort,''NeNatList.Sort,''Nat.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''head.Sort,''NeQidList.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''id.Sort,''Term.Sort,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''id-hook.Sort,'__[''Qid.Sort,''QidList.Sort],''Hook.Sort,'__['ctor.Attr, 'format['__[''nssss.Sort,''d.Sort]]]],'op_:_->_`[_`].[''idem.Sort, 'nil.TypeList,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''idle.Sort, 'nil.TypeList,''Strategy.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''if_then_else_fi.Sort,'__[''Bool.Sort,''Universal.Sort,''Universal.Sort], ''Universal.Sort,'__['poly['__['s_^2['0.Zero],'s_^3['0.Zero],'0.Zero]], 'special['__['id-hook[''BranchSymbol.Sort,'nil.TypeList],'term-hook[ ''1.Sort,''true.Bool.Constant],'term-hook[''2.Sort, ''false.Bool.Constant]]]]],'op_:_->_`[_`].[''including_..Qid, ''ModuleExpression.Sort,''Import.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''insert.Sort,'__[''Qid.Sort,''QidSet.Sort],''QidSet.Sort,'none.AttrSet], 'op_:_->_`[_`].[''intersection.Sort,'__[''QidSet.Sort,''QidSet.Sort], ''QidSet.Sort,'none.AttrSet],'op_:_->_`[_`].[''iter.Sort,'nil.TypeList, ''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''label.Sort,''Qid.Sort, ''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''label_to_.Sort,'__[''Qid.Sort, ''Qid.Sort],''Renaming.Sort,'ctor.Attr],'op_:_->_`[_`].[''last.Sort, ''NeNatList.Sort,''Nat.Sort,'none.AttrSet],'op_:_->_`[_`].[''last.Sort, ''NeQidList.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[''lcm.Sort,'__[ ''Nat.Sort,''Nat.Sort],''Nat.Sort,'__['assoc.Attr,'comm.Attr,'special['__[ 'id-hook[''ACU_NumberOpSymbol.Sort,''lcm.Sort],'op-hook[''succSymbol.Sort, ''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[''lcm.Sort,'__[ ''NzNat.Sort,''NzNat.Sort],''NzNat.Sort,'__['assoc.Attr,'comm.Attr, 'special['__['id-hook[''ACU_NumberOpSymbol.Sort,''lcm.Sort],'op-hook[ ''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[ ''leastSort.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaLeastSort.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''left-id.Sort,''Term.Sort,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''length.Sort,''String.Sort,''Nat.Sort,'special['__['id-hook[ ''StringOpSymbol.Sort,''length.Sort],'op-hook[''stringSymbol.Sort, ''.Sort,'nil.TypeList,''Char.Sort],'op-hook[''succSymbol.Sort, ''s_.Sort,''Nat.Sort,''NzNat.Sort]]]],'op_:_->_`[_`].[''lesserSorts.Sort, '__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__[ 'id-hook[''MetaLevelOpSymbol.Sort,''metaLesserSorts.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''lowerCase.Sort,''String.Sort,''String.Sort,'special['__['id-hook[ ''StringOpSymbol.Sort,''lowerCase.Sort],'op-hook[''stringSymbol.Sort, ''.Sort,'nil.TypeList,''Char.Sort]]]],'op_:_->_`[_`].[ ''match_s.t._.Constant,'__[''Term.Sort,''EqCondition.Sort],''Strategy.Sort, '__['ctor.Attr,'prec['s_^21['0.Zero]]]],'op_:_->_`[_`].[ ''matchrew_s.t._by_.Constant,'__[''Term.Sort,''EqCondition.Sort, ''UsingPairSet.Sort],''Strategy.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''max.Sort,'__[''Nat.Sort,''Nat.Sort],''Nat.Sort,'__['assoc.Attr, 'comm.Attr,'special['__['id-hook[''ACU_NumberOpSymbol.Sort,''max.Sort], 'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]], 'op_:_->_`[_`].[''max.Sort,'__[''NzNat.Sort,''Nat.Sort],''NzNat.Sort,'__[ 'assoc.Attr,'comm.Attr,'special['__['id-hook[''ACU_NumberOpSymbol.Sort, ''max.Sort],'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort, ''NzNat.Sort]]]]],'op_:_->_`[_`].[''maximalAritySet.Sort,'__[ ''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaMaximalAritySet.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort, '__[''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''maximalSorts.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaMaximalSorts.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''mb_:_`[_`]..Qid,'__[''Term.Sort,''Sort.Sort, ''AttrSet.Sort],''MembAx.Sort,'__['ctor.Attr,'format['__[''d.Sort,''d.Sort, ''d.Sort,''d.Sort,''s.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort]]]], 'op_:_->_`[_`].[''memo.Sort,'nil.TypeList,''Attr.Sort,'ctor.Attr], 'op_:_->_`[_`].[''metaApply.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Substitution?`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[ResultTriple?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaApply.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaCheck.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[Bool`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaCheck.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaDisjointUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationTriple?`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''legacyMetaDisjointUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaDisjointUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationTriple?`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaDisjointUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaFrewrite.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[ResultPair?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaFrewrite.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaGetIrredundantVariant.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[Variant?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''legacyMetaGetIrredundantVariant.Sort],'op-hook[''shareWith.Sort, ''metaReduce.Sort,'__[''Module.Sort,''ModuleExpression.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaGetIrredundantVariant.Sort, '__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[Variant?`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''metaGetIrredundantVariant.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaGetVariant.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[Variant?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''legacyMetaGetVariant.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort, '__[''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''metaGetVariant.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[Variant?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaGetVariant.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaIrredundantDisjointUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationTriple?`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaIrredundantDisjointUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaIrredundantUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''metaIrredundantUnify.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaMatch.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Condition`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[Substitution?`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaMatch.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''metaNarrow.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[Bool`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[ResultPair?`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaNarrow2.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''metaNarrow.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[ResultTriple?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaNarrow.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaNarrowingApply.Sort,'__[''Module.Sort,''Term.Sort,''TermList.Sort, ''Qid.Sort,''Nat.Sort],''NarrowingApplyResult?.Sort,'none.AttrSet], 'op_:_->_`[_`].[''metaNarrowingApply.Sort,'__[''Module.Sort,''Term.Sort, ''TermList.Sort,''Qid.Sort,''VariantOptionSet.Sort,''Nat.Sort], ''NarrowingApplyResult?.Sort,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaNarrowingApply.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaNarrowingSearch.Sort,'__[''Module.Sort,''Term.Sort,''Term.Sort, ''Qid.Sort,''Bound.Sort,''Qid.Sort,''Nat.Sort], ''NarrowingSearchResult?.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''metaNarrowingSearch.Sort,'__[''Module.Sort,''Term.Sort,''Term.Sort, ''Qid.Sort,''Bound.Sort,''Qid.Sort,''VariantOptionSet.Sort,''Nat.Sort], ''NarrowingSearchResult?.Sort,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaNarrowingSearch.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaNarrowingSearchPath.Sort,'__[''Module.Sort,''Term.Sort,''Term.Sort, ''Qid.Sort,''Bound.Sort,''Qid.Sort,''Nat.Sort], ''NarrowingSearchPathResult?.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''metaNarrowingSearchPath.Sort,'__[''Module.Sort,''Term.Sort,''Term.Sort, ''Qid.Sort,''Bound.Sort,''Qid.Sort,''VariantOptionSet.Sort,''Nat.Sort], ''NarrowingSearchPathResult?.Sort,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaNarrowingSearchPath.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaNormalize.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind], ''`[ResultPair?`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaNormalize.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''metaParse.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ResultPair?`].Kind,'none.AttrSet],'op_:_->_`[_`].[ ''metaParse.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ResultPair?`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaParse.Sort],'op-hook[''shareWith.Sort, ''metaReduce.Sort,'__[''Module.Sort,''ModuleExpression.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaParseStrategy.Sort,'__[ ''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind], ''`[StrategyList`,Strategy?`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaParseStrategy.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaPrettyPrint.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'none.AttrSet],'op_:_->_`[_`].[''metaPrettyPrint.Sort,'__[ ''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[PrintOptionSet`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'none.AttrSet],'op_:_->_`[_`].[''metaPrettyPrint.Sort,'__[ ''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[PrintOptionSet`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaPrettyPrint.Sort],'op-hook[''shareWith.Sort, ''metaReduce.Sort,'__[''Module.Sort,''ModuleExpression.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaPrettyPrintStrategy.Sort,'__[ ''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[StrategyList`,Strategy?`].Kind, ''`[PrintOptionSet`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaPrettyPrintStrategy.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaReduce.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind], ''`[ResultPair?`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaReduce.Sort],'op-hook[''qidSymbol.Sort,''.Sort,'nil.TypeList, ''Qid.Sort],'op-hook[''metaTermSymbol.Sort,''_`[_`].Qid,'__[''Qid.Sort, ''NeGroundTermList.Sort],''GroundTerm.Sort],'op-hook[''metaArgSymbol.Sort, ''_`,_.Qid,'__[''NeGroundTermList.Sort,''GroundTermList.Sort], ''NeGroundTermList.Sort],'op-hook[''emptyTermListSymbol.Sort,''empty.Sort, 'nil.TypeList,''GroundTermList.Sort],'op-hook[''assignmentSymbol.Sort, ''_<-_.Sort,'__[''Variable.Sort,''Term.Sort],''Assignment.Sort],'op-hook[ ''emptySubstitutionSymbol.Sort,''none.Sort,'nil.TypeList, ''Substitution.Sort],'op-hook[''substitutionSymbol.Sort,''_;_.Sort,'__[ ''Substitution.Sort,''Substitution.Sort],''Substitution.Sort],'op-hook[ ''holeSymbol.Sort,''`[`].Kind,'nil.TypeList,''Context.Sort],'op-hook[ ''noConditionSymbol.Sort,''nil.Sort,'nil.TypeList,''EqCondition.Sort], 'op-hook[''equalityConditionSymbol.Sort,''_=_.Sort,'__[''Term.Sort, ''Term.Sort],''EqCondition.Sort],'op-hook[''sortTestConditionSymbol.Sort, ''_:_.Variable,'__[''Term.Sort,''Sort.Sort],''EqCondition.Sort],'op-hook[ ''matchConditionSymbol.Sort,''_:=_.Variable,'__[''Term.Sort,''Term.Sort], ''EqCondition.Sort],'op-hook[''rewriteConditionSymbol.Sort,''_=>_.Sort,'__[ ''Term.Sort,''Term.Sort],''Condition.Sort],'op-hook[ ''conjunctionSymbol.Sort,''_/\_.Sort,'__[''EqCondition.Sort, ''EqCondition.Sort],''EqCondition.Sort],'op-hook[''failStratSymbol.Sort, ''fail.Sort,'nil.TypeList,''Strategy.Sort],'op-hook[''idleStratSymbol.Sort, ''idle.Sort,'nil.TypeList,''Strategy.Sort],'op-hook[''allStratSymbol.Sort, ''all.Sort,'nil.TypeList,''RuleApplication.Sort],'op-hook[ ''applicationStratSymbol.Sort,''_`[_`]`{_`}.Qid,'__[''Qid.Sort, ''Substitution.Sort,''StrategyList.Sort],''RuleApplication.Sort],'op-hook[ ''topStratSymbol.Sort,''top.Sort,''RuleApplication.Sort,''Strategy.Sort], 'op-hook[''matchStratSymbol.Sort,''match_s.t._.Constant,'__[''Term.Sort, ''EqCondition.Sort],''Strategy.Sort],'op-hook[''xmatchStratSymbol.Sort, ''xmatch_s.t._.Constant,'__[''Term.Sort,''EqCondition.Sort], ''Strategy.Sort],'op-hook[''amatchStratSymbol.Sort,''amatch_s.t._.Constant, '__[''Term.Sort,''EqCondition.Sort],''Strategy.Sort],'op-hook[ ''unionStratSymbol.Sort,''_|_.Sort,'__[''Strategy.Sort,''Strategy.Sort], ''Strategy.Sort],'op-hook[''concatStratSymbol.Sort,''_;_.Sort,'__[ ''Strategy.Sort,''Strategy.Sort],''Strategy.Sort],'op-hook[ ''orelseStratSymbol.Sort,''_or-else_.Sort,'__[''Strategy.Sort, ''Strategy.Sort],''Strategy.Sort],'op-hook[''plusStratSymbol.Sort, ''_+.Sort,''Strategy.Sort,''Strategy.Sort],'op-hook[ ''conditionalStratSymbol.Sort,''_?_:_.Variable,'__[''Strategy.Sort, ''Strategy.Sort,''Strategy.Sort],''Strategy.Sort],'op-hook[ ''matchrewStratSymbol.Sort,''matchrew_s.t._by_.Constant,'__[''Term.Sort, ''EqCondition.Sort,''UsingPairSet.Sort],''Strategy.Sort],'op-hook[ ''xmatchrewStratSymbol.Sort,''xmatchrew_s.t._by_.Constant,'__[''Term.Sort, ''EqCondition.Sort,''UsingPairSet.Sort],''Strategy.Sort],'op-hook[ ''amatchrewStratSymbol.Sort,''amatchrew_s.t._by_.Constant,'__[''Term.Sort, ''EqCondition.Sort,''UsingPairSet.Sort],''Strategy.Sort],'op-hook[ ''callStratSymbol.Sort,''_`[`[_`]`].Qid,'__[''Qid.Sort,''TermList.Sort], ''CallStrategy.Sort],'op-hook[''oneStratSymbol.Sort,''one.Sort, ''Strategy.Sort,''Strategy.Sort],'op-hook[''starStratSymbol.Sort,''_*.Sort, ''Strategy.Sort,''Strategy.Sort],'op-hook[''normalizationStratSymbol.Sort, ''_!.Sort,''Strategy.Sort,''Strategy.Sort],'op-hook[''notStratSymbol.Sort, ''not.Sort,''Strategy.Sort,''Strategy.Sort],'op-hook[ ''testStratSymbol.Sort,''test.Sort,''Strategy.Sort,''Strategy.Sort], 'op-hook[''tryStratSymbol.Sort,''try.Sort,''Strategy.Sort,''Strategy.Sort], 'op-hook[''usingStratSymbol.Sort,''_using_.Sort,'__[''Variable.Sort, ''Strategy.Sort],''UsingPair.Sort],'op-hook[''usingListStratSymbol.Sort, ''_`,_.Qid,'__[''UsingPairSet.Sort,''UsingPairSet.Sort], ''UsingPairSet.Sort],'op-hook[''emptyStratListSymbol.Sort,''empty.Sort, 'nil.TypeList,''StrategyList.Sort],'op-hook[''stratListSymbol.Sort, ''_`,_.Qid,'__[''StrategyList.Sort,''StrategyList.Sort], ''StrategyList.Sort],'op-hook[''headerSymbol.Sort,''_`{_`}.Sort,'__[ ''Qid.Sort,''ParameterDeclList.Sort],''Header.Sort],'op-hook[ ''parameterDeclSymbol.Sort,''_::_.Variable,'__[''Sort.Sort, ''ModuleExpression.Sort],''ParameterDecl.Sort],'op-hook[ ''parameterDeclListSymbol.Sort,''_`,_.Qid,'__[''ParameterDeclList.Sort, ''ParameterDeclList.Sort],''ParameterDeclList.Sort],'op-hook[ ''protectingSymbol.Sort,''protecting_..Qid,''ModuleExpression.Sort, ''Import.Sort],'op-hook[''extendingSymbol.Sort,''extending_..Qid, ''ModuleExpression.Sort,''Import.Sort],'op-hook[''includingSymbol.Sort, ''including_..Qid,''ModuleExpression.Sort,''Import.Sort],'op-hook[ ''nilImportListSymbol.Sort,''nil.Sort,'nil.TypeList,''ImportList.Sort], 'op-hook[''importListSymbol.Sort,''__.Sort,'__[''ImportList.Sort, ''ImportList.Sort],''ImportList.Sort],'op-hook[''emptySortSetSymbol.Sort, ''none.Sort,'nil.TypeList,''QidSet.Sort],'op-hook[''sortSetSymbol.Sort, ''_;_.Sort,'__[''QidSet.Sort,''QidSet.Sort],''QidSet.Sort],'op-hook[ ''subsortSymbol.Sort,''subsort_<_..Qid,'__[''Sort.Sort,''Sort.Sort], ''SubsortDecl.Sort],'op-hook[''emptySubsortDeclSetSymbol.Sort,''none.Sort, 'nil.TypeList,''SubsortDeclSet.Sort],'op-hook[''subsortDeclSetSymbol.Sort, ''__.Sort,'__[''SubsortDeclSet.Sort,''SubsortDeclSet.Sort], ''SubsortDeclSet.Sort],'op-hook[''nilQidListSymbol.Sort,''nil.Sort, 'nil.TypeList,''QidList.Sort],'op-hook[''qidListSymbol.Sort,''__.Sort,'__[ ''QidList.Sort,''QidList.Sort],''QidList.Sort],'op-hook[ ''emptyQidSetSymbol.Sort,''none.Sort,'nil.TypeList,''QidSet.Sort],'op-hook[ ''qidSetSymbol.Sort,''_;_.Sort,'__[''QidSet.Sort,''QidSet.Sort], ''QidSet.Sort],'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort, ''NzNat.Sort],'op-hook[''natListSymbol.Sort,''__.Sort,'__[''NatList.Sort, ''NatList.Sort],''NatList.Sort],'op-hook[''unboundedSymbol.Sort, ''unbounded.Sort,'nil.TypeList,''Bound.Sort],'op-hook[ ''noParentSymbol.Sort,''none.Sort,'nil.TypeList,''Parent.Sort],'op-hook[ ''stringSymbol.Sort,''.Sort,'nil.TypeList,''Char.Sort],'op-hook[ ''sortRenamingSymbol.Sort,''sort_to_.Sort,'__[''Qid.Sort,''Qid.Sort], ''Renaming.Sort],'op-hook[''opRenamingSymbol.Sort,''op_to_`[_`].Qid,'__[ ''Qid.Sort,''Qid.Sort,''AttrSet.Sort],''Renaming.Sort],'op-hook[ ''opRenamingSymbol2.Sort,''op_:_->_to_`[_`].Qid,'__[''Qid.Sort, ''TypeList.Sort,''Type.Sort,''Qid.Sort,''AttrSet.Sort],''Renaming.Sort], 'op-hook[''labelRenamingSymbol.Sort,''label_to_.Sort,'__[''Qid.Sort, ''Qid.Sort],''Renaming.Sort],'op-hook[''stratRenamingSymbol.Sort, ''strat_to_.Sort,'__[''Qid.Sort,''Qid.Sort],''Renaming.Sort],'op-hook[ ''stratRenamingSymbol2.Sort,''strat_:_@_to_.Variable,'__[''Qid.Sort, ''TypeList.Sort,''Type.Sort,''Qid.Sort],''Renaming.Sort],'op-hook[ ''renamingSetSymbol.Sort,''_`,_.Qid,'__[''RenamingSet.Sort, ''RenamingSet.Sort],''RenamingSet.Sort],'op-hook[''sumSymbol.Sort, ''_+_.Sort,'__[''ModuleExpression.Sort,''ModuleExpression.Sort], ''ModuleExpression.Sort],'op-hook[''renamingSymbol.Sort,''_*`(_`).Sort,'__[ ''ModuleExpression.Sort,''RenamingSet.Sort],''ModuleExpression.Sort], 'op-hook[''instantiationSymbol.Sort,''_`{_`}.Sort,'__[''Expression.Sort, ''NeParameterList.Sort],''Expression.Sort],'op-hook[''termHookSymbol.Sort, ''term-hook.Sort,'__[''Qid.Sort,''Term.Sort],''Hook.Sort],'op-hook[ ''hookListSymbol.Sort,''__.Sort,'__[''HookList.Sort,''HookList.Sort], ''HookList.Sort],'op-hook[''idHookSymbol.Sort,''id-hook.Sort,'__[ ''Qid.Sort,''QidList.Sort],''Hook.Sort],'op-hook[''opHookSymbol.Sort, ''op-hook.Sort,'__[''Qid.Sort,''Qid.Sort,''QidList.Sort,''Qid.Sort], ''Hook.Sort],'op-hook[''assocSymbol.Sort,''assoc.Sort,'nil.TypeList, ''Attr.Sort],'op-hook[''commSymbol.Sort,''comm.Sort,'nil.TypeList, ''Attr.Sort],'op-hook[''idemSymbol.Sort,''idem.Sort,'nil.TypeList, ''Attr.Sort],'op-hook[''iterSymbol.Sort,''iter.Sort,'nil.TypeList, ''Attr.Sort],'op-hook[''idSymbol.Sort,''id.Sort,''Term.Sort,''Attr.Sort], 'op-hook[''leftIdSymbol.Sort,''left-id.Sort,''Term.Sort,''Attr.Sort], 'op-hook[''rightIdSymbol.Sort,''right-id.Sort,''Term.Sort,''Attr.Sort], 'op-hook[''stratSymbol.Sort,''strat.Sort,''NeNatList.Sort,''Attr.Sort], 'op-hook[''memoSymbol.Sort,''memo.Sort,'nil.TypeList,''Attr.Sort],'op-hook[ ''precSymbol.Sort,''prec.Sort,''Nat.Sort,''Attr.Sort],'op-hook[ ''gatherSymbol.Sort,''gather.Sort,''QidList.Sort,''Attr.Sort],'op-hook[ ''formatSymbol.Sort,''format.Sort,''QidList.Sort,''Attr.Sort],'op-hook[ ''ctorSymbol.Sort,''ctor.Sort,'nil.TypeList,''Attr.Sort],'op-hook[ ''frozenSymbol.Sort,''frozen.Sort,''NeNatList.Sort,''Attr.Sort],'op-hook[ ''polySymbol.Sort,''poly.Sort,''NeNatList.Sort,''Attr.Sort],'op-hook[ ''configSymbol.Sort,''config.Sort,'nil.TypeList,''Attr.Sort],'op-hook[ ''objectSymbol.Sort,''object.Sort,'nil.TypeList,''Attr.Sort],'op-hook[ ''msgSymbol.Sort,''msg.Sort,'nil.TypeList,''Attr.Sort],'op-hook[ ''specialSymbol.Sort,''special.Sort,''NeHookList.Sort,''Attr.Sort], 'op-hook[''labelSymbol.Sort,''label.Sort,''Qid.Sort,''Attr.Sort],'op-hook[ ''metadataSymbol.Sort,''metadata.Sort,''String.Sort,''Attr.Sort],'op-hook[ ''owiseSymbol.Sort,''owise.Sort,'nil.TypeList,''Attr.Sort],'op-hook[ ''variantAttrSymbol.Sort,''variant.Sort,'nil.TypeList,''Attr.Sort], 'op-hook[''narrowingSymbol.Sort,''narrowing.Sort,'nil.TypeList, ''Attr.Sort],'op-hook[''nonexecSymbol.Sort,''nonexec.Sort,'nil.TypeList, ''Attr.Sort],'op-hook[''printSymbol.Sort,''print.Sort,''QidList.Sort, ''Attr.Sort],'op-hook[''emptyAttrSetSymbol.Sort,''none.Sort,'nil.TypeList, ''AttrSet.Sort],'op-hook[''attrSetSymbol.Sort,''__.Sort,'__[''AttrSet.Sort, ''AttrSet.Sort],''AttrSet.Sort],'op-hook[''opDeclSymbol.Sort, ''op_:_->_`[_`]..Qid,'__[''Qid.Sort,''TypeList.Sort,''Type.Sort, ''AttrSet.Sort],''OpDecl.Sort],'op-hook[''opDeclSetSymbol.Sort,''__.Sort, '__[''OpDeclSet.Sort,''OpDeclSet.Sort],''OpDeclSet.Sort],'op-hook[ ''emptyOpDeclSetSymbol.Sort,''none.Sort,'nil.TypeList,''OpDeclSet.Sort], 'op-hook[''mbSymbol.Sort,''mb_:_`[_`]..Qid,'__[''Term.Sort,''Sort.Sort, ''AttrSet.Sort],''MembAx.Sort],'op-hook[''cmbSymbol.Sort, ''cmb_:_if_`[_`]..Qid,'__[''Term.Sort,''Sort.Sort,''EqCondition.Sort, ''AttrSet.Sort],''MembAx.Sort],'op-hook[''emptyMembAxSetSymbol.Sort, ''none.Sort,'nil.TypeList,''MembAxSet.Sort],'op-hook[ ''membAxSetSymbol.Sort,''__.Sort,'__[''MembAxSet.Sort,''MembAxSet.Sort], ''MembAxSet.Sort],'op-hook[''eqSymbol.Sort,''eq_=_`[_`]..Qid,'__[ ''Term.Sort,''Term.Sort,''AttrSet.Sort],''Equation.Sort],'op-hook[ ''ceqSymbol.Sort,''ceq_=_if_`[_`]..Qid,'__[''Term.Sort,''Term.Sort, ''EqCondition.Sort,''AttrSet.Sort],''Equation.Sort],'op-hook[ ''emptyEquationSetSymbol.Sort,''none.Sort,'nil.TypeList, ''EquationSet.Sort],'op-hook[''equationSetSymbol.Sort,''__.Sort,'__[ ''EquationSet.Sort,''EquationSet.Sort],''EquationSet.Sort],'op-hook[ ''rlSymbol.Sort,''rl_=>_`[_`]..Qid,'__[''Term.Sort,''Term.Sort, ''AttrSet.Sort],''Rule.Sort],'op-hook[''crlSymbol.Sort, ''crl_=>_if_`[_`]..Qid,'__[''Term.Sort,''Term.Sort,''Condition.Sort, ''AttrSet.Sort],''Rule.Sort],'op-hook[''emptyRuleSetSymbol.Sort, ''none.Sort,'nil.TypeList,''RuleSet.Sort],'op-hook[''ruleSetSymbol.Sort, ''__.Sort,'__[''RuleSet.Sort,''RuleSet.Sort],''RuleSet.Sort],'op-hook[ ''stratDeclSymbol.Sort,''strat_:_@_`[_`]..Qid,'__[''Qid.Sort, ''TypeList.Sort,''Type.Sort,''AttrSet.Sort],''StratDecl.Sort],'op-hook[ ''emptyStratDeclSetSymbol.Sort,''none.Sort,'nil.TypeList, ''StratDeclSet.Sort],'op-hook[''stratDeclSetSymbol.Sort,''__.Sort,'__[ ''StratDeclSet.Sort,''StratDeclSet.Sort],''StratDeclSet.Sort],'op-hook[ ''sdSymbol.Sort,''sd_:=_`[_`]..Qid,'__[''CallStrategy.Sort,''Strategy.Sort, ''AttrSet.Sort],''StratDefinition.Sort],'op-hook[''csdSymbol.Sort, ''csd_:=_if_`[_`]..Qid,'__[''CallStrategy.Sort,''Strategy.Sort, ''EqCondition.Sort,''AttrSet.Sort],''StratDefinition.Sort],'op-hook[ ''emptyStratDefSetSymbol.Sort,''none.Sort,'nil.TypeList, ''StratDefSet.Sort],'op-hook[''stratDefSetSymbol.Sort,''__.Sort,'__[ ''StratDefSet.Sort,''StratDefSet.Sort],''StratDefSet.Sort],'op-hook[ ''fmodSymbol.Sort,''fmod_is_sorts_.____endfm.Constant,'__[''Header.Sort, ''ImportList.Sort,''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort, ''MembAxSet.Sort,''EquationSet.Sort],''FModule.Sort],'op-hook[ ''fthSymbol.Sort,''fth_is_sorts_.____endfth.Constant,'__[''Qid.Sort, ''ImportList.Sort,''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort, ''MembAxSet.Sort,''EquationSet.Sort],''FTheory.Sort],'op-hook[ ''modSymbol.Sort,''mod_is_sorts_._____endm.Constant,'__[''Header.Sort, ''ImportList.Sort,''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort, ''MembAxSet.Sort,''EquationSet.Sort,''RuleSet.Sort],''SModule.Sort], 'op-hook[''thSymbol.Sort,''th_is_sorts_._____endth.Constant,'__[''Qid.Sort, ''ImportList.Sort,''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort, ''MembAxSet.Sort,''EquationSet.Sort,''RuleSet.Sort],''STheory.Sort], 'op-hook[''smodSymbol.Sort,''smod_is_sorts_._______endsm.Constant,'__[ ''Header.Sort,''ImportList.Sort,''SortSet.Sort,''SubsortDeclSet.Sort, ''OpDeclSet.Sort,''MembAxSet.Sort,''EquationSet.Sort,''RuleSet.Sort, ''StratDeclSet.Sort,''StratDefSet.Sort],''StratModule.Sort],'op-hook[ ''sthSymbol.Sort,''sth_is_sorts_._______endsth.Constant,'__[''Header.Sort, ''ImportList.Sort,''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort, ''MembAxSet.Sort,''EquationSet.Sort,''RuleSet.Sort,''StratDeclSet.Sort, ''StratDefSet.Sort],''StratTheory.Sort],'op-hook[''sortMappingSymbol.Sort, ''sort_to_..Qid,'__[''Sort.Sort,''Sort.Sort],''SortMapping.Sort],'op-hook[ ''emptySortMappingSetSymbol.Sort,''none.Sort,'nil.TypeList, ''SortMappingSet.Sort],'op-hook[''sortMappingSetSymbol.Sort,''__.Sort,'__[ ''SortMappingSet.Sort,''SortMappingSet.Sort],''SortMappingSet.Sort], 'op-hook[''opMappingSymbol.Sort,''op_to_..Qid,'__[''Qid.Sort,''Qid.Sort], ''OpMapping.Sort],'op-hook[''opSpecificMappingSymbol.Sort, ''op_:_->_to_..Qid,'__[''Qid.Sort,''TypeList.Sort,''Type.Sort,''Qid.Sort], ''OpMapping.Sort],'op-hook[''opTermMappingSymbol.Sort,''op_to`term_..Qid, '__[''Term.Sort,''Term.Sort],''OpMapping.Sort],'op-hook[ ''emptyOpMappingSetSymbol.Sort,''none.Sort,'nil.TypeList, ''OpMappingSet.Sort],'op-hook[''opMappingSetSymbol.Sort,''__.Sort,'__[ ''OpMappingSet.Sort,''OpMappingSet.Sort],''OpMappingSet.Sort],'op-hook[ ''stratMappingSymbol.Sort,''strat_to_..Qid,'__[''Qid.Sort,''Qid.Sort], ''StratMapping.Sort],'op-hook[''stratSpecificMappingSymbol.Sort, ''strat_:_@_to_..Qid,'__[''Qid.Sort,''TypeList.Sort,''Type.Sort, ''Qid.Sort],''StratMapping.Sort],'op-hook[''stratExprMappingSymbol.Sort, ''strat_to`expr_..Qid,'__[''CallStrategy.Sort,''Strategy.Sort], ''StratMapping.Sort],'op-hook[''emptyStratMappingSetSymbol.Sort, ''none.Sort,'nil.TypeList,''StratMappingSet.Sort],'op-hook[ ''stratMappingSetSymbol.Sort,''__.Sort,'__[''StratMappingSet.Sort, ''StratMappingSet.Sort],''StratMappingSet.Sort],'op-hook[''viewSymbol.Sort, ''view_from_to_is___endv.Sort,'__[''Header.Sort,''ModuleExpression.Sort, ''ModuleExpression.Sort,''SortMappingSet.Sort,''OpMappingSet.Sort, ''StratMappingSet.Sort],''View.Sort],'op-hook[''anyTypeSymbol.Sort, ''anyType.Sort,'nil.TypeList,''Type?.Sort],'op-hook[ ''unificandPairSymbol.Sort,''_=?_.Sort,'__[''Term.Sort,''Term.Sort], ''UnificandPair.Sort],'op-hook[''unificationConjunctionSymbol.Sort, ''_/\_.Sort,'__[''UnificationProblem.Sort,''UnificationProblem.Sort], ''UnificationProblem.Sort],'op-hook[''patternSubjectPairSymbol.Sort, ''_<=?_.Sort,'__[''Term.Sort,''Term.Sort],''PatternSubjectPair.Sort], 'op-hook[''matchingConjunctionSymbol.Sort,''_/\_.Sort,'__[ ''MatchingProblem.Sort,''MatchingProblem.Sort],''MatchingProblem.Sort], 'op-hook[''resultPairSymbol.Sort,''`{_`,_`}.Qid,'__[''Term.Sort, ''Type.Sort],''ResultPair.Sort],'op-hook[''resultTripleSymbol.Sort, ''`{_`,_`,_`}.Qid,'__[''Term.Sort,''Type.Sort,''Substitution.Sort], ''ResultTriple.Sort],'op-hook[''result4TupleSymbol.Sort, ''`{_`,_`,_`,_`}.Qid,'__[''Term.Sort,''Type.Sort,''Substitution.Sort, ''Context.Sort],''Result4Tuple.Sort],'op-hook[''matchPairSymbol.Sort, ''`{_`,_`}.Qid,'__[''Substitution.Sort,''Context.Sort],''MatchPair.Sort], 'op-hook[''unificationTripleSymbol.Sort,''`{_`,_`,_`}.Qid,'__[ ''Substitution.Sort,''Substitution.Sort,''Qid.Sort], ''UnificationTriple.Sort],'op-hook[''variantSymbol.Sort, ''`{_`,_`,_`,_`,_`}.Qid,'__[''Term.Sort,''Substitution.Sort,''Qid.Sort, ''Parent.Sort,''Bool.Sort],''Variant.Sort],'op-hook[ ''narrowingApplyResultSymbol.Sort,''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'__[ ''Term.Sort,''Type.Sort,''Context.Sort,''Qid.Sort,''Substitution.Sort, ''Substitution.Sort,''Qid.Sort],''NarrowingApplyResult.Sort],'op-hook[ ''narrowingSearchResultSymbol.Sort,''`{_`,_`,_`,_`,_`,_`}.Qid,'__[ ''Term.Sort,''Type.Sort,''Substitution.Sort,''Qid.Sort,''Substitution.Sort, ''Qid.Sort],''NarrowingSearchResult.Sort],'op-hook[''traceStepSymbol.Sort, ''`{_`,_`,_`}.Qid,'__[''Term.Sort,''Type.Sort,''Rule.Sort], ''TraceStep.Sort],'op-hook[''nilTraceSymbol.Sort,''nil.Sort,'nil.TypeList, ''Trace.Sort],'op-hook[''traceSymbol.Sort,''__.Sort,'__[''Trace.Sort, ''Trace.Sort],''Trace.Sort],'op-hook[''narrowingStepSymbol.Sort, ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'__[''Context.Sort,''Qid.Sort, ''Substitution.Sort,''Qid.Sort,''Term.Sort,''Type.Sort, ''Substitution.Sort],''NarrowingStep.Sort],'op-hook[ ''nilNarrowingTraceSymbol.Sort,''nil.Sort,'nil.TypeList, ''NarrowingTrace.Sort],'op-hook[''narrowingTraceSymbol.Sort,''__.Sort,'__[ ''NarrowingTrace.Sort,''NarrowingTrace.Sort],''NarrowingTrace.Sort], 'op-hook[''narrowingSearchPathResultSymbol.Sort,''`{_`,_`,_`,_`,_`,_`}.Qid, '__[''Term.Sort,''Type.Sort,''Substitution.Sort,''NarrowingTrace.Sort, ''Substitution.Sort,''Qid.Sort],''NarrowingSearchPathResult.Sort],'op-hook[ ''smtResultSymbol.Sort,''`{_`,_`,_`,_`}.Qid,'__[''Term.Sort, ''Substitution.Sort,''Term.Sort,''Nat.Sort],''SmtResult.Sort],'op-hook[ ''noParseSymbol.Sort,''noParse.Sort,''Nat.Sort,''ResultPair?.Sort], 'op-hook[''ambiguitySymbol.Sort,''ambiguity.Sort,'__[''ResultPair.Sort, ''ResultPair.Sort],''ResultPair?.Sort],'op-hook[''failure2Symbol.Sort, ''failure.Sort,'nil.TypeList,''ResultPair?.Sort],'op-hook[ ''failure3Symbol.Sort,''failure.Sort,'nil.TypeList,''ResultTriple?.Sort], 'op-hook[''failureIncomplete3Symbol.Sort,''failureIncomplete.Sort, 'nil.TypeList,''ResultTriple?.Sort],'op-hook[''failure4Symbol.Sort, ''failure.Sort,'nil.TypeList,''Result4Tuple?.Sort],'op-hook[ ''noUnifierPairSymbol.Sort,''noUnifier.Sort,'nil.TypeList, ''UnificationPair?.Sort],'op-hook[''noUnifierTripleSymbol.Sort, ''noUnifier.Sort,'nil.TypeList,''UnificationTriple?.Sort],'op-hook[ ''noUnifierIncompletePairSymbol.Sort,''noUnifierIncomplete.Sort, 'nil.TypeList,''UnificationPair?.Sort],'op-hook[ ''noUnifierIncompleteTripleSymbol.Sort,''noUnifierIncomplete.Sort, 'nil.TypeList,''UnificationTriple?.Sort],'op-hook[''noVariantSymbol.Sort, ''noVariant.Sort,'nil.TypeList,''Variant?.Sort],'op-hook[ ''noVariantIncompleteSymbol.Sort,''noVariantIncomplete.Sort,'nil.TypeList, ''Variant?.Sort],'op-hook[''narrowingApplyFailureSymbol.Sort, ''failure.Sort,'nil.TypeList,''NarrowingApplyResult?.Sort],'op-hook[ ''narrowingApplyFailureIncompleteSymbol.Sort,''failureIncomplete.Sort, 'nil.TypeList,''NarrowingApplyResult?.Sort],'op-hook[ ''narrowingSearchFailureSymbol.Sort,''failure.Sort,'nil.TypeList, ''NarrowingSearchResult?.Sort],'op-hook[ ''narrowingSearchFailureIncompleteSymbol.Sort,''failureIncomplete.Sort, 'nil.TypeList,''NarrowingSearchResult?.Sort],'op-hook[ ''narrowingSearchPathFailureSymbol.Sort,''failure.Sort,'nil.TypeList, ''NarrowingSearchPathResult?.Sort],'op-hook[ ''narrowingSearchPathFailureIncompleteSymbol.Sort,''failureIncomplete.Sort, 'nil.TypeList,''NarrowingSearchPathResult?.Sort],'op-hook[ ''noMatchSubstSymbol.Sort,''noMatch.Sort,'nil.TypeList, ''Substitution?.Sort],'op-hook[''noMatchIncompleteSubstSymbol.Sort, ''noMatchIncomplete.Sort,'nil.TypeList,''Substitution?.Sort],'op-hook[ ''noMatchPairSymbol.Sort,''noMatch.Sort,'nil.TypeList,''MatchPair?.Sort], 'op-hook[''failureTraceSymbol.Sort,''failure.Sort,'nil.TypeList, ''Trace?.Sort],'op-hook[''smtFailureSymbol.Sort,''failure.Sort, 'nil.TypeList,''SmtResult?.Sort],'op-hook[''noStratParseSymbol.Sort, ''noStratParse.Sort,''Nat.Sort,''Strategy?.Sort],'op-hook[ ''stratAmbiguitySymbol.Sort,''ambiguity.Sort,'__[''Strategy.Sort, ''Strategy.Sort],''Strategy?.Sort],'op-hook[''mixfixSymbol.Sort, ''mixfix.Sort,'nil.TypeList,''PrintOption.Sort],'op-hook[ ''withParensSymbol.Sort,''with-parens.Sort,'nil.TypeList, ''PrintOption.Sort],'op-hook[''flatSymbol.Sort,''flat.Sort,'nil.TypeList, ''PrintOption.Sort],'op-hook[''formatPrintOptionSymbol.Sort,''format.Sort, 'nil.TypeList,''PrintOption.Sort],'op-hook[''numberSymbol.Sort, ''number.Sort,'nil.TypeList,''PrintOption.Sort],'op-hook[''ratSymbol.Sort, ''rat.Sort,'nil.TypeList,''PrintOption.Sort],'op-hook[ ''emptyPrintOptionSetSymbol.Sort,''none.Sort,'nil.TypeList, ''PrintOptionSet.Sort],'op-hook[''printOptionSetSymbol.Sort,''__.Sort,'__[ ''PrintOptionSet.Sort,''PrintOptionSet.Sort],''PrintOptionSet.Sort], 'op-hook[''delaySymbol.Sort,''delay.Sort,'nil.TypeList, ''VariantOption.Sort],'op-hook[''filterSymbol.Sort,''filter.Sort, 'nil.TypeList,''VariantOption.Sort],'op-hook[ ''emptyVariantOptionSetSymbol.Sort,''none.Sort,'nil.TypeList, ''VariantOptionSet.Sort],'op-hook[''variantOptionSetSymbol.Sort,''__.Sort, '__[''VariantOptionSet.Sort,''VariantOptionSet.Sort], ''VariantOptionSet.Sort],'op-hook[''breadthFirstSymbol.Sort, ''breadthFirst.Sort,'nil.TypeList,''SrewriteOption.Sort],'op-hook[ ''depthFirstSymbol.Sort,''depthFirst.Sort,'nil.TypeList, ''SrewriteOption.Sort],'op-hook[''legacyUnificationPairSymbol.Sort, ''`{_`,_`}.Qid,'__[''Substitution.Sort,''Nat.Sort],''UnificationPair.Sort], 'op-hook[''legacyUnificationTripleSymbol.Sort,''`{_`,_`,_`}.Qid,'__[ ''Substitution.Sort,''Substitution.Sort,''Nat.Sort], ''UnificationTriple.Sort],'op-hook[''legacyVariantSymbol.Sort, ''`{_`,_`,_`,_`,_`}.Qid,'__[''Term.Sort,''Substitution.Sort,''Nat.Sort, ''Parent.Sort,''Bool.Sort],''Variant.Sort],'term-hook[''trueTerm.Sort, ''true.Bool.Constant],'term-hook[''falseTerm.Sort, ''false.Bool.Constant]]]],'op_:_->_`[_`].[''metaRewrite.Sort,'__[ ''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[ResultPair?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaRewrite.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaSearch.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Condition`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[ResultTriple?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaSearch.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaSearchPath.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Condition`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[Trace?`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''metaSearchPath.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaSmtSearch.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Condition`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[SmtResult?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaSmtSearch.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaSrewrite.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[StrategyList`,Strategy?`].Kind,''`[SrewriteOption`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[ResultPair?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaSrewrite.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaUnify.Sort,'__[''`[Module`].Kind,''`[UnificationProblem`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''legacyMetaUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaUnify.Sort,'__[''`[Module`].Kind,''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''metaUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaVariantDisjointUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationTriple?`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''legacyMetaVariantDisjointUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaVariantDisjointUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationTriple?`].Kind,'none.AttrSet],'op_:_->_`[_`].[ ''metaVariantDisjointUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[VariantOptionSet`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationTriple?`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaVariantDisjointUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaVariantMatch.Sort,'__[''`[Module`].Kind,''`[MatchingProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[VariantOptionSet`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[Substitution?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaVariantMatch.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaVariantUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''legacyMetaVariantUnify.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaVariantUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`].Kind, 'none.AttrSet],'op_:_->_`[_`].[''metaVariantUnify.Sort,'__[ ''`[Module`].Kind,''`[UnificationProblem`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[VariantOptionSet`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''metaVariantUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaXapply.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Substitution?`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[Result4Tuple?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaXapply.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaXmatch.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Condition`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''metaXmatch.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metadata.Sort,''String.Sort,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''min.Sort,'__[''Nat.Sort,''Nat.Sort],''Nat.Sort,'__['assoc.Attr, 'comm.Attr,'special['__['id-hook[''ACU_NumberOpSymbol.Sort,''min.Sort], 'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort,''NzNat.Sort]]]]], 'op_:_->_`[_`].[''min.Sort,'__[''NzNat.Sort,''NzNat.Sort],''NzNat.Sort,'__[ 'assoc.Attr,'comm.Attr,'special['__['id-hook[''ACU_NumberOpSymbol.Sort, ''min.Sort],'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort, ''NzNat.Sort]]]]],'op_:_->_`[_`].[''minimalSorts.Sort,'__[ ''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__[ 'id-hook[''MetaLevelOpSymbol.Sort,''metaMinimalSorts.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''mixfix.Sort,'nil.TypeList,''PrintOption.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''modExp.Sort,'__[''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[FindResult`,NatList`,Bound`,Parent`].Kind,'special['__['id-hook[ ''NumberOpSymbol.Sort,''modExp.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort]]]],'op_:_->_`[_`].[ ''mod_is_sorts_._____endm.Constant,'__[''Header.Sort,''ImportList.Sort, ''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort,''MembAxSet.Sort, ''EquationSet.Sort,''RuleSet.Sort],''SModule.Sort,'__['ctor.Attr,'gather[ '__[''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort, ''&.Sort]],'format['__[''d.Sort,''d.Sort,''s.Sort,''n++i.Sort,''ni.Sort, ''d.Sort,''d.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort, ''n--i.Sort,''d.Sort]]]],'op_:_->_`[_`].[''msg.Sort,'nil.TypeList, ''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''narrowing.Sort,'nil.TypeList, ''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''nil.Sort,'nil.TypeList, ''EqCondition.Sort,'ctor.Attr],'op_:_->_`[_`].[''nil.Sort,'nil.TypeList, ''HookList.Sort,'ctor.Attr],'op_:_->_`[_`].[''nil.Sort,'nil.TypeList, ''ImportList.Sort,'ctor.Attr],'op_:_->_`[_`].[''nil.Sort,'nil.TypeList, ''NarrowingTrace.Sort,'ctor.Attr],'op_:_->_`[_`].[''nil.Sort,'nil.TypeList, ''NatList.Sort,'ctor.Attr],'op_:_->_`[_`].[''nil.Sort,'nil.TypeList, ''ParameterDeclList.Sort,'ctor.Attr],'op_:_->_`[_`].[''nil.Sort, 'nil.TypeList,''QidList.Sort,'ctor.Attr],'op_:_->_`[_`].[''nil.Sort, 'nil.TypeList,''Trace.Sort,'ctor.Attr],'op_:_->_`[_`].[''nil.Sort, 'nil.TypeList,''TypeList.Sort,'ctor.Attr],'op_:_->_`[_`].[''noMatch.Sort, 'nil.TypeList,''MatchPair?.Sort,'ctor.Attr],'op_:_->_`[_`].[''noMatch.Sort, 'nil.TypeList,''Substitution?.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''noMatchIncomplete.Sort,'nil.TypeList,''Substitution?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''noParse.Sort,''Nat.Sort,''ResultPair?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''noStratParse.Sort,''Nat.Sort,''Strategy?.Sort, 'ctor.Attr],'op_:_->_`[_`].[''noUnifier.Sort,'nil.TypeList, ''UnificationPair?.Sort,'ctor.Attr],'op_:_->_`[_`].[''noUnifier.Sort, 'nil.TypeList,''UnificationTriple?.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''noUnifierIncomplete.Sort,'nil.TypeList,''UnificationPair?.Sort, 'ctor.Attr],'op_:_->_`[_`].[''noUnifierIncomplete.Sort,'nil.TypeList, ''UnificationTriple?.Sort,'ctor.Attr],'op_:_->_`[_`].[''noVariant.Sort, 'nil.TypeList,''Variant?.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''noVariantIncomplete.Sort,'nil.TypeList,''Variant?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''AttrSet.Sort,'ctor.Attr], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''EmptyQidSet.Sort,'ctor.Attr], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''EquationSet.Sort,'ctor.Attr], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''MembAxSet.Sort,'ctor.Attr], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''OpDeclSet.Sort,'ctor.Attr], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''OpMappingSet.Sort,'ctor.Attr], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''Parent.Sort,'none.AttrSet], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''PrintOptionSet.Sort, 'ctor.Attr],'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''QidSet.Sort, 'ctor.Attr],'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''RuleSet.Sort, 'ctor.Attr],'op_:_->_`[_`].[''none.Sort,'nil.TypeList, ''SortMappingSet.Sort,'ctor.Attr],'op_:_->_`[_`].[''none.Sort, 'nil.TypeList,''StratDeclSet.Sort,'ctor.Attr],'op_:_->_`[_`].[''none.Sort, 'nil.TypeList,''StratDefSet.Sort,'ctor.Attr],'op_:_->_`[_`].[''none.Sort, 'nil.TypeList,''StratMappingSet.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''none.Sort,'nil.TypeList,''SubsortDeclSet.Sort,'ctor.Attr], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''Substitution.Sort,'ctor.Attr], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''VariantOptionSet.Sort, 'ctor.Attr],'op_:_->_`[_`].[''nonexec.Sort,'nil.TypeList,''Attr.Sort, 'ctor.Attr],'op_:_->_`[_`].[''not.Sort,''Strategy.Sort,''Strategy.Sort, 'ctor.Attr],'op_:_->_`[_`].[''notFound.Sort,'nil.TypeList, ''FindResult.Sort,'ctor.Attr],'op_:_->_`[_`].[''not_.Sort,''Bool.Sort, ''Bool.Sort,'prec['s_^53['0.Zero]]],'op_:_->_`[_`].[''number.Sort, 'nil.TypeList,''PrintOption.Sort,'ctor.Attr],'op_:_->_`[_`].[''object.Sort, 'nil.TypeList,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''occurs.Sort,'__[ ''Nat.Sort,''NatList.Sort],''Bool.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''occurs.Sort,'__[''Qid.Sort,''QidList.Sort],''Bool.Sort,'none.AttrSet], 'op_:_->_`[_`].[''one.Sort,''Strategy.Sort,''Strategy.Sort,'ctor.Attr], 'op_:_->_`[_`].[''op-hook.Sort,'__[''Qid.Sort,''Qid.Sort,''QidList.Sort, ''Qid.Sort],''Hook.Sort,'__['ctor.Attr,'format['__[''nssss.Sort, ''d.Sort]]]],'op_:_->_`[_`].[''op_:_->_`[_`]..Qid,'__[''Qid.Sort, ''TypeList.Sort,''Type.Sort,''AttrSet.Sort],''OpDecl.Sort,'__['ctor.Attr, 'format['__[''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''s.Sort, ''d.Sort,''d.Sort,''s.Sort,''d.Sort]]]],'op_:_->_`[_`].[''op_:_->_to_..Qid, '__[''Qid.Sort,''TypeList.Sort,''Type.Sort,''Qid.Sort],''OpMapping.Sort, 'ctor.Attr],'op_:_->_`[_`].[''op_:_->_to_`[_`].Qid,'__[''Qid.Sort, ''TypeList.Sort,''Type.Sort,''Qid.Sort,''AttrSet.Sort],''Renaming.Sort,'__[ 'ctor.Attr,'format['__[''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort,''d.Sort,''d.Sort]]]], 'op_:_->_`[_`].[''op_to_..Qid,'__[''Qid.Sort,''Qid.Sort],''OpMapping.Sort, 'ctor.Attr],'op_:_->_`[_`].[''op_to_`[_`].Qid,'__[''Qid.Sort,''Qid.Sort, ''AttrSet.Sort],''Renaming.Sort,'__['ctor.Attr,'format['__[''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort,''d.Sort,''d.Sort]]]], 'op_:_->_`[_`].[''op_to`term_..Qid,'__[''Term.Sort,''Term.Sort], ''OpMapping.Sort,'ctor.Attr],'op_:_->_`[_`].[''owise.Sort,'nil.TypeList, ''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''poly.Sort,''NeNatList.Sort, ''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''prec.Sort,''Nat.Sort,''Attr.Sort, 'ctor.Attr],'op_:_->_`[_`].[''print.Sort,''QidList.Sort,''Attr.Sort, 'ctor.Attr],'op_:_->_`[_`].[''protecting_..Qid,''ModuleExpression.Sort, ''Import.Sort,'ctor.Attr],'op_:_->_`[_`].[''qid.Sort,''`[String`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[''QuotedIdentifierOpSymbol.Sort, ''qid.Sort],'op-hook[''quotedIdentifierSymbol.Sort,''.Sort, 'nil.TypeList,''Qid.Sort],'op-hook[''stringSymbol.Sort,''.Sort, 'nil.TypeList,''Char.Sort]]]],'op_:_->_`[_`].[''rat.Sort,'nil.TypeList, ''PrintOption.Sort,'ctor.Attr],'op_:_->_`[_`].[''reverse.Sort, ''NatList.Sort,''NatList.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''reverse.Sort,''NeNatList.Sort,''NeNatList.Sort,'none.AttrSet], 'op_:_->_`[_`].[''reverse.Sort,''NeQidList.Sort,''NeQidList.Sort, 'none.AttrSet],'op_:_->_`[_`].[''reverse.Sort,''QidList.Sort, ''QidList.Sort,'none.AttrSet],'op_:_->_`[_`].[''rfind.Sort,'__[ ''String.Sort,''String.Sort,''Nat.Sort],''FindResult.Sort,'special['__[ 'id-hook[''StringOpSymbol.Sort,''rfind.Sort],'op-hook[''stringSymbol.Sort, ''.Sort,'nil.TypeList,''Char.Sort],'op-hook[''succSymbol.Sort, ''s_.Sort,''Nat.Sort,''NzNat.Sort],'term-hook[''notFoundTerm.Sort, ''notFound.FindResult.Constant]]]],'op_:_->_`[_`].[''right-id.Sort, ''Term.Sort,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''rl_=>_`[_`]..Qid,'__[ ''Term.Sort,''Term.Sort,''AttrSet.Sort],''Rule.Sort,'__['ctor.Attr,'format[ '__[''d.Sort,''d.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort,''d.Sort, ''s.Sort,''d.Sort]]]],'op_:_->_`[_`].[''s_.Sort,''Nat.Sort,''NzNat.Sort, '__['iter.Attr,'ctor.Attr,'special['__['id-hook[''SuccSymbol.Sort, 'nil.TypeList],'term-hook[''zeroTerm.Sort,''0.Zero.Constant]]]]], 'op_:_->_`[_`].[''sameKind.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[Bool`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaSameKind.Sort],'op-hook[''shareWith.Sort, ''metaReduce.Sort,'__[''Module.Sort,''ModuleExpression.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''sd.Sort,'__[''Nat.Sort, ''Nat.Sort],''Nat.Sort,'__['comm.Attr,'special['__['id-hook[ ''CUI_NumberOpSymbol.Sort,''sd.Sort],'op-hook[''succSymbol.Sort,''s_.Sort, ''Nat.Sort,''NzNat.Sort]]]]],'op_:_->_`[_`].[''sd_:=_`[_`]..Qid,'__[ ''CallStrategy.Sort,''Strategy.Sort,''AttrSet.Sort],''StratDefinition.Sort, '__['ctor.Attr,'format['__[''d.Sort,''d.Sort,''d.Sort,''d.Sort,''s.Sort, ''d.Sort,''d.Sort,''s.Sort,''d.Sort]]]],'op_:_->_`[_`].[''size.Sort, ''NatList.Sort,''Nat.Sort,'none.AttrSet],'op_:_->_`[_`].[''size.Sort, ''NeNatList.Sort,''NzNat.Sort,'none.AttrSet],'op_:_->_`[_`].[''size.Sort, ''NeQidList.Sort,''NzNat.Sort,'none.AttrSet],'op_:_->_`[_`].[''size.Sort, ''QidList.Sort,''Nat.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''smod_is_sorts_._______endsm.Constant,'__[''Header.Sort,''ImportList.Sort, ''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort,''MembAxSet.Sort, ''EquationSet.Sort,''RuleSet.Sort,''StratDeclSet.Sort,''StratDefSet.Sort], ''StratModule.Sort,'__['ctor.Attr,'gather['__[''&.Sort,''&.Sort,''&.Sort, ''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort]],'format[ '__[''d.Sort,''d.Sort,''s.Sort,''n++i.Sort,''ni.Sort,''d.Sort,''d.Sort, ''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort, ''n--i.Sort,''d.Sort]]]],'op_:_->_`[_`].[''sortLeq.Sort,'__[ ''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind],''`[Bool`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaSortLeq.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''sort_to_.Sort,'__[''Qid.Sort,''Qid.Sort],''Renaming.Sort,'ctor.Attr], 'op_:_->_`[_`].[''sort_to_..Qid,'__[''Sort.Sort,''Sort.Sort], ''SortMapping.Sort,'ctor.Attr],'op_:_->_`[_`].[''special.Sort, ''NeHookList.Sort,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''sth_is_sorts_._______endsth.Constant,'__[''Header.Sort,''ImportList.Sort, ''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort,''MembAxSet.Sort, ''EquationSet.Sort,''RuleSet.Sort,''StratDeclSet.Sort,''StratDefSet.Sort], ''StratTheory.Sort,'__['ctor.Attr,'gather['__[''&.Sort,''&.Sort,''&.Sort, ''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort]],'format[ '__[''d.Sort,''d.Sort,''s.Sort,''n++i.Sort,''ni.Sort,''d.Sort,''d.Sort, ''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort, ''n--i.Sort,''d.Sort]]]],'op_:_->_`[_`].[''strat.Sort,''NeNatList.Sort, ''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[''strat_:_@_`[_`]..Qid,'__[ ''Qid.Sort,''TypeList.Sort,''Type.Sort,''AttrSet.Sort],''StratDecl.Sort, '__['ctor.Attr,'format['__[''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort, ''d.Sort,''s.Sort,''d.Sort,''d.Sort,''s.Sort,''d.Sort]]]],'op_:_->_`[_`].[ ''strat_:_@_to_.Variable,'__[''Qid.Sort,''TypeList.Sort,''Type.Sort, ''Qid.Sort],''Renaming.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''strat_:_@_to_..Qid,'__[''Qid.Sort,''TypeList.Sort,''Type.Sort, ''Qid.Sort],''StratMapping.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''strat_to_.Sort,'__[''Qid.Sort,''Qid.Sort],''Renaming.Sort,'ctor.Attr], 'op_:_->_`[_`].[''strat_to_..Qid,'__[''Qid.Sort,''Qid.Sort], ''StratMapping.Sort,'ctor.Attr],'op_:_->_`[_`].[''strat_to`expr_..Qid,'__[ ''CallStrategy.Sort,''Strategy.Sort],''StratMapping.Sort,'ctor.Attr], 'op_:_->_`[_`].[''string.Sort,''Qid.Sort,''String.Sort,'special['__[ 'id-hook[''QuotedIdentifierOpSymbol.Sort,''string.Sort],'op-hook[ ''quotedIdentifierSymbol.Sort,''.Sort,'nil.TypeList,''Qid.Sort], 'op-hook[''stringSymbol.Sort,''.Sort,'nil.TypeList, ''Char.Sort]]]],'op_:_->_`[_`].[''subsort_<_..Qid,'__[''Sort.Sort, ''Sort.Sort],''SubsortDecl.Sort,'ctor.Attr],'op_:_->_`[_`].[''substr.Sort, '__[''String.Sort,''Nat.Sort,''Nat.Sort],''String.Sort,'special['__[ 'id-hook[''StringOpSymbol.Sort,''substr.Sort],'op-hook[''stringSymbol.Sort, ''.Sort,'nil.TypeList,''Char.Sort],'op-hook[''succSymbol.Sort, ''s_.Sort,''Nat.Sort,''NzNat.Sort]]]],'op_:_->_`[_`].[''tail.Sort, ''NeNatList.Sort,''NatList.Sort,'none.AttrSet],'op_:_->_`[_`].[''tail.Sort, ''NeQidList.Sort,''QidList.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''term-hook.Sort,'__[''Qid.Sort,''Term.Sort],''Hook.Sort,'__['ctor.Attr, 'format['__[''nssss.Sort,''d.Sort]]]],'op_:_->_`[_`].[''test.Sort, ''Strategy.Sort,''Strategy.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''th_is_sorts_._____endth.Constant,'__[''Qid.Sort,''ImportList.Sort, ''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort,''MembAxSet.Sort, ''EquationSet.Sort,''RuleSet.Sort],''STheory.Sort,'__['ctor.Attr,'gather[ '__[''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort, ''&.Sort]],'format['__[''d.Sort,''d.Sort,''d.Sort,''n++i.Sort,''ni.Sort, ''d.Sort,''d.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort,''ni.Sort, ''n--i.Sort,''d.Sort]]]],'op_:_->_`[_`].[''top.Sort,''RuleApplication.Sort, ''Strategy.Sort,'ctor.Attr],'op_:_->_`[_`].[''true.Sort,'nil.TypeList, ''Bool.Sort,'__['ctor.Attr,'special['id-hook[''SystemTrue.Sort, 'nil.TypeList]]]],'op_:_->_`[_`].[''try.Sort,''Strategy.Sort, ''Strategy.Sort,'ctor.Attr],'op_:_->_`[_`].[''unbounded.Sort,'nil.TypeList, ''Bound.Sort,'ctor.Attr],'op_:_->_`[_`].[''union.Sort,'__[''NeQidSet.Sort, ''QidSet.Sort],''NeQidSet.Sort,'none.AttrSet],'op_:_->_`[_`].[''union.Sort, '__[''QidSet.Sort,''NeQidSet.Sort],''NeQidSet.Sort,'none.AttrSet], 'op_:_->_`[_`].[''union.Sort,'__[''QidSet.Sort,''QidSet.Sort], ''QidSet.Sort,'none.AttrSet],'op_:_->_`[_`].[''upEqs.Sort,'__[''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Bool`].Kind],''`[EquationSet`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaUpEqs.Sort],'op-hook[''shareWith.Sort, ''metaReduce.Sort,'__[''Module.Sort,''ModuleExpression.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''upImports.Sort,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[ImportList`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpImports.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''upMbs.Sort,'__[''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Bool`].Kind], ''`[MembAxSet`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpMbs.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''upModule.Sort,'__[''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Bool`].Kind], ''`[Module`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpModule.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''upOpDecls.Sort,'__[''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Bool`].Kind], ''`[OpDeclSet`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpOpDecls.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''upRls.Sort,'__[''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Bool`].Kind], ''`[RuleSet`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpRls.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''upSds.Sort,'__[''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Bool`].Kind], ''`[StratDefSet`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpSds.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''upSorts.Sort,'__[''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Bool`].Kind],''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpSorts.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''upStratDecls.Sort,'__[''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind, ''`[Bool`].Kind],''`[StratDeclSet`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaUpStratDecls.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''upSubsortDecls.Sort,'__[''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[Bool`].Kind], ''`[SubsortDeclSet`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpSubsortDecls.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''upTerm.Sort,''Universal.Sort,''Term.Sort,'__['poly['s_[ '0.Zero]],'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpTerm.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]]], 'op_:_->_`[_`].[''upView.Sort,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind,''`[View`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''metaUpView.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''upperCase.Sort,''String.Sort,''String.Sort,'special['__['id-hook[ ''StringOpSymbol.Sort,''upperCase.Sort],'op-hook[''stringSymbol.Sort, ''.Sort,'nil.TypeList,''Char.Sort]]]],'op_:_->_`[_`].[ ''variant.Sort,'nil.TypeList,''Attr.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''view_from_to_is___endv.Sort,'__[''Header.Sort,''ModuleExpression.Sort, ''ModuleExpression.Sort,''SortMappingSet.Sort,''OpMappingSet.Sort, ''StratMappingSet.Sort],''View.Sort,'__['ctor.Attr,'gather['__[''&.Sort, ''&.Sort,''&.Sort,''&.Sort,''&.Sort,''&.Sort]],'format['__[''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''n++i.Sort, ''ni.Sort,''ni.Sort,''n--i.Sort,''d.Sort]]]],'op_:_->_`[_`].[ ''wellFormed.Sort,''Module.Sort,''Bool.Sort,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaWellFormedModule.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''wellFormed.Sort,'__[''`[Module`].Kind,''`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`].Kind], ''`[Bool`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaWellFormedTerm.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''ModuleExpression.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''wellFormed.Sort,'__[''`[Module`].Kind, ''`[Substitution?`].Kind],''`[Bool`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaWellFormedSubstitution.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''ModuleExpression.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''with-parens.Sort,'nil.TypeList,''PrintOption.Sort,'ctor.Attr], 'op_:_->_`[_`].[''xmatch_s.t._.Constant,'__[''Term.Sort, ''EqCondition.Sort],''Strategy.Sort,'__['ctor.Attr,'prec['s_^21[ '0.Zero]]]],'op_:_->_`[_`].[''xmatchrew_s.t._by_.Constant,'__[''Term.Sort, ''EqCondition.Sort,''UsingPairSet.Sort],''Strategy.Sort,'ctor.Attr], 'op_:_->_`[_`].[''|_|.Sort,''NeQidSet.Sort,''NzNat.Sort,'none.AttrSet], 'op_:_->_`[_`].[''|_|.Sort,''QidSet.Sort,''Nat.Sort,'none.AttrSet]], 'none.MembAxSet,'__['eq_=_`[_`].['_`[_`][''$applySubstitution.Sort,'_`,_[ ''Q:Qid.Variable,''S:Substitution.Variable]],''Q:Qid.Variable,'owise.Attr], 'eq_=_`[_`].['_`[_`][''$applySubstitution.Sort,'_`,_[''V:Variable.Variable, '_`[_`][''_;_.Sort,'_`,_[''S:Substitution.Variable,'_`[_`][''_<-_.Sort, '_`,_[''V:Variable.Variable,''T:Term.Variable]]]]]],''T:Term.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''$applySubstitution.Sort,'_`,_[ '_`[_`][''_`,_.Qid,'_`,_[''T:Term.Variable,''TL:NeTermList.Variable]], ''S:Substitution.Variable]],'_`[_`][''_`,_.Qid,'_`,_['_`[_`][ ''$applySubstitution.Sort,'_`,_[''T:Term.Variable, ''S:Substitution.Variable]],'_`[_`][''$applySubstitution.Sort,'_`,_[ ''TL:NeTermList.Variable,''S:Substitution.Variable]]]],'none.AttrSet], 'eq_=_`[_`].['_`[_`][''$applySubstitution.Sort,'_`,_['_`[_`][''_`[_`].Qid, '_`,_[''Q:Qid.Variable,''TL:NeTermList.Variable]], ''S:Substitution.Variable]],'_`[_`][''_`[_`].Qid,'_`,_[''Q:Qid.Variable, '_`[_`][''$applySubstitution.Sort,'_`,_[''TL:NeTermList.Variable, ''S:Substitution.Variable]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''$card.Sort,'_`,_[''none.EmptyQidSet.Constant,''C:Nat.Variable]], ''C:Nat.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''$card.Sort,'_`,_[ '_`[_`][''_;_.Sort,'_`,_[''E:Qid.Variable,''S:QidSet.Variable]], ''C:Nat.Variable]],'_`[_`][''$card.Sort,'_`,_[''S:QidSet.Variable,'_`[_`][ ''_+_.Sort,'_`,_[''C:Nat.Variable,'_`[_`][''s_.Sort,''0.Zero.Constant]]]]], 'owise.Attr],'eq_=_`[_`].['_`[_`][''$card.Sort,'_`,_['_`[_`][''_;_.Sort, '_`,_[''N:NeQidSet.Variable,''N:NeQidSet.Variable,''S:QidSet.Variable]], ''C:Nat.Variable]],'_`[_`][''$card.Sort,'_`,_['_`[_`][''_;_.Sort,'_`,_[ ''N:NeQidSet.Variable,''S:QidSet.Variable]],''C:Nat.Variable]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''$diff.Sort,'_`,_[ ''none.EmptyQidSet.Constant,''S':QidSet.Variable,''A:QidSet.Variable]], ''A:QidSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''$diff.Sort,'_`,_[ '_`[_`][''_;_.Sort,'_`,_[''E:Qid.Variable,''S:QidSet.Variable]], ''S':QidSet.Variable,''A:QidSet.Variable]],'_`[_`][''$diff.Sort,'_`,_[ ''S:QidSet.Variable,''S':QidSet.Variable,'_`[_`][''if_then_else_fi.Sort, '_`,_['_`[_`][''_in_.Sort,'_`,_[''E:Qid.Variable,''S':QidSet.Variable]], ''A:QidSet.Variable,'_`[_`][''_;_.Sort,'_`,_[''E:Qid.Variable, ''A:QidSet.Variable]]]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''$intersect.Sort,'_`,_[''none.EmptyQidSet.Constant,''S':QidSet.Variable, ''A:QidSet.Variable]],''A:QidSet.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''$intersect.Sort,'_`,_['_`[_`][''_;_.Sort,'_`,_[''E:Qid.Variable, ''S:QidSet.Variable]],''S':QidSet.Variable,''A:QidSet.Variable]],'_`[_`][ ''$intersect.Sort,'_`,_[''S:QidSet.Variable,''S':QidSet.Variable,'_`[_`][ ''if_then_else_fi.Sort,'_`,_['_`[_`][''_in_.Sort,'_`,_[''E:Qid.Variable, ''S':QidSet.Variable]],'_`[_`][''_;_.Sort,'_`,_[''E:Qid.Variable, ''A:QidSet.Variable]],''A:QidSet.Variable]]]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''$reverse.Sort,'_`,_[''nil.NatList.Constant, ''A:NatList.Variable]],''A:NatList.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''$reverse.Sort,'_`,_[''nil.TypeList.Constant, ''A:QidList.Variable]],''A:QidList.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''$reverse.Sort,'_`,_['_`[_`][''__.Sort,'_`,_[''E:Nat.Variable, ''L:NatList.Variable]],''A:NatList.Variable]],'_`[_`][''$reverse.Sort, '_`,_[''L:NatList.Variable,'_`[_`][''__.Sort,'_`,_[''E:Nat.Variable, ''A:NatList.Variable]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''$reverse.Sort,'_`,_['_`[_`][''__.Sort,'_`,_[''E:Qid.Variable, ''L:QidList.Variable]],''A:QidList.Variable]],'_`[_`][''$reverse.Sort, '_`,_[''L:QidList.Variable,'_`[_`][''__.Sort,'_`,_[''E:Qid.Variable, ''A:QidList.Variable]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][''$size.Sort, '_`,_[''nil.NatList.Constant,''C:Nat.Variable]],''C:Nat.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''$size.Sort,'_`,_[ ''nil.TypeList.Constant,''C:Nat.Variable]],''C:Nat.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''$size.Sort,'_`,_['_`[_`][''__.Sort,'_`,_[ ''E:Nat.Variable,''L:NatList.Variable]],''C:Nat.Variable]],'_`[_`][ ''$size.Sort,'_`,_[''L:NatList.Variable,'_`[_`][''_+_.Sort,'_`,_[ ''C:Nat.Variable,'_`[_`][''s_.Sort,''0.Zero.Constant]]]]],'none.AttrSet], 'eq_=_`[_`].['_`[_`][''$size.Sort,'_`,_['_`[_`][''__.Sort,'_`,_[ ''E:Qid.Variable,''L:QidList.Variable]],''C:Nat.Variable]],'_`[_`][ ''$size.Sort,'_`,_[''L:QidList.Variable,'_`[_`][''_+_.Sort,'_`,_[ ''C:Nat.Variable,'_`[_`][''s_.Sort,''0.Zero.Constant]]]]],'none.AttrSet], 'eq_=_`[_`].['_`[_`][''_;_.Sort,'_`,_[''A:Assignment.Variable, ''A:Assignment.Variable]],''A:Assignment.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''_;_.Sort,'_`,_[''N:NeQidSet.Variable, ''N:NeQidSet.Variable]],''N:NeQidSet.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''_;_.Sort,'_`,_[''T:TypeList.Variable,''T:TypeList.Variable]], ''T:TypeList.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''_\_.Sort,'_`,_[ ''S:QidSet.Variable,''N:NeQidSet.Variable]],'_`[_`][''$diff.Sort,'_`,_[ ''S:QidSet.Variable,''N:NeQidSet.Variable,''none.EmptyQidSet.Constant]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''_\_.Sort,'_`,_[''S:QidSet.Variable, ''none.EmptyQidSet.Constant]],''S:QidSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''__.Sort,'_`,_[''A:Attr.Variable,''A:Attr.Variable]], ''A:Attr.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''__.Sort,'_`,_[ ''D:StratDefinition.Variable,''D:StratDefinition.Variable]], ''D:StratDefinition.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''__.Sort, '_`,_[''E:Equation.Variable,''E:Equation.Variable]],''E:Equation.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''__.Sort,'_`,_[''M:MembAx.Variable, ''M:MembAx.Variable]],''M:MembAx.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''__.Sort,'_`,_[''O:OpDecl.Variable,''O:OpDecl.Variable]], ''O:OpDecl.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''__.Sort,'_`,_[ ''O:OpMapping.Variable,''O:OpMapping.Variable]],''O:OpMapping.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''__.Sort,'_`,_[''O:StratDecl.Variable, ''O:StratDecl.Variable]],''O:StratDecl.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''__.Sort,'_`,_[''R:Rule.Variable,''R:Rule.Variable]], ''R:Rule.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''__.Sort,'_`,_[ ''S:SortMapping.Variable,''S:SortMapping.Variable]], ''S:SortMapping.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''__.Sort, '_`,_[''S:StratMapping.Variable,''S:StratMapping.Variable]], ''S:StratMapping.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''__.Sort, '_`,_[''S:SubsortDecl.Variable,''S:SubsortDecl.Variable]], ''S:SubsortDecl.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''_`,_.Qid, '_`,_[''U:UsingPair.Variable,''U:UsingPair.Variable]], ''U:UsingPair.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''_and-then_.Sort,'_`,_[''false.Bool.Constant,''B:`[Bool`].Variable]], ''false.Bool.Constant,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''_and-then_.Sort,'_`,_[''true.Bool.Constant,''B:`[Bool`].Variable]], ''B:`[Bool`].Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''_and_.Sort, '_`,_[''A:Bool.Variable,''A:Bool.Variable]],''A:Bool.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''_and_.Sort,'_`,_[''A:Bool.Variable, '_`[_`][''_xor_.Sort,'_`,_[''B:Bool.Variable,''C:Bool.Variable]]]],'_`[_`][ ''_xor_.Sort,'_`,_['_`[_`][''_and_.Sort,'_`,_[''A:Bool.Variable, ''B:Bool.Variable]],'_`[_`][''_and_.Sort,'_`,_[''A:Bool.Variable, ''C:Bool.Variable]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][''_and_.Sort, '_`,_[''false.Bool.Constant,''A:Bool.Variable]],''false.Bool.Constant, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''_and_.Sort,'_`,_[ ''true.Bool.Constant,''A:Bool.Variable]],''A:Bool.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''_implies_.Sort,'_`,_[''A:Bool.Variable, ''B:Bool.Variable]],'_`[_`][''not_.Sort,'_`[_`][''_xor_.Sort,'_`,_[ ''A:Bool.Variable,'_`[_`][''_and_.Sort,'_`,_[''A:Bool.Variable, ''B:Bool.Variable]]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][''_in_.Sort, '_`,_[''E:Qid.Variable,''S:QidSet.Variable]],''false.Bool.Constant, 'owise.Attr],'eq_=_`[_`].['_`[_`][''_in_.Sort,'_`,_[''E:Qid.Variable, '_`[_`][''_;_.Sort,'_`,_[''E:Qid.Variable,''S:QidSet.Variable]]]], ''true.Bool.Constant,'none.AttrSet],'eq_=_`[_`].['_`[_`][''_or-else_.Sort, '_`,_[''false.Bool.Constant,''B:`[Bool`].Variable]],''B:`[Bool`].Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''_or-else_.Sort,'_`,_[ ''true.Bool.Constant,''B:`[Bool`].Variable]],''true.Bool.Constant, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''_or_.Sort,'_`,_[''A:Bool.Variable, ''B:Bool.Variable]],'_`[_`][''_xor_.Sort,'_`,_['_`[_`][''_and_.Sort,'_`,_[ ''A:Bool.Variable,''B:Bool.Variable]],'_`[_`][''_xor_.Sort,'_`,_[ ''A:Bool.Variable,''B:Bool.Variable]]]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''_psubset_.Sort,'_`,_[''S:QidSet.Variable,''S':QidSet.Variable]], '_`[_`][''_and-then_.Sort,'_`,_['_`[_`][''_=/=_.Sort,'_`,_[ ''S:QidSet.Variable,''S':QidSet.Variable]],'_`[_`][''_subset_.Sort,'_`,_[ ''S:QidSet.Variable,''S':QidSet.Variable]]]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''_subset_.Sort,'_`,_[''none.EmptyQidSet.Constant, ''S':QidSet.Variable]],''true.Bool.Constant,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''_subset_.Sort,'_`,_['_`[_`][''_;_.Sort,'_`,_[''E:Qid.Variable, ''S:QidSet.Variable]],''S':QidSet.Variable]],'_`[_`][''_and-then_.Sort, '_`,_['_`[_`][''_in_.Sort,'_`,_[''E:Qid.Variable,''S':QidSet.Variable]], '_`[_`][''_subset_.Sort,'_`,_[''S:QidSet.Variable,''S':QidSet.Variable]]]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''_xor_.Sort,'_`,_[''A:Bool.Variable, ''A:Bool.Variable]],''false.Bool.Constant,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''_xor_.Sort,'_`,_[''false.Bool.Constant,''A:Bool.Variable]], ''A:Bool.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''`[_`].Kind, ''Q:Qid.Variable],'_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[ ''Q:Qid.Variable,'_`[_`][''including_..Qid,''Q:Qid.Variable], ''none.EmptyQidSet.Constant,''none.SubsortDeclSet.Constant, ''none.OpDeclSet.Constant,''none.MembAxSet.Constant, ''none.EquationSet.Constant,''none.RuleSet.Constant, ''none.StratDeclSet.Constant,''none.StratDefSet.Constant]],'none.AttrSet], 'eq_=_`[_`].['_`[_`][''append.Sort,'_`,_[''A:NatList.Variable, ''L:NatList.Variable]],'_`[_`][''__.Sort,'_`,_[''A:NatList.Variable, ''L:NatList.Variable]],'none.AttrSet],'eq_=_`[_`].['_`[_`][''append.Sort, '_`,_[''A:QidList.Variable,''L:QidList.Variable]],'_`[_`][''__.Sort,'_`,_[ ''A:QidList.Variable,''L:QidList.Variable]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''applySubstitution.Sort,'_`,_[''M:Module.Variable, ''T:Term.Variable,''S:Substitution.Variable]],'_`[_`][''getTerm.Sort, '_`[_`][''metaNormalize.Sort,'_`,_[''M:Module.Variable,'_`[_`][ ''$applySubstitution.Sort,'_`,_[''T:Term.Variable, ''S:Substitution.Variable]]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''delete.Sort,'_`,_[''E:Qid.Variable,''S:QidSet.Variable]], ''S:QidSet.Variable,'owise.Attr],'eq_=_`[_`].['_`[_`][''delete.Sort,'_`,_[ ''E:Qid.Variable,'_`[_`][''_;_.Sort,'_`,_[''E:Qid.Variable, ''S:QidSet.Variable]]]],'_`[_`][''delete.Sort,'_`,_[''E:Qid.Variable, ''S:QidSet.Variable]],'none.AttrSet],'eq_=_`[_`].['_`[_`][''front.Sort, '_`[_`][''__.Sort,'_`,_[''L:NatList.Variable,''E:Nat.Variable]]], ''L:NatList.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''front.Sort, '_`[_`][''__.Sort,'_`,_[''L:QidList.Variable,''E:Qid.Variable]]], ''L:QidList.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getAccumulatedSubstitution.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`,_`}.Qid, '_`,_[''C:Context.Variable,''L:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable,''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable]]],''A:Substitution.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getAccumulatedSubstitution.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable,''SV:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable]]],''A:Substitution.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''getContext.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[ ''C:Context.Variable,''L:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable,''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable]]],''C:Context.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getContext.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''C:Context.Variable,''L:Qid.Variable,''TS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''C:Context.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getContext.Sort,'_`[_`][ ''`{_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''S:Substitution.Variable,''C:Context.Variable]]],''C:Context.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getContext.Sort,'_`[_`][ ''`{_`,_`}.Qid,'_`,_[''S:Substitution.Variable,''C:Context.Variable]]], ''C:Context.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getEqs.Sort, '_`[_`][''fmod_is_sorts_.____endfm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''EQS:EquationSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getEqs.Sort,'_`[_`][''fth_is_sorts_.____endfth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''EQS:EquationSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getEqs.Sort,'_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[ ''H:Header.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''EQS:EquationSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getEqs.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''EQS:EquationSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getEqs.Sort,'_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''EQS:EquationSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getEqs.Sort,'_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''EQS:EquationSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getFrom.Sort,'_`[_`][''view_from_to_is___endv.Sort, '_`,_[''Q:Qid.Variable,''ME:ModuleExpression.Variable, ''ME':ModuleExpression.Variable,''SMS:SortMappingSet.Variable, ''OMS:OpMappingSet.Variable,''TMS:StratMappingSet.Variable]]], ''ME:ModuleExpression.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getImports.Sort,'_`[_`][''fmod_is_sorts_.____endfm.Constant,'_`,_[ ''H:Header.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''IL:ImportList.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getImports.Sort,'_`[_`][''fth_is_sorts_.____endfth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''IL:ImportList.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getImports.Sort,'_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[ ''H:Header.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''IL:ImportList.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getImports.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''IL:ImportList.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getImports.Sort,'_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''IL:ImportList.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getImports.Sort,'_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''IL:ImportList.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getInitialSubstitution.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''S:Substitution.Variable,''T:NarrowingTrace.Variable, ''U:Substitution.Variable,''UV:Qid.Variable]]],''S:Substitution.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getInitialTerm.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''S:Substitution.Variable,''T:NarrowingTrace.Variable, ''U:Substitution.Variable,''UV:Qid.Variable]]],''T:Term.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getInitialType.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''S:Substitution.Variable,''T:NarrowingTrace.Variable, ''U:Substitution.Variable,''UV:Qid.Variable]]],''T:Type.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getLabel.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''C:Context.Variable,''L:Qid.Variable, ''U:Substitution.Variable,''UV:Qid.Variable,''T:Term.Variable, ''T:Type.Variable,''A:Substitution.Variable]]],''L:Qid.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getLabel.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''C:Context.Variable,''L:Qid.Variable,''TS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''L:Qid.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getLhsSubstitution.Sort,'_`[_`][ ''`{_`,_`,_`}.Qid,'_`,_[''LS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''LS:Substitution.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getMbs.Sort,'_`[_`][ ''fmod_is_sorts_.____endfm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''MAS:MembAxSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getMbs.Sort, '_`[_`][''fth_is_sorts_.____endfth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''MAS:MembAxSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getMbs.Sort, '_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''MAS:MembAxSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getMbs.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''MAS:MembAxSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getMbs.Sort, '_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''MAS:MembAxSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getMbs.Sort, '_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''MAS:MembAxSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getMoreVariantsInLayerFlag.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''S:Substitution.Variable, ''Q:Qid.Variable,''P:Parent.Variable,''B:Bool.Variable]]], ''B:Bool.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getName.Sort, ''C:Constant.Variable],'_`[_`][''qid.Sort,'_`[_`][''substr.Sort,'_`,_[ '_`[_`][''string.Sort,''C:Constant.Variable],''0.Zero.Constant,'_`[_`][ ''rfind.Sort,'_`,_['_`[_`][''string.Sort,''C:Constant.Variable], ''".".Char.Constant,'_`[_`][''length.Sort,'_`[_`][''string.Sort, ''C:Constant.Variable]]]]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getName.Sort,''V:Variable.Variable],'_`[_`][''qid.Sort,'_`[_`][ ''substr.Sort,'_`,_['_`[_`][''string.Sort,''V:Variable.Variable], ''0.Zero.Constant,'_`[_`][''rfind.Sort,'_`,_['_`[_`][''string.Sort, ''V:Variable.Variable],''":".Char.Constant,'_`[_`][''length.Sort,'_`[_`][ ''string.Sort,''V:Variable.Variable]]]]]]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''getName.Sort,'_`[_`][''fmod_is_sorts_.____endfm.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]],''Q:Qid.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getName.Sort,'_`[_`][ ''fmod_is_sorts_.____endfm.Constant,'_`,_['_`[_`][''_`{_`}.Sort,'_`,_[ ''Q:Qid.Variable,''PDL:ParameterDeclList.Variable]], ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]],''Q:Qid.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getName.Sort,'_`[_`][ ''fth_is_sorts_.____endfth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]],''Q:Qid.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getName.Sort,'_`[_`][ ''mod_is_sorts_._____endm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''Q:Qid.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''getName.Sort,'_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[ '_`[_`][''_`{_`}.Sort,'_`,_[''Q:Qid.Variable, ''PDL:ParameterDeclList.Variable]],''IL:ImportList.Variable, ''SS:SortSet.Variable,''SSDS:SubsortDeclSet.Variable, ''OPDS:OpDeclSet.Variable,''MAS:MembAxSet.Variable, ''EQS:EquationSet.Variable,''RLS:RuleSet.Variable]]],''Q:Qid.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getName.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''Q:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getName.Sort, '_`[_`][''smod_is_sorts_._______endsm.Constant,'_`,_['_`[_`][''_`{_`}.Sort, '_`,_[''Q:Qid.Variable,''PDL:ParameterDeclList.Variable]], ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''Q:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getName.Sort, '_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''Q:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getName.Sort, '_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''Q:Qid.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''getName.Sort,'_`[_`][''view_from_to_is___endv.Sort,'_`,_[ ''Q:Qid.Variable,''ME:ModuleExpression.Variable, ''ME':ModuleExpression.Variable,''SMS:SortMappingSet.Variable, ''OMS:OpMappingSet.Variable,''TMS:StratMappingSet.Variable]]], ''Q:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getName.Sort, '_`[_`][''view_from_to_is___endv.Sort,'_`,_['_`[_`][''_`{_`}.Sort,'_`,_[ ''Q:Qid.Variable,''PDL:ParameterDeclList.Variable]], ''ME:ModuleExpression.Variable,''ME':ModuleExpression.Variable, ''SMS:SortMappingSet.Variable,''OMS:OpMappingSet.Variable, ''TMS:StratMappingSet.Variable]]],''Q:Qid.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getOpMappings.Sort,'_`[_`][ ''view_from_to_is___endv.Sort,'_`,_[''Q:Qid.Variable, ''ME:ModuleExpression.Variable,''ME':ModuleExpression.Variable, ''SMS:SortMappingSet.Variable,''OMS:OpMappingSet.Variable, ''TMS:StratMappingSet.Variable]]],''OMS:OpMappingSet.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getOps.Sort,'_`[_`][ ''fmod_is_sorts_.____endfm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''OPDS:OpDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getOps.Sort,'_`[_`][''fth_is_sorts_.____endfth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''OPDS:OpDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getOps.Sort,'_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[ ''H:Header.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''OPDS:OpDeclSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getOps.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''OPDS:OpDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getOps.Sort,'_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''OPDS:OpDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getOps.Sort,'_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''OPDS:OpDeclSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getParent.Sort,'_`[_`][''`{_`,_`,_`,_`,_`}.Qid, '_`,_[''T:Term.Variable,''S:Substitution.Variable,''Q:Qid.Variable, ''P:Parent.Variable,''B:Bool.Variable]]],''P:Parent.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getRhsSubstitution.Sort,'_`[_`][ ''`{_`,_`,_`}.Qid,'_`,_[''LS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''RS:Substitution.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getRls.Sort,'_`[_`][ ''fmod_is_sorts_.____endfm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''none.RuleSet.Constant,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getRls.Sort, '_`[_`][''fth_is_sorts_.____endfth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''none.RuleSet.Constant,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getRls.Sort, '_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''RLS:RuleSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getRls.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''RLS:RuleSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getRls.Sort, '_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''RLS:RuleSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getRls.Sort, '_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''RLS:RuleSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getRule.Sort,'_`[_`][''`{_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''T:Type.Variable,''R:Rule.Variable]]],''R:Rule.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getRuleSubstitution.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''C:Context.Variable,''L:Qid.Variable,''TS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''RS:Substitution.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getSds.Sort,'_`[_`][ ''fmod_is_sorts_.____endfm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''none.StratDefSet.Constant,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSds.Sort,'_`[_`][''fth_is_sorts_.____endfth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''none.StratDefSet.Constant,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSds.Sort,'_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[ ''H:Header.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''none.StratDefSet.Constant,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getSds.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''STDFS:StratDefSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSds.Sort,'_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''STDFS:StratDefSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSds.Sort,'_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''none.StratDefSet.Constant,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getSortMappings.Sort,'_`[_`][ ''view_from_to_is___endv.Sort,'_`,_[''Q:Qid.Variable, ''ME:ModuleExpression.Variable,''ME':ModuleExpression.Variable, ''SMS:SortMappingSet.Variable,''OMS:OpMappingSet.Variable, ''TMS:StratMappingSet.Variable]]],''SMS:SortMappingSet.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getSorts.Sort,'_`[_`][ ''fmod_is_sorts_.____endfm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''SS:SortSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getSorts.Sort, '_`[_`][''fth_is_sorts_.____endfth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''SS:SortSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getSorts.Sort, '_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''SS:SortSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getSorts.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''SS:SortSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getSorts.Sort, '_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''SS:SortSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getSorts.Sort, '_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''SS:SortSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getStateVariableFamily.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable,''SV:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable]]],''SV:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getStratMappings.Sort,'_`[_`][''view_from_to_is___endv.Sort,'_`,_[ ''Q:Qid.Variable,''ME:ModuleExpression.Variable, ''ME':ModuleExpression.Variable,''SMS:SortMappingSet.Variable, ''OMS:OpMappingSet.Variable,''TMS:StratMappingSet.Variable]]], ''TMS:StratMappingSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getStrats.Sort,'_`[_`][''fmod_is_sorts_.____endfm.Constant,'_`,_[ ''H:Header.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''none.StratDeclSet.Constant,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getStrats.Sort,'_`[_`][''fth_is_sorts_.____endfth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''none.StratDeclSet.Constant,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getStrats.Sort,'_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[ ''H:Header.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''none.StratDeclSet.Constant,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getStrats.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''STDS:StratDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getStrats.Sort,'_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''STDS:StratDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getStrats.Sort,'_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''none.StratDeclSet.Constant,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getSubsorts.Sort,'_`[_`][ ''fmod_is_sorts_.____endfm.Constant,'_`,_[''H:Header.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''SSDS:SubsortDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSubsorts.Sort,'_`[_`][''fth_is_sorts_.____endfth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable]]], ''SSDS:SubsortDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSubsorts.Sort,'_`[_`][''mod_is_sorts_._____endm.Constant,'_`,_[ ''H:Header.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''SSDS:SubsortDeclSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getSubsorts.Sort,'_`[_`][ ''smod_is_sorts_._______endsm.Constant,'_`,_[''Q:Qid.Variable, ''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''SSDS:SubsortDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSubsorts.Sort,'_`[_`][''sth_is_sorts_._______endsth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable,''RLS:RuleSet.Variable, ''STDS:StratDeclSet.Variable,''STDFS:StratDefSet.Variable]]], ''SSDS:SubsortDeclSet.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSubsorts.Sort,'_`[_`][''th_is_sorts_._____endth.Constant,'_`,_[ ''Q:Qid.Variable,''IL:ImportList.Variable,''SS:SortSet.Variable, ''SSDS:SubsortDeclSet.Variable,''OPDS:OpDeclSet.Variable, ''MAS:MembAxSet.Variable,''EQS:EquationSet.Variable, ''RLS:RuleSet.Variable]]],''SSDS:SubsortDeclSet.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getSubstitution.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''S:Substitution.Variable, ''Q:Qid.Variable,''P:Parent.Variable,''B:Bool.Variable]]], ''S:Substitution.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSubstitution.Sort,'_`[_`][''`{_`,_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''T:Type.Variable,''S:Substitution.Variable, ''C:Context.Variable]]],''S:Substitution.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getSubstitution.Sort,'_`[_`][''`{_`,_`,_`}.Qid, '_`,_[''T:Term.Variable,''T:Type.Variable,''S:Substitution.Variable]]], ''S:Substitution.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSubstitution.Sort,'_`[_`][''`{_`,_`}.Qid,'_`,_[ ''S:Substitution.Variable,''C:Context.Variable]]], ''S:Substitution.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSubstitution.Sort,'_`[_`][''`{_`,_`}.Qid,'_`,_[ ''S:Substitution.Variable,''V:Qid.Variable]]],''S:Substitution.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTerm.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''C:Context.Variable,''L:Qid.Variable, ''U:Substitution.Variable,''UV:Qid.Variable,''T:Term.Variable, ''T:Type.Variable,''A:Substitution.Variable]]],''T:Term.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTerm.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''C:Context.Variable,''L:Qid.Variable,''TS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''T:Term.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTerm.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable,''SV:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable]]],''T:Term.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getTerm.Sort,'_`[_`][''`{_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable, ''S:Substitution.Variable,''Q:Qid.Variable,''P:Parent.Variable, ''B:Bool.Variable]]],''T:Term.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getTerm.Sort,'_`[_`][''`{_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable, ''T:Type.Variable,''S:Substitution.Variable,''C:Context.Variable]]], ''T:Term.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTerm.Sort, '_`[_`][''`{_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''R:Rule.Variable]]],''T:Term.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getTerm.Sort,'_`[_`][''`{_`,_`,_`}.Qid,'_`,_[''T:Term.Variable, ''T:Type.Variable,''S:Substitution.Variable]]],''T:Term.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTerm.Sort,'_`[_`][''`{_`,_`}.Qid, '_`,_[''T:Term.Variable,''T:Type.Variable]]],''T:Term.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTermSubstitution.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''C:Context.Variable,''L:Qid.Variable,''TS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''TS:Substitution.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTo.Sort,'_`[_`][ ''view_from_to_is___endv.Sort,'_`,_[''Q:Qid.Variable, ''ME:ModuleExpression.Variable,''ME':ModuleExpression.Variable, ''SMS:SortMappingSet.Variable,''OMS:OpMappingSet.Variable, ''TMS:StratMappingSet.Variable]]],''ME':ModuleExpression.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTrace.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''S:Substitution.Variable,''T:NarrowingTrace.Variable, ''U:Substitution.Variable,''UV:Qid.Variable]]],''T:NarrowingTrace.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getType.Sort,''C:Constant.Variable], '_`[_`][''qid.Sort,'_`[_`][''substr.Sort,'_`,_['_`[_`][''string.Sort, ''C:Constant.Variable],'_`[_`][''_+_.Sort,'_`,_['_`[_`][''s_.Sort, ''0.Zero.Constant],'_`[_`][''rfind.Sort,'_`,_['_`[_`][''string.Sort, ''C:Constant.Variable],''".".Char.Constant,'_`[_`][''length.Sort,'_`[_`][ ''string.Sort,''C:Constant.Variable]]]]]],'_`[_`][''length.Sort,'_`[_`][ ''string.Sort,''C:Constant.Variable]]]]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''getType.Sort,''V:Variable.Variable],'_`[_`][''qid.Sort,'_`[_`][ ''substr.Sort,'_`,_['_`[_`][''string.Sort,''V:Variable.Variable],'_`[_`][ ''_+_.Sort,'_`,_['_`[_`][''s_.Sort,''0.Zero.Constant],'_`[_`][''rfind.Sort, '_`,_['_`[_`][''string.Sort,''V:Variable.Variable],''":".Char.Constant, '_`[_`][''length.Sort,'_`[_`][''string.Sort,''V:Variable.Variable]]]]]], '_`[_`][''length.Sort,'_`[_`][''string.Sort,''V:Variable.Variable]]]]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getType.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''C:Context.Variable,''L:Qid.Variable, ''U:Substitution.Variable,''UV:Qid.Variable,''T:Term.Variable, ''T:Type.Variable,''A:Substitution.Variable]]],''T:Type.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getType.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''C:Context.Variable,''L:Qid.Variable,''TS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''T:Type.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getType.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable,''SV:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable]]],''T:Type.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getType.Sort,'_`[_`][''`{_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable, ''T:Type.Variable,''S:Substitution.Variable,''C:Context.Variable]]], ''T:Type.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getType.Sort, '_`[_`][''`{_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''R:Rule.Variable]]],''T:Type.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getType.Sort,'_`[_`][''`{_`,_`,_`}.Qid,'_`,_[''T:Term.Variable, ''T:Type.Variable,''S:Substitution.Variable]]],''T:Type.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getType.Sort,'_`[_`][''`{_`,_`}.Qid, '_`,_[''T:Term.Variable,''T:Type.Variable]]],''T:Type.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getUnifier.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''C:Context.Variable,''L:Qid.Variable, ''U:Substitution.Variable,''UV:Qid.Variable,''T:Term.Variable, ''T:Type.Variable,''A:Substitution.Variable]]],''U:Substitution.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getUnifier.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable,''SV:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable]]],''U:Substitution.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''getUnifier.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''T:Type.Variable,''S:Substitution.Variable, ''T:NarrowingTrace.Variable,''U:Substitution.Variable,''UV:Qid.Variable]]], ''U:Substitution.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getUnifierVariableFamily.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`,_`}.Qid, '_`,_[''C:Context.Variable,''L:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable,''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable]]],''UV:Qid.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''getUnifierVariableFamily.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`}.Qid, '_`,_[''T:Term.Variable,''T:Type.Variable,''A:Substitution.Variable, ''SV:Qid.Variable,''U:Substitution.Variable,''UV:Qid.Variable]]], ''UV:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getUnifierVariableFamily.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''T:Type.Variable,''S:Substitution.Variable, ''T:NarrowingTrace.Variable,''U:Substitution.Variable,''UV:Qid.Variable]]], ''UV:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getVariableFamily.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''T:Type.Variable,''C:Context.Variable,''L:Qid.Variable, ''TS:Substitution.Variable,''RS:Substitution.Variable,''V:Qid.Variable]]], ''V:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getVariableFamily.Sort,'_`[_`][''`{_`,_`,_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''S:Substitution.Variable,''Q:Qid.Variable, ''P:Parent.Variable,''B:Bool.Variable]]],''Q:Qid.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getVariableFamily.Sort,'_`[_`][''`{_`,_`,_`}.Qid, '_`,_[''LS:Substitution.Variable,''RS:Substitution.Variable, ''V:Qid.Variable]]],''V:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getVariableFamily.Sort,'_`[_`][''`{_`,_`}.Qid,'_`,_[ ''S:Substitution.Variable,''V:Qid.Variable]]],''V:Qid.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''head.Sort,'_`[_`][''__.Sort,'_`,_[ ''E:Nat.Variable,''L:NatList.Variable]]],''E:Nat.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''head.Sort,'_`[_`][''__.Sort,'_`,_[''E:Qid.Variable, ''L:QidList.Variable]]],''E:Qid.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''insert.Sort,'_`,_[''E:Qid.Variable,''S:QidSet.Variable]],'_`[_`][ ''_;_.Sort,'_`,_[''E:Qid.Variable,''S:QidSet.Variable]],'none.AttrSet], 'eq_=_`[_`].['_`[_`][''intersection.Sort,'_`,_[''S:QidSet.Variable, ''N:NeQidSet.Variable]],'_`[_`][''$intersect.Sort,'_`,_[ ''S:QidSet.Variable,''N:NeQidSet.Variable,''none.EmptyQidSet.Constant]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''intersection.Sort,'_`,_[ ''S:QidSet.Variable,''none.EmptyQidSet.Constant]], ''none.EmptyQidSet.Constant,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''last.Sort,'_`[_`][''__.Sort,'_`,_[''L:NatList.Variable, ''E:Nat.Variable]]],''E:Nat.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''last.Sort,'_`[_`][''__.Sort,'_`,_[''L:QidList.Variable, ''E:Qid.Variable]]],''E:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''metaNarrowingApply.Sort,'_`,_[''M:Module.Variable,''T:Term.Variable, ''TL:TermList.Variable,''Q:Qid.Variable,''N:Nat.Variable]],'_`[_`][ ''metaNarrowingApply.Sort,'_`,_[''M:Module.Variable,''T:Term.Variable, ''TL:TermList.Variable,''Q:Qid.Variable,''none.VariantOptionSet.Constant, ''N:Nat.Variable]],'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''metaNarrowingSearch.Sort,'_`,_[''M:Module.Variable,''T:Term.Variable, ''T2:Term.Variable,''S:Qid.Variable,''B:Bound.Variable,''F:Qid.Variable, ''N:Nat.Variable]],'_`[_`][''metaNarrowingSearch.Sort,'_`,_[ ''M:Module.Variable,''T:Term.Variable,''T2:Term.Variable,''S:Qid.Variable, ''B:Bound.Variable,''F:Qid.Variable,''none.VariantOptionSet.Constant, ''N:Nat.Variable]],'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''metaNarrowingSearchPath.Sort,'_`,_[''M:Module.Variable,''T:Term.Variable, ''T2:Term.Variable,''S:Qid.Variable,''B:Bound.Variable,''F:Qid.Variable, ''N:Nat.Variable]],'_`[_`][''metaNarrowingSearchPath.Sort,'_`,_[ ''M:Module.Variable,''T:Term.Variable,''T2:Term.Variable,''S:Qid.Variable, ''B:Bound.Variable,''F:Qid.Variable,''none.VariantOptionSet.Constant, ''N:Nat.Variable]],'none.AttrSet],'eq_=_`[_`].['_`[_`][''metaParse.Sort, '_`,_[''M:Module.Variable,''Q:QidList.Variable,''T:Type?.Variable]], '_`[_`][''metaParse.Sort,'_`,_[''M:Module.Variable, ''none.EmptyQidSet.Constant,''Q:QidList.Variable,''T:Type?.Variable]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''metaPrettyPrint.Sort,'_`,_[ ''M:Module.Variable,''T:Term.Variable]],'_`[_`][''metaPrettyPrint.Sort, '_`,_[''M:Module.Variable,''none.EmptyQidSet.Constant,''T:Term.Variable, '_`[_`][''__.Sort,'_`,_[''mixfix.PrintOption.Constant,'_`[_`][''__.Sort, '_`,_[''flat.PrintOption.Constant,'_`[_`][''__.Sort,'_`,_[ ''format.PrintOption.Constant,'_`[_`][''__.Sort,'_`,_[ ''number.PrintOption.Constant,''rat.PrintOption.Constant]]]]]]]]]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''metaPrettyPrint.Sort,'_`,_[ ''M:Module.Variable,''T:Term.Variable,''P:PrintOptionSet.Variable]], '_`[_`][''metaPrettyPrint.Sort,'_`,_[''M:Module.Variable, ''none.EmptyQidSet.Constant,''T:Term.Variable, ''P:PrintOptionSet.Variable]],'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''metaVariantDisjointUnify.Sort,'_`,_[''M:Module.Variable, ''U:UnificationProblem.Variable,''TL:TermList.Variable,''Q:Qid.Variable, ''N:Nat.Variable]],'_`[_`][''metaVariantDisjointUnify.Sort,'_`,_[ ''M:Module.Variable,''U:UnificationProblem.Variable,''TL:TermList.Variable, ''Q:Qid.Variable,''none.VariantOptionSet.Constant,''N:Nat.Variable]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''metaVariantUnify.Sort,'_`,_[ ''M:Module.Variable,''U:UnificationProblem.Variable,''TL:TermList.Variable, ''Q:Qid.Variable,''N:Nat.Variable]],'_`[_`][''metaVariantUnify.Sort,'_`,_[ ''M:Module.Variable,''U:UnificationProblem.Variable,''TL:TermList.Variable, ''Q:Qid.Variable,''none.VariantOptionSet.Constant,''N:Nat.Variable]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''not_.Sort,''A:Bool.Variable],'_`[_`][ ''_xor_.Sort,'_`,_[''true.Bool.Constant,''A:Bool.Variable]],'none.AttrSet], 'eq_=_`[_`].['_`[_`][''occurs.Sort,'_`,_[''E:Nat.Variable, ''nil.NatList.Constant]],''false.Bool.Constant,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''occurs.Sort,'_`,_[''E:Nat.Variable,'_`[_`][''__.Sort,'_`,_[ ''E':Nat.Variable,''L:NatList.Variable]]]],'_`[_`][''if_then_else_fi.Sort, '_`,_['_`[_`][''_==_.Sort,'_`,_[''E:Nat.Variable,''E':Nat.Variable]], ''true.Bool.Constant,'_`[_`][''occurs.Sort,'_`,_[''E:Nat.Variable, ''L:NatList.Variable]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][''occurs.Sort, '_`,_[''E:Qid.Variable,''nil.TypeList.Constant]],''false.Bool.Constant, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''occurs.Sort,'_`,_[''E:Qid.Variable, '_`[_`][''__.Sort,'_`,_[''E':Qid.Variable,''L:QidList.Variable]]]],'_`[_`][ ''if_then_else_fi.Sort,'_`,_['_`[_`][''_==_.Sort,'_`,_[''E:Qid.Variable, ''E':Qid.Variable]],''true.Bool.Constant,'_`[_`][''occurs.Sort,'_`,_[ ''E:Qid.Variable,''L:QidList.Variable]]]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''reverse.Sort,''L:NatList.Variable],'_`[_`][''$reverse.Sort,'_`,_[ ''L:NatList.Variable,''nil.NatList.Constant]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''reverse.Sort,''L:QidList.Variable],'_`[_`][''$reverse.Sort,'_`,_[ ''L:QidList.Variable,''nil.TypeList.Constant]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''size.Sort,''L:NatList.Variable],'_`[_`][''$size.Sort,'_`,_[ ''L:NatList.Variable,''0.Zero.Constant]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''size.Sort,''L:QidList.Variable],'_`[_`][''$size.Sort,'_`,_[ ''L:QidList.Variable,''0.Zero.Constant]],'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''tail.Sort,'_`[_`][''__.Sort,'_`,_[''E:Nat.Variable, ''L:NatList.Variable]]],''L:NatList.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''tail.Sort,'_`[_`][''__.Sort,'_`,_[''E:Qid.Variable, ''L:QidList.Variable]]],''L:QidList.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''union.Sort,'_`,_[''S:QidSet.Variable,''S':QidSet.Variable]], '_`[_`][''_;_.Sort,'_`,_[''S:QidSet.Variable,''S':QidSet.Variable]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''|_|.Sort,''S:QidSet.Variable], '_`[_`][''$card.Sort,'_`,_[''S:QidSet.Variable,''0.Zero.Constant]], 'none.AttrSet]]],'FModule} ========================================== reduce in META-LEVEL : metaReduce(upModule('META-LEVEL, true), 'upModule[ upTerm('META-LEVEL),upTerm(true)]) == {upTerm(upModule('META-LEVEL, true)), 'FModule} . rewrites: 9 result Bool: false Bye. maude-3.1/tests/Meta/metaMetadata.expected0000644000175200017520000000643613140741636015555 00000000000000fmod FOO is sorts Foo . ops a b : -> Foo [metadata "bla bla"] . eq a = b [metadata "hmm"] . endfm fmod FOO is sort Foo . op a : -> Foo [metadata "bla bla"] . op b : -> Foo [metadata "bla bla"] . eq a = b [metadata "hmm"] . endfm ========================================== reduce in META-LEVEL : upModule('FOO, false) . rewrites: 1 result FModule: fmod 'FOO is nil sorts 'Foo . none op 'a : nil -> 'Foo [metadata("bla bla")] . op 'b : nil -> 'Foo [metadata("bla bla")] . none eq 'a.Foo = 'b.Foo [metadata("hmm")] . endfm Warning: , line 19 (fmod FOO2): bad value bla for metadata attribute. Warning: , line 20 (fmod FOO2): bad token hmm. Warning: , line 20 (fmod FOO2): no parse for statement eq a = b [metadata hmm] . fmod FOO2 is sorts Foo . ops a b : -> Foo . eq a = b [metadata hmm] . endfm fmod FOO2 is sort Foo . op a : -> Foo . op b : -> Foo . endfm ========================================== reduce in META-LEVEL : upModule('FOO, false) . rewrites: 1 result FModule: fmod 'FOO is nil sorts 'Foo . none op 'a : nil -> 'Foo [metadata("bla bla")] . op 'b : nil -> 'Foo [metadata("bla bla")] . none eq 'a.Foo = 'b.Foo [metadata("hmm")] . endfm fmod FOO3 is sort Foo . op a : -> Foo [metadata "bla bla"] . op b : -> Foo [metadata "bla bla"] . eq a = b [metadata "hmm"] . endfm ========================================== reduce in META-LEVEL : upModule('FOO3, true) . rewrites: 1 result FModule: fmod 'FOO3 is nil sorts 'Foo . none op 'a : nil -> 'Foo [metadata("bla bla")] . op 'b : nil -> 'Foo [metadata("bla bla")] . none eq 'a.Foo = 'b.Foo [metadata("hmm")] . endfm fmod FOO4 is sorts Foo . op f : ??? -> Foo [poly (1) metadata "bla bla"] . endfm fmod FOO4 is sort Foo . op f : Universal -> Foo [poly (1) metadata "bla bla"] . endfm ========================================== reduce in META-LEVEL : upModule('FOO4, false) . rewrites: 1 result FModule: fmod 'FOO4 is nil sorts 'Foo . none op 'f : 'Universal -> 'Foo [poly(1) metadata("bla bla")] . none none endfm fmod FOO5 is sort Foo . op f : Universal -> Foo [poly (1) metadata "bla bla"] . endfm ========================================== reduce in META-LEVEL : upModule('FOO5, true) . rewrites: 1 result FModule: fmod 'FOO5 is nil sorts 'Foo . none op 'f : 'Universal -> 'Foo [poly(1) metadata("bla bla")] . none none endfm ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is protecting 'BOOL . sorts 'Foo . none op 'a : nil -> 'Foo [metadata("bla bla")] . op 'b : nil -> 'Foo [metadata("bla bla")] . none eq 'a.Foo = 'b.Foo [metadata("hmm")] . endfm, 'a.Foo) . rewrites: 2 result ResultPair: {'b.Foo,'Foo} fmod BAR is sorts Foo Bar . subsorts Foo < Bar . op f : Foo -> Foo [metadata "fooy"] . op f : Bar -> Bar [metadata "fubar"] . endfm fmod BAR is sorts Foo Bar . subsort Foo < Bar . op f : Foo -> Foo [metadata "fooy"] . op f : Bar -> Bar [metadata "fubar"] . endfm ========================================== reduce in META-LEVEL : upModule('BAR, false) . rewrites: 1 result FModule: fmod 'BAR is nil sorts 'Bar ; 'Foo . subsort 'Foo < 'Bar . op 'f : 'Bar -> 'Bar [metadata("fubar")] . op 'f : 'Foo -> 'Foo [metadata("fooy")] . none none endfm Bye. maude-3.1/tests/Meta/metaUnify.maude0000644000175200017520000000561013703634433014413 00000000000000set show timing off . set show advisories off . *** 7 unifiers for most trivial elementary AC problem reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat, 'Y:Nat] =? '_+_['X:Nat, 'Y:Nat], '#, 0) . reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat, 'Y:Nat] =? '_+_['X:Nat, 'Y:Nat], '#, 1) . reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat, 'Y:Nat] =? '_+_['X:Nat, 'Y:Nat], '#, 2) . reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat, 'Y:Nat] =? '_+_['X:Nat, 'Y:Nat], '#, 3) . reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat, 'Y:Nat] =? '_+_['X:Nat, 'Y:Nat], '#, 4) . reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat, 'Y:Nat] =? '_+_['X:Nat, 'Y:Nat], '#, 5) . reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat, 'Y:Nat] =? '_+_['X:Nat, 'Y:Nat], '#, 6) . reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat, 'Y:Nat] =? '_+_['X:Nat, 'Y:Nat], '#, 7) . *** variable families '% and '@ are also supported reduce in META-LEVEL : metaUnify(['NAT], '_+_['X:Nat, 'Y:Nat] =? '_+_['A:Nat, 'B:Nat], '%, 0) . reduce in META-LEVEL : metaUnify(['NAT], '_+_['X:Nat, 'Y:Nat] =? '_+_['A:Nat, 'B:Nat], '@, 0) . *** using variable families other than the one *** declared by the the 3rd argument generates a warning and no *** reduction. reduce in META-LEVEL : metaUnify(['NAT], '_+_['X:Nat, 'Y:Nat] =? '_+_['#1:Nat, 'Y:Nat], '%, 0) . *** simultaneous unification fmod BAZ is sort Foo . ops a b : -> Foo . op f : Foo -> Foo . endfm red in META-LEVEL : metaDisjointUnify(['BAZ], 'f['X:Foo] =? 'f['Y:Foo] /\ 'f['X:Foo] =? 'f['Z:Foo], '#, 0) . red in META-LEVEL : metaDisjointUnify(['BAZ], 'f['Y:Foo] =? 'f['X:Foo] /\ 'f['Z:Foo] =? 'f['X:Foo], '#, 0) . red in META-LEVEL : metaDisjointUnify(['BAZ], 'f['X:Foo] =? 'f['Y:Foo] /\ 'f['Y:Foo] =? 'f['X:Foo], '#, 0) . red in META-LEVEL : metaDisjointUnify(['BAZ], 'f['X:Foo] =? 'f['a.Foo] /\ 'f['X:Foo] =? 'f['b.Foo], '#, 0) . red in META-LEVEL : metaDisjointUnify(['BAZ], 'f['a.Foo] =? 'f['X:Foo] /\ 'f['b.Foo] =? 'f['X:Foo], '#, 0) . *** irredundant unification fmod BAG is sorts Elt Bag . subsort Elt < Bag . op empty : -> Bag . op __ : Bag Bag -> Bag [assoc comm id: empty] . endfm reduce in META-LEVEL : metaIrredundantUnify(['BAG], '__['L:Bag, 'M:Bag] =? '__['P:Bag, 'Q:Bag], '#, 0) . reduce in META-LEVEL : metaIrredundantUnify(['BAG], '__['L:Bag, 'M:Bag] =? '__['P:Bag, 'Q:Bag], '#, 1) . reduce in META-LEVEL : metaIrredundantDisjointUnify(['BAG], '__['L:Bag, 'M:Bag] =? '__['P:Bag, 'Q:Bag], '#, 0) . reduce in META-LEVEL : metaIrredundantDisjointUnify(['BAG], '__['L:Bag, 'M:Bag] =? '__['P:Bag, 'Q:Bag], '#, 1) . maude-3.1/tests/Meta/metaApply.maude0000644000175200017520000001734010025701635014402 00000000000000set show timing off . set show advisories off . *** *** Test the metaApply() descent function. *** fmod TEST is pr META-LEVEL . op m : -> Module . eq m = (mod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . none none rl 'a.Foo => 'b.Foo [label('k)] . endm) . endfm red metaApply(m, 'a.Foo, 'k, none, 0) . red metaApply(m, 'a.Foo, 'k, none, 1) . red metaApply(m, 'a.Foo, 'k, none, unbounded) . red metaApply(m, 'a.Foo, 'k, none, 10000000000000000000000000000) . fmod TEST2 is pr META-LEVEL . op m : -> Module . eq m = (mod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [comm] . none none rl 'f['X:Foo, 'Y:Foo] => 'X:Foo [label('k)] . endm) . endfm red metaApply(m, 'f['a.Foo, 'b.Foo], 'k, none, 0) . red metaApply(m, 'f['a.Foo, 'b.Foo], 'k, none, 1) . red metaApply(m, 'f['a.Foo, 'b.Foo], 'k, none, 2) . red metaApply(m, 'f['a.Foo, 'b.Foo], 'k, none, 10000000000000000000000000000) . *** Testing substitutions fmod TEST3 is pr META-LEVEL . op m : -> Module . eq m = (mod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [comm] . none none rl 'f['X:Foo, 'Y:Foo] => 'X:Foo [label('k)] . endm) . endfm red metaApply(m, 'f['a.Foo, 'b.Foo], 'k, 'Y:Foo <- 'b.Foo, 0) . red metaApply(m, 'f['a.Foo, 'b.Foo], 'k, 'Y:Foo <- 'b.Foo, 1) . red metaApply(m, 'f['b.Foo, 'b.Foo], 'k, 'X:Foo <- 'b.Foo, 0) . red metaApply(m, 'f['b.Foo, 'b.Foo], 'k, 'X:Foo <- 'b.Foo, 1) . red metaApply(m, 'f['b.Foo, 'b.Foo], 'k, 'Z:Foo <- 'b.Foo, 0) . red metaApply(m, 'f['b.Foo, 'b.Foo], 'k, 'Z:Foo <- 'b.Foo, 1) . *** Testing conditional fmod TEST4 is pr META-LEVEL . op m : -> Module . eq m = (mod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [comm] . none none crl 'f['Y:Foo, 'Y:Foo] => 'X:Foo if 'X:Foo := 'f['Y:Foo, 'a.Foo] [label('k)] . endm) . endfm red metaApply(m, 'f['b.Foo, 'b.Foo], 'k, 'Z:Foo <- 'b.Foo, 0) . red metaApply(m, 'f['b.Foo, 'b.Foo], 'k, 'Z:Foo <- 'b.Foo, 1) . red in META-LEVEL : metaApply(mod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] . none none crl 'f['X:Foo, 'Y:Foo] => 'Z:Foo if 'Q:Foo := 'g['X:Foo, 'Y:Foo] /\ 'g['Z:Foo, 'A:Foo] := 'Q:Foo [label('k)] . endm, 'f['a.Foo, 'b.Foo, 'c.Foo], 'k, 'A:Foo <- 'b.Foo, 0) . red in META-LEVEL : metaApply(mod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] . none none crl 'f['X:Foo, 'Y:Foo] => 'Z:Foo if 'Q:Foo := 'g['X:Foo, 'Y:Foo] /\ 'g['Z:Foo, 'A:Foo] := 'Q:Foo [label('k)] . endm, 'f['a.Foo, 'b.Foo, 'c.Foo], 'k, 'A:Foo <- 'b.Foo, 1) . red in META-LEVEL : metaApply(mod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] . none none crl 'f['X:Foo, 'Y:Foo] => 'Z:Foo if 'Q:Foo := 'g['X:Foo, 'Y:Foo] /\ 'g['Z:Foo, 'A:Foo] := 'Q:Foo [label('k)] . endm, 'f['a.Foo, 'b.Foo, 'c.Foo], 'k, 'A:Foo <- 'b.Foo, 2) . red in META-LEVEL : metaApply(mod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] . none none rl 'f['X:Foo, 'Y:Foo] => 'X:Foo [label('k)] . endm, 'f['a.Foo, 'b.Foo, 'c.Foo], 'k, none, 0) . red in META-LEVEL : metaApply(mod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] . none none rl 'f['X:Foo, 'Y:Foo] => 'X:Foo [label('k)] . endm, 'f['a.Foo, 'b.Foo, 'c.Foo], 'k, none, 1) . red in META-LEVEL : metaApply(mod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] . none none rl 'f['X:Foo, 'Y:Foo] => 'X:Foo [label('k)] . endm, 'f['a.Foo, 'b.Foo, 'c.Foo], 'k, none, 2) . red in META-LEVEL : metaApply(mod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] . none none rl 'f['X:Foo, 'Y:Foo] => 'X:Foo [label('k)] . endm, 'f['a.Foo, 'b.Foo, 'c.Foo], 'k, none, 3) . red in META-LEVEL : metaApply(mod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] . none none rl 'f['X:Foo, 'Y:Foo] => 'X:Foo [label('k)] . endm, 'f['a.Foo, 'b.Foo, 'c.Foo], 'k, none, 4) . red in META-LEVEL : metaApply(mod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] . none none rl 'f['X:Foo, 'Y:Foo] => 'X:Foo [label('k)] . endm, 'f['a.Foo, 'b.Foo, 'c.Foo], 'k, none, 5) . red in META-LEVEL : metaApply(mod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] . none none rl 'f['X:Foo, 'Y:Foo] => 'X:Foo [label('k)] . endm, 'f['a.Foo, 'b.Foo, 'c.Foo], 'k, none, 6) . red in META-LEVEL : metaApply(mod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] . none none rl 'f['X:Foo, 'Y:Foo] => 'X:Foo [label('k)] . rl 'a.Foo => 'c.Foo [label('k)] . endm, 'f['a.Foo, 'b.Foo], 'k, none, 0) . red in META-LEVEL : metaApply(mod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] . none none rl 'f['X:Foo, 'Y:Foo] => 'X:Foo [label('k)] . rl 'a.Foo => 'c.Foo [label('k)] . endm, 'f['a.Foo, 'b.Foo], 'k, none, 1) . red in META-LEVEL : metaApply(mod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] . none none rl 'f['X:Foo, 'Y:Foo] => 'X:Foo [label('k)] . rl 'a.Foo => 'c.Foo [label('k)] . endm, 'f['a.Foo, 'b.Foo], 'k, none, 2) . maude-3.1/tests/Meta/metaVariantMatch0000755000175200017520000000037413726260777014630 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaVariantMatch.maude -no-banner -no-advise \ > metaVariantMatch.out 2>&1 diff $srcdir/metaVariantMatch.expected metaVariantMatch.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaIntPrelude.maude0000644000175200017520000001230213366052720015366 00000000000000set show timing off . set show advisories off . *** *** We suck the prelude modules and views out of the object level interpreter into *** an interpreter object. *** load metaInterpreter fmod SEQUENCE is pr QID . sort ViewCmd ModuleCmd Seq . subsort ViewCmd ModuleCmd < Seq . op v : Qid -> ViewCmd . op m : Qid -> ModuleCmd . op __ : Seq Seq -> Seq [assoc id: nil] . op nil : -> Seq . op prelude : -> Seq . eq prelude = m('TRUTH-VALUE) m('BOOL-OPS) m('TRUTH) m('BOOL) m('EXT-BOOL) m('NAT) m('INT) m('RAT) m('FLOAT) m('STRING) m('CONVERSION) m('RANDOM) m('BOUND) m('QID) m('TRIV) v('Bool) v('Nat) v('Int) v('Rat) v('Float) v('String) v('Qid) m('STRICT-WEAK-ORDER) v('STRICT-WEAK-ORDER) m('STRICT-TOTAL-ORDER) v('STRICT-TOTAL-ORDER) v('Nat<) v('Int<) v('Rat<) v('Float<) v('String<) m('TOTAL-PREORDER) v('TOTAL-PREORDER) m('TOTAL-ORDER) v('TOTAL-ORDER) v('Nat<=) v('Int<=) v('Rat<=) v('Float<=) v('String<=) m('DEFAULT) v('DEFAULT) v('Nat0) v('Int0) v('Rat0) v('Float0) v('String0) v('Qid0) m('LIST) m('WEAKLY-SORTABLE-LIST) m('SORTABLE-LIST) m('WEAKLY-SORTABLE-LIST') m('SORTABLE-LIST') m('SET) m('LIST-AND-SET) m('SORTABLE-LIST-AND-SET) m('SORTABLE-LIST-AND-SET') m('LIST*) m('SET*) m('MAP) m('ARRAY) m('NAT-LIST) m('QID-LIST) m('QID-SET) m('META-TERM) m('META-CONDITION) m('META-STRATEGY) m('META-MODULE) m('META-VIEW) m('META-LEVEL) m('LEXICAL) m('COUNTER) m('LOOP-MODE) m('CONFIGURATION) . endfm mod RUN is pr META-INTERPRETER . pr SEQUENCE . op me : -> Oid . op User : -> Cid . op pending : Seq -> Attribute . vars X Y Z : Oid . var Q : Qid . var Rest : Seq . rl < X : User | pending(m(Q) Rest) > createdInterpreter(X, Y, Z) => < X : User | pending(Rest) > insertModule(Z, X, upModule(Q, false)) . rl < X : User | pending(m(Q) Rest) > insertedModule(X, Y) => < X : User | pending(Rest) > insertModule(Y, X, upModule(Q, false)) . rl < X : User | pending(m(Q) Rest) > insertedView(X, Y) => < X : User | pending(Rest) > insertModule(Y, X, upModule(Q, false)) . rl < X : User | pending(v(Q) Rest) > insertedModule(X, Y) => < X : User | pending(Rest) > insertView(Y, X, upView(Q)) . rl < X : User | pending(v(Q) Rest) > insertedView(X, Y) => < X : User | pending(Rest) > insertView(Y, X, upView(Q)) . rl < X : User | pending(nil) > insertedModule(X, Y) => < X : User | pending(nil) > reduceTerm(Y, X, 'NAT, '_+_['s_^2['0.Nat], 's_^3['0.Nat]]) . endm erew in RUN : <> < me : User | pending(prelude) > createInterpreter(interpreterManager, me, none) . mod RUN2 is pr META-INTERPRETER . pr SEQUENCE . op me : -> Oid . op User : -> Cid . op pending : Seq -> Attribute . vars X Y Z : Oid . var Q : Qid . var Rest : Seq . op run : -> Term . eq run = 'metaReduce['`[_`][''NAT.Sort],'_`[_`][''_+_.Sort, '_`,_['_`[_`][''s_^2.Sort,''0.Nat.Constant],'_`[_`][ ''s_^3.Sort,''0.Nat.Constant]]]] . rl < X : User | pending(m(Q) Rest) > createdInterpreter(X, Y, Z) => < X : User | pending(Rest) > insertModule(Z, X, upModule(Q, false)) . rl < X : User | pending(m(Q) Rest) > insertedModule(X, Y) => < X : User | pending(Rest) > insertModule(Y, X, upModule(Q, false)) . rl < X : User | pending(m(Q) Rest) > insertedView(X, Y) => < X : User | pending(Rest) > insertModule(Y, X, upModule(Q, false)) . rl < X : User | pending(v(Q) Rest) > insertedModule(X, Y) => < X : User | pending(Rest) > insertView(Y, X, upView(Q)) . rl < X : User | pending(v(Q) Rest) > insertedView(X, Y) => < X : User | pending(Rest) > insertView(Y, X, upView(Q)) . rl < X : User | pending(nil) > insertedModule(X, Y) => < X : User | pending(nil) > reduceTerm(Y, X, 'META-LEVEL, run) . endm erew in RUN2 : <> < me : User | pending(prelude) > createInterpreter(interpreterManager, me, none) . mod RUN3 is pr META-INTERPRETER . pr SEQUENCE . op me : -> Oid . op User : -> Cid . op pending : Seq -> Attribute . vars X Y Z : Oid . var Q : Qid . var Rest : Seq . op run : -> Term . eq run = 'upModule[''META-LEVEL.Qid, 'false.Bool] . rl < X : User | pending(m(Q) Rest) > createdInterpreter(X, Y, Z) => < X : User | pending(Rest) > insertModule(Z, X, upModule(Q, false)) . rl < X : User | pending(m(Q) Rest) > insertedModule(X, Y) => < X : User | pending(Rest) > insertModule(Y, X, upModule(Q, false)) . rl < X : User | pending(m(Q) Rest) > insertedView(X, Y) => < X : User | pending(Rest) > insertModule(Y, X, upModule(Q, false)) . rl < X : User | pending(v(Q) Rest) > insertedModule(X, Y) => < X : User | pending(Rest) > insertView(Y, X, upView(Q)) . rl < X : User | pending(v(Q) Rest) > insertedView(X, Y) => < X : User | pending(Rest) > insertView(Y, X, upView(Q)) . rl < X : User | pending(nil) > insertedModule(X, Y) => < X : User | pending(nil) > reduceTerm(Y, X, 'META-LEVEL, run) . endm erew in RUN3 : <> < me : User | pending(prelude) > createInterpreter(interpreterManager, me, none) . maude-3.1/tests/Meta/metaIntReplace.expected0000644000175200017520000000415513366052720016056 00000000000000========================================== reduce in TEST : g(X:Foo) . rewrites: 1 result Foo: h(h(X:Foo)) ========================================== reduce in META1 : T . rewrites: 2 result FTheory: fth 'T is nil sorts 'Elt . none op 'f : 'Elt -> 'Elt [none] . none none endfth ========================================== reduce in META1 : M . rewrites: 2 result FModule: fmod 'M{'X :: 'T} is nil sorts none . none op 'g : 'X$Elt -> 'X$Elt [none] . none eq 'g['X:X$Elt] = 'f['f['X:X$Elt]] [none] . endfm ========================================== reduce in META1 : FOO . rewrites: 2 result FModule: fmod 'FOO is nil sorts 'Foo . none op 'h : 'Foo -> 'Foo [none] . none none endfm ========================================== reduce in META1 : V . rewrites: 2 result View: view 'V from 'T to 'FOO is sort 'Elt to 'Foo . op 'f to 'h . none endv ========================================== reduce in META1 : TEST . rewrites: 2 result FModule: fmod 'TEST is including 'M{'V} . sorts none . none none none none endfm ========================================== erewrite in META2 : <> < me : User | state: 1 > createInterpreter( interpreterManager, me, none) . rewrites: 17 result Configuration: <> < me : User | state: 7 > reducedTerm(me, interpreter( 0), 1, 'h['h['X:Foo]], 'Foo) ========================================== erewrite in META3 : <> < me : User | state: 1 > createInterpreter( interpreterManager, me, none) . rewrites: 21 result Configuration: <> < me : User | state: 9 > reducedTerm(me, interpreter( 0), 1, 'h['h['h['X:Foo]]], 'Foo) ========================================== erewrite in META4 : <> < me : User | state: 1 > createInterpreter( interpreterManager, me, none) . rewrites: 21 result Configuration: <> < me : User | state: 9 > reducedTerm(me, interpreter( 0), 1, 'h['h['X:Foo]], 'Foo) ========================================== erewrite in META5 : <> < me : User | state: 1 > createInterpreter( interpreterManager, me, none) . rewrites: 23 result Configuration: <> < me : User | state: 10 > reducedTerm(me, interpreter( 0), 1, 'k['k['X:Bar]], 'Bar) Bye. maude-3.1/tests/Meta/russianDollsFlat.expected0000644000175200017520000001373413333167347016463 00000000000000========================================== erewrite in RUSSIAN-DOLLS : <> < me : User | level: 0 > createInterpreter( interpreterManager, me, none) . rewrites: 6 result Configuration: <> < me : User | none > erewroteTerm(me, interpreter(0), 1, 's_^4['0.Zero], 'NzNat) ========================================== erewrite in RUSSIAN-DOLLS : <> < me : User | level: 1 > createInterpreter( interpreterManager, me, none) . rewrites: 11 result Configuration: <> < me : User | none > erewroteTerm(me, interpreter(0), 5, '__['<>.Portal,'<_:_|_>['me.Oid,'User.Cid,'none.AttributeSet], 'erewroteTerm['me.Oid,'interpreter['0.Zero],'s_['0.Zero],'_`[_`][ ''s_^4.Sort,''0.Zero.Constant],''NzNat.Sort]], 'Configuration) ========================================== erewrite in RUSSIAN-DOLLS : <> < me : User | level: 2 > createInterpreter( interpreterManager, me, none) . rewrites: 16 result Configuration: <> < me : User | none > erewroteTerm(me, interpreter(0), 10, '__['<>.Portal,'<_:_|_>['me.Oid,'User.Cid,'none.AttributeSet], 'erewroteTerm['me.Oid,'interpreter['0.Zero],'s_^5['0.Zero],'_`[_`][ ''__.Sort,'_`,_[''<>.Portal.Constant,'_`[_`][''<_:_|_>.Variable,'_`,_[ ''me.Oid.Constant,''User.Cid.Constant,''none.AttributeSet.Constant]], '_`[_`][''erewroteTerm.Sort,'_`,_[''me.Oid.Constant,'_`[_`][ ''interpreter.Sort,''0.Zero.Constant],'_`[_`][''s_.Sort,''0.Zero.Constant], '_`[_`][''_`[_`].Qid,'_`,_['''s_^4.Sort.Constant, '''0.Zero.Constant.Constant]],'''NzNat.Sort.Constant]]]], ''Configuration.Sort]], 'Configuration) ========================================== erewrite in RUSSIAN-DOLLS : <> < me : User | level: 3 > createInterpreter( interpreterManager, me, none) . rewrites: 21 result Configuration: <> < me : User | none > erewroteTerm(me, interpreter(0), 15, '__['<>.Portal,'<_:_|_>['me.Oid,'User.Cid,'none.AttributeSet], 'erewroteTerm['me.Oid,'interpreter['0.Zero],'s_^10['0.Zero],'_`[_`][ ''__.Sort,'_`,_[''<>.Portal.Constant,'_`[_`][''<_:_|_>.Variable,'_`,_[ ''me.Oid.Constant,''User.Cid.Constant,''none.AttributeSet.Constant]], '_`[_`][''erewroteTerm.Sort,'_`,_[''me.Oid.Constant,'_`[_`][ ''interpreter.Sort,''0.Zero.Constant],'_`[_`][''s_^5.Sort, ''0.Zero.Constant],'_`[_`][''_`[_`].Qid,'_`,_['''__.Sort.Constant,'_`[_`][ ''_`,_.Qid,'_`,_['''<>.Portal.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''<_:_|_>.Variable.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''me.Oid.Constant.Constant,'''User.Cid.Constant.Constant, '''none.AttributeSet.Constant.Constant]]]],'_`[_`][''_`[_`].Qid,'_`,_[ '''erewroteTerm.Sort.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''me.Oid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''interpreter.Sort.Constant,'''0.Zero.Constant.Constant]],'_`[_`][ ''_`[_`].Qid,'_`,_['''s_.Sort.Constant,'''0.Zero.Constant.Constant]], '_`[_`][''_`[_`].Qid,'_`,_['''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''s_^4.Sort.Constant.Constant,''''0.Zero.Constant.Constant.Constant]]]], ''''NzNat.Sort.Constant.Constant]]]]]]]], '''Configuration.Sort.Constant]]]],''Configuration.Sort]], 'Configuration) ========================================== erewrite in RUSSIAN-DOLLS : <> < me : User | level: 4 > createInterpreter( interpreterManager, me, none) . rewrites: 26 result Configuration: <> < me : User | none > erewroteTerm(me, interpreter(0), 20, '__['<>.Portal,'<_:_|_>['me.Oid,'User.Cid,'none.AttributeSet], 'erewroteTerm['me.Oid,'interpreter['0.Zero],'s_^15['0.Zero],'_`[_`][ ''__.Sort,'_`,_[''<>.Portal.Constant,'_`[_`][''<_:_|_>.Variable,'_`,_[ ''me.Oid.Constant,''User.Cid.Constant,''none.AttributeSet.Constant]], '_`[_`][''erewroteTerm.Sort,'_`,_[''me.Oid.Constant,'_`[_`][ ''interpreter.Sort,''0.Zero.Constant],'_`[_`][''s_^10.Sort, ''0.Zero.Constant],'_`[_`][''_`[_`].Qid,'_`,_['''__.Sort.Constant,'_`[_`][ ''_`,_.Qid,'_`,_['''<>.Portal.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''<_:_|_>.Variable.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''me.Oid.Constant.Constant,'''User.Cid.Constant.Constant, '''none.AttributeSet.Constant.Constant]]]],'_`[_`][''_`[_`].Qid,'_`,_[ '''erewroteTerm.Sort.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''me.Oid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''interpreter.Sort.Constant,'''0.Zero.Constant.Constant]],'_`[_`][ ''_`[_`].Qid,'_`,_['''s_^5.Sort.Constant,'''0.Zero.Constant.Constant]], '_`[_`][''_`[_`].Qid,'_`,_['''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''__.Sort.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''<>.Portal.Constant.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''<_:_|_>.Variable.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''me.Oid.Constant.Constant.Constant, ''''User.Cid.Constant.Constant.Constant, ''''none.AttributeSet.Constant.Constant.Constant]]]]]]]],'_`[_`][ ''_`[_`].Qid,'_`,_['''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''erewroteTerm.Sort.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''me.Oid.Constant.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''interpreter.Sort.Constant.Constant, ''''0.Zero.Constant.Constant.Constant]]]],'_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''s_.Sort.Constant.Constant,''''0.Zero.Constant.Constant.Constant]]]], '_`[_`][''_`[_`].Qid,'_`,_['''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''_`[_`].Qid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''''s_^4.Sort.Constant.Constant.Constant, '''''0.Zero.Constant.Constant.Constant.Constant]]]]]]]], '''''NzNat.Sort.Constant.Constant.Constant]]]]]]]]]]]]]]]], ''''Configuration.Sort.Constant.Constant]]]]]]]], '''Configuration.Sort.Constant]]]],''Configuration.Sort]], 'Configuration) Bye. maude-3.1/tests/Meta/metaUpModExp.expected0000644000175200017520000002004613140741643015525 00000000000000========================================== reduce in META-LEVEL : upImports('META-LEVEL) . rewrites: 1 result ImportList: protecting 'META-VIEW . protecting 'BOUND . ========================================== reduce in META-LEVEL : upImports('BAR) . rewrites: 1 result ImportList: including 'BOOL . including 'FOO * ( sort 'Foo to 'Baz, op 'a to 'b [none] ) . ========================================== reduce in META-LEVEL : upImports('BAR') . rewrites: 1 result ImportList: including 'BOOL . including 'FOO' * ( sort 'Foo to 'Quux, op '_+_ : 'Baz 'Baz -> 'Foo to '_._ [prec(27) gather('E 'e)], op '_+_ : 'Foo 'Foo -> 'Foo to '_*_ [prec(29) gather('E 'e)] ) . ========================================== reduce in META-LEVEL : upImports('BAZ) . rewrites: 1 result ImportList: including 'BOOL . including 'NAT + 'FOO' * ( sort 'Foo to 'Quux, label 'a to 'b, op '_+_ : 'Baz 'Baz -> 'Foo to '_._ [prec(27) gather('E 'e)], op '_+_ : 'Foo 'Foo -> 'Foo to '_*_ [prec(29) format('s 's 's 's)] ) . ========================================== reduce in META-LEVEL : upModule('BAZ, false) . rewrites: 1 result FModule: fmod 'BAZ is including 'BOOL . including 'NAT + 'FOO' * ( sort 'Foo to 'Quux, label 'a to 'b, op '_+_ : 'Baz 'Baz -> 'Foo to '_._ [prec(27) gather('E 'e)], op '_+_ : 'Foo 'Foo -> 'Foo to '_*_ [prec(29) format('s 's 's 's)] ) . sorts none . none none none none endfm ========================================== reduce in META-LEVEL : upModule('BAZ, true) . rewrites: 1 result FModule: fmod 'BAZ is nil sorts 'Bar ; 'Baz ; 'Bool ; 'Nat ; 'NzNat ; 'Quux ; 'Zero . subsort 'NzNat < 'Nat . subsort 'Quux < 'Bar . subsort 'Zero < 'Nat . op '0 : nil -> 'Zero [ctor] . op '_&_ : 'Nat 'Nat -> 'Nat [assoc comm prec(53) special( id-hook('ACU_NumberOpSymbol, '&) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_*_ : 'Nat 'Nat -> 'Nat [assoc comm prec(31) special( id-hook('ACU_NumberOpSymbol, '*) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_*_ : 'NzNat 'NzNat -> 'NzNat [assoc comm prec(31) special( id-hook('ACU_NumberOpSymbol, '*) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_*_ : 'Quux 'Quux -> 'Quux [assoc comm prec(29) format('s 's 's 's)] . op '_+_ : 'Nat 'Nat -> 'Nat [assoc comm prec(33) special( id-hook('ACU_NumberOpSymbol, '+) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_+_ : 'NzNat 'Nat -> 'NzNat [assoc comm prec(33) special( id-hook('ACU_NumberOpSymbol, '+) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_._ : 'Baz 'Baz -> 'Quux [prec(27) gather('E 'e)] . op '_<<_ : 'Nat 'Nat -> 'Nat [prec(35) gather('E 'e) special( id-hook('NumberOpSymbol, '<<) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_<=_ : 'Nat 'Nat -> 'Bool [prec(37) special( id-hook('NumberOpSymbol, '<=) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_<_ : 'Nat 'Nat -> 'Bool [prec(37) special( id-hook('NumberOpSymbol, '<) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_=/=_ : 'Universal 'Universal -> 'Bool [prec(51) poly(1 2) special( id-hook('EqualitySymbol, nil) term-hook('equalTerm, 'false.Bool) term-hook('notEqualTerm, 'true.Bool))] . op '_==_ : 'Universal 'Universal -> 'Bool [prec(51) poly(1 2) special( id-hook('EqualitySymbol, nil) term-hook('equalTerm, 'true.Bool) term-hook('notEqualTerm, 'false.Bool))] . op '_>=_ : 'Nat 'Nat -> 'Bool [prec(37) special( id-hook('NumberOpSymbol, '>=) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_>>_ : 'Nat 'Nat -> 'Nat [prec(35) gather('E 'e) special( id-hook('NumberOpSymbol, '>>) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_>_ : 'Nat 'Nat -> 'Bool [prec(37) special( id-hook('NumberOpSymbol, '>) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_^_ : 'Nat 'Nat -> 'Nat [prec(29) gather('E 'e) special( id-hook('NumberOpSymbol, '^) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_^_ : 'NzNat 'Nat -> 'NzNat [prec(29) gather('E 'e) special( id-hook('NumberOpSymbol, '^) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_and_ : 'Bool 'Bool -> 'Bool [assoc comm prec(55)] . op '_divides_ : 'NzNat 'Nat -> 'Bool [prec(51) special( id-hook('NumberOpSymbol, 'divides) op-hook('succSymbol, 's_, 'Nat, 'NzNat) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op '_implies_ : 'Bool 'Bool -> 'Bool [prec(61) gather('e 'E)] . op '_or_ : 'Bool 'Bool -> 'Bool [assoc comm prec(59)] . op '_quo_ : 'Nat 'NzNat -> 'Nat [prec(31) gather('E 'e) special( id-hook('NumberOpSymbol, 'quo) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_rem_ : 'Nat 'NzNat -> 'Nat [prec(31) gather('E 'e) special( id-hook('NumberOpSymbol, 'rem) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_xor_ : 'Bool 'Bool -> 'Bool [assoc comm prec(57)] . op '_xor_ : 'Nat 'Nat -> 'Nat [assoc comm prec(55) special( id-hook('ACU_NumberOpSymbol, 'xor) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_|_ : 'Nat 'Nat -> 'Nat [assoc comm prec(57) special( id-hook('ACU_NumberOpSymbol, '|) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op '_|_ : 'NzNat 'Nat -> 'NzNat [assoc comm prec(57) special( id-hook('ACU_NumberOpSymbol, '|) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'a : nil -> 'Baz [none] . op 'false : nil -> 'Bool [ctor special( id-hook('SystemFalse, nil))] . op 'gcd : 'Nat 'Nat -> 'Nat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'gcd) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'gcd : 'NzNat 'Nat -> 'NzNat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'gcd) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'if_then_else_fi : 'Bool 'Universal 'Universal -> 'Universal [poly(2 3 0) special( id-hook('BranchSymbol, nil) term-hook('1, 'true.Bool) term-hook('2, 'false.Bool))] . op 'lcm : 'Nat 'Nat -> 'Nat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'lcm) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'lcm : 'NzNat 'NzNat -> 'NzNat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'lcm) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'max : 'Nat 'Nat -> 'Nat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'max) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'max : 'NzNat 'Nat -> 'NzNat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'max) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'min : 'Nat 'Nat -> 'Nat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'min) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'min : 'NzNat 'NzNat -> 'NzNat [assoc comm special( id-hook('ACU_NumberOpSymbol, 'min) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'modExp : '`[Nat`] '`[Nat`] '`[Nat`] -> '`[Nat`] [special( id-hook('NumberOpSymbol, 'modExp) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'not_ : 'Bool -> 'Bool [prec(53)] . op 's_ : 'Nat -> 'NzNat [iter ctor special( id-hook('SuccSymbol, nil) term-hook('zeroTerm, '0.Zero))] . op 'sd : 'Nat 'Nat -> 'Nat [comm special( id-hook('CUI_NumberOpSymbol, 'sd) op-hook('succSymbol, 's_, 'Nat, 'NzNat))] . op 'true : nil -> 'Bool [ctor special( id-hook('SystemTrue, nil))] . none eq '_and_['A:Bool,'A:Bool] = 'A:Bool [none] . eq '_and_['A:Bool,'_xor_['B:Bool,'C:Bool]] = '_xor_['_and_['A:Bool,'B:Bool], '_and_['A:Bool,'C:Bool]] [none] . eq '_and_['false.Bool,'A:Bool] = 'false.Bool [none] . eq '_and_['true.Bool,'A:Bool] = 'A:Bool [none] . eq '_implies_['A:Bool,'B:Bool] = 'not_['_xor_['A:Bool,'_and_['A:Bool, 'B:Bool]]] [none] . eq '_or_['A:Bool,'B:Bool] = '_xor_['_and_['A:Bool,'B:Bool],'_xor_['A:Bool, 'B:Bool]] [none] . eq '_xor_['A:Bool,'A:Bool] = 'false.Bool [none] . eq '_xor_['false.Bool,'A:Bool] = 'A:Bool [none] . eq 'not_['A:Bool] = '_xor_['true.Bool,'A:Bool] [none] . endfm Bye. maude-3.1/tests/Meta/legacyMetaGetVariant.maude0000644000175200017520000000216713553733102016512 00000000000000set show timing off . fmod XOR is sort XOR . sort Elem . ops cst1 cst2 cst3 cst4 : -> Elem . subsort Elem < XOR . op _+_ : XOR XOR -> XOR [ctor assoc comm] . op 0 : -> XOR . op a : -> XOR . vars X Y : XOR . eq Y + 0 = Y [variant] . eq X + X = 0 [variant] . eq X + X + Y = Y [variant] . endfm fmod TEST is inc XOR . inc META-LEVEL . endfm red metaGetVariant(['XOR], upTerm(X:XOR + cst1), empty, 0, 0) . red metaGetVariant(upModule('XOR, false), upTerm(X:XOR + cst1), empty, 0, 0) . red metaGetVariant(['XOR], upTerm(X:XOR + cst1), empty, 10, 0) . red metaGetVariant(['XOR], upTerm(X:XOR + cst1), empty, 0, 1) . red metaGetVariant(['XOR], upTerm(X:XOR + cst1), empty, 0, 2) . red metaGetVariant(['XOR], upTerm(X:XOR + cst1), empty, 0, 3) . red metaGetVariant(['XOR], upTerm(X:XOR + cst1), empty, 0, 4) . red metaGetVariant(['XOR], upTerm(X:XOR + cst2), upTerm(X:XOR + a), 0, 0) . red metaGetVariant(['XOR], upTerm(X:XOR + cst2), upTerm(X:XOR + a), 0, 1) . red metaGetVariant(['XOR], upTerm(X:XOR + cst2), upTerm(X:XOR + a), 0, 2) . red metaGetVariant(['XOR], upTerm(X:XOR + cst2), upTerm(X:XOR + a), 0, 3) . maude-3.1/tests/Meta/metaIntNewNarrowSearch.expected0000644000175200017520000001226113730561347017555 00000000000000========================================== erewrite in NARROW-TEST : <> < me : User | start: ('g['j['A:Foo,'B:Foo]]),goal: 'C:Foo,fold: 'none > createInterpreter(interpreterManager, me, none) . rewrites: 17 mb applications: 0 equational rewrites: 8 rule rewrites: 5 variant narrowing steps: 3 narrowing steps: 1 result Configuration: <> < me : User | soln: 4,got: (gotNarrowingSearchResult( me, interpreter(0), 1, 'g['j['#1:Foo,'#2:Foo]], 'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, '#, '#1:Foo <- '@1:Foo ; '#2:Foo <- '@2:Foo ; 'C:Foo <- 'g['j['@1:Foo,'@2:Foo]], '@) ; gotNarrowingSearchResult(me, interpreter(0), 1, 'g['j['#1:Foo,'#2:Foo]], 'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, '#, '#1:Foo <- 'f['%2:Foo] ; '#2:Foo <- '%1:Foo ; 'C:Foo <- 'g['i['f['%1:Foo],'%2:Foo]], '%) ; gotNarrowingSearchResult(me, interpreter(0), 3, 'f['k['%2:Foo,'f['%3:Foo]]], 'Foo, 'A:Foo <- 'f['k['%1:Foo,'%2:Foo]] ; 'B:Foo <- '%3:Foo, '%, '%2:Foo <- '@1:Foo ; '%3:Foo <- '@2:Foo ; 'C:Foo <- 'f['k['@1:Foo,'f['@2:Foo]]], '@)),start: ('g['j['A:Foo,'B:Foo]]), goal: 'C:Foo,fold: 'none > noSuchResult(me, interpreter(0), 4, true) ========================================== erewrite in NARROW-TEST : <> < me : User | start: ('g['j['A:Foo,'B:Foo]]),goal: 'C:Foo,fold: 'match > createInterpreter(interpreterManager, me, none) . rewrites: 17 mb applications: 0 equational rewrites: 8 rule rewrites: 5 variant narrowing steps: 3 narrowing steps: 1 result Configuration: <> < me : User | soln: 4,got: (gotNarrowingSearchResult( me, interpreter(0), 1, 'g['j['#1:Foo,'#2:Foo]], 'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, '#, '#1:Foo <- '@1:Foo ; '#2:Foo <- '@2:Foo ; 'C:Foo <- 'g['j['@1:Foo,'@2:Foo]], '@) ; gotNarrowingSearchResult(me, interpreter(0), 1, 'g['j['#1:Foo,'#2:Foo]], 'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, '#, '#1:Foo <- 'f['%2:Foo] ; '#2:Foo <- '%1:Foo ; 'C:Foo <- 'g['i['f['%1:Foo],'%2:Foo]], '%) ; gotNarrowingSearchResult(me, interpreter(0), 3, 'f['k['%2:Foo,'f['%3:Foo]]], 'Foo, 'A:Foo <- 'f['k['%1:Foo,'%2:Foo]] ; 'B:Foo <- '%3:Foo, '%, '%2:Foo <- '@1:Foo ; '%3:Foo <- '@2:Foo ; 'C:Foo <- 'f['k['@1:Foo,'f['@2:Foo]]], '@)),start: ('g['j['A:Foo,'B:Foo]]), goal: 'C:Foo,fold: 'match > noSuchResult(me, interpreter(0), 4, true) ========================================== erewrite in NARROW-TEST : <> < me : User | start: ('g['j['A:Foo,'B:Foo]]),goal: 'C:Foo,fold: 'none > createInterpreter(interpreterManager, me, none) . rewrites: 17 mb applications: 0 equational rewrites: 8 rule rewrites: 5 variant narrowing steps: 3 narrowing steps: 1 result Configuration: <> < me : User | soln: 4,got: ( gotNarrowingSearchResultAndPath(me, interpreter(0), 1, 'g['j['#1:Foo, '#2:Foo]], 'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, nil, '#1:Foo <- '@1:Foo ; '#2:Foo <- '@2:Foo ; 'C:Foo <- 'g['j['@1:Foo,'@2:Foo]], '@) ; gotNarrowingSearchResultAndPath(me, interpreter(0), 1, 'g['j['#1:Foo,'#2:Foo]], 'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, nil, '#1:Foo <- 'f['%2:Foo] ; '#2:Foo <- '%1:Foo ; 'C:Foo <- 'g['i['f['%1:Foo],'%2:Foo]], '%) ; gotNarrowingSearchResultAndPath( me, interpreter(0), 3, 'g['j['#1:Foo,'#2:Foo]], 'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, { [], ', '#1:Foo <- 'f['k['%1:Foo,'%2:Foo]] ; '#2:Foo <- '%3:Foo ; 'X:Foo <- 'f['%3:Foo] ; 'Y:Foo <- '%1:Foo ; 'Z:Foo <- '%2:Foo, '%, 'f['k['%2:Foo,'f['%3:Foo]]],'Foo, 'A:Foo <- 'f['k['%1:Foo,'%2:Foo]] ; 'B:Foo <- '%3:Foo }, '%2:Foo <- '@1:Foo ; '%3:Foo <- '@2:Foo ; 'C:Foo <- 'f['k['@1:Foo,'f['@2:Foo]]], '@)),start: ('g['j['A:Foo,'B:Foo]]), goal: 'C:Foo,fold: 'none > noSuchResult(me, interpreter(0), 4, true) ========================================== erewrite in NARROW-TEST : <> < me : User | start: ('g['j['A:Foo,'B:Foo]]),goal: 'C:Foo,fold: 'match > createInterpreter(interpreterManager, me, none) . rewrites: 17 mb applications: 0 equational rewrites: 8 rule rewrites: 5 variant narrowing steps: 3 narrowing steps: 1 result Configuration: <> < me : User | soln: 4,got: ( gotNarrowingSearchResultAndPath(me, interpreter(0), 1, 'g['j['#1:Foo, '#2:Foo]], 'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, nil, '#1:Foo <- '@1:Foo ; '#2:Foo <- '@2:Foo ; 'C:Foo <- 'g['j['@1:Foo,'@2:Foo]], '@) ; gotNarrowingSearchResultAndPath(me, interpreter(0), 1, 'g['j['#1:Foo,'#2:Foo]], 'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, nil, '#1:Foo <- 'f['%2:Foo] ; '#2:Foo <- '%1:Foo ; 'C:Foo <- 'g['i['f['%1:Foo],'%2:Foo]], '%) ; gotNarrowingSearchResultAndPath( me, interpreter(0), 3, 'g['j['#1:Foo,'#2:Foo]], 'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, { [], ', '#1:Foo <- 'f['k['%1:Foo,'%2:Foo]] ; '#2:Foo <- '%3:Foo ; 'X:Foo <- 'f['%3:Foo] ; 'Y:Foo <- '%1:Foo ; 'Z:Foo <- '%2:Foo, '%, 'f['k['%2:Foo,'f['%3:Foo]]],'Foo, 'A:Foo <- 'f['k['%1:Foo,'%2:Foo]] ; 'B:Foo <- '%3:Foo }, '%2:Foo <- '@1:Foo ; '%3:Foo <- '@2:Foo ; 'C:Foo <- 'f['k['@1:Foo,'f['@2:Foo]]], '@)),start: ('g['j['A:Foo,'B:Foo]]), goal: 'C:Foo,fold: 'match > noSuchResult(me, interpreter(0), 4, true) Bye. maude-3.1/tests/Meta/metaPrintAttr.maude0000644000175200017520000000240011064254236015237 00000000000000set show timing off . fmod COND is sort Foo . ops a b c d e : -> Foo . ops f g : Foo Foo -> Foo . op h : Foo -> Foo . var X Y Z : Foo . ceq f(X, Y) = g(X, Z) if Z := h(Y) [print "X = " X ", Z = " Z] . endfm red f(a, b) . red in META-LEVEL : upModule('COND, false) . set print attribute on . red in META-LEVEL : metaReduce( fmod 'COND is including 'BOOL . sorts 'Foo . none op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'd : nil -> 'Foo [none] . op 'e : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [none] . op 'g : 'Foo 'Foo -> 'Foo [none] . op 'h : 'Foo -> 'Foo [none] . none ceq 'f['X:Foo,'Y:Foo] = 'g['X:Foo,'Z:Foo] if 'Z:Foo := 'h['Y:Foo] [print('"X = " 'X:Foo '", Z = " 'Z:Foo)] . endfm, 'f['a.Foo, 'b.Foo]) . red in META-LEVEL : metaReduce( fmod 'COND is including 'BOOL . sorts 'Foo . none op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'd : nil -> 'Foo [none] . op 'e : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [none] . op 'g : 'Foo 'Foo -> 'Foo [none] . op 'h : 'Foo -> 'Foo [none] . none ceq 'f['X:Foo,'Y:Foo] = 'g['X:Foo,'Z:Foo] if 'Z:Foo := 'h['Y:Foo] [print(nil)] . endfm, 'f['a.Foo, 'b.Foo]) . maude-3.1/tests/Meta/metaIntStrategy.maude0000644000175200017520000000605113565216260015576 00000000000000set show timing off . set show advisories off . load metaInterpreter fmod ROMAN-NUMERALS is sort RomanSymbol GenRomanNumeral . subsort RomanSymbol < GenRomanNumeral . ops M D C L X V I : -> RomanSymbol . op __ : GenRomanNumeral GenRomanNumeral -> GenRomanNumeral [ctor assoc] . var S : RomanSymbol . op _>_ : RomanSymbol RomanSymbol -> Bool . eq M > S = S =/= M . eq D > S = S =/= M and S =/= D . eq C > S = S == L or L > S . eq L > S = S == X or X > S . eq X > S = S == V or S == I . eq V > S = S == I . eq I > S = false . endfm mod RN-SIMPL-RULES is protecting ROMAN-NUMERALS . vars S1 S2 : RomanSymbol . rl [simp] : I I I I I => V . rl [simp] : V V => X . rl [simp] : X X X X X => L . rl [simp] : L L => C . rl [simp] : C C C C C => D . rl [simp] : D D => M . rl [add] : I X => V I I I I . rl [add] : I V => I I I I . rl [add] : X L => X X X X . rl [add] : X C => L X X X X . rl [add] : C D => C C C C . rl [add] : C M => D X X X X . crl [sort] : S1 S2 => S2 S1 if S2 > S1 . endm smod RN-SIMP is protecting RN-SIMPL-RULES . strats simplify additive-normal-form @ GenRomanNumeral . sd simplify := simp ? simplify : idle . sd additive-normal-form := simplify ; add ! ; sort ! ; simplify . endsm mod RUN is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op option:_ : SrewriteOption -> Attribute . op input:_@_ : Term Strategy -> Attribute . op output:_ : TermList -> Attribute . op solcount:_ : Nat -> Attribute . op n1999 : -> Term . eq n1999 = '__['M.RomanSymbol, 'C.RomanSymbol, 'M.RomanSymbol, 'X.RomanSymbol, 'C.RomanSymbol, 'I.RomanSymbol, 'X.RomanSymbol] . vars X Y Z : Oid . var C : RewriteCount . var O : SrewriteOption . vars T R : Term . var Ty : Type . var S : Strategy . var TL : TermList . var N : Nat . var Attrs : AttributeSet . rl < X : User | Attrs > createdInterpreter(X, Y, Z) => < X : User | Attrs > insertModule(Z, X, upModule('RN-SIMP, true)) . rl < X : User | option: O, (input: T @ S), Attrs > insertedModule(X, Y) => < X : User | option: O, (input: T @ S), solcount: 0, Attrs > srewriteTerm(Y, X, 'RN-SIMP, T, S, O, 0) . rl < X : User | option: O, (input: T @ S), solcount: N, output: TL, Attrs > srewroteTerm(X, Y, C, R, Ty) => < X : User | option: O, (input: T @ S), solcount: s(N), output: (TL , R), Attrs > srewriteTerm(Y, X, 'RN-SIMP, T, S, O, s(N)) . endm erew in RUN : <> < me : User | option: breadthFirst, output: empty, input: n1999 @ 'additive-normal-form[[empty]] > createInterpreter(interpreterManager, me, none) . erew in RUN : <> < me : User | option: depthFirst, output: empty, input: n1999 @ 'additive-normal-form[[empty]] > createInterpreter(interpreterManager, me, none) . erew in RUN : <> < me : User | option: depthFirst, output: empty, input: n1999 @ 'add[none]{empty} > createInterpreter(interpreterManager, me, none) . erew in RUN : <> < me : User | option: depthFirst, output: empty, input: n1999 @ 'sort[none]{empty} ; 'add[none]{empty} > createInterpreter(interpreterManager, me, none) . maude-3.1/tests/Meta/russianDollsNonFlat2.maude0000644000175200017520000000643013522536500016474 00000000000000set show timing off . set show advisories off . *** *** Run nested meta-interpreters with structured meta-modules. *** This version tests parameterized views. *** load metaInterpreter view ListOfSets{X :: TRIV} from TRIV to LIST{Set*{X}} is sort Elt to List{Set*{X}} . endv mod RUSSIAN-DOLLS is pr META-INTERPRETER . pr MAP{Nat, ListOfSets{String}} . sort ViewCmd ModuleCmd Seq . subsort ViewCmd ModuleCmd < Seq . op v : Qid -> ViewCmd . op m : Qid -> ModuleCmd . op __ : Seq Seq -> Seq [assoc id: nil] . op nil : -> Seq . op predef : -> Seq . eq predef = m('TRUTH-VALUE) m('BOOL-OPS) m('TRUTH) m('BOOL) m('EXT-BOOL) m('NAT) m('STRING) m('BOUND) m('QID) m('TRIV) v('Bool) v('Nat) v('String) v('Qid) m('LIST) v('List) m('SET) v('Set) m('MAP) v('Map) m('SET*) v('Set*) m('NAT-LIST) m('QID-LIST) m('QID-SET) m('META-TERM) m('META-CONDITION) m('META-STRATEGY) m('META-MODULE) m('META-VIEW) m('META-LEVEL) m('CONFIGURATION) m('META-INTERPRETER) v('ListOfSets) m('RUSSIAN-DOLLS) . op me : -> Oid . op User : -> Cid . op pending:_ : Seq -> Attribute . op level:_ : Nat -> Attribute . vars X Y Z : Oid . var Q : Qid . var Rest : Seq . var AS : AttributeSet . var N : Nat . op problem : Nat -> Term . eq problem(s N) = '__['<>.Portal,'createInterpreter['interpreterManager.Oid,'me.Oid,'none.InterpreterOptionSet], '<_:_|_>['me.Oid,'User.Cid, '_`,_[ 'pending:_['predef.Seq], 'level:_[upTerm(N)] ] ] ] . eq problem(0) = 'reverse[ '__['`{_`}['_`,_['"a".Char,'"e".Char]],'`{_`}['_`,_['"i".Char,'"y".Char]],'`{_`}['_`,_['"b".Char,'"c".Char]]] ] . rl < X : User | pending: (m(Q) Rest), AS > createdInterpreter(X, Y, Z) => < X : User | pending: Rest, AS > insertModule(Z, X, upModule(Q, false)) . rl < X : User | pending: (m(Q) Rest), AS > insertedModule(X, Y) => < X : User | pending: Rest, AS > insertModule(Y, X, upModule(Q, false)) . rl < X : User | pending: (m(Q) Rest), AS > insertedView(X, Y) => < X : User | pending: Rest, AS > insertModule(Y, X, upModule(Q, false)) . rl < X : User | pending: (v(Q) Rest), AS > insertedModule(X, Y) => < X : User | pending: Rest, AS > insertView(Y, X, upView(Q)) . rl < X : User | pending: (v(Q) Rest), AS > insertedView(X, Y) => < X : User | pending: Rest, AS > insertView(Y, X, upView(Q)) . rl < X : User | pending: nil, level: N > insertedModule(X, Y) => < X : User | pending: nil, level: N > erewriteTerm(Y, X, unbounded, 1, 'RUSSIAN-DOLLS, problem(N)) . endm erew in RUSSIAN-DOLLS : <> < me : User | pending: predef, level: 0 > createInterpreter(interpreterManager, me, none) . erew in RUSSIAN-DOLLS : <> < me : User | pending: predef, level: 1 > createInterpreter(interpreterManager, me, none) . erew in RUSSIAN-DOLLS : <> < me : User | pending: predef, level: 2 > createInterpreter(interpreterManager, me, none) . erew in RUSSIAN-DOLLS : <> < me : User | pending: predef, level: 3 > createInterpreter(interpreterManager, me, none) . erew in RUSSIAN-DOLLS : <> < me : User | pending: predef, level: 4 > createInterpreter(interpreterManager, me, none) . maude-3.1/tests/Meta/metaSearch.maude0000644000175200017520000000717610153435615014534 00000000000000set show timing off . set show advisories off . mod SEARCH-TEST is sort Nat . op _+_ : Nat Nat -> Nat [assoc comm prec 5] . op _*_ : Nat Nat -> Nat [assoc comm prec 3] . ops a b c d e 0 1 : -> Nat . vars W X Y Z : Nat . eq 0 * X = 0 . eq 1 * X = X . eq 0 + X = X . rl X * (Y + Z) => X * Y + X * Z . rl X * Y + X * Z => X * (Y + Z) . endm select META-LEVEL . red metaSearch(['SEARCH-TEST], '_*_['a.Nat, '_+_['b.Nat, 'c.Nat]], 'X:Nat, '_*_['Y:Nat, 'Z:Nat] := 'X:Nat, '*, 100, 0) . red metaSearch(['SEARCH-TEST], '_*_['a.Nat, '_+_['b.Nat, 'c.Nat]], 'X:Nat, '_*_['Y:Nat, 'Z:Nat] := 'X:Nat, '*, 100, 1) . red metaSearch(['SEARCH-TEST], '_*_['a.Nat, '_+_['b.Nat, 'c.Nat]], 'X:Nat, '_*_['Y:Nat, 'Z:Nat] := 'X:Nat, '*, 100, 2) . red metaSearch(['SEARCH-TEST], '_*_['a.Nat, '_+_['b.Nat, 'c.Nat]], 'X:Nat, '_*_['Y:Nat, 'Z:Nat] := 'X:Nat /\ 'Y:Nat = 'a.Nat, '*, 100, 0) . red metaSearch(['SEARCH-TEST], '_*_['a.Nat, '_+_['b.Nat, 'c.Nat]], 'X:Nat, '_*_['Y:Nat, 'Z:Nat] := 'X:Nat /\ 'Y:Nat = 'a.Nat, '*, 100, 1) . red metaSearch(['SEARCH-TEST], '_*_['a.Nat, '_+_['b.Nat, 'c.Nat]], 'X:Nat, nil, '*, 100, 0) . red metaSearch(['SEARCH-TEST], '_*_['a.Nat, '_+_['b.Nat, 'c.Nat]], 'X:Nat, nil, '*, 100, 1) . red metaSearch(['SEARCH-TEST], '_*_['a.Nat, '_+_['b.Nat, 'c.Nat]], 'X:Nat, nil, '*, 100, 2) . red metaSearch(['SEARCH-TEST], '_*_['a.Nat, '_+_['b.Nat, 'c.Nat]], 'X:Nat, nil, '!, 100, 0) . red metaSearch(['SEARCH-TEST], '_*_['a.Nat, '_+_['b.Nat, 'c.Nat]], 'X:Nat, nil, '+, 100, 0) . red metaSearch(['SEARCH-TEST], '_*_['a.Nat, '_+_['b.Nat, 'c.Nat]], 'X:Nat, nil, '+, 100, 1) . red metaSearch(['SEARCH-TEST], '_+_['_*_['a.Nat,'b.Nat],'_*_['a.Nat,'c.Nat]], '_*_['X:Nat, 'Y:Nat], nil, '*, 100, 0) . red metaSearch(['SEARCH-TEST], '_+_['_*_['a.Nat,'b.Nat],'_*_['a.Nat,'c.Nat]], '_*_['X:Nat, 'Y:Nat], nil, '*, 100, 1) . red metaSearch(['SEARCH-TEST], '_+_['_*_['a.Nat,'b.Nat],'_*_['a.Nat,'c.Nat]], '_*_['X:Nat, 'Y:Nat], nil, '*, 0, 0) . red metaSearch(['SEARCH-TEST], '_+_['_*_['a.Nat,'b.Nat],'_*_['a.Nat,'c.Nat], '_*_['a.Nat,'d.Nat]], '_*_['X:Nat, 'Y:Nat], nil, '*, 100, 0) . red metaSearch(['SEARCH-TEST], '_+_['_*_['a.Nat,'b.Nat],'_*_['a.Nat,'c.Nat], '_*_['a.Nat,'d.Nat]], '_*_['X:Nat, 'Y:Nat], nil, '*, 100, 1) . red metaSearch(['SEARCH-TEST], '_+_['_*_['a.Nat,'b.Nat],'_*_['a.Nat,'c.Nat], '_*_['a.Nat,'d.Nat]], '_*_['X:Nat, 'Y:Nat], nil, '*, 1, 0) . red metaSearch(['SEARCH-TEST], '_+_['_*_['a.Nat,'b.Nat],'_*_['a.Nat,'c.Nat], '_*_['a.Nat,'d.Nat]], '_*_['X:Nat, 'Y:Nat], nil, '*, 1, 1) . mod SEARCH is sort State . ops a b c d e : -> State . rl [a-move1] : a => b . rl [a-move2] : a => c . rl [b-move] : b => d . rl [c-move] : c => e . endm select META-LEVEL . red metaSearch(['SEARCH], 'a.State, 'e.State, nil, '*, unbounded, 0) . red metaSearch(['SEARCH], 'a.State, 'e.State, nil, '*, unbounded, 1) . red metaSearchPath(['SEARCH], 'a.State, 'e.State, nil, '*, unbounded, 0) . red metaSearchPath(['SEARCH], 'a.State, 'e.State, nil, '*, unbounded, 1) . mod ARITH is inc INT . vars I J K L : Int . rl I * (J + K) => I * J + I * K . rl I * J + I * K => I * (J + K) . ops a b c d e : -> Int . endm select META-LEVEL . red metaSearchPath(['ARITH], '_*_[ '_+_['a.Int, 'b.Int], '_+_['c.Int, 'd.Int] ], '_+_['I:Int, 'J:Int, 'K:Int, 'L:Int], nil, '*, unbounded, 0) . maude-3.1/tests/Meta/metaIntPrint.expected0000644000175200017520000000401513562376757015613 00000000000000========================================== erewrite in PRINT-TEST : <> < me : User | term: upTerm(1/2),flags: mixfix > createInterpreter(interpreterManager, me, none) . rewrites: 6 result Configuration: <> < me : User | none > printedTerm(me, interpreter(0), 's '0 '/ 's_^2 '`( '0 '`)) ========================================== erewrite in PRINT-TEST : <> < me : User | term: upTerm(1/2),flags: number > createInterpreter(interpreterManager, me, none) . rewrites: 6 result Configuration: <> < me : User | none > printedTerm(me, interpreter(0), '_/_ '`( '1 '`, '2 '`)) ========================================== erewrite in PRINT-TEST : <> < me : User | term: upTerm(1/2),flags: rat > createInterpreter(interpreterManager, me, none) . rewrites: 6 result Configuration: <> < me : User | none > printedTerm(me, interpreter(0), '1/2) ========================================== erewrite in PRINT-TEST : <> < me : User | term: upTerm(X:Rat + 1/2),flags: rat > createInterpreter(interpreterManager, me, none) . rewrites: 6 result Configuration: <> < me : User | none > printedTerm(me, interpreter(0), '_+_ '`( 'X '`, '1/2 '`)) ========================================== erewrite in PRINT-TEST : <> < me : User | term: upTerm(X:Rat + 1/2),flags: ( mixfix rat) > createInterpreter(interpreterManager, me, none) . rewrites: 6 result Configuration: <> < me : User | none > printedTerm(me, interpreter(0), 'X '+ '1/2) ========================================== erewrite in PRINT-TEST : <> < me : User | term: upTerm(X:Rat + 1/2),flags: ( mixfix number) > createInterpreter(interpreterManager, me, none) . rewrites: 6 result Configuration: <> < me : User | none > printedTerm(me, interpreter(0), 'X '+ '1 '/ '2) ========================================== erewrite in PRINT-TEST : <> < me : User | term: upTerm(X:Rat + 1/2),flags: mixfix > createInterpreter(interpreterManager, me, none) . rewrites: 6 result Configuration: <> < me : User | none > printedTerm(me, interpreter(0), 'X '+ 's '0 '/ 's_^2 '`( '0 '`)) Bye. maude-3.1/tests/Meta/metaMetadata0000755000175200017520000000035410511606033013737 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaMetadata.maude -no-banner -no-advise \ > metaMetadata.out 2>&1 diff $srcdir/metaMetadata.expected metaMetadata.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaReduce.expected0000644000175200017520000000452713140741642015240 00000000000000========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is nil sorts 'Foo . none op 'a : nil -> 'Foo [none] . none none endfm, 'a.Foo) . rewrites: 1 result ResultPair: {'a.Foo,'Foo} ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is nil sorts 'Foo . none (op 'b : nil -> 'Foo [none] . op 'f : 'Foo -> 'Foo [strat(0)] .) op 'a : nil -> 'Foo [none] . none eq 'a.Foo = 'b.Foo [none] . endfm, 'f['a.Foo]) . rewrites: 1 result ResultPair: {'f['a.Foo],'Foo} ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is nil sorts 'Foo . none (op 'b : nil -> 'Foo [none] . op 'f : 'Foo -> 'Foo [strat(1 0)] .) op 'a : nil -> 'Foo [none] . none eq 'a.Foo = 'b.Foo [none] . endfm, 'f['a.Foo]) . rewrites: 2 result ResultPair: {'f['b.Foo],'Foo} ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is protecting 'STRING . sorts none . none none none none endfm, '"a".String) . rewrites: 1 result ResultPair: {'"a".Char,'Char} ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is protecting 'STRING . sorts none . none none none none endfm, '"this is a string".String) . rewrites: 1 result ResultPair: {'"this is a string".String,'String} ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is protecting 'STRING . sorts none . none none none none endfm, '"this is\na string".String) . rewrites: 1 result ResultPair: {'"this is\na string".String,'String} ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is protecting 'STRING . sorts none . none none none none endfm, '"\n".String) . rewrites: 1 result ResultPair: {'"\n".Char,'Char} ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is protecting 'FLOAT . sorts none . none none none none endfm, 'pi.Float) . rewrites: 2 result ResultPair: {'3.1415926535897931.FiniteFloat,'FiniteFloat} ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is protecting 'INT . sorts 'Foo . none op 'a : nil -> 'Foo [none] . none none endfm, '_+_['s_['0.Int],'s_^12['0.Int]]) . rewrites: 2 result ResultPair: {'s_^13['0.Zero],'NzNat} Bye. maude-3.1/tests/Meta/metaTerm.expected0000644000175200017520000000264613140741642014740 00000000000000========================================== reduce in QID : 'a:s . rewrites: 0 result Qid: 'a:s ========================================== reduce in META-TERM : 'a:s . rewrites: 0 result Variable: 'a:s ========================================== reduce in META-TERM : ''a:b . rewrites: 0 result Variable: ''a:b ========================================== reduce in META-TERM : getName('a.s) . rewrites: 6 result Sort: 'a ========================================== reduce in META-TERM : getType('a.s) . rewrites: 7 result Sort: 's ========================================== reduce in META-TERM : getName('a:s) . rewrites: 6 result Sort: 'a ========================================== reduce in META-TERM : getType('a:s) . rewrites: 7 result Sort: 's ========================================== reduce in META-TERM : '`[s`] . rewrites: 0 result Kind: '`[s`] ========================================== reduce in META-TERM : '`[s`,t`] . rewrites: 0 result Kind: '`[s`,t`] ========================================== reduce in META-TERM : getName('a.`[s`,t`]) . rewrites: 6 result Sort: 'a ========================================== reduce in META-TERM : getType('a.`[s`,t`]) . rewrites: 7 result Kind: '`[s`,t`] ========================================== reduce in META-TERM : getName('a:`[s`,t`]) . rewrites: 6 result Sort: 'a ========================================== reduce in META-TERM : getType('a:`[s`,t`]) . rewrites: 7 result Kind: '`[s`,t`] Bye. maude-3.1/tests/Meta/metaIntSort0000755000175200017520000000035013335700301013615 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaIntSort.maude -no-banner -no-advise \ > metaIntSort.out 2>&1 diff $srcdir/metaIntSort.expected metaIntSort.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaIntVariantMatch0000755000175200017520000000041013726057376015271 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaIntVariantMatch.maude -no-banner -no-advise \ > metaIntVariantMatch.out 2>&1 diff $srcdir/metaIntVariantMatch.expected metaIntVariantMatch.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaIntParse.maude0000644000175200017520000000266013562377321015053 00000000000000set show timing off . set show advisories off . *** *** Test parsing in the meta-interpreter. *** load metaInterpreter fmod FOO is inc RAT . sort Foo . op 0 : -> Foo . endfm mod PARSE-TEST is pr META-INTERPRETER . pr RAT . op me : -> Oid . op User : -> Cid . op term:_ : Term -> Attribute . op qids:_ : QidList -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . var QL : QidList . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('FOO, true)) . rl < X : User | AS, qids: QL > insertedModule(X, Y) => < X : User | AS > parseTerm(Y, X, 'FOO, 'X:Rat, QL, anyType) . endm erew in PARSE-TEST : <> < me : User | qids: '1/2 > createInterpreter(interpreterManager, me, none) . erew in PARSE-TEST : <> < me : User | qids: ('1/2 '+ 'X:Rat) > createInterpreter(interpreterManager, me, none) . erew in PARSE-TEST : <> < me : User | qids: ('1/2 '+ 'X) > createInterpreter(interpreterManager, me, none) . erew in PARSE-TEST : <> < me : User | qids: ('1/2 '+ 'bad) > createInterpreter(interpreterManager, me, none) . erew in PARSE-TEST : <> < me : User | qids: ('1/2 '- '1) > createInterpreter(interpreterManager, me, none) . erew in PARSE-TEST : <> < me : User | qids: ('1/2 '- '1 '- '1 '/ '2) > createInterpreter(interpreterManager, me, none) . erew in PARSE-TEST : <> < me : User | qids: '0 > createInterpreter(interpreterManager, me, none) . maude-3.1/tests/Meta/metaSearch0000755000175200017520000000034410511605304013423 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaSearch.maude -no-banner -no-advise \ > metaSearch.out 2>&1 diff $srcdir/metaSearch.expected metaSearch.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaIntVariantUnify2.maude0000644000175200017520000001452213724264472016504 00000000000000set show timing off . *** *** Test variant unification in the meta-interpreter, with new delay, filter semantics. *** load metaInterpreter fmod XOR is sort XOR . sort Elem . ops c1 c2 c3 c4 : -> Elem . subsort Elem < XOR . op _+_ : XOR XOR -> XOR [ctor assoc comm] . op 0 : -> XOR . op a : -> XOR . vars X Y : XOR . eq Y + 0 = Y [variant] . eq X + X = 0 [variant] . eq X + X + Y = Y [variant] . endfm mod VARIANT-UNIFY-TEST is pr META-INTERPRETER . sort MsgList . subsort Msg < MsgList . op me : -> Oid . op User : -> Cid . op problem:(_,_) : UnificationProblem TermList -> Attribute . op options:_ : VariantOptionSet -> Attribute . op soln:_ : Nat -> Attribute . op result : MsgList -> Attribute . op _,_ : MsgList MsgList -> MsgList [assoc id: nil] . op nil : -> MsgList . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . var V : Term . var TL : TermList . var S : Substitution . var Q : Qid . var B : Bool . var P : Parent . var R : RewriteCount . var ML : MsgList . var UP : UnificationProblem . var VO : VariantOptionSet . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('XOR, true)) . rl < X : User | AS, problem:(UP, TL), options: VO > insertedModule(X, Y) => < X : User | AS, problem:(UP, TL), options: VO, soln: 1, result(nil) > getVariantUnifier(Y, X, 'XOR, UP, TL, '#, VO, 0) . rl < X : User | AS, problem:(UP, TL), options: VO, soln: N, result(ML) > gotVariantUnifier(X, Y, R, S, Q) => < X : User | AS, problem:(UP, TL), options: VO, soln: (N + 1), result(ML, gotVariantUnifier(X, Y, R, S, Q)) > getVariantUnifier(Y, X, 'XOR, UP, TL, '#, VO, N) . endm erew in VARIANT-UNIFY-TEST : <> < me : User | problem: ('_+_['X:XOR, 'c1.Elem] =? '_+_['Y:XOR, 'c2.Elem], empty), options: none > createInterpreter(interpreterManager, me, none) . erew in VARIANT-UNIFY-TEST : <> < me : User | problem: ('_+_['X:XOR, 'c1.Elem] =? '_+_['Y:XOR, 'c2.Elem], empty), options: delay > createInterpreter(interpreterManager, me, none) . erew in VARIANT-UNIFY-TEST : <> < me : User | problem: ('_+_['X:XOR, 'c1.Elem] =? '_+_['Y:XOR, 'c2.Elem], empty), options: filter > createInterpreter(interpreterManager, me, none) . erew in VARIANT-UNIFY-TEST : <> < me : User | problem: ('_+_['X:XOR, 'c1.Elem] =? '_+_['Y:XOR, 'c2.Elem], empty), options: (delay filter) > createInterpreter(interpreterManager, me, none) . filtered variant unify in XOR : X:XOR + c1 =? Y:XOR + c2 . erew in VARIANT-UNIFY-TEST : <> < me : User | problem: ('_+_['X:XOR, 'c1.Elem] =? '_+_['Y:XOR, 'c2.Elem], '_+_['X:XOR, 'c1.Elem]), options: none > createInterpreter(interpreterManager, me, none) . erew in VARIANT-UNIFY-TEST : <> < me : User | problem: ('_+_['X:XOR, 'c1.Elem] =? '_+_['Y:XOR, 'c2.Elem], '_+_['X:XOR, 'c1.Elem]), options: delay > createInterpreter(interpreterManager, me, none) . erew in VARIANT-UNIFY-TEST : <> < me : User | problem: ('_+_['X:XOR, 'c1.Elem] =? '_+_['Y:XOR, 'c2.Elem], '_+_['X:XOR, 'c1.Elem]), options: filter > createInterpreter(interpreterManager, me, none) . erew in VARIANT-UNIFY-TEST : <> < me : User | problem: ('_+_['X:XOR, 'c1.Elem] =? '_+_['Y:XOR, 'c2.Elem], '_+_['X:XOR, 'c1.Elem]), options: (delay filter) > createInterpreter(interpreterManager, me, none) . filtered variant unify in XOR : X:XOR + c1 =? Y:XOR + c2 such that X:XOR + c1 irreducible . mod DISJOINT-VARIANT-UNIFY-TEST is pr META-INTERPRETER . sort MsgList . subsort Msg < MsgList . op me : -> Oid . op User : -> Cid . op problem:(_,_) : UnificationProblem TermList -> Attribute . op options:_ : VariantOptionSet -> Attribute . op soln:_ : Nat -> Attribute . op result : MsgList -> Attribute . op _,_ : MsgList MsgList -> MsgList [assoc id: nil] . op nil : -> MsgList . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . var V : Term . var TL : TermList . var S S' : Substitution . var Q : Qid . var B : Bool . var P : Parent . var R : RewriteCount . var ML : MsgList . var UP : UnificationProblem . var VO : VariantOptionSet . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('XOR, true)) . rl < X : User | AS, problem:(UP, TL), options: VO > insertedModule(X, Y) => < X : User | AS, problem:(UP, TL), options: VO, soln: 1, result(nil) > getDisjointVariantUnifier(Y, X, 'XOR, UP, TL, '#, VO, 0) . rl < X : User | AS, problem:(UP, TL), options: VO, soln: N, result(ML) > gotDisjointVariantUnifier(X, Y, R, S, S', Q) => < X : User | AS, problem:(UP, TL), options: VO, soln: (N + 1), result(ML, gotDisjointVariantUnifier(X, Y, R, S, S', Q)) > getDisjointVariantUnifier(Y, X, 'XOR, UP, TL, '#, VO, N) . endm erew in DISJOINT-VARIANT-UNIFY-TEST : <> < me : User | problem: ('_+_['X:XOR, 'c1.Elem] =? '_+_['Y:XOR, 'c2.Elem], empty), options: none > createInterpreter(interpreterManager, me, none) . erew in DISJOINT-VARIANT-UNIFY-TEST : <> < me : User | problem: ('_+_['X:XOR, 'c1.Elem] =? '_+_['Y:XOR, 'c2.Elem], empty), options: delay > createInterpreter(interpreterManager, me, none) . erew in DISJOINT-VARIANT-UNIFY-TEST : <> < me : User | problem: ('_+_['X:XOR, 'c1.Elem] =? '_+_['Y:XOR, 'c2.Elem], empty), options: filter > createInterpreter(interpreterManager, me, none) . erew in DISJOINT-VARIANT-UNIFY-TEST : <> < me : User | problem: ('_+_['X:XOR, 'c1.Elem] =? '_+_['Y:XOR, 'c2.Elem], empty), options: (delay filter) > createInterpreter(interpreterManager, me, none) . erew in DISJOINT-VARIANT-UNIFY-TEST : <> < me : User | problem: ('_+_['X:XOR, 'c1.Elem] =? '_+_['Y:XOR, 'c2.Elem], '_+_['X:XOR, 'c1.Elem]), options: none > createInterpreter(interpreterManager, me, none) . erew in DISJOINT-VARIANT-UNIFY-TEST : <> < me : User | problem: ('_+_['X:XOR, 'c1.Elem] =? '_+_['Y:XOR, 'c2.Elem], '_+_['X:XOR, 'c1.Elem]), options: delay > createInterpreter(interpreterManager, me, none) . erew in DISJOINT-VARIANT-UNIFY-TEST : <> < me : User | problem: ('_+_['X:XOR, 'c1.Elem] =? '_+_['Y:XOR, 'c2.Elem], '_+_['X:XOR, 'c1.Elem]), options: filter > createInterpreter(interpreterManager, me, none) . erew in DISJOINT-VARIANT-UNIFY-TEST : <> < me : User | problem: ('_+_['X:XOR, 'c1.Elem] =? '_+_['Y:XOR, 'c2.Elem], '_+_['X:XOR, 'c1.Elem]), options: (delay filter) > createInterpreter(interpreterManager, me, none) . maude-3.1/tests/Meta/metaSpecial.expected0000644000175200017520000001360313562400114015376 00000000000000========================================== reduce in META-LEVEL : metaParse(fmod 'FOO is including 'QID . sorts 'Foo ; 'Token . none op '`[_`] : 'Token -> 'Foo [none] . op 'token : 'Qid -> 'Token [special( id-hook('Bubble, '1 '1) op-hook('qidSymbol, ', nil, 'Qid))] . none none endfm, '`[ 'unseen '`], anyType) . rewrites: 2 result ResultPair: {'`[_`]['token[''unseen.Qid]],'Foo} ========================================== reduce in META-LEVEL : metaParse(fmod 'FOO is including 'QID-LIST . sorts 'Foo ; 'Token . none op '`[_`] : 'Token -> 'Foo [none] . op 'token : 'Qid -> 'Token [special( id-hook('Bubble, '0 '1) op-hook('qidSymbol, ', nil, 'Qid) op-hook('nilQidListSymbol, 'nil, nil, 'QidList) id-hook('Exclude, 'assoc 'com 'memo))] . none none endfm, '`[ '`], anyType) . rewrites: 2 result ResultPair: {'`[_`]['token['nil.QidList]],'`[Foo`]} ========================================== reduce in META-LEVEL : metaParse(fmod 'FOO is including 'QID-LIST . sorts 'Foo ; 'Token . none op '`[_`] : 'Token -> 'Foo [none] . op 'tokens : 'Qid -> 'Token [special( id-hook('Bubble, '0 '10) op-hook('qidSymbol, ', nil, 'Qid) op-hook('nilQidListSymbol, 'nil, nil, 'QidList) op-hook('qidListSymbol, '__, 'QidList 'QidList, 'QidList) id-hook('Exclude, 'assoc 'com 'memo))] . none none endfm, '`[ 'a 'b 'c '`], anyType) . rewrites: 2 result ResultPair: {'`[_`]['tokens['__[''a.Qid,''b.Qid,''c.Qid]]],'`[Foo`]} ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is nil sorts 'Foo . none op 'a : nil -> 'Foo [none] . none none endfm, '_::`Foo['a.Foo]) . rewrites: 0 result [ResultPair?]: metaReduce(fmod 'FOO is nil sorts 'Foo . none op 'a : nil -> 'Foo [none] . none none endfm, '_::`Foo['a.Foo]) ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is nil sorts 'Bool ; 'Foo . none (op 'a : nil -> 'Foo [none] . op 'false : nil -> 'Bool [special( id-hook('SystemFalse, nil))] .) op 'true : nil -> 'Bool [special( id-hook('SystemTrue, nil))] . none none endfm, '_::`Foo['a.Foo]) . rewrites: 2 result ResultPair: {'true.Bool,'Bool} ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is nil sorts 'Foo . none (op '+ : 'Foo 'Foo -> 'Foo [id('id.Foo)] . op 'a : nil -> 'Foo [none] .) op 'id : nil -> 'Foo [none] . none none endfm, '+['a.Foo,'id.Foo]) . rewrites: 1 result ResultPair: {'a.Foo,'Foo} ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is nil sorts 'Foo . none (op '+ : 'Foo 'Foo -> 'Foo [left-id('id.Foo)] . op 'a : nil -> 'Foo [none] .) op 'id : nil -> 'Foo [none] . none none endfm, '+['a.Foo,'id.Foo]) . rewrites: 1 result ResultPair: {'+['a.Foo,'id.Foo],'Foo} ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is nil sorts 'Foo . none (op 'a : nil -> 'Foo [none] . op 'id : nil -> 'Foo [none] .) op '+ : 'Foo 'Foo -> 'Foo [right-id('id.Foo)] . none none endfm, '+['a.Foo,'id.Foo]) . rewrites: 1 result ResultPair: {'a.Foo,'Foo} ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is nil sorts 'Bool ; 'Foo . none (((op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] .) op 'false : nil -> 'Bool [none] .) op 'true : nil -> 'Bool [none] .) op 'itef : 'Bool 'Universal 'Universal -> 'Universal [special( id-hook('BranchSymbol, nil) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . none none endfm, 'itef['true.Bool,'a.Foo,'b.Foo]) . rewrites: 0 result [ResultPair?]: metaReduce(fmod 'FOO is nil sorts 'Bool ; 'Foo . none op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'false : nil -> 'Bool [none] . op 'itef : 'Bool 'Universal 'Universal -> 'Universal [special( id-hook('BranchSymbol, nil) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op 'true : nil -> 'Bool [none] . none none endfm, 'itef['true.Bool,'a.Foo,'b.Foo]) ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is nil sorts 'Bool ; 'Foo . none (((op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] .) op 'false : nil -> 'Bool [none] .) op 'true : nil -> 'Bool [none] .) op 'itef : 'Bool 'Universal 'Universal -> 'Universal [special( id-hook('BranchSymbol, nil) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . none none endfm, 'itef['false.Bool,'a.Foo,'b.Foo]) . rewrites: 0 result [ResultPair?]: metaReduce(fmod 'FOO is nil sorts 'Bool ; 'Foo . none op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'false : nil -> 'Bool [none] . op 'itef : 'Bool 'Universal 'Universal -> 'Universal [special( id-hook('BranchSymbol, nil) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op 'true : nil -> 'Bool [none] . none none endfm, 'itef['false.Bool,'a.Foo,'b.Foo]) ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is nil sorts 'Bit ; 'Foo . none (((op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] .) op '0 : nil -> 'Bit [none] .) op '1 : nil -> 'Bit [none] .) op '= : 'Universal 'Universal -> 'Bit [special( id-hook('EqualitySymbol, nil) term-hook('equalTerm, '1.Bit) term-hook('notEqualTerm, '0.Bit))] . none none endfm, '=['a.Foo,'b.Foo]) . rewrites: 0 result [ResultPair?]: metaReduce(fmod 'FOO is nil sorts 'Bit ; 'Foo . none op '0 : nil -> 'Bit [none] . op '1 : nil -> 'Bit [none] . op '= : 'Universal 'Universal -> 'Bit [special( id-hook('EqualitySymbol, nil) term-hook('equalTerm, '1.Bit) term-hook('notEqualTerm, '0.Bit))] . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . none none endfm, '=['a.Foo,'b.Foo]) Bye. maude-3.1/tests/Meta/metaGetVariant0000755000175200017520000000036412006107277014273 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaGetVariant.maude -no-banner -no-advise \ > metaGetVariant.out 2>&1 diff $srcdir/metaGetVariant.expected metaGetVariant.out > /dev/null 2>&1 maude-3.1/tests/Meta/legacyMetaUnify0000755000175200017520000000037013552500056014442 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/legacyMetaUnify.maude -no-banner -no-advise \ > legacyMetaUnify.out 2>&1 diff $srcdir/legacyMetaUnify.expected legacyMetaUnify.out > /dev/null 2>&1 maude-3.1/tests/Meta/legacyMetaUnify.maude0000644000175200017520000000421313552477571015550 00000000000000set show timing off . set show advisories off . *** 7 unifiers for most trivial elementary AC problem reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat, 'Y:Nat] =? '_+_['X:Nat, 'Y:Nat], 0, 0) . reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat, 'Y:Nat] =? '_+_['X:Nat, 'Y:Nat], 0, 1) . reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat, 'Y:Nat] =? '_+_['X:Nat, 'Y:Nat], 0, 2) . reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat, 'Y:Nat] =? '_+_['X:Nat, 'Y:Nat], 0, 3) . reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat, 'Y:Nat] =? '_+_['X:Nat, 'Y:Nat], 0, 4) . reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat, 'Y:Nat] =? '_+_['X:Nat, 'Y:Nat], 0, 5) . reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat, 'Y:Nat] =? '_+_['X:Nat, 'Y:Nat], 0, 6) . reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat, 'Y:Nat] =? '_+_['X:Nat, 'Y:Nat], 0, 7) . *** variable names allow arbitrarily large numbering reduce in META-LEVEL : metaUnify(['NAT], '_+_['X:Nat, 'Y:Nat] =? '_+_['A:Nat, 'B:Nat], 100000000000000000000, 0) . *** using variable names in unifications with larger numbers than *** declared by the the 3rd argument generates a warning and no *** reduction. reduce in META-LEVEL : metaUnify(['NAT], '_+_['X:Nat, 'Y:Nat] =? '_+_['#1:Nat, 'Y:Nat], 0, 0) . *** simultaneous unification fmod BAZ is sort Foo . ops a b : -> Foo . op f : Foo -> Foo . endfm red in META-LEVEL : metaDisjointUnify(['BAZ], 'f['X:Foo] =? 'f['Y:Foo] /\ 'f['X:Foo] =? 'f['Z:Foo], 0, 0) . red in META-LEVEL : metaDisjointUnify(['BAZ], 'f['Y:Foo] =? 'f['X:Foo] /\ 'f['Z:Foo] =? 'f['X:Foo], 0, 0) . red in META-LEVEL : metaDisjointUnify(['BAZ], 'f['X:Foo] =? 'f['Y:Foo] /\ 'f['Y:Foo] =? 'f['X:Foo], 0, 0) . red in META-LEVEL : metaDisjointUnify(['BAZ], 'f['X:Foo] =? 'f['a.Foo] /\ 'f['X:Foo] =? 'f['b.Foo], 0, 0) . red in META-LEVEL : metaDisjointUnify(['BAZ], 'f['a.Foo] =? 'f['X:Foo] /\ 'f['b.Foo] =? 'f['X:Foo], 0, 0) . maude-3.1/tests/Meta/metaUnify.expected0000644000175200017520000001335213703636442015125 00000000000000========================================== reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat,'Y:Nat] =? '_+_[ 'X:Nat,'Y:Nat], '#, 0) . rewrites: 2 result UnificationTriple: { 'X:Nat <- '_+_['%1:Nat,'%3:Nat] ; 'Y:Nat <- '_+_['%2:Nat,'%4:Nat], 'X:Nat <- '_+_['%1:Nat,'%2:Nat] ; 'Y:Nat <- '_+_['%3:Nat,'%4:Nat],'%} ========================================== reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat,'Y:Nat] =? '_+_[ 'X:Nat,'Y:Nat], '#, 1) . rewrites: 2 result UnificationTriple: { 'X:Nat <- '_+_['%2:Nat,'%3:Nat] ; 'Y:Nat <- '%1:Nat, 'X:Nat <- '_+_['%1:Nat,'%3:Nat] ; 'Y:Nat <- '%2:Nat,'%} ========================================== reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat,'Y:Nat] =? '_+_[ 'X:Nat,'Y:Nat], '#, 2) . rewrites: 2 result UnificationTriple: { 'X:Nat <- '%1:Nat ; 'Y:Nat <- '_+_['%2:Nat,'%3:Nat], 'X:Nat <- '_+_['%1:Nat,'%3:Nat] ; 'Y:Nat <- '%2:Nat,'%} ========================================== reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat,'Y:Nat] =? '_+_[ 'X:Nat,'Y:Nat], '#, 3) . rewrites: 2 result UnificationTriple: { 'X:Nat <- '_+_['%2:Nat,'%3:Nat] ; 'Y:Nat <- '%1:Nat, 'X:Nat <- '%2:Nat ; 'Y:Nat <- '_+_['%1:Nat,'%3:Nat],'%} ========================================== reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat,'Y:Nat] =? '_+_[ 'X:Nat,'Y:Nat], '#, 4) . rewrites: 2 result UnificationTriple: { 'X:Nat <- '%1:Nat ; 'Y:Nat <- '%2:Nat, 'X:Nat <- '%1:Nat ; 'Y:Nat <- '%2:Nat,'%} ========================================== reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat,'Y:Nat] =? '_+_[ 'X:Nat,'Y:Nat], '#, 5) . rewrites: 2 result UnificationTriple: { 'X:Nat <- '%1:Nat ; 'Y:Nat <- '_+_['%2:Nat,'%3:Nat], 'X:Nat <- '%2:Nat ; 'Y:Nat <- '_+_['%1:Nat,'%3:Nat],'%} ========================================== reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat,'Y:Nat] =? '_+_[ 'X:Nat,'Y:Nat], '#, 6) . rewrites: 2 result UnificationTriple: { 'X:Nat <- '%2:Nat ; 'Y:Nat <- '%1:Nat, 'X:Nat <- '%1:Nat ; 'Y:Nat <- '%2:Nat,'%} ========================================== reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat,'Y:Nat] =? '_+_[ 'X:Nat,'Y:Nat], '#, 7) . rewrites: 2 result UnificationTriple?: (noUnifier).UnificationTriple? ========================================== reduce in META-LEVEL : metaUnify(['NAT], '_+_['X:Nat,'Y:Nat] =? '_+_['A:Nat, 'B:Nat], '%, 0) . rewrites: 2 result UnificationPair: { 'A:Nat <- '_+_['#1:Nat,'#2:Nat] ; 'B:Nat <- '_+_['#3:Nat,'#4:Nat] ; 'X:Nat <- '_+_['#1:Nat,'#3:Nat] ; 'Y:Nat <- '_+_['#2:Nat,'#4:Nat],'#} ========================================== reduce in META-LEVEL : metaUnify(['NAT], '_+_['X:Nat,'Y:Nat] =? '_+_['A:Nat, 'B:Nat], '@, 0) . rewrites: 2 result UnificationPair: { 'A:Nat <- '_+_['#1:Nat,'#2:Nat] ; 'B:Nat <- '_+_['#3:Nat,'#4:Nat] ; 'X:Nat <- '_+_['#1:Nat,'#3:Nat] ; 'Y:Nat <- '_+_['#2:Nat,'#4:Nat],'#} ========================================== reduce in META-LEVEL : metaUnify(['NAT], '_+_['X:Nat,'Y:Nat] =? '_+_['#1:Nat, 'Y:Nat], '%, 0) . Warning: unsafe variable name #1:Nat in unification problem. rewrites: 1 result [UnificationPair?,MatchOrUnificationPair,MatchPair?]: metaUnify(sth 'NAT is including 'NAT . sorts none . none none none none none none none endsth, '_+_['X:Nat,'Y:Nat] =? '_+_['#1:Nat,'Y:Nat], '%, 0) ========================================== reduce in META-LEVEL : metaDisjointUnify(['BAZ], 'f['X:Foo] =? 'f['Y:Foo] /\ 'f['X:Foo] =? 'f['Z:Foo], '#, 0) . rewrites: 2 result UnificationTriple: { 'X:Foo <- '%1:Foo, 'Y:Foo <- '%1:Foo ; 'Z:Foo <- '%1:Foo,'%} ========================================== reduce in META-LEVEL : metaDisjointUnify(['BAZ], 'f['Y:Foo] =? 'f['X:Foo] /\ 'f['Z:Foo] =? 'f['X:Foo], '#, 0) . rewrites: 2 result UnificationTriple: { 'Y:Foo <- '%1:Foo ; 'Z:Foo <- '%1:Foo, 'X:Foo <- '%1:Foo,'%} ========================================== reduce in META-LEVEL : metaDisjointUnify(['BAZ], 'f['X:Foo] =? 'f['Y:Foo] /\ 'f['Y:Foo] =? 'f['X:Foo], '#, 0) . rewrites: 2 result UnificationTriple: { 'X:Foo <- '%1:Foo ; 'Y:Foo <- '%2:Foo, 'X:Foo <- '%2:Foo ; 'Y:Foo <- '%1:Foo,'%} ========================================== reduce in META-LEVEL : metaDisjointUnify(['BAZ], 'f['X:Foo] =? 'f['a.Foo] /\ 'f['X:Foo] =? 'f['b.Foo], '#, 0) . rewrites: 2 result UnificationTriple?: (noUnifier).UnificationTriple? ========================================== reduce in META-LEVEL : metaDisjointUnify(['BAZ], 'f['a.Foo] =? 'f['X:Foo] /\ 'f['b.Foo] =? 'f['X:Foo], '#, 0) . rewrites: 2 result UnificationTriple?: (noUnifier).UnificationTriple? ========================================== reduce in META-LEVEL : metaIrredundantUnify(['BAG], '__['L:Bag,'M:Bag] =? '__[ 'P:Bag,'Q:Bag], '#, 0) . rewrites: 2 result UnificationPair: { 'L:Bag <- '__['%2:Bag,'%4:Bag] ; 'M:Bag <- '__['%1:Bag,'%3:Bag] ; 'P:Bag <- '__['%3:Bag,'%4:Bag] ; 'Q:Bag <- '__['%1:Bag,'%2:Bag],'%} ========================================== reduce in META-LEVEL : metaIrredundantUnify(['BAG], '__['L:Bag,'M:Bag] =? '__[ 'P:Bag,'Q:Bag], '#, 1) . rewrites: 2 result UnificationPair?: (noUnifier).UnificationPair? ========================================== reduce in META-LEVEL : metaIrredundantDisjointUnify(['BAG], '__['L:Bag,'M:Bag] =? '__['P:Bag,'Q:Bag], '#, 0) . rewrites: 2 result UnificationTriple: { 'L:Bag <- '__['%2:Bag,'%4:Bag] ; 'M:Bag <- '__['%1:Bag,'%3:Bag], 'P:Bag <- '__['%3:Bag,'%4:Bag] ; 'Q:Bag <- '__['%1:Bag,'%2:Bag],'%} ========================================== reduce in META-LEVEL : metaIrredundantDisjointUnify(['BAG], '__['L:Bag,'M:Bag] =? '__['P:Bag,'Q:Bag], '#, 1) . rewrites: 2 result UnificationTriple?: (noUnifier).UnificationTriple? Bye. maude-3.1/tests/Meta/checkUnifiers.maude0000644000175200017520000001303113724035442015226 00000000000000set show timing off . set show advisories off . *** *** Compute unifiers and variant unifiers (without equations *** to minimize unifier set) and test them. *** fmod CHECK is inc LEXICAL . inc META-LEVEL . sort Result ResultList . subsort Result < ResultList . op __ : ResultList ResultList -> ResultList [assoc id: ok] . op ok : -> Result . op badUnifier : Substitution -> Result [format (r o)]. op unifierCount : Nat -> Result . op unifierCountIncomplete : Nat -> Result . vars T T' : Term . var N : Nat . var S : Substitution . var Q : Qid . var M : Module . vars SS ST : String . op check : Module String String -> ResultList . eq check(M, SS, ST) = check(M, convert(M, SS), convert(M, ST), 0) check2(M, convert(M, SS), convert(M, ST), 0) . op convert : Module String -> Term . eq convert(M, SS) = getTerm(metaParse(M, none, tokenize(SS), anyType)) . op check : Module Term Term Nat -> ResultList . eq check(M, T, T', N) = if (metaUnify(M, T =? T', '%, N) == noUnifier) then unifierCount(N) else if (metaUnify(M, T =? T', '%, N) == noUnifierIncomplete) then unifierCountIncomplete(N) else verify(M, T, T', metaUnify(M, T =? T', '%, N)) check(M, T, T', s N) fi fi . op check2 : Module Term Term Nat -> ResultList . eq check2(M, T, T', N) = if (metaVariantUnify(M, T =? T', empty, '%, none, N) == noUnifier) then unifierCount(N) else if (metaVariantUnify(M, T =? T', empty, '%, none, N) == noUnifierIncomplete) then unifierCountIncomplete(N) else verify(M, T, T', metaVariantUnify(M, T =? T', empty, '%, none, N)) check2(M, T, T', s N) fi fi . op verify : Module Term Term UnificationPair -> Result . eq verify(M, T, T', {S, Q}) = if (applySubstitution(M, T, S) == applySubstitution(M, T', S)) then ok else badUnifier(S) fi . endfm fmod A-UNIF is sorts List Elt . subsort Elt < List . op __ : List List -> List [assoc] . op f : List List -> List [assoc] . op g : List List -> List . op h : List List -> List [assoc comm] . op i : List -> List . op j : List List -> List [assoc comm id: 1] . op 1 : -> List . ops a b c d e : -> Elt . vars A B C D G H I J K L M N P Q R S T U V W X Y Z : List . vars E F : Elt . endfm red in CHECK : check(['A-UNIF], "A:List B:List", "X:List") . red in CHECK : check(['A-UNIF], "A:List B:List", "X:List Y:List") . red in CHECK : check(['A-UNIF], "A:List B:List C:List", "X:List Y:List") . red in CHECK : check(['A-UNIF], "A:List B:List C:List", "X:List Y:List Z:List") . red in CHECK : check(['A-UNIF], "A:List B:List C:List G:List", "X:List Y:List Z:List") . red in CHECK : check(['A-UNIF], "A:List B:List C:List D:List G:List", "X:List Y:List Z:List") . red in CHECK : check(['A-UNIF], "A:List B:List", "B:List C:List") . red in CHECK : check(['A-UNIF], "a A:List a", "B:List a C:List") . red in CHECK : check(['A-UNIF], "a A:List b", "B:List c C:List") . red in CHECK : check(['A-UNIF], "a A:List a", "B:List a C:List a D:List") . red in CHECK : check(['A-UNIF], "a A:List b", "B:List c C:List d D:List") . red in CHECK : check(['A-UNIF], "h(A:List, B:List, B:List) C:List h(G:List, H:List)", "I:List h(J:List, i(K:List)) L:List") . red in CHECK : check(['A-UNIF], "h(A:List, B:List) C:List h(G:List, H:List)", "I:List h(J:List, J:List) L:List h(M:List, M:List) N:List") . red in CHECK : check(['A-UNIF], "A:List h(X:List, Y:List) B:List", "C:List h(U:List, V:List) D:List h(U:List, U:List) G:List") . red in CHECK : check(['A-UNIF], "h(h(A:List, B:List, B:List) C:List h(G:List, H:List), X:List Y:List a Z:List)", "h(I:List h(J:List, i(K:List)) L:List, U:List b V:List W:List)") . red in CHECK : check(['A-UNIF], "h(A:List, A:List)", "h(f(B:List, C:List), f(I:List, J:List))") . red in CHECK : check(['A-UNIF], "h(A:List, A:List, A:List)", "h(f(B:List, C:List), f(I:List, J:List), f(X:List, Y:List))") . red in CHECK : check(['A-UNIF], "h(f(a, b), f(a, b), f(a, b))", "h(f(B:List, C:List), f(I:List, J:List), f(X:List, Y:List))") . red in CHECK : check(['A-UNIF], "A:List E:Elt B:List F:Elt C:List E:Elt D:List", "W:List F:Elt X:List E:Elt Y:List F:Elt Z:List") . red in CHECK : check(['A-UNIF], "j(A:List, f(B:List, E:Elt, C:List), f(D:List, E:Elt, j(G:List, H:List), I:List))", "j(U:List, f(V:List, W:List), f(X:List, j(Y:List, Z:List), S:List))") . fmod AC+C is sort Elt Set . subsort Elt < Set . ops a b c d e z : -> Elt . op f : Set Set -> Set [assoc comm] . op g : Set Set -> Set [comm] . vars U V W X Y Z : Set . vars A B C D E F : Elt . endfm red in CHECK : check(['AC+C], "f(g(X:Set, Y:Set), g(X:Set, Z:Set), U:Set)", "f(g(Y:Set, Z:Set), V:Set)") . red in CHECK : check(['AC+C], "g(f(X:Set, Y:Set), f(X:Set, U:Set, Z:Set))", "g(f(U:Set, V:Set), f(W:Set, A:Elt))") . fmod NAT' is protecting BOOL . sorts Zero NzNat Nat . subsort Zero NzNat < Nat . op 0 : -> Zero . op s_ : Nat -> NzNat [iter] . op _*_ : NzNat NzNat -> NzNat [assoc comm id: s(0) prec 31] . op _*_ : Nat Nat -> Nat [ditto] . vars W X Y Z A B C D : Nat . endfm red in CHECK : check(['NAT'], "X:Nat", "s (X:Nat * Y:Nat)") . red in CHECK : check(['NAT'], "X:Nat", "s X:Nat * Y:Nat") . red in CHECK : check(['NAT'], "s X:Nat", "s X:Nat * Y:Nat") . red in CHECK : check(['NAT'], "s X:Nat", "X:Nat * Y:Nat") . fmod COMM is sort Foo . ops a b c d : -> Foo . op f : Foo Foo -> Foo [assoc comm id: c(a, b)] . op c : Foo Foo -> Foo [comm] . vars W X Y Z A B C D : Foo . endfm red in CHECK : check(['COMM], "X:Foo", "c(f(X:Foo, Y:Foo), Z:Foo)") . maude-3.1/tests/Meta/metaXapply0000755000175200017520000000034510511605520013474 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaXapply.maude -no-banner -no-advise \ > metaXapply.out 2>&1 diff $srcdir/metaXapply.expected metaXapply.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaUpModExp0000755000175200017520000000035410511605640013723 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaUpModExp.maude -no-banner -no-advise \ > metaUpModExp.out 2>&1 diff $srcdir/metaUpModExp.expected metaUpModExp.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaIntSort.maude0000644000175200017520000001676413350033246014730 00000000000000set show timing off . set show advisories off . *** *** Test sort calculations in the meta-interpreter. *** load metaInterpreter mod SORT-TEST is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op type:_ : Type -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . var T : Type . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('RAT, true)) . rl < X : User | type: T, AS > insertedModule(X, Y) => < X : User | AS > getLesserSorts(Y, X, 'RAT, T) . endm erew in SORT-TEST : <> < me : User | type: 'Int > createInterpreter(interpreterManager, me, none) . erew in SORT-TEST : <> < me : User | type: 'Rat > createInterpreter(interpreterManager, me, none) . erew in SORT-TEST : <> < me : User | type: '`[Rat`] > createInterpreter(interpreterManager, me, none) . erew in SORT-TEST : <> < me : User | type: '`[Bool`] > createInterpreter(interpreterManager, me, none) . erew in SORT-TEST : <> < me : User | type: 'Bool > createInterpreter(interpreterManager, me, none) . mod SORT-TEST2 is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op kind:_ : Type -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . var K : Kind . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('RAT, true)) . rl < X : User | kind: K, AS > insertedModule(X, Y) => < X : User | AS > getMaximalSorts(Y, X, 'RAT, K) . endm erew in SORT-TEST2 : <> < me : User | kind: '`[Rat`] > createInterpreter(interpreterManager, me, none) . erew in SORT-TEST2 : <> < me : User | kind: '`[Bool`] > createInterpreter(interpreterManager, me, none) . mod SORT-TEST3 is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op kind:_ : Type -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . var K : Kind . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('RAT, true)) . rl < X : User | kind: K, AS > insertedModule(X, Y) => < X : User | AS > getMinimalSorts(Y, X, 'RAT, K) . endm erew in SORT-TEST3 : <> < me : User | kind: '`[Rat`] > createInterpreter(interpreterManager, me, none) . erew in SORT-TEST3 : <> < me : User | kind: '`[Bool`] > createInterpreter(interpreterManager, me, none) . mod SORT-TEST4 is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op typePair:_:_ : Type Type -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . vars T1 T2 : Type . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('RAT, true)) . rl < X : User | AS, typePair: T1 : T2 > insertedModule(X, Y) => < X : User | AS > compareTypes(Y, X, 'RAT, T1, T2) . endm erew in SORT-TEST4 : <> < me : User | typePair: 'Nat : 'Bool > createInterpreter(interpreterManager, me, none) . erew in SORT-TEST4 : <> < me : User | typePair: 'Nat : 'Rat > createInterpreter(interpreterManager, me, none) . erew in SORT-TEST4 : <> < me : User | typePair: 'Rat : 'Rat > createInterpreter(interpreterManager, me, none) . erew in SORT-TEST4 : <> < me : User | typePair: 'Rat : 'Int > createInterpreter(interpreterManager, me, none) . erew in SORT-TEST4 : <> < me : User | typePair: 'NzRat : 'Int > createInterpreter(interpreterManager, me, none) . mod SORT-TEST5 is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op type:_ : Type -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . var T : Type . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('RAT, true)) . rl < X : User | AS, type: T > insertedModule(X, Y) => < X : User | AS > getKind(Y, X, 'RAT, T) . endm erew in SORT-TEST5 : <> < me : User | type: 'Nat > createInterpreter(interpreterManager, me, none) . erew in SORT-TEST5 : <> < me : User | type: 'Bool > createInterpreter(interpreterManager, me, none) . mod SORT-TEST6 is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op module:_ : Qid -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . var Q : Qid . rl < X : User | AS, module: Q > createdInterpreter(X, Y, Z) => < X : User | AS, module: Q > insertModule(Z, X, upModule(Q, true)) . rl < X : User | AS, module: Q > insertedModule(X, Y) => < X : User | AS > getKinds(Y, X, Q) . endm erew in SORT-TEST6 : <> < me : User | module: 'RAT > createInterpreter(interpreterManager, me, none) . erew in SORT-TEST6 : <> < me : User | module: 'META-LEVEL > createInterpreter(interpreterManager, me, none) . erew in SORT-TEST6 : <> < me : User | module: 'META-INTERPRETER > createInterpreter(interpreterManager, me, none) . mod SORT-TEST7 is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op types:_ : TypeSet -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . var T : TypeSet . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('RAT, true)) . rl < X : User | AS, types: T > insertedModule(X, Y) => < X : User | AS > getGlbTypes(Y, X, 'RAT, T) . endm erew in SORT-TEST7 : <> < me : User | types: ('Nat ; 'NzRat) > createInterpreter(interpreterManager, me, none) . erew in SORT-TEST7 : <> < me : User | types: none > createInterpreter(interpreterManager, me, none) . erew in SORT-TEST7 : <> < me : User | types: '`[Nat`] > createInterpreter(interpreterManager, me, none) . erew in SORT-TEST7 : <> < me : User | types: ('Nat ; 'NzRat ; 'Zero) > createInterpreter(interpreterManager, me, none) . erew in SORT-TEST7 : <> < me : User | types: ('Nat ; 'NzRat ; 'Int) > createInterpreter(interpreterManager, me, none) . mod SORT-TEST8 is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op op:(_:_->_) : Qid TypeList Sort -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . var Q : Qid . var TL : TypeList . var S : Sort . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('RAT, true)) . rl < X : User | AS, op:(Q : TL -> S) > insertedModule(X, Y) => < X : User | AS > getMaximalAritySet(Y, X, 'RAT, Q, TL, S) . endm erew in SORT-TEST8 : <> < me : User | op: ('_+_ : 'Nat 'Nat -> 'Nat) > createInterpreter(interpreterManager, me, none) . erew in SORT-TEST8 : <> < me : User | op: ('_+_ : 'Nat 'Nat -> 'NzNat) > createInterpreter(interpreterManager, me, none) . erew in SORT-TEST8 : <> < me : User | op: ('_+_ : 'Nat 'Nat -> 'NzRat) > createInterpreter(interpreterManager, me, none) . mod SORT-TEST9 is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op term:_ : Term -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . var T : Term . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('RAT, true)) . rl < X : User | AS, term: T > insertedModule(X, Y) => < X : User | AS > normalizeTerm(Y, X, 'RAT, T) . endm erew in SORT-TEST9 : <> < me : User | term: ('_+_['X:Nat, '_+_['Y:Rat, 'X:Nat]]) > createInterpreter(interpreterManager, me, none) . erew in SORT-TEST9 : <> < me : User | term: ('_+_['_+_['X:Nat, 'Y:Rat], '_+_['Y:Rat, 'X:Nat]]) > createInterpreter(interpreterManager, me, none) . erew in SORT-TEST9 : <> < me : User | term: ('_+_['_+_['X:NzNat, 'Y:PosRat], '_+_['Y:PosRat, 'X:NzNat]]) > createInterpreter(interpreterManager, me, none) . maude-3.1/tests/Meta/metaIntReplace0000755000175200017520000000036413301150625014247 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaIntReplace.maude -no-banner -no-advise \ > metaIntReplace.out 2>&1 diff $srcdir/metaIntReplace.expected metaIntReplace.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaIntNewNarrow0000755000175200017520000000037413401620421014614 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaIntNewNarrow.maude -no-banner -no-advise \ > metaIntNewNarrow.out 2>&1 diff $srcdir/metaIntNewNarrow.expected metaIntNewNarrow.out > /dev/null 2>&1 maude-3.1/tests/Meta/Makefile.am0000644000175200017520000000733313726261213013472 00000000000000TESTS = \ metaApply \ metaUnify \ metaFrewrite \ metaMatch \ metaMeta \ metaModule \ metaParse \ metaPrettyPrint \ metaReduce \ metaRewrite \ metaSearch \ metaSort \ metaSpecial \ metaTerm \ metaUp \ metaWellFormed \ metaXapply \ metaXmatch \ metaUp2 \ metaUpModExp \ metaModExp \ metaPolymorph \ metaUpDown \ metaPrintAttr \ metaMetadata \ metaVariantUnify \ metaVariantUnify2 \ metaVariantMatch \ metaGetVariant \ metaNarrow \ metaIntPrelude \ metaIntReplace \ metaIntReplace2 \ russianDollsFlat \ russianDollsNonFlat \ russianDollsNonFlat2 \ russianDollsNonFlat3 \ metaIntMatch \ metaIntSearch \ metaIntSort \ metaIntUnify \ metaIntVariant \ metaIntVariantUnify \ metaIntVariantUnify2 \ metaIntVariantMatch \ metaIntPrint \ metaIntParse \ metaIntApply \ metaIntNewNarrow \ metaIntNewNarrowSearch \ legacyMetaUnify \ legacyMetaVariantUnify \ legacyMetaGetVariant \ metaIntStrategy \ checkUnifiers MAUDE_FILES = \ metaApply.maude \ metaUnify.maude \ metaFrewrite.maude \ metaMatch.maude \ metaMeta.maude \ metaModule.maude \ metaParse.maude \ metaPrettyPrint.maude \ metaReduce.maude \ metaRewrite.maude \ metaSearch.maude \ metaSort.maude \ metaSpecial.maude \ metaTerm.maude \ metaUp.maude \ metaWellFormed.maude \ metaXapply.maude \ metaXmatch.maude \ metaUp2.maude \ metaUpModExp.maude \ metaModExp.maude \ metaPolymorph.maude \ metaUpDown.maude \ metaPrintAttr.maude \ metaMetadata.maude \ metaVariantUnify.maude \ metaVariantUnify2.maude \ metaVariantMatch.maude \ metaGetVariant.maude \ metaNarrow.maude \ metaIntPrelude.maude \ metaIntReplace.maude \ metaIntReplace2.maude \ russianDollsFlat.maude \ russianDollsNonFlat.maude \ russianDollsNonFlat2.maude \ russianDollsNonFlat3.maude \ metaIntMatch.maude \ metaIntSearch.maude \ metaIntSort.maude \ metaIntUnify.maude \ metaIntVariant.maude \ metaIntVariantUnify.maude \ metaIntVariantUnify2.maude \ metaIntVariantMatch.maude \ metaIntPrint.maude \ metaIntParse.maude \ metaIntApply.maude \ metaIntNewNarrow.maude \ metaIntNewNarrowSearch.maude \ legacyMetaUnify.maude \ legacyMetaVariantUnify.maude \ legacyMetaGetVariant.maude \ metaIntStrategy.maude \ checkUnifiers.maude RESULT_FILES = \ metaApply.expected \ metaUnify.expected \ metaFrewrite.expected \ metaApply.expected \ metaFrewrite.expected \ metaMatch.expected \ metaMeta.expected \ metaModule.expected \ metaParse.expected \ metaPrettyPrint.expected \ metaReduce.expected \ metaRewrite.expected \ metaSearch.expected \ metaSort.expected \ metaSpecial.expected \ metaTerm.expected \ metaUp.expected \ metaWellFormed.expected \ metaXapply.expected \ metaXmatch.expected \ metaUp2.expected \ metaUpModExp.expected \ metaModExp.expected \ metaPolymorph.expected \ metaUpDown.expected \ metaPrintAttr.expected \ metaMetadata.expected \ metaVariantUnify.expected \ metaVariantUnify2.expected \ metaVariantMatch.expected \ metaGetVariant.expected \ metaNarrow.expected \ metaIntPrelude.expected \ metaIntReplace.expected \ metaIntReplace2.expected \ russianDollsFlat.expected \ russianDollsNonFlat.expected \ russianDollsNonFlat2.expected \ russianDollsNonFlat3.expected \ metaIntMatch.expected \ metaIntSearch.expected \ metaIntSort.expected \ metaIntUnify.expected \ metaIntVariant.expected \ metaIntVariantUnify.expected \ metaIntVariantUnify2.expected \ metaIntVariantMatch.expected \ metaIntPrint.expected \ metaIntParse.expected \ metaIntApply.expected \ metaIntNewNarrow.expected \ metaIntNewNarrowSearch.expected \ legacyMetaUnify.expected \ legacyMetaVariantUnify.expected \ legacyMetaGetVariant.expected \ metaIntStrategy.expected \ checkUnifiers.expected EXTRA_DIST = $(TESTS) $(MAUDE_FILES) $(RESULT_FILES) maude-3.1/tests/Meta/metaIntMatch.maude0000644000175200017520000000747413333156301015032 00000000000000set show timing off . set show advisories off . *** *** Test matching in the meta-interpreter without and with extension. *** load metaInterpreter fmod MATCH is sort Foo . op f : Foo Foo -> Foo [assoc] . ops a b : -> Foo . endfm mod MATCH-TEST is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op soln:_ : Nat -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('MATCH, true)) . rl < X : User | soln: N, AS > insertedModule(X, Y) => < X : User | AS > getMatch(Y, X, 'MATCH, 'f['X:Foo, 'Y:Foo], 'f['a.Foo, 'b.Foo, 'a.Foo], nil, N) . endm erew in MATCH-TEST : <> < me : User | soln: 0 > createInterpreter(interpreterManager, me, none) . erew in MATCH-TEST : <> < me : User | soln: 1 > createInterpreter(interpreterManager, me, none) . erew in MATCH-TEST : <> < me : User | soln: 2 > createInterpreter(interpreterManager, me, none) . mod MATCH-CACHE-TEST is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op soln:_ : Nat -> Attribute . op got:_ : Msg -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . vars N M : Nat . var S : Substitution . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('MATCH, true)) . rl < X : User | AS > insertedModule(X, Y) => < X : User | AS, soln: 1 > getMatch(Y, X, 'MATCH, 'f['X:Foo, 'Y:Foo], 'f['a.Foo, 'b.Foo, 'a.Foo], nil, 0) . rl < X : User | soln: N, AS > gotMatch(X, Y, M, S) => < X : User | AS, soln: (N + 1), got: gotMatch(X, Y, M, S) > getMatch(Y, X, 'MATCH, 'f['X:Foo, 'Y:Foo], 'f['a.Foo, 'b.Foo, 'a.Foo], nil, N) . endm erew in MATCH-CACHE-TEST : <> < me : User | none > createInterpreter(interpreterManager, me, none) . fmod XMATCH is sorts Foo Bar . op f : Foo Foo -> Foo [assoc] . op g : Foo -> Bar . ops a b : -> Foo . endfm mod XMATCH-TEST is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op soln:_ : Nat -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('XMATCH, true)) . rl < X : User | soln: N, AS > insertedModule(X, Y) => < X : User | AS > getXmatch(Y, X, 'XMATCH, 'f['X:Foo, 'Y:Foo], 'g['f['a.Foo, 'b.Foo, 'a.Foo]], nil, 0, unbounded, N) . endm erew in XMATCH-TEST : <> < me : User | soln: 0 > createInterpreter(interpreterManager, me, none) . erew in XMATCH-TEST : <> < me : User | soln: 1 > createInterpreter(interpreterManager, me, none) . erew in XMATCH-TEST : <> < me : User | soln: 2 > createInterpreter(interpreterManager, me, none) . erew in XMATCH-TEST : <> < me : User | soln: 3 > createInterpreter(interpreterManager, me, none) . erew in XMATCH-TEST : <> < me : User | soln: 4 > createInterpreter(interpreterManager, me, none) . mod XMATCH-CACHE-TEST is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op soln:_ : Nat -> Attribute . op got:_ : Msg -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . vars N M : Nat . var S : Substitution . var C : Context . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('XMATCH, true)) . rl < X : User | AS > insertedModule(X, Y) => < X : User | AS, soln: 1 > getXmatch(Y, X, 'XMATCH, 'f['X:Foo, 'Y:Foo], 'g['f['a.Foo, 'b.Foo, 'a.Foo]], nil, 0, unbounded, 0) . rl < X : User | soln: N, AS > gotXmatch(X, Y, M, S, C) => < X : User | AS, soln: (N + 1), got: gotXmatch(X, Y, M, S, C) > getXmatch(Y, X, 'XMATCH, 'f['X:Foo, 'Y:Foo], 'g['f['a.Foo, 'b.Foo, 'a.Foo]], nil, 0, unbounded, N) . endm erew in XMATCH-CACHE-TEST : <> < me : User | none > createInterpreter(interpreterManager, me, none) . maude-3.1/tests/Meta/metaVariantUnify.expected0000644000175200017520000002112713724035200016435 00000000000000========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), (empty).GroundTermList, '#, (0).Zero) . rewrites: 11 result UnificationPair: { 'X:XOR <- '_+_['cst2.Elem,'@1:XOR] ; 'Y:XOR <- '_+_['cst1.Elem,'@1:XOR],'@} ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), (empty).GroundTermList, '%, (0).Zero) . rewrites: 11 result UnificationPair: { 'X:XOR <- '_+_['cst2.Elem,'@1:XOR] ; 'Y:XOR <- '_+_['cst1.Elem,'@1:XOR],'@} ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), (empty).GroundTermList, '#, 1) . rewrites: 5 result UnificationPair: { 'X:XOR <- 'cst2.Elem ; 'Y:XOR <- 'cst1.Elem,'@} ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), (empty).GroundTermList, '#, 2) . rewrites: 23 result UnificationPair: { 'X:XOR <- '_+_['cst1.Elem,'cst2.Elem,'%1:XOR] ; 'Y:XOR <- '%1:XOR,'%} ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), (empty).GroundTermList, '#, 3) . rewrites: 5 result UnificationPair: { 'X:XOR <- '%1:XOR ; 'Y:XOR <- '_+_['cst1.Elem,'cst2.Elem,'%1:XOR],'%} ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), (empty).GroundTermList, '#, 4) . rewrites: 5 result UnificationPair: { 'X:XOR <- '0.XOR ; 'Y:XOR <- '_+_['cst1.Elem,'cst2.Elem],'@} ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), (empty).GroundTermList, '#, 5) . rewrites: 5 result UnificationPair: { 'X:XOR <- 'cst1.Elem ; 'Y:XOR <- 'cst2.Elem,'@} ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), (empty).GroundTermList, '#, 6) . rewrites: 5 result UnificationPair: { 'X:XOR <- '_+_['cst1.Elem,'cst2.Elem] ; 'Y:XOR <- '0.XOR,'@} ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), (empty).GroundTermList, '#, 7) . rewrites: 5 result UnificationPair: { 'X:XOR <- '_+_['cst1.Elem,'@1:XOR] ; 'Y:XOR <- '_+_['cst2.Elem,'@1:XOR],'@} ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), (empty).GroundTermList, '#, 8) . rewrites: 5 result UnificationPair?: (noUnifier).UnificationPair? ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), (empty).GroundTermList, '#, (0).Zero) . rewrites: 11 result UnificationTriple: { 'X:XOR <- '_+_['cst2.Elem,'@1:XOR], 'X:XOR <- '_+_['cst1.Elem,'@1:XOR],'@} ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), (empty).GroundTermList, '%, (0).Zero) . rewrites: 11 result UnificationTriple: { 'X:XOR <- '_+_['cst2.Elem,'@1:XOR], 'X:XOR <- '_+_['cst1.Elem,'@1:XOR],'@} ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), (empty).GroundTermList, '#, 1) . rewrites: 5 result UnificationTriple: { 'X:XOR <- 'cst2.Elem, 'X:XOR <- 'cst1.Elem,'@} ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), (empty).GroundTermList, '#, 2) . rewrites: 23 result UnificationTriple: { 'X:XOR <- '_+_['cst1.Elem,'cst2.Elem,'%1:XOR], 'X:XOR <- '%1:XOR,'%} ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), (empty).GroundTermList, '#, 3) . rewrites: 5 result UnificationTriple: { 'X:XOR <- '%1:XOR, 'X:XOR <- '_+_['cst1.Elem,'cst2.Elem,'%1:XOR],'%} ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), (empty).GroundTermList, '#, 4) . rewrites: 5 result UnificationTriple: { 'X:XOR <- '0.XOR, 'X:XOR <- '_+_['cst1.Elem,'cst2.Elem],'@} ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), (empty).GroundTermList, '#, 5) . rewrites: 5 result UnificationTriple: { 'X:XOR <- 'cst1.Elem, 'X:XOR <- 'cst2.Elem,'@} ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), (empty).GroundTermList, '#, 6) . rewrites: 5 result UnificationTriple: { 'X:XOR <- '_+_['cst1.Elem,'cst2.Elem], 'X:XOR <- '0.XOR,'@} ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), (empty).GroundTermList, '#, 7) . rewrites: 5 result UnificationTriple: { 'X:XOR <- '_+_['cst1.Elem,'@1:XOR], 'X:XOR <- '_+_['cst2.Elem,'@1:XOR],'@} ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), (empty).GroundTermList, '#, 8) . rewrites: 5 result UnificationTriple?: (noUnifier).UnificationTriple? ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), upTerm(cst1 + X:XOR), '#, (0).Zero) . rewrites: 8 result UnificationPair: { 'X:XOR <- '_+_['cst2.Elem,'@1:XOR] ; 'Y:XOR <- '_+_['cst1.Elem,'@1:XOR],'@} ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), upTerm(cst1 + X:XOR), '%, (0).Zero) . rewrites: 8 result UnificationPair: { 'X:XOR <- '_+_['cst2.Elem,'@1:XOR] ; 'Y:XOR <- '_+_['cst1.Elem,'@1:XOR],'@} ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), upTerm(cst1 + X:XOR), '#, 1) . rewrites: 5 result UnificationPair: { 'X:XOR <- 'cst2.Elem ; 'Y:XOR <- 'cst1.Elem,'@} ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), upTerm(cst1 + X:XOR), '#, 2) . rewrites: 5 result UnificationPair: { 'X:XOR <- '%1:XOR ; 'Y:XOR <- '_+_['cst1.Elem,'cst2.Elem,'%1:XOR],'%} ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), upTerm(cst1 + X:XOR), '#, 3) . rewrites: 5 result UnificationPair?: (noUnifier).UnificationPair? ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), upTerm(cst1 + X:XOR), '#, (0).Zero) . rewrites: 8 result UnificationTriple: { 'X:XOR <- '_+_['cst2.Elem,'@1:XOR], 'X:XOR <- '_+_['cst1.Elem,'@1:XOR],'@} ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), upTerm(cst1 + X:XOR), '%, (0).Zero) . rewrites: 8 result UnificationTriple: { 'X:XOR <- '_+_['cst2.Elem,'@1:XOR], 'X:XOR <- '_+_['cst1.Elem,'@1:XOR],'@} ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), upTerm(cst1 + X:XOR), '#, 1) . rewrites: 5 result UnificationTriple: { 'X:XOR <- 'cst2.Elem, 'X:XOR <- 'cst1.Elem,'@} ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), upTerm(cst1 + X:XOR), '#, 2) . rewrites: 5 result UnificationTriple: { 'X:XOR <- '%1:XOR, 'X:XOR <- '_+_['cst1.Elem,'cst2.Elem,'%1:XOR],'%} ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), upTerm(cst1 + X:XOR), '#, 3) . rewrites: 5 result UnificationTriple?: (noUnifier).UnificationTriple? ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + %1:XOR) =? upTerm( cst2 + Y:XOR), (empty).GroundTermList, '#, (0).Zero) . Warning: unsafe variable name %1:XOR in variant unification problem. rewrites: 5 result UnificationPair?: (noUnifier).UnificationPair? Bye. maude-3.1/tests/Meta/metaIntVariantUnify2.expected0000644000175200017520000003425613726052765017222 00000000000000========================================== erewrite in VARIANT-UNIFY-TEST : <> < me : User | options: none,problem:('_+_[ 'X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],empty) > createInterpreter( interpreterManager, me, none) . saw '_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem] rewrites: 43 result Configuration: <> < me : User | options: none,soln: 9,result( gotVariantUnifier(me, interpreter(0), 6, 'X:XOR <- '_+_['c2.Elem,'@1:XOR] ; 'Y:XOR <- '_+_['c1.Elem,'@1:XOR], '@),gotVariantUnifier(me, interpreter(0), 0, 'X:XOR <- 'c2.Elem ; 'Y:XOR <- 'c1.Elem, '@),gotVariantUnifier(me, interpreter(0), 18, 'X:XOR <- '_+_['c1.Elem,'c2.Elem,'%1:XOR] ; 'Y:XOR <- '%1:XOR, '%),gotVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '%1:XOR ; 'Y:XOR <- '_+_['c1.Elem,'c2.Elem,'%1:XOR], '%),gotVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '0.XOR ; 'Y:XOR <- '_+_['c1.Elem,'c2.Elem], '@),gotVariantUnifier(me, interpreter(0), 0, 'X:XOR <- 'c1.Elem ; 'Y:XOR <- 'c2.Elem, '@),gotVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '_+_['c1.Elem,'c2.Elem] ; 'Y:XOR <- '0.XOR, '@),gotVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '_+_['c1.Elem,'@1:XOR] ; 'Y:XOR <- '_+_['c2.Elem,'@1:XOR], '@)),problem:('_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],empty) > noSuchResult(me, interpreter(0), 0, true) ========================================== erewrite in VARIANT-UNIFY-TEST : <> < me : User | options: delay,problem:('_+_[ 'X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],empty) > createInterpreter( interpreterManager, me, none) . saw '_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem] rewrites: 43 result Configuration: <> < me : User | options: delay,soln: 9,result( gotVariantUnifier(me, interpreter(0), 24, 'X:XOR <- '_+_['c2.Elem,'@1:XOR] ; 'Y:XOR <- '_+_['c1.Elem,'@1:XOR], '@),gotVariantUnifier(me, interpreter(0), 0, 'X:XOR <- 'c2.Elem ; 'Y:XOR <- 'c1.Elem, '@),gotVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '_+_['c1.Elem,'c2.Elem,'%1:XOR] ; 'Y:XOR <- '%1:XOR, '%),gotVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '%1:XOR ; 'Y:XOR <- '_+_['c1.Elem,'c2.Elem,'%1:XOR], '%),gotVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '0.XOR ; 'Y:XOR <- '_+_['c1.Elem,'c2.Elem], '@),gotVariantUnifier(me, interpreter(0), 0, 'X:XOR <- 'c1.Elem ; 'Y:XOR <- 'c2.Elem, '@),gotVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '_+_['c1.Elem,'c2.Elem] ; 'Y:XOR <- '0.XOR, '@),gotVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '_+_['c1.Elem,'@1:XOR] ; 'Y:XOR <- '_+_['c2.Elem,'@1:XOR], '@)),problem:('_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],empty) > noSuchResult(me, interpreter(0), 0, true) ========================================== erewrite in VARIANT-UNIFY-TEST : <> < me : User | options: filter,problem:( '_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],empty) > createInterpreter( interpreterManager, me, none) . saw '_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem] rewrites: 51 result Configuration: <> < me : User | options: filter,soln: 2,result( gotVariantUnifier(me, interpreter(0), 28, 'X:XOR <- '_+_['c2.Elem,'@1:XOR] ; 'Y:XOR <- '_+_['c1.Elem,'@1:XOR], '@)),problem:('_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],empty) > noSuchResult(me, interpreter(0), 18, true) ========================================== erewrite in VARIANT-UNIFY-TEST : <> < me : User | options: (delay filter), problem:('_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],empty) > createInterpreter(interpreterManager, me, none) . saw '_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem] rewrites: 51 result Configuration: <> < me : User | options: (delay filter),soln: 2,result( gotVariantUnifier(me, interpreter(0), 46, 'X:XOR <- '_+_['c2.Elem,'@1:XOR] ; 'Y:XOR <- '_+_['c1.Elem,'@1:XOR], '@)),problem:('_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],empty) > noSuchResult(me, interpreter(0), 0, true) ========================================== filtered variant unify in XOR : X + c1 =? Y + c2 . rewrites: 46 Unifier 1 X --> c2 + %1:XOR Y --> c1 + %1:XOR No more unifiers. ========================================== erewrite in VARIANT-UNIFY-TEST : <> < me : User | options: none,problem:('_+_[ 'X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],'_+_['X:XOR,'c1.Elem]) > createInterpreter(interpreterManager, me, none) . saw '_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem] rewrites: 12 result Configuration: <> < me : User | options: none,soln: 4,result( gotVariantUnifier(me, interpreter(0), 3, 'X:XOR <- '_+_['c2.Elem,'@1:XOR] ; 'Y:XOR <- '_+_['c1.Elem,'@1:XOR], '@),gotVariantUnifier(me, interpreter(0), 0, 'X:XOR <- 'c2.Elem ; 'Y:XOR <- 'c1.Elem, '@),gotVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '%1:XOR ; 'Y:XOR <- '_+_['c1.Elem,'c2.Elem,'%1:XOR], '%)),problem:('_+_['X:XOR, 'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],'_+_['X:XOR,'c1.Elem]) > noSuchResult( me, interpreter(0), 0, true) ========================================== erewrite in VARIANT-UNIFY-TEST : <> < me : User | options: delay,problem:('_+_[ 'X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],'_+_['X:XOR,'c1.Elem]) > createInterpreter(interpreterManager, me, none) . saw '_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem] rewrites: 12 result Configuration: <> < me : User | options: delay,soln: 4,result( gotVariantUnifier(me, interpreter(0), 3, 'X:XOR <- '_+_['c2.Elem,'@1:XOR] ; 'Y:XOR <- '_+_['c1.Elem,'@1:XOR], '@),gotVariantUnifier(me, interpreter(0), 0, 'X:XOR <- 'c2.Elem ; 'Y:XOR <- 'c1.Elem, '@),gotVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '%1:XOR ; 'Y:XOR <- '_+_['c1.Elem,'c2.Elem,'%1:XOR], '%)),problem:('_+_['X:XOR, 'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],'_+_['X:XOR,'c1.Elem]) > noSuchResult( me, interpreter(0), 0, true) ========================================== erewrite in VARIANT-UNIFY-TEST : <> < me : User | options: filter,problem:( '_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],'_+_['X:XOR,'c1.Elem]) > createInterpreter(interpreterManager, me, none) . saw '_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem] rewrites: 30 result Configuration: <> < me : User | options: filter,soln: 2,result( gotVariantUnifier(me, interpreter(0), 25, 'X:XOR <- '_+_['c2.Elem,'@1:XOR] ; 'Y:XOR <- '_+_['c1.Elem,'@1:XOR], '@)),problem:('_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],'_+_['X:XOR,'c1.Elem]) > noSuchResult(me, interpreter(0), 0, true) ========================================== erewrite in VARIANT-UNIFY-TEST : <> < me : User | options: (delay filter), problem:('_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],'_+_['X:XOR, 'c1.Elem]) > createInterpreter(interpreterManager, me, none) . saw '_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem] rewrites: 30 result Configuration: <> < me : User | options: (delay filter),soln: 2,result( gotVariantUnifier(me, interpreter(0), 25, 'X:XOR <- '_+_['c2.Elem,'@1:XOR] ; 'Y:XOR <- '_+_['c1.Elem,'@1:XOR], '@)),problem:('_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],'_+_['X:XOR,'c1.Elem]) > noSuchResult(me, interpreter(0), 0, true) ========================================== filtered variant unify in XOR : X + c1 =? Y + c2 such that X + c1 irreducible . rewrites: 25 Unifier 1 X --> c2 + %1:XOR Y --> c1 + %1:XOR No more unifiers. ========================================== erewrite in DISJOINT-VARIANT-UNIFY-TEST : <> < me : User | options: none, problem:('_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],empty) > createInterpreter(interpreterManager, me, none) . saw '_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem] rewrites: 43 result Configuration: <> < me : User | options: none,soln: 9,result( gotDisjointVariantUnifier(me, interpreter(0), 6, 'X:XOR <- '_+_['c2.Elem,'@1:XOR], 'Y:XOR <- '_+_['c1.Elem,'@1:XOR], '@),gotDisjointVariantUnifier(me, interpreter(0), 0, 'X:XOR <- 'c2.Elem, 'Y:XOR <- 'c1.Elem, '@),gotDisjointVariantUnifier(me, interpreter(0), 18, 'X:XOR <- '_+_['c1.Elem,'c2.Elem,'%1:XOR], 'Y:XOR <- '%1:XOR, '%),gotDisjointVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '%1:XOR, 'Y:XOR <- '_+_['c1.Elem,'c2.Elem,'%1:XOR], '%),gotDisjointVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '0.XOR, 'Y:XOR <- '_+_['c1.Elem,'c2.Elem], '@),gotDisjointVariantUnifier(me, interpreter(0), 0, 'X:XOR <- 'c1.Elem, 'Y:XOR <- 'c2.Elem, '@),gotDisjointVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '_+_['c1.Elem,'c2.Elem], 'Y:XOR <- '0.XOR, '@),gotDisjointVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '_+_['c1.Elem,'@1:XOR], 'Y:XOR <- '_+_['c2.Elem,'@1:XOR], '@)),problem:('_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],empty) > noSuchResult(me, interpreter(0), 0, true) ========================================== erewrite in DISJOINT-VARIANT-UNIFY-TEST : <> < me : User | options: delay, problem:('_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],empty) > createInterpreter(interpreterManager, me, none) . saw '_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem] rewrites: 43 result Configuration: <> < me : User | options: delay,soln: 9,result( gotDisjointVariantUnifier(me, interpreter(0), 24, 'X:XOR <- '_+_['c2.Elem,'@1:XOR], 'Y:XOR <- '_+_['c1.Elem,'@1:XOR], '@),gotDisjointVariantUnifier(me, interpreter(0), 0, 'X:XOR <- 'c2.Elem, 'Y:XOR <- 'c1.Elem, '@),gotDisjointVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '_+_['c1.Elem,'c2.Elem,'%1:XOR], 'Y:XOR <- '%1:XOR, '%),gotDisjointVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '%1:XOR, 'Y:XOR <- '_+_['c1.Elem,'c2.Elem,'%1:XOR], '%),gotDisjointVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '0.XOR, 'Y:XOR <- '_+_['c1.Elem,'c2.Elem], '@),gotDisjointVariantUnifier(me, interpreter(0), 0, 'X:XOR <- 'c1.Elem, 'Y:XOR <- 'c2.Elem, '@),gotDisjointVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '_+_['c1.Elem,'c2.Elem], 'Y:XOR <- '0.XOR, '@),gotDisjointVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '_+_['c1.Elem,'@1:XOR], 'Y:XOR <- '_+_['c2.Elem,'@1:XOR], '@)),problem:('_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],empty) > noSuchResult(me, interpreter(0), 0, true) ========================================== erewrite in DISJOINT-VARIANT-UNIFY-TEST : <> < me : User | options: filter, problem:('_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],empty) > createInterpreter(interpreterManager, me, none) . saw '_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem] rewrites: 51 result Configuration: <> < me : User | options: filter,soln: 2,result( gotDisjointVariantUnifier(me, interpreter(0), 28, 'X:XOR <- '_+_['c2.Elem,'@1:XOR], 'Y:XOR <- '_+_['c1.Elem,'@1:XOR], '@)),problem:('_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],empty) > noSuchResult(me, interpreter(0), 18, true) ========================================== erewrite in DISJOINT-VARIANT-UNIFY-TEST : <> < me : User | options: (delay filter),problem:('_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],empty) > createInterpreter(interpreterManager, me, none) . saw '_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem] rewrites: 51 result Configuration: <> < me : User | options: (delay filter),soln: 2,result( gotDisjointVariantUnifier(me, interpreter(0), 46, 'X:XOR <- '_+_['c2.Elem,'@1:XOR], 'Y:XOR <- '_+_['c1.Elem,'@1:XOR], '@)),problem:('_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],empty) > noSuchResult(me, interpreter(0), 0, true) ========================================== erewrite in DISJOINT-VARIANT-UNIFY-TEST : <> < me : User | options: none, problem:('_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],'_+_['X:XOR, 'c1.Elem]) > createInterpreter(interpreterManager, me, none) . saw '_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem] rewrites: 12 result Configuration: <> < me : User | options: none,soln: 4,result( gotDisjointVariantUnifier(me, interpreter(0), 3, 'X:XOR <- '_+_['c2.Elem,'@1:XOR], 'Y:XOR <- '_+_['c1.Elem,'@1:XOR], '@),gotDisjointVariantUnifier(me, interpreter(0), 0, 'X:XOR <- 'c2.Elem, 'Y:XOR <- 'c1.Elem, '@),gotDisjointVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '%1:XOR, 'Y:XOR <- '_+_['c1.Elem,'c2.Elem,'%1:XOR], '%)),problem:('_+_['X:XOR, 'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],'_+_['X:XOR,'c1.Elem]) > noSuchResult( me, interpreter(0), 0, true) ========================================== erewrite in DISJOINT-VARIANT-UNIFY-TEST : <> < me : User | options: delay, problem:('_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],'_+_['X:XOR, 'c1.Elem]) > createInterpreter(interpreterManager, me, none) . saw '_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem] rewrites: 12 result Configuration: <> < me : User | options: delay,soln: 4,result( gotDisjointVariantUnifier(me, interpreter(0), 3, 'X:XOR <- '_+_['c2.Elem,'@1:XOR], 'Y:XOR <- '_+_['c1.Elem,'@1:XOR], '@),gotDisjointVariantUnifier(me, interpreter(0), 0, 'X:XOR <- 'c2.Elem, 'Y:XOR <- 'c1.Elem, '@),gotDisjointVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '%1:XOR, 'Y:XOR <- '_+_['c1.Elem,'c2.Elem,'%1:XOR], '%)),problem:('_+_['X:XOR, 'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],'_+_['X:XOR,'c1.Elem]) > noSuchResult( me, interpreter(0), 0, true) ========================================== erewrite in DISJOINT-VARIANT-UNIFY-TEST : <> < me : User | options: filter, problem:('_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],'_+_['X:XOR, 'c1.Elem]) > createInterpreter(interpreterManager, me, none) . saw '_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem] rewrites: 30 result Configuration: <> < me : User | options: filter,soln: 2,result( gotDisjointVariantUnifier(me, interpreter(0), 25, 'X:XOR <- '_+_['c2.Elem,'@1:XOR], 'Y:XOR <- '_+_['c1.Elem,'@1:XOR], '@)),problem:('_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],'_+_['X:XOR,'c1.Elem]) > noSuchResult(me, interpreter(0), 0, true) ========================================== erewrite in DISJOINT-VARIANT-UNIFY-TEST : <> < me : User | options: (delay filter),problem:('_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],'_+_[ 'X:XOR,'c1.Elem]) > createInterpreter(interpreterManager, me, none) . saw '_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem] rewrites: 30 result Configuration: <> < me : User | options: (delay filter),soln: 2,result( gotDisjointVariantUnifier(me, interpreter(0), 25, 'X:XOR <- '_+_['c2.Elem,'@1:XOR], 'Y:XOR <- '_+_['c1.Elem,'@1:XOR], '@)),problem:('_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],'_+_['X:XOR,'c1.Elem]) > noSuchResult(me, interpreter(0), 0, true) Bye. maude-3.1/tests/Meta/metaNarrow.expected0000644000175200017520000013151213730551633015300 00000000000000========================================== unify in FOO : f(X, X) =? f(Y, Z, Z) . Unifier 1 X --> f(#1:Foo, #2:Foo, #2:Foo, #1:Foo, #2:Foo) Y --> f(#1:Foo, #2:Foo, #2:Foo, #1:Foo) Z --> f(#2:Foo, #1:Foo, #2:Foo) Warning: Unification modulo the theory of operator f has encountered an instance for which it may not be complete. Unifier 2 X --> f(#1:Foo, #1:Foo, #1:Foo) Y --> f(#1:Foo, #1:Foo) Z --> f(#1:Foo, #1:Foo) Unifier 3 X --> f(#2:Foo, #1:Foo, #1:Foo) Y --> f(#2:Foo, #1:Foo, #1:Foo, #2:Foo) Z --> #1:Foo Unifier 4 X --> f(#1:Foo, #1:Foo) Y --> f(#1:Foo, #1:Foo) Z --> #1:Foo Warning: Some unifiers may have been missed due to incomplete unification algorithm(s). ========================================== reduce in META-LEVEL : metaNarrow(['FOO], 'g['f['Y:Foo,'Z:Foo,'Z:Foo]], 'W:Foo, '+, unbounded, 0) . rewrites: 3 result ResultTriple: {'h['f['%1:Foo,'%2:Foo,'%2:Foo,'%1:Foo,'%2:Foo]],'Foo, 'W:Foo <- 'h['f['%1:Foo,'%2:Foo,'%2:Foo,'%1:Foo,'%2:Foo]]} ========================================== reduce in META-LEVEL : metaNarrow(['FOO], 'g['f['Y:Foo,'Z:Foo,'Z:Foo]], 'W:Foo, '+, unbounded, 1) . Warning: Unification modulo the theory of operator f has encountered an instance for which it may not be complete. rewrites: 3 result ResultTriple: {'h['f['%1:Foo,'%1:Foo,'%1:Foo]],'Foo, 'W:Foo <- 'h['f['%1:Foo,'%1:Foo,'%1:Foo]]} ========================================== reduce in META-LEVEL : metaNarrow(['FOO], 'g['f['Y:Foo,'Z:Foo,'Z:Foo]], 'W:Foo, '+, unbounded, 2) . rewrites: 3 result ResultTriple: {'h['f['%2:Foo,'%1:Foo,'%1:Foo]],'Foo, 'W:Foo <- 'h['f['%2:Foo,'%1:Foo,'%1:Foo]]} ========================================== reduce in META-LEVEL : metaNarrow(['FOO], 'g['f['Y:Foo,'Z:Foo,'Z:Foo]], 'W:Foo, '+, unbounded, 3) . rewrites: 3 result ResultTriple: {'h['f['%1:Foo,'%1:Foo]],'Foo, 'W:Foo <- 'h['f['%1:Foo,'%1:Foo]]} ========================================== reduce in META-LEVEL : metaNarrow(['FOO], 'g['f['Y:Foo,'Z:Foo,'Z:Foo]], 'W:Foo, '+, unbounded, 4) . rewrites: 2 result ResultTriple?: (failureIncomplete).ResultTriple? ========================================== reduce in META-LEVEL : metaNarrowingApply(['FOO], 'g['f['Y:Foo,'Z:Foo,'Z:Foo]], empty, '#, 0) . Warning: Unification modulo the theory of operator f has encountered an instance for which it may not be complete. rewrites: 4 result NarrowingApplyResult: { 'h['f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo,'@2:Foo]],'Foo, [], ', 'Y:Foo <- 'f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo] ; 'Z:Foo <- 'f['@2:Foo,'@1:Foo,'@2:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo,'@2:Foo], '@ } ========================================== reduce in META-LEVEL : metaNarrowingApply(['FOO], 'g['f['Y:Foo,'Z:Foo,'Z:Foo]], empty, '#, 1) . rewrites: 4 result NarrowingApplyResult: { 'h['f['@1:Foo,'@1:Foo,'@1:Foo]],'Foo, [], ', 'Y:Foo <- 'f['@1:Foo,'@1:Foo] ; 'Z:Foo <- 'f['@1:Foo,'@1:Foo], 'X:Foo <- 'f['@1:Foo,'@1:Foo,'@1:Foo], '@ } ========================================== reduce in META-LEVEL : metaNarrowingApply(['FOO], 'g['f['Y:Foo,'Z:Foo,'Z:Foo]], empty, '#, 2) . rewrites: 4 result NarrowingApplyResult: { 'h['f['@2:Foo,'@1:Foo,'@1:Foo]],'Foo, [], ', 'Y:Foo <- 'f['@2:Foo,'@1:Foo,'@1:Foo,'@2:Foo] ; 'Z:Foo <- '@1:Foo, 'X:Foo <- 'f['@2:Foo,'@1:Foo,'@1:Foo], '@ } ========================================== reduce in META-LEVEL : metaNarrowingApply(['FOO], 'g['f['Y:Foo,'Z:Foo,'Z:Foo]], empty, '#, 3) . rewrites: 4 result NarrowingApplyResult: { 'h['f['@1:Foo,'@1:Foo]],'Foo, [], ', 'Y:Foo <- 'f['@1:Foo,'@1:Foo] ; 'Z:Foo <- '@1:Foo, 'X:Foo <- 'f['@1:Foo,'@1:Foo], '@ } ========================================== reduce in META-LEVEL : metaNarrowingApply(['FOO], 'g['f['Y:Foo,'Z:Foo,'Z:Foo]], empty, '#, 4) . rewrites: 3 result NarrowingApplyResult?: (failureIncomplete).NarrowingApplyResult? ========================================== reduce in META-LEVEL : metaNarrowingApply(['FOO], 'g['f['#22:Foo,'#23:Foo, '#23:Foo]], empty, '#, 0) . Warning: Unification modulo the theory of operator f has encountered an instance for which it may not be complete. rewrites: 4 result NarrowingApplyResult: { 'h['f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo,'@2:Foo]],'Foo, [], ', '#22:Foo <- 'f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo] ; '#23:Foo <- 'f['@2:Foo,'@1:Foo,'@2:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo,'@2:Foo], '@ } ========================================== reduce in META-LEVEL : metaNarrowingApply(['FOO], 'g['f['#22:Foo,'#23:Foo, '#23:Foo]], empty, '#, 1) . rewrites: 4 result NarrowingApplyResult: { 'h['f['@1:Foo,'@1:Foo,'@1:Foo]],'Foo, [], ', '#22:Foo <- 'f['@1:Foo,'@1:Foo] ; '#23:Foo <- 'f['@1:Foo,'@1:Foo], 'X:Foo <- 'f['@1:Foo,'@1:Foo,'@1:Foo], '@ } ========================================== reduce in META-LEVEL : metaNarrowingApply(['FOO], 'g['f['#22:Foo,'#23:Foo, '#23:Foo]], empty, '#, 2) . rewrites: 4 result NarrowingApplyResult: { 'h['f['@2:Foo,'@1:Foo,'@1:Foo]],'Foo, [], ', '#22:Foo <- 'f['@2:Foo,'@1:Foo,'@1:Foo,'@2:Foo] ; '#23:Foo <- '@1:Foo, 'X:Foo <- 'f['@2:Foo,'@1:Foo,'@1:Foo], '@ } ========================================== reduce in META-LEVEL : metaNarrowingApply(['FOO], 'g['f['#22:Foo,'#23:Foo, '#23:Foo]], empty, '#, 3) . rewrites: 4 result NarrowingApplyResult: { 'h['f['@1:Foo,'@1:Foo]],'Foo, [], ', '#22:Foo <- 'f['@1:Foo,'@1:Foo] ; '#23:Foo <- '@1:Foo, 'X:Foo <- 'f['@1:Foo,'@1:Foo], '@ } ========================================== reduce in META-LEVEL : metaNarrowingApply(['FOO], 'g['f['#22:Foo,'#23:Foo, '#23:Foo]], empty, '#, 4) . rewrites: 3 result NarrowingApplyResult?: (failureIncomplete).NarrowingApplyResult? ========================================== variant unify in BAR : h(X) =? g(f(Y, Z, Z)) . Warning: Unification modulo the theory of operator f has encountered an instance for which it may not be complete. Unifier 1 rewrites: 4 X --> f(#1:Foo, #2:Foo, #2:Foo, #1:Foo, #2:Foo) Y --> f(#1:Foo, #2:Foo, #2:Foo, #1:Foo) Z --> f(#2:Foo, #1:Foo, #2:Foo) Unifier 2 rewrites: 4 X --> f(#1:Foo, #1:Foo, #1:Foo) Y --> f(#1:Foo, #1:Foo) Z --> f(#1:Foo, #1:Foo) Unifier 3 rewrites: 4 X --> f(#1:Foo, #2:Foo, #2:Foo) Y --> f(#1:Foo, #2:Foo, #2:Foo, #1:Foo) Z --> #2:Foo Unifier 4 rewrites: 4 X --> f(#1:Foo, #1:Foo) Y --> f(#1:Foo, #1:Foo) Z --> #1:Foo No more unifiers. rewrites: 4 Warning: Some unifiers may have been missed due to incomplete unification algorithm(s). ========================================== reduce in META-LEVEL : metaNarrowingApply(['BAR], 'g['f['Y:Foo,'Z:Foo,'Z:Foo]], empty, '#, 0) . Warning: Unification modulo the theory of operator f has encountered an instance for which it may not be complete. rewrites: 8 result NarrowingApplyResult: { 'i['f['%1:Foo,'%2:Foo,'%2:Foo,'%1:Foo,'%2:Foo]],'Foo, [], ', 'Y:Foo <- 'f['%1:Foo,'%2:Foo,'%2:Foo,'%1:Foo] ; 'Z:Foo <- 'f['%2:Foo,'%1:Foo,'%2:Foo], 'X:Foo <- 'f['%1:Foo,'%2:Foo,'%2:Foo,'%1:Foo,'%2:Foo], '% } ========================================== reduce in META-LEVEL : metaNarrowingApply(['BAR], 'g['f['Y:Foo,'Z:Foo,'Z:Foo]], empty, '#, 1) . rewrites: 4 result NarrowingApplyResult: { 'i['f['%1:Foo,'%1:Foo,'%1:Foo]],'Foo, [], ', 'Y:Foo <- 'f['%1:Foo,'%1:Foo] ; 'Z:Foo <- 'f['%1:Foo,'%1:Foo], 'X:Foo <- 'f['%1:Foo,'%1:Foo,'%1:Foo], '% } ========================================== reduce in META-LEVEL : metaNarrowingApply(['BAR], 'g['f['Y:Foo,'Z:Foo,'Z:Foo]], empty, '#, 2) . rewrites: 4 result NarrowingApplyResult: { 'i['f['%1:Foo,'%2:Foo,'%2:Foo]],'Foo, [], ', 'Y:Foo <- 'f['%1:Foo,'%2:Foo,'%2:Foo,'%1:Foo] ; 'Z:Foo <- '%2:Foo, 'X:Foo <- 'f['%1:Foo,'%2:Foo,'%2:Foo], '% } ========================================== reduce in META-LEVEL : metaNarrowingApply(['BAR], 'g['f['Y:Foo,'Z:Foo,'Z:Foo]], empty, '#, 3) . rewrites: 4 result NarrowingApplyResult: { 'i['f['%1:Foo,'%1:Foo]],'Foo, [], ', 'Y:Foo <- 'f['%1:Foo,'%1:Foo] ; 'Z:Foo <- '%1:Foo, 'X:Foo <- 'f['%1:Foo,'%1:Foo], '% } ========================================== reduce in META-LEVEL : metaNarrowingApply(['BAR], 'g['f['Y:Foo,'Z:Foo,'Z:Foo]], empty, '#, 4) . rewrites: 3 result NarrowingApplyResult?: (failureIncomplete).NarrowingApplyResult? ========================================== reduce in META-LEVEL : metaNarrowingApply(['XOR-TEST], 'f['g['_+_['W:Expr, 'b.Elt]],'Z:Expr], '_+_['W:Expr,'b.Elt], '#, 0) . rewrites: 10 result NarrowingApplyResult: { 'f['h['_+_['b.Elt,'@1:Expr]],'@2:Expr],'Expr, 'f[[],'Z:Expr], ', 'W:Expr <- '_+_['a.Elt,'@1:Expr] ; 'Z:Expr <- '@2:Expr, 'Y:Expr <- '_+_['b.Elt,'@1:Expr], '@ } ========================================== reduce in META-LEVEL : metaNarrowingApply(['XOR-TEST], 'f['g['_+_['W:Expr, 'b.Elt]],'Z:Expr], '_+_['W:Expr,'b.Elt], '#, 1) . rewrites: 4 result NarrowingApplyResult: { 'f['h['b.Elt],'@1:Expr],'Expr, 'f[[],'Z:Expr], ', 'W:Expr <- 'a.Elt ; 'Z:Expr <- '@1:Expr, 'Y:Expr <- 'b.Elt, '@ } ========================================== reduce in META-LEVEL : metaNarrowingApply(['XOR-TEST], 'f['g['_+_['W:Expr, 'b.Elt]],'Z:Expr], '_+_['W:Expr,'b.Elt], '#, 2) . rewrites: 4 result NarrowingApplyResult: { 'f['h['_+_['a.Elt,'b.Elt,'%1:Expr]],'%2:Expr],'Expr, 'f[[],'Z:Expr], ', 'W:Expr <- '%1:Expr ; 'Z:Expr <- '%2:Expr, 'Y:Expr <- '_+_['a.Elt,'b.Elt,'%1:Expr], '% } ========================================== reduce in META-LEVEL : metaNarrowingApply(['XOR-TEST], 'f['g['_+_['W:Expr, 'b.Elt]],'Z:Expr], '_+_['W:Expr,'b.Elt], '#, 3) . rewrites: 9 result NarrowingApplyResult?: (failure).NarrowingApplyResult? ========================================== reduce in META-LEVEL : metaNarrowingApply(['XOR-TEST], 'f['g['_+_['W:Expr, 'b.Elt]],'Z:Expr], '_+_['W:Expr,'b.Elt], '#, delay filter, 0) . rewrites: 31 result NarrowingApplyResult: { 'f['h['_+_['b.Elt,'@1:Expr]],'@2:Expr],'Expr, 'f[[],'Z:Expr], ', 'W:Expr <- '_+_['a.Elt,'@1:Expr] ; 'Z:Expr <- '@2:Expr, 'Y:Expr <- '_+_['b.Elt,'@1:Expr], '@ } ========================================== reduce in META-LEVEL : metaNarrowingApply(['XOR-TEST], 'f['g['_+_['W:Expr, 'b.Elt]],'Z:Expr], '_+_['W:Expr,'b.Elt], '#, delay filter, 1) . rewrites: 8 result NarrowingApplyResult?: (failure).NarrowingApplyResult? ========================================== reduce in META-LEVEL : metaNarrowingApply(['XOR-TEST], 'f['g['_+_['W:Expr, 'b.Elt]],'Z:Expr], '_+_['X:Expr,'b.Elt], '#, 0) . rewrites: 34 result NarrowingApplyResult: { 'f['h['_+_['b.Elt,'@1:Expr]],'@2:Expr],'Expr, 'f[[],'Z:Expr], ', 'W:Expr <- '_+_['a.Elt,'@1:Expr] ; 'Z:Expr <- '@2:Expr, 'Y:Expr <- '_+_['b.Elt,'@1:Expr], '@ } ========================================== reduce in META-LEVEL : metaNarrowingApply(['XOR-TEST], 'f['g['_+_['W:Expr, 'b.Elt]],'Z:Expr], '_+_['X:Expr,'b.Elt], '#, 11) . rewrites: 46 result NarrowingApplyResult: { 'f['g['h['_+_['a.Elt,'@1:Expr]]],'@2:Expr],'Expr, 'f['g[[]],'Z:Expr], ', 'W:Expr <- '_+_['b.Elt,'g['@1:Expr]] ; 'Z:Expr <- '@2:Expr, 'Y:Expr <- '_+_['a.Elt,'@1:Expr], '@ } ========================================== reduce in META-LEVEL : metaNarrowingApply(['XOR-TEST], 'f['g['_+_['W:Expr, 'b.Elt]],'Z:Expr], '_+_['X:Expr,'b.Elt], '#, 12) . rewrites: 6 result NarrowingApplyResult?: (failure).NarrowingApplyResult? ========================================== reduce in META-LEVEL : metaNarrowingApply(['XOR-TEST], 'f['g['_+_['#1:Expr, 'b.Elt]],'#2:Expr], '_+_['#3:Expr,'b.Elt], '#, 0) . rewrites: 34 result NarrowingApplyResult: { 'f['h['_+_['b.Elt,'@1:Expr]],'@2:Expr],'Expr, 'f[[],'#2:Expr], ', '#1:Expr <- '_+_['a.Elt,'@1:Expr] ; '#2:Expr <- '@2:Expr, 'Y:Expr <- '_+_['b.Elt,'@1:Expr], '@ } ========================================== reduce in META-LEVEL : metaNarrowingApply(['XOR-TEST], 'f['g['_+_['#1:Expr, 'b.Elt]],'#2:Expr], '_+_['#3:Expr,'b.Elt], '#, 11) . rewrites: 46 result NarrowingApplyResult: { 'f['g['h['_+_['a.Elt,'@1:Expr]]],'@2:Expr],'Expr, 'f['g[[]],'#2:Expr], ', '#1:Expr <- '_+_['b.Elt,'g['@1:Expr]] ; '#2:Expr <- '@2:Expr, 'Y:Expr <- '_+_['a.Elt,'@1:Expr], '@ } ========================================== reduce in META-LEVEL : metaNarrowingApply(['XOR-TEST], 'f['g['_+_['#1:Expr, 'b.Elt]],'#2:Expr], '_+_['#3:Expr,'b.Elt], '#, 12) . rewrites: 6 result NarrowingApplyResult?: (failure).NarrowingApplyResult? ========================================== reduce in META-LEVEL : metaNarrowingSearch(['FOO], 'g['j['A:Foo,'B:Foo]], 'C:Foo, '*, unbounded, 'none, 0) . rewrites: 4 result NarrowingSearchResult: { 'g['j['#1:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, '#, '#1:Foo <- '@1:Foo ; '#2:Foo <- '@2:Foo ; 'C:Foo <- 'g['j['@1:Foo,'@2:Foo]], '@ } ========================================== reduce in META-LEVEL : metaNarrowingSearch(['FOO], 'g['j['A:Foo,'B:Foo]], 'C:Foo, '*, unbounded, 'none, 1) . rewrites: 3 result NarrowingSearchResult: { 'g['j['#1:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, '#, '#1:Foo <- 'f['%2:Foo] ; '#2:Foo <- '%1:Foo ; 'C:Foo <- 'g['i['f['%1:Foo],'%2:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearch(['FOO], 'g['j['A:Foo,'B:Foo]], 'C:Foo, '*, unbounded, 'none, 2) . rewrites: 5 result NarrowingSearchResult: { 'f['k['%2:Foo,'f['%3:Foo]]],'Foo, 'A:Foo <- 'f['k['%1:Foo,'%2:Foo]] ; 'B:Foo <- '%3:Foo, '%, '%2:Foo <- '@1:Foo ; '%3:Foo <- '@2:Foo ; 'C:Foo <- 'f['k['@1:Foo,'f['@2:Foo]]], '@ } ========================================== reduce in META-LEVEL : metaNarrowingSearch(['FOO], 'g['j['A:Foo,'B:Foo]], 'C:Foo, '*, unbounded, 'none, 3) . rewrites: 4 result NarrowingSearchResult?: (failure).NarrowingSearchResult? ========================================== reduce in META-LEVEL : metaNarrowingSearch(['FOO], 'g['j['A:Foo,'B:Foo]], 'C:Foo, '*, unbounded, 'match, 0) . rewrites: 4 result NarrowingSearchResult: { 'g['j['#1:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, '#, '#1:Foo <- '@1:Foo ; '#2:Foo <- '@2:Foo ; 'C:Foo <- 'g['j['@1:Foo,'@2:Foo]], '@ } ========================================== reduce in META-LEVEL : metaNarrowingSearch(['FOO], 'g['j['A:Foo,'B:Foo]], 'C:Foo, '*, unbounded, 'match, 1) . rewrites: 3 result NarrowingSearchResult: { 'g['j['#1:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, '#, '#1:Foo <- 'f['%2:Foo] ; '#2:Foo <- '%1:Foo ; 'C:Foo <- 'g['i['f['%1:Foo],'%2:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearch(['FOO], 'g['j['A:Foo,'B:Foo]], 'C:Foo, '*, unbounded, 'match, 2) . rewrites: 5 result NarrowingSearchResult: { 'f['k['%2:Foo,'f['%3:Foo]]],'Foo, 'A:Foo <- 'f['k['%1:Foo,'%2:Foo]] ; 'B:Foo <- '%3:Foo, '%, '%2:Foo <- '@1:Foo ; '%3:Foo <- '@2:Foo ; 'C:Foo <- 'f['k['@1:Foo,'f['@2:Foo]]], '@ } ========================================== reduce in META-LEVEL : metaNarrowingSearch(['FOO], 'g['j['A:Foo,'B:Foo]], 'C:Foo, '*, unbounded, 'match, 3) . rewrites: 4 result NarrowingSearchResult?: (failure).NarrowingSearchResult? ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['FOO], 'g['j['A:Foo,'B:Foo]], 'C:Foo, '*, unbounded, 'none, 0) . rewrites: 4 result NarrowingSearchPathResult: { 'g['j['#1:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo,(nil).NarrowingTrace, '#1:Foo <- '@1:Foo ; '#2:Foo <- '@2:Foo ; 'C:Foo <- 'g['j['@1:Foo,'@2:Foo]], '@ } ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['FOO], 'g['j['A:Foo,'B:Foo]], 'C:Foo, '*, unbounded, 'none, 1) . rewrites: 3 result NarrowingSearchPathResult: { 'g['j['#1:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo,(nil).NarrowingTrace, '#1:Foo <- 'f['%2:Foo] ; '#2:Foo <- '%1:Foo ; 'C:Foo <- 'g['i['f['%1:Foo],'%2:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['FOO], 'g['j['A:Foo,'B:Foo]], 'C:Foo, '*, unbounded, 'none, 2) . rewrites: 5 result NarrowingSearchPathResult: { 'g['j['#1:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, { [], ', '#1:Foo <- 'f['k['%1:Foo,'%2:Foo]] ; '#2:Foo <- '%3:Foo ; 'X:Foo <- 'f['%3:Foo] ; 'Y:Foo <- '%1:Foo ; 'Z:Foo <- '%2:Foo, '%, 'f['k['%2:Foo,'f['%3:Foo]]],'Foo, 'A:Foo <- 'f['k['%1:Foo,'%2:Foo]] ; 'B:Foo <- '%3:Foo }, '%2:Foo <- '@1:Foo ; '%3:Foo <- '@2:Foo ; 'C:Foo <- 'f['k['@1:Foo,'f['@2:Foo]]], '@ } ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['FOO], 'g['j['A:Foo,'B:Foo]], 'C:Foo, '*, unbounded, 'none, 3) . rewrites: 4 result NarrowingSearchPathResult?: (failure).NarrowingSearchPathResult? ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['FOO], 'g['j['A:Foo,'B:Foo]], 'C:Foo, '*, unbounded, 'match, 0) . rewrites: 4 result NarrowingSearchPathResult: { 'g['j['#1:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo,(nil).NarrowingTrace, '#1:Foo <- '@1:Foo ; '#2:Foo <- '@2:Foo ; 'C:Foo <- 'g['j['@1:Foo,'@2:Foo]], '@ } ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['FOO], 'g['j['A:Foo,'B:Foo]], 'C:Foo, '*, unbounded, 'match, 1) . rewrites: 3 result NarrowingSearchPathResult: { 'g['j['#1:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo,(nil).NarrowingTrace, '#1:Foo <- 'f['%2:Foo] ; '#2:Foo <- '%1:Foo ; 'C:Foo <- 'g['i['f['%1:Foo],'%2:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['FOO], 'g['j['A:Foo,'B:Foo]], 'C:Foo, '*, unbounded, 'match, 2) . rewrites: 5 result NarrowingSearchPathResult: { 'g['j['#1:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, { [], ', '#1:Foo <- 'f['k['%1:Foo,'%2:Foo]] ; '#2:Foo <- '%3:Foo ; 'X:Foo <- 'f['%3:Foo] ; 'Y:Foo <- '%1:Foo ; 'Z:Foo <- '%2:Foo, '%, 'f['k['%2:Foo,'f['%3:Foo]]],'Foo, 'A:Foo <- 'f['k['%1:Foo,'%2:Foo]] ; 'B:Foo <- '%3:Foo }, '%2:Foo <- '@1:Foo ; '%3:Foo <- '@2:Foo ; 'C:Foo <- 'f['k['@1:Foo,'f['@2:Foo]]], '@ } ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['FOO], 'g['j['A:Foo,'B:Foo]], 'C:Foo, '*, unbounded, 'match, 3) . rewrites: 4 result NarrowingSearchPathResult?: (failure).NarrowingSearchPathResult? ========================================== reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'none, 0) . rewrites: 3 result NarrowingSearchResult: { 'g['f['#1:Foo,'#2:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, '#, '#1:Foo <- '@1:Foo ; '#2:Foo <- '@2:Foo ; 'W:Foo <- 'g['f['@1:Foo,'@2:Foo,'@2:Foo]], '@ } ========================================== reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'none, 1) . Warning: Unification modulo the theory of operator f has encountered an instance for which it may not be complete. rewrites: 4 result NarrowingSearchResult: { 'h['f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo,'@2:Foo]],'Foo, 'A:Foo <- 'f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo] ; 'B:Foo <- 'f['@2:Foo,'@1:Foo,'@2:Foo], '@, '@1:Foo <- '%1:Foo ; '@2:Foo <- '%2:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%2:Foo,'%2:Foo,'%1:Foo,'%2:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'none, 2) . rewrites: 4 result NarrowingSearchResult: { 'h['f['@1:Foo,'@1:Foo,'@1:Foo]],'Foo, 'A:Foo <- 'f['@1:Foo,'@1:Foo] ; 'B:Foo <- 'f['@1:Foo,'@1:Foo], '@, '@1:Foo <- '%1:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%1:Foo,'%1:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'none, 3) . rewrites: 4 result NarrowingSearchResult: { 'h['f['@2:Foo,'@1:Foo,'@1:Foo]],'Foo, 'A:Foo <- 'f['@2:Foo,'@1:Foo,'@1:Foo,'@2:Foo] ; 'B:Foo <- '@1:Foo, '@, '@1:Foo <- '%2:Foo ; '@2:Foo <- '%1:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%2:Foo,'%2:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'none, 4) . rewrites: 4 result NarrowingSearchResult: { 'h['f['@1:Foo,'@1:Foo]],'Foo, 'A:Foo <- 'f['@1:Foo,'@1:Foo] ; 'B:Foo <- '@1:Foo, '@, '@1:Foo <- '%1:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%1:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'none, 5) . rewrites: 3 result NarrowingSearchResult?: (failureIncomplete).NarrowingSearchResult? ========================================== reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'none, 0) . Warning: Unification modulo the theory of operator f has encountered an instance for which it may not be complete. rewrites: 7 result NarrowingSearchResult: { 'h['f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo,'@2:Foo]],'Foo, 'A:Foo <- 'f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo] ; 'B:Foo <- 'f['@2:Foo,'@1:Foo,'@2:Foo], '@, '@1:Foo <- '%1:Foo ; '@2:Foo <- '%2:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%2:Foo,'%2:Foo,'%1:Foo,'%2:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'none, 1) . rewrites: 3 result NarrowingSearchResult: { 'h['f['@1:Foo,'@1:Foo,'@1:Foo]],'Foo, 'A:Foo <- 'f['@1:Foo,'@1:Foo] ; 'B:Foo <- 'f['@1:Foo,'@1:Foo], '@, '@1:Foo <- '%1:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%1:Foo,'%1:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'none, 2) . rewrites: 3 result NarrowingSearchResult: { 'h['f['@2:Foo,'@1:Foo,'@1:Foo]],'Foo, 'A:Foo <- 'f['@2:Foo,'@1:Foo,'@1:Foo,'@2:Foo] ; 'B:Foo <- '@1:Foo, '@, '@1:Foo <- '%2:Foo ; '@2:Foo <- '%1:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%2:Foo,'%2:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'none, 3) . rewrites: 3 result NarrowingSearchResult: { 'h['f['@1:Foo,'@1:Foo]],'Foo, 'A:Foo <- 'f['@1:Foo,'@1:Foo] ; 'B:Foo <- '@1:Foo, '@, '@1:Foo <- '%1:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%1:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'none, 4) . rewrites: 3 result NarrowingSearchResult?: (failureIncomplete).NarrowingSearchResult? ========================================== reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'match, 0) . rewrites: 3 result NarrowingSearchResult: { 'g['f['#1:Foo,'#2:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, '#, '#1:Foo <- '@1:Foo ; '#2:Foo <- '@2:Foo ; 'W:Foo <- 'g['f['@1:Foo,'@2:Foo,'@2:Foo]], '@ } ========================================== reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'match, 1) . Warning: Unification modulo the theory of operator f has encountered an instance for which it may not be complete. rewrites: 4 result NarrowingSearchResult: { 'h['f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo,'@2:Foo]],'Foo, 'A:Foo <- 'f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo] ; 'B:Foo <- 'f['@2:Foo,'@1:Foo,'@2:Foo], '@, '@1:Foo <- '%1:Foo ; '@2:Foo <- '%2:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%2:Foo,'%2:Foo,'%1:Foo,'%2:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'match, 2) . rewrites: 4 result NarrowingSearchResult: { 'h['f['@1:Foo,'@1:Foo,'@1:Foo]],'Foo, 'A:Foo <- 'f['@1:Foo,'@1:Foo] ; 'B:Foo <- 'f['@1:Foo,'@1:Foo], '@, '@1:Foo <- '%1:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%1:Foo,'%1:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'match, 3) . rewrites: 4 result NarrowingSearchResult: { 'h['f['@2:Foo,'@1:Foo,'@1:Foo]],'Foo, 'A:Foo <- 'f['@2:Foo,'@1:Foo,'@1:Foo,'@2:Foo] ; 'B:Foo <- '@1:Foo, '@, '@1:Foo <- '%2:Foo ; '@2:Foo <- '%1:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%2:Foo,'%2:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'match, 4) . rewrites: 4 result NarrowingSearchResult: { 'h['f['@1:Foo,'@1:Foo]],'Foo, 'A:Foo <- 'f['@1:Foo,'@1:Foo] ; 'B:Foo <- '@1:Foo, '@, '@1:Foo <- '%1:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%1:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'match, 5) . rewrites: 3 result NarrowingSearchResult?: (failureIncomplete).NarrowingSearchResult? ========================================== reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'match, 0) . Warning: Unification modulo the theory of operator f has encountered an instance for which it may not be complete. rewrites: 7 result NarrowingSearchResult: { 'h['f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo,'@2:Foo]],'Foo, 'A:Foo <- 'f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo] ; 'B:Foo <- 'f['@2:Foo,'@1:Foo,'@2:Foo], '@, '@1:Foo <- '%1:Foo ; '@2:Foo <- '%2:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%2:Foo,'%2:Foo,'%1:Foo,'%2:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'match, 1) . rewrites: 3 result NarrowingSearchResult: { 'h['f['@2:Foo,'@1:Foo,'@1:Foo]],'Foo, 'A:Foo <- 'f['@2:Foo,'@1:Foo,'@1:Foo,'@2:Foo] ; 'B:Foo <- '@1:Foo, '@, '@1:Foo <- '%2:Foo ; '@2:Foo <- '%1:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%2:Foo,'%2:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'match, 2) . rewrites: 3 result NarrowingSearchResult: { 'h['f['@1:Foo,'@1:Foo]],'Foo, 'A:Foo <- 'f['@1:Foo,'@1:Foo] ; 'B:Foo <- '@1:Foo, '@, '@1:Foo <- '%1:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%1:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'match, 3) . rewrites: 3 result NarrowingSearchResult?: (failureIncomplete).NarrowingSearchResult? ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'none, 0) . rewrites: 3 result NarrowingSearchPathResult: { 'g['f['#1:Foo,'#2:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo,(nil).NarrowingTrace, '#1:Foo <- '@1:Foo ; '#2:Foo <- '@2:Foo ; 'W:Foo <- 'g['f['@1:Foo,'@2:Foo,'@2:Foo]], '@ } ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'none, 1) . Warning: Unification modulo the theory of operator f has encountered an instance for which it may not be complete. rewrites: 4 result NarrowingSearchPathResult: { 'g['f['#1:Foo,'#2:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, { [], ', '#1:Foo <- 'f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo] ; '#2:Foo <- 'f['@2:Foo,'@1:Foo,'@2:Foo] ; 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo,'@2:Foo], '@, 'h['f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo,'@2:Foo]],'Foo, 'A:Foo <- 'f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo] ; 'B:Foo <- 'f['@2:Foo,'@1:Foo,'@2:Foo] }, '@1:Foo <- '%1:Foo ; '@2:Foo <- '%2:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%2:Foo,'%2:Foo,'%1:Foo,'%2:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'none, 2) . rewrites: 4 result NarrowingSearchPathResult: { 'g['f['#1:Foo,'#2:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, { [], ', '#1:Foo <- 'f['@1:Foo,'@1:Foo] ; '#2:Foo <- 'f['@1:Foo,'@1:Foo] ; 'X:Foo <- 'f['@1:Foo,'@1:Foo,'@1:Foo], '@, 'h['f['@1:Foo,'@1:Foo,'@1:Foo]],'Foo, 'A:Foo <- 'f['@1:Foo,'@1:Foo] ; 'B:Foo <- 'f['@1:Foo,'@1:Foo] }, '@1:Foo <- '%1:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%1:Foo,'%1:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'none, 3) . rewrites: 4 result NarrowingSearchPathResult: { 'g['f['#1:Foo,'#2:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, { [], ', '#1:Foo <- 'f['@2:Foo,'@1:Foo,'@1:Foo,'@2:Foo] ; '#2:Foo <- '@1:Foo ; 'X:Foo <- 'f['@2:Foo,'@1:Foo,'@1:Foo], '@, 'h['f['@2:Foo,'@1:Foo,'@1:Foo]],'Foo, 'A:Foo <- 'f['@2:Foo,'@1:Foo,'@1:Foo,'@2:Foo] ; 'B:Foo <- '@1:Foo }, '@1:Foo <- '%2:Foo ; '@2:Foo <- '%1:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%2:Foo,'%2:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'none, 4) . rewrites: 4 result NarrowingSearchPathResult: { 'g['f['#1:Foo,'#2:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, { [], ', '#1:Foo <- 'f['@1:Foo,'@1:Foo] ; '#2:Foo <- '@1:Foo ; 'X:Foo <- 'f['@1:Foo,'@1:Foo], '@, 'h['f['@1:Foo,'@1:Foo]],'Foo, 'A:Foo <- 'f['@1:Foo,'@1:Foo] ; 'B:Foo <- '@1:Foo }, '@1:Foo <- '%1:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%1:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'none, 5) . rewrites: 3 result NarrowingSearchPathResult?: ( failureIncomplete).NarrowingSearchPathResult? ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'none, 0) . Warning: Unification modulo the theory of operator f has encountered an instance for which it may not be complete. rewrites: 7 result NarrowingSearchPathResult: { 'g['f['#1:Foo,'#2:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, { [], ', '#1:Foo <- 'f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo] ; '#2:Foo <- 'f['@2:Foo,'@1:Foo,'@2:Foo] ; 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo,'@2:Foo], '@, 'h['f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo,'@2:Foo]],'Foo, 'A:Foo <- 'f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo] ; 'B:Foo <- 'f['@2:Foo,'@1:Foo,'@2:Foo] }, '@1:Foo <- '%1:Foo ; '@2:Foo <- '%2:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%2:Foo,'%2:Foo,'%1:Foo,'%2:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'none, 1) . rewrites: 3 result NarrowingSearchPathResult: { 'g['f['#1:Foo,'#2:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, { [], ', '#1:Foo <- 'f['@1:Foo,'@1:Foo] ; '#2:Foo <- 'f['@1:Foo,'@1:Foo] ; 'X:Foo <- 'f['@1:Foo,'@1:Foo,'@1:Foo], '@, 'h['f['@1:Foo,'@1:Foo,'@1:Foo]],'Foo, 'A:Foo <- 'f['@1:Foo,'@1:Foo] ; 'B:Foo <- 'f['@1:Foo,'@1:Foo] }, '@1:Foo <- '%1:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%1:Foo,'%1:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'none, 2) . rewrites: 3 result NarrowingSearchPathResult: { 'g['f['#1:Foo,'#2:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, { [], ', '#1:Foo <- 'f['@2:Foo,'@1:Foo,'@1:Foo,'@2:Foo] ; '#2:Foo <- '@1:Foo ; 'X:Foo <- 'f['@2:Foo,'@1:Foo,'@1:Foo], '@, 'h['f['@2:Foo,'@1:Foo,'@1:Foo]],'Foo, 'A:Foo <- 'f['@2:Foo,'@1:Foo,'@1:Foo,'@2:Foo] ; 'B:Foo <- '@1:Foo }, '@1:Foo <- '%2:Foo ; '@2:Foo <- '%1:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%2:Foo,'%2:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'none, 3) . rewrites: 3 result NarrowingSearchPathResult: { 'g['f['#1:Foo,'#2:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, { [], ', '#1:Foo <- 'f['@1:Foo,'@1:Foo] ; '#2:Foo <- '@1:Foo ; 'X:Foo <- 'f['@1:Foo,'@1:Foo], '@, 'h['f['@1:Foo,'@1:Foo]],'Foo, 'A:Foo <- 'f['@1:Foo,'@1:Foo] ; 'B:Foo <- '@1:Foo }, '@1:Foo <- '%1:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%1:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'none, 4) . rewrites: 3 result NarrowingSearchPathResult?: ( failureIncomplete).NarrowingSearchPathResult? ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'match, 0) . rewrites: 3 result NarrowingSearchPathResult: { 'g['f['#1:Foo,'#2:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo,(nil).NarrowingTrace, '#1:Foo <- '@1:Foo ; '#2:Foo <- '@2:Foo ; 'W:Foo <- 'g['f['@1:Foo,'@2:Foo,'@2:Foo]], '@ } ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'match, 1) . Warning: Unification modulo the theory of operator f has encountered an instance for which it may not be complete. rewrites: 4 result NarrowingSearchPathResult: { 'g['f['#1:Foo,'#2:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, { [], ', '#1:Foo <- 'f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo] ; '#2:Foo <- 'f['@2:Foo,'@1:Foo,'@2:Foo] ; 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo,'@2:Foo], '@, 'h['f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo,'@2:Foo]],'Foo, 'A:Foo <- 'f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo] ; 'B:Foo <- 'f['@2:Foo,'@1:Foo,'@2:Foo] }, '@1:Foo <- '%1:Foo ; '@2:Foo <- '%2:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%2:Foo,'%2:Foo,'%1:Foo,'%2:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'match, 2) . rewrites: 4 result NarrowingSearchPathResult: { 'g['f['#1:Foo,'#2:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, { [], ', '#1:Foo <- 'f['@1:Foo,'@1:Foo] ; '#2:Foo <- 'f['@1:Foo,'@1:Foo] ; 'X:Foo <- 'f['@1:Foo,'@1:Foo,'@1:Foo], '@, 'h['f['@1:Foo,'@1:Foo,'@1:Foo]],'Foo, 'A:Foo <- 'f['@1:Foo,'@1:Foo] ; 'B:Foo <- 'f['@1:Foo,'@1:Foo] }, '@1:Foo <- '%1:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%1:Foo,'%1:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'match, 3) . rewrites: 4 result NarrowingSearchPathResult: { 'g['f['#1:Foo,'#2:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, { [], ', '#1:Foo <- 'f['@2:Foo,'@1:Foo,'@1:Foo,'@2:Foo] ; '#2:Foo <- '@1:Foo ; 'X:Foo <- 'f['@2:Foo,'@1:Foo,'@1:Foo], '@, 'h['f['@2:Foo,'@1:Foo,'@1:Foo]],'Foo, 'A:Foo <- 'f['@2:Foo,'@1:Foo,'@1:Foo,'@2:Foo] ; 'B:Foo <- '@1:Foo }, '@1:Foo <- '%2:Foo ; '@2:Foo <- '%1:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%2:Foo,'%2:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'match, 4) . rewrites: 4 result NarrowingSearchPathResult: { 'g['f['#1:Foo,'#2:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, { [], ', '#1:Foo <- 'f['@1:Foo,'@1:Foo] ; '#2:Foo <- '@1:Foo ; 'X:Foo <- 'f['@1:Foo,'@1:Foo], '@, 'h['f['@1:Foo,'@1:Foo]],'Foo, 'A:Foo <- 'f['@1:Foo,'@1:Foo] ; 'B:Foo <- '@1:Foo }, '@1:Foo <- '%1:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%1:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'match, 5) . rewrites: 3 result NarrowingSearchPathResult?: ( failureIncomplete).NarrowingSearchPathResult? ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'match, 0) . Warning: Unification modulo the theory of operator f has encountered an instance for which it may not be complete. rewrites: 7 result NarrowingSearchPathResult: { 'g['f['#1:Foo,'#2:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, { [], ', '#1:Foo <- 'f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo] ; '#2:Foo <- 'f['@2:Foo,'@1:Foo,'@2:Foo] ; 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo,'@2:Foo], '@, 'h['f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo,'@2:Foo]],'Foo, 'A:Foo <- 'f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo] ; 'B:Foo <- 'f['@2:Foo,'@1:Foo,'@2:Foo] }, '@1:Foo <- '%1:Foo ; '@2:Foo <- '%2:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%2:Foo,'%2:Foo,'%1:Foo,'%2:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'match, 1) . rewrites: 3 result NarrowingSearchPathResult: { 'g['f['#1:Foo,'#2:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, { [], ', '#1:Foo <- 'f['@2:Foo,'@1:Foo,'@1:Foo,'@2:Foo] ; '#2:Foo <- '@1:Foo ; 'X:Foo <- 'f['@2:Foo,'@1:Foo,'@1:Foo], '@, 'h['f['@2:Foo,'@1:Foo,'@1:Foo]],'Foo, 'A:Foo <- 'f['@2:Foo,'@1:Foo,'@1:Foo,'@2:Foo] ; 'B:Foo <- '@1:Foo }, '@1:Foo <- '%2:Foo ; '@2:Foo <- '%1:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%2:Foo,'%2:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'match, 2) . rewrites: 3 result NarrowingSearchPathResult: { 'g['f['#1:Foo,'#2:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, { [], ', '#1:Foo <- 'f['@1:Foo,'@1:Foo] ; '#2:Foo <- '@1:Foo ; 'X:Foo <- 'f['@1:Foo,'@1:Foo], '@, 'h['f['@1:Foo,'@1:Foo]],'Foo, 'A:Foo <- 'f['@1:Foo,'@1:Foo] ; 'B:Foo <- '@1:Foo }, '@1:Foo <- '%1:Foo ; 'W:Foo <- 'h['f['%1:Foo,'%1:Foo]], '% } ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo,'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'match, 3) . rewrites: 3 result NarrowingSearchPathResult?: ( failureIncomplete).NarrowingSearchPathResult? ========================================== reduce in META-LEVEL : metaNarrowingSearch(['BAZ], 'g['j['A:Foo,'B:Foo]], 'C:Foo, '!, unbounded, 'none, 0) . rewrites: 12 result NarrowingSearchResult: { 'h['h['%1:Foo]],'Foo, 'A:Foo <- 'f['k['%2:Foo,'f['k['%1:Foo,'%1:Foo]]]] ; 'B:Foo <- 'k['%1:Foo,'%1:Foo], '%, '%1:Foo <- '@1:Foo ; 'C:Foo <- 'h['h['@1:Foo]], '@ } ========================================== reduce in META-LEVEL : metaNarrowingSearch(['BAZ], 'g['j['A:Foo,'B:Foo]], 'C:Foo, '!, unbounded, 'none, 1) . rewrites: 3 result NarrowingSearchResult: { 'h['h['%1:Foo]],'Foo, 'A:Foo <- 'f['k['%2:Foo,'h['%1:Foo]]] ; 'B:Foo <- 'k['%1:Foo,'%1:Foo], '%, '%1:Foo <- '@1:Foo ; 'C:Foo <- 'h['h['@1:Foo]], '@ } ========================================== reduce in META-LEVEL : metaNarrowingSearch(['BAZ], 'g['j['A:Foo,'B:Foo]], 'C:Foo, '!, unbounded, 'none, 2) . rewrites: 3 result NarrowingSearchResult?: (failure).NarrowingSearchResult? ========================================== reduce in META-LEVEL : metaNarrowingSearch(['BAZ], 'g['j['A:Foo,'B:Foo]], 'C:Foo, '!, unbounded, 'match, 0) . rewrites: 12 result NarrowingSearchResult: { 'h['h['%1:Foo]],'Foo, 'A:Foo <- 'f['k['%2:Foo,'f['k['%1:Foo,'%1:Foo]]]] ; 'B:Foo <- 'k['%1:Foo,'%1:Foo], '%, '%1:Foo <- '@1:Foo ; 'C:Foo <- 'h['h['@1:Foo]], '@ } ========================================== reduce in META-LEVEL : metaNarrowingSearch(['BAZ], 'g['j['A:Foo,'B:Foo]], 'C:Foo, '!, unbounded, 'match, 1) . rewrites: 3 result NarrowingSearchResult?: (failure).NarrowingSearchResult? ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['BAZ], 'g['j['A:Foo,'B:Foo]], 'C:Foo, '!, unbounded, 'none, 0) . rewrites: 12 result NarrowingSearchPathResult: { 'g['j['#1:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, { [], ', '#1:Foo <- 'f['k['%1:Foo,'%2:Foo]] ; '#2:Foo <- '%3:Foo ; 'X:Foo <- 'f['%3:Foo] ; 'Y:Foo <- '%1:Foo ; 'Z:Foo <- '%2:Foo, '%, 'f['k['%2:Foo,'f['%3:Foo]]],'Foo, 'A:Foo <- 'f['k['%1:Foo,'%2:Foo]] ; 'B:Foo <- '%3:Foo } { [], ', '%1:Foo <- '@2:Foo ; '%2:Foo <- 'f['@1:Foo] ; '%3:Foo <- '@1:Foo ; 'X:Foo <- 'f['@1:Foo], '@, 'h['f['@1:Foo]],'Foo, 'A:Foo <- 'f['k['@2:Foo,'f['@1:Foo]]] ; 'B:Foo <- '@1:Foo } { 'h[[]], ', '@1:Foo <- 'k['%1:Foo,'%1:Foo] ; '@2:Foo <- '%2:Foo ; 'X:Foo <- '%1:Foo, '%, 'h['h['%1:Foo]],'Foo, 'A:Foo <- 'f['k['%2:Foo,'f['k['%1:Foo,'%1:Foo]]]] ; 'B:Foo <- 'k['%1:Foo,'%1:Foo] }, '%1:Foo <- '@1:Foo ; 'C:Foo <- 'h['h['@1:Foo]], '@ } ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['BAZ], 'g['j['A:Foo,'B:Foo]], 'C:Foo, '!, unbounded, 'none, 1) . rewrites: 3 result NarrowingSearchPathResult: { 'g['j['#1:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, { [], ', '#1:Foo <- 'f['k['%1:Foo,'%2:Foo]] ; '#2:Foo <- '%3:Foo ; 'X:Foo <- 'f['%3:Foo] ; 'Y:Foo <- '%1:Foo ; 'Z:Foo <- '%2:Foo, '%, 'f['k['%2:Foo,'f['%3:Foo]]],'Foo, 'A:Foo <- 'f['k['%1:Foo,'%2:Foo]] ; 'B:Foo <- '%3:Foo } { 'f['k['%2:Foo,[]]], ', '%1:Foo <- '@3:Foo ; '%2:Foo <- '@2:Foo ; '%3:Foo <- 'k['@1:Foo,'@1:Foo] ; 'X:Foo <- '@1:Foo, '@, 'f['k['@2:Foo,'h['@1:Foo]]],'Foo, 'A:Foo <- 'f['k['@3:Foo,'@2:Foo]] ; 'B:Foo <- 'k['@1:Foo,'@1:Foo] } { [], ', '@1:Foo <- '%1:Foo ; '@2:Foo <- 'h['%1:Foo] ; '@3:Foo <- '%2:Foo ; 'X:Foo <- 'h['%1:Foo], '%, 'h['h['%1:Foo]],'Foo, 'A:Foo <- 'f['k['%2:Foo,'h['%1:Foo]]] ; 'B:Foo <- 'k['%1:Foo,'%1:Foo] }, '%1:Foo <- '@1:Foo ; 'C:Foo <- 'h['h['@1:Foo]], '@ } ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['BAZ], 'g['j['A:Foo,'B:Foo]], 'C:Foo, '!, unbounded, 'none, 2) . rewrites: 3 result NarrowingSearchPathResult?: (failure).NarrowingSearchPathResult? ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['BAZ], 'g['j['A:Foo,'B:Foo]], 'C:Foo, '!, unbounded, 'match, 0) . rewrites: 12 result NarrowingSearchPathResult: { 'g['j['#1:Foo,'#2:Foo]],'Foo, 'A:Foo <- '#1:Foo ; 'B:Foo <- '#2:Foo, { [], ', '#1:Foo <- 'f['k['%1:Foo,'%2:Foo]] ; '#2:Foo <- '%3:Foo ; 'X:Foo <- 'f['%3:Foo] ; 'Y:Foo <- '%1:Foo ; 'Z:Foo <- '%2:Foo, '%, 'f['k['%2:Foo,'f['%3:Foo]]],'Foo, 'A:Foo <- 'f['k['%1:Foo,'%2:Foo]] ; 'B:Foo <- '%3:Foo } { [], ', '%1:Foo <- '@2:Foo ; '%2:Foo <- 'f['@1:Foo] ; '%3:Foo <- '@1:Foo ; 'X:Foo <- 'f['@1:Foo], '@, 'h['f['@1:Foo]],'Foo, 'A:Foo <- 'f['k['@2:Foo,'f['@1:Foo]]] ; 'B:Foo <- '@1:Foo } { 'h[[]], ', '@1:Foo <- 'k['%1:Foo,'%1:Foo] ; '@2:Foo <- '%2:Foo ; 'X:Foo <- '%1:Foo, '%, 'h['h['%1:Foo]],'Foo, 'A:Foo <- 'f['k['%2:Foo,'f['k['%1:Foo,'%1:Foo]]]] ; 'B:Foo <- 'k['%1:Foo,'%1:Foo] }, '%1:Foo <- '@1:Foo ; 'C:Foo <- 'h['h['@1:Foo]], '@ } ========================================== reduce in META-LEVEL : metaNarrowingSearchPath(['BAZ], 'g['j['A:Foo,'B:Foo]], 'C:Foo, '!, unbounded, 'match, 1) . rewrites: 3 result NarrowingSearchPathResult?: (failure).NarrowingSearchPathResult? Bye. maude-3.1/tests/Meta/metaIntVariant0000755000175200017520000000036413357512122014305 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaIntVariant.maude -no-banner -no-advise \ > metaIntVariant.out 2>&1 diff $srcdir/metaIntVariant.expected metaIntVariant.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaUpDown.expected0000644000175200017520000000757213140741642015250 00000000000000========================================== reduce in META-LEVEL : metaReduce(['BOOL], 'true.Bool) . rewrites: 2 result ResultPair: {'true.Bool,'Bool} ========================================== reduce in META-LEVEL : upTerm(1) . rewrites: 1 result GroundTerm: 's_['0.Zero] ========================================== reduce in META-LEVEL : upTerm(X:Nat + 21) . rewrites: 1 result Term: '_+_['X:Nat,'s_^21['0.Zero]] ========================================== reduce in META-LEVEL : downTerm('s_['0.Zero], 0) . rewrites: 1 result NzNat: 1 ========================================== reduce in META-LEVEL : downTerm('_+_['X:Nat,'s_^21['0.Zero]], 0) . rewrites: 1 result NzNat: X:Nat + 21 ========================================== reduce in META-LEVEL : upTerm(upTerm(X:Nat + 21)) . rewrites: 2 result GroundTerm: '_`[_`][''_+_.Sort,'_`,_[''X:Nat.Variable,'_`[_`][ ''s_^21.Sort,''0.Zero.Constant]]] ========================================== reduce in META-LEVEL : upTerm(upTerm(upTerm(X:Nat + 21))) . rewrites: 3 result GroundTerm: '_`[_`][''_`[_`].Qid,'_`,_['''_+_.Sort.Constant,'_`[_`][ ''_`,_.Qid,'_`,_['''X:Nat.Variable.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''s_^21.Sort.Constant,'''0.Zero.Constant.Constant]]]]]] ========================================== reduce in META-LEVEL : downTerm(upTerm(X:Nat + 21), 0) . rewrites: 2 result NzNat: X:Nat + 21 ========================================== reduce in META-LEVEL : downTerm(downTerm(upTerm(upTerm(X:Nat + 21)), X:Term), 0) . rewrites: 4 result NzNat: X:Nat + 21 ========================================== reduce in META-LEVEL : downTerm(downTerm(downTerm(upTerm(upTerm(upTerm(X:Nat + 21))), X:Term), X:Term), 0) . *********** equation (built-in equation for symbol upTerm) upTerm(X:Nat + 21) ---> '_+_['X:Nat,'s_^21['0.Zero]] *********** equation (built-in equation for symbol upTerm) upTerm('_+_['X:Nat,'s_^21['0.Zero]]) ---> '_`[_`][''_+_.Sort,'_`,_[''X:Nat.Variable,'_`[_`][''s_^21.Sort, ''0.Zero.Constant]]] *********** equation (built-in equation for symbol upTerm) upTerm('_`[_`][''_+_.Sort,'_`,_[''X:Nat.Variable,'_`[_`][''s_^21.Sort, ''0.Zero.Constant]]]) ---> '_`[_`][''_`[_`].Qid,'_`,_['''_+_.Sort.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''X:Nat.Variable.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''s_^21.Sort.Constant,'''0.Zero.Constant.Constant]]]]]] *********** equation (built-in equation for symbol downTerm) downTerm('_`[_`][''_`[_`].Qid,'_`,_['''_+_.Sort.Constant,'_`[_`][''_`,_.Qid, '_`,_['''X:Nat.Variable.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''s_^21.Sort.Constant,'''0.Zero.Constant.Constant]]]]]], X:Term) ---> '_`[_`][''_+_.Sort,'_`,_[''X:Nat.Variable,'_`[_`][''s_^21.Sort, ''0.Zero.Constant]]] *********** equation (built-in equation for symbol downTerm) downTerm('_`[_`][''_+_.Sort,'_`,_[''X:Nat.Variable,'_`[_`][''s_^21.Sort, ''0.Zero.Constant]]], X:Term) ---> '_+_['X:Nat,'s_^21['0.Zero]] *********** equation (built-in equation for symbol downTerm) downTerm('_+_['X:Nat,'s_^21['0.Zero]], 0) ---> X:Nat + 21 rewrites: 6 result NzNat: X:Nat + 21 ========================================== reduce in UP-DOWN-TEST : upTerm(f(a, f(b, c))) . rewrites: 2 result GroundTerm: 'f['a.Foo,'f['b.Foo,'d.Foo]] ========================================== reduce in UP-DOWN-TEST : upTerm(upTerm(f(a, f(b, c)))) . rewrites: 3 result GroundTerm: '_`[_`][''f.Sort,'_`,_[''a.Foo.Constant,'_`[_`][''f.Sort, '_`,_[''b.Foo.Constant,''d.Foo.Constant]]]] ========================================== reduce in UP-DOWN-TEST : downTerm(upTerm(upTerm(f(a, f(b, c)))), X:Term) . rewrites: 4 result GroundTerm: 'f['a.Foo,'f['b.Foo,'d.Foo]] ========================================== reduce in UP-DOWN-TEST : downTerm(downTerm(upTerm(upTerm(f(a, f(b, c)))), X:Term), a) . rewrites: 5 result Foo: f(a, f(b, d)) ========================================== reduce in UP-DOWN-TEST : downTerm('f['a.Foo,'f['b.Foo,'c.Foo]], a) . rewrites: 2 result Foo: f(a, f(b, d)) Bye. maude-3.1/tests/Meta/metaXmatch0000755000175200017520000000034410511605550013445 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaXmatch.maude -no-banner -no-advise \ > metaXmatch.out 2>&1 diff $srcdir/metaXmatch.expected metaXmatch.out > /dev/null 2>&1 maude-3.1/tests/Meta/russianDollsFlat0000755000175200017520000000037413306622441014651 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/russianDollsFlat.maude -no-banner -no-advise \ > russianDollsFlat.out 2>&1 diff $srcdir/russianDollsFlat.expected russianDollsFlat.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaFrewrite0000755000175200017520000000035410511604770014014 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaFrewrite.maude -no-banner -no-advise \ > metaFrewrite.out 2>&1 diff $srcdir/metaFrewrite.expected metaFrewrite.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaWellFormed.maude0000644000175200017520000000551213217326132015354 00000000000000set show timing off . set show advisories off . select META-LEVEL . red wellFormed(fmod 'FOO is protecting 'FLOAT . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm) . red wellFormed(fmod 'FOO is protecting 'FLOAT . sorts 'Foo . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm) . red wellFormed(fmod 'FOO is protecting 'FLOAT . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . subsort 'Foo < 'Bar . op 'a : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm) . red wellFormed(fmod 'FOO is protecting 'FLOAT . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm, 'a.Foo) . red wellFormed(fmod 'FOO is protecting 'FLOAT . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm, 'b.Foo) . red wellFormed(fmod 'FOO is protecting 'FLOAT . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm, 'X:Foo <- 'a.Foo) . red wellFormed(fmod 'FOO is protecting 'FLOAT . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm, 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'a.Foo) . red wellFormed(fmod 'FOO is protecting 'FLOAT . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm, 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'b.Foo) . red wellFormed(fmod 'FOO is protecting 'FLOAT . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm, (none).Substitution) . red wellFormed(fmod 'FOO is protecting 'FLOAT . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm, 'X:Foo <- 'a.Foo ; 'X:Foo <- 'b.Foo) . red wellFormed(fmod 'FOO is protecting 'FLOAT . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . none none endfm, 'X:Bar <- 'a.Foo) . red wellFormed(fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm, 'X:Bar <- 'true.Bool) . red wellFormed(fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm, 'X:Bool <- 'true.Bool) . red wellFormed(mod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . none none rl 'a.Foo => 'b.Foo [label('k)] . endm, 'X:Bar <- 'true.Bool) . maude-3.1/tests/Meta/metaPrettyPrint0000755000175200017520000000037010511605205014521 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaPrettyPrint.maude -no-banner -no-advise \ > metaPrettyPrint.out 2>&1 diff $srcdir/metaPrettyPrint.expected metaPrettyPrint.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaApply0000755000175200017520000000034010511604742013304 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaApply.maude -no-banner -no-advise \ > metaApply.out 2>&1 diff $srcdir/metaApply.expected metaApply.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaMeta.expected0000644000175200017520000000052413140741642014710 00000000000000========================================== reduce in META-LEVEL : metaRewrite(['FOO], 'a.Foo, 10) . rewrites: 3 result ResultPair: {'b.Foo,'Foo} ========================================== reduce in META-LEVEL : metaRewrite(['SELF-REFLECTION], 'r[''a.Foo.Constant], 10) . rewrites: 7 result ResultPair: {''b.Foo.Constant,'Constant} Bye. maude-3.1/tests/Meta/russianDollsNonFlat2.expected0000644000175200017520000003065513522536500017210 00000000000000========================================== erewrite in RUSSIAN-DOLLS : <> < me : User | pending: predef,level: 0 > createInterpreter(interpreterManager, me, none) . rewrites: 79 result Configuration: <> < me : User | pending: nil,level: 0 > erewroteTerm(me, interpreter(0), 5, '__['`{_`}['_`,_['"b".Char,'"c".Char]],'`{_`}['_`,_[ '"i".Char,'"y".Char]],'`{_`}['_`,_['"a".Char,'"e".Char]]], 'NeList`{Set*`{String`}`}) ========================================== erewrite in RUSSIAN-DOLLS : <> < me : User | pending: predef,level: 1 > createInterpreter(interpreterManager, me, none) . rewrites: 153 result Configuration: <> < me : User | pending: nil,level: 1 > erewroteTerm(me, interpreter(0), 78, '__['<>.Portal,'<_:_|_>['me.Oid,'User.Cid,'_`,_[ 'level:_['0.Zero],'pending:_['nil.Seq]]],'erewroteTerm['me.Oid, 'interpreter['0.Zero],'s_^5['0.Zero],'_`[_`][''__.Sort,'_`,_['_`[_`][ ''`{_`}.Qid,'_`[_`][''_`,_.Qid,'_`,_[''"b".Char.Constant, ''"c".Char.Constant]]],'_`[_`][''`{_`}.Qid,'_`[_`][''_`,_.Qid,'_`,_[ ''"i".Char.Constant,''"y".Char.Constant]]],'_`[_`][''`{_`}.Qid,'_`[_`][ ''_`,_.Qid,'_`,_[''"a".Char.Constant,''"e".Char.Constant]]]]], ''NeList`{Set*`{String`}`}.Sort]], 'Configuration) ========================================== erewrite in RUSSIAN-DOLLS : <> < me : User | pending: predef,level: 2 > createInterpreter(interpreterManager, me, none) . rewrites: 227 result Configuration: <> < me : User | pending: nil,level: 2 > erewroteTerm(me, interpreter(0), 152, '__['<>.Portal,'<_:_|_>['me.Oid,'User.Cid,'_`,_[ 'level:_['s_['0.Zero]],'pending:_['nil.Seq]]],'erewroteTerm['me.Oid, 'interpreter['0.Zero],'s_^78['0.Zero],'_`[_`][''__.Sort,'_`,_[ ''<>.Portal.Constant,'_`[_`][''<_:_|_>.Variable,'_`,_[''me.Oid.Constant, ''User.Cid.Constant,'_`[_`][''_`,_.Qid,'_`,_['_`[_`][''level:_.Variable, ''0.Zero.Constant],'_`[_`][''pending:_.Variable,''nil.Seq.Constant]]]]], '_`[_`][''erewroteTerm.Sort,'_`,_[''me.Oid.Constant,'_`[_`][ ''interpreter.Sort,''0.Zero.Constant],'_`[_`][''s_^5.Sort, ''0.Zero.Constant],'_`[_`][''_`[_`].Qid,'_`,_['''__.Sort.Constant,'_`[_`][ ''_`,_.Qid,'_`,_['_`[_`][''_`[_`].Qid,'_`,_['''`{_`}.Qid.Constant,'_`[_`][ ''_`[_`].Qid,'_`,_['''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''"b".Char.Constant.Constant,'''"c".Char.Constant.Constant]]]]]],'_`[_`][ ''_`[_`].Qid,'_`,_['''`{_`}.Qid.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''"i".Char.Constant.Constant,'''"y".Char.Constant.Constant]]]]]],'_`[_`][ ''_`[_`].Qid,'_`,_['''`{_`}.Qid.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''"a".Char.Constant.Constant,'''"e".Char.Constant.Constant]]]]]]]]]], '''NeList`{Set*`{String`}`}.Sort.Constant]]]],''Configuration.Sort]], 'Configuration) ========================================== erewrite in RUSSIAN-DOLLS : <> < me : User | pending: predef,level: 3 > createInterpreter(interpreterManager, me, none) . rewrites: 301 result Configuration: <> < me : User | pending: nil,level: 3 > erewroteTerm(me, interpreter(0), 226, '__['<>.Portal,'<_:_|_>['me.Oid,'User.Cid,'_`,_[ 'level:_['s_^2['0.Zero]],'pending:_['nil.Seq]]],'erewroteTerm['me.Oid, 'interpreter['0.Zero],'s_^152['0.Zero],'_`[_`][''__.Sort,'_`,_[ ''<>.Portal.Constant,'_`[_`][''<_:_|_>.Variable,'_`,_[''me.Oid.Constant, ''User.Cid.Constant,'_`[_`][''_`,_.Qid,'_`,_['_`[_`][''level:_.Variable, '_`[_`][''s_.Sort,''0.Zero.Constant]],'_`[_`][''pending:_.Variable, ''nil.Seq.Constant]]]]],'_`[_`][''erewroteTerm.Sort,'_`,_[ ''me.Oid.Constant,'_`[_`][''interpreter.Sort,''0.Zero.Constant],'_`[_`][ ''s_^78.Sort,''0.Zero.Constant],'_`[_`][''_`[_`].Qid,'_`,_[ '''__.Sort.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''<>.Portal.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''<_:_|_>.Variable.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''me.Oid.Constant.Constant,'''User.Cid.Constant.Constant,'_`[_`][ ''_`[_`].Qid,'_`,_['''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_['_`[_`][ ''_`[_`].Qid,'_`,_['''level:_.Variable.Constant, '''0.Zero.Constant.Constant]],'_`[_`][''_`[_`].Qid,'_`,_[ '''pending:_.Variable.Constant,'''nil.Seq.Constant.Constant]]]]]]]]]], '_`[_`][''_`[_`].Qid,'_`,_['''erewroteTerm.Sort.Constant,'_`[_`][ ''_`,_.Qid,'_`,_['''me.Oid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''interpreter.Sort.Constant,'''0.Zero.Constant.Constant]],'_`[_`][ ''_`[_`].Qid,'_`,_['''s_^5.Sort.Constant,'''0.Zero.Constant.Constant]], '_`[_`][''_`[_`].Qid,'_`,_['''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''__.Sort.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_['_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''`{_`}.Qid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''_`,_.Qid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''"b".Char.Constant.Constant.Constant, ''''"c".Char.Constant.Constant.Constant]]]]]]]]]]]],'_`[_`][''_`[_`].Qid, '_`,_['''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''`{_`}.Qid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''_`,_.Qid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''"i".Char.Constant.Constant.Constant, ''''"y".Char.Constant.Constant.Constant]]]]]]]]]]]],'_`[_`][''_`[_`].Qid, '_`,_['''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''`{_`}.Qid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''_`,_.Qid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''"a".Char.Constant.Constant.Constant, ''''"e".Char.Constant.Constant.Constant]]]]]]]]]]]]]]]]]]]], ''''NeList`{Set*`{String`}`}.Sort.Constant.Constant]]]]]]]], '''Configuration.Sort.Constant]]]],''Configuration.Sort]], 'Configuration) ========================================== erewrite in RUSSIAN-DOLLS : <> < me : User | pending: predef,level: 4 > createInterpreter(interpreterManager, me, none) . rewrites: 375 result Configuration: <> < me : User | pending: nil,level: 4 > erewroteTerm(me, interpreter(0), 300, '__['<>.Portal,'<_:_|_>['me.Oid,'User.Cid,'_`,_[ 'level:_['s_^3['0.Zero]],'pending:_['nil.Seq]]],'erewroteTerm['me.Oid, 'interpreter['0.Zero],'s_^226['0.Zero],'_`[_`][''__.Sort,'_`,_[ ''<>.Portal.Constant,'_`[_`][''<_:_|_>.Variable,'_`,_[''me.Oid.Constant, ''User.Cid.Constant,'_`[_`][''_`,_.Qid,'_`,_['_`[_`][''level:_.Variable, '_`[_`][''s_^2.Sort,''0.Zero.Constant]],'_`[_`][''pending:_.Variable, ''nil.Seq.Constant]]]]],'_`[_`][''erewroteTerm.Sort,'_`,_[ ''me.Oid.Constant,'_`[_`][''interpreter.Sort,''0.Zero.Constant],'_`[_`][ ''s_^152.Sort,''0.Zero.Constant],'_`[_`][''_`[_`].Qid,'_`,_[ '''__.Sort.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''<>.Portal.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''<_:_|_>.Variable.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''me.Oid.Constant.Constant,'''User.Cid.Constant.Constant,'_`[_`][ ''_`[_`].Qid,'_`,_['''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_['_`[_`][ ''_`[_`].Qid,'_`,_['''level:_.Variable.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''s_.Sort.Constant,'''0.Zero.Constant.Constant]]]],'_`[_`][''_`[_`].Qid, '_`,_['''pending:_.Variable.Constant, '''nil.Seq.Constant.Constant]]]]]]]]]],'_`[_`][''_`[_`].Qid,'_`,_[ '''erewroteTerm.Sort.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''me.Oid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''interpreter.Sort.Constant,'''0.Zero.Constant.Constant]],'_`[_`][ ''_`[_`].Qid,'_`,_['''s_^78.Sort.Constant,'''0.Zero.Constant.Constant]], '_`[_`][''_`[_`].Qid,'_`,_['''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''__.Sort.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''<>.Portal.Constant.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''<_:_|_>.Variable.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''me.Oid.Constant.Constant.Constant, ''''User.Cid.Constant.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''_`,_.Qid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_['_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''level:_.Variable.Constant.Constant, ''''0.Zero.Constant.Constant.Constant]]]],'_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''pending:_.Variable.Constant.Constant, ''''nil.Seq.Constant.Constant.Constant]]]]]]]]]]]]]]]]]]]],'_`[_`][ ''_`[_`].Qid,'_`,_['''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''erewroteTerm.Sort.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''me.Oid.Constant.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''interpreter.Sort.Constant.Constant, ''''0.Zero.Constant.Constant.Constant]]]],'_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''s_^5.Sort.Constant.Constant,''''0.Zero.Constant.Constant.Constant]]]], '_`[_`][''_`[_`].Qid,'_`,_['''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''_`[_`].Qid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''''__.Sort.Constant.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''_`,_.Qid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_['_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''_`[_`].Qid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''''`{_`}.Qid.Constant.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''_`[_`].Qid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''''_`,_.Qid.Constant.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''_`,_.Qid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''''"b".Char.Constant.Constant.Constant.Constant, '''''"c".Char.Constant.Constant.Constant.Constant]]]]]]]]]]]]]]]]]]]]]]]], '_`[_`][''_`[_`].Qid,'_`,_['''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''_`[_`].Qid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''''`{_`}.Qid.Constant.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''_`[_`].Qid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''''_`,_.Qid.Constant.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''_`,_.Qid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''''"i".Char.Constant.Constant.Constant.Constant, '''''"y".Char.Constant.Constant.Constant.Constant]]]]]]]]]]]]]]]]]]]]]]]], '_`[_`][''_`[_`].Qid,'_`,_['''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''_`[_`].Qid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''''`{_`}.Qid.Constant.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''_`[_`].Qid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''''_`,_.Qid.Constant.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''_`,_.Qid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''''"a".Char.Constant.Constant.Constant.Constant,'''''"e".Char.Constant.Constant.Constant.Constant]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]],'''''NeList`{Set*`{String`}`}.Sort.Constant.Constant.Constant]]]]]]]]]]]]]]]], ''''Configuration.Sort.Constant.Constant]]]]]]]], '''Configuration.Sort.Constant]]]],''Configuration.Sort]], 'Configuration) Bye. maude-3.1/tests/Meta/legacyMetaGetVariant.expected0000644000175200017520000000501013553734566017225 00000000000000========================================== reduce in TEST : metaGetVariant(['XOR], upTerm(cst1 + X:XOR), ( empty).GroundTermList, (0).Zero, (0).Zero) . rewrites: 3 result Variant: {'_+_['cst1.Elem,'#1:XOR], 'X:XOR <- '#1:XOR,1,(none).Parent,false} ========================================== reduce in TEST : metaGetVariant(upModule('XOR, false), upTerm(cst1 + X:XOR), ( empty).GroundTermList, (0).Zero, (0).Zero) . rewrites: 3 result Variant: {'_+_['cst1.Elem,'#1:XOR], 'X:XOR <- '#1:XOR,1,(none).Parent,false} ========================================== reduce in TEST : metaGetVariant(['XOR], upTerm(cst1 + X:XOR), ( empty).GroundTermList, 10, (0).Zero) . rewrites: 3 result Variant: {'_+_['cst1.Elem,'#11:XOR], 'X:XOR <- '#11:XOR,11,(none).Parent,false} ========================================== reduce in TEST : metaGetVariant(['XOR], upTerm(cst1 + X:XOR), ( empty).GroundTermList, (0).Zero, 1) . rewrites: 6 result Variant: {'cst1.Elem, 'X:XOR <- '0.XOR,(0).Zero,(0).Zero,true} ========================================== reduce in TEST : metaGetVariant(['XOR], upTerm(cst1 + X:XOR), ( empty).GroundTermList, (0).Zero, 2) . rewrites: 3 result Variant: {'0.XOR, 'X:XOR <- 'cst1.Elem,(0).Zero,(0).Zero,true} ========================================== reduce in TEST : metaGetVariant(['XOR], upTerm(cst1 + X:XOR), ( empty).GroundTermList, (0).Zero, 3) . rewrites: 3 result Variant: {'%1:XOR, 'X:XOR <- '_+_['cst1.Elem,'%1:XOR],1,(0).Zero,false} ========================================== reduce in TEST : metaGetVariant(['XOR], upTerm(cst1 + X:XOR), ( empty).GroundTermList, (0).Zero, 4) . rewrites: 3 result Variant?: noVariant ========================================== reduce in TEST : metaGetVariant(['XOR], upTerm(cst2 + X:XOR), upTerm(a + X:XOR), (0).Zero, (0).Zero) . rewrites: 4 result Variant: {'_+_['cst2.Elem,'#1:XOR], 'X:XOR <- '#1:XOR,1,(none).Parent,false} ========================================== reduce in TEST : metaGetVariant(['XOR], upTerm(cst2 + X:XOR), upTerm(a + X:XOR), (0).Zero, 1) . rewrites: 6 result Variant: {'0.XOR, 'X:XOR <- 'cst2.Elem,(0).Zero,(0).Zero,true} ========================================== reduce in TEST : metaGetVariant(['XOR], upTerm(cst2 + X:XOR), upTerm(a + X:XOR), (0).Zero, 2) . rewrites: 4 result Variant: {'%1:XOR, 'X:XOR <- '_+_['cst2.Elem,'%1:XOR],1,(0).Zero,false} ========================================== reduce in TEST : metaGetVariant(['XOR], upTerm(cst2 + X:XOR), upTerm(a + X:XOR), (0).Zero, 3) . rewrites: 4 result Variant?: noVariant Bye. maude-3.1/tests/Meta/russianDollsNonFlat0000755000175200017520000000041013306623250015312 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/russianDollsNonFlat.maude -no-banner -no-advise \ > russianDollsNonFlat.out 2>&1 diff $srcdir/russianDollsNonFlat.expected russianDollsNonFlat.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaPrintAttr0000755000175200017520000000036011064254401014145 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaPrintAttr.maude -no-banner -no-advise \ > metaPrintAttr.out 2>&1 diff $srcdir/metaPrintAttr.expected metaPrintAttr.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaApply.expected0000644000175200017520000002506113140741636015115 00000000000000========================================== reduce in TEST : metaApply(m, 'a.Foo, 'k, none, 0) . rewrites: 3 result ResultTriple: {'b.Foo,'Foo,(none).Substitution} ========================================== reduce in TEST : metaApply(m, 'a.Foo, 'k, none, 1) . rewrites: 2 result ResultTriple?: (failure).ResultTriple? ========================================== reduce in TEST : metaApply(m, 'a.Foo, 'k, none, unbounded) . rewrites: 1 result [ResultTriple?]: metaApply(mod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . none none rl 'a.Foo => 'b.Foo [label('k)] . endm, 'a.Foo, 'k, none, unbounded) ========================================== reduce in TEST : metaApply(m, 'a.Foo, 'k, none, 10000000000000000000000000000) . rewrites: 2 result ResultTriple?: (failure).ResultTriple? ========================================== reduce in TEST2 : metaApply(m, 'f['a.Foo,'b.Foo], 'k, none, 0) . rewrites: 3 result ResultTriple: {'a.Foo,'Foo, 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'b.Foo} ========================================== reduce in TEST2 : metaApply(m, 'f['a.Foo,'b.Foo], 'k, none, 1) . rewrites: 3 result ResultTriple: {'b.Foo,'Foo, 'X:Foo <- 'b.Foo ; 'Y:Foo <- 'a.Foo} ========================================== reduce in TEST2 : metaApply(m, 'f['a.Foo,'b.Foo], 'k, none, 2) . rewrites: 2 result ResultTriple?: (failure).ResultTriple? ========================================== reduce in TEST2 : metaApply(m, 'f['a.Foo,'b.Foo], 'k, none, 10000000000000000000000000000) . rewrites: 2 result ResultTriple?: (failure).ResultTriple? ========================================== reduce in TEST3 : metaApply(m, 'f['a.Foo,'b.Foo], 'k, 'Y:Foo <- 'b.Foo, 0) . rewrites: 3 result ResultTriple: {'a.Foo,'Foo, 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'b.Foo} ========================================== reduce in TEST3 : metaApply(m, 'f['a.Foo,'b.Foo], 'k, 'Y:Foo <- 'b.Foo, 1) . rewrites: 2 result ResultTriple?: (failure).ResultTriple? ========================================== reduce in TEST3 : metaApply(m, 'f['b.Foo,'b.Foo], 'k, 'X:Foo <- 'b.Foo, 0) . rewrites: 3 result ResultTriple: {'b.Foo,'Foo, 'X:Foo <- 'b.Foo ; 'Y:Foo <- 'b.Foo} ========================================== reduce in TEST3 : metaApply(m, 'f['b.Foo,'b.Foo], 'k, 'X:Foo <- 'b.Foo, 1) . rewrites: 2 result ResultTriple?: (failure).ResultTriple? ========================================== reduce in TEST3 : metaApply(m, 'f['b.Foo,'b.Foo], 'k, 'Z:Foo <- 'b.Foo, 0) . rewrites: 3 result ResultTriple: {'b.Foo,'Foo, 'X:Foo <- 'b.Foo ; 'Y:Foo <- 'b.Foo} ========================================== reduce in TEST3 : metaApply(m, 'f['b.Foo,'b.Foo], 'k, 'Z:Foo <- 'b.Foo, 1) . rewrites: 2 result ResultTriple?: (failure).ResultTriple? ========================================== reduce in TEST4 : metaApply(m, 'f['b.Foo,'b.Foo], 'k, 'Z:Foo <- 'b.Foo, 0) . rewrites: 3 result ResultTriple: {'f['a.Foo,'b.Foo],'Foo, 'X:Foo <- 'f['a.Foo,'b.Foo] ; 'Y:Foo <- 'b.Foo} ========================================== reduce in TEST4 : metaApply(m, 'f['b.Foo,'b.Foo], 'k, 'Z:Foo <- 'b.Foo, 1) . rewrites: 2 result ResultTriple?: (failure).ResultTriple? ========================================== reduce in META-LEVEL : metaApply(mod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (((op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'c : nil -> 'Foo [none] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none crl 'f['X:Foo,'Y:Foo] => 'Z:Foo if 'Q:Foo := 'g['X:Foo,'Y:Foo] /\ 'g['Z:Foo, 'A:Foo] := 'Q:Foo [label('k)] . endm, 'f['a.Foo,'b.Foo,'c.Foo], 'k, 'A:Foo <- 'b.Foo, 0) . rewrites: 2 result ResultTriple: {'f['a.Foo,'c.Foo],'Foo, 'A:Foo <- 'b.Foo ; 'Q:Foo <- 'g['b.Foo,'f['a.Foo,'c.Foo]] ; 'X:Foo <- 'b.Foo ; 'Y:Foo <- 'f['a.Foo,'c.Foo] ; 'Z:Foo <- 'f['a.Foo,'c.Foo]} ========================================== reduce in META-LEVEL : metaApply(mod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (((op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'c : nil -> 'Foo [none] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none crl 'f['X:Foo,'Y:Foo] => 'Z:Foo if 'Q:Foo := 'g['X:Foo,'Y:Foo] /\ 'g['Z:Foo, 'A:Foo] := 'Q:Foo [label('k)] . endm, 'f['a.Foo,'b.Foo,'c.Foo], 'k, 'A:Foo <- 'b.Foo, 1) . rewrites: 2 result ResultTriple: {'f['a.Foo,'c.Foo],'Foo, 'A:Foo <- 'b.Foo ; 'Q:Foo <- 'g['b.Foo,'f['a.Foo,'c.Foo]] ; 'X:Foo <- 'f['a.Foo,'c.Foo] ; 'Y:Foo <- 'b.Foo ; 'Z:Foo <- 'f['a.Foo,'c.Foo]} ========================================== reduce in META-LEVEL : metaApply(mod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (((op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'c : nil -> 'Foo [none] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none crl 'f['X:Foo,'Y:Foo] => 'Z:Foo if 'Q:Foo := 'g['X:Foo,'Y:Foo] /\ 'g['Z:Foo, 'A:Foo] := 'Q:Foo [label('k)] . endm, 'f['a.Foo,'b.Foo,'c.Foo], 'k, 'A:Foo <- 'b.Foo, 2) . rewrites: 1 result ResultTriple?: (failure).ResultTriple? ========================================== reduce in META-LEVEL : metaApply(mod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (((op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'c : nil -> 'Foo [none] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none rl 'f['X:Foo,'Y:Foo] => 'X:Foo [label('k)] . endm, 'f['a.Foo,'b.Foo,'c.Foo], 'k, none, 0) . rewrites: 2 result ResultTriple: {'a.Foo,'Foo, 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'f['b.Foo,'c.Foo]} ========================================== reduce in META-LEVEL : metaApply(mod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (((op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'c : nil -> 'Foo [none] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none rl 'f['X:Foo,'Y:Foo] => 'X:Foo [label('k)] . endm, 'f['a.Foo,'b.Foo,'c.Foo], 'k, none, 1) . rewrites: 2 result ResultTriple: {'b.Foo,'Foo, 'X:Foo <- 'b.Foo ; 'Y:Foo <- 'f['a.Foo,'c.Foo]} ========================================== reduce in META-LEVEL : metaApply(mod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (((op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'c : nil -> 'Foo [none] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none rl 'f['X:Foo,'Y:Foo] => 'X:Foo [label('k)] . endm, 'f['a.Foo,'b.Foo,'c.Foo], 'k, none, 2) . rewrites: 2 result ResultTriple: {'c.Foo,'Foo, 'X:Foo <- 'c.Foo ; 'Y:Foo <- 'f['a.Foo,'b.Foo]} ========================================== reduce in META-LEVEL : metaApply(mod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (((op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'c : nil -> 'Foo [none] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none rl 'f['X:Foo,'Y:Foo] => 'X:Foo [label('k)] . endm, 'f['a.Foo,'b.Foo,'c.Foo], 'k, none, 3) . rewrites: 2 result ResultTriple: {'f['a.Foo,'b.Foo],'Foo, 'X:Foo <- 'f['a.Foo,'b.Foo] ; 'Y:Foo <- 'c.Foo} ========================================== reduce in META-LEVEL : metaApply(mod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (((op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'c : nil -> 'Foo [none] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none rl 'f['X:Foo,'Y:Foo] => 'X:Foo [label('k)] . endm, 'f['a.Foo,'b.Foo,'c.Foo], 'k, none, 4) . rewrites: 2 result ResultTriple: {'f['a.Foo,'c.Foo],'Foo, 'X:Foo <- 'f['a.Foo,'c.Foo] ; 'Y:Foo <- 'b.Foo} ========================================== reduce in META-LEVEL : metaApply(mod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (((op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'c : nil -> 'Foo [none] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none rl 'f['X:Foo,'Y:Foo] => 'X:Foo [label('k)] . endm, 'f['a.Foo,'b.Foo,'c.Foo], 'k, none, 5) . rewrites: 2 result ResultTriple: {'f['b.Foo,'c.Foo],'Foo, 'X:Foo <- 'f['b.Foo,'c.Foo] ; 'Y:Foo <- 'a.Foo} ========================================== reduce in META-LEVEL : metaApply(mod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (((op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'c : nil -> 'Foo [none] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none rl 'f['X:Foo,'Y:Foo] => 'X:Foo [label('k)] . endm, 'f['a.Foo,'b.Foo,'c.Foo], 'k, none, 6) . rewrites: 1 result ResultTriple?: (failure).ResultTriple? ========================================== reduce in META-LEVEL : metaApply(mod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (((op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'c : nil -> 'Foo [none] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none rl 'a.Foo => 'c.Foo [label('k)] . rl 'f['X:Foo,'Y:Foo] => 'X:Foo [label('k)] . endm, 'f['a.Foo,'b.Foo], 'k, none, 0) . rewrites: 2 result ResultTriple: {'a.Foo,'Foo, 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'b.Foo} ========================================== reduce in META-LEVEL : metaApply(mod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (((op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'c : nil -> 'Foo [none] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none rl 'a.Foo => 'c.Foo [label('k)] . rl 'f['X:Foo,'Y:Foo] => 'X:Foo [label('k)] . endm, 'f['a.Foo,'b.Foo], 'k, none, 1) . rewrites: 2 result ResultTriple: {'b.Foo,'Foo, 'X:Foo <- 'b.Foo ; 'Y:Foo <- 'a.Foo} ========================================== reduce in META-LEVEL : metaApply(mod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (((op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'c : nil -> 'Foo [none] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none rl 'a.Foo => 'c.Foo [label('k)] . rl 'f['X:Foo,'Y:Foo] => 'X:Foo [label('k)] . endm, 'f['a.Foo,'b.Foo], 'k, none, 2) . rewrites: 1 result ResultTriple?: (failure).ResultTriple? Bye. maude-3.1/tests/Meta/russianDollsNonFlat30000755000175200017520000000041413473620133015403 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/russianDollsNonFlat3.maude -no-banner -no-advise \ > russianDollsNonFlat3.out 2>&1 diff $srcdir/russianDollsNonFlat3.expected russianDollsNonFlat3.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaIntParse0000755000175200017520000000035413363727703013764 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaIntParse.maude -no-banner -no-advise \ > metaIntParse.out 2>&1 diff $srcdir/metaIntParse.expected metaIntParse.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaGetVariant.maude0000644000175200017520000000233613553735116015372 00000000000000set show timing off . fmod XOR is sort XOR . sort Elem . ops cst1 cst2 cst3 cst4 : -> Elem . subsort Elem < XOR . op _+_ : XOR XOR -> XOR [ctor assoc comm] . op 0 : -> XOR . op a : -> XOR . vars X Y : XOR . eq Y + 0 = Y [variant] . eq X + X = 0 [variant] . eq X + X + Y = Y [variant] . endfm fmod TEST is inc XOR . inc META-LEVEL . endfm red metaGetVariant(['XOR], upTerm(X:XOR + cst1), empty, '#, 0) . red metaGetVariant(upModule('XOR, false), upTerm(X:XOR + cst1), empty, '#, 0) . red metaGetVariant(['XOR], upTerm(X:XOR + cst1), empty, '@, 0) . red metaGetVariant(['XOR], upTerm(X:XOR + cst1), empty, '#, 1) . red metaGetVariant(['XOR], upTerm(X:XOR + cst1), empty, '#, 2) . red metaGetVariant(['XOR], upTerm(X:XOR + cst1), empty, '#, 3) . red metaGetVariant(['XOR], upTerm(X:XOR + cst1), empty, '#, 4) . red metaGetVariant(['XOR], upTerm(X:XOR + cst2), upTerm(X:XOR + a), '#, 0) . red metaGetVariant(['XOR], upTerm(X:XOR + cst2), upTerm(X:XOR + a), '#, 1) . red metaGetVariant(['XOR], upTerm(X:XOR + cst2), upTerm(X:XOR + a), '#, 2) . red metaGetVariant(['XOR], upTerm(X:XOR + cst2), upTerm(X:XOR + a), '#, 3) . *** illegal variable name red metaGetVariant(['XOR], upTerm(%1:XOR + cst1), empty, '#, 0) . maude-3.1/tests/Meta/metaPolymorph.maude0000644000175200017520000000646610026157731015320 00000000000000set show timing off . set show advisories off . *** EqualitySymbol red in META-LEVEL : metaReduce( (fmod 'FOO is including 'STRING . sorts 'Value . none op 'tt : nil -> 'Value [none] . op 'ff : nil -> 'Value [none] . op 'eq : 'Universal 'Universal -> 'Value [poly (1 2) special(id-hook('EqualitySymbol, nil) term-hook('equalTerm, 'tt.Value) term-hook('notEqualTerm, 'ff.Value))] . none none endfm) , 'eq['"a".String, '"a".String]) . red in META-LEVEL : metaReduce( (fmod 'FOO is including 'STRING . sorts 'Value . none op 'tt : nil -> 'Value [none] . op 'ff : nil -> 'Value [none] . op 'eq : 'Universal 'Universal -> 'Value [poly (1 2) special(id-hook('EqualitySymbol, nil) term-hook('equalTerm, 'tt.Value) term-hook('notEqualTerm, 'ff.Value))] . none none endfm) , 'eq['"a".String, '"b".String]) . red in META-LEVEL : metaReduce( (fmod 'FOO is including 'STRING . sorts 'Value . none op 'tt : nil -> 'Value [none] . op 'ff : nil -> 'Value [none] . op '? : 'Value 'Universal 'Universal -> 'Universal [poly (2 3 0) special(id-hook('BranchSymbol, nil) term-hook('1, 'tt.Value) term-hook('2, 'ff.Value))] . none none endfm) , '?['tt.Value, '"a".String, '"b".String]) . red in META-LEVEL : metaReduce( (fmod 'FOO is including 'STRING . sorts 'Value . none op 'tt : nil -> 'Value [none] . op 'ff : nil -> 'Value [none] . op '? : 'Value 'Universal 'Universal -> 'Universal [poly (2 3 0) special(id-hook('BranchSymbol, nil) term-hook('1, 'tt.Value) term-hook('2, 'ff.Value))] . none none endfm) , '?['ff.Value, '"a".String, '"b".String]) . red in META-LEVEL : metaReduce( (fmod 'FOO is including 'STRING . including 'META-LEVEL . sorts none . none op '^ : 'Universal -> 'Term [poly (1) special(id-hook('MetaLevelOpSymbol, 'metaUpTerm) op-hook('shareWith, 'metaReduce, 'Module 'Term, 'ResultPair))] . none none endfm) , '^['"a".String]) . red in META-LEVEL : metaReduce( (fmod 'FOO is including 'STRING . including 'META-LEVEL . sorts none . none op '! : 'Term 'Universal -> 'Universal [poly (2 0) special(id-hook('MetaLevelOpSymbol, 'metaDownTerm) op-hook('shareWith, 'metaReduce, 'Module 'Term, 'ResultPair))] . none none endfm) , '![''"a".String.Constant, '"b".String]) . red in META-LEVEL : metaReduce( (fmod 'POLY-ID3 is including 'BOOL . sorts 'Foo . none op '1 : nil -> 'Foo [none] . op 'f : 'Universal 'Foo -> 'Universal [poly (1 0) right-id('1.Foo)] . none none endfm) , 'f['true.Bool, '1.Foo]) . red in META-LEVEL : metaReduce( (fmod 'POLY-ID3 is including 'BOOL . sorts 'Foo . none op '1 : nil -> 'Foo [none] . op 'f : 'Universal 'Foo -> 'Universal [poly (1 0) right-id('1.Foo)] . op 'g : 'Univeral -> 'Universal [poly (1 0)] . none eq 'g['f['true.Bool, 'X:Foo]] = 'false.Bool [none] . endfm) , 'g['true.Bool]) . red in META-LEVEL : metaReduce( (fmod 'POLY-ID3 is including 'BOOL . sorts 'Foo . none op '1 : nil -> 'Universal [poly (0)] . none none endfm) , '1.Bool) . red in META-LEVEL : metaReduce( (fmod 'POLY-ID3 is including 'BOOL . sorts 'Foo . none op '1 : nil -> 'Universal [poly (0)] . none none endfm) , '1.Foo) . maude-3.1/tests/Meta/metaIntReplace.maude0000644000175200017520000001427213366052720015351 00000000000000set show timing off . set show advisories off . *** *** Test replacing modules and views in meta-interpreter. *** load metaInterpreter set include BOOL off . fth T is sort Elt . op f : Elt -> Elt . endfth fmod M{X :: T} is op g : X$Elt -> X$Elt . var X : X$Elt . eq g(X) = f(f(X)) . endfm fmod FOO is sort Foo . op h : Foo -> Foo . endfm view V from T to FOO is sort Elt to Foo . var X : Elt . op f to h . endv fmod TEST is inc M{V} . endfm red g(X:Foo) . mod META1 is pr META-INTERPRETER . op T : -> Module . eq T = upModule('T, false) . op M : -> Module . eq M = upModule('M, false) . op FOO : -> Module . eq FOO = upModule('FOO, false) . op V : -> View . eq V = upView('V) . op TEST : -> Module . eq TEST = upModule('TEST, false) . endm red T . red M . red FOO . red V . red TEST . mod META2 is inc META1 . op me : -> Oid . op User : -> Cid . var X Y Z : Oid . var N : Nat . var T : Term . var S : Sort . sort State . ops 1 2 3 4 5 6 7 8 : -> State [ctor] . op state:_ : State -> Attribute [ctor] . rl < X : User | state: 1 > createdInterpreter(X, Y, Z) => < X : User | state: 2 > insertModule(Z, X, T) . rl < X : User | state: 2 > insertedModule(X, Y) => < X : User | state: 3 > insertModule(Y, X, M) . rl < X : User | state: 3 > insertedModule(X, Y) => < X : User | state: 4 > insertModule(Y, X, FOO) . rl < X : User | state: 4 > insertedModule(X, Y) => < X : User | state: 5 > insertView(Y, X, V) . rl < X : User | state: 5 > insertedView(X, Y) => < X : User | state: 6 > insertModule(Y, X, TEST) . rl < X : User | state: 6 > insertedModule(X, Y) => < X : User | state: 7 > reduceTerm(Y, X, 'TEST, 'g['X:Foo]) . endm erew in META2 : <> < me : User | state: 1 > createInterpreter(interpreterManager, me, none) . mod META3 is inc META1 . op me : -> Oid . op User : -> Cid . var X Y Z : Oid . var N : Nat . var T : Term . var S : Sort . sort State . ops 1 2 3 4 5 6 7 8 9 : -> State [ctor] . op state:_ : State -> Attribute [ctor] . op M2 : -> Module . eq M2 = ( fmod 'M{'X :: 'T} is nil sorts none . none op 'g : 'X$Elt -> 'X$Elt [none] . none eq 'g['X:X$Elt] = 'f['f['f['X:X$Elt]]] [none] . endfm ) . rl < X : User | state: 1 > createdInterpreter(X, Y, Z) => < X : User | state: 2 > insertModule(Z, X, T) . rl < X : User | state: 2 > insertedModule(X, Y) => < X : User | state: 3 > insertModule(Y, X, M) . rl < X : User | state: 3 > insertedModule(X, Y) => < X : User | state: 4 > insertModule(Y, X, FOO) . rl < X : User | state: 4 > insertedModule(X, Y) => < X : User | state: 5 > insertView(Y, X, V) . rl < X : User | state: 5 > insertedView(X, Y) => < X : User | state: 6 > insertModule(Y, X, TEST) . rl < X : User | state: 6 > insertedModule(X, Y) => < X : User | state: 7 > reduceTerm(Y, X, 'TEST, 'g['X:Foo]) . rl < X : User | state: 7 > reducedTerm(X, Y, N, T, S) => < X : User | state: 8 > insertModule(Y, X, M2) . rl < X : User | state: 8 > insertedModule(X, Y) => < X : User | state: 9 > reduceTerm(Y, X, 'TEST, 'g['X:Foo]) . endm erew in META3 : <> < me : User | state: 1 > createInterpreter(interpreterManager, me, none) . mod META4 is inc META1 . op me : -> Oid . op User : -> Cid . var X Y Z : Oid . var N : Nat . var T : Term . var S : Sort . sort State . ops 1 2 3 4 5 6 7 8 9 : -> State [ctor] . op state:_ : State -> Attribute [ctor] . op FOO2 : -> Module . eq FOO2 = ( fmod 'FOO is nil sorts 'Foo . none op 'h : 'Foo -> 'Foo [none] . none none endfm ) . rl < X : User | state: 1 > createdInterpreter(X, Y, Z) => < X : User | state: 2 > insertModule(Z, X, T) . rl < X : User | state: 2 > insertedModule(X, Y) => < X : User | state: 3 > insertModule(Y, X, M) . rl < X : User | state: 3 > insertedModule(X, Y) => < X : User | state: 4 > insertModule(Y, X, FOO) . rl < X : User | state: 4 > insertedModule(X, Y) => < X : User | state: 5 > insertView(Y, X, V) . rl < X : User | state: 5 > insertedView(X, Y) => < X : User | state: 6 > insertModule(Y, X, TEST) . rl < X : User | state: 6 > insertedModule(X, Y) => < X : User | state: 7 > reduceTerm(Y, X, 'TEST, 'g['X:Foo]) . rl < X : User | state: 7 > reducedTerm(X, Y, N, T, S) => < X : User | state: 8 > insertModule(Y, X, FOO2) . rl < X : User | state: 8 > insertedModule(X, Y) => < X : User | state: 9 > reduceTerm(Y, X, 'TEST, 'g['X:Foo]) . endm erew in META4 : <> < me : User | state: 1 > createInterpreter(interpreterManager, me, none) . mod META5 is inc META1 . op me : -> Oid . op User : -> Cid . var X Y Z : Oid . var N : Nat . var T : Term . var S : Sort . sort State . ops 1 2 3 4 5 6 7 8 9 10 : -> State [ctor] . op state:_ : State -> Attribute [ctor] . op FOO2 : -> Module . eq FOO2 = ( fmod 'FOO is nil sorts 'Bar . none op 'k : 'Bar -> 'Bar [none] . none none endfm ) . op V2 : -> View . eq V2 = ( view 'V from 'T to 'FOO is sort 'Elt to 'Bar . op 'f to 'k . none endv ) . rl < X : User | state: 1 > createdInterpreter(X, Y, Z) => < X : User | state: 2 > insertModule(Z, X, T) . rl < X : User | state: 2 > insertedModule(X, Y) => < X : User | state: 3 > insertModule(Y, X, M) . rl < X : User | state: 3 > insertedModule(X, Y) => < X : User | state: 4 > insertModule(Y, X, FOO) . rl < X : User | state: 4 > insertedModule(X, Y) => < X : User | state: 5 > insertView(Y, X, V) . rl < X : User | state: 5 > insertedView(X, Y) => < X : User | state: 6 > insertModule(Y, X, TEST) . rl < X : User | state: 6 > insertedModule(X, Y) => < X : User | state: 7 > reduceTerm(Y, X, 'TEST, 'g['X:Foo]) . rl < X : User | state: 7 > reducedTerm(X, Y, N, T, S) => < X : User | state: 8 > insertModule(Y, X, FOO2) . rl < X : User | state: 8 > insertedModule(X, Y) => < X : User | state: 9 > insertView(Y, X, V2) . rl < X : User | state: 9 > insertedView(X, Y) => < X : User | state: 10 > reduceTerm(Y, X, 'TEST, 'g['X:Bar]) . endm erew in META5 : <> < me : User | state: 1 > createInterpreter(interpreterManager, me, none) . maude-3.1/tests/Meta/metaUpModExp.maude0000644000175200017520000000200610026156326015011 00000000000000set show timing off . set show advisories off . red in META-LEVEL : upImports('META-LEVEL) . fmod FOO is sorts Foo Bar . subsort Foo < Bar . op a : -> Foo . endfm fmod BAR is inc FOO * (sort Foo to Baz, op a to b) . endfm red in META-LEVEL : upImports('BAR) . fmod FOO' is sorts Foo Bar Baz . subsort Foo < Bar . op a : -> Baz . op _+_ : Foo Foo -> Foo [prec 31 gather (e E) assoc comm] . op _+_ : Baz Baz -> Foo [prec 31 gather (e E)] . endfm fmod BAR' is inc FOO' * ( sort Foo to Quux, op _+_ : Foo Foo -> Foo to _*_ [prec 29 gather (E e)], op _+_ : Baz Baz -> Foo to _._ [prec 27 gather (E e)] ) . endfm red in META-LEVEL : upImports('BAR') . fmod BAZ is inc FOO' * ( sort Foo to Quux, op _+_ : Foo Foo -> Foo to _*_ [prec 29 format (s s s s)], op _+_ : Baz Baz -> Foo to _._ [prec 27 gather (E e)], label a to b ) + NAT . endfm red in META-LEVEL : upImports('BAZ) . red in META-LEVEL : upModule('BAZ, false) . red in META-LEVEL : upModule('BAZ, true) . maude-3.1/tests/Meta/metaUp20000755000175200017520000000033010511605614012663 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaUp2.maude -no-banner -no-advise \ > metaUp2.out 2>&1 diff $srcdir/metaUp2.expected metaUp2.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaSpecial0000755000175200017520000000035010511605357013603 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaSpecial.maude -no-banner -no-advise \ > metaSpecial.out 2>&1 diff $srcdir/metaSpecial.expected metaSpecial.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaIntPrint0000755000175200017520000000035413363455167014010 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaIntPrint.maude -no-banner -no-advise \ > metaIntPrint.out 2>&1 diff $srcdir/metaIntPrint.expected metaIntPrint.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaIntVariantUnify0000755000175200017520000000041013361224250015305 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaIntVariantUnify.maude -no-banner -no-advise \ > metaIntVariantUnify.out 2>&1 diff $srcdir/metaIntVariantUnify.expected metaIntVariantUnify.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaVariantUnify2.expected0000644000175200017520000007212313724062010016520 00000000000000========================================== reduce in META-VARIANT-TEST : getUnifiers(['EXCLUSIVE-OR], upTerm(V1 * V2) =? upTerm(f1(V3 * V3 * f1(V4))), none, 0) . rewrites: 64 result UnifierList: { 'V1:`[ElemXor`] <- '_*_['%2:`[ElemXor`],'f1['f1['%1:`[ElemXor`]]]] ; 'V2:`[ElemXor`] <- '%2:`[ElemXor`] ; 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '%2:`[ElemXor`] ; 'V2:`[ElemXor`] <- '_*_['%2:`[ElemXor`],'f1['f1['%1:`[ElemXor`]]]] ; 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- 'mt.ElemXor ; 'V2:`[ElemXor`] <- 'f1['f1['%1:`[ElemXor`]]] ; 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- 'f1['f1['%1:`[ElemXor`]]] ; 'V2:`[ElemXor`] <- 'mt.ElemXor ; 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ========================================== reduce in META-VARIANT-TEST : getUnifiers(['EXCLUSIVE-OR], upTerm(V1 * V2) =? upTerm(f1(V3 * V3 * f1(V4))), delay, 0) . rewrites: 64 result UnifierList: { 'V1:`[ElemXor`] <- '_*_['%2:`[ElemXor`],'f1['f1['%1:`[ElemXor`]]]] ; 'V2:`[ElemXor`] <- '%2:`[ElemXor`] ; 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '%2:`[ElemXor`] ; 'V2:`[ElemXor`] <- '_*_['%2:`[ElemXor`],'f1['f1['%1:`[ElemXor`]]]] ; 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- 'mt.ElemXor ; 'V2:`[ElemXor`] <- 'f1['f1['%1:`[ElemXor`]]] ; 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- 'f1['f1['%1:`[ElemXor`]]] ; 'V2:`[ElemXor`] <- 'mt.ElemXor ; 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ========================================== reduce in META-VARIANT-TEST : getUnifiers(['EXCLUSIVE-OR], upTerm(V1 * V2) =? upTerm(f1(V3 * V3 * f1(V4))), filter, 0) . rewrites: 40 result UnificationPair: { 'V1:`[ElemXor`] <- '_*_['%2:`[ElemXor`],'f1['f1['%1:`[ElemXor`]]]] ; 'V2:`[ElemXor`] <- '%2:`[ElemXor`] ; 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ========================================== reduce in META-VARIANT-TEST : getUnifiers(['EXCLUSIVE-OR], upTerm(V1 * V2) =? upTerm(f1(V3 * V3 * f1(V4))), delay filter, 0) . rewrites: 40 result UnificationPair: { 'V1:`[ElemXor`] <- '_*_['%2:`[ElemXor`],'f1['f1['%1:`[ElemXor`]]]] ; 'V2:`[ElemXor`] <- '%2:`[ElemXor`] ; 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ========================================== reduce in META-VARIANT-TEST : getUnifiers(['EXCLUSIVE-OR], upTerm(f1(V1) * f1( V2)) =? upTerm(f1(V3) * f1(V3 * V4)), none, 0) . rewrites: 175 result UnifierList: { 'V1:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V2:`[ElemXor`] <- '_*_['@1:`[ElemXor`],'@2:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V4:`[ElemXor`] <- '@2:`[ElemXor`],'@} ; { 'V1:`[ElemXor`] <- '_*_['@1:`[ElemXor`],'@2:`[ElemXor`]] ; 'V2:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V3:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V4:`[ElemXor`] <- '@2:`[ElemXor`],'@} ; { 'V1:`[ElemXor`] <- 'mt.ElemXor ; 'V2:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V3:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V2:`[ElemXor`] <- 'mt.ElemXor ; 'V3:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]] ; 'V2:`[ElemXor`] <- '_*_['%2:`[ElemXor`],'%3:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]] ; 'V4:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%3:`[ElemXor`]],'%} ; { 'V1:`[ElemXor`] <- '_*_['%2:`[ElemXor`],'%3:`[ElemXor`]] ; 'V2:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]] ; 'V4:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%3:`[ElemXor`]],'%} ; { 'V1:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V2:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]] ; 'V4:`[ElemXor`] <- '%2:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]] ; 'V2:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V3:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]] ; 'V4:`[ElemXor`] <- '%2:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V2:`[ElemXor`] <- '%2:`[ElemXor`] ; 'V3:`[ElemXor`] <- '%2:`[ElemXor`] ; 'V4:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]],'%} ; { 'V1:`[ElemXor`] <- '%2:`[ElemXor`] ; 'V2:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V3:`[ElemXor`] <- '%2:`[ElemXor`] ; 'V4:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]],'%} ; { 'V1:`[ElemXor`] <- 'mt.ElemXor ; 'V2:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V3:`[ElemXor`] <- 'mt.ElemXor ; 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V2:`[ElemXor`] <- 'mt.ElemXor ; 'V3:`[ElemXor`] <- 'mt.ElemXor ; 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V2:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V3:`[ElemXor`] <- '@2:`[ElemXor`] ; 'V4:`[ElemXor`] <- 'mt.ElemXor,'@} ========================================== reduce in META-VARIANT-TEST : getUnifiers(['EXCLUSIVE-OR], upTerm(f1(V1) * f1( V2)) =? upTerm(f1(V3) * f1(V3 * V4)), delay, 0) . rewrites: 175 result UnifierList: { 'V1:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V2:`[ElemXor`] <- '_*_['@1:`[ElemXor`],'@2:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V4:`[ElemXor`] <- '@2:`[ElemXor`],'@} ; { 'V1:`[ElemXor`] <- '_*_['@1:`[ElemXor`],'@2:`[ElemXor`]] ; 'V2:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V3:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V4:`[ElemXor`] <- '@2:`[ElemXor`],'@} ; { 'V1:`[ElemXor`] <- 'mt.ElemXor ; 'V2:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V3:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V2:`[ElemXor`] <- 'mt.ElemXor ; 'V3:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]] ; 'V2:`[ElemXor`] <- '_*_['%2:`[ElemXor`],'%3:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]] ; 'V4:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%3:`[ElemXor`]],'%} ; { 'V1:`[ElemXor`] <- '_*_['%2:`[ElemXor`],'%3:`[ElemXor`]] ; 'V2:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]] ; 'V4:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%3:`[ElemXor`]],'%} ; { 'V1:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V2:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]] ; 'V4:`[ElemXor`] <- '%2:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]] ; 'V2:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V3:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]] ; 'V4:`[ElemXor`] <- '%2:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V2:`[ElemXor`] <- '%2:`[ElemXor`] ; 'V3:`[ElemXor`] <- '%2:`[ElemXor`] ; 'V4:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]],'%} ; { 'V1:`[ElemXor`] <- '%2:`[ElemXor`] ; 'V2:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V3:`[ElemXor`] <- '%2:`[ElemXor`] ; 'V4:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]],'%} ; { 'V1:`[ElemXor`] <- 'mt.ElemXor ; 'V2:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V3:`[ElemXor`] <- 'mt.ElemXor ; 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V2:`[ElemXor`] <- 'mt.ElemXor ; 'V3:`[ElemXor`] <- 'mt.ElemXor ; 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V2:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V3:`[ElemXor`] <- '@2:`[ElemXor`] ; 'V4:`[ElemXor`] <- 'mt.ElemXor,'@} ========================================== reduce in META-VARIANT-TEST : getUnifiers(['EXCLUSIVE-OR], upTerm(f1(V1) * f1( V2)) =? upTerm(f1(V3) * f1(V3 * V4)), filter, 0) . rewrites: 183 result UnifierList: { 'V1:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V2:`[ElemXor`] <- '_*_['@1:`[ElemXor`],'@2:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V4:`[ElemXor`] <- '@2:`[ElemXor`],'@} ; { 'V1:`[ElemXor`] <- '_*_['@1:`[ElemXor`],'@2:`[ElemXor`]] ; 'V2:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V3:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V4:`[ElemXor`] <- '@2:`[ElemXor`],'@} ; { 'V1:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V2:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V3:`[ElemXor`] <- '@2:`[ElemXor`] ; 'V4:`[ElemXor`] <- 'mt.ElemXor,'@} ========================================== reduce in META-VARIANT-TEST : getUnifiers(['EXCLUSIVE-OR], upTerm(f1(V1) * f1( V2)) =? upTerm(f1(V3) * f1(V3 * V4)), delay filter, 0) . rewrites: 183 result UnifierList: { 'V1:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V2:`[ElemXor`] <- '_*_['@1:`[ElemXor`],'@2:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V4:`[ElemXor`] <- '@2:`[ElemXor`],'@} ; { 'V1:`[ElemXor`] <- '_*_['@1:`[ElemXor`],'@2:`[ElemXor`]] ; 'V2:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V3:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V4:`[ElemXor`] <- '@2:`[ElemXor`],'@} ; { 'V1:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V2:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V3:`[ElemXor`] <- '@2:`[ElemXor`] ; 'V4:`[ElemXor`] <- 'mt.ElemXor,'@} ========================================== reduce in META-VARIANT-TEST : getUnifiers(['EXCLUSIVE-OR], upTerm(f1(a) * f1( V1)) =? upTerm(f1(b * V2) * f1(c * V3)), none, 0) . rewrites: 261 result UnifierList: { 'V1:`[ElemXor`] <- '_*_['c.Elem,'%1:`[ElemXor`]] ; 'V2:`[ElemXor`] <- '_*_['a.Elem,'b.Elem] ; 'V3:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '_*_['b.Elem,'%1:`[ElemXor`]] ; 'V2:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V3:`[ElemXor`] <- '_*_['a.Elem,'c.Elem],'%} ; { 'V1:`[ElemXor`] <- 'a.Elem ; 'V2:`[ElemXor`] <- '_*_['c.Elem,'@1:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '_*_['b.Elem,'@1:`[ElemXor`]],'@} ; { 'V1:`[ElemXor`] <- 'a.Elem ; 'V2:`[ElemXor`] <- 'c.Elem ; 'V3:`[ElemXor`] <- 'b.Elem,'@} ; { 'V1:`[ElemXor`] <- 'mt.ElemXor ; 'V2:`[ElemXor`] <- 'b.Elem ; 'V3:`[ElemXor`] <- '_*_['a.Elem,'c.Elem],'@} ; { 'V1:`[ElemXor`] <- 'mt.ElemXor ; 'V2:`[ElemXor`] <- '_*_['a.Elem,'b.Elem] ; 'V3:`[ElemXor`] <- 'c.Elem,'@} ; { 'V1:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V2:`[ElemXor`] <- '_*_['b.Elem,'@1:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '_*_['a.Elem,'c.Elem],'@} ; { 'V1:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V2:`[ElemXor`] <- '_*_['a.Elem,'b.Elem] ; 'V3:`[ElemXor`] <- '_*_['c.Elem,'@1:`[ElemXor`]],'@} ; { 'V1:`[ElemXor`] <- 'c.Elem ; 'V2:`[ElemXor`] <- '_*_['a.Elem,'b.Elem] ; 'V3:`[ElemXor`] <- 'mt.ElemXor,'@} ; { 'V1:`[ElemXor`] <- 'b.Elem ; 'V2:`[ElemXor`] <- 'mt.ElemXor ; 'V3:`[ElemXor`] <- '_*_['a.Elem,'c.Elem],'@} ; { 'V1:`[ElemXor`] <- 'a.Elem ; 'V2:`[ElemXor`] <- 'b.Elem ; 'V3:`[ElemXor`] <- 'c.Elem,'%} ; { 'V1:`[ElemXor`] <- 'a.Elem ; 'V2:`[ElemXor`] <- '_*_['b.Elem,'c.Elem,'%1:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- 'a.Elem ; 'V2:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V3:`[ElemXor`] <- '_*_['b.Elem,'c.Elem,'%1:`[ElemXor`]],'%} ; { 'V1:`[ElemXor`] <- 'a.Elem ; 'V2:`[ElemXor`] <- '_*_['b.Elem,'@1:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '_*_['c.Elem,'@1:`[ElemXor`]],'@} ; { 'V1:`[ElemXor`] <- 'a.Elem ; 'V2:`[ElemXor`] <- '_*_['b.Elem,'c.Elem] ; 'V3:`[ElemXor`] <- 'mt.ElemXor,'@} ; { 'V1:`[ElemXor`] <- 'a.Elem ; 'V2:`[ElemXor`] <- 'mt.ElemXor ; 'V3:`[ElemXor`] <- '_*_['b.Elem,'c.Elem],'@} ========================================== reduce in META-VARIANT-TEST : getUnifiers(['EXCLUSIVE-OR], upTerm(f1(a) * f1( V1)) =? upTerm(f1(b * V2) * f1(c * V3)), delay, 0) . rewrites: 261 result UnifierList: { 'V1:`[ElemXor`] <- '_*_['c.Elem,'%1:`[ElemXor`]] ; 'V2:`[ElemXor`] <- '_*_['a.Elem,'b.Elem] ; 'V3:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '_*_['b.Elem,'%1:`[ElemXor`]] ; 'V2:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V3:`[ElemXor`] <- '_*_['a.Elem,'c.Elem],'%} ; { 'V1:`[ElemXor`] <- 'a.Elem ; 'V2:`[ElemXor`] <- '_*_['c.Elem,'@1:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '_*_['b.Elem,'@1:`[ElemXor`]],'@} ; { 'V1:`[ElemXor`] <- 'a.Elem ; 'V2:`[ElemXor`] <- 'c.Elem ; 'V3:`[ElemXor`] <- 'b.Elem,'@} ; { 'V1:`[ElemXor`] <- 'mt.ElemXor ; 'V2:`[ElemXor`] <- 'b.Elem ; 'V3:`[ElemXor`] <- '_*_['a.Elem,'c.Elem],'@} ; { 'V1:`[ElemXor`] <- 'mt.ElemXor ; 'V2:`[ElemXor`] <- '_*_['a.Elem,'b.Elem] ; 'V3:`[ElemXor`] <- 'c.Elem,'@} ; { 'V1:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V2:`[ElemXor`] <- '_*_['b.Elem,'@1:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '_*_['a.Elem,'c.Elem],'@} ; { 'V1:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V2:`[ElemXor`] <- '_*_['a.Elem,'b.Elem] ; 'V3:`[ElemXor`] <- '_*_['c.Elem,'@1:`[ElemXor`]],'@} ; { 'V1:`[ElemXor`] <- 'c.Elem ; 'V2:`[ElemXor`] <- '_*_['a.Elem,'b.Elem] ; 'V3:`[ElemXor`] <- 'mt.ElemXor,'@} ; { 'V1:`[ElemXor`] <- 'b.Elem ; 'V2:`[ElemXor`] <- 'mt.ElemXor ; 'V3:`[ElemXor`] <- '_*_['a.Elem,'c.Elem],'@} ; { 'V1:`[ElemXor`] <- 'a.Elem ; 'V2:`[ElemXor`] <- 'b.Elem ; 'V3:`[ElemXor`] <- 'c.Elem,'%} ; { 'V1:`[ElemXor`] <- 'a.Elem ; 'V2:`[ElemXor`] <- '_*_['b.Elem,'c.Elem,'%1:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- 'a.Elem ; 'V2:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V3:`[ElemXor`] <- '_*_['b.Elem,'c.Elem,'%1:`[ElemXor`]],'%} ; { 'V1:`[ElemXor`] <- 'a.Elem ; 'V2:`[ElemXor`] <- '_*_['b.Elem,'@1:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '_*_['c.Elem,'@1:`[ElemXor`]],'@} ; { 'V1:`[ElemXor`] <- 'a.Elem ; 'V2:`[ElemXor`] <- '_*_['b.Elem,'c.Elem] ; 'V3:`[ElemXor`] <- 'mt.ElemXor,'@} ; { 'V1:`[ElemXor`] <- 'a.Elem ; 'V2:`[ElemXor`] <- 'mt.ElemXor ; 'V3:`[ElemXor`] <- '_*_['b.Elem,'c.Elem],'@} ========================================== reduce in META-VARIANT-TEST : getUnifiers(['EXCLUSIVE-OR], upTerm(f1(a) * f1( V1)) =? upTerm(f1(b * V2) * f1(c * V3)), filter, 0) . rewrites: 159 result UnifierList: { 'V1:`[ElemXor`] <- '_*_['c.Elem,'%1:`[ElemXor`]] ; 'V2:`[ElemXor`] <- '_*_['a.Elem,'b.Elem] ; 'V3:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '_*_['b.Elem,'%1:`[ElemXor`]] ; 'V2:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V3:`[ElemXor`] <- '_*_['a.Elem,'c.Elem],'%} ; { 'V1:`[ElemXor`] <- 'a.Elem ; 'V2:`[ElemXor`] <- '_*_['c.Elem,'@1:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '_*_['b.Elem,'@1:`[ElemXor`]],'@} ========================================== reduce in META-VARIANT-TEST : getUnifiers(['EXCLUSIVE-OR], upTerm(f1(a) * f1( V1)) =? upTerm(f1(b * V2) * f1(c * V3)), delay filter, 0) . rewrites: 165 result UnifierList: { 'V1:`[ElemXor`] <- '_*_['c.Elem,'%1:`[ElemXor`]] ; 'V2:`[ElemXor`] <- '_*_['a.Elem,'b.Elem] ; 'V3:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '_*_['b.Elem,'%1:`[ElemXor`]] ; 'V2:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V3:`[ElemXor`] <- '_*_['a.Elem,'c.Elem],'%} ; { 'V1:`[ElemXor`] <- 'a.Elem ; 'V2:`[ElemXor`] <- '_*_['c.Elem,'@1:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '_*_['b.Elem,'@1:`[ElemXor`]],'@} ========================================== reduce in META-VARIANT-TEST : getUnifiers(['EXCLUSIVE-OR], upTerm(V1 * V2) =? upTerm(f1(V3 * V3 * f1(V4))), none, 0) . rewrites: 64 result UnifierList: { 'V1:`[ElemXor`] <- '_*_['%2:`[ElemXor`],'f1['f1['%1:`[ElemXor`]]]] ; 'V2:`[ElemXor`] <- '%2:`[ElemXor`], 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '%2:`[ElemXor`] ; 'V2:`[ElemXor`] <- '_*_['%2:`[ElemXor`],'f1['f1['%1:`[ElemXor`]]]], 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- 'mt.ElemXor ; 'V2:`[ElemXor`] <- 'f1['f1['%1:`[ElemXor`]]], 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- 'f1['f1['%1:`[ElemXor`]]] ; 'V2:`[ElemXor`] <- 'mt.ElemXor, 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ========================================== reduce in META-VARIANT-TEST : getUnifiers(['EXCLUSIVE-OR], upTerm(V1 * V2) =? upTerm(f1(V3 * V3 * f1(V4))), delay, 0) . rewrites: 64 result UnifierList: { 'V1:`[ElemXor`] <- '_*_['%2:`[ElemXor`],'f1['f1['%1:`[ElemXor`]]]] ; 'V2:`[ElemXor`] <- '%2:`[ElemXor`], 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '%2:`[ElemXor`] ; 'V2:`[ElemXor`] <- '_*_['%2:`[ElemXor`],'f1['f1['%1:`[ElemXor`]]]], 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- 'mt.ElemXor ; 'V2:`[ElemXor`] <- 'f1['f1['%1:`[ElemXor`]]], 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- 'f1['f1['%1:`[ElemXor`]]] ; 'V2:`[ElemXor`] <- 'mt.ElemXor, 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ========================================== reduce in META-VARIANT-TEST : getUnifiers(['EXCLUSIVE-OR], upTerm(V1 * V2) =? upTerm(f1(V3 * V3 * f1(V4))), filter, 0) . rewrites: 40 result UnificationTriple: { 'V1:`[ElemXor`] <- '_*_['%2:`[ElemXor`],'f1['f1['%1:`[ElemXor`]]]] ; 'V2:`[ElemXor`] <- '%2:`[ElemXor`], 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ========================================== reduce in META-VARIANT-TEST : getUnifiers(['EXCLUSIVE-OR], upTerm(V1 * V2) =? upTerm(f1(V3 * V3 * f1(V4))), delay filter, 0) . rewrites: 40 result UnificationTriple: { 'V1:`[ElemXor`] <- '_*_['%2:`[ElemXor`],'f1['f1['%1:`[ElemXor`]]]] ; 'V2:`[ElemXor`] <- '%2:`[ElemXor`], 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ========================================== reduce in META-VARIANT-TEST : getUnifiers(['EXCLUSIVE-OR], upTerm(f1(V1) * f1( V2)) =? upTerm(f1(V3) * f1(V3 * V4)), none, 0) . rewrites: 175 result UnifierList: { 'V1:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V2:`[ElemXor`] <- '_*_['@1:`[ElemXor`],'@2:`[ElemXor`]], 'V3:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V4:`[ElemXor`] <- '@2:`[ElemXor`],'@} ; { 'V1:`[ElemXor`] <- '_*_['@1:`[ElemXor`],'@2:`[ElemXor`]] ; 'V2:`[ElemXor`] <- '@1:`[ElemXor`], 'V3:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V4:`[ElemXor`] <- '@2:`[ElemXor`],'@} ; { 'V1:`[ElemXor`] <- 'mt.ElemXor ; 'V2:`[ElemXor`] <- '%1:`[ElemXor`], 'V3:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V2:`[ElemXor`] <- 'mt.ElemXor, 'V3:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]] ; 'V2:`[ElemXor`] <- '_*_['%2:`[ElemXor`],'%3:`[ElemXor`]], 'V3:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]] ; 'V4:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%3:`[ElemXor`]],'%} ; { 'V1:`[ElemXor`] <- '_*_['%2:`[ElemXor`],'%3:`[ElemXor`]] ; 'V2:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]], 'V3:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]] ; 'V4:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%3:`[ElemXor`]],'%} ; { 'V1:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V2:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]], 'V3:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]] ; 'V4:`[ElemXor`] <- '%2:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]] ; 'V2:`[ElemXor`] <- '%1:`[ElemXor`], 'V3:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]] ; 'V4:`[ElemXor`] <- '%2:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V2:`[ElemXor`] <- '%2:`[ElemXor`], 'V3:`[ElemXor`] <- '%2:`[ElemXor`] ; 'V4:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]],'%} ; { 'V1:`[ElemXor`] <- '%2:`[ElemXor`] ; 'V2:`[ElemXor`] <- '%1:`[ElemXor`], 'V3:`[ElemXor`] <- '%2:`[ElemXor`] ; 'V4:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]],'%} ; { 'V1:`[ElemXor`] <- 'mt.ElemXor ; 'V2:`[ElemXor`] <- '%1:`[ElemXor`], 'V3:`[ElemXor`] <- 'mt.ElemXor ; 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V2:`[ElemXor`] <- 'mt.ElemXor, 'V3:`[ElemXor`] <- 'mt.ElemXor ; 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V2:`[ElemXor`] <- '@1:`[ElemXor`], 'V3:`[ElemXor`] <- '@2:`[ElemXor`] ; 'V4:`[ElemXor`] <- 'mt.ElemXor,'@} ========================================== reduce in META-VARIANT-TEST : getUnifiers(['EXCLUSIVE-OR], upTerm(f1(V1) * f1( V2)) =? upTerm(f1(V3) * f1(V3 * V4)), delay, 0) . rewrites: 175 result UnifierList: { 'V1:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V2:`[ElemXor`] <- '_*_['@1:`[ElemXor`],'@2:`[ElemXor`]], 'V3:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V4:`[ElemXor`] <- '@2:`[ElemXor`],'@} ; { 'V1:`[ElemXor`] <- '_*_['@1:`[ElemXor`],'@2:`[ElemXor`]] ; 'V2:`[ElemXor`] <- '@1:`[ElemXor`], 'V3:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V4:`[ElemXor`] <- '@2:`[ElemXor`],'@} ; { 'V1:`[ElemXor`] <- 'mt.ElemXor ; 'V2:`[ElemXor`] <- '%1:`[ElemXor`], 'V3:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V2:`[ElemXor`] <- 'mt.ElemXor, 'V3:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]] ; 'V2:`[ElemXor`] <- '_*_['%2:`[ElemXor`],'%3:`[ElemXor`]], 'V3:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]] ; 'V4:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%3:`[ElemXor`]],'%} ; { 'V1:`[ElemXor`] <- '_*_['%2:`[ElemXor`],'%3:`[ElemXor`]] ; 'V2:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]], 'V3:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]] ; 'V4:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%3:`[ElemXor`]],'%} ; { 'V1:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V2:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]], 'V3:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]] ; 'V4:`[ElemXor`] <- '%2:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]] ; 'V2:`[ElemXor`] <- '%1:`[ElemXor`], 'V3:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]] ; 'V4:`[ElemXor`] <- '%2:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V2:`[ElemXor`] <- '%2:`[ElemXor`], 'V3:`[ElemXor`] <- '%2:`[ElemXor`] ; 'V4:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]],'%} ; { 'V1:`[ElemXor`] <- '%2:`[ElemXor`] ; 'V2:`[ElemXor`] <- '%1:`[ElemXor`], 'V3:`[ElemXor`] <- '%2:`[ElemXor`] ; 'V4:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:`[ElemXor`]],'%} ; { 'V1:`[ElemXor`] <- 'mt.ElemXor ; 'V2:`[ElemXor`] <- '%1:`[ElemXor`], 'V3:`[ElemXor`] <- 'mt.ElemXor ; 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V2:`[ElemXor`] <- 'mt.ElemXor, 'V3:`[ElemXor`] <- 'mt.ElemXor ; 'V4:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V2:`[ElemXor`] <- '@1:`[ElemXor`], 'V3:`[ElemXor`] <- '@2:`[ElemXor`] ; 'V4:`[ElemXor`] <- 'mt.ElemXor,'@} ========================================== reduce in META-VARIANT-TEST : getUnifiers(['EXCLUSIVE-OR], upTerm(f1(V1) * f1( V2)) =? upTerm(f1(V3) * f1(V3 * V4)), filter, 0) . rewrites: 183 result UnifierList: { 'V1:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V2:`[ElemXor`] <- '_*_['@1:`[ElemXor`],'@2:`[ElemXor`]], 'V3:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V4:`[ElemXor`] <- '@2:`[ElemXor`],'@} ; { 'V1:`[ElemXor`] <- '_*_['@1:`[ElemXor`],'@2:`[ElemXor`]] ; 'V2:`[ElemXor`] <- '@1:`[ElemXor`], 'V3:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V4:`[ElemXor`] <- '@2:`[ElemXor`],'@} ; { 'V1:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V2:`[ElemXor`] <- '@1:`[ElemXor`], 'V3:`[ElemXor`] <- '@2:`[ElemXor`] ; 'V4:`[ElemXor`] <- 'mt.ElemXor,'@} ========================================== reduce in META-VARIANT-TEST : getUnifiers(['EXCLUSIVE-OR], upTerm(f1(V1) * f1( V2)) =? upTerm(f1(V3) * f1(V3 * V4)), delay filter, 0) . rewrites: 183 result UnifierList: { 'V1:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V2:`[ElemXor`] <- '_*_['@1:`[ElemXor`],'@2:`[ElemXor`]], 'V3:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V4:`[ElemXor`] <- '@2:`[ElemXor`],'@} ; { 'V1:`[ElemXor`] <- '_*_['@1:`[ElemXor`],'@2:`[ElemXor`]] ; 'V2:`[ElemXor`] <- '@1:`[ElemXor`], 'V3:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V4:`[ElemXor`] <- '@2:`[ElemXor`],'@} ; { 'V1:`[ElemXor`] <- '@1:`[ElemXor`] ; 'V2:`[ElemXor`] <- '@1:`[ElemXor`], 'V3:`[ElemXor`] <- '@2:`[ElemXor`] ; 'V4:`[ElemXor`] <- 'mt.ElemXor,'@} ========================================== reduce in META-VARIANT-TEST : getUnifiers(['EXCLUSIVE-OR], upTerm(f1(a) * f1( V1)) =? upTerm(f1(b * V2) * f1(c * V3)), none, 0) . rewrites: 261 result UnifierList: { 'V1:`[ElemXor`] <- '_*_['c.Elem,'%1:`[ElemXor`]], 'V2:`[ElemXor`] <- '_*_['a.Elem,'b.Elem] ; 'V3:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '_*_['b.Elem,'%1:`[ElemXor`]], 'V2:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V3:`[ElemXor`] <- '_*_['a.Elem,'c.Elem],'%} ; { 'V1:`[ElemXor`] <- 'a.Elem, 'V2:`[ElemXor`] <- '_*_['c.Elem,'@1:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '_*_['b.Elem,'@1:`[ElemXor`]],'@} ; { 'V1:`[ElemXor`] <- 'a.Elem, 'V2:`[ElemXor`] <- 'c.Elem ; 'V3:`[ElemXor`] <- 'b.Elem,'@} ; { 'V1:`[ElemXor`] <- 'mt.ElemXor, 'V2:`[ElemXor`] <- 'b.Elem ; 'V3:`[ElemXor`] <- '_*_['a.Elem,'c.Elem],'@} ; { 'V1:`[ElemXor`] <- 'mt.ElemXor, 'V2:`[ElemXor`] <- '_*_['a.Elem,'b.Elem] ; 'V3:`[ElemXor`] <- 'c.Elem,'@} ; { 'V1:`[ElemXor`] <- '@1:`[ElemXor`], 'V2:`[ElemXor`] <- '_*_['b.Elem,'@1:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '_*_['a.Elem,'c.Elem],'@} ; { 'V1:`[ElemXor`] <- '@1:`[ElemXor`], 'V2:`[ElemXor`] <- '_*_['a.Elem,'b.Elem] ; 'V3:`[ElemXor`] <- '_*_['c.Elem,'@1:`[ElemXor`]],'@} ; { 'V1:`[ElemXor`] <- 'c.Elem, 'V2:`[ElemXor`] <- '_*_['a.Elem,'b.Elem] ; 'V3:`[ElemXor`] <- 'mt.ElemXor,'@} ; { 'V1:`[ElemXor`] <- 'b.Elem, 'V2:`[ElemXor`] <- 'mt.ElemXor ; 'V3:`[ElemXor`] <- '_*_['a.Elem,'c.Elem],'@} ; { 'V1:`[ElemXor`] <- 'a.Elem, 'V2:`[ElemXor`] <- 'b.Elem ; 'V3:`[ElemXor`] <- 'c.Elem,'%} ; { 'V1:`[ElemXor`] <- 'a.Elem, 'V2:`[ElemXor`] <- '_*_['b.Elem,'c.Elem,'%1:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- 'a.Elem, 'V2:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V3:`[ElemXor`] <- '_*_['b.Elem,'c.Elem,'%1:`[ElemXor`]],'%} ; { 'V1:`[ElemXor`] <- 'a.Elem, 'V2:`[ElemXor`] <- '_*_['b.Elem,'@1:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '_*_['c.Elem,'@1:`[ElemXor`]],'@} ; { 'V1:`[ElemXor`] <- 'a.Elem, 'V2:`[ElemXor`] <- '_*_['b.Elem,'c.Elem] ; 'V3:`[ElemXor`] <- 'mt.ElemXor,'@} ; { 'V1:`[ElemXor`] <- 'a.Elem, 'V2:`[ElemXor`] <- 'mt.ElemXor ; 'V3:`[ElemXor`] <- '_*_['b.Elem,'c.Elem],'@} ========================================== reduce in META-VARIANT-TEST : getUnifiers(['EXCLUSIVE-OR], upTerm(f1(a) * f1( V1)) =? upTerm(f1(b * V2) * f1(c * V3)), delay, 0) . rewrites: 261 result UnifierList: { 'V1:`[ElemXor`] <- '_*_['c.Elem,'%1:`[ElemXor`]], 'V2:`[ElemXor`] <- '_*_['a.Elem,'b.Elem] ; 'V3:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '_*_['b.Elem,'%1:`[ElemXor`]], 'V2:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V3:`[ElemXor`] <- '_*_['a.Elem,'c.Elem],'%} ; { 'V1:`[ElemXor`] <- 'a.Elem, 'V2:`[ElemXor`] <- '_*_['c.Elem,'@1:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '_*_['b.Elem,'@1:`[ElemXor`]],'@} ; { 'V1:`[ElemXor`] <- 'a.Elem, 'V2:`[ElemXor`] <- 'c.Elem ; 'V3:`[ElemXor`] <- 'b.Elem,'@} ; { 'V1:`[ElemXor`] <- 'mt.ElemXor, 'V2:`[ElemXor`] <- 'b.Elem ; 'V3:`[ElemXor`] <- '_*_['a.Elem,'c.Elem],'@} ; { 'V1:`[ElemXor`] <- 'mt.ElemXor, 'V2:`[ElemXor`] <- '_*_['a.Elem,'b.Elem] ; 'V3:`[ElemXor`] <- 'c.Elem,'@} ; { 'V1:`[ElemXor`] <- '@1:`[ElemXor`], 'V2:`[ElemXor`] <- '_*_['b.Elem,'@1:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '_*_['a.Elem,'c.Elem],'@} ; { 'V1:`[ElemXor`] <- '@1:`[ElemXor`], 'V2:`[ElemXor`] <- '_*_['a.Elem,'b.Elem] ; 'V3:`[ElemXor`] <- '_*_['c.Elem,'@1:`[ElemXor`]],'@} ; { 'V1:`[ElemXor`] <- 'c.Elem, 'V2:`[ElemXor`] <- '_*_['a.Elem,'b.Elem] ; 'V3:`[ElemXor`] <- 'mt.ElemXor,'@} ; { 'V1:`[ElemXor`] <- 'b.Elem, 'V2:`[ElemXor`] <- 'mt.ElemXor ; 'V3:`[ElemXor`] <- '_*_['a.Elem,'c.Elem],'@} ; { 'V1:`[ElemXor`] <- 'a.Elem, 'V2:`[ElemXor`] <- 'b.Elem ; 'V3:`[ElemXor`] <- 'c.Elem,'%} ; { 'V1:`[ElemXor`] <- 'a.Elem, 'V2:`[ElemXor`] <- '_*_['b.Elem,'c.Elem,'%1:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- 'a.Elem, 'V2:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V3:`[ElemXor`] <- '_*_['b.Elem,'c.Elem,'%1:`[ElemXor`]],'%} ; { 'V1:`[ElemXor`] <- 'a.Elem, 'V2:`[ElemXor`] <- '_*_['b.Elem,'@1:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '_*_['c.Elem,'@1:`[ElemXor`]],'@} ; { 'V1:`[ElemXor`] <- 'a.Elem, 'V2:`[ElemXor`] <- '_*_['b.Elem,'c.Elem] ; 'V3:`[ElemXor`] <- 'mt.ElemXor,'@} ; { 'V1:`[ElemXor`] <- 'a.Elem, 'V2:`[ElemXor`] <- 'mt.ElemXor ; 'V3:`[ElemXor`] <- '_*_['b.Elem,'c.Elem],'@} ========================================== reduce in META-VARIANT-TEST : getUnifiers(['EXCLUSIVE-OR], upTerm(f1(a) * f1( V1)) =? upTerm(f1(b * V2) * f1(c * V3)), filter, 0) . rewrites: 159 result UnifierList: { 'V1:`[ElemXor`] <- '_*_['c.Elem,'%1:`[ElemXor`]], 'V2:`[ElemXor`] <- '_*_['a.Elem,'b.Elem] ; 'V3:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '_*_['b.Elem,'%1:`[ElemXor`]], 'V2:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V3:`[ElemXor`] <- '_*_['a.Elem,'c.Elem],'%} ; { 'V1:`[ElemXor`] <- 'a.Elem, 'V2:`[ElemXor`] <- '_*_['c.Elem,'@1:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '_*_['b.Elem,'@1:`[ElemXor`]],'@} ========================================== reduce in META-VARIANT-TEST : getUnifiers(['EXCLUSIVE-OR], upTerm(f1(a) * f1( V1)) =? upTerm(f1(b * V2) * f1(c * V3)), delay filter, 0) . rewrites: 165 result UnifierList: { 'V1:`[ElemXor`] <- '_*_['c.Elem,'%1:`[ElemXor`]], 'V2:`[ElemXor`] <- '_*_['a.Elem,'b.Elem] ; 'V3:`[ElemXor`] <- '%1:`[ElemXor`],'%} ; { 'V1:`[ElemXor`] <- '_*_['b.Elem,'%1:`[ElemXor`]], 'V2:`[ElemXor`] <- '%1:`[ElemXor`] ; 'V3:`[ElemXor`] <- '_*_['a.Elem,'c.Elem],'%} ; { 'V1:`[ElemXor`] <- 'a.Elem, 'V2:`[ElemXor`] <- '_*_['c.Elem,'@1:`[ElemXor`]] ; 'V3:`[ElemXor`] <- '_*_['b.Elem,'@1:`[ElemXor`]],'@} Bye. maude-3.1/tests/Meta/metaUp.maude0000644000175200017520000000411010025725547013700 00000000000000set show timing off . set show advisories off . mod ATTR-TEST is sort Foo . ops a b c d e : -> Foo . op f : Foo Foo -> Foo . var Y : Foo . eq [first]: f(X:Foo, a) = X:Foo [metadata "this is the first equation"]. eq f(b, Y) = b [metadata "this is the second equation"]. mb [baz]: a : Foo [metadata "this is an mb"]. rl a => b [label r1] . endm red in META-LEVEL : upEqs('ATTR-TEST, true) . red in META-LEVEL : upRls('ATTR-TEST, true) . red in META-LEVEL : upMbs('ATTR-TEST, true) . red in META-LEVEL : upEqs('ATTR-TEST, false) . red in META-LEVEL : upRls('ATTR-TEST, false) . red in META-LEVEL : upMbs('ATTR-TEST, false) . select META-LEVEL . red upRls('BOOL, true) . mod KNIGHT is pr INT . sorts Pair List . subsort Pair < List . op nil : -> List . op __ : List List -> List [assoc id: nil] . op [_,_] : Int Int -> Pair . op move_ : Pair -> [Pair] . op legal : Pair -> Bool . op contains : List Pair -> Bool . op knight : Int -> [List] . vars N X Y : Int . var P Q : Pair . var L : List . eq legal([X, Y]) = X >= 1 and Y >= 1 and X <= 3 and Y <= 4 . eq contains(nil, P) = false . eq contains(Q L, P) = if P == Q then true else contains(L, P) fi . rl knight(0) => [1, 1] . crl knight(N) => L P Q if N > 0 /\ knight(N - 1) => L P /\ move P => Q /\ legal(Q) /\ not(contains(L P, Q)) . rl move [X, Y] => [X + 2, Y + 1] . rl move [X, Y] => [X + 2, Y - 1] . rl move [X, Y] => [X - 2, Y + 1] . rl move [X, Y] => [X - 2, Y - 1] . rl move [X, Y] => [X + 1, Y + 2] . rl move [X, Y] => [X + 1, Y - 2] . rl move [X, Y] => [X - 1, Y + 2] . rl move [X, Y] => [X - 1, Y - 2] . endm select META-LEVEL . red upRls('KNIGHT, true) . mod INTROSPECTION is inc META-LEVEL . op rules : -> RuleSet . rl rules => upRls('INTROSPECTION, false) . endm rew rules . mod SELF-REFLECTION is inc INTROSPECTION . op allRules : -> RuleSet . rl allRules => upRls('SELF-REFLECTION, true) . op myRules : -> RuleSet . rl myRules => upRls('SELF-REFLECTION, false) . endm rew myRules . rew allRules . red in META-LEVEL : upEqs('META-LEVEL, true) . maude-3.1/tests/Meta/metaPolymorph0000755000175200017520000000036010511605744014215 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaPolymorph.maude -no-banner -no-advise \ > metaPolymorph.out 2>&1 diff $srcdir/metaPolymorph.expected metaPolymorph.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaPrettyPrint.maude0000644000175200017520000000560113560422760015624 00000000000000set show timing off . set show advisories off . select META-LEVEL . red metaPrettyPrint( fmod 'FOO is protecting 'FLOAT . sorts none . none none none none endfm, '_+_['1.0.FiniteFloat,'1.0.FiniteFloat]) . red metaPrettyPrint( fmod 'FOO is protecting 'FLOAT . sorts none . none none none none endfm, 'X:Float) . mod TEST is inc LOOP-MODE . inc META-LEVEL . op a : -> Module . eq a = (fmod 'FOO is nil sorts 'Foo . none op 'r : nil -> 'Foo [format('r 'o)] . op 'b : nil -> 'Foo [format('b 'o)] . op 'g : nil -> 'Foo [format('g 'o)] . op '__ : 'Foo 'Foo -> 'Foo [assoc] . none none endfm) . op null : -> State . op init : -> System . var QIL : QidList . rl init => [nil, null, nil] . crl [QIL, null, nil] => [nil, null, metaPrettyPrint(a, '__['r.Foo, 'g.Foo, 'b.Foo])] if QIL =/= nil . endm loop init . (a) red in META-LEVEL : metaPrettyPrint( fmod 'FOO is protecting 'RAT . sorts none . none none none none endfm, 's_['0.Zero]) . red in META-LEVEL : metaPrettyPrint( fmod 'FOO is protecting 'RAT . sorts none . none none none none endfm, 's_['s_['0.Zero]], mixfix flat format number rat) . red in META-LEVEL : metaPrettyPrint( fmod 'FOO is protecting 'RAT . sorts none . none none none none endfm, 's_['s_['0.Zero]], none) . red in META-LEVEL : metaPrettyPrint( fmod 'FOO is protecting 'RAT . sorts none . none none none none endfm, '-_['s_['0.Zero]]) . red in META-LEVEL : metaPrettyPrint( fmod 'FOO is protecting 'RAT . sorts none . none none none none endfm, '_/_['-_['s_['0.Zero]], 's_['0.Zero]]) . red in META-LEVEL : metaPrettyPrint( fmod 'FOO is protecting 'RAT . sorts none . none none none none endfm, '-_['s_^22['0.Zero]]) . red in META-LEVEL : metaPrettyPrint( fmod 'FOO is protecting 'RAT . sorts none . none none none none endfm, '_/_['-_['s_^6789['0.Zero]], 's_^12345['0.Zero]]) . red in META-LEVEL : metaPrettyPrint( fmod 'FOO is protecting 'RAT . sorts none . none none none none endfm, '_/_['-_['s_^6789['0.Zero]], 's_^12345['0.Zero]], mixfix) . red in META-LEVEL : metaPrettyPrint( fmod 'FOO is protecting 'RAT . sorts none . none none none none endfm, '_/_['-_['s_^6789['0.Zero]], 's_^12345['0.Zero]], mixfix number) . red in META-LEVEL : metaPrettyPrint( fmod 'FOO is protecting 'RAT . sorts none . none none none none endfm, '_/_['-_['s_^6789['0.Zero]], 's_^12345['0.Zero]], mixfix rat) . red metaPrettyPrint( fmod 'FOO is protecting 'FLOAT . sorts none . none none none none endfm, 'X:Float ; 'Y:Float, 'X:Float, mixfix) . red metaPrettyPrint( fmod 'FOO is protecting 'FLOAT . sorts none . none none none none endfm, 'X:Float ; 'Y:Float, '_/_['X:Float,'Y:Float], mixfix) . maude-3.1/tests/Meta/legacyMetaVariantUnify.maude0000644000175200017520000000737613553442577017111 00000000000000set show timing off . fmod XOR is sort XOR . sort Elem . ops cst1 cst2 cst3 cst4 : -> Elem . subsort Elem < XOR . op _+_ : XOR XOR -> XOR [ctor assoc comm] . op 0 : -> XOR . vars X Y : XOR . eq Y + 0 = Y [variant] . eq X + X = 0 [variant] . eq X + X + Y = Y [variant] . endfm fmod META-TEST is inc XOR . inc META-LEVEL . endfm *** regular red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), empty, 0, 0) . red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), empty, 10, 0) . red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), empty, 0, 1) . red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), empty, 0, 2) . red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), empty, 0, 3) . red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), empty, 0, 4) . red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), empty, 0, 5) . red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), empty, 0, 6) . red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), empty, 0, 7) . red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), empty, 0, 8) . *** disjoint red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), empty, 0, 0) . red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), empty, 10, 0) . red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), empty, 0, 1) . red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), empty, 0, 2) . red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), empty, 0, 3) . red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), empty, 0, 4) . red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), empty, 0, 5) . red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), empty, 0, 6) . red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), empty, 0, 7) . red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), empty, 0, 8) . *** regular with irreducibility constraint red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), upTerm(X:XOR + cst1), 0, 0) . red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), upTerm(X:XOR + cst1), 10, 0) . red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), upTerm(X:XOR + cst1), 0, 1) . red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), upTerm(X:XOR + cst1), 0, 2) . red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), upTerm(X:XOR + cst1), 0, 3) . *** disjoint with irreducibility constraint red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), upTerm(X:XOR + cst1), 0, 0) . red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), upTerm(X:XOR + cst1), 10, 0) . red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), upTerm(X:XOR + cst1), 0, 1) . red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), upTerm(X:XOR + cst1), 0, 2) . red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), upTerm(X:XOR + cst1), 0, 3) . maude-3.1/tests/Meta/metaPrettyPrint.expected0000644000175200017520000000661113560440316016331 00000000000000========================================== reduce in META-LEVEL : metaPrettyPrint(fmod 'FOO is protecting 'FLOAT . sorts none . none none none none endfm, '_+_['1.0.FiniteFloat,'1.0.FiniteFloat]) . rewrites: 2 result NeQidList: '1.0 '+ '1.0 ========================================== reduce in META-LEVEL : metaPrettyPrint(fmod 'FOO is protecting 'FLOAT . sorts none . none none none none endfm, 'X:Float) . rewrites: 2 result Variable: 'X:Float r g b ========================================== reduce in META-LEVEL : metaPrettyPrint(fmod 'FOO is protecting 'RAT . sorts none . none none none none endfm, 's_['0.Zero]) . rewrites: 2 result Sort: '1 ========================================== reduce in META-LEVEL : metaPrettyPrint(fmod 'FOO is protecting 'RAT . sorts none . none none none none endfm, 's_['s_['0.Zero]], mixfix flat format number rat) . rewrites: 2 result NeTypeList: 's '1 ========================================== reduce in META-LEVEL : metaPrettyPrint(fmod 'FOO is protecting 'RAT . sorts none . none none none none endfm, 's_['s_['0.Zero]], none) . rewrites: 2 result NeTypeList: 's_ '`( 's_ '`( '0 '`) '`) ========================================== reduce in META-LEVEL : metaPrettyPrint(fmod 'FOO is protecting 'RAT . sorts none . none none none none endfm, '-_['s_['0.Zero]]) . rewrites: 2 result Sort: '-1 ========================================== reduce in META-LEVEL : metaPrettyPrint(fmod 'FOO is protecting 'RAT . sorts none . none none none none endfm, '_/_['-_['s_['0.Zero]],'s_['0.Zero]]) . rewrites: 2 result Sort: '-1/1 ========================================== reduce in META-LEVEL : metaPrettyPrint(fmod 'FOO is protecting 'RAT . sorts none . none none none none endfm, '-_['s_^22['0.Zero]]) . rewrites: 2 result Sort: '-22 ========================================== reduce in META-LEVEL : metaPrettyPrint(fmod 'FOO is protecting 'RAT . sorts none . none none none none endfm, '_/_['-_['s_^6789['0.Zero]],'s_^12345['0.Zero]]) . rewrites: 2 result Sort: '-6789/12345 ========================================== reduce in META-LEVEL : metaPrettyPrint(fmod 'FOO is protecting 'RAT . sorts none . none none none none endfm, '_/_['-_['s_^6789['0.Zero]],'s_^12345['0.Zero]], mixfix) . rewrites: 2 result NeTypeList: '- 's_^6789 '`( '0 '`) '/ 's_^12345 '`( '0 '`) ========================================== reduce in META-LEVEL : metaPrettyPrint(fmod 'FOO is protecting 'RAT . sorts none . none none none none endfm, '_/_['-_['s_^6789['0.Zero]],'s_^12345['0.Zero]], mixfix number) . rewrites: 2 result NeTypeList: '-6789 '/ '12345 ========================================== reduce in META-LEVEL : metaPrettyPrint(fmod 'FOO is protecting 'RAT . sorts none . none none none none endfm, '_/_['-_['s_^6789['0.Zero]],'s_^12345['0.Zero]], mixfix rat) . rewrites: 2 result Sort: '-6789/12345 ========================================== reduce in META-LEVEL : metaPrettyPrint(fmod 'FOO is protecting 'FLOAT . sorts none . none none none none endfm, 'X:Float ; 'Y:Float, 'X:Float, mixfix) . rewrites: 1 result Sort: 'X ========================================== reduce in META-LEVEL : metaPrettyPrint(fmod 'FOO is protecting 'FLOAT . sorts none . none none none none endfm, 'X:Float ; 'Y:Float, '_/_['X:Float,'Y:Float], mixfix) . rewrites: 1 result NeTypeList: 'X '/ 'Y Bye. maude-3.1/tests/Meta/metaSort0000755000175200017520000000033410511605340013144 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaSort.maude -no-banner -no-advise \ > metaSort.out 2>&1 diff $srcdir/metaSort.expected metaSort.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaWellFormed.expected0000644000175200017520000001023713217326442016066 00000000000000========================================== reduce in META-LEVEL : wellFormed(fmod 'FOO is protecting 'FLOAT . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm) . rewrites: 1 result Bool: true ========================================== reduce in META-LEVEL : wellFormed(fmod 'FOO is protecting 'FLOAT . sorts 'Foo . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm) . rewrites: 1 result Bool: false ========================================== reduce in META-LEVEL : wellFormed(fmod 'FOO is protecting 'FLOAT . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . subsort 'Foo < 'Bar . op 'a : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm) . Warning: the connected component in the sort graph that contains sort Bar has no maximal sorts due to a cycle. rewrites: 1 result Bool: false ========================================== reduce in META-LEVEL : wellFormed(fmod 'FOO is protecting 'FLOAT . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm, 'a.Foo) . rewrites: 1 result Bool: true ========================================== reduce in META-LEVEL : wellFormed(fmod 'FOO is protecting 'FLOAT . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm, 'b.Foo) . rewrites: 1 result Bool: false ========================================== reduce in META-LEVEL : wellFormed(fmod 'FOO is protecting 'FLOAT . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm, 'X:Foo <- 'a.Foo) . rewrites: 2 result Bool: true ========================================== reduce in META-LEVEL : wellFormed(fmod 'FOO is protecting 'FLOAT . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm, 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'a.Foo) . rewrites: 3 result Bool: true ========================================== reduce in META-LEVEL : wellFormed(fmod 'FOO is protecting 'FLOAT . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm, 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'b.Foo) . rewrites: 1 result Bool: false ========================================== reduce in META-LEVEL : wellFormed(fmod 'FOO is protecting 'FLOAT . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm, (none).Substitution) . rewrites: 1 result Bool: true ========================================== reduce in META-LEVEL : wellFormed(fmod 'FOO is protecting 'FLOAT . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm, 'X:Foo <- 'a.Foo ; 'X:Foo <- 'b.Foo) . rewrites: 1 result Bool: false ========================================== reduce in META-LEVEL : wellFormed(fmod 'FOO is protecting 'FLOAT . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . none none endfm, 'X:Bar <- 'a.Foo) . rewrites: 1 result Bool: false ========================================== reduce in META-LEVEL : wellFormed(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm, 'X:Bar <- 'true.Bool) . rewrites: 1 result Bool: false ========================================== reduce in META-LEVEL : wellFormed(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm, 'X:Bool <- 'true.Bool) . rewrites: 1 result Bool: true ========================================== reduce in META-LEVEL : wellFormed(mod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . none none rl 'a.Foo => 'b.Foo [label('k)] . endm, 'X:Bar <- 'true.Bool) . rewrites: 1 result Bool: false Bye. maude-3.1/tests/Meta/metaModExp0000755000175200017520000000034410511605711013414 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaModExp.maude -no-banner -no-advise \ > metaModExp.out 2>&1 diff $srcdir/metaModExp.expected metaModExp.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaIntVariantUnify.expected0000644000175200017520000001215513724060142017114 00000000000000========================================== erewrite in VARIANT-UNIFY-TEST : <> < me : User | problem:('_+_['X:XOR, 'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],empty) > createInterpreter( interpreterManager, me, none) . saw '_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem] rewrites: 52 result Configuration: <> < me : User | soln: 9,result(gotVariantUnifier(me, interpreter(0), 6, 'X:XOR <- '_+_['c2.Elem,'@1:XOR] ; 'Y:XOR <- '_+_['c1.Elem,'@1:XOR], '@),gotVariantUnifier(me, interpreter(0), 0, 'X:XOR <- 'c2.Elem ; 'Y:XOR <- 'c1.Elem, '@),gotVariantUnifier(me, interpreter(0), 18, 'X:XOR <- '_+_['c1.Elem,'c2.Elem,'%1:XOR] ; 'Y:XOR <- '%1:XOR, '%),gotVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '%1:XOR ; 'Y:XOR <- '_+_['c1.Elem,'c2.Elem,'%1:XOR], '%),gotVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '0.XOR ; 'Y:XOR <- '_+_['c1.Elem,'c2.Elem], '@),gotVariantUnifier(me, interpreter(0), 0, 'X:XOR <- 'c1.Elem ; 'Y:XOR <- 'c2.Elem, '@),gotVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '_+_['c1.Elem,'c2.Elem] ; 'Y:XOR <- '0.XOR, '@),gotVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '_+_['c1.Elem,'@1:XOR] ; 'Y:XOR <- '_+_['c2.Elem,'@1:XOR], '@)),problem:('_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],empty) > noSuchResult(me, interpreter(0), 0, true) ========================================== variant unify in XOR : X + c1 =? Y + c2 . Unifier 1 rewrites: 6 X --> c2 + %1:XOR Y --> c1 + %1:XOR Unifier 2 rewrites: 6 X --> c2 Y --> c1 Unifier 3 rewrites: 24 X --> c1 + c2 + #1:XOR Y --> #1:XOR Unifier 4 rewrites: 24 X --> #1:XOR Y --> c1 + c2 + #1:XOR Unifier 5 rewrites: 24 X --> 0 Y --> c1 + c2 Unifier 6 rewrites: 24 X --> c1 Y --> c2 Unifier 7 rewrites: 24 X --> c1 + c2 Y --> 0 Unifier 8 rewrites: 24 X --> c1 + %1:XOR Y --> c2 + %1:XOR No more unifiers. rewrites: 24 ========================================== erewrite in VARIANT-UNIFY-TEST : <> < me : User | problem:('_+_['X:XOR, 'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],'_+_['X:XOR,'c1.Elem]) > createInterpreter(interpreterManager, me, none) . saw '_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem] rewrites: 16 result Configuration: <> < me : User | soln: 4,result(gotVariantUnifier(me, interpreter(0), 3, 'X:XOR <- '_+_['c2.Elem,'@1:XOR] ; 'Y:XOR <- '_+_['c1.Elem,'@1:XOR], '@),gotVariantUnifier(me, interpreter(0), 0, 'X:XOR <- 'c2.Elem ; 'Y:XOR <- 'c1.Elem, '@),gotVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '%1:XOR ; 'Y:XOR <- '_+_['c1.Elem,'c2.Elem,'%1:XOR], '%)),problem:('_+_['X:XOR, 'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],'_+_['X:XOR,'c1.Elem]) > noSuchResult( me, interpreter(0), 0, true) ========================================== variant unify in XOR : X + c1 =? Y + c2 such that X + c1 irreducible . Unifier 1 rewrites: 3 X --> c2 + %1:XOR Y --> c1 + %1:XOR Unifier 2 rewrites: 3 X --> c2 Y --> c1 Unifier 3 rewrites: 3 X --> #1:XOR Y --> c1 + c2 + #1:XOR No more unifiers. rewrites: 3 ========================================== erewrite in DISJOINT-VARIANT-UNIFY-TEST : <> < me : User | problem:('_+_[ 'X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],empty) > createInterpreter( interpreterManager, me, none) . saw '_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem] rewrites: 52 result Configuration: <> < me : User | soln: 9,result( gotDisjointVariantUnifier(me, interpreter(0), 6, 'X:XOR <- '_+_['c2.Elem,'@1:XOR], 'Y:XOR <- '_+_['c1.Elem,'@1:XOR], '@),gotDisjointVariantUnifier(me, interpreter(0), 0, 'X:XOR <- 'c2.Elem, 'Y:XOR <- 'c1.Elem, '@),gotDisjointVariantUnifier(me, interpreter(0), 18, 'X:XOR <- '_+_['c1.Elem,'c2.Elem,'%1:XOR], 'Y:XOR <- '%1:XOR, '%),gotDisjointVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '%1:XOR, 'Y:XOR <- '_+_['c1.Elem,'c2.Elem,'%1:XOR], '%),gotDisjointVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '0.XOR, 'Y:XOR <- '_+_['c1.Elem,'c2.Elem], '@),gotDisjointVariantUnifier(me, interpreter(0), 0, 'X:XOR <- 'c1.Elem, 'Y:XOR <- 'c2.Elem, '@),gotDisjointVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '_+_['c1.Elem,'c2.Elem], 'Y:XOR <- '0.XOR, '@),gotDisjointVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '_+_['c1.Elem,'@1:XOR], 'Y:XOR <- '_+_['c2.Elem,'@1:XOR], '@)),problem:('_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],empty) > noSuchResult(me, interpreter(0), 0, true) ========================================== erewrite in DISJOINT-VARIANT-UNIFY-TEST : <> < me : User | problem:('_+_[ 'X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],'_+_['X:XOR,'c1.Elem]) > createInterpreter(interpreterManager, me, none) . saw '_+_['X:XOR,'c1.Elem] =? '_+_['Y:XOR,'c2.Elem] rewrites: 16 result Configuration: <> < me : User | soln: 4,result( gotDisjointVariantUnifier(me, interpreter(0), 3, 'X:XOR <- '_+_['c2.Elem,'@1:XOR], 'Y:XOR <- '_+_['c1.Elem,'@1:XOR], '@),gotDisjointVariantUnifier(me, interpreter(0), 0, 'X:XOR <- 'c2.Elem, 'Y:XOR <- 'c1.Elem, '@),gotDisjointVariantUnifier(me, interpreter(0), 0, 'X:XOR <- '%1:XOR, 'Y:XOR <- '_+_['c1.Elem,'c2.Elem,'%1:XOR], '%)),problem:('_+_['X:XOR, 'c1.Elem] =? '_+_['Y:XOR,'c2.Elem],'_+_['X:XOR,'c1.Elem]) > noSuchResult( me, interpreter(0), 0, true) Bye. maude-3.1/tests/Meta/metaIntReplace2.expected0000644000175200017520000000436213366052720016140 00000000000000========================================== reduce in TEST : g(X:Foo) . rewrites: 1 result Foo: h(h(X:Foo, c), c) ========================================== reduce in META1 : T . rewrites: 2 result FTheory: fth 'T is nil sorts 'Elt . none op 'f : 'Elt -> 'Elt [none] . none none endfth ========================================== reduce in META1 : M . rewrites: 2 result FModule: fmod 'M{'X :: 'T} is nil sorts none . none op 'g : 'X$Elt -> 'X$Elt [none] . none eq 'g['X:X$Elt] = 'f['f['X:X$Elt]] [none] . endfm ========================================== reduce in META1 : FOO . rewrites: 2 result FModule: fmod 'FOO is nil sorts 'Foo . none op 'c : nil -> 'Foo [none] . op 'h : 'Foo 'Foo -> 'Foo [none] . none none endfm ========================================== reduce in META1 : V . rewrites: 2 result View: view 'V from 'T to 'FOO is sort 'Elt to 'Foo . op 'f['X:Elt] to term 'h['X:Foo,'c.Foo] . none endv ========================================== reduce in META1 : TEST . rewrites: 2 result FModule: fmod 'TEST is including 'M{'V} . sorts none . none none none none endfm ========================================== erewrite in META2 : <> < me : User | state: 1 > createInterpreter( interpreterManager, me, none) . rewrites: 17 result Configuration: <> < me : User | state: 7 > reducedTerm(me, interpreter( 0), 1, 'h['h['X:Foo,'c.Foo],'c.Foo], 'Foo) ========================================== erewrite in META3 : <> < me : User | state: 1 > createInterpreter( interpreterManager, me, none) . rewrites: 21 result Configuration: <> < me : User | state: 9 > reducedTerm(me, interpreter( 0), 1, 'h['h['h['X:Foo,'c.Foo],'c.Foo],'c.Foo], 'Foo) ========================================== erewrite in META4 : <> < me : User | state: 1 > createInterpreter( interpreterManager, me, none) . rewrites: 21 result Configuration: <> < me : User | state: 9 > reducedTerm(me, interpreter( 0), 1, 'h['c.Foo,'h['c.Foo,'X:Foo]], 'Foo) ========================================== erewrite in META5 : <> < me : User | state: 1 > createInterpreter( interpreterManager, me, none) . rewrites: 23 result Configuration: <> < me : User | state: 10 > reducedTerm(me, interpreter( 0), 1, 'k['k['X:Foo,'d.Foo],'d.Foo], 'Foo) Bye. maude-3.1/tests/Meta/legacyMetaUnify.expected0000644000175200017520000001076313670556777016274 00000000000000========================================== reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat,'Y:Nat] =? '_+_[ 'X:Nat,'Y:Nat], 0, 0) . rewrites: 2 result UnificationTriple: { 'X:Nat <- '_+_['#1:Nat,'#3:Nat] ; 'Y:Nat <- '_+_['#2:Nat,'#4:Nat], 'X:Nat <- '_+_['#1:Nat,'#2:Nat] ; 'Y:Nat <- '_+_['#3:Nat,'#4:Nat],4} ========================================== reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat,'Y:Nat] =? '_+_[ 'X:Nat,'Y:Nat], 0, 1) . rewrites: 2 result UnificationTriple: { 'X:Nat <- '_+_['#2:Nat,'#3:Nat] ; 'Y:Nat <- '#1:Nat, 'X:Nat <- '_+_['#1:Nat,'#3:Nat] ; 'Y:Nat <- '#2:Nat,3} ========================================== reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat,'Y:Nat] =? '_+_[ 'X:Nat,'Y:Nat], 0, 2) . rewrites: 2 result UnificationTriple: { 'X:Nat <- '#1:Nat ; 'Y:Nat <- '_+_['#2:Nat,'#3:Nat], 'X:Nat <- '_+_['#1:Nat,'#3:Nat] ; 'Y:Nat <- '#2:Nat,3} ========================================== reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat,'Y:Nat] =? '_+_[ 'X:Nat,'Y:Nat], 0, 3) . rewrites: 2 result UnificationTriple: { 'X:Nat <- '_+_['#2:Nat,'#3:Nat] ; 'Y:Nat <- '#1:Nat, 'X:Nat <- '#2:Nat ; 'Y:Nat <- '_+_['#1:Nat,'#3:Nat],3} ========================================== reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat,'Y:Nat] =? '_+_[ 'X:Nat,'Y:Nat], 0, 4) . rewrites: 2 result UnificationTriple: { 'X:Nat <- '#1:Nat ; 'Y:Nat <- '#2:Nat, 'X:Nat <- '#1:Nat ; 'Y:Nat <- '#2:Nat,2} ========================================== reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat,'Y:Nat] =? '_+_[ 'X:Nat,'Y:Nat], 0, 5) . rewrites: 2 result UnificationTriple: { 'X:Nat <- '#1:Nat ; 'Y:Nat <- '_+_['#2:Nat,'#3:Nat], 'X:Nat <- '#2:Nat ; 'Y:Nat <- '_+_['#1:Nat,'#3:Nat],3} ========================================== reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat,'Y:Nat] =? '_+_[ 'X:Nat,'Y:Nat], 0, 6) . rewrites: 2 result UnificationTriple: { 'X:Nat <- '#2:Nat ; 'Y:Nat <- '#1:Nat, 'X:Nat <- '#1:Nat ; 'Y:Nat <- '#2:Nat,2} ========================================== reduce in META-LEVEL : metaDisjointUnify(['NAT], '_+_['X:Nat,'Y:Nat] =? '_+_[ 'X:Nat,'Y:Nat], 0, 7) . rewrites: 2 result UnificationTriple?: (noUnifier).UnificationTriple? ========================================== reduce in META-LEVEL : metaUnify(['NAT], '_+_['X:Nat,'Y:Nat] =? '_+_['A:Nat, 'B:Nat], 100000000000000000000, 0) . rewrites: 2 result UnificationPair: { 'A:Nat <- '_+_['#100000000000000000001:Nat,'#100000000000000000002:Nat] ; 'B:Nat <- '_+_['#100000000000000000003:Nat,'#100000000000000000004:Nat] ; 'X:Nat <- '_+_['#100000000000000000001:Nat,'#100000000000000000003:Nat] ; 'Y:Nat <- '_+_['#100000000000000000002:Nat,'#100000000000000000004:Nat], 100000000000000000004} ========================================== reduce in META-LEVEL : metaUnify(['NAT], '_+_['X:Nat,'Y:Nat] =? '_+_['#1:Nat, 'Y:Nat], 0, 0) . Warning: unsafe variable name #1:Nat in unification problem. rewrites: 1 result [UnificationPair?,MatchOrUnificationPair,MatchPair?]: metaUnify(sth 'NAT is including 'NAT . sorts none . none none none none none none none endsth, '_+_['X:Nat,'Y:Nat] =? '_+_['#1:Nat,'Y:Nat], 0, 0) ========================================== reduce in META-LEVEL : metaDisjointUnify(['BAZ], 'f['X:Foo] =? 'f['Y:Foo] /\ 'f['X:Foo] =? 'f['Z:Foo], 0, 0) . rewrites: 2 result UnificationTriple: { 'X:Foo <- '#1:Foo, 'Y:Foo <- '#1:Foo ; 'Z:Foo <- '#1:Foo,1} ========================================== reduce in META-LEVEL : metaDisjointUnify(['BAZ], 'f['Y:Foo] =? 'f['X:Foo] /\ 'f['Z:Foo] =? 'f['X:Foo], 0, 0) . rewrites: 2 result UnificationTriple: { 'Y:Foo <- '#1:Foo ; 'Z:Foo <- '#1:Foo, 'X:Foo <- '#1:Foo,1} ========================================== reduce in META-LEVEL : metaDisjointUnify(['BAZ], 'f['X:Foo] =? 'f['Y:Foo] /\ 'f['Y:Foo] =? 'f['X:Foo], 0, 0) . rewrites: 2 result UnificationTriple: { 'X:Foo <- '#1:Foo ; 'Y:Foo <- '#2:Foo, 'X:Foo <- '#2:Foo ; 'Y:Foo <- '#1:Foo,2} ========================================== reduce in META-LEVEL : metaDisjointUnify(['BAZ], 'f['X:Foo] =? 'f['a.Foo] /\ 'f['X:Foo] =? 'f['b.Foo], 0, 0) . rewrites: 2 result UnificationTriple?: (noUnifier).UnificationTriple? ========================================== reduce in META-LEVEL : metaDisjointUnify(['BAZ], 'f['a.Foo] =? 'f['X:Foo] /\ 'f['b.Foo] =? 'f['X:Foo], 0, 0) . rewrites: 2 result UnificationTriple?: (noUnifier).UnificationTriple? Bye. maude-3.1/tests/Meta/metaRewrite.maude0000644000175200017520000000350010025725430014726 00000000000000set show timing off . set show advisories off . red in META-LEVEL : metaRewrite( mod 'FOO is nil sorts 'Foo . none op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . none none rl 'a.Foo => 'b.Foo [none] . rl 'b.Foo => 'a.Foo [none] . endm, 'a.Foo, 1) . red in META-LEVEL : metaRewrite( mod 'FOO is nil sorts 'Foo . none op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . none none rl 'a.Foo => 'b.Foo [none] . rl 'b.Foo => 'a.Foo [none] . endm, 'a.Foo, 2) . red in META-LEVEL : metaRewrite( mod 'FOO is nil sorts 'Foo . none op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . none none rl 'a.Foo => 'b.Foo [none] . rl 'b.Foo => 'a.Foo [none] . endm, 'a.Foo, 3) . red in META-LEVEL : metaRewrite( mod 'FOO is nil sorts 'Foo . none op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . none none rl 'a.Foo => 'b.Foo [none] . rl 'b.Foo => 'c.Foo [none] . endm, 'a.Foo, unbounded) . red in META-LEVEL : metaRewrite( mod 'FOO is nil sorts 'Foo . none op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . none none rl 'a.Foo => 'b.Foo [none] . rl 'b.Foo => 'c.Foo [none] . endm, 'a.Foo, 1000000000000000000000000000000000000000000000000000) . red in META-LEVEL : metaRewrite( mod 'FOO is nil sorts 'Foo . none op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . none none rl 'a.Foo => 'b.Foo [none] . rl 'b.Foo => 'c.Foo [none] . endm, 'a.Foo, JUNK:Nat) . red in META-LEVEL : metaRewrite( mod 'FOO is nil sorts 'Foo . none op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . none none rl 'a.Foo => 'b.Foo [none] . rl 'b.Foo => 'c.Foo [none] . endm, 'a.Foo, 0) . maude-3.1/tests/Meta/metaRewrite0000755000175200017520000000035010511605260013635 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaRewrite.maude -no-banner -no-advise \ > metaRewrite.out 2>&1 diff $srcdir/metaRewrite.expected metaRewrite.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaWellFormed0000755000175200017520000000036410511605467014272 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaWellFormed.maude -no-banner -no-advise \ > metaWellFormed.out 2>&1 diff $srcdir/metaWellFormed.expected metaWellFormed.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaTerm0000755000175200017520000000033410511605402013123 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaTerm.maude -no-banner -no-advise \ > metaTerm.out 2>&1 diff $srcdir/metaTerm.expected metaTerm.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaFrewrite.maude0000644000175200017520000000170410025701604015075 00000000000000set show timing off . set show advisories off . fmod TEST is pr META-LEVEL . op m : -> Module . eq m = (mod 'FAIR is protecting 'INT . sorts 'Foo . none op 'i : 'Int -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [none] . none none rl 'i['M:NzInt] => 'i['_-_['M:NzInt, 's_['0.Nat]]] [none] . rl 'f['X:Foo, 'i['0.Nat]] => 'X:Foo [none] . endm) . op t : -> Term . eq t = 'f['f['i['s_^2['0.Nat]], 'i['s_['0.Nat]]], 'f['i['s_^3['0.Nat]], 'i['s_^2['0.Nat]]]] . endfm red metaFrewrite(m, t, 1, 1) . red metaFrewrite(m, t, 2, 1) . red metaFrewrite(m, t, 3, 1) . red metaFrewrite(m, t, 4, 1) . red metaFrewrite(m, t, 5, 1) . red metaFrewrite(m, t, 6, 1) . red metaFrewrite(m, t, 7, 1) . red metaFrewrite(m, t, 8, 1) . red metaFrewrite(m, t, 9, 1) . red metaFrewrite(m, t, 10, 1) . red metaFrewrite(m, t, 11, 1) . red metaFrewrite(m, t, unbounded, 1) . *** shouldn't work red metaFrewrite(m, t, 0, 1) . red metaFrewrite(m, t, 1, 0) . maude-3.1/tests/Meta/legacyMetaVariantUnify.expected0000644000175200017520000002075613553463571017611 00000000000000========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), (empty).GroundTermList, (0).Zero, (0).Zero) . rewrites: 10 result UnificationPair: { 'X:XOR <- '_+_['cst2.Elem,'%1:XOR] ; 'Y:XOR <- '_+_['cst1.Elem,'%1:XOR],1} ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), (empty).GroundTermList, 10, (0).Zero) . rewrites: 10 result UnificationPair: { 'X:XOR <- '_+_['cst2.Elem,'%11:XOR] ; 'Y:XOR <- '_+_['cst1.Elem,'%11:XOR],11} ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), (empty).GroundTermList, (0).Zero, 1) . rewrites: 4 result UnificationPair: { 'X:XOR <- 'cst2.Elem ; 'Y:XOR <- 'cst1.Elem,(0).Zero} ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), (empty).GroundTermList, (0).Zero, 2) . rewrites: 22 result UnificationPair: { 'X:XOR <- '_+_['cst1.Elem,'cst2.Elem,'#1:XOR] ; 'Y:XOR <- '#1:XOR,1} ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), (empty).GroundTermList, (0).Zero, 3) . rewrites: 4 result UnificationPair: { 'X:XOR <- '#1:XOR ; 'Y:XOR <- '_+_['cst1.Elem,'cst2.Elem,'#1:XOR],1} ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), (empty).GroundTermList, (0).Zero, 4) . rewrites: 4 result UnificationPair: { 'X:XOR <- '0.XOR ; 'Y:XOR <- '_+_['cst1.Elem,'cst2.Elem],(0).Zero} ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), (empty).GroundTermList, (0).Zero, 5) . rewrites: 4 result UnificationPair: { 'X:XOR <- 'cst1.Elem ; 'Y:XOR <- 'cst2.Elem,(0).Zero} ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), (empty).GroundTermList, (0).Zero, 6) . rewrites: 4 result UnificationPair: { 'X:XOR <- '_+_['cst1.Elem,'cst2.Elem] ; 'Y:XOR <- '0.XOR,(0).Zero} ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), (empty).GroundTermList, (0).Zero, 7) . rewrites: 4 result UnificationPair: { 'X:XOR <- '_+_['cst1.Elem,'%1:XOR] ; 'Y:XOR <- '_+_['cst2.Elem,'%1:XOR],1} ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), (empty).GroundTermList, (0).Zero, 8) . rewrites: 4 result UnificationPair?: (noUnifier).UnificationPair? ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), (empty).GroundTermList, (0).Zero, (0).Zero) . rewrites: 10 result UnificationTriple: { 'X:XOR <- '_+_['cst2.Elem,'%1:XOR], 'X:XOR <- '_+_['cst1.Elem,'%1:XOR],1} ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), (empty).GroundTermList, 10, (0).Zero) . rewrites: 10 result UnificationTriple: { 'X:XOR <- '_+_['cst2.Elem,'%11:XOR], 'X:XOR <- '_+_['cst1.Elem,'%11:XOR],11} ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), (empty).GroundTermList, (0).Zero, 1) . rewrites: 4 result UnificationTriple: { 'X:XOR <- 'cst2.Elem, 'X:XOR <- 'cst1.Elem,(0).Zero} ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), (empty).GroundTermList, (0).Zero, 2) . rewrites: 22 result UnificationTriple: { 'X:XOR <- '_+_['cst1.Elem,'cst2.Elem,'#1:XOR], 'X:XOR <- '#1:XOR,1} ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), (empty).GroundTermList, (0).Zero, 3) . rewrites: 4 result UnificationTriple: { 'X:XOR <- '#1:XOR, 'X:XOR <- '_+_['cst1.Elem,'cst2.Elem,'#1:XOR],1} ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), (empty).GroundTermList, (0).Zero, 4) . rewrites: 4 result UnificationTriple: { 'X:XOR <- '0.XOR, 'X:XOR <- '_+_['cst1.Elem,'cst2.Elem],(0).Zero} ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), (empty).GroundTermList, (0).Zero, 5) . rewrites: 4 result UnificationTriple: { 'X:XOR <- 'cst1.Elem, 'X:XOR <- 'cst2.Elem,(0).Zero} ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), (empty).GroundTermList, (0).Zero, 6) . rewrites: 4 result UnificationTriple: { 'X:XOR <- '_+_['cst1.Elem,'cst2.Elem], 'X:XOR <- '0.XOR,(0).Zero} ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), (empty).GroundTermList, (0).Zero, 7) . rewrites: 4 result UnificationTriple: { 'X:XOR <- '_+_['cst1.Elem,'%1:XOR], 'X:XOR <- '_+_['cst2.Elem,'%1:XOR],1} ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), (empty).GroundTermList, (0).Zero, 8) . rewrites: 4 result UnificationTriple?: (noUnifier).UnificationTriple? ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), upTerm(cst1 + X:XOR), (0).Zero, (0).Zero) . rewrites: 7 result UnificationPair: { 'X:XOR <- '_+_['cst2.Elem,'%1:XOR] ; 'Y:XOR <- '_+_['cst1.Elem,'%1:XOR],1} ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), upTerm(cst1 + X:XOR), 10, (0).Zero) . rewrites: 7 result UnificationPair: { 'X:XOR <- '_+_['cst2.Elem,'%11:XOR] ; 'Y:XOR <- '_+_['cst1.Elem,'%11:XOR],11} ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), upTerm(cst1 + X:XOR), (0).Zero, 1) . rewrites: 4 result UnificationPair: { 'X:XOR <- 'cst2.Elem ; 'Y:XOR <- 'cst1.Elem,(0).Zero} ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), upTerm(cst1 + X:XOR), (0).Zero, 2) . rewrites: 4 result UnificationPair: { 'X:XOR <- '#1:XOR ; 'Y:XOR <- '_+_['cst1.Elem,'cst2.Elem,'#1:XOR],1} ========================================== reduce in META-TEST : metaVariantUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm( cst2 + Y:XOR), upTerm(cst1 + X:XOR), (0).Zero, 3) . rewrites: 4 result UnificationPair?: (noUnifier).UnificationPair? ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), upTerm(cst1 + X:XOR), (0).Zero, (0).Zero) . rewrites: 7 result UnificationTriple: { 'X:XOR <- '_+_['cst2.Elem,'%1:XOR], 'X:XOR <- '_+_['cst1.Elem,'%1:XOR],1} ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), upTerm(cst1 + X:XOR), 10, (0).Zero) . rewrites: 7 result UnificationTriple: { 'X:XOR <- '_+_['cst2.Elem,'%11:XOR], 'X:XOR <- '_+_['cst1.Elem,'%11:XOR],11} ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), upTerm(cst1 + X:XOR), (0).Zero, 1) . rewrites: 4 result UnificationTriple: { 'X:XOR <- 'cst2.Elem, 'X:XOR <- 'cst1.Elem,(0).Zero} ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), upTerm(cst1 + X:XOR), (0).Zero, 2) . rewrites: 4 result UnificationTriple: { 'X:XOR <- '#1:XOR, 'X:XOR <- '_+_['cst1.Elem,'cst2.Elem,'#1:XOR],1} ========================================== reduce in META-TEST : metaVariantDisjointUnify(['XOR], upTerm(cst1 + X:XOR) =? upTerm(cst2 + X:XOR), upTerm(cst1 + X:XOR), (0).Zero, 3) . rewrites: 4 result UnificationTriple?: (noUnifier).UnificationTriple? Bye. maude-3.1/tests/Meta/metaParse0000755000175200017520000000034010511605161013265 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaParse.maude -no-banner -no-advise \ > metaParse.out 2>&1 diff $srcdir/metaParse.expected metaParse.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaIntNewNarrowSearch0000755000175200017520000000042413402641412015742 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaIntNewNarrowSearch.maude -no-banner -no-advise \ > metaIntNewNarrowSearch.out 2>&1 diff $srcdir/metaIntNewNarrowSearch.expected metaIntNewNarrowSearch.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaMeta.maude0000644000175200017520000000067510025725274014213 00000000000000set show timing off . set show advisories off . mod FOO is sort Foo . ops a b : -> Foo . rl a => b . endm red in META-LEVEL : metaRewrite(['FOO], 'a.Foo, 10) . mod SELF-REFLECTION is pr META-LEVEL . sort Foo . ops a b : -> Foo . rl a => b . op r : Term -> Term . rl r(T:Term) => getTerm(metaRewrite(['SELF-REFLECTION], T:Term, 100)) . endm red in META-LEVEL : metaRewrite(['SELF-REFLECTION], 'r[''a.Foo.Constant], 10) . maude-3.1/tests/Meta/metaIntPrelude.expected0000644000175200017520000025676713730561472016131 00000000000000========================================== erewrite in RUN : <> < me : User | pending(prelude) > createInterpreter( interpreterManager, me, none) . rewrites: 152 result Configuration: <> < me : User | pending(nil) > reducedTerm(me, interpreter(0), 1, 's_^5['0.Zero], 'NzNat) ========================================== erewrite in RUN2 : <> < me : User | pending(prelude) > createInterpreter( interpreterManager, me, none) . rewrites: 155 result Configuration: <> < me : User | pending(nil) > reducedTerm(me, interpreter(0), 3, '`{_`,_`}['_`[_`][''s_^5.Sort,''0.Zero.Constant], ''NzNat.Sort], 'ResultPair) ========================================== erewrite in RUN3 : <> < me : User | pending(prelude) > createInterpreter( interpreterManager, me, none) . rewrites: 153 result Configuration: <> < me : User | pending(nil) > reducedTerm(me, interpreter(0), 1, 'fmod_is_sorts_.____endfm[''META-LEVEL.Sort,'__[ 'protecting_.[''META-VIEW.Sort],'protecting_.[''BOUND.Sort]],'_;_[ ''MatchOrUnificationPair.Sort,''MatchPair.Sort,''MatchPair?.Sort, ''MatchingProblem.Sort,''NarrowingApplyResult.Sort, ''NarrowingApplyResult?.Sort,''NarrowingSearchPathResult.Sort, ''NarrowingSearchPathResult?.Sort,''NarrowingSearchResult.Sort, ''NarrowingSearchResult?.Sort,''NarrowingStep.Sort,''NarrowingTrace.Sort, ''NeVariableSet.Sort,''Parent.Sort,''PatternSubjectPair.Sort, ''PrintOption.Sort,''PrintOptionSet.Sort,''Result4Tuple.Sort, ''Result4Tuple?.Sort,''ResultPair.Sort,''ResultPair?.Sort, ''ResultTriple.Sort,''ResultTriple?.Sort,''SmtResult.Sort, ''SmtResult?.Sort,''SrewriteOption.Sort,''Strategy?.Sort, ''Substitution?.Sort,''Trace.Sort,''Trace?.Sort,''TraceStep.Sort, ''Type?.Sort,''UnificandPair.Sort,''UnificationPair.Sort, ''UnificationPair?.Sort,''UnificationProblem.Sort,''UnificationTriple.Sort, ''UnificationTriple?.Sort,''VariableSet.Sort,''Variant.Sort, ''Variant?.Sort,''VariantOption.Sort,''VariantOptionSet.Sort],'__[ 'subsort_<_.[''EmptyQidSet.Sort,''VariableSet.Sort],'subsort_<_.[ ''MatchPair.Sort,''MatchOrUnificationPair.Sort],'subsort_<_.[ ''MatchPair.Sort,''MatchPair?.Sort],'subsort_<_.[ ''NarrowingApplyResult.Sort,''NarrowingApplyResult?.Sort],'subsort_<_.[ ''NarrowingSearchPathResult.Sort,''NarrowingSearchPathResult?.Sort], 'subsort_<_.[''NarrowingSearchResult.Sort,''NarrowingSearchResult?.Sort], 'subsort_<_.[''NarrowingStep.Sort,''NarrowingTrace.Sort],'subsort_<_.[ ''Nat.Sort,''Parent.Sort],'subsort_<_.[''NeVariableSet.Sort, ''NeQidSet.Sort],'subsort_<_.[''NeVariableSet.Sort,''VariableSet.Sort], 'subsort_<_.[''PatternSubjectPair.Sort,''MatchingProblem.Sort], 'subsort_<_.[''PrintOption.Sort,''PrintOptionSet.Sort],'subsort_<_.[ ''Result4Tuple.Sort,''Result4Tuple?.Sort],'subsort_<_.[''ResultPair.Sort, ''ResultPair?.Sort],'subsort_<_.[''ResultTriple.Sort,''ResultTriple?.Sort], 'subsort_<_.[''SmtResult.Sort,''SmtResult?.Sort],'subsort_<_.[ ''Strategy.Sort,''Strategy?.Sort],'subsort_<_.[''Substitution.Sort, ''Substitution?.Sort],'subsort_<_.[''Trace.Sort,''Trace?.Sort], 'subsort_<_.[''TraceStep.Sort,''Trace.Sort],'subsort_<_.[''Type.Sort, ''Type?.Sort],'subsort_<_.[''UnificandPair.Sort,''UnificationProblem.Sort], 'subsort_<_.[''UnificationPair.Sort,''MatchOrUnificationPair.Sort], 'subsort_<_.[''UnificationPair.Sort,''UnificationPair?.Sort],'subsort_<_.[ ''UnificationTriple.Sort,''UnificationTriple?.Sort],'subsort_<_.[ ''Variable.Sort,''NeVariableSet.Sort],'subsort_<_.[''VariableSet.Sort, ''QidSet.Sort],'subsort_<_.[''Variant.Sort,''Variant?.Sort],'subsort_<_.[ ''VariantOption.Sort,''VariantOptionSet.Sort]],'__['op_:_->_`[_`].[ ''$applySubstitution.Sort,'__[''NeTermList.Sort,''Substitution.Sort], ''Term.Sort,'none.AttrSet],'op_:_->_`[_`].[''_/\_.Sort,'__[ ''MatchingProblem.Sort,''MatchingProblem.Sort],''MatchingProblem.Sort,'__[ 'assoc.Attr,'comm.Attr,'ctor.Attr,'prec['s_^73['0.Zero]]]],'op_:_->_`[_`].[ ''_/\_.Sort,'__[''UnificationProblem.Sort,''UnificationProblem.Sort], ''UnificationProblem.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'prec[ 's_^73['0.Zero]]]],'op_:_->_`[_`].[''_;_.Sort,'__[''NeVariableSet.Sort, ''VariableSet.Sort],''NeVariableSet.Sort,'__['assoc.Attr,'comm.Attr, 'ctor.Attr,'id[''none.EmptyQidSet.Constant],'prec['s_^43['0.Zero]]]], 'op_:_->_`[_`].[''_;_.Sort,'__[''VariableSet.Sort,''VariableSet.Sort], ''VariableSet.Sort,'__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.EmptyQidSet.Constant],'prec['s_^43['0.Zero]]]],'op_:_->_`[_`].[ ''_<=?_.Sort,'__[''Term.Sort,''Term.Sort],''PatternSubjectPair.Sort,'__[ 'ctor.Attr,'prec['s_^71['0.Zero]]]],'op_:_->_`[_`].[''_=?_.Sort,'__[ ''Term.Sort,''Term.Sort],''UnificandPair.Sort,'__['ctor.Attr,'prec['s_^71[ '0.Zero]]]],'op_:_->_`[_`].[''__.Sort,'__[''NarrowingTrace.Sort, ''NarrowingTrace.Sort],''NarrowingTrace.Sort,'__['assoc.Attr,'ctor.Attr, 'id[''nil.NarrowingTrace.Constant]]],'op_:_->_`[_`].[''__.Sort,'__[ ''PrintOptionSet.Sort,''PrintOptionSet.Sort],''PrintOptionSet.Sort,'__[ 'assoc.Attr,'comm.Attr,'ctor.Attr,'id[''none.PrintOptionSet.Constant]]], 'op_:_->_`[_`].[''__.Sort,'__[''Trace.Sort,''Trace.Sort],''Trace.Sort,'__[ 'assoc.Attr,'ctor.Attr,'format['__[''d.Sort,''n.Sort,''d.Sort]],'id[ ''nil.Trace.Constant]]],'op_:_->_`[_`].[''__.Sort,'__[ ''VariantOptionSet.Sort,''VariantOptionSet.Sort],''VariantOptionSet.Sort, '__['assoc.Attr,'comm.Attr,'ctor.Attr,'id[ ''none.VariantOptionSet.Constant]]],'op_:_->_`[_`].[ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'__[''Context.Sort,''Qid.Sort, ''Substitution.Sort,''Qid.Sort,''Term.Sort,''Type.Sort, ''Substitution.Sort],''NarrowingStep.Sort,'__['ctor.Attr,'format['__[ ''ni.Sort,''n++i.Sort,''d.Sort,''ni.Sort,''d.Sort,''d.Sort,''d.Sort, ''ni.Sort,''d.Sort,''ni.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort, ''n--i.Sort,''d.Sort]]]],'op_:_->_`[_`].[''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'__[ ''Term.Sort,''Type.Sort,''Context.Sort,''Qid.Sort,''Substitution.Sort, ''Substitution.Sort,''Qid.Sort],''NarrowingApplyResult.Sort,'__['ctor.Attr, 'format['__[''d.Sort,''n++i.Sort,''d.Sort,''d.Sort,''d.Sort,''ni.Sort, ''d.Sort,''ni.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''ni.Sort, ''n--i.Sort,''d.Sort]]]],'op_:_->_`[_`].[''`{_`,_`,_`,_`,_`,_`}.Qid,'__[ ''Term.Sort,''Type.Sort,''Substitution.Sort,''NarrowingTrace.Sort, ''Substitution.Sort,''Qid.Sort],''NarrowingSearchPathResult.Sort,'__[ 'ctor.Attr,'format['__[''d.Sort,''n++i.Sort,''d.Sort,''d.Sort,''d.Sort, ''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''ni.Sort, ''n--i.Sort,''d.Sort]]]],'op_:_->_`[_`].[''`{_`,_`,_`,_`,_`,_`}.Qid,'__[ ''Term.Sort,''Type.Sort,''Substitution.Sort,''Qid.Sort,''Substitution.Sort, ''Qid.Sort],''NarrowingSearchResult.Sort,'__['ctor.Attr,'format['__[ ''d.Sort,''n++i.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort,''d.Sort, ''ni.Sort,''d.Sort,''d.Sort,''d.Sort,''ni.Sort,''n--i.Sort,''d.Sort]]]], 'op_:_->_`[_`].[''`{_`,_`,_`,_`,_`}.Qid,'__[''Term.Sort, ''Substitution.Sort,''Nat.Sort,''Parent.Sort,''Bool.Sort],''Variant.Sort, 'ctor.Attr],'op_:_->_`[_`].[''`{_`,_`,_`,_`,_`}.Qid,'__[''Term.Sort, ''Substitution.Sort,''Qid.Sort,''Parent.Sort,''Bool.Sort],''Variant.Sort, 'ctor.Attr],'op_:_->_`[_`].[''`{_`,_`,_`,_`}.Qid,'__[''Term.Sort, ''Substitution.Sort,''Term.Sort,''Nat.Sort],''SmtResult.Sort,'ctor.Attr], 'op_:_->_`[_`].[''`{_`,_`,_`,_`}.Qid,'__[''Term.Sort,''Type.Sort, ''Substitution.Sort,''Context.Sort],''Result4Tuple.Sort,'ctor.Attr], 'op_:_->_`[_`].[''`{_`,_`,_`}.Qid,'__[''Substitution.Sort, ''Substitution.Sort,''Nat.Sort],''UnificationTriple.Sort,'ctor.Attr], 'op_:_->_`[_`].[''`{_`,_`,_`}.Qid,'__[''Substitution.Sort, ''Substitution.Sort,''Qid.Sort],''UnificationTriple.Sort,'ctor.Attr], 'op_:_->_`[_`].[''`{_`,_`,_`}.Qid,'__[''Term.Sort,''Type.Sort,''Rule.Sort], ''TraceStep.Sort,'ctor.Attr],'op_:_->_`[_`].[''`{_`,_`,_`}.Qid,'__[ ''Term.Sort,''Type.Sort,''Substitution.Sort],''ResultTriple.Sort, 'ctor.Attr],'op_:_->_`[_`].[''`{_`,_`}.Qid,'__[''Substitution.Sort, ''Context.Sort],''MatchPair.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''`{_`,_`}.Qid,'__[''Substitution.Sort,''Nat.Sort],''UnificationPair.Sort, 'ctor.Attr],'op_:_->_`[_`].[''`{_`,_`}.Qid,'__[''Substitution.Sort, ''Qid.Sort],''UnificationPair.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''`{_`,_`}.Qid,'__[''Term.Sort,''Type.Sort],''ResultPair.Sort,'ctor.Attr], 'op_:_->_`[_`].[''ambiguity.Sort,'__[''ResultPair.Sort,''ResultPair.Sort], ''ResultPair?.Sort,'ctor.Attr],'op_:_->_`[_`].[''ambiguity.Sort,'__[ ''Strategy.Sort,''Strategy.Sort],''Strategy?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''anyType.Sort,'nil.TypeList,''Type?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''applySubstitution.Sort,'__[''Module.Sort,''Term.Sort, ''Substitution.Sort],''Term.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''breadthFirst.Sort,'nil.TypeList,''SrewriteOption.Sort,'ctor.Attr], 'op_:_->_`[_`].[''completeName.Sort,'__[''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind],''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaCompleteName.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''QidList.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''delay.Sort,'nil.TypeList,''VariantOption.Sort,'ctor.Attr], 'op_:_->_`[_`].[''depthFirst.Sort,'nil.TypeList,''SrewriteOption.Sort, 'ctor.Attr],'op_:_->_`[_`].[''downTerm.Sort,'__[''Term.Sort, ''Universal.Sort],''Universal.Sort,'__['poly['__['s_^2['0.Zero],'0.Zero]], 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaDownTerm.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''QidList.Sort],''ResultPair?.Sort]]]]],'op_:_->_`[_`].[''failure.Sort, 'nil.TypeList,''NarrowingApplyResult?.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''failure.Sort,'nil.TypeList,''NarrowingSearchPathResult?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''failure.Sort,'nil.TypeList,''NarrowingSearchResult?.Sort, 'ctor.Attr],'op_:_->_`[_`].[''failure.Sort,'nil.TypeList, ''Result4Tuple?.Sort,'ctor.Attr],'op_:_->_`[_`].[''failure.Sort, 'nil.TypeList,''ResultPair?.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''failure.Sort,'nil.TypeList,''ResultTriple?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''failure.Sort,'nil.TypeList,''SmtResult?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''failure.Sort,'nil.TypeList,''Trace?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''failureIncomplete.Sort,'nil.TypeList, ''NarrowingApplyResult?.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''failureIncomplete.Sort,'nil.TypeList,''NarrowingSearchPathResult?.Sort, 'ctor.Attr],'op_:_->_`[_`].[''failureIncomplete.Sort,'nil.TypeList, ''NarrowingSearchResult?.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''failureIncomplete.Sort,'nil.TypeList,''ResultTriple?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''filter.Sort,'nil.TypeList,''VariantOption.Sort, 'ctor.Attr],'op_:_->_`[_`].[''flat.Sort,'nil.TypeList,''PrintOption.Sort, 'ctor.Attr],'op_:_->_`[_`].[''format.Sort,'nil.TypeList,''PrintOption.Sort, 'ctor.Attr],'op_:_->_`[_`].[''getAccumulatedSubstitution.Sort, ''NarrowingSearchResult.Sort,''Substitution.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getAccumulatedSubstitution.Sort,''NarrowingStep.Sort, ''Substitution.Sort,'none.AttrSet],'op_:_->_`[_`].[''getContext.Sort, ''MatchPair.Sort,''Context.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getContext.Sort,''NarrowingApplyResult.Sort,''Context.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getContext.Sort,''NarrowingStep.Sort, ''Context.Sort,'none.AttrSet],'op_:_->_`[_`].[''getContext.Sort, ''Result4Tuple.Sort,''Context.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getInitialSubstitution.Sort,''NarrowingSearchPathResult.Sort, ''Substitution.Sort,'none.AttrSet],'op_:_->_`[_`].[''getInitialTerm.Sort, ''NarrowingSearchPathResult.Sort,''Term.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getInitialType.Sort,''NarrowingSearchPathResult.Sort, ''Type.Sort,'none.AttrSet],'op_:_->_`[_`].[''getKind.Sort,'__[ ''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind],''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,'special['__[ 'id-hook[''MetaLevelOpSymbol.Sort,''metaGetKind.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''getKinds.Sort,''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaGetKinds.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''QidList.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''getLabel.Sort,''NarrowingApplyResult.Sort,''Qid.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getLabel.Sort,''NarrowingStep.Sort,''Qid.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getLhsSubstitution.Sort, ''UnificationTriple.Sort,''Substitution.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getMoreVariantsInLayerFlag.Sort,''Variant.Sort, ''Bool.Sort,'none.AttrSet],'op_:_->_`[_`].[''getParent.Sort,''Variant.Sort, ''Parent.Sort,'none.AttrSet],'op_:_->_`[_`].[''getRhsSubstitution.Sort, ''UnificationTriple.Sort,''Substitution.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getRule.Sort,''TraceStep.Sort,''Rule.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getRuleSubstitution.Sort,''NarrowingApplyResult.Sort, ''Substitution.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getStateVariableFamily.Sort,''NarrowingSearchResult.Sort,''Qid.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getSubstitution.Sort,''MatchPair.Sort, ''Substitution.Sort,'none.AttrSet],'op_:_->_`[_`].[''getSubstitution.Sort, ''Result4Tuple.Sort,''Substitution.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getSubstitution.Sort,''ResultTriple.Sort,''Substitution.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getSubstitution.Sort, ''UnificationPair.Sort,''Substitution.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getSubstitution.Sort,''Variant.Sort,''Substitution.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getTerm.Sort,''NarrowingApplyResult.Sort,''Term.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getTerm.Sort,''NarrowingSearchResult.Sort, ''Term.Sort,'none.AttrSet],'op_:_->_`[_`].[''getTerm.Sort, ''NarrowingStep.Sort,''Term.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getTerm.Sort,''Result4Tuple.Sort,''Term.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getTerm.Sort,''ResultPair.Sort,''Term.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getTerm.Sort,''ResultTriple.Sort, ''Term.Sort,'none.AttrSet],'op_:_->_`[_`].[''getTerm.Sort,''TraceStep.Sort, ''Term.Sort,'none.AttrSet],'op_:_->_`[_`].[''getTerm.Sort,''Variant.Sort, ''Term.Sort,'none.AttrSet],'op_:_->_`[_`].[''getTermSubstitution.Sort, ''NarrowingApplyResult.Sort,''Substitution.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getTrace.Sort,''NarrowingSearchPathResult.Sort, ''NarrowingTrace.Sort,'none.AttrSet],'op_:_->_`[_`].[''getType.Sort, ''NarrowingApplyResult.Sort,''Type.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getType.Sort,''NarrowingSearchResult.Sort,''Type.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getType.Sort,''NarrowingStep.Sort,''Type.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getType.Sort,''Result4Tuple.Sort, ''Type.Sort,'none.AttrSet],'op_:_->_`[_`].[''getType.Sort, ''ResultPair.Sort,''Type.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getType.Sort,''ResultTriple.Sort,''Type.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getType.Sort,''TraceStep.Sort,''Type.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getUnifier.Sort,''NarrowingSearchPathResult.Sort, ''Substitution.Sort,'none.AttrSet],'op_:_->_`[_`].[''getUnifier.Sort, ''NarrowingSearchResult.Sort,''Substitution.Sort,'none.AttrSet], 'op_:_->_`[_`].[''getUnifier.Sort,''NarrowingStep.Sort,''Substitution.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getUnifierVariableFamily.Sort, ''NarrowingSearchPathResult.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getUnifierVariableFamily.Sort,''NarrowingSearchResult.Sort,''Qid.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getUnifierVariableFamily.Sort, ''NarrowingStep.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getVariableFamily.Sort,''NarrowingApplyResult.Sort,''Qid.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getVariableFamily.Sort, ''UnificationPair.Sort,''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''getVariableFamily.Sort,''UnificationTriple.Sort,''Qid.Sort, 'none.AttrSet],'op_:_->_`[_`].[''getVariableFamily.Sort,''Variant.Sort, ''Qid.Sort,'none.AttrSet],'op_:_->_`[_`].[''glbSorts.Sort,'__[ ''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind],''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaGlbSorts.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''leastSort.Sort,'__[ ''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind],''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,'special['__[ 'id-hook[''MetaLevelOpSymbol.Sort,''metaLeastSort.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''lesserSorts.Sort,'__[ ''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind],''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,'special['__[ 'id-hook[''MetaLevelOpSymbol.Sort,''metaLesserSorts.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''maximalAritySet.Sort,'__[ ''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind],''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaMaximalAritySet.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort, '__[''Module.Sort,''QidList.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''maximalSorts.Sort,'__[''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind],''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaMaximalSorts.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''QidList.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaApply.Sort, '__[''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind, ''`[Substitution?`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[ResultTriple?`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaApply.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''QidList.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaCheck.Sort,'__[''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind],''`[Bool`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaCheck.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaDisjointUnify.Sort,'__[ ''`[Module`].Kind,''`[UnificationProblem`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationTriple?`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''legacyMetaDisjointUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaDisjointUnify.Sort,'__[ ''`[Module`].Kind,''`[UnificationProblem`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationTriple?`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaDisjointUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaFrewrite.Sort,'__[ ''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[ResultPair?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaFrewrite.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''QidList.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaGetIrredundantVariant.Sort,'__[''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[Variant?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''legacyMetaGetIrredundantVariant.Sort],'op-hook[''shareWith.Sort, ''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''metaGetIrredundantVariant.Sort,'__[''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[Variant?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaGetIrredundantVariant.Sort],'op-hook[''shareWith.Sort, ''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''metaGetVariant.Sort,'__[''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[Variant?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''legacyMetaGetVariant.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort, '__[''Module.Sort,''QidList.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaGetVariant.Sort,'__[''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[Variant?`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaGetVariant.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''QidList.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaIrredundantDisjointUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationTriple?`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaIrredundantDisjointUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaIrredundantUnify.Sort,'__[ ''`[Module`].Kind,''`[UnificationProblem`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[MatchPair?`,UnificationPair?`,MatchOrUnificationPair`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''metaIrredundantUnify.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''QidList.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaMatch.Sort, '__[''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind, ''`[Condition`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[Substitution?`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaMatch.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''QidList.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaNarrow.Sort,'__[''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind,''`[Bool`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[ResultPair?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaNarrow2.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''QidList.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaNarrow.Sort, '__[''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[ResultTriple?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaNarrow.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaNarrowingApply.Sort,'__[ ''Module.Sort,''Term.Sort,''TermList.Sort,''Qid.Sort,''Nat.Sort], ''NarrowingApplyResult?.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''metaNarrowingApply.Sort,'__[''Module.Sort,''Term.Sort,''TermList.Sort, ''Qid.Sort,''VariantOptionSet.Sort,''Nat.Sort], ''NarrowingApplyResult?.Sort,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaNarrowingApply.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaNarrowingSearch.Sort,'__[ ''Module.Sort,''Term.Sort,''Term.Sort,''Qid.Sort,''Bound.Sort,''Qid.Sort, ''Nat.Sort],''NarrowingSearchResult?.Sort,'none.AttrSet],'op_:_->_`[_`].[ ''metaNarrowingSearch.Sort,'__[''Module.Sort,''Term.Sort,''Term.Sort, ''Qid.Sort,''Bound.Sort,''Qid.Sort,''VariantOptionSet.Sort,''Nat.Sort], ''NarrowingSearchResult?.Sort,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaNarrowingSearch.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaNarrowingSearchPath.Sort,'__[ ''Module.Sort,''Term.Sort,''Term.Sort,''Qid.Sort,''Bound.Sort,''Qid.Sort, ''Nat.Sort],''NarrowingSearchPathResult?.Sort,'none.AttrSet], 'op_:_->_`[_`].[''metaNarrowingSearchPath.Sort,'__[''Module.Sort, ''Term.Sort,''Term.Sort,''Qid.Sort,''Bound.Sort,''Qid.Sort, ''VariantOptionSet.Sort,''Nat.Sort],''NarrowingSearchPathResult?.Sort, 'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaNarrowingSearchPath.Sort],'op-hook[''shareWith.Sort, ''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''metaNormalize.Sort,'__[''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind],''`[ResultPair?`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaNormalize.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''QidList.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaParse.Sort,'__[''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind],''`[ResultPair?`].Kind,'none.AttrSet],'op_:_->_`[_`].[''metaParse.Sort,'__[ ''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind],''`[ResultPair?`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaParse.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''QidList.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaParseStrategy.Sort,'__[''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind],''`[StrategyList`,Strategy?`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaParseStrategy.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaPrettyPrint.Sort,'__[ ''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind],''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,'none.AttrSet], 'op_:_->_`[_`].[''metaPrettyPrint.Sort,'__[''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[PrintOptionSet`].Kind],''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,'none.AttrSet], 'op_:_->_`[_`].[''metaPrettyPrint.Sort,'__[''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[PrintOptionSet`].Kind],''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''metaPrettyPrint.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaPrettyPrintStrategy.Sort,'__[ ''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[StrategyList`,Strategy?`].Kind, ''`[PrintOptionSet`].Kind],''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaPrettyPrintStrategy.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaReduce.Sort,'__[ ''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind],''`[ResultPair?`].Kind,'special['__[ 'id-hook[''MetaLevelOpSymbol.Sort,''metaReduce.Sort],'op-hook[ ''qidSymbol.Sort,''.Sort,'nil.TypeList,''Qid.Sort],'op-hook[ ''metaTermSymbol.Sort,''_`[_`].Qid,'__[''Qid.Sort,''NeCTermList.Sort], ''Context.Sort],'op-hook[''metaArgSymbol.Sort,''_`,_.Qid,'__[ ''GTermList.Sort,''GTermList.Sort],''GTermList.Sort],'op-hook[ ''emptyTermListSymbol.Sort,''empty.Sort,'nil.TypeList, ''GroundTermList.Sort],'op-hook[''assignmentSymbol.Sort,''_<-_.Sort,'__[ ''Variable.Sort,''Term.Sort],''Assignment.Sort],'op-hook[ ''emptySubstitutionSymbol.Sort,''none.Sort,'nil.TypeList, ''Substitution.Sort],'op-hook[''substitutionSymbol.Sort,''_;_.Sort,'__[ ''Substitution.Sort,''Substitution.Sort],''Substitution.Sort],'op-hook[ ''holeSymbol.Sort,''`[`].Kind,'nil.TypeList,''Context.Sort],'op-hook[ ''noConditionSymbol.Sort,''nil.Sort,'nil.TypeList,''EqCondition.Sort], 'op-hook[''equalityConditionSymbol.Sort,''_=_.Sort,'__[''Term.Sort, ''Term.Sort],''EqCondition.Sort],'op-hook[''sortTestConditionSymbol.Sort, ''_:_.Variable,'__[''Term.Sort,''Sort.Sort],''EqCondition.Sort],'op-hook[ ''matchConditionSymbol.Sort,''_:=_.Variable,'__[''Term.Sort,''Term.Sort], ''EqCondition.Sort],'op-hook[''rewriteConditionSymbol.Sort,''_=>_.Sort,'__[ ''Term.Sort,''Term.Sort],''Condition.Sort],'op-hook[ ''conjunctionSymbol.Sort,''_/\_.Sort,'__[''Condition.Sort, ''Condition.Sort],''Condition.Sort],'op-hook[''failStratSymbol.Sort, ''fail.Sort,'nil.TypeList,''Strategy.Sort],'op-hook[''idleStratSymbol.Sort, ''idle.Sort,'nil.TypeList,''Strategy.Sort],'op-hook[''allStratSymbol.Sort, ''all.Sort,'nil.TypeList,''RuleApplication.Sort],'op-hook[ ''applicationStratSymbol.Sort,''_`[_`]`{_`}.Qid,'__[''Qid.Sort, ''Substitution.Sort,''StrategyList.Sort],''RuleApplication.Sort],'op-hook[ ''topStratSymbol.Sort,''top.Sort,''RuleApplication.Sort,''Strategy.Sort], 'op-hook[''matchStratSymbol.Sort,''match_s.t._.Constant,'__[''Term.Sort, ''EqCondition.Sort],''Strategy.Sort],'op-hook[''xmatchStratSymbol.Sort, ''xmatch_s.t._.Constant,'__[''Term.Sort,''EqCondition.Sort], ''Strategy.Sort],'op-hook[''amatchStratSymbol.Sort,''amatch_s.t._.Constant, '__[''Term.Sort,''EqCondition.Sort],''Strategy.Sort],'op-hook[ ''unionStratSymbol.Sort,''_|_.Sort,'__[''Strategy.Sort,''Strategy.Sort], ''Strategy.Sort],'op-hook[''concatStratSymbol.Sort,''_;_.Sort,'__[ ''Strategy.Sort,''Strategy.Sort],''Strategy.Sort],'op-hook[ ''orelseStratSymbol.Sort,''_or-else_.Sort,'__[''Strategy.Sort, ''Strategy.Sort],''Strategy.Sort],'op-hook[''plusStratSymbol.Sort, ''_+.Sort,''Strategy.Sort,''Strategy.Sort],'op-hook[ ''conditionalStratSymbol.Sort,''_?_:_.Variable,'__[''Strategy.Sort, ''Strategy.Sort,''Strategy.Sort],''Strategy.Sort],'op-hook[ ''matchrewStratSymbol.Sort,''matchrew_s.t._by_.Constant,'__[''Term.Sort, ''EqCondition.Sort,''UsingPairSet.Sort],''Strategy.Sort],'op-hook[ ''xmatchrewStratSymbol.Sort,''xmatchrew_s.t._by_.Constant,'__[''Term.Sort, ''EqCondition.Sort,''UsingPairSet.Sort],''Strategy.Sort],'op-hook[ ''amatchrewStratSymbol.Sort,''amatchrew_s.t._by_.Constant,'__[''Term.Sort, ''EqCondition.Sort,''UsingPairSet.Sort],''Strategy.Sort],'op-hook[ ''callStratSymbol.Sort,''_`[`[_`]`].Qid,'__[''Qid.Sort,''TermList.Sort], ''CallStrategy.Sort],'op-hook[''oneStratSymbol.Sort,''one.Sort, ''Strategy.Sort,''Strategy.Sort],'op-hook[''starStratSymbol.Sort,''_*.Sort, ''Strategy.Sort,''Strategy.Sort],'op-hook[''normalizationStratSymbol.Sort, ''_!.Sort,''Strategy.Sort,''Strategy.Sort],'op-hook[''notStratSymbol.Sort, ''not.Sort,''Strategy.Sort,''Strategy.Sort],'op-hook[ ''testStratSymbol.Sort,''test.Sort,''Strategy.Sort,''Strategy.Sort], 'op-hook[''tryStratSymbol.Sort,''try.Sort,''Strategy.Sort,''Strategy.Sort], 'op-hook[''usingStratSymbol.Sort,''_using_.Sort,'__[''Variable.Sort, ''Strategy.Sort],''UsingPair.Sort],'op-hook[''usingListStratSymbol.Sort, ''_`,_.Qid,'__[''UsingPairSet.Sort,''UsingPairSet.Sort], ''UsingPairSet.Sort],'op-hook[''emptyStratListSymbol.Sort,''empty.Sort, 'nil.TypeList,''StrategyList.Sort],'op-hook[''stratListSymbol.Sort, ''_`,_.Qid,'__[''StrategyList.Sort,''StrategyList.Sort], ''StrategyList.Sort],'op-hook[''headerSymbol.Sort,''_`{_`}.Sort,'__[ ''Qid.Sort,''ParameterDeclList.Sort],''Header.Sort],'op-hook[ ''parameterDeclSymbol.Sort,''_::_.Variable,'__[''Sort.Sort, ''ModuleExpression.Sort],''ParameterDecl.Sort],'op-hook[ ''parameterDeclListSymbol.Sort,''_`,_.Qid,'__[''NeParameterDeclList.Sort, ''ParameterDeclList.Sort],''NeParameterDeclList.Sort],'op-hook[ ''protectingSymbol.Sort,''protecting_..Qid,''ModuleExpression.Sort, ''Import.Sort],'op-hook[''extendingSymbol.Sort,''extending_..Qid, ''ModuleExpression.Sort,''Import.Sort],'op-hook[''includingSymbol.Sort, ''including_..Qid,''ModuleExpression.Sort,''Import.Sort],'op-hook[ ''nilImportListSymbol.Sort,''nil.Sort,'nil.TypeList,''ImportList.Sort], 'op-hook[''importListSymbol.Sort,''__.Sort,'__[''ImportList.Sort, ''ImportList.Sort],''ImportList.Sort],'op-hook[''emptySortSetSymbol.Sort, ''none.Sort,'nil.TypeList,''QidSet.Sort],'op-hook[''sortSetSymbol.Sort, ''_;_.Sort,'__[''NeQidSet.Sort,''QidSet.Sort],''NeQidSet.Sort],'op-hook[ ''subsortSymbol.Sort,''subsort_<_..Qid,'__[''Sort.Sort,''Sort.Sort], ''SubsortDecl.Sort],'op-hook[''emptySubsortDeclSetSymbol.Sort,''none.Sort, 'nil.TypeList,''SubsortDeclSet.Sort],'op-hook[''subsortDeclSetSymbol.Sort, ''__.Sort,'__[''SubsortDeclSet.Sort,''SubsortDeclSet.Sort], ''SubsortDeclSet.Sort],'op-hook[''nilQidListSymbol.Sort,''nil.Sort, 'nil.TypeList,''QidList.Sort],'op-hook[''qidListSymbol.Sort,''__.Sort,'__[ ''QidList.Sort,''QidList.Sort],''QidList.Sort],'op-hook[ ''emptyQidSetSymbol.Sort,''none.Sort,'nil.TypeList,''QidSet.Sort],'op-hook[ ''qidSetSymbol.Sort,''_;_.Sort,'__[''NeQidSet.Sort,''QidSet.Sort], ''NeQidSet.Sort],'op-hook[''succSymbol.Sort,''s_.Sort,''Nat.Sort, ''NzNat.Sort],'op-hook[''natListSymbol.Sort,''__.Sort,'__[''NatList.Sort, ''NatList.Sort],''NatList.Sort],'op-hook[''unboundedSymbol.Sort, ''unbounded.Sort,'nil.TypeList,''Bound.Sort],'op-hook[ ''noParentSymbol.Sort,''none.Sort,'nil.TypeList,''Parent.Sort],'op-hook[ ''stringSymbol.Sort,''.Sort,'nil.TypeList,''Char.Sort],'op-hook[ ''sortRenamingSymbol.Sort,''sort_to_.Sort,'__[''Qid.Sort,''Qid.Sort], ''Renaming.Sort],'op-hook[''opRenamingSymbol.Sort,''op_to_`[_`].Qid,'__[ ''Qid.Sort,''Qid.Sort,''AttrSet.Sort],''Renaming.Sort],'op-hook[ ''opRenamingSymbol2.Sort,''op_:_->_to_`[_`].Qid,'__[''Qid.Sort, ''TypeList.Sort,''Type.Sort,''Qid.Sort,''AttrSet.Sort],''Renaming.Sort], 'op-hook[''labelRenamingSymbol.Sort,''label_to_.Sort,'__[''Qid.Sort, ''Qid.Sort],''Renaming.Sort],'op-hook[''stratRenamingSymbol.Sort, ''strat_to_.Sort,'__[''Qid.Sort,''Qid.Sort],''Renaming.Sort],'op-hook[ ''stratRenamingSymbol2.Sort,''strat_:_@_to_.Variable,'__[''Qid.Sort, ''TypeList.Sort,''Type.Sort,''Qid.Sort],''Renaming.Sort],'op-hook[ ''renamingSetSymbol.Sort,''_`,_.Qid,'__[''RenamingSet.Sort, ''RenamingSet.Sort],''RenamingSet.Sort],'op-hook[''sumSymbol.Sort, ''_+_.Sort,'__[''ModuleExpression.Sort,''ModuleExpression.Sort], ''ModuleExpression.Sort],'op-hook[''renamingSymbol.Sort,''_*`(_`).Sort,'__[ ''ModuleExpression.Sort,''RenamingSet.Sort],''ModuleExpression.Sort], 'op-hook[''instantiationSymbol.Sort,''_`{_`}.Sort,'__[''Expression.Sort, ''NeParameterList.Sort],''Expression.Sort],'op-hook[''termHookSymbol.Sort, ''term-hook.Sort,'__[''Qid.Sort,''Term.Sort],''Hook.Sort],'op-hook[ ''hookListSymbol.Sort,''__.Sort,'__[''HookList.Sort,''HookList.Sort], ''HookList.Sort],'op-hook[''idHookSymbol.Sort,''id-hook.Sort,'__[ ''Qid.Sort,''QidList.Sort],''Hook.Sort],'op-hook[''opHookSymbol.Sort, ''op-hook.Sort,'__[''Qid.Sort,''Qid.Sort,''QidList.Sort,''Qid.Sort], ''Hook.Sort],'op-hook[''assocSymbol.Sort,''assoc.Sort,'nil.TypeList, ''Attr.Sort],'op-hook[''commSymbol.Sort,''comm.Sort,'nil.TypeList, ''Attr.Sort],'op-hook[''idemSymbol.Sort,''idem.Sort,'nil.TypeList, ''Attr.Sort],'op-hook[''iterSymbol.Sort,''iter.Sort,'nil.TypeList, ''Attr.Sort],'op-hook[''idSymbol.Sort,''id.Sort,''Term.Sort,''Attr.Sort], 'op-hook[''leftIdSymbol.Sort,''left-id.Sort,''Term.Sort,''Attr.Sort], 'op-hook[''rightIdSymbol.Sort,''right-id.Sort,''Term.Sort,''Attr.Sort], 'op-hook[''stratSymbol.Sort,''strat.Sort,''NeNatList.Sort,''Attr.Sort], 'op-hook[''memoSymbol.Sort,''memo.Sort,'nil.TypeList,''Attr.Sort],'op-hook[ ''precSymbol.Sort,''prec.Sort,''Nat.Sort,''Attr.Sort],'op-hook[ ''gatherSymbol.Sort,''gather.Sort,''QidList.Sort,''Attr.Sort],'op-hook[ ''formatSymbol.Sort,''format.Sort,''QidList.Sort,''Attr.Sort],'op-hook[ ''ctorSymbol.Sort,''ctor.Sort,'nil.TypeList,''Attr.Sort],'op-hook[ ''frozenSymbol.Sort,''frozen.Sort,''NeNatList.Sort,''Attr.Sort],'op-hook[ ''polySymbol.Sort,''poly.Sort,''NeNatList.Sort,''Attr.Sort],'op-hook[ ''configSymbol.Sort,''config.Sort,'nil.TypeList,''Attr.Sort],'op-hook[ ''objectSymbol.Sort,''object.Sort,'nil.TypeList,''Attr.Sort],'op-hook[ ''msgSymbol.Sort,''msg.Sort,'nil.TypeList,''Attr.Sort],'op-hook[ ''specialSymbol.Sort,''special.Sort,''NeHookList.Sort,''Attr.Sort], 'op-hook[''labelSymbol.Sort,''label.Sort,''Qid.Sort,''Attr.Sort],'op-hook[ ''metadataSymbol.Sort,''metadata.Sort,''String.Sort,''Attr.Sort],'op-hook[ ''owiseSymbol.Sort,''owise.Sort,'nil.TypeList,''Attr.Sort],'op-hook[ ''variantAttrSymbol.Sort,''variant.Sort,'nil.TypeList,''Attr.Sort], 'op-hook[''narrowingSymbol.Sort,''narrowing.Sort,'nil.TypeList, ''Attr.Sort],'op-hook[''nonexecSymbol.Sort,''nonexec.Sort,'nil.TypeList, ''Attr.Sort],'op-hook[''printSymbol.Sort,''print.Sort,''QidList.Sort, ''Attr.Sort],'op-hook[''emptyAttrSetSymbol.Sort,''none.Sort,'nil.TypeList, ''AttrSet.Sort],'op-hook[''attrSetSymbol.Sort,''__.Sort,'__[''AttrSet.Sort, ''AttrSet.Sort],''AttrSet.Sort],'op-hook[''opDeclSymbol.Sort, ''op_:_->_`[_`]..Qid,'__[''Qid.Sort,''TypeList.Sort,''Type.Sort, ''AttrSet.Sort],''OpDecl.Sort],'op-hook[''opDeclSetSymbol.Sort,''__.Sort, '__[''OpDeclSet.Sort,''OpDeclSet.Sort],''OpDeclSet.Sort],'op-hook[ ''emptyOpDeclSetSymbol.Sort,''none.Sort,'nil.TypeList,''OpDeclSet.Sort], 'op-hook[''mbSymbol.Sort,''mb_:_`[_`]..Qid,'__[''Term.Sort,''Sort.Sort, ''AttrSet.Sort],''MembAx.Sort],'op-hook[''cmbSymbol.Sort, ''cmb_:_if_`[_`]..Qid,'__[''Term.Sort,''Sort.Sort,''EqCondition.Sort, ''AttrSet.Sort],''MembAx.Sort],'op-hook[''emptyMembAxSetSymbol.Sort, ''none.Sort,'nil.TypeList,''MembAxSet.Sort],'op-hook[ ''membAxSetSymbol.Sort,''__.Sort,'__[''MembAxSet.Sort,''MembAxSet.Sort], ''MembAxSet.Sort],'op-hook[''eqSymbol.Sort,''eq_=_`[_`]..Qid,'__[ ''Term.Sort,''Term.Sort,''AttrSet.Sort],''Equation.Sort],'op-hook[ ''ceqSymbol.Sort,''ceq_=_if_`[_`]..Qid,'__[''Term.Sort,''Term.Sort, ''EqCondition.Sort,''AttrSet.Sort],''Equation.Sort],'op-hook[ ''emptyEquationSetSymbol.Sort,''none.Sort,'nil.TypeList, ''EquationSet.Sort],'op-hook[''equationSetSymbol.Sort,''__.Sort,'__[ ''EquationSet.Sort,''EquationSet.Sort],''EquationSet.Sort],'op-hook[ ''rlSymbol.Sort,''rl_=>_`[_`]..Qid,'__[''Term.Sort,''Term.Sort, ''AttrSet.Sort],''Rule.Sort],'op-hook[''crlSymbol.Sort, ''crl_=>_if_`[_`]..Qid,'__[''Term.Sort,''Term.Sort,''Condition.Sort, ''AttrSet.Sort],''Rule.Sort],'op-hook[''emptyRuleSetSymbol.Sort, ''none.Sort,'nil.TypeList,''RuleSet.Sort],'op-hook[''ruleSetSymbol.Sort, ''__.Sort,'__[''RuleSet.Sort,''RuleSet.Sort],''RuleSet.Sort],'op-hook[ ''stratDeclSymbol.Sort,''strat_:_@_`[_`]..Qid,'__[''Qid.Sort, ''TypeList.Sort,''Type.Sort,''AttrSet.Sort],''StratDecl.Sort],'op-hook[ ''emptyStratDeclSetSymbol.Sort,''none.Sort,'nil.TypeList, ''StratDeclSet.Sort],'op-hook[''stratDeclSetSymbol.Sort,''__.Sort,'__[ ''StratDeclSet.Sort,''StratDeclSet.Sort],''StratDeclSet.Sort],'op-hook[ ''sdSymbol.Sort,''sd_:=_`[_`]..Qid,'__[''CallStrategy.Sort,''Strategy.Sort, ''AttrSet.Sort],''StratDefinition.Sort],'op-hook[''csdSymbol.Sort, ''csd_:=_if_`[_`]..Qid,'__[''CallStrategy.Sort,''Strategy.Sort, ''EqCondition.Sort,''AttrSet.Sort],''StratDefinition.Sort],'op-hook[ ''emptyStratDefSetSymbol.Sort,''none.Sort,'nil.TypeList, ''StratDefSet.Sort],'op-hook[''stratDefSetSymbol.Sort,''__.Sort,'__[ ''StratDefSet.Sort,''StratDefSet.Sort],''StratDefSet.Sort],'op-hook[ ''fmodSymbol.Sort,''fmod_is_sorts_.____endfm.Constant,'__[''Header.Sort, ''ImportList.Sort,''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort, ''MembAxSet.Sort,''EquationSet.Sort],''FModule.Sort],'op-hook[ ''fthSymbol.Sort,''fth_is_sorts_.____endfth.Constant,'__[''Qid.Sort, ''ImportList.Sort,''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort, ''MembAxSet.Sort,''EquationSet.Sort],''FTheory.Sort],'op-hook[ ''modSymbol.Sort,''mod_is_sorts_._____endm.Constant,'__[''Header.Sort, ''ImportList.Sort,''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort, ''MembAxSet.Sort,''EquationSet.Sort,''RuleSet.Sort],''SModule.Sort], 'op-hook[''thSymbol.Sort,''th_is_sorts_._____endth.Constant,'__[''Qid.Sort, ''ImportList.Sort,''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort, ''MembAxSet.Sort,''EquationSet.Sort,''RuleSet.Sort],''STheory.Sort], 'op-hook[''smodSymbol.Sort,''smod_is_sorts_._______endsm.Constant,'__[ ''Header.Sort,''ImportList.Sort,''SortSet.Sort,''SubsortDeclSet.Sort, ''OpDeclSet.Sort,''MembAxSet.Sort,''EquationSet.Sort,''RuleSet.Sort, ''StratDeclSet.Sort,''StratDefSet.Sort],''StratModule.Sort],'op-hook[ ''sthSymbol.Sort,''sth_is_sorts_._______endsth.Constant,'__[''Header.Sort, ''ImportList.Sort,''SortSet.Sort,''SubsortDeclSet.Sort,''OpDeclSet.Sort, ''MembAxSet.Sort,''EquationSet.Sort,''RuleSet.Sort,''StratDeclSet.Sort, ''StratDefSet.Sort],''StratTheory.Sort],'op-hook[''sortMappingSymbol.Sort, ''sort_to_..Qid,'__[''Sort.Sort,''Sort.Sort],''SortMapping.Sort],'op-hook[ ''emptySortMappingSetSymbol.Sort,''none.Sort,'nil.TypeList, ''SortMappingSet.Sort],'op-hook[''sortMappingSetSymbol.Sort,''__.Sort,'__[ ''SortMappingSet.Sort,''SortMappingSet.Sort],''SortMappingSet.Sort], 'op-hook[''opMappingSymbol.Sort,''op_to_..Qid,'__[''Qid.Sort,''Qid.Sort], ''OpMapping.Sort],'op-hook[''opSpecificMappingSymbol.Sort, ''op_:_->_to_..Qid,'__[''Qid.Sort,''TypeList.Sort,''Type.Sort,''Qid.Sort], ''OpMapping.Sort],'op-hook[''opTermMappingSymbol.Sort,''op_to`term_..Qid, '__[''Term.Sort,''Term.Sort],''OpMapping.Sort],'op-hook[ ''emptyOpMappingSetSymbol.Sort,''none.Sort,'nil.TypeList, ''OpMappingSet.Sort],'op-hook[''opMappingSetSymbol.Sort,''__.Sort,'__[ ''OpMappingSet.Sort,''OpMappingSet.Sort],''OpMappingSet.Sort],'op-hook[ ''stratMappingSymbol.Sort,''strat_to_..Qid,'__[''Qid.Sort,''Qid.Sort], ''StratMapping.Sort],'op-hook[''stratSpecificMappingSymbol.Sort, ''strat_:_@_to_..Qid,'__[''Qid.Sort,''TypeList.Sort,''Type.Sort, ''Qid.Sort],''StratMapping.Sort],'op-hook[''stratExprMappingSymbol.Sort, ''strat_to`expr_..Qid,'__[''CallStrategy.Sort,''Strategy.Sort], ''StratMapping.Sort],'op-hook[''emptyStratMappingSetSymbol.Sort, ''none.Sort,'nil.TypeList,''StratMappingSet.Sort],'op-hook[ ''stratMappingSetSymbol.Sort,''__.Sort,'__[''StratMappingSet.Sort, ''StratMappingSet.Sort],''StratMappingSet.Sort],'op-hook[''viewSymbol.Sort, ''view_from_to_is___endv.Sort,'__[''Header.Sort,''ModuleExpression.Sort, ''ModuleExpression.Sort,''SortMappingSet.Sort,''OpMappingSet.Sort, ''StratMappingSet.Sort],''View.Sort],'op-hook[''anyTypeSymbol.Sort, ''anyType.Sort,'nil.TypeList,''Type?.Sort],'op-hook[ ''unificandPairSymbol.Sort,''_=?_.Sort,'__[''Term.Sort,''Term.Sort], ''UnificandPair.Sort],'op-hook[''unificationConjunctionSymbol.Sort, ''_/\_.Sort,'__[''UnificationProblem.Sort,''UnificationProblem.Sort], ''UnificationProblem.Sort],'op-hook[''patternSubjectPairSymbol.Sort, ''_<=?_.Sort,'__[''Term.Sort,''Term.Sort],''PatternSubjectPair.Sort], 'op-hook[''matchingConjunctionSymbol.Sort,''_/\_.Sort,'__[ ''MatchingProblem.Sort,''MatchingProblem.Sort],''MatchingProblem.Sort], 'op-hook[''resultPairSymbol.Sort,''`{_`,_`}.Qid,'__[''Term.Sort, ''Type.Sort],''ResultPair.Sort],'op-hook[''resultTripleSymbol.Sort, ''`{_`,_`,_`}.Qid,'__[''Term.Sort,''Type.Sort,''Substitution.Sort], ''ResultTriple.Sort],'op-hook[''result4TupleSymbol.Sort, ''`{_`,_`,_`,_`}.Qid,'__[''Term.Sort,''Type.Sort,''Substitution.Sort, ''Context.Sort],''Result4Tuple.Sort],'op-hook[''matchPairSymbol.Sort, ''`{_`,_`}.Qid,'__[''Substitution.Sort,''Context.Sort],''MatchPair.Sort], 'op-hook[''unificationTripleSymbol.Sort,''`{_`,_`,_`}.Qid,'__[ ''Substitution.Sort,''Substitution.Sort,''Qid.Sort], ''UnificationTriple.Sort],'op-hook[''variantSymbol.Sort, ''`{_`,_`,_`,_`,_`}.Qid,'__[''Term.Sort,''Substitution.Sort,''Qid.Sort, ''Parent.Sort,''Bool.Sort],''Variant.Sort],'op-hook[ ''narrowingApplyResultSymbol.Sort,''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'__[ ''Term.Sort,''Type.Sort,''Context.Sort,''Qid.Sort,''Substitution.Sort, ''Substitution.Sort,''Qid.Sort],''NarrowingApplyResult.Sort],'op-hook[ ''narrowingSearchResultSymbol.Sort,''`{_`,_`,_`,_`,_`,_`}.Qid,'__[ ''Term.Sort,''Type.Sort,''Substitution.Sort,''Qid.Sort,''Substitution.Sort, ''Qid.Sort],''NarrowingSearchResult.Sort],'op-hook[''traceStepSymbol.Sort, ''`{_`,_`,_`}.Qid,'__[''Term.Sort,''Type.Sort,''Rule.Sort], ''TraceStep.Sort],'op-hook[''nilTraceSymbol.Sort,''nil.Sort,'nil.TypeList, ''Trace.Sort],'op-hook[''traceSymbol.Sort,''__.Sort,'__[''Trace.Sort, ''Trace.Sort],''Trace.Sort],'op-hook[''narrowingStepSymbol.Sort, ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'__[''Context.Sort,''Qid.Sort, ''Substitution.Sort,''Qid.Sort,''Term.Sort,''Type.Sort, ''Substitution.Sort],''NarrowingStep.Sort],'op-hook[ ''nilNarrowingTraceSymbol.Sort,''nil.Sort,'nil.TypeList, ''NarrowingTrace.Sort],'op-hook[''narrowingTraceSymbol.Sort,''__.Sort,'__[ ''NarrowingTrace.Sort,''NarrowingTrace.Sort],''NarrowingTrace.Sort], 'op-hook[''narrowingSearchPathResultSymbol.Sort,''`{_`,_`,_`,_`,_`,_`}.Qid, '__[''Term.Sort,''Type.Sort,''Substitution.Sort,''NarrowingTrace.Sort, ''Substitution.Sort,''Qid.Sort],''NarrowingSearchPathResult.Sort],'op-hook[ ''smtResultSymbol.Sort,''`{_`,_`,_`,_`}.Qid,'__[''Term.Sort, ''Substitution.Sort,''Term.Sort,''Nat.Sort],''SmtResult.Sort],'op-hook[ ''noParseSymbol.Sort,''noParse.Sort,''Nat.Sort,''ResultPair?.Sort], 'op-hook[''ambiguitySymbol.Sort,''ambiguity.Sort,'__[''ResultPair.Sort, ''ResultPair.Sort],''ResultPair?.Sort],'op-hook[''failure2Symbol.Sort, ''failure.Sort,'nil.TypeList,''ResultPair?.Sort],'op-hook[ ''failure3Symbol.Sort,''failure.Sort,'nil.TypeList,''ResultTriple?.Sort], 'op-hook[''failureIncomplete3Symbol.Sort,''failureIncomplete.Sort, 'nil.TypeList,''ResultTriple?.Sort],'op-hook[''failure4Symbol.Sort, ''failure.Sort,'nil.TypeList,''Result4Tuple?.Sort],'op-hook[ ''noUnifierPairSymbol.Sort,''noUnifier.Sort,'nil.TypeList, ''UnificationPair?.Sort],'op-hook[''noUnifierTripleSymbol.Sort, ''noUnifier.Sort,'nil.TypeList,''UnificationTriple?.Sort],'op-hook[ ''noUnifierIncompletePairSymbol.Sort,''noUnifierIncomplete.Sort, 'nil.TypeList,''UnificationPair?.Sort],'op-hook[ ''noUnifierIncompleteTripleSymbol.Sort,''noUnifierIncomplete.Sort, 'nil.TypeList,''UnificationTriple?.Sort],'op-hook[''noVariantSymbol.Sort, ''noVariant.Sort,'nil.TypeList,''Variant?.Sort],'op-hook[ ''noVariantIncompleteSymbol.Sort,''noVariantIncomplete.Sort,'nil.TypeList, ''Variant?.Sort],'op-hook[''narrowingApplyFailureSymbol.Sort, ''failure.Sort,'nil.TypeList,''NarrowingApplyResult?.Sort],'op-hook[ ''narrowingApplyFailureIncompleteSymbol.Sort,''failureIncomplete.Sort, 'nil.TypeList,''NarrowingApplyResult?.Sort],'op-hook[ ''narrowingSearchFailureSymbol.Sort,''failure.Sort,'nil.TypeList, ''NarrowingSearchResult?.Sort],'op-hook[ ''narrowingSearchFailureIncompleteSymbol.Sort,''failureIncomplete.Sort, 'nil.TypeList,''NarrowingSearchResult?.Sort],'op-hook[ ''narrowingSearchPathFailureSymbol.Sort,''failure.Sort,'nil.TypeList, ''NarrowingSearchPathResult?.Sort],'op-hook[ ''narrowingSearchPathFailureIncompleteSymbol.Sort,''failureIncomplete.Sort, 'nil.TypeList,''NarrowingSearchPathResult?.Sort],'op-hook[ ''noMatchSubstSymbol.Sort,''noMatch.Sort,'nil.TypeList, ''Substitution?.Sort],'op-hook[''noMatchIncompleteSubstSymbol.Sort, ''noMatchIncomplete.Sort,'nil.TypeList,''Substitution?.Sort],'op-hook[ ''noMatchPairSymbol.Sort,''noMatch.Sort,'nil.TypeList,''MatchPair?.Sort], 'op-hook[''failureTraceSymbol.Sort,''failure.Sort,'nil.TypeList, ''Trace?.Sort],'op-hook[''smtFailureSymbol.Sort,''failure.Sort, 'nil.TypeList,''SmtResult?.Sort],'op-hook[''noStratParseSymbol.Sort, ''noStratParse.Sort,''Nat.Sort,''Strategy?.Sort],'op-hook[ ''stratAmbiguitySymbol.Sort,''ambiguity.Sort,'__[''Strategy.Sort, ''Strategy.Sort],''Strategy?.Sort],'op-hook[''mixfixSymbol.Sort, ''mixfix.Sort,'nil.TypeList,''PrintOption.Sort],'op-hook[ ''withParensSymbol.Sort,''with-parens.Sort,'nil.TypeList, ''PrintOption.Sort],'op-hook[''flatSymbol.Sort,''flat.Sort,'nil.TypeList, ''PrintOption.Sort],'op-hook[''formatPrintOptionSymbol.Sort,''format.Sort, 'nil.TypeList,''PrintOption.Sort],'op-hook[''numberSymbol.Sort, ''number.Sort,'nil.TypeList,''PrintOption.Sort],'op-hook[''ratSymbol.Sort, ''rat.Sort,'nil.TypeList,''PrintOption.Sort],'op-hook[ ''emptyPrintOptionSetSymbol.Sort,''none.Sort,'nil.TypeList, ''PrintOptionSet.Sort],'op-hook[''printOptionSetSymbol.Sort,''__.Sort,'__[ ''PrintOptionSet.Sort,''PrintOptionSet.Sort],''PrintOptionSet.Sort], 'op-hook[''delaySymbol.Sort,''delay.Sort,'nil.TypeList, ''VariantOption.Sort],'op-hook[''filterSymbol.Sort,''filter.Sort, 'nil.TypeList,''VariantOption.Sort],'op-hook[ ''emptyVariantOptionSetSymbol.Sort,''none.Sort,'nil.TypeList, ''VariantOptionSet.Sort],'op-hook[''variantOptionSetSymbol.Sort,''__.Sort, '__[''VariantOptionSet.Sort,''VariantOptionSet.Sort], ''VariantOptionSet.Sort],'op-hook[''breadthFirstSymbol.Sort, ''breadthFirst.Sort,'nil.TypeList,''SrewriteOption.Sort],'op-hook[ ''depthFirstSymbol.Sort,''depthFirst.Sort,'nil.TypeList, ''SrewriteOption.Sort],'op-hook[''legacyUnificationPairSymbol.Sort, ''`{_`,_`}.Qid,'__[''Substitution.Sort,''Nat.Sort],''UnificationPair.Sort], 'op-hook[''legacyUnificationTripleSymbol.Sort,''`{_`,_`,_`}.Qid,'__[ ''Substitution.Sort,''Substitution.Sort,''Nat.Sort], ''UnificationTriple.Sort],'op-hook[''legacyVariantSymbol.Sort, ''`{_`,_`,_`,_`,_`}.Qid,'__[''Term.Sort,''Substitution.Sort,''Nat.Sort, ''Parent.Sort,''Bool.Sort],''Variant.Sort],'term-hook[''trueTerm.Sort, ''true.Bool.Constant],'term-hook[''falseTerm.Sort, ''false.Bool.Constant]]]],'op_:_->_`[_`].[''metaRewrite.Sort,'__[ ''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[ResultPair?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaRewrite.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''QidList.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaSearch.Sort, '__[''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind, ''`[Condition`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[ResultTriple?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaSearch.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaSearchPath.Sort,'__[ ''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind, ''`[Condition`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[Trace?`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''metaSearchPath.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaSmtSearch.Sort,'__[ ''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind, ''`[Condition`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[SmtResult?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaSmtSearch.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''QidList.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaSrewrite.Sort, '__[''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind, ''`[StrategyList`,Strategy?`].Kind,''`[SrewriteOption`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[ResultPair?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaSrewrite.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''QidList.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaUnify.Sort, '__[''`[Module`].Kind,''`[UnificationProblem`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[MatchPair?`,UnificationPair?`,MatchOrUnificationPair`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''legacyMetaUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaUnify.Sort,'__[ ''`[Module`].Kind,''`[UnificationProblem`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[MatchPair?`,UnificationPair?`,MatchOrUnificationPair`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''metaUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaVariantDisjointUnify.Sort,'__[ ''`[Module`].Kind,''`[UnificationProblem`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationTriple?`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''legacyMetaVariantDisjointUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaVariantDisjointUnify.Sort,'__[ ''`[Module`].Kind,''`[UnificationProblem`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationTriple?`].Kind,'none.AttrSet],'op_:_->_`[_`].[ ''metaVariantDisjointUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind, ''`[VariantOptionSet`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[UnificationTriple?`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaVariantDisjointUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaVariantMatch.Sort,'__[ ''`[Module`].Kind,''`[MatchingProblem`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[VariantOptionSet`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[Substitution?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaVariantMatch.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''QidList.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaVariantUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[MatchPair?`,UnificationPair?`,MatchOrUnificationPair`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''legacyMetaVariantUnify.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''QidList.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''metaVariantUnify.Sort,'__[''`[Module`].Kind, ''`[UnificationProblem`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[MatchPair?`,UnificationPair?`,MatchOrUnificationPair`].Kind, 'none.AttrSet],'op_:_->_`[_`].[''metaVariantUnify.Sort,'__[ ''`[Module`].Kind,''`[UnificationProblem`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[VariantOptionSet`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[MatchPair?`,UnificationPair?`,MatchOrUnificationPair`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''metaVariantUnify.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaXapply.Sort,'__[ ''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind, ''`[Substitution?`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind],''`[Result4Tuple?`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaXapply.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''metaXmatch.Sort,'__[ ''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind, ''`[Condition`].Kind,''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind, ''`[FindResult`,NatList`,Bound`,Parent`].Kind], ''`[MatchPair?`,UnificationPair?`,MatchOrUnificationPair`].Kind,'special[ '__['id-hook[''MetaLevelOpSymbol.Sort,''metaXmatch.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''minimalSorts.Sort,'__[ ''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind],''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,'special['__[ 'id-hook[''MetaLevelOpSymbol.Sort,''metaMinimalSorts.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''mixfix.Sort,'nil.TypeList, ''PrintOption.Sort,'ctor.Attr],'op_:_->_`[_`].[''nil.Sort,'nil.TypeList, ''NarrowingTrace.Sort,'ctor.Attr],'op_:_->_`[_`].[''nil.Sort,'nil.TypeList, ''Trace.Sort,'ctor.Attr],'op_:_->_`[_`].[''noMatch.Sort,'nil.TypeList, ''MatchPair?.Sort,'ctor.Attr],'op_:_->_`[_`].[''noMatch.Sort,'nil.TypeList, ''Substitution?.Sort,'ctor.Attr],'op_:_->_`[_`].[''noMatchIncomplete.Sort, 'nil.TypeList,''Substitution?.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''noParse.Sort,''Nat.Sort,''ResultPair?.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''noStratParse.Sort,''Nat.Sort,''Strategy?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''noUnifier.Sort,'nil.TypeList,''UnificationPair?.Sort, 'ctor.Attr],'op_:_->_`[_`].[''noUnifier.Sort,'nil.TypeList, ''UnificationTriple?.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''noUnifierIncomplete.Sort,'nil.TypeList,''UnificationPair?.Sort, 'ctor.Attr],'op_:_->_`[_`].[''noUnifierIncomplete.Sort,'nil.TypeList, ''UnificationTriple?.Sort,'ctor.Attr],'op_:_->_`[_`].[''noVariant.Sort, 'nil.TypeList,''Variant?.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''noVariantIncomplete.Sort,'nil.TypeList,''Variant?.Sort,'ctor.Attr], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''Parent.Sort,'none.AttrSet], 'op_:_->_`[_`].[''none.Sort,'nil.TypeList,''PrintOptionSet.Sort, 'ctor.Attr],'op_:_->_`[_`].[''none.Sort,'nil.TypeList, ''VariantOptionSet.Sort,'ctor.Attr],'op_:_->_`[_`].[''number.Sort, 'nil.TypeList,''PrintOption.Sort,'ctor.Attr],'op_:_->_`[_`].[''rat.Sort, 'nil.TypeList,''PrintOption.Sort,'ctor.Attr],'op_:_->_`[_`].[ ''sameKind.Sort,'__[''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind],''`[Bool`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaSameKind.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''QidList.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''sortLeq.Sort,'__[''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind],''`[Bool`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaSortLeq.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''QidList.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''upEqs.Sort,'__[''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[Bool`].Kind], ''`[EquationSet`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpEqs.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''QidList.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''upImports.Sort,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[ImportList`].Kind,'special['__[ 'id-hook[''MetaLevelOpSymbol.Sort,''metaUpImports.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''upMbs.Sort,'__[''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind, ''`[Bool`].Kind],''`[MembAxSet`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaUpMbs.Sort],'op-hook[''shareWith.Sort, ''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''upModule.Sort,'__[''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[Bool`].Kind], ''`[Module`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpModule.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''QidList.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''upOpDecls.Sort,'__[''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[Bool`].Kind], ''`[OpDeclSet`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpOpDecls.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''QidList.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''upRls.Sort,'__[''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[Bool`].Kind],''`[RuleSet`].Kind, 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaUpRls.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''upSds.Sort,'__[''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind, ''`[Bool`].Kind],''`[StratDefSet`].Kind,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaUpSds.Sort],'op-hook[''shareWith.Sort, ''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort],''ResultPair?.Sort]]]], 'op_:_->_`[_`].[''upSorts.Sort,'__[''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[Bool`].Kind],''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpSorts.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''QidList.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''upStratDecls.Sort,'__[''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[Bool`].Kind], ''`[StratDeclSet`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpStratDecls.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''QidList.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''upSubsortDecls.Sort,'__[''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind,''`[Bool`].Kind], ''`[SubsortDeclSet`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpSubsortDecls.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''QidList.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''upTerm.Sort,''Universal.Sort,''Term.Sort,'__['poly['s_['0.Zero]], 'special['__['id-hook[''MetaLevelOpSymbol.Sort,''metaUpTerm.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]]],'op_:_->_`[_`].[''upView.Sort,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind, ''`[View`].Kind,'special['__['id-hook[''MetaLevelOpSymbol.Sort, ''metaUpView.Sort],'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[ ''Module.Sort,''QidList.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[ ''wellFormed.Sort,''Module.Sort,''Bool.Sort,'special['__['id-hook[ ''MetaLevelOpSymbol.Sort,''metaWellFormedModule.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''wellFormed.Sort,'__[ ''`[Module`].Kind,''`[QidList`,TypeListSet`,QidSet`,Type?`,ModuleExpression`,ParameterList`,GTermList`,Header`].Kind],''`[Bool`].Kind,'special['__[ 'id-hook[''MetaLevelOpSymbol.Sort,''metaWellFormedTerm.Sort],'op-hook[ ''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort,''QidList.Sort], ''ResultPair?.Sort]]]],'op_:_->_`[_`].[''wellFormed.Sort,'__[ ''`[Module`].Kind,''`[Substitution?`].Kind],''`[Bool`].Kind,'special['__[ 'id-hook[''MetaLevelOpSymbol.Sort,''metaWellFormedSubstitution.Sort], 'op-hook[''shareWith.Sort,''metaReduce.Sort,'__[''Module.Sort, ''QidList.Sort],''ResultPair?.Sort]]]],'op_:_->_`[_`].[''with-parens.Sort, 'nil.TypeList,''PrintOption.Sort,'ctor.Attr]],'none.MembAxSet,'__[ 'eq_=_`[_`].['_`[_`][''$applySubstitution.Sort,'_`,_[''Q:Qid.Variable, ''S:Substitution.Variable]],''Q:Qid.Variable,'owise.Attr],'eq_=_`[_`].[ '_`[_`][''$applySubstitution.Sort,'_`,_[''V:Variable.Variable,'_`[_`][ ''_;_.Sort,'_`,_[''S:Substitution.Variable,'_`[_`][''_<-_.Sort,'_`,_[ ''V:Variable.Variable,''T:Term.Variable]]]]]],''T:Term.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''$applySubstitution.Sort,'_`,_[ '_`[_`][''_`,_.Qid,'_`,_[''T:Term.Variable,''TL:NeTermList.Variable]], ''S:Substitution.Variable]],'_`[_`][''_`,_.Qid,'_`,_['_`[_`][ ''$applySubstitution.Sort,'_`,_[''T:Term.Variable, ''S:Substitution.Variable]],'_`[_`][''$applySubstitution.Sort,'_`,_[ ''TL:NeTermList.Variable,''S:Substitution.Variable]]]],'none.AttrSet], 'eq_=_`[_`].['_`[_`][''$applySubstitution.Sort,'_`,_['_`[_`][''_`[_`].Qid, '_`,_[''Q:Qid.Variable,''TL:NeTermList.Variable]], ''S:Substitution.Variable]],'_`[_`][''_`[_`].Qid,'_`,_[''Q:Qid.Variable, '_`[_`][''$applySubstitution.Sort,'_`,_[''TL:NeTermList.Variable, ''S:Substitution.Variable]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''applySubstitution.Sort,'_`,_[''M:Module.Variable,''T:Term.Variable, ''S:Substitution.Variable]],'_`[_`][''getTerm.Sort,'_`[_`][ ''metaNormalize.Sort,'_`,_[''M:Module.Variable,'_`[_`][ ''$applySubstitution.Sort,'_`,_[''T:Term.Variable, ''S:Substitution.Variable]]]]],'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getAccumulatedSubstitution.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`,_`}.Qid, '_`,_[''C:Context.Variable,''L:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable,''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable]]],''A:Substitution.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getAccumulatedSubstitution.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable,''SV:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable]]],''A:Substitution.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''getContext.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[ ''C:Context.Variable,''L:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable,''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable]]],''C:Context.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getContext.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''C:Context.Variable,''L:Qid.Variable,''TS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''C:Context.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getContext.Sort,'_`[_`][ ''`{_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''S:Substitution.Variable,''C:Context.Variable]]],''C:Context.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getContext.Sort,'_`[_`][ ''`{_`,_`}.Qid,'_`,_[''S:Substitution.Variable,''C:Context.Variable]]], ''C:Context.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getInitialSubstitution.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''T:Type.Variable,''S:Substitution.Variable, ''T:NarrowingTrace.Variable,''U:Substitution.Variable,''UV:Qid.Variable]]], ''S:Substitution.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getInitialTerm.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''T:Type.Variable,''S:Substitution.Variable, ''T:NarrowingTrace.Variable,''U:Substitution.Variable,''UV:Qid.Variable]]], ''T:Term.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getInitialType.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''T:Type.Variable,''S:Substitution.Variable, ''T:NarrowingTrace.Variable,''U:Substitution.Variable,''UV:Qid.Variable]]], ''T:Type.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getLabel.Sort, '_`[_`][''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''C:Context.Variable, ''L:Qid.Variable,''U:Substitution.Variable,''UV:Qid.Variable, ''T:Term.Variable,''T:Type.Variable,''A:Substitution.Variable]]], ''L:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getLabel.Sort, '_`[_`][''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable, ''T:Type.Variable,''C:Context.Variable,''L:Qid.Variable, ''TS:Substitution.Variable,''RS:Substitution.Variable,''V:Qid.Variable]]], ''L:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getLhsSubstitution.Sort,'_`[_`][''`{_`,_`,_`}.Qid,'_`,_[ ''LS:Substitution.Variable,''RS:Substitution.Variable,''V:Qid.Variable]]], ''LS:Substitution.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getMoreVariantsInLayerFlag.Sort,'_`[_`][''`{_`,_`,_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''S:Substitution.Variable,''Q:Qid.Variable, ''P:Parent.Variable,''B:Bool.Variable]]],''B:Bool.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getParent.Sort,'_`[_`][''`{_`,_`,_`,_`,_`}.Qid, '_`,_[''T:Term.Variable,''S:Substitution.Variable,''Q:Qid.Variable, ''P:Parent.Variable,''B:Bool.Variable]]],''P:Parent.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getRhsSubstitution.Sort,'_`[_`][ ''`{_`,_`,_`}.Qid,'_`,_[''LS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''RS:Substitution.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getRule.Sort,'_`[_`][ ''`{_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''R:Rule.Variable]]],''R:Rule.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getRuleSubstitution.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''T:Type.Variable,''C:Context.Variable,''L:Qid.Variable, ''TS:Substitution.Variable,''RS:Substitution.Variable,''V:Qid.Variable]]], ''RS:Substitution.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getStateVariableFamily.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''T:Type.Variable,''A:Substitution.Variable, ''SV:Qid.Variable,''U:Substitution.Variable,''UV:Qid.Variable]]], ''SV:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSubstitution.Sort,'_`[_`][''`{_`,_`,_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''S:Substitution.Variable,''Q:Qid.Variable, ''P:Parent.Variable,''B:Bool.Variable]]],''S:Substitution.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getSubstitution.Sort,'_`[_`][ ''`{_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''S:Substitution.Variable,''C:Context.Variable]]], ''S:Substitution.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSubstitution.Sort,'_`[_`][''`{_`,_`,_`}.Qid,'_`,_[''T:Term.Variable, ''T:Type.Variable,''S:Substitution.Variable]]],''S:Substitution.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getSubstitution.Sort,'_`[_`][ ''`{_`,_`}.Qid,'_`,_[''S:Substitution.Variable,''C:Context.Variable]]], ''S:Substitution.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getSubstitution.Sort,'_`[_`][''`{_`,_`}.Qid,'_`,_[ ''S:Substitution.Variable,''V:Qid.Variable]]],''S:Substitution.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTerm.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''C:Context.Variable,''L:Qid.Variable, ''U:Substitution.Variable,''UV:Qid.Variable,''T:Term.Variable, ''T:Type.Variable,''A:Substitution.Variable]]],''T:Term.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTerm.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''C:Context.Variable,''L:Qid.Variable,''TS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''T:Term.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTerm.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable,''SV:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable]]],''T:Term.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getTerm.Sort,'_`[_`][''`{_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable, ''S:Substitution.Variable,''Q:Qid.Variable,''P:Parent.Variable, ''B:Bool.Variable]]],''T:Term.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getTerm.Sort,'_`[_`][''`{_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable, ''T:Type.Variable,''S:Substitution.Variable,''C:Context.Variable]]], ''T:Term.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTerm.Sort, '_`[_`][''`{_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''R:Rule.Variable]]],''T:Term.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getTerm.Sort,'_`[_`][''`{_`,_`,_`}.Qid,'_`,_[''T:Term.Variable, ''T:Type.Variable,''S:Substitution.Variable]]],''T:Term.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTerm.Sort,'_`[_`][''`{_`,_`}.Qid, '_`,_[''T:Term.Variable,''T:Type.Variable]]],''T:Term.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTermSubstitution.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''C:Context.Variable,''L:Qid.Variable,''TS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''TS:Substitution.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getTrace.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''S:Substitution.Variable,''T:NarrowingTrace.Variable, ''U:Substitution.Variable,''UV:Qid.Variable]]],''T:NarrowingTrace.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getType.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''C:Context.Variable,''L:Qid.Variable, ''U:Substitution.Variable,''UV:Qid.Variable,''T:Term.Variable, ''T:Type.Variable,''A:Substitution.Variable]]],''T:Type.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getType.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''C:Context.Variable,''L:Qid.Variable,''TS:Substitution.Variable, ''RS:Substitution.Variable,''V:Qid.Variable]]],''T:Type.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getType.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable,''SV:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable]]],''T:Type.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getType.Sort,'_`[_`][''`{_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable, ''T:Type.Variable,''S:Substitution.Variable,''C:Context.Variable]]], ''T:Type.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][''getType.Sort, '_`[_`][''`{_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''R:Rule.Variable]]],''T:Type.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getType.Sort,'_`[_`][''`{_`,_`,_`}.Qid,'_`,_[''T:Term.Variable, ''T:Type.Variable,''S:Substitution.Variable]]],''T:Type.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getType.Sort,'_`[_`][''`{_`,_`}.Qid, '_`,_[''T:Term.Variable,''T:Type.Variable]]],''T:Type.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getUnifier.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''C:Context.Variable,''L:Qid.Variable, ''U:Substitution.Variable,''UV:Qid.Variable,''T:Term.Variable, ''T:Type.Variable,''A:Substitution.Variable]]],''U:Substitution.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''getUnifier.Sort,'_`[_`][ ''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable,''SV:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable]]],''U:Substitution.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''getUnifier.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''T:Type.Variable,''S:Substitution.Variable, ''T:NarrowingTrace.Variable,''U:Substitution.Variable,''UV:Qid.Variable]]], ''U:Substitution.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getUnifierVariableFamily.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`,_`}.Qid, '_`,_[''C:Context.Variable,''L:Qid.Variable,''U:Substitution.Variable, ''UV:Qid.Variable,''T:Term.Variable,''T:Type.Variable, ''A:Substitution.Variable]]],''UV:Qid.Variable,'none.AttrSet],'eq_=_`[_`].[ '_`[_`][''getUnifierVariableFamily.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`}.Qid, '_`,_[''T:Term.Variable,''T:Type.Variable,''A:Substitution.Variable, ''SV:Qid.Variable,''U:Substitution.Variable,''UV:Qid.Variable]]], ''UV:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getUnifierVariableFamily.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''T:Type.Variable,''S:Substitution.Variable, ''T:NarrowingTrace.Variable,''U:Substitution.Variable,''UV:Qid.Variable]]], ''UV:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getVariableFamily.Sort,'_`[_`][''`{_`,_`,_`,_`,_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''T:Type.Variable,''C:Context.Variable,''L:Qid.Variable, ''TS:Substitution.Variable,''RS:Substitution.Variable,''V:Qid.Variable]]], ''V:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getVariableFamily.Sort,'_`[_`][''`{_`,_`,_`,_`,_`}.Qid,'_`,_[ ''T:Term.Variable,''S:Substitution.Variable,''Q:Qid.Variable, ''P:Parent.Variable,''B:Bool.Variable]]],''Q:Qid.Variable,'none.AttrSet], 'eq_=_`[_`].['_`[_`][''getVariableFamily.Sort,'_`[_`][''`{_`,_`,_`}.Qid, '_`,_[''LS:Substitution.Variable,''RS:Substitution.Variable, ''V:Qid.Variable]]],''V:Qid.Variable,'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''getVariableFamily.Sort,'_`[_`][''`{_`,_`}.Qid,'_`,_[ ''S:Substitution.Variable,''V:Qid.Variable]]],''V:Qid.Variable, 'none.AttrSet],'eq_=_`[_`].['_`[_`][''metaNarrowingApply.Sort,'_`,_[ ''M:Module.Variable,''T:Term.Variable,''TL:TermList.Variable, ''Q:Qid.Variable,''N:Nat.Variable]],'_`[_`][''metaNarrowingApply.Sort, '_`,_[''M:Module.Variable,''T:Term.Variable,''TL:TermList.Variable, ''Q:Qid.Variable,''none.VariantOptionSet.Constant,''N:Nat.Variable]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''metaNarrowingSearch.Sort,'_`,_[ ''M:Module.Variable,''T:Term.Variable,''T2:Term.Variable,''S:Qid.Variable, ''B:Bound.Variable,''F:Qid.Variable,''N:Nat.Variable]],'_`[_`][ ''metaNarrowingSearch.Sort,'_`,_[''M:Module.Variable,''T:Term.Variable, ''T2:Term.Variable,''S:Qid.Variable,''B:Bound.Variable,''F:Qid.Variable, ''none.VariantOptionSet.Constant,''N:Nat.Variable]],'none.AttrSet], 'eq_=_`[_`].['_`[_`][''metaNarrowingSearchPath.Sort,'_`,_[ ''M:Module.Variable,''T:Term.Variable,''T2:Term.Variable,''S:Qid.Variable, ''B:Bound.Variable,''F:Qid.Variable,''N:Nat.Variable]],'_`[_`][ ''metaNarrowingSearchPath.Sort,'_`,_[''M:Module.Variable,''T:Term.Variable, ''T2:Term.Variable,''S:Qid.Variable,''B:Bound.Variable,''F:Qid.Variable, ''none.VariantOptionSet.Constant,''N:Nat.Variable]],'none.AttrSet], 'eq_=_`[_`].['_`[_`][''metaParse.Sort,'_`,_[''M:Module.Variable, ''Q:QidList.Variable,''T:Type?.Variable]],'_`[_`][''metaParse.Sort,'_`,_[ ''M:Module.Variable,''none.EmptyQidSet.Constant,''Q:QidList.Variable, ''T:Type?.Variable]],'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''metaPrettyPrint.Sort,'_`,_[''M:Module.Variable,''T:Term.Variable]], '_`[_`][''metaPrettyPrint.Sort,'_`,_[''M:Module.Variable, ''none.EmptyQidSet.Constant,''T:Term.Variable,'_`[_`][''__.Sort,'_`,_[ ''mixfix.PrintOption.Constant,'_`[_`][''__.Sort,'_`,_[ ''flat.PrintOption.Constant,'_`[_`][''__.Sort,'_`,_[ ''format.PrintOption.Constant,'_`[_`][''__.Sort,'_`,_[ ''number.PrintOption.Constant,''rat.PrintOption.Constant]]]]]]]]]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''metaPrettyPrint.Sort,'_`,_[ ''M:Module.Variable,''T:Term.Variable,''P:PrintOptionSet.Variable]], '_`[_`][''metaPrettyPrint.Sort,'_`,_[''M:Module.Variable, ''none.EmptyQidSet.Constant,''T:Term.Variable, ''P:PrintOptionSet.Variable]],'none.AttrSet],'eq_=_`[_`].['_`[_`][ ''metaVariantDisjointUnify.Sort,'_`,_[''M:Module.Variable, ''U:UnificationProblem.Variable,''TL:TermList.Variable,''Q:Qid.Variable, ''N:Nat.Variable]],'_`[_`][''metaVariantDisjointUnify.Sort,'_`,_[ ''M:Module.Variable,''U:UnificationProblem.Variable,''TL:TermList.Variable, ''Q:Qid.Variable,''none.VariantOptionSet.Constant,''N:Nat.Variable]], 'none.AttrSet],'eq_=_`[_`].['_`[_`][''metaVariantUnify.Sort,'_`,_[ ''M:Module.Variable,''U:UnificationProblem.Variable,''TL:TermList.Variable, ''Q:Qid.Variable,''N:Nat.Variable]],'_`[_`][''metaVariantUnify.Sort,'_`,_[ ''M:Module.Variable,''U:UnificationProblem.Variable,''TL:TermList.Variable, ''Q:Qid.Variable,''none.VariantOptionSet.Constant,''N:Nat.Variable]], 'none.AttrSet]]], 'FModule) Bye. maude-3.1/tests/Meta/metaIntPrint.maude0000644000175200017520000000304613561433725015074 00000000000000set show timing off . set show advisories off . *** *** Test pretty printing in the meta-interpreter. *** load metaInterpreter mod PRINT-TEST is pr META-INTERPRETER . pr RAT . op me : -> Oid . op User : -> Cid . op term:_ : Term -> Attribute . op flags:_ : PrintOptionSet -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . var T : Term . var F : PrintOptionSet . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('RAT, true)) . rl < X : User | AS, term: T, flags: F > insertedModule(X, Y) => < X : User | AS > printTerm(Y, X, 'RAT, 'X:Rat, T, F) . endm erew in PRINT-TEST : <> < me : User | term: upTerm(1/2), flags: mixfix > createInterpreter(interpreterManager, me, none) . erew in PRINT-TEST : <> < me : User | term: upTerm(1/2), flags: number > createInterpreter(interpreterManager, me, none) . erew in PRINT-TEST : <> < me : User | term: upTerm(1/2), flags: rat > createInterpreter(interpreterManager, me, none) . erew in PRINT-TEST : <> < me : User | term: upTerm(1/2 + X:Rat), flags: rat > createInterpreter(interpreterManager, me, none) . erew in PRINT-TEST : <> < me : User | term: upTerm(1/2 + X:Rat), flags: (rat mixfix) > createInterpreter(interpreterManager, me, none) . erew in PRINT-TEST : <> < me : User | term: upTerm(1/2 + X:Rat), flags: (number mixfix) > createInterpreter(interpreterManager, me, none) . erew in PRINT-TEST : <> < me : User | term: upTerm(1/2 + X:Rat), flags: mixfix > createInterpreter(interpreterManager, me, none) . maude-3.1/tests/Meta/metaVariantUnify20000755000175200017520000000040013723626174014730 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaVariantUnify2.maude -no-banner -no-advise \ > metaVariantUnify2.out 2>&1 diff $srcdir/metaVariantUnify2.expected metaVariantUnify2.out > /dev/null 2>&1 maude-3.1/tests/Meta/legacyMetaVariantUnify0000755000175200017520000000042413553442720015773 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/legacyMetaVariantUnify.maude -no-banner -no-advise \ > legacyMetaVariantUnify.out 2>&1 diff $srcdir/legacyMetaVariantUnify.expected legacyMetaVariantUnify.out > /dev/null 2>&1 maude-3.1/tests/Meta/checkUnifiers0000755000175200017520000000036013670514560014143 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/checkUnifiers.maude -no-banner -no-advise \ > checkUnifiers.out 2>&1 diff $srcdir/checkUnifiers.expected checkUnifiers.out > /dev/null 2>&1 maude-3.1/tests/Meta/russianDollsFlat.maude0000644000175200017520000000255313333163317015743 00000000000000set show timing off . set show advisories off . *** *** Run nested meta-interpreters with flat meta-modules. *** load metaInterpreter mod RUSSIAN-DOLLS is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op level:_ : Nat -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . op problem : Nat -> Term . eq problem(s N) = '__['<>.Portal,'createInterpreter['interpreterManager.Oid,'me.Oid,'none.InterpreterOptionSet], '<_:_|_>['me.Oid, 'User.Cid, 'level:_[upTerm(N)]]] . eq problem(0) = '_+_['s_^2['0.Zero], 's_^2['0.Zero]] . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('RUSSIAN-DOLLS, true)) . rl < X : User | level: N, AS > insertedModule(X, Y) => < X : User | AS > erewriteTerm(Y, X, unbounded, 1, 'RUSSIAN-DOLLS, problem(N)) . endm erew in RUSSIAN-DOLLS : <> < me : User | level: 0 > createInterpreter(interpreterManager, me, none) . erew in RUSSIAN-DOLLS : <> < me : User | level: 1 > createInterpreter(interpreterManager, me, none) . erew in RUSSIAN-DOLLS : <> < me : User | level: 2 > createInterpreter(interpreterManager, me, none) . erew in RUSSIAN-DOLLS : <> < me : User | level: 3 > createInterpreter(interpreterManager, me, none) . erew in RUSSIAN-DOLLS : <> < me : User | level: 4 > createInterpreter(interpreterManager, me, none) . maude-3.1/tests/Meta/metaVariantMatch.expected0000644000175200017520000000534213726261316016413 00000000000000========================================== reduce in META-TEST : metaVariantMatch(['XOR], upTerm(cst1 + X:XOR) <=? upTerm( cst2 + Y:XOR), empty, '#, none, 0) . rewrites: 7 result Assignment: 'X:XOR <- '_+_['cst1.Elem,'cst2.Elem,'Y:XOR] ========================================== reduce in META-TEST : metaVariantMatch(['XOR], upTerm(cst1 + X:XOR) <=? upTerm( cst2 + Y:XOR), empty, '#, none, 1) . rewrites: 4 result Substitution?: (noMatch).Substitution? ========================================== reduce in META-TEST : metaVariantMatch(['XOR], upTerm(X:XOR + Y:XOR) <=? upTerm(cst1 + cst2), empty, '#, none, 0) . rewrites: 14 result Substitution: 'X:XOR <- 'cst1.Elem ; 'Y:XOR <- 'cst2.Elem ========================================== reduce in META-TEST : metaVariantMatch(['XOR], upTerm(X:XOR + Y:XOR) <=? upTerm(cst1 + cst2), empty, '#, none, 1) . rewrites: 4 result Substitution: 'X:XOR <- 'cst2.Elem ; 'Y:XOR <- 'cst1.Elem ========================================== reduce in META-TEST : metaVariantMatch(['XOR], upTerm(X:XOR + Y:XOR) <=? upTerm(cst1 + cst2), empty, '#, none, 2) . rewrites: 4 result Substitution: 'X:XOR <- '0.XOR ; 'Y:XOR <- '_+_['cst1.Elem,'cst2.Elem] ========================================== reduce in META-TEST : metaVariantMatch(['XOR], upTerm(X:XOR + Y:XOR) <=? upTerm(cst1 + cst2), empty, '#, none, 3) . rewrites: 4 result Substitution: 'X:XOR <- '_+_['cst1.Elem,'cst2.Elem] ; 'Y:XOR <- '0.XOR ========================================== reduce in META-TEST : metaVariantMatch(['XOR], upTerm(X:XOR + Y:XOR) <=? upTerm(cst1 + cst2), empty, '#, none, 4) . rewrites: 4 result Substitution: 'X:XOR <- '_+_['cst1.Elem,'#1:XOR] ; 'Y:XOR <- '_+_['cst2.Elem,'#1:XOR] ========================================== reduce in META-TEST : metaVariantMatch(['XOR], upTerm(X:XOR + Y:XOR) <=? upTerm(cst1 + cst2), empty, '#, none, 5) . rewrites: 4 result Substitution: 'X:XOR <- '_+_['cst2.Elem,'#1:XOR] ; 'Y:XOR <- '_+_['cst1.Elem,'#1:XOR] ========================================== reduce in META-TEST : metaVariantMatch(['XOR], upTerm(X:XOR + Y:XOR) <=? upTerm(cst1 + cst2), empty, '#, none, 6) . rewrites: 4 result Substitution: 'X:XOR <- '_+_['cst1.Elem,'cst2.Elem,'#1:XOR] ; 'Y:XOR <- '#1:XOR ========================================== reduce in META-TEST : metaVariantMatch(['XOR], upTerm(X:XOR + Y:XOR) <=? upTerm(cst1 + cst2), empty, '#, none, 7) . rewrites: 4 result Substitution: 'X:XOR <- '#1:XOR ; 'Y:XOR <- '_+_['cst1.Elem,'cst2.Elem,'#1:XOR] ========================================== reduce in META-TEST : metaVariantMatch(['XOR], upTerm(X:XOR + Y:XOR) <=? upTerm(cst1 + cst2), empty, '#, none, 8) . rewrites: 4 result Substitution?: (noMatch).Substitution? Bye. maude-3.1/tests/Meta/metaXmatch.expected0000644000175200017520000003732013703744040015252 00000000000000========================================== reduce in META-LEVEL : metaXmatch(['SEARCH-TEST], 'X:Nat, '_*_['a.Nat,'_+_[ 'b.Nat,'c.Nat]], '_+_['Y:Nat,'Z:Nat] := 'X:Nat, 1, 2, 0) . rewrites: 2 result MatchPair: { 'X:Nat <- '_+_['b.Nat,'c.Nat] ; 'Y:Nat <- 'c.Nat ; 'Z:Nat <- 'b.Nat,'_*_['a.Nat,[]]} ========================================== reduce in META-LEVEL : metaXmatch(['SEARCH-TEST], 'X:Nat, '_*_['a.Nat,'_+_[ 'b.Nat,'c.Nat]], '_+_['Y:Nat,'Z:Nat] := 'X:Nat, 1, 2, 1) . rewrites: 2 result MatchPair: { 'X:Nat <- '_+_['b.Nat,'c.Nat] ; 'Y:Nat <- 'b.Nat ; 'Z:Nat <- 'c.Nat,'_*_['a.Nat,[]]} ========================================== reduce in META-LEVEL : metaXmatch(['SEARCH-TEST], 'X:Nat, '_*_['a.Nat,'_+_[ 'b.Nat,'c.Nat]], '_+_['Y:Nat,'Z:Nat] := 'X:Nat, 1, 2, 2) . rewrites: 2 result MatchPair?: (noMatch).MatchPair? ========================================== reduce in META-LEVEL : metaXmatch(['SEARCH-TEST], 'X:Nat, '_*_['a.Nat,'_+_[ 'b.Nat,'c.Nat]], '_+_['Y:Nat,'Z:Nat] := 'X:Nat, 1, unbounded, 0) . rewrites: 2 result MatchPair: { 'X:Nat <- '_+_['b.Nat,'c.Nat] ; 'Y:Nat <- 'c.Nat ; 'Z:Nat <- 'b.Nat,'_*_['a.Nat,[]]} ========================================== reduce in META-LEVEL : metaXmatch(['SEARCH-TEST], 'X:Nat, '_*_['a.Nat,'_+_[ 'b.Nat,'c.Nat]], '_+_['Y:Nat,'Z:Nat] := 'X:Nat, 1, unbounded, 1) . rewrites: 2 result MatchPair: { 'X:Nat <- '_+_['b.Nat,'c.Nat] ; 'Y:Nat <- 'b.Nat ; 'Z:Nat <- 'c.Nat,'_*_['a.Nat,[]]} ========================================== reduce in META-LEVEL : metaXmatch(['SEARCH-TEST], 'X:Nat, '_*_['a.Nat,'_+_[ 'b.Nat,'c.Nat]], '_+_['Y:Nat,'Z:Nat] := 'X:Nat, 1, unbounded, 2) . rewrites: 2 result MatchPair?: (noMatch).MatchPair? ========================================== reduce in META-LEVEL : metaXmatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (((op 'f : 'Foo 'Foo -> 'Foo [comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'c : nil -> 'Foo [none] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none endfm, 'g['f['X:Foo,'Y:Foo],'Z:Foo], 'g['f['a.Foo,'b.Foo],'f['c.Foo,'c.Foo]], nil, 0, 100, 0) . rewrites: 1 result MatchPair: { 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'b.Foo ; 'Z:Foo <- 'f['c.Foo,'c.Foo],[]} ========================================== reduce in META-LEVEL : metaXmatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (((op 'f : 'Foo 'Foo -> 'Foo [comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'c : nil -> 'Foo [none] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none endfm, 'g['f['X:Foo,'Y:Foo],'Z:Foo], 'g['f['a.Foo,'b.Foo],'f['c.Foo,'c.Foo]], nil, 0, unbounded, 0) . rewrites: 1 result MatchPair: { 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'b.Foo ; 'Z:Foo <- 'f['c.Foo,'c.Foo],[]} ========================================== reduce in META-LEVEL : metaXmatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (((op 'f : 'Foo 'Foo -> 'Foo [comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'c : nil -> 'Foo [none] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none endfm, 'g['f['X:Foo,'Y:Foo],'Z:Foo], 'g['f['a.Foo,'b.Foo],'f['c.Foo,'c.Foo]], nil, 0, unbounded, 1) . rewrites: 1 result MatchPair: { 'X:Foo <- 'b.Foo ; 'Y:Foo <- 'a.Foo ; 'Z:Foo <- 'f['c.Foo,'c.Foo],[]} ========================================== reduce in META-LEVEL : metaXmatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (((op 'f : 'Foo 'Foo -> 'Foo [comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'c : nil -> 'Foo [none] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none endfm, 'g['f['X:Foo,'Y:Foo],'Z:Foo], 'g['f['a.Foo,'b.Foo],'f['c.Foo,'c.Foo]], nil, 0, unbounded, 2) . rewrites: 1 result MatchPair: { 'X:Foo <- 'c.Foo ; 'Y:Foo <- 'c.Foo ; 'Z:Foo <- 'f['a.Foo,'b.Foo],[]} ========================================== reduce in META-LEVEL : metaXmatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (((op 'f : 'Foo 'Foo -> 'Foo [comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'c : nil -> 'Foo [none] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none endfm, 'g['f['X:Foo,'Y:Foo],'Z:Foo], 'g['f['a.Foo,'b.Foo],'f['c.Foo,'c.Foo]], nil, 0, unbounded, 3) . rewrites: 1 result MatchPair?: (noMatch).MatchPair? ========================================== reduce in META-LEVEL : metaXmatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (((op 'f : 'Foo 'Foo -> 'Foo [comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'c : nil -> 'Foo [none] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none endfm, 'f['X:Foo,'Y:Foo], 'g['f['a.Foo,'b.Foo],'f['c.Foo,'c.Foo]], nil, 0, 100, 0) . rewrites: 1 result MatchPair: { 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'b.Foo,'g['f['c.Foo,'c.Foo],[]]} ========================================== reduce in META-LEVEL : metaXmatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (((op 'f : 'Foo 'Foo -> 'Foo [comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'c : nil -> 'Foo [none] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none endfm, 'f['X:Foo,'Y:Foo], 'g['f['a.Foo,'b.Foo],'f['c.Foo,'c.Foo]], nil, 0, 100, 1) . rewrites: 1 result MatchPair: { 'X:Foo <- 'b.Foo ; 'Y:Foo <- 'a.Foo,'g['f['c.Foo,'c.Foo],[]]} ========================================== reduce in META-LEVEL : metaXmatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (((op 'f : 'Foo 'Foo -> 'Foo [comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'c : nil -> 'Foo [none] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none endfm, 'f['X:Foo,'Y:Foo], 'g['f['a.Foo,'b.Foo],'f['c.Foo,'c.Foo]], nil, 0, 100, 2) . rewrites: 1 result MatchPair: { 'X:Foo <- 'c.Foo ; 'Y:Foo <- 'c.Foo,'g['f['a.Foo,'b.Foo],[]]} ========================================== reduce in META-LEVEL : metaXmatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (((op 'f : 'Foo 'Foo -> 'Foo [comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'c : nil -> 'Foo [none] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none endfm, 'f['X:Foo,'Y:Foo], 'g['f['a.Foo,'b.Foo],'f['c.Foo,'c.Foo]], nil, 0, 100, 3) . rewrites: 1 result MatchPair?: (noMatch).MatchPair? ========================================== reduce in META-LEVEL : metaXmatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . ((op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none endfm, 'f['X:Foo,'Y:Foo], 'f['a.Foo,'b.Foo,'c.Foo,'c.Foo], nil, 0, 100, 0) . rewrites: 1 result MatchPair: { 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'f['b.Foo,'c.Foo,'c.Foo],[]} ========================================== reduce in META-LEVEL : metaXmatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . ((op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none endfm, 'f['X:Foo,'Y:Foo], 'f['a.Foo,'b.Foo,'c.Foo,'c.Foo], nil, 0, 100, 1) . rewrites: 1 result MatchPair: { 'X:Foo <- 'b.Foo ; 'Y:Foo <- 'f['a.Foo,'c.Foo,'c.Foo],[]} ========================================== reduce in META-LEVEL : metaXmatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . ((op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none endfm, 'f['X:Foo,'Y:Foo], 'f['a.Foo,'b.Foo,'c.Foo,'c.Foo], nil, 0, 100, 2) . rewrites: 1 result MatchPair: { 'X:Foo <- 'c.Foo ; 'Y:Foo <- 'f['a.Foo,'b.Foo,'c.Foo],[]} ========================================== reduce in META-LEVEL : metaXmatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . ((op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none endfm, 'f['X:Foo,'Y:Foo], 'f['a.Foo,'b.Foo,'c.Foo,'c.Foo], nil, 0, 100, 3) . rewrites: 1 result MatchPair: { 'X:Foo <- 'f['a.Foo,'b.Foo] ; 'Y:Foo <- 'f['c.Foo,'c.Foo],[]} ========================================== reduce in META-LEVEL : metaXmatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . ((op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none endfm, 'f['X:Foo,'Y:Foo], 'f['a.Foo,'b.Foo,'c.Foo,'c.Foo], nil, 0, 100, 4) . rewrites: 1 result MatchPair: { 'X:Foo <- 'f['a.Foo,'c.Foo] ; 'Y:Foo <- 'f['b.Foo,'c.Foo],[]} ========================================== reduce in META-LEVEL : metaXmatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . ((op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none endfm, 'f['X:Foo,'Y:Foo], 'f['a.Foo,'b.Foo,'c.Foo,'c.Foo], nil, 0, 100, 5) . rewrites: 1 result MatchPair: { 'X:Foo <- 'f['b.Foo,'c.Foo] ; 'Y:Foo <- 'f['a.Foo,'c.Foo],[]} ========================================== reduce in META-LEVEL : metaXmatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . ((op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none endfm, 'f['X:Foo,'Y:Foo], 'f['a.Foo,'b.Foo,'c.Foo,'c.Foo], nil, 0, 100, 4) . rewrites: 1 result MatchPair: { 'X:Foo <- 'f['a.Foo,'c.Foo] ; 'Y:Foo <- 'f['b.Foo,'c.Foo],[]} ========================================== reduce in META-LEVEL : metaXmatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . ((op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none endfm, 'f['X:Foo,'Y:Foo], 'f['a.Foo,'b.Foo,'c.Foo,'c.Foo], nil, 0, 100, 6) . rewrites: 1 result MatchPair: { 'X:Foo <- 'f['c.Foo,'c.Foo] ; 'Y:Foo <- 'f['a.Foo,'b.Foo],[]} ========================================== reduce in META-LEVEL : metaXmatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . ((op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none endfm, 'f['X:Foo,'Y:Foo], 'f['a.Foo,'b.Foo,'c.Foo,'c.Foo], nil, 0, 100, 7) . rewrites: 1 result MatchPair: { 'X:Foo <- 'f['a.Foo,'b.Foo,'c.Foo] ; 'Y:Foo <- 'c.Foo,[]} ========================================== reduce in META-LEVEL : metaXmatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . ((op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none endfm, 'f['X:Foo,'Y:Foo], 'f['a.Foo,'b.Foo,'c.Foo,'c.Foo], nil, 0, 100, 10) . rewrites: 1 result MatchPair: { 'X:Foo <- 'b.Foo ; 'Y:Foo <- 'f['c.Foo,'c.Foo],'f['a.Foo,[]]} ========================================== reduce in META-LEVEL : metaXmatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . ((op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none endfm, 'f['X:Foo,'Y:Foo], 'f['a.Foo,'b.Foo,'c.Foo,'c.Foo], nil, 0, 100, 14) . rewrites: 1 result MatchPair: { 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'f['c.Foo,'c.Foo],'f['b.Foo,[]]} ========================================== reduce in META-LEVEL : metaXmatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . ((op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none endfm, 'f['X:Foo,'Y:Foo], 'f['a.Foo,'b.Foo,'c.Foo,'c.Foo], nil, 0, 100, 17) . rewrites: 1 result MatchPair: { 'X:Foo <- 'f['c.Foo,'c.Foo] ; 'Y:Foo <- 'a.Foo,'f['b.Foo,[]]} ========================================== reduce in META-LEVEL : metaXmatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . ((op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none endfm, 'f['X:Foo,'Y:Foo], 'f['a.Foo,'b.Foo,'c.Foo,'c.Foo], nil, 0, 100, 20) . rewrites: 1 result MatchPair: { 'X:Foo <- 'c.Foo ; 'Y:Foo <- 'f['a.Foo,'b.Foo],'f['c.Foo,[]]} ========================================== reduce in META-LEVEL : metaXmatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . ((op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none endfm, 'f['X:Foo,'Y:Foo], 'f['a.Foo,'b.Foo,'c.Foo,'c.Foo], nil, 0, 100, 31) . rewrites: 1 result MatchPair?: (noMatch).MatchPair? ========================================== reduce in META-LEVEL : metaXmatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . ((op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none endfm, 'f['X:Foo,'Y:Foo], 'f['a.Foo,'b.Foo,'c.Foo,'c.Foo], nil, 0, 100, 30) . rewrites: 1 result MatchPair: { 'X:Foo <- 'b.Foo ; 'Y:Foo <- 'a.Foo,'f['f['c.Foo,'c.Foo],[]]} ========================================== xmatch in FOO : f(X:Foo, Y:Foo) <=? f(a, b, c, c) . Matcher 1 Matched portion = (whole) X:Foo --> a Y:Foo --> f(b, c, c) Matcher 2 Matched portion = (whole) X:Foo --> b Y:Foo --> f(a, c, c) Matcher 3 Matched portion = (whole) X:Foo --> c Y:Foo --> f(a, b, c) Matcher 4 Matched portion = (whole) X:Foo --> f(a, b) Y:Foo --> f(c, c) Matcher 5 Matched portion = (whole) X:Foo --> f(a, c) Y:Foo --> f(b, c) Matcher 6 Matched portion = (whole) X:Foo --> f(b, c) Y:Foo --> f(a, c) Matcher 7 Matched portion = (whole) X:Foo --> f(c, c) Y:Foo --> f(a, b) Matcher 8 Matched portion = (whole) X:Foo --> f(a, b, c) Y:Foo --> c Matcher 9 Matched portion = (whole) X:Foo --> f(a, c, c) Y:Foo --> b Matcher 10 Matched portion = (whole) X:Foo --> f(b, c, c) Y:Foo --> a Matcher 11 Matched portion = f(b, c, c) X:Foo --> b Y:Foo --> f(c, c) Matcher 12 Matched portion = f(b, c, c) X:Foo --> c Y:Foo --> f(b, c) Matcher 13 Matched portion = f(b, c, c) X:Foo --> f(b, c) Y:Foo --> c Matcher 14 Matched portion = f(b, c, c) X:Foo --> f(c, c) Y:Foo --> b Matcher 15 Matched portion = f(a, c, c) X:Foo --> a Y:Foo --> f(c, c) Matcher 16 Matched portion = f(a, c, c) X:Foo --> c Y:Foo --> f(a, c) Matcher 17 Matched portion = f(a, c, c) X:Foo --> f(a, c) Y:Foo --> c Matcher 18 Matched portion = f(a, c, c) X:Foo --> f(c, c) Y:Foo --> a Matcher 19 Matched portion = f(a, b, c) X:Foo --> a Y:Foo --> f(b, c) Matcher 20 Matched portion = f(a, b, c) X:Foo --> b Y:Foo --> f(a, c) Matcher 21 Matched portion = f(a, b, c) X:Foo --> c Y:Foo --> f(a, b) Matcher 22 Matched portion = f(a, b, c) X:Foo --> f(a, b) Y:Foo --> c Matcher 23 Matched portion = f(a, b, c) X:Foo --> f(a, c) Y:Foo --> b Matcher 24 Matched portion = f(a, b, c) X:Foo --> f(b, c) Y:Foo --> a Matcher 25 Matched portion = f(c, c) X:Foo --> c Y:Foo --> c Matcher 26 Matched portion = f(b, c) X:Foo --> b Y:Foo --> c Matcher 27 Matched portion = f(b, c) X:Foo --> c Y:Foo --> b Matcher 28 Matched portion = f(a, c) X:Foo --> a Y:Foo --> c Matcher 29 Matched portion = f(a, c) X:Foo --> c Y:Foo --> a Matcher 30 Matched portion = f(a, b) X:Foo --> a Y:Foo --> b Matcher 31 Matched portion = f(a, b) X:Foo --> b Y:Foo --> a Bye. maude-3.1/tests/Meta/metaMetadata.maude0000644000175200017520000000225610155720000015024 00000000000000set show timing off . set show advisories off . set protect BOOL off . fmod FOO is sort Foo . ops a b : -> Foo [metadata "bla bla"] . eq a = b [metadata "hmm"] . endfm show mod . show all . red in META-LEVEL : upModule('FOO, false) . fmod FOO2 is sort Foo . ops a b : -> Foo [metadata bla] . eq a = b [metadata hmm] . endfm show mod . show all . red in META-LEVEL : upModule('FOO, false) . fmod FOO3 is inc FOO . endfm show all . red in META-LEVEL : upModule('FOO3, true) . fmod FOO4 is sort Foo . op f : ??? -> Foo [poly (1) metadata "bla bla"] . endfm show mod . show all . red in META-LEVEL : upModule('FOO4, false) . fmod FOO5 is inc FOO4 . endfm show all . red in META-LEVEL : upModule('FOO5, true) . red in META-LEVEL : metaReduce( fmod 'FOO is protecting 'BOOL . sorts 'Foo . none op 'a : nil -> 'Foo [metadata("bla bla")] . op 'b : nil -> 'Foo [metadata("bla bla")] . none eq 'a.Foo = 'b.Foo [metadata("hmm")] . endfm, 'a.Foo) . fmod BAR is sorts Foo Bar . subsort Foo < Bar . op f : Foo -> Foo [metadata "fooy"] . op f : Bar -> Bar [metadata "fubar"] . endfm show mod . show all . red in META-LEVEL : upModule('BAR, false) . maude-3.1/tests/Meta/metaRewrite.expected0000644000175200017520000000553013140741642015445 00000000000000========================================== reduce in META-LEVEL : metaRewrite(mod 'FOO is nil sorts 'Foo . none op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . none none rl 'a.Foo => 'b.Foo [none] . rl 'b.Foo => 'a.Foo [none] . endm, 'a.Foo, 1) . rewrites: 2 result ResultPair: {'b.Foo,'Foo} ========================================== reduce in META-LEVEL : metaRewrite(mod 'FOO is nil sorts 'Foo . none op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . none none rl 'a.Foo => 'b.Foo [none] . rl 'b.Foo => 'a.Foo [none] . endm, 'a.Foo, 2) . rewrites: 3 result ResultPair: {'a.Foo,'Foo} ========================================== reduce in META-LEVEL : metaRewrite(mod 'FOO is nil sorts 'Foo . none op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . none none rl 'a.Foo => 'b.Foo [none] . rl 'b.Foo => 'a.Foo [none] . endm, 'a.Foo, 3) . rewrites: 4 result ResultPair: {'b.Foo,'Foo} ========================================== reduce in META-LEVEL : metaRewrite(mod 'FOO is nil sorts 'Foo . none (op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none rl 'a.Foo => 'b.Foo [none] . rl 'b.Foo => 'c.Foo [none] . endm, 'a.Foo, unbounded) . rewrites: 3 result ResultPair: {'c.Foo,'Foo} ========================================== reduce in META-LEVEL : metaRewrite(mod 'FOO is nil sorts 'Foo . none (op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none rl 'a.Foo => 'b.Foo [none] . rl 'b.Foo => 'c.Foo [none] . endm, 'a.Foo, 1000000000000000000000000000000000000000000000000000) . rewrites: 3 result ResultPair: {'c.Foo,'Foo} ========================================== reduce in META-LEVEL : metaRewrite(mod 'FOO is nil sorts 'Foo . none (op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none rl 'a.Foo => 'b.Foo [none] . rl 'b.Foo => 'c.Foo [none] . endm, 'a.Foo, JUNK:Nat) . rewrites: 0 result [ResultPair?]: metaRewrite(mod 'FOO is nil sorts 'Foo . none op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . none none rl 'a.Foo => 'b.Foo [none] . rl 'b.Foo => 'c.Foo [none] . endm, 'a.Foo, JUNK:Nat) ========================================== reduce in META-LEVEL : metaRewrite(mod 'FOO is nil sorts 'Foo . none (op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none rl 'a.Foo => 'b.Foo [none] . rl 'b.Foo => 'c.Foo [none] . endm, 'a.Foo, 0) . rewrites: 0 result [ResultPair?]: metaRewrite(mod 'FOO is nil sorts 'Foo . none op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . none none rl 'a.Foo => 'b.Foo [none] . rl 'b.Foo => 'c.Foo [none] . endm, 'a.Foo, 0) Bye. maude-3.1/tests/Meta/metaNarrow.maude0000644000175200017520000003435613730553123014576 00000000000000set show timing off . set show advisories off . *** *** Check handling of unification incompleteness. *** mod FOO is sort Foo . op f : Foo Foo -> Foo [assoc] . ops g h : Foo -> Foo . ops a b c d e : -> Foo . vars X Y Z W : Foo . rl g(f(X, X)) => h(X) [narrowing]. endm *** 4 unifiers + incompleteness unify f(X, X) =? f(Y, Z, Z) . *** metaNarrow() red in META-LEVEL : metaNarrow( ['FOO], 'g['f['Y:Foo, 'Z:Foo, 'Z:Foo]], 'W:Foo, '+, unbounded, 0) . red in META-LEVEL : metaNarrow( ['FOO], 'g['f['Y:Foo, 'Z:Foo, 'Z:Foo]], 'W:Foo, '+, unbounded, 1) . red in META-LEVEL : metaNarrow( ['FOO], 'g['f['Y:Foo, 'Z:Foo, 'Z:Foo]], 'W:Foo, '+, unbounded, 2) . red in META-LEVEL : metaNarrow( ['FOO], 'g['f['Y:Foo, 'Z:Foo, 'Z:Foo]], 'W:Foo, '+, unbounded, 3) . red in META-LEVEL : metaNarrow( ['FOO], 'g['f['Y:Foo, 'Z:Foo, 'Z:Foo]], 'W:Foo, '+, unbounded, 4) . *** metaNarrowingApply() red in META-LEVEL : metaNarrowingApply( ['FOO], 'g['f['Y:Foo, 'Z:Foo, 'Z:Foo]], empty, '#, 0) . red in META-LEVEL : metaNarrowingApply( ['FOO], 'g['f['Y:Foo, 'Z:Foo, 'Z:Foo]], empty, '#, 1) . red in META-LEVEL : metaNarrowingApply( ['FOO], 'g['f['Y:Foo, 'Z:Foo, 'Z:Foo]], empty, '#, 2) . red in META-LEVEL : metaNarrowingApply( ['FOO], 'g['f['Y:Foo, 'Z:Foo, 'Z:Foo]], empty, '#, 3) . red in META-LEVEL : metaNarrowingApply( ['FOO], 'g['f['Y:Foo, 'Z:Foo, 'Z:Foo]], empty, '#, 4) . *** using # variables red in META-LEVEL : metaNarrowingApply( ['FOO], 'g['f['#22:Foo, '#23:Foo, '#23:Foo]], empty, '#, 0) . red in META-LEVEL : metaNarrowingApply( ['FOO], 'g['f['#22:Foo, '#23:Foo, '#23:Foo]], empty, '#, 1) . red in META-LEVEL : metaNarrowingApply( ['FOO], 'g['f['#22:Foo, '#23:Foo, '#23:Foo]], empty, '#, 2) . red in META-LEVEL : metaNarrowingApply( ['FOO], 'g['f['#22:Foo, '#23:Foo, '#23:Foo]], empty, '#, 3) . red in META-LEVEL : metaNarrowingApply( ['FOO], 'g['f['#22:Foo, '#23:Foo, '#23:Foo]], empty, '#, 4) . *** *** Now with the incompleteness arising from a variant equation. *** mod BAR is sort Foo . op f : Foo Foo -> Foo [assoc] . ops g h i : Foo -> Foo . ops a b c d e : -> Foo . vars X Y Z W : Foo . eq g(f(X, X)) = h(X) [variant]. rl h(X) => i(X) [narrowing] . endm variant unify h(X) =? g(f(Y, Z, Z)) . red in META-LEVEL : metaNarrowingApply( ['BAR], 'g['f['Y:Foo, 'Z:Foo, 'Z:Foo]], empty, '#, 0) . red in META-LEVEL : metaNarrowingApply( ['BAR], 'g['f['Y:Foo, 'Z:Foo, 'Z:Foo]], empty, '#, 1) . red in META-LEVEL : metaNarrowingApply( ['BAR], 'g['f['Y:Foo, 'Z:Foo, 'Z:Foo]], empty, '#, 2) . red in META-LEVEL : metaNarrowingApply( ['BAR], 'g['f['Y:Foo, 'Z:Foo, 'Z:Foo]], empty, '#, 3) . red in META-LEVEL : metaNarrowingApply( ['BAR], 'g['f['Y:Foo, 'Z:Foo, 'Z:Foo]], empty, '#, 4) . *** *** Check irreducibility constraint and returned context. *** mod XOR is sorts Elt Expr . subsort Elt < Expr . ops a b c d e : -> Elt . op _+_ : Expr Expr -> Expr [assoc comm] . op 0 : -> Elt . vars W X Y Z : Expr . eq Y + 0 = Y [variant] . eq X + X = 0 [variant] . eq X + X + Y = Y [variant] . endm mod XOR-TEST is inc XOR . ops g h : Expr -> Expr . op f : Expr Expr -> Expr . vars W X Y Z : Expr . rl g(Y + a) => h(Y) [narrowing] . endm red in META-LEVEL : metaNarrowingApply( ['XOR-TEST], 'f['g['_+_['W:Expr, 'b.Elt]], 'Z:Expr], '_+_['W:Expr, 'b.Elt], '#, 0) . red in META-LEVEL : metaNarrowingApply( ['XOR-TEST], 'f['g['_+_['W:Expr, 'b.Elt]], 'Z:Expr], '_+_['W:Expr, 'b.Elt], '#, 1) . red in META-LEVEL : metaNarrowingApply( ['XOR-TEST], 'f['g['_+_['W:Expr, 'b.Elt]], 'Z:Expr], '_+_['W:Expr, 'b.Elt], '#, 2) . red in META-LEVEL : metaNarrowingApply( ['XOR-TEST], 'f['g['_+_['W:Expr, 'b.Elt]], 'Z:Expr], '_+_['W:Expr, 'b.Elt], '#, 3) . *** *** Check delay and filter options. *** red in META-LEVEL : metaNarrowingApply( ['XOR-TEST], 'f['g['_+_['W:Expr, 'b.Elt]], 'Z:Expr], '_+_['W:Expr, 'b.Elt], '#, delay filter, 0) . red in META-LEVEL : metaNarrowingApply( ['XOR-TEST], 'f['g['_+_['W:Expr, 'b.Elt]], 'Z:Expr], '_+_['W:Expr, 'b.Elt], '#, delay filter, 1) . *** *** Now with unbound variable in irreducibility constraint; 'X:Expr should not be *** mentioned in any substitution. *** red in META-LEVEL : metaNarrowingApply( ['XOR-TEST], 'f['g['_+_['W:Expr, 'b.Elt]], 'Z:Expr], '_+_['X:Expr, 'b.Elt], '#, 0) . red in META-LEVEL : metaNarrowingApply( ['XOR-TEST], 'f['g['_+_['W:Expr, 'b.Elt]], 'Z:Expr], '_+_['X:Expr, 'b.Elt], '#, 11) . red in META-LEVEL : metaNarrowingApply( ['XOR-TEST], 'f['g['_+_['W:Expr, 'b.Elt]], 'Z:Expr], '_+_['X:Expr, 'b.Elt], '#, 12) . *** *** Without renaming. *** red in META-LEVEL : metaNarrowingApply( ['XOR-TEST], 'f['g['_+_['#1:Expr, 'b.Elt]], '#2:Expr], '_+_['#3:Expr, 'b.Elt], '#, 0) . red in META-LEVEL : metaNarrowingApply( ['XOR-TEST], 'f['g['_+_['#1:Expr, 'b.Elt]], '#2:Expr], '_+_['#3:Expr, 'b.Elt], '#, 11) . red in META-LEVEL : metaNarrowingApply( ['XOR-TEST], 'f['g['_+_['#1:Expr, 'b.Elt]], '#2:Expr], '_+_['#3:Expr, 'b.Elt], '#, 12) . *** metaNarrowingSearch() / metaNarrowingSearchPath() mod FOO is sort Foo . ops f g h : Foo -> Foo . ops i j k : Foo Foo -> Foo . vars X Y Z W A B C D : Foo . eq j(f(X), Y) = i(f(Y), X) [variant] . rl g(i(X, k(Y, Z))) => f(k(Z, X)) [narrowing] . endm reduce in META-LEVEL : metaNarrowingSearch(['FOO], 'g['j['A:Foo, 'B:Foo]], 'C:Foo, '*, unbounded, 'none, 0) . reduce in META-LEVEL : metaNarrowingSearch(['FOO], 'g['j['A:Foo, 'B:Foo]], 'C:Foo, '*, unbounded, 'none, 1) . reduce in META-LEVEL : metaNarrowingSearch(['FOO], 'g['j['A:Foo, 'B:Foo]], 'C:Foo, '*, unbounded, 'none, 2) . reduce in META-LEVEL : metaNarrowingSearch(['FOO], 'g['j['A:Foo, 'B:Foo]], 'C:Foo, '*, unbounded, 'none, 3) . reduce in META-LEVEL : metaNarrowingSearch(['FOO], 'g['j['A:Foo, 'B:Foo]], 'C:Foo, '*, unbounded, 'match, 0) . reduce in META-LEVEL : metaNarrowingSearch(['FOO], 'g['j['A:Foo, 'B:Foo]], 'C:Foo, '*, unbounded, 'match, 1) . reduce in META-LEVEL : metaNarrowingSearch(['FOO], 'g['j['A:Foo, 'B:Foo]], 'C:Foo, '*, unbounded, 'match, 2) . reduce in META-LEVEL : metaNarrowingSearch(['FOO], 'g['j['A:Foo, 'B:Foo]], 'C:Foo, '*, unbounded, 'match, 3) . --- reduce in META-LEVEL : metaNarrowingSearchPath(['FOO], 'g['j['A:Foo, 'B:Foo]], 'C:Foo, '*, unbounded, 'none, 0) . reduce in META-LEVEL : metaNarrowingSearchPath(['FOO], 'g['j['A:Foo, 'B:Foo]], 'C:Foo, '*, unbounded, 'none, 1) . reduce in META-LEVEL : metaNarrowingSearchPath(['FOO], 'g['j['A:Foo, 'B:Foo]], 'C:Foo, '*, unbounded, 'none, 2) . reduce in META-LEVEL : metaNarrowingSearchPath(['FOO], 'g['j['A:Foo, 'B:Foo]], 'C:Foo, '*, unbounded, 'none, 3) . reduce in META-LEVEL : metaNarrowingSearchPath(['FOO], 'g['j['A:Foo, 'B:Foo]], 'C:Foo, '*, unbounded, 'match, 0) . reduce in META-LEVEL : metaNarrowingSearchPath(['FOO], 'g['j['A:Foo, 'B:Foo]], 'C:Foo, '*, unbounded, 'match, 1) . reduce in META-LEVEL : metaNarrowingSearchPath(['FOO], 'g['j['A:Foo, 'B:Foo]], 'C:Foo, '*, unbounded, 'match, 2) . reduce in META-LEVEL : metaNarrowingSearchPath(['FOO], 'g['j['A:Foo, 'B:Foo]], 'C:Foo, '*, unbounded, 'match, 3) . mod BAR is sort Foo . op f : Foo Foo -> Foo [assoc] . ops g h : Foo -> Foo . ops a b c d e : -> Foo . vars X Y Z W : Foo . rl g(f(X, X)) => h(X) [narrowing]. endm reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'none, 0) . reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'none, 1) . reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'none, 2) . reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'none, 3) . reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'none, 4) . reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'none, 5) . reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'none, 0) . reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'none, 1) . reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'none, 2) . reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'none, 3) . reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'none, 4) . reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'match, 0) . reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'match, 1) . reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'match, 2) . reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'match, 3) . reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'match, 4) . reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'match, 5) . reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'match, 0) . reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'match, 1) . reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'match, 2) . reduce in META-LEVEL : metaNarrowingSearch(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'match, 3) . --- reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'none, 0) . reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'none, 1) . reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'none, 2) . reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'none, 3) . reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'none, 4) . reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'none, 5) . reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'none, 0) . reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'none, 1) . reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'none, 2) . reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'none, 3) . reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'none, 4) . reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'match, 0) . reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'match, 1) . reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'match, 2) . reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'match, 3) . reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'match, 4) . reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '*, unbounded, 'match, 5) . reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'match, 0) . reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'match, 1) . reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'match, 2) . reduce in META-LEVEL : metaNarrowingSearchPath(['BAR], 'g['f['A:Foo, 'B:Foo, 'B:Foo]], 'W:Foo, '!, unbounded, 'match, 3) . mod BAZ is sort Foo . ops f g h : Foo -> Foo . ops i j k : Foo Foo -> Foo . vars X Y Z W A B C D : Foo . eq j(f(X), Y) = i(f(Y), X) [variant] . rl g(i(X, k(Y, Z))) => f(k(Z, X)) [narrowing] . rl f(k(X, X)) => h(X) [narrowing] . endm reduce in META-LEVEL : metaNarrowingSearch(['BAZ], 'g['j['A:Foo, 'B:Foo]], 'C:Foo, '!, unbounded, 'none, 0) . reduce in META-LEVEL : metaNarrowingSearch(['BAZ], 'g['j['A:Foo, 'B:Foo]], 'C:Foo, '!, unbounded, 'none, 1) . reduce in META-LEVEL : metaNarrowingSearch(['BAZ], 'g['j['A:Foo, 'B:Foo]], 'C:Foo, '!, unbounded, 'none, 2) . reduce in META-LEVEL : metaNarrowingSearch(['BAZ], 'g['j['A:Foo, 'B:Foo]], 'C:Foo, '!, unbounded, 'match, 0) . reduce in META-LEVEL : metaNarrowingSearch(['BAZ], 'g['j['A:Foo, 'B:Foo]], 'C:Foo, '!, unbounded, 'match, 1) . --- reduce in META-LEVEL : metaNarrowingSearchPath(['BAZ], 'g['j['A:Foo, 'B:Foo]], 'C:Foo, '!, unbounded, 'none, 0) . reduce in META-LEVEL : metaNarrowingSearchPath(['BAZ], 'g['j['A:Foo, 'B:Foo]], 'C:Foo, '!, unbounded, 'none, 1) . reduce in META-LEVEL : metaNarrowingSearchPath(['BAZ], 'g['j['A:Foo, 'B:Foo]], 'C:Foo, '!, unbounded, 'none, 2) . reduce in META-LEVEL : metaNarrowingSearchPath(['BAZ], 'g['j['A:Foo, 'B:Foo]], 'C:Foo, '!, unbounded, 'match, 0) . reduce in META-LEVEL : metaNarrowingSearchPath(['BAZ], 'g['j['A:Foo, 'B:Foo]], 'C:Foo, '!, unbounded, 'match, 1) . maude-3.1/tests/Meta/metaXapply.maude0000644000175200017520000000723110025725602014570 00000000000000set show timing off . set show advisories off . *** *** Test the metaXapply() descent function. *** fmod TEST is pr META-LEVEL . op m : -> Module . eq m = (mod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] . none none rl 'f['X:Foo, 'Y:Foo] => 'X:Foo [label('k)] . rl 'a.Foo => 'c.Foo [label('k)] . endm) . endfm red metaXapply(m, 'f['a.Foo, 'b.Foo], 'k, none, 0, 100, 0) . red metaXapply(m, 'f['a.Foo, 'b.Foo], 'k, none, 0, 100, 1) . red metaXapply(m, 'f['a.Foo, 'b.Foo], 'k, none, 0, 100, 2) . red metaXapply(m, 'f['a.Foo, 'b.Foo], 'k, none, 0, 100, 3) . red metaXapply(m, 'f['a.Foo, 'b.Foo], 'k, none, 0, unbounded, 0) . red metaXapply(m, 'f['a.Foo, 'b.Foo], 'k, none, 0, unbounded, 1) . red metaXapply(m, 'f['a.Foo, 'b.Foo], 'k, none, 0, unbounded, 2) . red metaXapply(m, 'f['a.Foo, 'b.Foo], 'k, none, 0, unbounded, 3) . fmod TEST2 is pr META-LEVEL . op m : -> Module . eq m = (mod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] . none none rl 'f['X:Foo, 'Y:Foo] => 'X:Foo [label('k)] . rl 'a.Foo => 'c.Foo [label('k)] . endm) . endfm red metaXapply(m, 'g['f['a.Foo, 'b.Foo], 'a.Foo], 'k, none, 0, 100, 0) . red metaXapply(m, 'g['f['a.Foo, 'b.Foo], 'a.Foo], 'k, none, 0, 100, 1) . red metaXapply(m, 'g['f['a.Foo, 'b.Foo], 'a.Foo], 'k, none, 0, 100, 2) . red metaXapply(m, 'g['f['a.Foo, 'b.Foo], 'a.Foo], 'k, none, 0, 100, 3) . red metaXapply(m, 'g['f['a.Foo, 'b.Foo], 'a.Foo], 'k, none, 0, 100, 4) . fmod TEST3 is pr META-LEVEL . op m : -> Module . eq m = (mod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] . none none rl 'f['X:Foo, 'Y:Foo] => 'X:Foo [label('k)] . rl 'a.Foo => 'f['c.Foo, 'c.Foo] [label('l)] . endm) . endfm red metaXapply(m, 'g['f['a.Foo, 'b.Foo], 'a.Foo], 'l, none, 0, 100, 0) . red metaXapply(m, 'g['f['a.Foo, 'b.Foo], 'a.Foo], 'l, none, 0, 100, 1) . red metaXapply(m, 'g['f['a.Foo, 'b.Foo], 'a.Foo], 'l, none, 0, 100, 0) . red metaXapply(m, 'g['f['a.Foo, 'b.Foo], 'a.Foo], 'l, none, 0, 100, 2) . red metaXapply(m, 'g['f['a.Foo, 'b.Foo], 'a.Foo], 'l, none, 0, 100, 0) . fmod ALL-ONE-STEP-REWRITES is including META-LEVEL . sort TermSet . subsort Term < TermSet . op _|_ : TermSet TermSet -> TermSet [assoc comm id: mt ctor] . op mt : -> TermSet [ctor] . var T : Term . var M : Module . var L : Qid . var N : Nat . op findAllRews : Module Term Qid -> TermSet . op findAllRewsAux : Module Term Qid Nat -> TermSet . eq findAllRews(M, T, L) = findAllRewsAux(M, T, L, 0) . eq findAllRewsAux(M, T, L, N) = if metaXapply(M, T, L, none, 0, unbounded, N) :: Result4Tuple then (getTerm(metaXapply(M, T, L, none, 0, unbounded, N)) | findAllRewsAux(M, T, L, N + 1)) else mt fi . op m : -> Module . eq m = (mod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . none none rl 'f['X:Foo, 'Y:Foo] => 'X:Foo [label('k)] . rl 'a.Foo => 'c.Foo [label('k)] . endm) . endfm red findAllRews(m, 'f['a.Foo, 'b.Foo], 'k) . maude-3.1/tests/Meta/metaVariantUnify.maude0000644000175200017520000000763313553737567015766 00000000000000set show timing off . fmod XOR is sort XOR . sort Elem . ops cst1 cst2 cst3 cst4 : -> Elem . subsort Elem < XOR . op _+_ : XOR XOR -> XOR [ctor assoc comm] . op 0 : -> XOR . vars X Y : XOR . eq Y + 0 = Y [variant] . eq X + X = 0 [variant] . eq X + X + Y = Y [variant] . endfm fmod META-TEST is inc XOR . inc META-LEVEL . endfm *** regular red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), empty, '#, 0) . red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), empty, '%, 0) . red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), empty, '#, 1) . red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), empty, '#, 2) . red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), empty, '#, 3) . red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), empty, '#, 4) . red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), empty, '#, 5) . red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), empty, '#, 6) . red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), empty, '#, 7) . red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), empty, '#, 8) . *** disjoint red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), empty, '#, 0) . red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), empty, '%, 0) . red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), empty, '#, 1) . red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), empty, '#, 2) . red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), empty, '#, 3) . red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), empty, '#, 4) . red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), empty, '#, 5) . red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), empty, '#, 6) . red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), empty, '#, 7) . red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), empty, '#, 8) . *** regular with irreducibility constraint red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), upTerm(X:XOR + cst1), '#, 0) . red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), upTerm(X:XOR + cst1), '%, 0) . red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), upTerm(X:XOR + cst1), '#, 1) . red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), upTerm(X:XOR + cst1), '#, 2) . red metaVariantUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(Y:XOR + cst2), upTerm(X:XOR + cst1), '#, 3) . *** disjoint with irreducibility constraint red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), upTerm(X:XOR + cst1), '#, 0) . red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), upTerm(X:XOR + cst1), '%, 0) . red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), upTerm(X:XOR + cst1), '#, 1) . red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), upTerm(X:XOR + cst1), '#, 2) . red metaVariantDisjointUnify(['XOR], upTerm(X:XOR + cst1) =? upTerm(X:XOR + cst2), upTerm(X:XOR + cst1), '#, 3) . *** illegal variable name red metaVariantUnify(['XOR], upTerm(%1:XOR + cst1) =? upTerm(Y:XOR + cst2), empty, '#, 0) . maude-3.1/tests/Meta/metaIntVariantMatch.expected0000644000175200017520000000437513726057721017076 00000000000000========================================== erewrite in VARIANT-MATCH-TEST : <> < me : User | problem:('_+_['X:XOR, 'c1.Elem] <=? '_+_['Y:XOR,'c2.Elem],empty) > createInterpreter( interpreterManager, me, none) . rewrites: 8 result Configuration: <> < me : User | soln: 2,result(gotVariantMatcher(me, interpreter(0), 3, 'X:XOR <- '_+_['c1.Elem,'c2.Elem,'Y:XOR])),problem:('_+_['X:XOR,'c1.Elem] <=? '_+_['Y:XOR,'c2.Elem],empty) > noSuchResult(me, interpreter(0), 0, true) ========================================== variant match in XOR : X + c1 <=? Y + c2 . rewrites: 3 Matcher 1 X --> c1 + c2 + Y No more matchers. ========================================== erewrite in VARIANT-MATCH-TEST : <> < me : User | problem:('_+_['X:XOR,'Y:XOR] <=? '_+_['c1.Elem,'c2.Elem],empty) > createInterpreter(interpreterManager, me, none) . rewrites: 29 result Configuration: <> < me : User | soln: 9,result(gotVariantMatcher(me, interpreter(0), 10, 'X:XOR <- 'c1.Elem ; 'Y:XOR <- 'c2.Elem),gotVariantMatcher(me, interpreter(0), 0, 'X:XOR <- 'c2.Elem ; 'Y:XOR <- 'c1.Elem),gotVariantMatcher(me, interpreter(0), 0, 'X:XOR <- '0.XOR ; 'Y:XOR <- '_+_['c1.Elem,'c2.Elem]),gotVariantMatcher(me, interpreter(0), 0, 'X:XOR <- '_+_['c1.Elem,'c2.Elem] ; 'Y:XOR <- '0.XOR),gotVariantMatcher(me, interpreter(0), 0, 'X:XOR <- '_+_['c1.Elem,'#1:XOR] ; 'Y:XOR <- '_+_['c2.Elem,'#1:XOR]),gotVariantMatcher(me, interpreter(0), 0, 'X:XOR <- '_+_['c2.Elem,'#1:XOR] ; 'Y:XOR <- '_+_['c1.Elem,'#1:XOR]),gotVariantMatcher(me, interpreter(0), 0, 'X:XOR <- '_+_['c1.Elem,'c2.Elem,'#1:XOR] ; 'Y:XOR <- '#1:XOR),gotVariantMatcher(me, interpreter(0), 0, 'X:XOR <- '#1:XOR ; 'Y:XOR <- '_+_['c1.Elem,'c2.Elem,'#1:XOR])),problem:('_+_['X:XOR,'Y:XOR] <=? '_+_['c1.Elem,'c2.Elem],empty) > noSuchResult(me, interpreter(0), 0, true) ========================================== variant match in XOR : X + Y <=? c1 + c2 . rewrites: 10 Matcher 1 X --> c1 Y --> c2 Matcher 2 X --> c2 Y --> c1 Matcher 3 X --> 0 Y --> c1 + c2 Matcher 4 X --> c1 + c2 Y --> 0 Matcher 5 X --> c1 + #1:XOR Y --> c2 + #1:XOR Matcher 6 X --> c2 + #1:XOR Y --> c1 + #1:XOR Matcher 7 X --> c1 + c2 + #1:XOR Y --> #1:XOR Matcher 8 X --> #1:XOR Y --> c1 + c2 + #1:XOR No more matchers. Bye. maude-3.1/tests/Meta/metaIntVariantUnify.maude0000644000175200017520000000706013724264511016413 00000000000000set show timing off . *** *** Test variant unification in the meta-interpreter. *** load metaInterpreter fmod XOR is sort XOR . sort Elem . ops c1 c2 c3 c4 : -> Elem . subsort Elem < XOR . op _+_ : XOR XOR -> XOR [ctor assoc comm] . op 0 : -> XOR . op a : -> XOR . vars X Y : XOR . eq Y + 0 = Y [variant] . eq X + X = 0 [variant] . eq X + X + Y = Y [variant] . endfm mod VARIANT-UNIFY-TEST is pr META-INTERPRETER . sort MsgList . subsort Msg < MsgList . op me : -> Oid . op User : -> Cid . op problem:(_,_) : UnificationProblem TermList -> Attribute . op soln:_ : Nat -> Attribute . op result : MsgList -> Attribute . op _,_ : MsgList MsgList -> MsgList [assoc id: nil] . op nil : -> MsgList . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . var V : Term . var TL : TermList . var S : Substitution . var Q : Qid . var B : Bool . var P : Parent . var R : RewriteCount . var ML : MsgList . var UP : UnificationProblem . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('XOR, true)) . rl < X : User | AS, problem:(UP, TL) > insertedModule(X, Y) => < X : User | AS, problem:(UP, TL), soln: 1, result(nil) > getVariantUnifier(Y, X, 'XOR, UP, TL, '#, 0) . rl < X : User | AS, problem:(UP, TL), soln: N, result(ML) > gotVariantUnifier(X, Y, R, S, Q) => < X : User | AS, problem:(UP, TL), soln: (N + 1), result(ML, gotVariantUnifier(X, Y, R, S, Q)) > getVariantUnifier(Y, X, 'XOR, UP, TL, '#, N) . endm erew in VARIANT-UNIFY-TEST : <> < me : User | problem: ('_+_['X:XOR, 'c1.Elem] =? '_+_['Y:XOR, 'c2.Elem], empty) > createInterpreter(interpreterManager, me, none) . variant unify in XOR : X:XOR + c1 =? Y:XOR + c2 . erew in VARIANT-UNIFY-TEST : <> < me : User | problem: ('_+_['X:XOR, 'c1.Elem] =? '_+_['Y:XOR, 'c2.Elem], '_+_['X:XOR, 'c1.Elem]) > createInterpreter(interpreterManager, me, none) . variant unify in XOR : X:XOR + c1 =? Y:XOR + c2 such that X:XOR + c1 irreducible . mod DISJOINT-VARIANT-UNIFY-TEST is pr META-INTERPRETER . sort MsgList . subsort Msg < MsgList . op me : -> Oid . op User : -> Cid . op problem:(_,_) : UnificationProblem TermList -> Attribute . op soln:_ : Nat -> Attribute . op result : MsgList -> Attribute . op _,_ : MsgList MsgList -> MsgList [assoc id: nil] . op nil : -> MsgList . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . var V : Term . var TL : TermList . vars S S' : Substitution . var Q : Qid . var B : Bool . var P : Parent . var R : RewriteCount . var ML : MsgList . var UP : UnificationProblem . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('XOR, true)) . rl < X : User | AS, problem:(UP, TL) > insertedModule(X, Y) => < X : User | AS, problem:(UP, TL), soln: 1, result(nil) > getDisjointVariantUnifier(Y, X, 'XOR, UP, TL, '#, 0) . rl < X : User | AS, problem:(UP, TL), soln: N, result(ML) > gotDisjointVariantUnifier(X, Y, R, S, S', Q) => < X : User | AS, problem:(UP, TL), soln: (N + 1), result(ML, gotDisjointVariantUnifier(X, Y, R, S, S', Q)) > getDisjointVariantUnifier(Y, X, 'XOR, UP, TL, '#, N) . endm erew in DISJOINT-VARIANT-UNIFY-TEST : <> < me : User | problem: ('_+_['X:XOR, 'c1.Elem] =? '_+_['Y:XOR, 'c2.Elem], empty) > createInterpreter(interpreterManager, me, none) . erew in DISJOINT-VARIANT-UNIFY-TEST : <> < me : User | problem: ('_+_['X:XOR, 'c1.Elem] =? '_+_['Y:XOR, 'c2.Elem], '_+_['X:XOR, 'c1.Elem]) > createInterpreter(interpreterManager, me, none) . maude-3.1/tests/Meta/metaIntApply.expected0000644000175200017520000000761413372670313015574 00000000000000========================================== erewrite in APPLY-TEST : <> < me : User | subst: none > createInterpreter( interpreterManager, me, none) . rewrites: 9 mb applications: 0 equational rewrites: 3 rule rewrites: 6 variant narrowing steps: 0 narrowing steps: 0 result Configuration: <> < me : User | soln: 3,got: appliedRule(me, interpreter(0), 1, 'a.Foo, 'Foo, 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'b.Foo),got: appliedRule(me, interpreter(0), 1, 'b.Foo, 'Foo, 'X:Foo <- 'b.Foo ; 'Y:Foo <- 'a.Foo),subst: none > noSuchResult(me, interpreter(0), 0) ========================================== erewrite in APPLY-TEST : <> < me : User | subst: ( 'Y:Foo <- 'b.Foo) > createInterpreter(interpreterManager, me, none) . rewrites: 6 mb applications: 0 equational rewrites: 2 rule rewrites: 4 variant narrowing steps: 0 narrowing steps: 0 result Configuration: <> < me : User | soln: 2,got: appliedRule(me, interpreter(0), 1, 'a.Foo, 'Foo, 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'b.Foo),subst: ( 'Y:Foo <- 'b.Foo) > noSuchResult(me, interpreter(0), 0) ========================================== erewrite in APPLY-TEST2 : <> < me : User | subst: none > createInterpreter( interpreterManager, me, none) . rewrites: 39 mb applications: 0 equational rewrites: 13 rule rewrites: 26 variant narrowing steps: 0 narrowing steps: 0 result Configuration: <> < me : User | soln: 13,got: appliedRule(me, interpreter(0), 1, 'g['g['a.Foo]], 'Foo, 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'f['b.Foo,'c.Foo], 'g['g[[]]]),got: appliedRule(me, interpreter(0), 1, 'g['g['b.Foo]], 'Foo, 'X:Foo <- 'b.Foo ; 'Y:Foo <- 'f['a.Foo,'c.Foo], 'g['g[[]]]),got: appliedRule(me, interpreter(0), 1, 'g['g['c.Foo]], 'Foo, 'X:Foo <- 'c.Foo ; 'Y:Foo <- 'f['a.Foo,'b.Foo], 'g['g[[]]]),got: appliedRule(me, interpreter(0), 1, 'g['g['f['a.Foo,'b.Foo]]], 'Foo, 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'c.Foo, 'g['g['f['b.Foo,[]]]]),got: appliedRule(me, interpreter(0), 1, 'g['g['f['a.Foo,'b.Foo]]], 'Foo, 'X:Foo <- 'b.Foo ; 'Y:Foo <- 'c.Foo, 'g['g['f['a.Foo,[]]]]),got: appliedRule(me, interpreter(0), 1, 'g['g['f['a.Foo,'b.Foo]]], 'Foo, 'X:Foo <- 'f['a.Foo,'b.Foo] ; 'Y:Foo <- 'c.Foo, 'g['g[[]]]),got: appliedRule(me, interpreter(0), 1, 'g['g[ 'f['a.Foo,'c.Foo]]], 'Foo, 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'b.Foo, 'g['g['f['c.Foo,[]]]]),got: appliedRule(me, interpreter(0), 1, 'g['g['f['a.Foo,'c.Foo]]], 'Foo, 'X:Foo <- 'c.Foo ; 'Y:Foo <- 'b.Foo, 'g['g['f['a.Foo,[]]]]),got: appliedRule(me, interpreter(0), 1, 'g['g['f['a.Foo,'c.Foo]]], 'Foo, 'X:Foo <- 'f['a.Foo,'c.Foo] ; 'Y:Foo <- 'b.Foo, 'g['g[[]]]),got: appliedRule(me, interpreter(0), 1, 'g['g[ 'f['b.Foo,'c.Foo]]], 'Foo, 'X:Foo <- 'b.Foo ; 'Y:Foo <- 'a.Foo, 'g['g['f['c.Foo,[]]]]),got: appliedRule(me, interpreter(0), 1, 'g['g['f['b.Foo,'c.Foo]]], 'Foo, 'X:Foo <- 'c.Foo ; 'Y:Foo <- 'a.Foo, 'g['g['f['b.Foo,[]]]]),got: appliedRule(me, interpreter(0), 1, 'g['g['f['b.Foo,'c.Foo]]], 'Foo, 'X:Foo <- 'f['b.Foo,'c.Foo] ; 'Y:Foo <- 'a.Foo, 'g['g[[]]]),subst: none > noSuchResult(me, interpreter(0), 0) ========================================== erewrite in APPLY-TEST2 : <> < me : User | subst: ( 'X:Foo <- 'a.Foo) > createInterpreter(interpreterManager, me, none) . rewrites: 12 mb applications: 0 equational rewrites: 4 rule rewrites: 8 variant narrowing steps: 0 narrowing steps: 0 result Configuration: <> < me : User | soln: 4,got: appliedRule(me, interpreter(0), 1, 'g['g['a.Foo]], 'Foo, 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'f['b.Foo,'c.Foo], 'g['g[[]]]),got: appliedRule(me, interpreter(0), 1, 'g['g['f['a.Foo,'b.Foo]]], 'Foo, 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'c.Foo, 'g['g['f['b.Foo,[]]]]),got: appliedRule(me, interpreter(0), 1, 'g['g['f['a.Foo,'c.Foo]]], 'Foo, 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'b.Foo, 'g['g['f['c.Foo,[]]]]),subst: ( 'X:Foo <- 'a.Foo) > noSuchResult(me, interpreter(0), 0) Bye. maude-3.1/tests/Meta/metaSearch.expected0000644000175200017520000001545713140741642015242 00000000000000========================================== reduce in META-LEVEL : metaSearch(['SEARCH-TEST], '_*_['a.Nat,'_+_['b.Nat, 'c.Nat]], 'X:Nat, '_*_['Y:Nat,'Z:Nat] := 'X:Nat, '*, 100, 0) . rewrites: 2 result ResultTriple: {'_*_['a.Nat,'_+_['b.Nat,'c.Nat]],'Nat, 'X:Nat <- '_*_['a.Nat,'_+_['b.Nat,'c.Nat]] ; 'Y:Nat <- '_+_['b.Nat,'c.Nat] ; 'Z:Nat <- 'a.Nat} ========================================== reduce in META-LEVEL : metaSearch(['SEARCH-TEST], '_*_['a.Nat,'_+_['b.Nat, 'c.Nat]], 'X:Nat, '_*_['Y:Nat,'Z:Nat] := 'X:Nat, '*, 100, 1) . rewrites: 2 result ResultTriple: {'_*_['a.Nat,'_+_['b.Nat,'c.Nat]],'Nat, 'X:Nat <- '_*_['a.Nat,'_+_['b.Nat,'c.Nat]] ; 'Y:Nat <- 'a.Nat ; 'Z:Nat <- '_+_['b.Nat,'c.Nat]} ========================================== reduce in META-LEVEL : metaSearch(['SEARCH-TEST], '_*_['a.Nat,'_+_['b.Nat, 'c.Nat]], 'X:Nat, '_*_['Y:Nat,'Z:Nat] := 'X:Nat, '*, 100, 2) . rewrites: 6 result ResultTriple?: (failure).ResultTriple? ========================================== reduce in META-LEVEL : metaSearch(['SEARCH-TEST], '_*_['a.Nat,'_+_['b.Nat, 'c.Nat]], 'X:Nat, '_*_['Y:Nat,'Z:Nat] := 'X:Nat /\ 'Y:Nat = 'a.Nat, '*, 100, 0) . rewrites: 2 result ResultTriple: {'_*_['a.Nat,'_+_['b.Nat,'c.Nat]],'Nat, 'X:Nat <- '_*_['a.Nat,'_+_['b.Nat,'c.Nat]] ; 'Y:Nat <- 'a.Nat ; 'Z:Nat <- '_+_['b.Nat,'c.Nat]} ========================================== reduce in META-LEVEL : metaSearch(['SEARCH-TEST], '_*_['a.Nat,'_+_['b.Nat, 'c.Nat]], 'X:Nat, '_*_['Y:Nat,'Z:Nat] := 'X:Nat /\ 'Y:Nat = 'a.Nat, '*, 100, 1) . rewrites: 6 result ResultTriple?: (failure).ResultTriple? ========================================== reduce in META-LEVEL : metaSearch(['SEARCH-TEST], '_*_['a.Nat,'_+_['b.Nat, 'c.Nat]], 'X:Nat, nil, '*, 100, 0) . rewrites: 2 result ResultTriple: {'_*_['a.Nat,'_+_['b.Nat,'c.Nat]],'Nat, 'X:Nat <- '_*_['a.Nat,'_+_['b.Nat,'c.Nat]]} ========================================== reduce in META-LEVEL : metaSearch(['SEARCH-TEST], '_*_['a.Nat,'_+_['b.Nat, 'c.Nat]], 'X:Nat, nil, '*, 100, 1) . rewrites: 3 result ResultTriple: {'_+_['_*_['a.Nat,'b.Nat],'_*_['a.Nat,'c.Nat]],'Nat, 'X:Nat <- '_+_['_*_['a.Nat,'b.Nat],'_*_['a.Nat,'c.Nat]]} ========================================== reduce in META-LEVEL : metaSearch(['SEARCH-TEST], '_*_['a.Nat,'_+_['b.Nat, 'c.Nat]], 'X:Nat, nil, '*, 100, 2) . rewrites: 5 result ResultTriple?: (failure).ResultTriple? ========================================== reduce in META-LEVEL : metaSearch(['SEARCH-TEST], '_*_['a.Nat,'_+_['b.Nat, 'c.Nat]], 'X:Nat, nil, '!, 100, 0) . rewrites: 6 result ResultTriple?: (failure).ResultTriple? ========================================== reduce in META-LEVEL : metaSearch(['SEARCH-TEST], '_*_['a.Nat,'_+_['b.Nat, 'c.Nat]], 'X:Nat, nil, '+, 100, 0) . rewrites: 3 result ResultTriple: {'_+_['_*_['a.Nat,'b.Nat],'_*_['a.Nat,'c.Nat]],'Nat, 'X:Nat <- '_+_['_*_['a.Nat,'b.Nat],'_*_['a.Nat,'c.Nat]]} ========================================== reduce in META-LEVEL : metaSearch(['SEARCH-TEST], '_*_['a.Nat,'_+_['b.Nat, 'c.Nat]], 'X:Nat, nil, '+, 100, 1) . rewrites: 4 result ResultTriple: {'_*_['a.Nat,'_+_['b.Nat,'c.Nat]],'Nat, 'X:Nat <- '_*_['a.Nat,'_+_['b.Nat,'c.Nat]]} ========================================== reduce in META-LEVEL : metaSearch(['SEARCH-TEST], '_+_['_*_['a.Nat,'b.Nat], '_*_['a.Nat,'c.Nat]], '_*_['X:Nat,'Y:Nat], nil, '*, 100, 0) . rewrites: 3 result ResultTriple: {'_*_['a.Nat,'_+_['b.Nat,'c.Nat]],'Nat, 'X:Nat <- 'a.Nat ; 'Y:Nat <- '_+_['b.Nat,'c.Nat]} ========================================== reduce in META-LEVEL : metaSearch(['SEARCH-TEST], '_+_['_*_['a.Nat,'b.Nat], '_*_['a.Nat,'c.Nat]], '_*_['X:Nat,'Y:Nat], nil, '*, 100, 1) . rewrites: 2 result ResultTriple: {'_*_['a.Nat,'_+_['b.Nat,'c.Nat]],'Nat, 'X:Nat <- '_+_['b.Nat,'c.Nat] ; 'Y:Nat <- 'a.Nat} ========================================== reduce in META-LEVEL : metaSearch(['SEARCH-TEST], '_+_['_*_['a.Nat,'b.Nat], '_*_['a.Nat,'c.Nat]], '_*_['X:Nat,'Y:Nat], nil, '*, 0, 0) . rewrites: 2 result ResultTriple?: (failure).ResultTriple? ========================================== reduce in META-LEVEL : metaSearch(['SEARCH-TEST], '_+_['_*_['a.Nat,'b.Nat], '_*_['a.Nat,'c.Nat],'_*_['a.Nat,'d.Nat]], '_*_['X:Nat,'Y:Nat], nil, '*, 100, 0) . rewrites: 9 result ResultTriple: {'_*_['a.Nat,'_+_['b.Nat,'c.Nat,'d.Nat]],'Nat, 'X:Nat <- 'a.Nat ; 'Y:Nat <- '_+_['b.Nat,'c.Nat,'d.Nat]} ========================================== reduce in META-LEVEL : metaSearch(['SEARCH-TEST], '_+_['_*_['a.Nat,'b.Nat], '_*_['a.Nat,'c.Nat],'_*_['a.Nat,'d.Nat]], '_*_['X:Nat,'Y:Nat], nil, '*, 100, 1) . rewrites: 2 result ResultTriple: {'_*_['a.Nat,'_+_['b.Nat,'c.Nat,'d.Nat]],'Nat, 'X:Nat <- '_+_['b.Nat,'c.Nat,'d.Nat] ; 'Y:Nat <- 'a.Nat} ========================================== reduce in META-LEVEL : metaSearch(['SEARCH-TEST], '_+_['_*_['a.Nat,'b.Nat], '_*_['a.Nat,'c.Nat],'_*_['a.Nat,'d.Nat]], '_*_['X:Nat,'Y:Nat], nil, '*, 1, 0) . rewrites: 8 result ResultTriple?: (failure).ResultTriple? ========================================== reduce in META-LEVEL : metaSearch(['SEARCH-TEST], '_+_['_*_['a.Nat,'b.Nat], '_*_['a.Nat,'c.Nat],'_*_['a.Nat,'d.Nat]], '_*_['X:Nat,'Y:Nat], nil, '*, 1, 1) . rewrites: 8 result ResultTriple?: (failure).ResultTriple? ========================================== reduce in META-LEVEL : metaSearch(['SEARCH], 'a.State, 'e.State, nil, '*, unbounded, 0) . rewrites: 6 result ResultTriple: {'e.State,'State,(none).Substitution} ========================================== reduce in META-LEVEL : metaSearch(['SEARCH], 'a.State, 'e.State, nil, '*, unbounded, 1) . rewrites: 2 result ResultTriple?: (failure).ResultTriple? ========================================== reduce in META-LEVEL : metaSearchPath(['SEARCH], 'a.State, 'e.State, nil, '*, unbounded, 0) . rewrites: 6 result Trace: {'a.State,'State,rl 'a.State => 'c.State [label('a-move2)] .} {'c.State,'State,rl 'c.State => 'e.State [label('c-move)] .} ========================================== reduce in META-LEVEL : metaSearchPath(['SEARCH], 'a.State, 'e.State, nil, '*, unbounded, 1) . rewrites: 2 result Trace?: (failure).Trace? ========================================== reduce in META-LEVEL : metaSearchPath(['ARITH], '_*_['_+_['a.Int,'b.Int],'_+_[ 'c.Int,'d.Int]], '_+_['I:Int,'J:Int,'K:Int,'L:Int], nil, '*, unbounded, 0) . rewrites: 21 result Trace: {'_*_['_+_['a.Int,'b.Int],'_+_['c.Int,'d.Int]],'Int,rl '_*_[ 'I:Int,'_+_['J:Int,'K:Int]] => '_+_['_*_['I:Int,'J:Int],'_*_['I:Int, 'K:Int]] [none] .} {'_+_['_*_['a.Int,'_+_['c.Int,'d.Int]],'_*_['b.Int,'_+_['c.Int,'d.Int]]],'Int, rl '_*_['I:Int,'_+_['J:Int,'K:Int]] => '_+_['_*_['I:Int,'J:Int],'_*_[ 'I:Int,'K:Int]] [none] .} {'_+_['_*_['a.Int,'c.Int],'_*_['a.Int,'d.Int],'_*_['b.Int,'_+_['c.Int, 'd.Int]]],'Int,rl '_*_['I:Int,'_+_['J:Int,'K:Int]] => '_+_['_*_['I:Int, 'J:Int],'_*_['I:Int,'K:Int]] [none] .} Bye. maude-3.1/tests/Meta/metaFrewrite.expected0000644000175200017520000000604213140741636015615 00000000000000========================================== reduce in TEST : metaFrewrite(m, t, 1, 1) . rewrites: 5 result ResultPair: {'f['f['i['s_['0.Zero]],'i['s_['0.Zero]]],'f['i['s_^3[ '0.Zero]],'i['s_^2['0.Zero]]]],'Foo} ========================================== reduce in TEST : metaFrewrite(m, t, 2, 1) . rewrites: 7 result ResultPair: {'f['f['i['s_['0.Zero]],'i['0.Zero]],'f['i['s_^3['0.Zero]], 'i['s_^2['0.Zero]]]],'Foo} ========================================== reduce in TEST : metaFrewrite(m, t, 3, 1) . rewrites: 8 result ResultPair: {'f['i['s_['0.Zero]],'f['i['s_^3['0.Zero]],'i['s_^2[ '0.Zero]]]],'Foo} ========================================== reduce in TEST : metaFrewrite(m, t, 4, 1) . rewrites: 10 result ResultPair: {'f['i['s_['0.Zero]],'f['i['s_^2['0.Zero]],'i['s_^2[ '0.Zero]]]],'Foo} ========================================== reduce in TEST : metaFrewrite(m, t, 5, 1) . rewrites: 12 result ResultPair: {'f['i['s_['0.Zero]],'f['i['s_^2['0.Zero]],'i['s_[ '0.Zero]]]],'Foo} ========================================== reduce in TEST : metaFrewrite(m, t, 6, 1) . rewrites: 14 result ResultPair: {'f['i['0.Zero],'f['i['s_^2['0.Zero]],'i['s_['0.Zero]]]], 'Foo} ========================================== reduce in TEST : metaFrewrite(m, t, 7, 1) . rewrites: 16 result ResultPair: {'f['i['0.Zero],'f['i['s_['0.Zero]],'i['s_['0.Zero]]]],'Foo} ========================================== reduce in TEST : metaFrewrite(m, t, 8, 1) . rewrites: 18 result ResultPair: {'f['i['0.Zero],'f['i['s_['0.Zero]],'i['0.Zero]]],'Foo} ========================================== reduce in TEST : metaFrewrite(m, t, 9, 1) . rewrites: 19 result ResultPair: {'f['i['0.Zero],'i['s_['0.Zero]]],'Foo} ========================================== reduce in TEST : metaFrewrite(m, t, 10, 1) . rewrites: 21 result ResultPair: {'f['i['0.Zero],'i['0.Zero]],'Foo} ========================================== reduce in TEST : metaFrewrite(m, t, 11, 1) . rewrites: 22 result ResultPair: {'i['0.Zero],'Foo} ========================================== reduce in TEST : metaFrewrite(m, t, unbounded, 1) . rewrites: 22 result ResultPair: {'i['0.Zero],'Foo} ========================================== reduce in TEST : metaFrewrite(m, t, 0, 1) . rewrites: 2 result [ResultPair?]: metaFrewrite(mod 'FAIR is protecting 'INT . sorts 'Foo . none op 'f : 'Foo 'Foo -> 'Foo [none] . op 'i : 'Int -> 'Foo [none] . none none rl 'f['X:Foo,'i['0.Nat]] => 'X:Foo [none] . rl 'i['M:NzInt] => 'i['_-_['M:NzInt,'s_['0.Nat]]] [none] . endm, 'f['f['i['s_^2['0.Nat]],'i['s_['0.Nat]]],'f['i['s_^3['0.Nat]],'i['s_^2[ '0.Nat]]]], 0, 1) ========================================== reduce in TEST : metaFrewrite(m, t, 1, 0) . rewrites: 2 result [ResultPair?]: metaFrewrite(mod 'FAIR is protecting 'INT . sorts 'Foo . none op 'f : 'Foo 'Foo -> 'Foo [none] . op 'i : 'Int -> 'Foo [none] . none none rl 'f['X:Foo,'i['0.Nat]] => 'X:Foo [none] . rl 'i['M:NzInt] => 'i['_-_['M:NzInt,'s_['0.Nat]]] [none] . endm, 'f['f['i['s_^2['0.Nat]],'i['s_['0.Nat]]],'f['i['s_^3['0.Nat]],'i['s_^2[ '0.Nat]]]], 1, 0) Bye. maude-3.1/tests/Meta/metaIntSearch.expected0000644000175200017520000001323113333167510015701 00000000000000========================================== erewrite in SEARCH-TEST : <> < me : User | soln: 0 > createInterpreter( interpreterManager, me, none) . rewrites: 3 result Configuration: <> < me : User | none > gotSearchResult(me, interpreter( 0), 0, 'a.State, 'State, 'X:State <- 'a.State) ========================================== erewrite in SEARCH-TEST : <> < me : User | soln: 1 > createInterpreter( interpreterManager, me, none) . rewrites: 4 result Configuration: <> < me : User | none > gotSearchResult(me, interpreter( 0), 1, 'b.State, 'State, 'X:State <- 'b.State) ========================================== erewrite in SEARCH-TEST : <> < me : User | soln: 2 > createInterpreter( interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > gotSearchResult(me, interpreter( 0), 2, 'c.State, 'State, 'X:State <- 'c.State) ========================================== erewrite in SEARCH-TEST : <> < me : User | soln: 3 > createInterpreter( interpreterManager, me, none) . rewrites: 6 result Configuration: <> < me : User | none > gotSearchResult(me, interpreter( 0), 3, 'd.State, 'State, 'X:State <- 'd.State) ========================================== erewrite in SEARCH-TEST : <> < me : User | soln: 4 > createInterpreter( interpreterManager, me, none) . rewrites: 7 result Configuration: <> < me : User | none > gotSearchResult(me, interpreter( 0), 4, 'e.State, 'State, 'X:State <- 'e.State) ========================================== erewrite in SEARCH-TEST : <> < me : User | soln: 5 > createInterpreter( interpreterManager, me, none) . rewrites: 7 result Configuration: <> < me : User | none > noSuchResult(me, interpreter(0), 4) ========================================== erewrite in SEARCH-CACHE-TEST : <> < me : User | soln: 0 > createInterpreter( interpreterManager, me, none) . rewrites: 17 result Configuration: <> < me : User | soln: 6,got: gotSearchResult(me, interpreter(0), 0, 'a.State, 'State, 'X:State <- 'a.State),got: gotSearchResult(me, interpreter(0), 1, 'b.State, 'State, 'X:State <- 'b.State),got: gotSearchResult(me, interpreter(0), 1, 'c.State, 'State, 'X:State <- 'c.State),got: gotSearchResult(me, interpreter(0), 1, 'd.State, 'State, 'X:State <- 'd.State),got: gotSearchResult(me, interpreter(0), 1, 'e.State, 'State, 'X:State <- 'e.State) > noSuchResult(me, interpreter(0), 0) ========================================== erewrite in SEARCH-PATH-TEST : <> < me : User | soln: 0 > createInterpreter( interpreterManager, me, none) . rewrites: 3 result Configuration: <> < me : User | none > gotSearchResultAndPath(me, interpreter(0), 0, 'a.State, 'State, 'X:State <- 'a.State, nil) ========================================== erewrite in SEARCH-PATH-TEST : <> < me : User | soln: 1 > createInterpreter( interpreterManager, me, none) . rewrites: 4 result Configuration: <> < me : User | none > gotSearchResultAndPath(me, interpreter(0), 1, 'b.State, 'State, 'X:State <- 'b.State, {'a.State,'State,rl 'a.State => 'b.State [label( 'a-move1)] .}) ========================================== erewrite in SEARCH-PATH-TEST : <> < me : User | soln: 2 > createInterpreter( interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > gotSearchResultAndPath(me, interpreter(0), 2, 'c.State, 'State, 'X:State <- 'c.State, {'a.State,'State,rl 'a.State => 'c.State [label( 'a-move2)] .}) ========================================== erewrite in SEARCH-PATH-TEST : <> < me : User | soln: 3 > createInterpreter( interpreterManager, me, none) . rewrites: 6 result Configuration: <> < me : User | none > gotSearchResultAndPath(me, interpreter(0), 3, 'd.State, 'State, 'X:State <- 'd.State, {'a.State,'State,rl 'a.State => 'b.State [label( 'a-move1)] .} {'b.State,'State,rl 'b.State => 'd.State [label('b-move)] .}) ========================================== erewrite in SEARCH-PATH-TEST : <> < me : User | soln: 4 > createInterpreter( interpreterManager, me, none) . rewrites: 7 result Configuration: <> < me : User | none > gotSearchResultAndPath(me, interpreter(0), 4, 'e.State, 'State, 'X:State <- 'e.State, {'a.State,'State,rl 'a.State => 'c.State [label( 'a-move2)] .} {'c.State,'State,rl 'c.State => 'e.State [label('c-move)] .}) ========================================== erewrite in SEARCH-PATH-TEST : <> < me : User | soln: 5 > createInterpreter( interpreterManager, me, none) . rewrites: 7 result Configuration: <> < me : User | none > noSuchResult(me, interpreter(0), 4) ========================================== erewrite in SEARCH-PATH-CACHE-TEST : <> < me : User | soln: 0 > createInterpreter(interpreterManager, me, none) . rewrites: 17 result Configuration: <> < me : User | soln: 6,got: gotSearchResultAndPath(me, interpreter(0), 0, 'a.State, 'State, 'X:State <- 'a.State, nil),got: gotSearchResultAndPath(me, interpreter(0), 1, 'b.State, 'State, 'X:State <- 'b.State, {'a.State,'State,rl 'a.State => 'b.State [label( 'a-move1)] .}),got: gotSearchResultAndPath(me, interpreter(0), 1, 'c.State, 'State, 'X:State <- 'c.State, {'a.State,'State,rl 'a.State => 'c.State [label( 'a-move2)] .}),got: gotSearchResultAndPath(me, interpreter(0), 1, 'd.State, 'State, 'X:State <- 'd.State, {'a.State,'State,rl 'a.State => 'b.State [label( 'a-move1)] .} {'b.State,'State,rl 'b.State => 'd.State [label('b-move)] .}),got: gotSearchResultAndPath(me, interpreter(0), 1, 'e.State, 'State, 'X:State <- 'e.State, {'a.State,'State,rl 'a.State => 'c.State [label( 'a-move2)] .} {'c.State,'State,rl 'c.State => 'e.State [label('c-move)] .}) > noSuchResult( me, interpreter(0), 0) Bye. maude-3.1/tests/Meta/metaIntNewNarrow.expected0000644000175200017520000017117713735237601016441 00000000000000========================================== erewrite in NARROW-TEST : <> < me : User | start: ('g['f['#22:Foo,'#21:Foo, '#23:Foo]]),irred: empty > createInterpreter(interpreterManager, me, none) . rewrites: 184 mb applications: 0 equational rewrites: 92 rule rewrites: 47 variant narrowing steps: 0 narrowing steps: 45 result Configuration: <> < me : User | soln: 46,got: (gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo,'@5:Foo,'@6:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@2:Foo,'@4:Foo,'@4:Foo,'@5:Foo] ; '#22:Foo <- 'f['@1:Foo,'@1:Foo,'@2:Foo,'@3:Foo] ; '#23:Foo <- 'f['@3:Foo,'@5:Foo,'@6:Foo,'@6:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo,'@5:Foo,'@6:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo, '@4:Foo,'@5:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@2:Foo,'@4:Foo,'@4:Foo,'@5:Foo] ; '#22:Foo <- 'f['@1:Foo,'@1:Foo,'@2:Foo,'@3:Foo] ; '#23:Foo <- 'f['@3:Foo,'@5:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo,'@5:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo, '@4:Foo,'@5:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@2:Foo,'@4:Foo,'@4:Foo] ; '#22:Foo <- 'f['@1:Foo,'@1:Foo,'@2:Foo,'@3:Foo] ; '#23:Foo <- 'f['@3:Foo,'@5:Foo,'@5:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo,'@5:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo, '@4:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@3:Foo,'@4:Foo,'@4:Foo] ; '#22:Foo <- 'f['@1:Foo,'@2:Foo,'@2:Foo,'@3:Foo] ; '#23:Foo <- '@1:Foo, 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo,'@5:Foo]], 'Foo, [ ], ', '#21:Foo <- 'f['@2:Foo,'@4:Foo] ; '#22:Foo <- 'f['@1:Foo,'@1:Foo,'@2:Foo,'@3:Foo] ; '#23:Foo <- 'f['@3:Foo,'@4:Foo,'@5:Foo,'@5:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo,'@5:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo, '@4:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@2:Foo,'@4:Foo] ; '#22:Foo <- 'f['@1:Foo,'@1:Foo,'@2:Foo,'@3:Foo] ; '#23:Foo <- 'f['@3:Foo,'@4:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo]], 'Foo, [], ', '#21:Foo <- '@1:Foo ; '#22:Foo <- 'f['@1:Foo,'@2:Foo,'@2:Foo,'@3:Foo] ; '#23:Foo <- 'f['@3:Foo,'@4:Foo,'@4:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo]], 'Foo, [], ', '#21:Foo <- '@1:Foo ; '#22:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo,'@3:Foo] ; '#23:Foo <- '@2:Foo, 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo,'@5:Foo]], 'Foo, [ ], ', '#21:Foo <- 'f['@2:Foo,'@3:Foo,'@3:Foo,'@4:Foo] ; '#22:Foo <- 'f['@1:Foo,'@1:Foo,'@2:Foo] ; '#23:Foo <- 'f['@4:Foo,'@5:Foo,'@5:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo,'@5:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo, '@4:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@1:Foo,'@3:Foo,'@4:Foo,'@4:Foo] ; '#22:Foo <- 'f['@2:Foo,'@2:Foo,'@3:Foo] ; '#23:Foo <- '@1:Foo, 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@2:Foo,'@3:Foo,'@3:Foo] ; '#22:Foo <- 'f['@1:Foo,'@1:Foo,'@2:Foo] ; '#23:Foo <- 'f['@4:Foo,'@4:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@2:Foo,'@3:Foo] ; '#22:Foo <- 'f['@1:Foo,'@1:Foo,'@2:Foo] ; '#23:Foo <- 'f['@3:Foo,'@4:Foo,'@4:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@1:Foo,'@3:Foo] ; '#22:Foo <- 'f['@2:Foo,'@2:Foo,'@3:Foo] ; '#23:Foo <- '@1:Foo, 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo]], 'Foo, [], ', '#21:Foo <- '@1:Foo ; '#22:Foo <- 'f['@1:Foo,'@2:Foo,'@2:Foo] ; '#23:Foo <- 'f['@3:Foo,'@3:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo,'@5:Foo]], 'Foo, [ ], ', '#21:Foo <- 'f['@3:Foo,'@3:Foo,'@4:Foo] ; '#22:Foo <- 'f['@1:Foo,'@1:Foo,'@2:Foo] ; '#23:Foo <- 'f['@2:Foo,'@4:Foo,'@5:Foo,'@5:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo,'@5:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo, '@4:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@3:Foo,'@3:Foo,'@4:Foo] ; '#22:Foo <- 'f['@1:Foo,'@1:Foo,'@2:Foo] ; '#23:Foo <- 'f['@2:Foo,'@4:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@3:Foo,'@3:Foo] ; '#22:Foo <- 'f['@1:Foo,'@1:Foo,'@2:Foo] ; '#23:Foo <- 'f['@2:Foo,'@4:Foo,'@4:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@3:Foo,'@3:Foo] ; '#22:Foo <- 'f['@1:Foo,'@2:Foo,'@2:Foo] ; '#23:Foo <- '@1:Foo, 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo]], 'Foo, [], ', '#21:Foo <- '@1:Foo ; '#22:Foo <- 'f['@2:Foo,'@2:Foo,'@3:Foo] ; '#23:Foo <- 'f['@1:Foo,'@3:Foo,'@4:Foo,'@4:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo]], 'Foo, [], ', '#21:Foo <- '@1:Foo ; '#22:Foo <- 'f['@2:Foo,'@2:Foo,'@3:Foo] ; '#23:Foo <- 'f['@1:Foo,'@3:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@2:Foo,'@2:Foo,'@3:Foo] ; '#22:Foo <- 'f['@1:Foo,'@1:Foo] ; '#23:Foo <- 'f['@3:Foo,'@4:Foo,'@4:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@1:Foo,'@3:Foo,'@3:Foo] ; '#22:Foo <- 'f['@2:Foo,'@2:Foo] ; '#23:Foo <- '@1:Foo, 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@2:Foo,'@2:Foo] ; '#22:Foo <- 'f['@1:Foo,'@1:Foo] ; '#23:Foo <- 'f['@3:Foo,'@3:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo]], 'Foo, [], ', '#21:Foo <- '@1:Foo ; '#22:Foo <- 'f['@2:Foo,'@2:Foo] ; '#23:Foo <- 'f['@1:Foo,'@3:Foo,'@3:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo]], 'Foo, [], ', '#21:Foo <- '@1:Foo ; '#22:Foo <- 'f['@2:Foo,'@2:Foo] ; '#23:Foo <- '@1:Foo, 'X:Foo <- 'f['@1:Foo,'@2:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo,'@5:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@1:Foo,'@3:Foo,'@3:Foo,'@4:Foo] ; '#22:Foo <- 'f['@1:Foo,'@2:Foo] ; '#23:Foo <- 'f['@2:Foo,'@4:Foo,'@5:Foo,'@5:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo,'@5:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo, '@4:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@1:Foo,'@3:Foo,'@3:Foo,'@4:Foo] ; '#22:Foo <- 'f['@1:Foo,'@2:Foo] ; '#23:Foo <- 'f['@2:Foo,'@4:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@1:Foo,'@3:Foo,'@3:Foo] ; '#22:Foo <- 'f['@1:Foo,'@2:Foo] ; '#23:Foo <- 'f['@2:Foo,'@4:Foo,'@4:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@2:Foo,'@3:Foo,'@3:Foo] ; '#22:Foo <- 'f['@1:Foo,'@2:Foo] ; '#23:Foo <- '@1:Foo, 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@1:Foo,'@3:Foo] ; '#22:Foo <- 'f['@1:Foo,'@2:Foo] ; '#23:Foo <- 'f['@2:Foo,'@3:Foo,'@4:Foo,'@4:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@1:Foo,'@3:Foo] ; '#22:Foo <- 'f['@1:Foo,'@2:Foo] ; '#23:Foo <- 'f['@2:Foo,'@3:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo]], 'Foo, [], ', '#21:Foo <- '@1:Foo ; '#22:Foo <- 'f['@1:Foo,'@2:Foo] ; '#23:Foo <- 'f['@2:Foo,'@3:Foo,'@3:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo]], 'Foo, [], ', '#21:Foo <- '@1:Foo ; '#22:Foo <- 'f['@1:Foo,'@2:Foo] ; '#23:Foo <- '@2:Foo, 'X:Foo <- 'f['@1:Foo,'@2:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@1:Foo,'@2:Foo,'@2:Foo,'@3:Foo] ; '#22:Foo <- '@1:Foo ; '#23:Foo <- 'f['@3:Foo,'@4:Foo,'@4:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo,'@3:Foo] ; '#22:Foo <- '@1:Foo ; '#23:Foo <- '@2:Foo, 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@1:Foo,'@2:Foo,'@2:Foo] ; '#22:Foo <- '@1:Foo ; '#23:Foo <- 'f['@3:Foo,'@3:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@1:Foo,'@2:Foo] ; '#22:Foo <- '@1:Foo ; '#23:Foo <- 'f['@2:Foo,'@3:Foo,'@3:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@1:Foo,'@2:Foo] ; '#22:Foo <- '@1:Foo ; '#23:Foo <- '@2:Foo, 'X:Foo <- 'f['@1:Foo,'@2:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo]], 'Foo, [], ', '#21:Foo <- '@1:Foo ; '#22:Foo <- '@1:Foo ; '#23:Foo <- 'f['@2:Foo,'@2:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@2:Foo,'@2:Foo,'@3:Foo] ; '#22:Foo <- '@1:Foo ; '#23:Foo <- 'f['@1:Foo,'@3:Foo,'@4:Foo,'@4:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo,'@4:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@2:Foo,'@2:Foo,'@3:Foo] ; '#22:Foo <- '@1:Foo ; '#23:Foo <- 'f['@1:Foo,'@3:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@2:Foo,'@2:Foo] ; '#22:Foo <- '@1:Foo ; '#23:Foo <- 'f['@1:Foo,'@3:Foo,'@3:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@2:Foo,'@2:Foo] ; '#22:Foo <- '@1:Foo ; '#23:Foo <- '@1:Foo, 'X:Foo <- 'f['@1:Foo,'@2:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo]], 'Foo, [], ', '#21:Foo <- '@2:Foo ; '#22:Foo <- '@1:Foo ; '#23:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo,'@3:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo]], 'Foo, [], ', '#21:Foo <- '@2:Foo ; '#22:Foo <- '@1:Foo ; '#23:Foo <- 'f['@1:Foo,'@2:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo], '@)),start: ('g['f['#22:Foo,'#21:Foo, '#23:Foo]]),irred: empty > noSuchResult(me, interpreter(0), 0, true) ========================================== erewrite in NARROW-TEST : <> < me : User | start: ('g['f['#22:Foo,'#21:Foo, '#23:Foo]]),irred: empty > createInterpreter(interpreterManager, me, none) . rewrites: 32 mb applications: 0 equational rewrites: 16 rule rewrites: 9 variant narrowing steps: 0 narrowing steps: 7 result Configuration: <> < me : User | soln: 8,got: (gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@3:Foo,'@1:Foo,'@2:Foo]], 'Foo, [], ', '#21:Foo <- '@1:Foo ; '#22:Foo <- 'f['@3:Foo,'@1:Foo,'@2:Foo,'@3:Foo] ; '#23:Foo <- '@2:Foo, 'X:Foo <- 'f['@3:Foo,'@1:Foo,'@2:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@3:Foo,'@2:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@3:Foo,'@2:Foo,'@1:Foo,'@3:Foo] ; '#22:Foo <- '@1:Foo ; '#23:Foo <- '@2:Foo, 'X:Foo <- 'f['@1:Foo,'@3:Foo,'@2:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@3:Foo,'@1:Foo] ; '#22:Foo <- 'f['@1:Foo,'@2:Foo] ; '#23:Foo <- 'f['@2:Foo,'@3:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo]], 'Foo, [], ', '#21:Foo <- 'f['@2:Foo,'@1:Foo] ; '#22:Foo <- '@1:Foo ; '#23:Foo <- '@2:Foo, 'X:Foo <- 'f['@1:Foo,'@2:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@3:Foo]], 'Foo, [], ', '#21:Foo <- '@2:Foo ; '#22:Foo <- '@1:Foo ; '#23:Foo <- 'f['@3:Foo,'@1:Foo,'@2:Foo,'@3:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@3:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo]], 'Foo, [], ', '#21:Foo <- '@2:Foo ; '#22:Foo <- '@1:Foo ; '#23:Foo <- 'f['@1:Foo,'@2:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo]], 'Foo, [], ', '#21:Foo <- '@1:Foo ; '#22:Foo <- 'f['@1:Foo,'@2:Foo] ; '#23:Foo <- '@2:Foo, 'X:Foo <- 'f['@1:Foo,'@2:Foo], '@)),start: ('g['f['#22:Foo,'#21:Foo, '#23:Foo]]),irred: empty > noSuchResult(me, interpreter(0), 0, true) ========================================== erewrite in NARROW-TEST : <> < me : User | start: ('g['f['#22:Foo,'#22:Foo, '#23:Foo]]),irred: empty > createInterpreter(interpreterManager, me, none) . Warning: Unification modulo the theory of operator f has encountered an instance for which it may not be complete. rewrites: 12 mb applications: 0 equational rewrites: 6 rule rewrites: 4 variant narrowing steps: 0 narrowing steps: 2 result Configuration: <> < me : User | soln: 3,got: (gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@1:Foo,'@2:Foo]], 'Foo, [], ', '#22:Foo <- '@1:Foo ; '#23:Foo <- 'f['@2:Foo,'@1:Foo,'@1:Foo,'@2:Foo], 'X:Foo <- 'f['@1:Foo,'@1:Foo,'@2:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@1:Foo]], 'Foo, [], ', '#22:Foo <- '@1:Foo ; '#23:Foo <- 'f['@1:Foo,'@1:Foo], 'X:Foo <- 'f['@1:Foo,'@1:Foo], '@)),start: ('g['f['#22:Foo,'#22:Foo, '#23:Foo]]),irred: empty > noSuchResult(me, interpreter(0), 0, false) ========================================== erewrite in NARROW-TEST : <> < me : User | start: ('g['f['#22:Foo,'#23:Foo, '#23:Foo]]),irred: empty > createInterpreter(interpreterManager, me, none) . Warning: Unification modulo the theory of operator f has encountered an instance for which it may not be complete. rewrites: 20 mb applications: 0 equational rewrites: 10 rule rewrites: 6 variant narrowing steps: 0 narrowing steps: 4 result Configuration: <> < me : User | soln: 5,got: (gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo,'@2:Foo]], 'Foo, [ ], ', '#22:Foo <- 'f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo] ; '#23:Foo <- 'f['@2:Foo,'@1:Foo,'@2:Foo], 'X:Foo <- 'f['@1:Foo,'@2:Foo,'@2:Foo,'@1:Foo,'@2:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@1:Foo,'@1:Foo]], 'Foo, [], ', '#22:Foo <- 'f['@1:Foo,'@1:Foo] ; '#23:Foo <- 'f['@1:Foo,'@1:Foo], 'X:Foo <- 'f['@1:Foo,'@1:Foo,'@1:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@2:Foo,'@1:Foo,'@1:Foo]], 'Foo, [], ', '#22:Foo <- 'f['@2:Foo,'@1:Foo,'@1:Foo,'@2:Foo] ; '#23:Foo <- '@1:Foo, 'X:Foo <- 'f['@2:Foo,'@1:Foo,'@1:Foo], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'h['f['@1:Foo,'@1:Foo]], 'Foo, [], ', '#22:Foo <- 'f['@1:Foo,'@1:Foo] ; '#23:Foo <- '@1:Foo, 'X:Foo <- 'f['@1:Foo,'@1:Foo], '@)),start: ('g['f['#22:Foo,'#23:Foo, '#23:Foo]]),irred: empty > noSuchResult(me, interpreter(0), 0, false) ========================================== erewrite in NARROW-TEST : <> < me : User | start: ('f['g['_+_['W:Expr,'b.Elt]], 'Z:Expr]),irred: ('_+_['W:Expr,'b.Elt]) > createInterpreter( interpreterManager, me, none) . rewrites: 28 mb applications: 0 equational rewrites: 8 rule rewrites: 5 variant narrowing steps: 12 narrowing steps: 3 result Configuration: <> < me : User | soln: 4,got: (gotOneStepNarrowing(me, interpreter(0), 7, 'f['h['_+_['b.Elt,'@1:Expr]],'@2:Expr], 'Expr, 'f[[], 'Z:Expr], 'one, 'W:Expr <- '_+_['a.Elt,'@1:Expr] ; 'Z:Expr <- '@2:Expr, 'Y:Expr <- '_+_['b.Elt,'@1:Expr], '@) ; gotOneStepNarrowing(me, interpreter( 0), 1, 'f['h['b.Elt],'@1:Expr], 'Expr, 'f[[],'Z:Expr], 'one, 'W:Expr <- 'a.Elt ; 'Z:Expr <- '@1:Expr, 'Y:Expr <- 'b.Elt, '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['h[ '_+_['a.Elt,'b.Elt,'%1:Expr]],'%2:Expr], 'Expr, 'f[[],'Z:Expr], 'one, 'W:Expr <- '%1:Expr ; 'Z:Expr <- '%2:Expr, 'Y:Expr <- '_+_['a.Elt,'b.Elt,'%1:Expr], '%)),start: ('f['g['_+_['W:Expr, 'b.Elt]],'Z:Expr]),irred: ('_+_['W:Expr,'b.Elt]) > noSuchResult(me, interpreter(0), 6, true) ========================================== erewrite in NARROW-TEST : <> < me : User | start: ('f['g['_+_['W:Expr,'b.Elt]], 'Z:Expr]),irred: ('_+_['X:Expr,'b.Elt]) > createInterpreter( interpreterManager, me, none) . rewrites: 127 mb applications: 0 equational rewrites: 26 rule rewrites: 14 variant narrowing steps: 75 narrowing steps: 12 result Configuration: <> < me : User | soln: 13,got: (gotOneStepNarrowing(me, interpreter(0), 31, 'f['h['_+_['b.Elt,'@1:Expr]],'@2:Expr], 'Expr, 'f[[], 'Z:Expr], 'one, 'W:Expr <- '_+_['a.Elt,'@1:Expr] ; 'Z:Expr <- '@2:Expr, 'Y:Expr <- '_+_['b.Elt,'@1:Expr], '@) ; gotOneStepNarrowing(me, interpreter( 0), 1, 'f['h['b.Elt],'@1:Expr], 'Expr, 'f[[],'Z:Expr], 'one, 'W:Expr <- 'a.Elt ; 'Z:Expr <- '@1:Expr, 'Y:Expr <- 'b.Elt, '@) ; gotOneStepNarrowing(me, interpreter(0), 19, 'f['h[ '_+_['a.Elt,'b.Elt,'%1:Expr]],'%2:Expr], 'Expr, 'f[[],'Z:Expr], 'one, 'W:Expr <- '%1:Expr ; 'Z:Expr <- '%2:Expr, 'Y:Expr <- '_+_['a.Elt,'b.Elt,'%1:Expr], '%) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['h['%1:Expr],'%2:Expr], 'Expr, 'f[[],'Z:Expr], 'one, 'W:Expr <- '_+_['a.Elt,'b.Elt,'%1:Expr] ; 'Z:Expr <- '%2:Expr, 'Y:Expr <- '%1:Expr, '%) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['h[ '0.Elt],'@1:Expr], 'Expr, 'f[[],'Z:Expr], 'one, 'W:Expr <- '_+_['a.Elt,'b.Elt] ; 'Z:Expr <- '@1:Expr, 'Y:Expr <- '0.Elt, '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['h[ 'a.Elt],'@1:Expr], 'Expr, 'f[[],'Z:Expr], 'one, 'W:Expr <- 'b.Elt ; 'Z:Expr <- '@1:Expr, 'Y:Expr <- 'a.Elt, '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['h[ '_+_['a.Elt,'b.Elt]],'@1:Expr], 'Expr, 'f[[],'Z:Expr], 'one, 'W:Expr <- '0.Elt ; 'Z:Expr <- '@1:Expr, 'Y:Expr <- '_+_['a.Elt,'b.Elt], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['h['_+_['a.Elt,'@1:Expr]],'@2:Expr], 'Expr, 'f[[],'Z:Expr], 'one, 'W:Expr <- '_+_['b.Elt,'@1:Expr] ; 'Z:Expr <- '@2:Expr, 'Y:Expr <- '_+_['a.Elt,'@1:Expr], '@) ; gotOneStepNarrowing(me, interpreter( 0), 25, 'f['g['h['%1:Expr]],'%2:Expr], 'Expr, 'f['g[[]],'Z:Expr], 'one, 'W:Expr <- '_+_['b.Elt,'g['_+_['a.Elt,'%1:Expr]]] ; 'Z:Expr <- '%2:Expr, 'Y:Expr <- '%1:Expr, '%) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['g[ 'h['0.Elt]],'@1:Expr], 'Expr, 'f['g[[]],'Z:Expr], 'one, 'W:Expr <- '_+_['b.Elt,'g['a.Elt]] ; 'Z:Expr <- '@1:Expr, 'Y:Expr <- '0.Elt, '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['g['h[ 'a.Elt]],'@1:Expr], 'Expr, 'f['g[[]],'Z:Expr], 'one, 'W:Expr <- '_+_['b.Elt,'g['0.Elt]] ; 'Z:Expr <- '@1:Expr, 'Y:Expr <- 'a.Elt, '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['g['h[ '_+_['a.Elt,'@1:Expr]]],'@2:Expr], 'Expr, 'f['g[[]],'Z:Expr], 'one, 'W:Expr <- '_+_['b.Elt,'g['@1:Expr]] ; 'Z:Expr <- '@2:Expr, 'Y:Expr <- '_+_['a.Elt,'@1:Expr], '@)),start: ('f['g['_+_['W:Expr,'b.Elt]], 'Z:Expr]),irred: ('_+_['X:Expr,'b.Elt]) > noSuchResult(me, interpreter(0), 3, true) ========================================== erewrite in NARROW-TEST : <> < me : User | start: ('f['g['_+_['#1:Expr, 'b.Elt]],'#2:Expr]),irred: ('_+_['#3:Expr,'b.Elt]) > createInterpreter( interpreterManager, me, none) . rewrites: 127 mb applications: 0 equational rewrites: 26 rule rewrites: 14 variant narrowing steps: 75 narrowing steps: 12 result Configuration: <> < me : User | soln: 13,got: (gotOneStepNarrowing(me, interpreter(0), 31, 'f['h['_+_['b.Elt,'@1:Expr]],'@2:Expr], 'Expr, 'f[[], '#2:Expr], 'one, '#1:Expr <- '_+_['a.Elt,'@1:Expr] ; '#2:Expr <- '@2:Expr, 'Y:Expr <- '_+_['b.Elt,'@1:Expr], '@) ; gotOneStepNarrowing(me, interpreter( 0), 1, 'f['h['b.Elt],'@1:Expr], 'Expr, 'f[[],'#2:Expr], 'one, '#1:Expr <- 'a.Elt ; '#2:Expr <- '@1:Expr, 'Y:Expr <- 'b.Elt, '@) ; gotOneStepNarrowing(me, interpreter(0), 19, 'f['h[ '_+_['a.Elt,'b.Elt,'%1:Expr]],'%2:Expr], 'Expr, 'f[[],'#2:Expr], 'one, '#1:Expr <- '%1:Expr ; '#2:Expr <- '%2:Expr, 'Y:Expr <- '_+_['a.Elt,'b.Elt,'%1:Expr], '%) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['h['%1:Expr],'%2:Expr], 'Expr, 'f[[],'#2:Expr], 'one, '#1:Expr <- '_+_['a.Elt,'b.Elt,'%1:Expr] ; '#2:Expr <- '%2:Expr, 'Y:Expr <- '%1:Expr, '%) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['h[ '0.Elt],'@1:Expr], 'Expr, 'f[[],'#2:Expr], 'one, '#1:Expr <- '_+_['a.Elt,'b.Elt] ; '#2:Expr <- '@1:Expr, 'Y:Expr <- '0.Elt, '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['h[ 'a.Elt],'@1:Expr], 'Expr, 'f[[],'#2:Expr], 'one, '#1:Expr <- 'b.Elt ; '#2:Expr <- '@1:Expr, 'Y:Expr <- 'a.Elt, '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['h[ '_+_['a.Elt,'b.Elt]],'@1:Expr], 'Expr, 'f[[],'#2:Expr], 'one, '#1:Expr <- '0.Elt ; '#2:Expr <- '@1:Expr, 'Y:Expr <- '_+_['a.Elt,'b.Elt], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['h['_+_['a.Elt,'@1:Expr]],'@2:Expr], 'Expr, 'f[[],'#2:Expr], 'one, '#1:Expr <- '_+_['b.Elt,'@1:Expr] ; '#2:Expr <- '@2:Expr, 'Y:Expr <- '_+_['a.Elt,'@1:Expr], '@) ; gotOneStepNarrowing(me, interpreter( 0), 25, 'f['g['h['%1:Expr]],'%2:Expr], 'Expr, 'f['g[[]],'#2:Expr], 'one, '#1:Expr <- '_+_['b.Elt,'g['_+_['a.Elt,'%1:Expr]]] ; '#2:Expr <- '%2:Expr, 'Y:Expr <- '%1:Expr, '%) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['g[ 'h['0.Elt]],'@1:Expr], 'Expr, 'f['g[[]],'#2:Expr], 'one, '#1:Expr <- '_+_['b.Elt,'g['a.Elt]] ; '#2:Expr <- '@1:Expr, 'Y:Expr <- '0.Elt, '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['g['h[ 'a.Elt]],'@1:Expr], 'Expr, 'f['g[[]],'#2:Expr], 'one, '#1:Expr <- '_+_['b.Elt,'g['0.Elt]] ; '#2:Expr <- '@1:Expr, 'Y:Expr <- 'a.Elt, '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['g['h[ '_+_['a.Elt,'@1:Expr]]],'@2:Expr], 'Expr, 'f['g[[]],'#2:Expr], 'one, '#1:Expr <- '_+_['b.Elt,'g['@1:Expr]] ; '#2:Expr <- '@2:Expr, 'Y:Expr <- '_+_['a.Elt,'@1:Expr], '@)),start: ('f['g['_+_['#1:Expr,'b.Elt]], '#2:Expr]),irred: ('_+_['#3:Expr,'b.Elt]) > noSuchResult(me, interpreter( 0), 3, true) ========================================== erewrite in NARROW-TEST2 : <> < me : User | start: ('f['g['_+_['W:Expr, 'b.Elt]],'Z:Expr]),irred: ('_+_['W:Expr,'b.Elt]) > createInterpreter( interpreterManager, me, none) . rewrites: 40 mb applications: 0 equational rewrites: 4 rule rewrites: 3 variant narrowing steps: 32 narrowing steps: 1 result Configuration: <> < me : User | soln: 2,got: gotOneStepNarrowing(me, interpreter(0), 29, 'f['h['_+_['b.Elt,'@1:Expr]],'@2:Expr], 'Expr, 'f[[], 'Z:Expr], 'one, 'W:Expr <- '_+_['a.Elt,'@1:Expr] ; 'Z:Expr <- '@2:Expr, 'Y:Expr <- '_+_['b.Elt,'@1:Expr], '@),start: ('f['g['_+_['W:Expr,'b.Elt]], 'Z:Expr]),irred: ('_+_['W:Expr,'b.Elt]) > noSuchResult(me, interpreter(0), 6, true) ========================================== erewrite in NARROW-TEST2 : <> < me : User | start: ('f['g['_+_['W:Expr, 'b.Elt]],'Z:Expr]),irred: ('_+_['X:Expr,'b.Elt]) > createInterpreter( interpreterManager, me, none) . rewrites: 112 mb applications: 0 equational rewrites: 5 rule rewrites: 4 variant narrowing steps: 101 narrowing steps: 2 result Configuration: <> < me : User | soln: 3,got: (gotOneStepNarrowing(me, interpreter(0), 71, 'f['h['_+_['b.Elt,'@1:Expr]],'@2:Expr], 'Expr, 'f[[], 'Z:Expr], 'one, 'W:Expr <- '_+_['a.Elt,'@1:Expr] ; 'Z:Expr <- '@2:Expr, 'Y:Expr <- '_+_['b.Elt,'@1:Expr], '@) ; gotOneStepNarrowing(me, interpreter( 0), 31, 'f['g['h['%1:Expr]],'%2:Expr], 'Expr, 'f['g[[]],'Z:Expr], 'one, 'W:Expr <- '_+_['b.Elt,'g['_+_['a.Elt,'%1:Expr]]] ; 'Z:Expr <- '%2:Expr, 'Y:Expr <- '%1:Expr, '%)),start: ('f['g['_+_['W:Expr,'b.Elt]],'Z:Expr]), irred: ('_+_['X:Expr,'b.Elt]) > noSuchResult(me, interpreter(0), 3, true) ========================================== erewrite in NARROW-TEST2 : <> < me : User | start: ('f['g['_+_['#1:Expr, 'b.Elt]],'#2:Expr]),irred: ('_+_['#3:Expr,'b.Elt]) > createInterpreter( interpreterManager, me, none) . rewrites: 112 mb applications: 0 equational rewrites: 5 rule rewrites: 4 variant narrowing steps: 101 narrowing steps: 2 result Configuration: <> < me : User | soln: 3,got: (gotOneStepNarrowing(me, interpreter(0), 71, 'f['h['_+_['b.Elt,'@1:Expr]],'@2:Expr], 'Expr, 'f[[], '#2:Expr], 'one, '#1:Expr <- '_+_['a.Elt,'@1:Expr] ; '#2:Expr <- '@2:Expr, 'Y:Expr <- '_+_['b.Elt,'@1:Expr], '@) ; gotOneStepNarrowing(me, interpreter( 0), 31, 'f['g['h['%1:Expr]],'%2:Expr], 'Expr, 'f['g[[]],'#2:Expr], 'one, '#1:Expr <- '_+_['b.Elt,'g['_+_['a.Elt,'%1:Expr]]] ; '#2:Expr <- '%2:Expr, 'Y:Expr <- '%1:Expr, '%)),start: ('f['g['_+_['#1:Expr,'b.Elt]],'#2:Expr]), irred: ('_+_['#3:Expr,'b.Elt]) > noSuchResult(me, interpreter(0), 3, true) ========================================== variant unify in NARROW : A:ElemXor * B:ElemXor =? X * Y . Unifier 1 rewrites: 12 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 12 narrowing steps: 0 A:ElemXor --> %1:ElemXor * %3:ElemXor B:ElemXor --> %2:ElemXor * %4:ElemXor X --> %1:ElemXor * %2:ElemXor Y --> %3:ElemXor * %4:ElemXor Unifier 2 rewrites: 12 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 12 narrowing steps: 0 A:ElemXor --> %2:ElemXor * %3:ElemXor B:ElemXor --> %1:ElemXor X --> %1:ElemXor * %3:ElemXor Y --> %2:ElemXor Unifier 3 rewrites: 12 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 12 narrowing steps: 0 A:ElemXor --> %1:ElemXor B:ElemXor --> %2:ElemXor * %3:ElemXor X --> %1:ElemXor * %3:ElemXor Y --> %2:ElemXor Unifier 4 rewrites: 12 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 12 narrowing steps: 0 A:ElemXor --> %2:ElemXor * %3:ElemXor B:ElemXor --> %1:ElemXor X --> %2:ElemXor Y --> %1:ElemXor * %3:ElemXor Unifier 5 rewrites: 12 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 12 narrowing steps: 0 A:ElemXor --> %1:ElemXor B:ElemXor --> %2:ElemXor X --> %1:ElemXor Y --> %2:ElemXor Unifier 6 rewrites: 12 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 12 narrowing steps: 0 A:ElemXor --> %1:ElemXor B:ElemXor --> %2:ElemXor * %3:ElemXor X --> %2:ElemXor Y --> %1:ElemXor * %3:ElemXor Unifier 7 rewrites: 12 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 12 narrowing steps: 0 A:ElemXor --> %1:ElemXor B:ElemXor --> %2:ElemXor X --> %2:ElemXor Y --> %1:ElemXor Unifier 8 rewrites: 92 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 92 narrowing steps: 0 A:ElemXor --> #1:ElemXor * #2:ElemXor * #4:ElemXor B:ElemXor --> #1:ElemXor * #3:ElemXor * #5:ElemXor X --> #2:ElemXor * #3:ElemXor Y --> #4:ElemXor * #5:ElemXor Unifier 9 rewrites: 92 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 92 narrowing steps: 0 A:ElemXor --> #2:ElemXor * #3:ElemXor * #4:ElemXor B:ElemXor --> #1:ElemXor * #3:ElemXor X --> #1:ElemXor * #4:ElemXor Y --> #2:ElemXor Unifier 10 rewrites: 92 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 92 narrowing steps: 0 A:ElemXor --> #1:ElemXor * #3:ElemXor B:ElemXor --> #2:ElemXor * #3:ElemXor * #4:ElemXor X --> #1:ElemXor * #4:ElemXor Y --> #2:ElemXor Unifier 11 rewrites: 92 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 92 narrowing steps: 0 A:ElemXor --> #2:ElemXor * #3:ElemXor * #4:ElemXor B:ElemXor --> #1:ElemXor * #3:ElemXor X --> #2:ElemXor Y --> #1:ElemXor * #4:ElemXor Unifier 12 rewrites: 92 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 92 narrowing steps: 0 A:ElemXor --> #1:ElemXor * #3:ElemXor B:ElemXor --> #2:ElemXor * #3:ElemXor X --> #1:ElemXor Y --> #2:ElemXor Unifier 13 rewrites: 92 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 92 narrowing steps: 0 A:ElemXor --> #1:ElemXor * #3:ElemXor B:ElemXor --> #2:ElemXor * #3:ElemXor * #4:ElemXor X --> #2:ElemXor Y --> #1:ElemXor * #4:ElemXor Unifier 14 rewrites: 92 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 92 narrowing steps: 0 A:ElemXor --> #1:ElemXor * #3:ElemXor B:ElemXor --> #2:ElemXor * #3:ElemXor X --> #2:ElemXor Y --> #1:ElemXor Unifier 15 rewrites: 92 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 92 narrowing steps: 0 A:ElemXor --> #1:ElemXor * #2:ElemXor * #3:ElemXor B:ElemXor --> #3:ElemXor X --> #1:ElemXor Y --> #2:ElemXor Unifier 16 rewrites: 92 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 92 narrowing steps: 0 A:ElemXor --> #3:ElemXor B:ElemXor --> #1:ElemXor * #2:ElemXor * #3:ElemXor X --> #1:ElemXor Y --> #2:ElemXor Unifier 17 rewrites: 92 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 92 narrowing steps: 0 A:ElemXor --> mt B:ElemXor --> #1:ElemXor * #2:ElemXor X --> #1:ElemXor Y --> #2:ElemXor Unifier 18 rewrites: 92 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 92 narrowing steps: 0 A:ElemXor --> #1:ElemXor * #2:ElemXor B:ElemXor --> mt X --> #1:ElemXor Y --> #2:ElemXor Unifier 19 rewrites: 92 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 92 narrowing steps: 0 A:ElemXor --> #2:ElemXor * #4:ElemXor B:ElemXor --> #3:ElemXor * #5:ElemXor X --> #1:[ElemXor] * #2:ElemXor * #3:ElemXor Y --> #1:[ElemXor] * #4:ElemXor * #5:ElemXor Unifier 20 rewrites: 92 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 92 narrowing steps: 0 A:ElemXor --> #2:ElemXor * #4:ElemXor B:ElemXor --> #1:ElemXor X --> #3:[ElemXor] * #1:ElemXor * #4:ElemXor Y --> #3:[ElemXor] * #2:ElemXor Unifier 21 rewrites: 92 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 92 narrowing steps: 0 A:ElemXor --> #1:ElemXor B:ElemXor --> #2:ElemXor * #4:ElemXor X --> #3:[ElemXor] * #1:ElemXor * #4:ElemXor Y --> #3:[ElemXor] * #2:ElemXor Unifier 22 rewrites: 92 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 92 narrowing steps: 0 A:ElemXor --> #2:ElemXor * #4:ElemXor B:ElemXor --> #1:ElemXor X --> #3:[ElemXor] * #2:ElemXor Y --> #3:[ElemXor] * #1:ElemXor * #4:ElemXor Unifier 23 rewrites: 92 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 92 narrowing steps: 0 A:ElemXor --> #1:ElemXor B:ElemXor --> #2:ElemXor X --> #3:[ElemXor] * #1:ElemXor Y --> #3:[ElemXor] * #2:ElemXor Unifier 24 rewrites: 92 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 92 narrowing steps: 0 A:ElemXor --> #1:ElemXor B:ElemXor --> #2:ElemXor * #4:ElemXor X --> #3:[ElemXor] * #2:ElemXor Y --> #3:[ElemXor] * #1:ElemXor * #4:ElemXor Unifier 25 rewrites: 92 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 92 narrowing steps: 0 A:ElemXor --> #1:ElemXor B:ElemXor --> #2:ElemXor X --> #3:[ElemXor] * #2:ElemXor Y --> #3:[ElemXor] * #1:ElemXor Unifier 26 rewrites: 92 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 92 narrowing steps: 0 A:ElemXor --> #1:ElemXor B:ElemXor --> #2:ElemXor X --> #3:[ElemXor] * #1:ElemXor * #2:ElemXor Y --> #3:[ElemXor] Unifier 27 rewrites: 92 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 92 narrowing steps: 0 A:ElemXor --> #1:ElemXor B:ElemXor --> #2:ElemXor X --> #3:[ElemXor] Y --> #3:[ElemXor] * #1:ElemXor * #2:ElemXor Unifier 28 rewrites: 92 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 92 narrowing steps: 0 A:ElemXor --> #1:ElemXor B:ElemXor --> #2:ElemXor X --> mt Y --> #1:ElemXor * #2:ElemXor Unifier 29 rewrites: 92 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 92 narrowing steps: 0 A:ElemXor --> #1:ElemXor B:ElemXor --> #2:ElemXor X --> #1:ElemXor * #2:ElemXor Y --> mt Unifier 30 rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 A:ElemXor --> %1:ElemXor B:ElemXor --> %1:ElemXor X --> %2:[ElemXor] Y --> %2:[ElemXor] Unifier 31 rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 A:ElemXor --> %1:ElemXor * %3:ElemXor * %5:ElemXor B:ElemXor --> %1:ElemXor * %4:ElemXor * %6:ElemXor X --> %2:[ElemXor] * %3:ElemXor * %4:ElemXor Y --> %2:[ElemXor] * %5:ElemXor * %6:ElemXor Unifier 32 rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 A:ElemXor --> %2:ElemXor * %3:ElemXor * %5:ElemXor B:ElemXor --> %1:ElemXor * %3:ElemXor X --> %4:[ElemXor] * %1:ElemXor * %5:ElemXor Y --> %4:[ElemXor] * %2:ElemXor Unifier 33 rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 A:ElemXor --> %1:ElemXor * %3:ElemXor B:ElemXor --> %2:ElemXor * %3:ElemXor * %5:ElemXor X --> %4:[ElemXor] * %1:ElemXor * %5:ElemXor Y --> %4:[ElemXor] * %2:ElemXor Unifier 34 rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 A:ElemXor --> %2:ElemXor * %3:ElemXor * %5:ElemXor B:ElemXor --> %1:ElemXor * %3:ElemXor X --> %4:[ElemXor] * %2:ElemXor Y --> %4:[ElemXor] * %1:ElemXor * %5:ElemXor Unifier 35 rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 A:ElemXor --> %1:ElemXor * %3:ElemXor B:ElemXor --> %2:ElemXor * %3:ElemXor X --> %4:[ElemXor] * %1:ElemXor Y --> %4:[ElemXor] * %2:ElemXor Unifier 36 rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 A:ElemXor --> %1:ElemXor * %3:ElemXor B:ElemXor --> %2:ElemXor * %3:ElemXor * %5:ElemXor X --> %4:[ElemXor] * %2:ElemXor Y --> %4:[ElemXor] * %1:ElemXor * %5:ElemXor Unifier 37 rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 A:ElemXor --> %1:ElemXor * %3:ElemXor B:ElemXor --> %2:ElemXor * %3:ElemXor X --> %4:[ElemXor] * %2:ElemXor Y --> %4:[ElemXor] * %1:ElemXor Unifier 38 rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 A:ElemXor --> %1:ElemXor * %3:ElemXor B:ElemXor --> %2:ElemXor * %3:ElemXor X --> %4:[ElemXor] * %1:ElemXor * %2:ElemXor Y --> %4:[ElemXor] Unifier 39 rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 A:ElemXor --> %1:ElemXor * %3:ElemXor B:ElemXor --> %2:ElemXor * %3:ElemXor X --> %4:[ElemXor] Y --> %4:[ElemXor] * %1:ElemXor * %2:ElemXor Unifier 40 rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 A:ElemXor --> %1:ElemXor * %3:ElemXor B:ElemXor --> %2:ElemXor * %3:ElemXor X --> mt Y --> %1:ElemXor * %2:ElemXor Unifier 41 rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 A:ElemXor --> %1:ElemXor * %3:ElemXor B:ElemXor --> %2:ElemXor * %3:ElemXor X --> %1:ElemXor * %2:ElemXor Y --> mt Unifier 42 rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 A:ElemXor --> %1:ElemXor * %2:ElemXor * %3:ElemXor B:ElemXor --> %3:ElemXor X --> %4:[ElemXor] * %1:ElemXor Y --> %4:[ElemXor] * %2:ElemXor Unifier 43 rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 A:ElemXor --> %1:ElemXor * %2:ElemXor B:ElemXor --> %2:ElemXor X --> %3:[ElemXor] * %1:ElemXor Y --> %3:[ElemXor] Unifier 44 rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 A:ElemXor --> %1:ElemXor * %2:ElemXor B:ElemXor --> %2:ElemXor X --> %3:[ElemXor] Y --> %3:[ElemXor] * %1:ElemXor Unifier 45 rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 A:ElemXor --> %1:ElemXor * %2:ElemXor B:ElemXor --> %2:ElemXor X --> mt Y --> %1:ElemXor Unifier 46 rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 A:ElemXor --> %1:ElemXor * %2:ElemXor B:ElemXor --> %2:ElemXor X --> %1:ElemXor Y --> mt Unifier 47 rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 A:ElemXor --> %3:ElemXor B:ElemXor --> %1:ElemXor * %2:ElemXor * %3:ElemXor X --> %4:[ElemXor] * %1:ElemXor Y --> %4:[ElemXor] * %2:ElemXor Unifier 48 rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 A:ElemXor --> %2:ElemXor B:ElemXor --> %1:ElemXor * %2:ElemXor X --> %3:[ElemXor] * %1:ElemXor Y --> %3:[ElemXor] Unifier 49 rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 A:ElemXor --> %2:ElemXor B:ElemXor --> %1:ElemXor * %2:ElemXor X --> %3:[ElemXor] Y --> %3:[ElemXor] * %1:ElemXor Unifier 50 rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 A:ElemXor --> %2:ElemXor B:ElemXor --> %1:ElemXor * %2:ElemXor X --> mt Y --> %1:ElemXor Unifier 51 rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 A:ElemXor --> %2:ElemXor B:ElemXor --> %1:ElemXor * %2:ElemXor X --> %1:ElemXor Y --> mt Unifier 52 rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 A:ElemXor --> mt B:ElemXor --> %1:ElemXor * %2:ElemXor X --> %3:[ElemXor] * %1:ElemXor Y --> %3:[ElemXor] * %2:ElemXor Unifier 53 rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 A:ElemXor --> mt B:ElemXor --> %1:ElemXor X --> %2:[ElemXor] * %1:ElemXor Y --> %2:[ElemXor] Unifier 54 rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 A:ElemXor --> mt B:ElemXor --> %1:ElemXor X --> %2:[ElemXor] Y --> %2:[ElemXor] * %1:ElemXor Unifier 55 rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 A:ElemXor --> %1:ElemXor * %2:ElemXor B:ElemXor --> mt X --> %3:[ElemXor] * %1:ElemXor Y --> %3:[ElemXor] * %2:ElemXor Unifier 56 rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 A:ElemXor --> %1:ElemXor B:ElemXor --> mt X --> %2:[ElemXor] * %1:ElemXor Y --> %2:[ElemXor] Unifier 57 rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 A:ElemXor --> %1:ElemXor B:ElemXor --> mt X --> %2:[ElemXor] Y --> %2:[ElemXor] * %1:ElemXor No more unifiers. rewrites: 140 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 140 narrowing steps: 0 ========================================== filtered variant unify in NARROW : A:ElemXor * B:ElemXor =? X * Y . rewrites: 2439 mb applications: 0 equational rewrites: 296 rule rewrites: 0 variant narrowing steps: 2143 narrowing steps: 0 Unifier 1 A:ElemXor --> #2:ElemXor * #4:ElemXor B:ElemXor --> #3:ElemXor * #5:ElemXor X --> #1:[ElemXor] * #2:ElemXor * #3:ElemXor Y --> #1:[ElemXor] * #4:ElemXor * #5:ElemXor No more unifiers. ========================================== erewrite in NARROW-TEST : <> < me : User | start: ('_*_['A:ElemXor, 'B:ElemXor]),irred: empty > createInterpreter(interpreterManager, me, none) . rewrites: 372 mb applications: 0 equational rewrites: 116 rule rewrites: 59 variant narrowing steps: 140 narrowing steps: 57 result Configuration: <> < me : User | soln: 58,got: (gotOneStepNarrowing(me, interpreter(0), 13, 'f['_*_['@1:ElemXor,'@3:ElemXor],'_*_['@2:ElemXor, '@4:ElemXor]], 'ElemXor, [], 'one, 'A:ElemXor <- '_*_['@1:ElemXor,'@2:ElemXor] ; 'B:ElemXor <- '_*_['@3:ElemXor,'@4:ElemXor], 'X:`[ElemXor`] <- '_*_['@1:ElemXor,'@3:ElemXor] ; 'Y:`[ElemXor`] <- '_*_['@2:ElemXor,'@4:ElemXor], '@) ; gotOneStepNarrowing( me, interpreter(0), 1, 'f['_*_['@2:ElemXor,'@3:ElemXor],'@1:ElemXor], 'ElemXor, [], 'one, 'A:ElemXor <- '_*_['@1:ElemXor,'@3:ElemXor] ; 'B:ElemXor <- '@2:ElemXor, 'X:`[ElemXor`] <- '_*_['@2:ElemXor,'@3:ElemXor] ; 'Y:`[ElemXor`] <- '@1:ElemXor, '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['@1:ElemXor,'_*_['@2:ElemXor,'@3:ElemXor]], 'ElemXor, [], 'one, 'A:ElemXor <- '_*_['@1:ElemXor,'@3:ElemXor] ; 'B:ElemXor <- '@2:ElemXor, 'X:`[ElemXor`] <- '@1:ElemXor ; 'Y:`[ElemXor`] <- '_*_['@2:ElemXor,'@3:ElemXor], '@) ; gotOneStepNarrowing( me, interpreter(0), 1, 'f['_*_['@2:ElemXor,'@3:ElemXor],'@1:ElemXor], 'ElemXor, [], 'one, 'A:ElemXor <- '@2:ElemXor ; 'B:ElemXor <- '_*_['@1:ElemXor,'@3:ElemXor], 'X:`[ElemXor`] <- '_*_['@2:ElemXor,'@3:ElemXor] ; 'Y:`[ElemXor`] <- '@1:ElemXor, '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['@1:ElemXor,'@2:ElemXor], 'ElemXor, [], 'one, 'A:ElemXor <- '@1:ElemXor ; 'B:ElemXor <- '@2:ElemXor, 'X:`[ElemXor`] <- '@1:ElemXor ; 'Y:`[ElemXor`] <- '@2:ElemXor, '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['@1:ElemXor,'_*_['@2:ElemXor,'@3:ElemXor]], 'ElemXor, [], 'one, 'A:ElemXor <- '@2:ElemXor ; 'B:ElemXor <- '_*_['@1:ElemXor,'@3:ElemXor], 'X:`[ElemXor`] <- '@1:ElemXor ; 'Y:`[ElemXor`] <- '_*_['@2:ElemXor,'@3:ElemXor], '@) ; gotOneStepNarrowing( me, interpreter(0), 1, 'f['@2:ElemXor,'@1:ElemXor], 'ElemXor, [], 'one, 'A:ElemXor <- '@1:ElemXor ; 'B:ElemXor <- '@2:ElemXor, 'X:`[ElemXor`] <- '@2:ElemXor ; 'Y:`[ElemXor`] <- '@1:ElemXor, '@) ; gotOneStepNarrowing(me, interpreter(0), 81, 'f['mt.ElemXor,'_*_['%1:ElemXor,'%2:ElemXor]], 'ElemXor, [], 'one, 'A:ElemXor <- '%1:ElemXor ; 'B:ElemXor <- '%2:ElemXor, 'X:`[ElemXor`] <- 'mt.ElemXor ; 'Y:`[ElemXor`] <- '_*_['%1:ElemXor,'%2:ElemXor], '%) ; gotOneStepNarrowing( me, interpreter(0), 1, 'f['_*_['%1:ElemXor,'%2:ElemXor],'mt.ElemXor], 'ElemXor, [], 'one, 'A:ElemXor <- '%1:ElemXor ; 'B:ElemXor <- '%2:ElemXor, 'X:`[ElemXor`] <- '_*_['%1:ElemXor,'%2:ElemXor] ; 'Y:`[ElemXor`] <- 'mt.ElemXor, '%) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['_*_['%1:`[ElemXor`],'%2:ElemXor,'%4:ElemXor],'_*_['%1:`[ElemXor`], '%3:ElemXor,'%5:ElemXor]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '_*_['%2:ElemXor,'%3:ElemXor] ; 'B:ElemXor <- '_*_['%4:ElemXor,'%5:ElemXor], 'X:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:ElemXor,'%4:ElemXor] ; 'Y:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%3:ElemXor,'%5:ElemXor], '%) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['_*_['%3:`[ElemXor`], '%2:ElemXor,'%4:ElemXor],'_*_['%3:`[ElemXor`],'%1:ElemXor]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '_*_['%1:ElemXor,'%4:ElemXor] ; 'B:ElemXor <- '%2:ElemXor, 'X:`[ElemXor`] <- '_*_['%3:`[ElemXor`],'%2:ElemXor,'%4:ElemXor] ; 'Y:`[ElemXor`] <- '_*_['%3:`[ElemXor`],'%1:ElemXor], '%) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['_*_['%3:`[ElemXor`], '%1:ElemXor],'_*_['%3:`[ElemXor`],'%2:ElemXor,'%4:ElemXor]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '_*_['%1:ElemXor,'%4:ElemXor] ; 'B:ElemXor <- '%2:ElemXor, 'X:`[ElemXor`] <- '_*_['%3:`[ElemXor`],'%1:ElemXor] ; 'Y:`[ElemXor`] <- '_*_['%3:`[ElemXor`],'%2:ElemXor,'%4:ElemXor], '%) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['_*_['%3:`[ElemXor`], '%2:ElemXor,'%4:ElemXor],'_*_['%3:`[ElemXor`],'%1:ElemXor]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '%2:ElemXor ; 'B:ElemXor <- '_*_['%1:ElemXor,'%4:ElemXor], 'X:`[ElemXor`] <- '_*_['%3:`[ElemXor`],'%2:ElemXor,'%4:ElemXor] ; 'Y:`[ElemXor`] <- '_*_['%3:`[ElemXor`],'%1:ElemXor], '%) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['_*_['%3:`[ElemXor`], '%1:ElemXor],'_*_['%3:`[ElemXor`],'%2:ElemXor]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '%1:ElemXor ; 'B:ElemXor <- '%2:ElemXor, 'X:`[ElemXor`] <- '_*_['%3:`[ElemXor`],'%1:ElemXor] ; 'Y:`[ElemXor`] <- '_*_['%3:`[ElemXor`],'%2:ElemXor], '%) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['_*_['%3:`[ElemXor`], '%1:ElemXor],'_*_['%3:`[ElemXor`],'%2:ElemXor,'%4:ElemXor]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '%2:ElemXor ; 'B:ElemXor <- '_*_['%1:ElemXor,'%4:ElemXor], 'X:`[ElemXor`] <- '_*_['%3:`[ElemXor`],'%1:ElemXor] ; 'Y:`[ElemXor`] <- '_*_['%3:`[ElemXor`],'%2:ElemXor,'%4:ElemXor], '%) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['_*_['%3:`[ElemXor`], '%2:ElemXor],'_*_['%3:`[ElemXor`],'%1:ElemXor]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '%1:ElemXor ; 'B:ElemXor <- '%2:ElemXor, 'X:`[ElemXor`] <- '_*_['%3:`[ElemXor`],'%2:ElemXor] ; 'Y:`[ElemXor`] <- '_*_['%3:`[ElemXor`],'%1:ElemXor], '%) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['_*_['%3:`[ElemXor`], '%1:ElemXor,'%2:ElemXor],'%3:`[ElemXor`]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '%1:ElemXor ; 'B:ElemXor <- '%2:ElemXor, 'X:`[ElemXor`] <- '_*_['%3:`[ElemXor`],'%1:ElemXor,'%2:ElemXor] ; 'Y:`[ElemXor`] <- '%3:`[ElemXor`], '%) ; gotOneStepNarrowing(me, interpreter( 0), 1, 'f['%3:`[ElemXor`],'_*_['%3:`[ElemXor`],'%1:ElemXor,'%2:ElemXor]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '%1:ElemXor ; 'B:ElemXor <- '%2:ElemXor, 'X:`[ElemXor`] <- '%3:`[ElemXor`] ; 'Y:`[ElemXor`] <- '_*_['%3:`[ElemXor`],'%1:ElemXor,'%2:ElemXor], '%) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['%1:ElemXor,'%2:ElemXor], 'ElemXor, [], 'one, 'A:ElemXor <- 'mt.ElemXor ; 'B:ElemXor <- '_*_['%1:ElemXor,'%2:ElemXor], 'X:`[ElemXor`] <- '%1:ElemXor ; 'Y:`[ElemXor`] <- '%2:ElemXor, '%) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['%1:ElemXor,'%2:ElemXor], 'ElemXor, [], 'one, 'A:ElemXor <- '_*_['%1:ElemXor,'%2:ElemXor] ; 'B:ElemXor <- 'mt.ElemXor, 'X:`[ElemXor`] <- '%1:ElemXor ; 'Y:`[ElemXor`] <- '%2:ElemXor, '%) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['_*_['%2:ElemXor,'%4:ElemXor],'_*_['%3:ElemXor,'%5:ElemXor]], 'ElemXor, [], 'one, 'A:ElemXor <- '_*_['%1:ElemXor,'%2:ElemXor,'%3:ElemXor] ; 'B:ElemXor <- '_*_['%1:ElemXor,'%4:ElemXor,'%5:ElemXor], 'X:`[ElemXor`] <- '_*_['%2:ElemXor,'%4:ElemXor] ; 'Y:`[ElemXor`] <- '_*_['%3:ElemXor,'%5:ElemXor], '%) ; gotOneStepNarrowing( me, interpreter(0), 1, 'f['_*_['%2:ElemXor,'%4:ElemXor],'%1:ElemXor], 'ElemXor, [], 'one, 'A:ElemXor <- '_*_['%1:ElemXor,'%3:ElemXor,'%4:ElemXor] ; 'B:ElemXor <- '_*_['%2:ElemXor,'%3:ElemXor], 'X:`[ElemXor`] <- '_*_['%2:ElemXor,'%4:ElemXor] ; 'Y:`[ElemXor`] <- '%1:ElemXor, '%) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['%1:ElemXor,'_*_['%2:ElemXor,'%4:ElemXor]], 'ElemXor, [], 'one, 'A:ElemXor <- '_*_['%1:ElemXor,'%3:ElemXor,'%4:ElemXor] ; 'B:ElemXor <- '_*_['%2:ElemXor,'%3:ElemXor], 'X:`[ElemXor`] <- '%1:ElemXor ; 'Y:`[ElemXor`] <- '_*_['%2:ElemXor,'%4:ElemXor], '%) ; gotOneStepNarrowing( me, interpreter(0), 1, 'f['_*_['%2:ElemXor,'%4:ElemXor],'%1:ElemXor], 'ElemXor, [], 'one, 'A:ElemXor <- '_*_['%2:ElemXor,'%3:ElemXor] ; 'B:ElemXor <- '_*_['%1:ElemXor,'%3:ElemXor,'%4:ElemXor], 'X:`[ElemXor`] <- '_*_['%2:ElemXor,'%4:ElemXor] ; 'Y:`[ElemXor`] <- '%1:ElemXor, '%) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['%1:ElemXor,'%2:ElemXor], 'ElemXor, [], 'one, 'A:ElemXor <- '_*_['%1:ElemXor,'%3:ElemXor] ; 'B:ElemXor <- '_*_['%2:ElemXor,'%3:ElemXor], 'X:`[ElemXor`] <- '%1:ElemXor ; 'Y:`[ElemXor`] <- '%2:ElemXor, '%) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['%1:ElemXor,'_*_['%2:ElemXor,'%4:ElemXor]], 'ElemXor, [], 'one, 'A:ElemXor <- '_*_['%2:ElemXor,'%3:ElemXor] ; 'B:ElemXor <- '_*_['%1:ElemXor,'%3:ElemXor,'%4:ElemXor], 'X:`[ElemXor`] <- '%1:ElemXor ; 'Y:`[ElemXor`] <- '_*_['%2:ElemXor,'%4:ElemXor], '%) ; gotOneStepNarrowing( me, interpreter(0), 1, 'f['%2:ElemXor,'%1:ElemXor], 'ElemXor, [], 'one, 'A:ElemXor <- '_*_['%1:ElemXor,'%3:ElemXor] ; 'B:ElemXor <- '_*_['%2:ElemXor,'%3:ElemXor], 'X:`[ElemXor`] <- '%2:ElemXor ; 'Y:`[ElemXor`] <- '%1:ElemXor, '%) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['%1:ElemXor,'%2:ElemXor], 'ElemXor, [], 'one, 'A:ElemXor <- '_*_['%1:ElemXor,'%2:ElemXor,'%3:ElemXor] ; 'B:ElemXor <- '%3:ElemXor, 'X:`[ElemXor`] <- '%1:ElemXor ; 'Y:`[ElemXor`] <- '%2:ElemXor, '%) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['%1:ElemXor,'%2:ElemXor], 'ElemXor, [], 'one, 'A:ElemXor <- '%3:ElemXor ; 'B:ElemXor <- '_*_['%1:ElemXor,'%2:ElemXor,'%3:ElemXor], 'X:`[ElemXor`] <- '%1:ElemXor ; 'Y:`[ElemXor`] <- '%2:ElemXor, '%) ; gotOneStepNarrowing(me, interpreter(0), 49, 'f['@1:`[ElemXor`],'@1:`[ElemXor`]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '@2:ElemXor ; 'B:ElemXor <- '@2:ElemXor, 'X:`[ElemXor`] <- '@1:`[ElemXor`] ; 'Y:`[ElemXor`] <- '@1:`[ElemXor`], '@) ; gotOneStepNarrowing(me, interpreter( 0), 1, 'f['mt.ElemXor,'_*_['@1:ElemXor,'@2:ElemXor]], 'ElemXor, [], 'one, 'A:ElemXor <- '_*_['@1:ElemXor,'@3:ElemXor] ; 'B:ElemXor <- '_*_['@2:ElemXor,'@3:ElemXor], 'X:`[ElemXor`] <- 'mt.ElemXor ; 'Y:`[ElemXor`] <- '_*_['@1:ElemXor,'@2:ElemXor], '@) ; gotOneStepNarrowing( me, interpreter(0), 1, 'f['mt.ElemXor,'@1:ElemXor], 'ElemXor, [], 'one, 'A:ElemXor <- '_*_['@1:ElemXor,'@2:ElemXor] ; 'B:ElemXor <- '@2:ElemXor, 'X:`[ElemXor`] <- 'mt.ElemXor ; 'Y:`[ElemXor`] <- '@1:ElemXor, '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['mt.ElemXor,'@1:ElemXor], 'ElemXor, [], 'one, 'A:ElemXor <- '@2:ElemXor ; 'B:ElemXor <- '_*_['@1:ElemXor,'@2:ElemXor], 'X:`[ElemXor`] <- 'mt.ElemXor ; 'Y:`[ElemXor`] <- '@1:ElemXor, '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['_*_['@1:ElemXor,'@2:ElemXor],'mt.ElemXor], 'ElemXor, [], 'one, 'A:ElemXor <- '_*_['@1:ElemXor,'@3:ElemXor] ; 'B:ElemXor <- '_*_['@2:ElemXor,'@3:ElemXor], 'X:`[ElemXor`] <- '_*_['@1:ElemXor,'@2:ElemXor] ; 'Y:`[ElemXor`] <- 'mt.ElemXor, '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['@1:ElemXor,'mt.ElemXor], 'ElemXor, [], 'one, 'A:ElemXor <- '_*_['@1:ElemXor,'@2:ElemXor] ; 'B:ElemXor <- '@2:ElemXor, 'X:`[ElemXor`] <- '@1:ElemXor ; 'Y:`[ElemXor`] <- 'mt.ElemXor, '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['@1:ElemXor,'mt.ElemXor], 'ElemXor, [], 'one, 'A:ElemXor <- '@2:ElemXor ; 'B:ElemXor <- '_*_['@1:ElemXor,'@2:ElemXor], 'X:`[ElemXor`] <- '@1:ElemXor ; 'Y:`[ElemXor`] <- 'mt.ElemXor, '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['_*_['@3:`[ElemXor`],'@1:ElemXor],'_*_['@3:`[ElemXor`],'@2:ElemXor]], '`[ElemXor`], [], 'one, 'A:ElemXor <- 'mt.ElemXor ; 'B:ElemXor <- '_*_['@1:ElemXor,'@2:ElemXor], 'X:`[ElemXor`] <- '_*_['@3:`[ElemXor`],'@1:ElemXor] ; 'Y:`[ElemXor`] <- '_*_['@3:`[ElemXor`],'@2:ElemXor], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['_*_['@3:`[ElemXor`], '@1:ElemXor],'_*_['@3:`[ElemXor`],'@2:ElemXor]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '_*_['@1:ElemXor,'@2:ElemXor] ; 'B:ElemXor <- 'mt.ElemXor, 'X:`[ElemXor`] <- '_*_['@3:`[ElemXor`],'@1:ElemXor] ; 'Y:`[ElemXor`] <- '_*_['@3:`[ElemXor`],'@2:ElemXor], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['_*_['@1:`[ElemXor`], '@3:ElemXor,'@5:ElemXor],'_*_['@1:`[ElemXor`],'@4:ElemXor,'@6:ElemXor]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '_*_['@2:ElemXor,'@3:ElemXor,'@4:ElemXor] ; 'B:ElemXor <- '_*_['@2:ElemXor,'@5:ElemXor,'@6:ElemXor], 'X:`[ElemXor`] <- '_*_['@1:`[ElemXor`],'@3:ElemXor,'@5:ElemXor] ; 'Y:`[ElemXor`] <- '_*_['@1:`[ElemXor`],'@4:ElemXor,'@6:ElemXor], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['_*_['@3:`[ElemXor`], '@2:ElemXor,'@5:ElemXor],'_*_['@3:`[ElemXor`],'@1:ElemXor]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '_*_['@1:ElemXor,'@4:ElemXor,'@5:ElemXor] ; 'B:ElemXor <- '_*_['@2:ElemXor,'@4:ElemXor], 'X:`[ElemXor`] <- '_*_['@3:`[ElemXor`],'@2:ElemXor,'@5:ElemXor] ; 'Y:`[ElemXor`] <- '_*_['@3:`[ElemXor`],'@1:ElemXor], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['_*_['@3:`[ElemXor`], '@1:ElemXor],'_*_['@3:`[ElemXor`],'@2:ElemXor,'@5:ElemXor]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '_*_['@1:ElemXor,'@4:ElemXor,'@5:ElemXor] ; 'B:ElemXor <- '_*_['@2:ElemXor,'@4:ElemXor], 'X:`[ElemXor`] <- '_*_['@3:`[ElemXor`],'@1:ElemXor] ; 'Y:`[ElemXor`] <- '_*_['@3:`[ElemXor`],'@2:ElemXor,'@5:ElemXor], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['_*_['@3:`[ElemXor`], '@2:ElemXor,'@5:ElemXor],'_*_['@3:`[ElemXor`],'@1:ElemXor]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '_*_['@2:ElemXor,'@4:ElemXor] ; 'B:ElemXor <- '_*_['@1:ElemXor,'@4:ElemXor,'@5:ElemXor], 'X:`[ElemXor`] <- '_*_['@3:`[ElemXor`],'@2:ElemXor,'@5:ElemXor] ; 'Y:`[ElemXor`] <- '_*_['@3:`[ElemXor`],'@1:ElemXor], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['_*_['@3:`[ElemXor`], '@1:ElemXor],'_*_['@3:`[ElemXor`],'@2:ElemXor]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '_*_['@1:ElemXor,'@4:ElemXor] ; 'B:ElemXor <- '_*_['@2:ElemXor,'@4:ElemXor], 'X:`[ElemXor`] <- '_*_['@3:`[ElemXor`],'@1:ElemXor] ; 'Y:`[ElemXor`] <- '_*_['@3:`[ElemXor`],'@2:ElemXor], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['_*_['@3:`[ElemXor`], '@1:ElemXor],'_*_['@3:`[ElemXor`],'@2:ElemXor,'@5:ElemXor]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '_*_['@2:ElemXor,'@4:ElemXor] ; 'B:ElemXor <- '_*_['@1:ElemXor,'@4:ElemXor,'@5:ElemXor], 'X:`[ElemXor`] <- '_*_['@3:`[ElemXor`],'@1:ElemXor] ; 'Y:`[ElemXor`] <- '_*_['@3:`[ElemXor`],'@2:ElemXor,'@5:ElemXor], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['_*_['@3:`[ElemXor`], '@2:ElemXor],'_*_['@3:`[ElemXor`],'@1:ElemXor]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '_*_['@1:ElemXor,'@4:ElemXor] ; 'B:ElemXor <- '_*_['@2:ElemXor,'@4:ElemXor], 'X:`[ElemXor`] <- '_*_['@3:`[ElemXor`],'@2:ElemXor] ; 'Y:`[ElemXor`] <- '_*_['@3:`[ElemXor`],'@1:ElemXor], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['_*_['@3:`[ElemXor`], '@1:ElemXor],'_*_['@3:`[ElemXor`],'@2:ElemXor]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '_*_['@1:ElemXor,'@2:ElemXor,'@4:ElemXor] ; 'B:ElemXor <- '@4:ElemXor, 'X:`[ElemXor`] <- '_*_['@3:`[ElemXor`],'@1:ElemXor] ; 'Y:`[ElemXor`] <- '_*_['@3:`[ElemXor`],'@2:ElemXor], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['_*_['@3:`[ElemXor`], '@1:ElemXor],'_*_['@3:`[ElemXor`],'@2:ElemXor]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '@4:ElemXor ; 'B:ElemXor <- '_*_['@1:ElemXor,'@2:ElemXor,'@4:ElemXor], 'X:`[ElemXor`] <- '_*_['@3:`[ElemXor`],'@1:ElemXor] ; 'Y:`[ElemXor`] <- '_*_['@3:`[ElemXor`],'@2:ElemXor], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['_*_['@2:`[ElemXor`], '@1:ElemXor],'@2:`[ElemXor`]], '`[ElemXor`], [], 'one, 'A:ElemXor <- 'mt.ElemXor ; 'B:ElemXor <- '@1:ElemXor, 'X:`[ElemXor`] <- '_*_['@2:`[ElemXor`],'@1:ElemXor] ; 'Y:`[ElemXor`] <- '@2:`[ElemXor`], '@) ; gotOneStepNarrowing(me, interpreter( 0), 1, 'f['_*_['@2:`[ElemXor`],'@1:ElemXor],'@2:`[ElemXor`]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '@1:ElemXor ; 'B:ElemXor <- 'mt.ElemXor, 'X:`[ElemXor`] <- '_*_['@2:`[ElemXor`],'@1:ElemXor] ; 'Y:`[ElemXor`] <- '@2:`[ElemXor`], '@) ; gotOneStepNarrowing(me, interpreter( 0), 1, 'f['_*_['@3:`[ElemXor`],'@1:ElemXor,'@2:ElemXor],'@3:`[ElemXor`]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '_*_['@1:ElemXor,'@4:ElemXor] ; 'B:ElemXor <- '_*_['@2:ElemXor,'@4:ElemXor], 'X:`[ElemXor`] <- '_*_['@3:`[ElemXor`],'@1:ElemXor,'@2:ElemXor] ; 'Y:`[ElemXor`] <- '@3:`[ElemXor`], '@) ; gotOneStepNarrowing(me, interpreter( 0), 1, 'f['_*_['@2:`[ElemXor`],'@1:ElemXor],'@2:`[ElemXor`]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '_*_['@1:ElemXor,'@3:ElemXor] ; 'B:ElemXor <- '@3:ElemXor, 'X:`[ElemXor`] <- '_*_['@2:`[ElemXor`],'@1:ElemXor] ; 'Y:`[ElemXor`] <- '@2:`[ElemXor`], '@) ; gotOneStepNarrowing(me, interpreter( 0), 1, 'f['_*_['@2:`[ElemXor`],'@1:ElemXor],'@2:`[ElemXor`]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '@3:ElemXor ; 'B:ElemXor <- '_*_['@1:ElemXor,'@3:ElemXor], 'X:`[ElemXor`] <- '_*_['@2:`[ElemXor`],'@1:ElemXor] ; 'Y:`[ElemXor`] <- '@2:`[ElemXor`], '@) ; gotOneStepNarrowing(me, interpreter( 0), 1, 'f['@2:`[ElemXor`],'_*_['@2:`[ElemXor`],'@1:ElemXor]], '`[ElemXor`], [], 'one, 'A:ElemXor <- 'mt.ElemXor ; 'B:ElemXor <- '@1:ElemXor, 'X:`[ElemXor`] <- '@2:`[ElemXor`] ; 'Y:`[ElemXor`] <- '_*_['@2:`[ElemXor`],'@1:ElemXor], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['@2:`[ElemXor`],'_*_[ '@2:`[ElemXor`],'@1:ElemXor]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '@1:ElemXor ; 'B:ElemXor <- 'mt.ElemXor, 'X:`[ElemXor`] <- '@2:`[ElemXor`] ; 'Y:`[ElemXor`] <- '_*_['@2:`[ElemXor`],'@1:ElemXor], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['@3:`[ElemXor`],'_*_[ '@3:`[ElemXor`],'@1:ElemXor,'@2:ElemXor]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '_*_['@1:ElemXor,'@4:ElemXor] ; 'B:ElemXor <- '_*_['@2:ElemXor,'@4:ElemXor], 'X:`[ElemXor`] <- '@3:`[ElemXor`] ; 'Y:`[ElemXor`] <- '_*_['@3:`[ElemXor`],'@1:ElemXor,'@2:ElemXor], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['@2:`[ElemXor`],'_*_[ '@2:`[ElemXor`],'@1:ElemXor]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '_*_['@1:ElemXor,'@3:ElemXor] ; 'B:ElemXor <- '@3:ElemXor, 'X:`[ElemXor`] <- '@2:`[ElemXor`] ; 'Y:`[ElemXor`] <- '_*_['@2:`[ElemXor`],'@1:ElemXor], '@) ; gotOneStepNarrowing(me, interpreter(0), 1, 'f['@2:`[ElemXor`],'_*_[ '@2:`[ElemXor`],'@1:ElemXor]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '@3:ElemXor ; 'B:ElemXor <- '_*_['@1:ElemXor,'@3:ElemXor], 'X:`[ElemXor`] <- '@2:`[ElemXor`] ; 'Y:`[ElemXor`] <- '_*_['@2:`[ElemXor`],'@1:ElemXor], '@)),start: ('_*_[ 'A:ElemXor,'B:ElemXor]),irred: empty > noSuchResult(me, interpreter(0), 0, true) ========================================== erewrite in NARROW-TEST2 : <> < me : User | start: ('_*_['A:ElemXor, 'B:ElemXor]),irred: empty > createInterpreter(interpreterManager, me, none) . rewrites: 2273 mb applications: 0 equational rewrites: 227 rule rewrites: 3 variant narrowing steps: 2042 narrowing steps: 1 result Configuration: <> < me : User | soln: 2,got: gotOneStepNarrowing(me, interpreter(0), 2268, 'f['_*_['%1:`[ElemXor`],'%2:ElemXor,'%4:ElemXor], '_*_['%1:`[ElemXor`],'%3:ElemXor,'%5:ElemXor]], '`[ElemXor`], [], 'one, 'A:ElemXor <- '_*_['%2:ElemXor,'%3:ElemXor] ; 'B:ElemXor <- '_*_['%4:ElemXor,'%5:ElemXor], 'X:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%2:ElemXor,'%4:ElemXor] ; 'Y:`[ElemXor`] <- '_*_['%1:`[ElemXor`],'%3:ElemXor,'%5:ElemXor], '%),start: ( '_*_['A:ElemXor,'B:ElemXor]),irred: empty > noSuchResult(me, interpreter( 0), 0, true) Bye. maude-3.1/tests/Meta/metaIntParse.expected0000644000175200017520000000416013562401403015543 00000000000000========================================== erewrite in PARSE-TEST : <> < me : User | qids: '1/2 > createInterpreter( interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > parsedTerm(me, interpreter(0), { '_/_['s_['0.Zero],'s_^2['0.Zero]],'PosRat}) ========================================== erewrite in PARSE-TEST : <> < me : User | qids: ('1/2 '+ 'X:Rat) > createInterpreter(interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > parsedTerm(me, interpreter(0), { '_+_['_/_['s_['0.Zero],'s_^2['0.Zero]],'X:Rat],'Rat}) ========================================== erewrite in PARSE-TEST : <> < me : User | qids: ('1/2 '+ 'X) > createInterpreter(interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > parsedTerm(me, interpreter(0), { '_+_['_/_['s_['0.Zero],'s_^2['0.Zero]],'X:Rat],'Rat}) ========================================== erewrite in PARSE-TEST : <> < me : User | qids: ('1/2 '+ 'bad) > createInterpreter(interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > parsedTerm(me, interpreter(0), noParse(2)) ========================================== erewrite in PARSE-TEST : <> < me : User | qids: ('1/2 '- '1) > createInterpreter(interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > parsedTerm(me, interpreter(0), { '_-_['_/_['s_['0.Zero],'s_^2['0.Zero]],'s_['0.Zero]],'Rat}) ========================================== erewrite in PARSE-TEST : <> < me : User | qids: ('1/2 '- '1 '- '1 '/ '2) > createInterpreter(interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > parsedTerm(me, interpreter(0), { '_-_['_-_['_/_['s_['0.Zero],'s_^2['0.Zero]],'s_['0.Zero]],'_/_['s_[ '0.Zero],'s_^2['0.Zero]]],'Rat}) ========================================== erewrite in PARSE-TEST : <> < me : User | qids: '0 > createInterpreter( interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > parsedTerm(me, interpreter(0), ambiguity({'0.Zero,'Zero}, {'0.Foo,'Foo})) Bye. maude-3.1/tests/Meta/metaVariantUnify0000755000175200017520000000037412006074052014641 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaVariantUnify.maude -no-banner -no-advise \ > metaVariantUnify.out 2>&1 diff $srcdir/metaVariantUnify.expected metaVariantUnify.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaIntReplace2.maude0000644000175200017520000001453113366052720015431 00000000000000set show timing off . set show advisories off . *** *** Test replacing modules and views in meta-interpreter with op->term mappings. *** load metaInterpreter set include BOOL off . fth T is sort Elt . op f : Elt -> Elt . endfth fmod M{X :: T} is op g : X$Elt -> X$Elt . var X : X$Elt . eq g(X) = f(f(X)) . endfm fmod FOO is sort Foo . op h : Foo Foo -> Foo . op c : -> Foo . endfm view V from T to FOO is sort Elt to Foo . var X : Elt . op f(X) to term h(X, c) . endv fmod TEST is inc M{V} . endfm red g(X:Foo) . mod META1 is pr META-INTERPRETER . op T : -> Module . eq T = upModule('T, false) . op M : -> Module . eq M = upModule('M, false) . op FOO : -> Module . eq FOO = upModule('FOO, false) . op V : -> View . eq V = upView('V) . op TEST : -> Module . eq TEST = upModule('TEST, false) . endm red T . red M . red FOO . red V . red TEST . mod META2 is inc META1 . op me : -> Oid . op User : -> Cid . var X Y Z : Oid . var N : Nat . var T : Term . var S : Sort . sort State . ops 1 2 3 4 5 6 7 8 : -> State [ctor] . op state:_ : State -> Attribute [ctor] . rl < X : User | state: 1 > createdInterpreter(X, Y, Z) => < X : User | state: 2 > insertModule(Z, X, T) . rl < X : User | state: 2 > insertedModule(X, Y) => < X : User | state: 3 > insertModule(Y, X, M) . rl < X : User | state: 3 > insertedModule(X, Y) => < X : User | state: 4 > insertModule(Y, X, FOO) . rl < X : User | state: 4 > insertedModule(X, Y) => < X : User | state: 5 > insertView(Y, X, V) . rl < X : User | state: 5 > insertedView(X, Y) => < X : User | state: 6 > insertModule(Y, X, TEST) . rl < X : User | state: 6 > insertedModule(X, Y) => < X : User | state: 7 > reduceTerm(Y, X, 'TEST, 'g['X:Foo]) . endm erew in META2 : <> < me : User | state: 1 > createInterpreter(interpreterManager, me, none) . mod META3 is inc META1 . op me : -> Oid . op User : -> Cid . var X Y Z : Oid . var N : Nat . var T : Term . var S : Sort . sort State . ops 1 2 3 4 5 6 7 8 9 : -> State [ctor] . op state:_ : State -> Attribute [ctor] . op M2 : -> Module . eq M2 = ( fmod 'M{'X :: 'T} is nil sorts none . none op 'g : 'X$Elt -> 'X$Elt [none] . none eq 'g['X:X$Elt] = 'f['f['f['X:X$Elt]]] [none] . endfm ) . rl < X : User | state: 1 > createdInterpreter(X, Y, Z) => < X : User | state: 2 > insertModule(Z, X, T) . rl < X : User | state: 2 > insertedModule(X, Y) => < X : User | state: 3 > insertModule(Y, X, M) . rl < X : User | state: 3 > insertedModule(X, Y) => < X : User | state: 4 > insertModule(Y, X, FOO) . rl < X : User | state: 4 > insertedModule(X, Y) => < X : User | state: 5 > insertView(Y, X, V) . rl < X : User | state: 5 > insertedView(X, Y) => < X : User | state: 6 > insertModule(Y, X, TEST) . rl < X : User | state: 6 > insertedModule(X, Y) => < X : User | state: 7 > reduceTerm(Y, X, 'TEST, 'g['X:Foo]) . rl < X : User | state: 7 > reducedTerm(X, Y, N, T, S) => < X : User | state: 8 > insertModule(Y, X, M2) . rl < X : User | state: 8 > insertedModule(X, Y) => < X : User | state: 9 > reduceTerm(Y, X, 'TEST, 'g['X:Foo]) . endm erew in META3 : <> < me : User | state: 1 > createInterpreter(interpreterManager, me, none) . mod META4 is inc META1 . op me : -> Oid . op User : -> Cid . var X Y Z : Oid . var N : Nat . var T : Term . var S : Sort . sort State . ops 1 2 3 4 5 6 7 8 9 : -> State [ctor] . op state:_ : State -> Attribute [ctor] . op FOO2 : -> Module . eq FOO2 = ( fmod 'FOO is nil sorts 'Foo . none op 'c : nil -> 'Foo [none] . op 'h : 'Foo 'Foo -> 'Foo [comm] . none none endfm ) . rl < X : User | state: 1 > createdInterpreter(X, Y, Z) => < X : User | state: 2 > insertModule(Z, X, T) . rl < X : User | state: 2 > insertedModule(X, Y) => < X : User | state: 3 > insertModule(Y, X, M) . rl < X : User | state: 3 > insertedModule(X, Y) => < X : User | state: 4 > insertModule(Y, X, FOO) . rl < X : User | state: 4 > insertedModule(X, Y) => < X : User | state: 5 > insertView(Y, X, V) . rl < X : User | state: 5 > insertedView(X, Y) => < X : User | state: 6 > insertModule(Y, X, TEST) . rl < X : User | state: 6 > insertedModule(X, Y) => < X : User | state: 7 > reduceTerm(Y, X, 'TEST, 'g['X:Foo]) . rl < X : User | state: 7 > reducedTerm(X, Y, N, T, S) => < X : User | state: 8 > insertModule(Y, X, FOO2) . rl < X : User | state: 8 > insertedModule(X, Y) => < X : User | state: 9 > reduceTerm(Y, X, 'TEST, 'g['X:Foo]) . endm erew in META4 : <> < me : User | state: 1 > createInterpreter(interpreterManager, me, none) . mod META5 is inc META1 . op me : -> Oid . op User : -> Cid . var X Y Z : Oid . var N : Nat . var T : Term . var S : Sort . sort State . ops 1 2 3 4 5 6 7 8 9 10 : -> State [ctor] . op state:_ : State -> Attribute [ctor] . op FOO2 : -> Module . eq FOO2 = ( fmod 'FOO is nil sorts 'Foo . none op 'd : nil -> 'Foo [none] . op 'k : 'Foo 'Foo -> 'Foo [none] . none none endfm ) . op V2 : -> View . eq V2 = ( view 'V from 'T to 'FOO is sort 'Elt to 'Foo . op 'f['X:Elt] to term 'k['X:Foo,'d.Foo] . none endv ) . rl < X : User | state: 1 > createdInterpreter(X, Y, Z) => < X : User | state: 2 > insertModule(Z, X, T) . rl < X : User | state: 2 > insertedModule(X, Y) => < X : User | state: 3 > insertModule(Y, X, M) . rl < X : User | state: 3 > insertedModule(X, Y) => < X : User | state: 4 > insertModule(Y, X, FOO) . rl < X : User | state: 4 > insertedModule(X, Y) => < X : User | state: 5 > insertView(Y, X, V) . rl < X : User | state: 5 > insertedView(X, Y) => < X : User | state: 6 > insertModule(Y, X, TEST) . rl < X : User | state: 6 > insertedModule(X, Y) => < X : User | state: 7 > reduceTerm(Y, X, 'TEST, 'g['X:Foo]) . rl < X : User | state: 7 > reducedTerm(X, Y, N, T, S) => < X : User | state: 8 > insertModule(Y, X, FOO2) . rl < X : User | state: 8 > insertedModule(X, Y) => < X : User | state: 9 > insertView(Y, X, V2) . rl < X : User | state: 9 > insertedView(X, Y) => < X : User | state: 10 > reduceTerm(Y, X, 'TEST, 'g['X:Foo]) . endm erew in META5 : <> < me : User | state: 1 > createInterpreter(interpreterManager, me, none) . maude-3.1/tests/Meta/metaSort.maude0000644000175200017520000001061110154226762014244 00000000000000set show timing off . set show advisories off . select META-LEVEL . red sortLeq( fmod 'FOO is nil sorts 'NzNat ; 'Nat ; 'NzInt ; 'Int . subsort 'NzNat < 'Nat . subsort 'NzNat < 'NzInt . subsort 'Nat < 'Int . subsort 'NzInt < 'Int . none none none endfm, 'NzNat, 'Int) . red sortLeq( fmod 'FOO is nil sorts 'NzNat ; 'Nat ; 'NzInt ; 'Int . subsort 'NzNat < 'Nat . subsort 'NzNat < 'NzInt . subsort 'Nat < 'Int . subsort 'NzInt < 'Int . none none none endfm, 'Int, 'NzInt) . red sameKind( fmod 'FOO is nil sorts 'NzNat ; 'Nat ; 'NzInt ; 'Int . subsort 'NzNat < 'Nat . subsort 'NzNat < 'NzInt . subsort 'Nat < 'Int . subsort 'NzInt < 'Int . none none none endfm, '`[Int`], 'NzInt) . red sameKind( fmod 'FOO is protecting 'BOOL . sorts 'NzNat ; 'Nat ; 'NzInt ; 'Int . subsort 'NzNat < 'Nat . subsort 'NzNat < 'NzInt . subsort 'Nat < 'Int . subsort 'NzInt < 'Int . none none none endfm, '`[Int`], 'Bool) . red leastSort( fmod 'FOO is protecting 'FLOAT . sorts none . none none none none endfm, 'pi.Float) . red completeName( fmod 'FOO is protecting 'BOOL . sorts 'NzNat ; 'Nat ; 'NzInt . subsort 'NzNat < 'Nat . subsort 'NzNat < 'NzInt . none none none endfm, '`[NzInt`]) . red completeName( fmod 'FOO is protecting 'BOOL . sorts 'NzNat ; 'Nat ; 'NzInt . subsort 'NzNat < 'Nat . subsort 'NzNat < 'NzInt . none none none endfm, '`[NzInt`,Nat`]) . red lesserSorts( fmod 'FOO is protecting 'BOOL . sorts 'NzNat ; 'Nat ; 'NzInt ; 'Int . subsort 'NzNat < 'Nat . subsort 'NzNat < 'NzInt . subsort 'Nat < 'Int . subsort 'NzInt < 'Int . none none none endfm, 'Int) . red lesserSorts( fmod 'FOO is protecting 'BOOL . sorts 'NzNat ; 'Nat ; 'NzInt ; 'Int . subsort 'NzNat < 'Nat . subsort 'NzNat < 'NzInt . subsort 'Nat < 'Int . subsort 'NzInt < 'Int . none none none endfm, 'NzNat) . red lesserSorts( fmod 'FOO is protecting 'BOOL . sorts 'NzNat ; 'Nat ; 'NzInt ; 'Int . subsort 'NzNat < 'Nat . subsort 'NzNat < 'NzInt . subsort 'Nat < 'Int . subsort 'NzInt < 'Int . none none none endfm, 'Nat) . red glbSorts( fmod 'FOO is protecting 'BOOL . sorts 'NzNat ; 'Nat ; 'NzInt ; 'Int . subsort 'NzNat < 'Nat . subsort 'NzNat < 'NzInt . subsort 'Nat < 'Int . subsort 'NzInt < 'Int . none none none endfm, 'Nat, 'NzInt) . red glbSorts( fmod 'FOO is protecting 'BOOL . sorts 'NzNat ; 'Nat ; 'NzInt ; 'Int . subsort 'NzNat < 'Nat . subsort 'NzNat < 'NzInt . subsort 'Nat < 'Int . subsort 'NzInt < 'Int . none none none endfm, 'Nat, 'Int) . red glbSorts( fmod 'FOO is protecting 'BOOL . sorts 'Nat ; 'NzInt ; 'Int . subsort 'Nat < 'Int . subsort 'NzInt < 'Int . none none none endfm, 'Nat, 'NzInt) . red getKind(fmod 'FOO is protecting 'FLOAT . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm, 'Foo) . red getKind(fmod 'FOO is protecting 'FLOAT . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm, 'Bar) . red getKind(fmod 'FOO is protecting 'FLOAT . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm, '`[Bar`]) . red getKinds(fmod 'FOO is nil sorts none . none none none none endfm) . red getKinds(fmod 'FOO is protecting 'BOOL . sorts none . none none none none endfm) . red getKinds(fmod 'FOO is protecting 'META-LEVEL . sorts none . none none none none endfm) . red maximalSorts(fmod 'FOO is protecting 'META-LEVEL . sorts none . none none none none endfm, '`[Qid`]) . red minimalSorts(fmod 'FOO is protecting 'META-LEVEL . sorts none . none none none none endfm, '`[Qid`]) . *** These two don't reduce because the 2nd arg should be a kind red maximalSorts(fmod 'FOO is protecting 'META-LEVEL . sorts none . none none none none endfm, 'Qid) . red minimalSorts(fmod 'FOO is protecting 'META-LEVEL . sorts none . none none none none endfm, 'Qid) . red maximalAritySet(['RAT], '_+_, 'Nat 'Nat, 'PosRat) . red maximalAritySet(['RAT], '_+_, 'Nat 'Nat, 'Rat) . red maximalAritySet(['RAT], '_/_, 'Nat 'Nat, 'Nat) . red maximalAritySet(['META-LEVEL], '_;_, 'TypeSet 'TypeSet, 'KindSet) . red maximalAritySet(['NAT], '0, nil, 'Nat) . red glbSorts(['RAT], '`[Int`], 'Int) . maude-3.1/tests/Meta/russianDollsNonFlat20000755000175200017520000000041413473365471015415 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/russianDollsNonFlat2.maude -no-banner -no-advise \ > russianDollsNonFlat2.out 2>&1 diff $srcdir/russianDollsNonFlat2.expected russianDollsNonFlat2.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaTerm.maude0000644000175200017520000000052310025725533014222 00000000000000set show timing off . set show advisories off . select QID . red 'a:s . select META-TERM . red 'a:s . red ''a:b . red getName('a.s) . red getType('a.s) . red getName('a:s) . red getType('a:s) . red '`[s`] . red '`[s`,t`] . red getName('a.`[s`,t`]) . red getType('a.`[s`,t`]) . red getName('a:`[s`,t`]) . red getType('a:`[s`,t`]) . maude-3.1/tests/Meta/metaSpecial.maude0000644000175200017520000000736110025725516014703 00000000000000set show timing off . set show advisories off . red in META-LEVEL : metaParse( fmod 'FOO is including 'QID . sorts 'Token ; 'Foo . none op 'token : 'Qid -> 'Token [special(id-hook('Bubble, '1 '1) op-hook('qidSymbol, ', nil, 'Qid))] . op '`[_`] : 'Token -> 'Foo [none] . none none endfm, '`[ 'unseen '`] , anyType) . red in META-LEVEL : metaParse( fmod 'FOO is including 'QID-LIST . sorts 'Token ; 'Foo . none op 'token : 'Qid -> 'Token [special(id-hook('Bubble, '0 '1) op-hook('qidSymbol, ', nil, 'Qid) op-hook('nilQidListSymbol, 'nil, nil, 'QidList) id-hook('Exclude, 'assoc 'com 'memo))] . op '`[_`] : 'Token -> 'Foo [none] . none none endfm, '`[ '`] , anyType) . red in META-LEVEL : metaParse( fmod 'FOO is including 'QID-LIST . sorts 'Token ; 'Foo . none op 'tokens : 'Qid -> 'Token [special(id-hook('Bubble, '0 '10) op-hook('qidSymbol, ', nil, 'Qid) op-hook('nilQidListSymbol, 'nil, nil, 'QidList) op-hook('qidListSymbol, '__, 'QidList 'QidList, 'QidList) id-hook('Exclude, 'assoc 'com 'memo))] . op '`[_`] : 'Token -> 'Foo [none] . none none endfm, '`[ 'a 'b 'c '`] , anyType) . red in META-LEVEL : metaReduce( fmod 'FOO is nil sorts 'Foo . none op 'a : nil -> 'Foo [none] . none none endfm, '_::`Foo['a.Foo]) . red in META-LEVEL : metaReduce( fmod 'FOO is nil sorts 'Foo ; 'Bool . none op 'true : nil -> 'Bool [special(id-hook('SystemTrue, nil))] . op 'false : nil -> 'Bool [special(id-hook('SystemFalse, nil))] . op 'a : nil -> 'Foo [none] . none none endfm, '_::`Foo['a.Foo]) . red in META-LEVEL : metaReduce( fmod 'FOO is nil sorts 'Foo . none op 'id : nil -> 'Foo [none] . op '+ : 'Foo 'Foo -> 'Foo [id('id.Foo)] . op 'a : nil -> 'Foo [none] . none none endfm, '+['a.Foo, 'id.Foo]) . red in META-LEVEL : metaReduce( fmod 'FOO is nil sorts 'Foo . none op 'id : nil -> 'Foo [none] . op '+ : 'Foo 'Foo -> 'Foo [left-id('id.Foo)] . op 'a : nil -> 'Foo [none] . none none endfm, '+['a.Foo, 'id.Foo]) . red in META-LEVEL : metaReduce( fmod 'FOO is nil sorts 'Foo . none op '+ : 'Foo 'Foo -> 'Foo [right-id('id.Foo)] . op 'id : nil -> 'Foo [none] . op 'a : nil -> 'Foo [none] . none none endfm, '+['a.Foo, 'id.Foo]) . red in META-LEVEL : metaReduce( fmod 'FOO is nil sorts 'Foo ; 'Bool . none op 'itef : 'Bool 'Universal 'Universal -> 'Universal [special(id-hook('BranchSymbol, nil) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op 'true : nil -> 'Bool [none] . op 'false : nil -> 'Bool [none] . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . none none endfm, 'itef['true.Bool, 'a.Foo, 'b.Foo]) . red in META-LEVEL : metaReduce( fmod 'FOO is nil sorts 'Foo ; 'Bool . none op 'itef : 'Bool 'Universal 'Universal -> 'Universal [special(id-hook('BranchSymbol, nil) term-hook('trueTerm, 'true.Bool) term-hook('falseTerm, 'false.Bool))] . op 'true : nil -> 'Bool [none] . op 'false : nil -> 'Bool [none] . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . none none endfm, 'itef['false.Bool, 'a.Foo, 'b.Foo]) . red in META-LEVEL : metaReduce( fmod 'FOO is nil sorts 'Foo ; 'Bit . none op '= : 'Universal 'Universal -> 'Bit [special(id-hook('EqualitySymbol, nil) term-hook('equalTerm, '1.Bit) term-hook('notEqualTerm, '0.Bit))] . op '1 : nil -> 'Bit [none] . op '0 : nil -> 'Bit [none] . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . none none endfm, '=['a.Foo, 'b.Foo]) . maude-3.1/tests/Meta/metaIntApply0000755000175200017520000000035413372446357014002 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaIntApply.maude -no-banner -no-advise \ > metaIntApply.out 2>&1 diff $srcdir/metaIntApply.expected metaIntApply.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaIntVariantUnify20000755000175200017520000000041413724264561015407 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaIntVariantUnify2.maude -no-banner -no-advise \ > metaIntVariantUnify2.out 2>&1 diff $srcdir/metaIntVariantUnify2.expected metaIntVariantUnify2.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaParse.expected0000644000175200017520000000542113560112350015067 00000000000000========================================== reduce in META-LEVEL : metaParse(fmod 'FOO is protecting 'FLOAT . sorts none . none none none none endfm, '1.0 '+ '1.0, anyType) . rewrites: 2 result ResultPair: {'_+_['1.0.FiniteFloat,'1.0.FiniteFloat],'Float} ========================================== reduce in META-LEVEL : metaParse(fmod 'FOO is including 'RAT . sorts 'Foo . none none none none endfm, '3, anyType) . rewrites: 2 result ResultPair: {'s_^3['0.Zero],'NzNat} ========================================== reduce in META-LEVEL : metaParse(fmod 'FOO is including 'RAT . sorts 'Foo . none none none none endfm, '-3, anyType) . rewrites: 2 result ResultPair: {'-_['s_^3['0.Zero]],'NzInt} ========================================== reduce in META-LEVEL : metaParse(fmod 'FOO is including 'RAT . sorts 'Foo . none none none none endfm, '-2/3, anyType) . rewrites: 2 result ResultPair: {'_/_['-_['s_^2['0.Zero]],'s_^3['0.Zero]],'NzRat} ========================================== reduce in META-LEVEL : metaParse(fmod 'FOO is including 'RAT . sorts 'Foo . none none none none endfm, 's_^2 '`( '0 '`), anyType) . rewrites: 2 result ResultPair: {'s_^2['0.Zero],'NzNat} ========================================== reduce in META-LEVEL : metaParse(fmod 'FOO is including 'RAT . sorts 'Foo . none none none none endfm, '-256789/387654, anyType) . rewrites: 2 result ResultPair: {'_/_['-_['s_^256789['0.Zero]],'s_^387654['0.Zero]],'NzRat} ========================================== reduce in META-LEVEL : metaParse(fmod 'FOO is including 'BOOL . sorts 'Foo . none op 's : 'Bool -> 'Bool [iter] . none none endfm, 's^1234 '`( 'true '`), anyType) . rewrites: 2 result ResultPair: {'s^1234['true.Bool],'Bool} ========================================== reduce in META-LEVEL : metaParse(fmod 'FOO is protecting 'FLOAT . sorts none . none none none none endfm, 'X:Float, 'X '+ '1.0, anyType) . rewrites: 1 result ResultPair: {'_+_['X:Float,'1.0.FiniteFloat],'Float} ========================================== reduce in META-LEVEL : metaParse(fmod 'FOO is protecting 'FLOAT . sorts none . none none none none endfm, 'X:Float ; 'Y:Float, 'X '+ '1.0, anyType) . rewrites: 1 result ResultPair: {'_+_['X:Float,'1.0.FiniteFloat],'Float} ========================================== reduce in META-LEVEL : metaParse(fmod 'FOO is protecting 'FLOAT . sorts none . none none none none endfm, 'X:Float ; 'Y:Float, 'X '+ 'Y, anyType) . rewrites: 1 result ResultPair: {'_+_['X:Float,'Y:Float],'Float} ========================================== reduce in META-LEVEL : metaParse(fmod 'FOO is protecting 'FLOAT . sorts none . none none none none endfm, 'X:Float, 'X '+ 'Y, anyType) . rewrites: 1 result ResultPair?: noParse(2) Bye. maude-3.1/tests/Meta/metaIntVariant.maude0000644000175200017520000001047013360254763015403 00000000000000set show timing off . set show advisories off . *** *** Test variant generation in the meta-interpreter. *** load metaInterpreter fmod XOR is sort XOR . sort Elem . ops c1 c2 c3 c4 : -> Elem . subsort Elem < XOR . op _+_ : XOR XOR -> XOR [ctor assoc comm] . op 0 : -> XOR . op a : -> XOR . vars X Y : XOR . eq Y + 0 = Y [variant] . eq X + X = 0 [variant] . eq X + X + Y = Y [variant] . endfm mod VARIANT-TEST is pr META-INTERPRETER . sort MsgList . subsort Msg < MsgList . op me : -> Oid . op User : -> Cid . op problem:(_,_) : Term TermList -> Attribute . op soln:_ : Nat -> Attribute . op result : MsgList -> Attribute . op _,_ : MsgList MsgList -> MsgList [assoc id: nil] . op nil : -> MsgList . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . vars T V : Term . var TL : TermList . var S : Substitution . var Q : Qid . var B : Bool . var P : Parent . var R : RewriteCount . var ML : MsgList . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('XOR, true)) . rl < X : User | AS, problem:(T, TL) > insertedModule(X, Y) => < X : User | AS, problem:(T, TL), soln: 1, result(nil) > getVariant(Y, X, 'XOR, T, TL, false, '#, 0) . rl < X : User | AS, problem:(T, TL), soln: N, result(ML) > gotVariant(X, Y, R, V, S, Q, P, B) => < X : User | AS, problem:(T, TL), soln: (N + 1), result(ML, gotVariant(X, Y, R, V, S, Q, P, B)) > getVariant(Y, X, 'XOR, T, TL, false, '#, N) . endm erew in VARIANT-TEST : <> < me : User | problem: ('_+_['X:XOR, 'c1.Elem], empty) > createInterpreter(interpreterManager, me, none) . get variants in XOR : X:XOR + c1 . erew in VARIANT-TEST : <> < me : User | problem: ('_+_['X:XOR, 'c1.Elem], '_+_['X:XOR, 'a.Elem]) > createInterpreter(interpreterManager, me, none) . get variants in XOR : X:XOR + c1 such that X:XOR + a irreducible . erew in VARIANT-TEST : <> < me : User | problem: ('_+_['X:XOR, 'Y:XOR, 'c1.Elem], empty) > createInterpreter(interpreterManager, me, none) . get variants in XOR : X:XOR + Y:XOR + c1 . erew in VARIANT-TEST : <> < me : User | problem: ('_+_['X:XOR, 'Y:XOR, 'c1.Elem], ('_+_['X:XOR, 'c1.Elem], '_+_['X:XOR, 'c2.Elem])) > createInterpreter(interpreterManager, me, none) . get variants in XOR : X:XOR + Y:XOR + c1 such that X:XOR + c1, X:XOR + c2 irreducible . mod VARIANT-TEST2 is pr META-INTERPRETER . sort MsgList . subsort Msg < MsgList . op me : -> Oid . op User : -> Cid . op problem:(_,_) : Term TermList -> Attribute . op soln:_ : Nat -> Attribute . op result : MsgList -> Attribute . op _,_ : MsgList MsgList -> MsgList [assoc id: nil] . op nil : -> MsgList . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . vars T V : Term . var TL : TermList . var S : Substitution . var Q : Qid . var B : Bool . var P : Parent . var R : RewriteCount . var ML : MsgList . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('XOR, true)) . rl < X : User | AS, problem:(T, TL) > insertedModule(X, Y) => < X : User | AS, problem:(T, TL), soln: 1, result(nil) > getVariant(Y, X, 'XOR, T, TL, true, '#, 0) . rl < X : User | AS, problem:(T, TL), soln: N, result(ML) > gotVariant(X, Y, R, V, S, Q, P, B) => < X : User | AS, problem:(T, TL), soln: (N + 1), result(ML, gotVariant(X, Y, R, V, S, Q, P, B)) > getVariant(Y, X, 'XOR, T, TL, true, '#, N) . endm erew in VARIANT-TEST2 : <> < me : User | problem: ('_+_['X:XOR, 'c1.Elem], empty) > createInterpreter(interpreterManager, me, none) . get irredundant variants in XOR : X:XOR + c1 . erew in VARIANT-TEST2 : <> < me : User | problem: ('_+_['X:XOR, 'c1.Elem], '_+_['X:XOR, 'a.Elem]) > createInterpreter(interpreterManager, me, none) . get irredundant variants in XOR : X:XOR + c1 such that X:XOR + a irreducible . erew in VARIANT-TEST2 : <> < me : User | problem: ('_+_['X:XOR, 'Y:XOR, 'c1.Elem], empty) > createInterpreter(interpreterManager, me, none) . get irredundant variants in XOR : X:XOR + Y:XOR + c1 . erew in VARIANT-TEST2 : <> < me : User | problem: ('_+_['X:XOR, 'Y:XOR, 'c1.Elem], ('_+_['X:XOR, 'c1.Elem], '_+_['X:XOR, 'c2.Elem])) > createInterpreter(interpreterManager, me, none) . get irredundant variants in XOR : X:XOR + Y:XOR + c1 such that X:XOR + c1, X:XOR + c2 irreducible . maude-3.1/tests/Meta/metaXapply.expected0000644000175200017520000001020313140741643015273 00000000000000========================================== reduce in TEST : metaXapply(m, 'f['a.Foo,'b.Foo], 'k, none, 0, 100, 0) . rewrites: 3 result Result4Tuple: {'a.Foo,'Foo, 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'b.Foo,[]} ========================================== reduce in TEST : metaXapply(m, 'f['a.Foo,'b.Foo], 'k, none, 0, 100, 1) . rewrites: 3 result Result4Tuple: {'b.Foo,'Foo, 'X:Foo <- 'b.Foo ; 'Y:Foo <- 'a.Foo,[]} ========================================== reduce in TEST : metaXapply(m, 'f['a.Foo,'b.Foo], 'k, none, 0, 100, 2) . rewrites: 3 result Result4Tuple: {'f['b.Foo,'c.Foo],'Foo,(none).Substitution,'f['b.Foo,[]]} ========================================== reduce in TEST : metaXapply(m, 'f['a.Foo,'b.Foo], 'k, none, 0, 100, 3) . rewrites: 2 result Result4Tuple?: (failure).Result4Tuple? ========================================== reduce in TEST : metaXapply(m, 'f['a.Foo,'b.Foo], 'k, none, 0, unbounded, 0) . rewrites: 3 result Result4Tuple: {'a.Foo,'Foo, 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'b.Foo,[]} ========================================== reduce in TEST : metaXapply(m, 'f['a.Foo,'b.Foo], 'k, none, 0, unbounded, 1) . rewrites: 3 result Result4Tuple: {'b.Foo,'Foo, 'X:Foo <- 'b.Foo ; 'Y:Foo <- 'a.Foo,[]} ========================================== reduce in TEST : metaXapply(m, 'f['a.Foo,'b.Foo], 'k, none, 0, unbounded, 2) . rewrites: 3 result Result4Tuple: {'f['b.Foo,'c.Foo],'Foo,(none).Substitution,'f['b.Foo,[]]} ========================================== reduce in TEST : metaXapply(m, 'f['a.Foo,'b.Foo], 'k, none, 0, unbounded, 3) . rewrites: 2 result Result4Tuple?: (failure).Result4Tuple? ========================================== reduce in TEST2 : metaXapply(m, 'g['f['a.Foo,'b.Foo],'a.Foo], 'k, none, 0, 100, 0) . rewrites: 3 result Result4Tuple: {'g['c.Foo,'f['a.Foo,'b.Foo]],'Foo,(none).Substitution,'g[ 'f['a.Foo,'b.Foo],[]]} ========================================== reduce in TEST2 : metaXapply(m, 'g['f['a.Foo,'b.Foo],'a.Foo], 'k, none, 0, 100, 1) . rewrites: 3 result Result4Tuple: {'g['a.Foo,'a.Foo],'Foo, 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'b.Foo,'g['a.Foo,[]]} ========================================== reduce in TEST2 : metaXapply(m, 'g['f['a.Foo,'b.Foo],'a.Foo], 'k, none, 0, 100, 2) . rewrites: 3 result Result4Tuple: {'g['a.Foo,'b.Foo],'Foo, 'X:Foo <- 'b.Foo ; 'Y:Foo <- 'a.Foo,'g['a.Foo,[]]} ========================================== reduce in TEST2 : metaXapply(m, 'g['f['a.Foo,'b.Foo],'a.Foo], 'k, none, 0, 100, 3) . rewrites: 3 result Result4Tuple: {'g['a.Foo,'f['b.Foo,'c.Foo]],'Foo,(none).Substitution,'g[ 'a.Foo,'f['b.Foo,[]]]} ========================================== reduce in TEST2 : metaXapply(m, 'g['f['a.Foo,'b.Foo],'a.Foo], 'k, none, 0, 100, 4) . rewrites: 2 result Result4Tuple?: (failure).Result4Tuple? ========================================== reduce in TEST3 : metaXapply(m, 'g['f['a.Foo,'b.Foo],'a.Foo], 'l, none, 0, 100, 0) . rewrites: 3 result Result4Tuple: {'g['f['c.Foo,'c.Foo],'f['a.Foo,'b.Foo]],'Foo,( none).Substitution,'g['f['a.Foo,'b.Foo],[]]} ========================================== reduce in TEST3 : metaXapply(m, 'g['f['a.Foo,'b.Foo],'a.Foo], 'l, none, 0, 100, 1) . rewrites: 3 result Result4Tuple: {'g['a.Foo,'f['b.Foo,'c.Foo,'c.Foo]],'Foo,( none).Substitution,'g['a.Foo,'f['b.Foo,[]]]} ========================================== reduce in TEST3 : metaXapply(m, 'g['f['a.Foo,'b.Foo],'a.Foo], 'l, none, 0, 100, 0) . rewrites: 3 result Result4Tuple: {'g['f['c.Foo,'c.Foo],'f['a.Foo,'b.Foo]],'Foo,( none).Substitution,'g['f['a.Foo,'b.Foo],[]]} ========================================== reduce in TEST3 : metaXapply(m, 'g['f['a.Foo,'b.Foo],'a.Foo], 'l, none, 0, 100, 2) . rewrites: 2 result Result4Tuple?: (failure).Result4Tuple? ========================================== reduce in TEST3 : metaXapply(m, 'g['f['a.Foo,'b.Foo],'a.Foo], 'l, none, 0, 100, 0) . rewrites: 3 result Result4Tuple: {'g['f['c.Foo,'c.Foo],'f['a.Foo,'b.Foo]],'Foo,( none).Substitution,'g['f['a.Foo,'b.Foo],[]]} ========================================== reduce in ALL-ONE-STEP-REWRITES : findAllRews(m, 'f['a.Foo,'b.Foo], 'k) . rewrites: 27 result TermSet: 'a.Foo | 'b.Foo | ('f['b.Foo,'c.Foo]) Bye. maude-3.1/tests/Meta/metaUnify0000755000175200017520000000034011002250646013305 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaUnify.maude -no-banner -no-advise \ > metaUnify.out 2>&1 diff $srcdir/metaUnify.expected metaUnify.out > /dev/null 2>&1 maude-3.1/tests/Meta/checkUnifiers.expected0000644000175200017520000001352213670540172015742 00000000000000========================================== reduce in CHECK : check(['A-UNIF], "A:List B:List", "X:List") . rewrites: 58 result ResultList: unifierCount(1) unifierCount(1) ========================================== reduce in CHECK : check(['A-UNIF], "A:List B:List", "X:List Y:List") . rewrites: 156 result ResultList: unifierCount(3) unifierCount(3) ========================================== reduce in CHECK : check(['A-UNIF], "A:List B:List C:List", "X:List Y:List") . rewrites: 278 result ResultList: unifierCount(5) unifierCount(5) ========================================== reduce in CHECK : check(['A-UNIF], "A:List B:List C:List", "X:List Y:List Z:List") . rewrites: 772 result ResultList: unifierCount(13) unifierCount(13) ========================================== reduce in CHECK : check(['A-UNIF], "A:List B:List C:List G:List", "X:List Y:List Z:List") . rewrites: 1618 result ResultList: unifierCount(25) unifierCount(25) ========================================== reduce in CHECK : check(['A-UNIF], "A:List B:List C:List D:List G:List", "X:List Y:List Z:List") . rewrites: 2888 result ResultList: unifierCount(41) unifierCount(41) ========================================== reduce in CHECK : check(['A-UNIF], "A:List B:List", "B:List C:List") . Warning: Unification modulo the theory of operator __ has encountered an instance for which it may not be complete. Warning: Unification modulo the theory of operator __ has encountered an instance for which it may not be complete. rewrites: 114 result ResultList: unifierCountIncomplete(2) unifierCountIncomplete(2) ========================================== reduce in CHECK : check(['A-UNIF], "a A:List a", "B:List a C:List") . rewrites: 250 result ResultList: unifierCount(4) unifierCount(4) ========================================== reduce in CHECK : check(['A-UNIF], "a A:List b", "B:List c C:List") . rewrites: 250 result ResultList: unifierCount(4) unifierCount(4) ========================================== reduce in CHECK : check(['A-UNIF], "a A:List a", "B:List a C:List a D:List") . rewrites: 298 result ResultList: unifierCount(4) unifierCount(4) ========================================== reduce in CHECK : check(['A-UNIF], "a A:List b", "B:List c C:List d D:List") . rewrites: 298 result ResultList: unifierCount(4) unifierCount(4) ========================================== reduce in CHECK : check(['A-UNIF], "h(A:List, B:List, B:List) C:List h(G:List, H:List)", "I:List h(J:List, i(K:List)) L:List") . rewrites: 346 result ResultList: unifierCount(4) unifierCount(4) ========================================== reduce in CHECK : check(['A-UNIF], "h(A:List, B:List) C:List h(G:List, H:List)", "I:List h(J:List, J:List) L:List h(M:List, M:List) N:List") . rewrites: 394 result ResultList: unifierCount(4) unifierCount(4) ========================================== reduce in CHECK : check(['A-UNIF], "A:List h(X:List, Y:List) B:List", "C:List h(U:List, V:List) D:List h(U:List, U:List) G:List") . rewrites: 1778 result ResultList: unifierCount(20) unifierCount(20) ========================================== reduce in CHECK : check(['A-UNIF], "h(h(A:List, B:List, B:List) C:List h(G:List, H:List), X:List Y:List a Z:List)", "h(I:List h(J:List, i(K:List)) L:List, U:List b V:List W:List)") . rewrites: 16658 result ResultList: unifierCount(128) unifierCount(128) ========================================== reduce in CHECK : check(['A-UNIF], "h(A:List, A:List)", "h(f(B:List, C:List), f(I:List, J:List))") . rewrites: 192 result ResultList: unifierCount(3) unifierCount(3) ========================================== reduce in CHECK : check(['A-UNIF], "h(A:List, A:List, A:List)", "h(f(B:List, C:List), f(I:List, J:List), f(X:List, Y:List))") . rewrites: 954 result ResultList: unifierCount(13) unifierCount(13) ========================================== reduce in CHECK : check(['A-UNIF], "h(f(a, b), f(a, b), f(a, b))", "h(f(B:List, C:List), f(I:List, J:List), f(X:List, Y:List))") . rewrites: 108 result ResultList: unifierCount(1) unifierCount(1) ========================================== reduce in CHECK : check(['A-UNIF], "A:List E:Elt B:List F:Elt C:List E:Elt D:List", "W:List F:Elt X:List E:Elt Y:List F:Elt Z:List") . rewrites: 35740 result ResultList: unifierCount(337) unifierCount(337) ========================================== reduce in CHECK : check(['A-UNIF], "j(A:List, f(B:List, E:Elt, C:List), f(D:List, E:Elt, j(G:List, H:List), I:List))", "j(U:List, f(V:List, W:List), f(X:List, j(Y:List, Z:List), S:List))") . rewrites: 213767 result ResultList: unifierCount(3740) unifierCount(293) ========================================== reduce in CHECK : check(['AC+C], "f(g(X:Set, Y:Set), g(X:Set, Z:Set), U:Set)", "f(g(Y:Set, Z:Set), V:Set)") . rewrites: 290 result ResultList: unifierCount(4) unifierCount(4) ========================================== reduce in CHECK : check(['AC+C], "g(f(X:Set, Y:Set), f(X:Set, U:Set, Z:Set))", "g(f(U:Set, V:Set), f(W:Set, A:Elt))") . rewrites: 3570 result ResultList: unifierCount(48) unifierCount(48) ========================================== reduce in CHECK : check(['NAT'], "X:Nat", "s (X:Nat * Y:Nat)") . rewrites: 81 result ResultList: unifierCount(2) unifierCount(1) ========================================== reduce in CHECK : check(['NAT'], "X:Nat", "s X:Nat * Y:Nat") . rewrites: 81 result ResultList: unifierCount(2) unifierCount(1) ========================================== reduce in CHECK : check(['NAT'], "s X:Nat", "s X:Nat * Y:Nat") . rewrites: 62 result ResultList: unifierCount(1) unifierCount(1) ========================================== reduce in CHECK : check(['NAT'], "s X:Nat", "X:Nat * Y:Nat") . rewrites: 60 result ResultList: unifierCount(1) unifierCount(1) ========================================== reduce in CHECK : check(['COMM], "X:Foo", "c(f(X:Foo, Y:Foo), Z:Foo)") . rewrites: 110 result ResultList: unifierCount(2) unifierCount(2) Bye. maude-3.1/tests/Meta/russianDollsNonFlat.expected0000644000175200017520000001714113366052720017124 00000000000000========================================== erewrite in RUSSIAN-DOLLS : <> < me : User | pending: predef,level: 0 > createInterpreter(interpreterManager, me, none) . rewrites: 61 result Configuration: <> < me : User | pending: nil,level: 0 > erewroteTerm(me, interpreter(0), 1, 's_^4['0.Zero], 'NzNat) ========================================== erewrite in RUSSIAN-DOLLS : <> < me : User | pending: predef,level: 1 > createInterpreter(interpreterManager, me, none) . rewrites: 121 result Configuration: <> < me : User | pending: nil,level: 1 > erewroteTerm(me, interpreter(0), 60, '__['<>.Portal,'<_:_|_>['me.Oid,'User.Cid,'_`,_[ 'level:_['0.Zero],'pending:_['nil.Seq]]],'erewroteTerm['me.Oid, 'interpreter['0.Zero],'s_['0.Zero],'_`[_`][''s_^4.Sort,''0.Zero.Constant], ''NzNat.Sort]], 'Configuration) ========================================== erewrite in RUSSIAN-DOLLS : <> < me : User | pending: predef,level: 2 > createInterpreter(interpreterManager, me, none) . rewrites: 181 result Configuration: <> < me : User | pending: nil,level: 2 > erewroteTerm(me, interpreter(0), 120, '__['<>.Portal,'<_:_|_>['me.Oid,'User.Cid,'_`,_[ 'level:_['s_['0.Zero]],'pending:_['nil.Seq]]],'erewroteTerm['me.Oid, 'interpreter['0.Zero],'s_^60['0.Zero],'_`[_`][''__.Sort,'_`,_[ ''<>.Portal.Constant,'_`[_`][''<_:_|_>.Variable,'_`,_[''me.Oid.Constant, ''User.Cid.Constant,'_`[_`][''_`,_.Qid,'_`,_['_`[_`][''level:_.Variable, ''0.Zero.Constant],'_`[_`][''pending:_.Variable,''nil.Seq.Constant]]]]], '_`[_`][''erewroteTerm.Sort,'_`,_[''me.Oid.Constant,'_`[_`][ ''interpreter.Sort,''0.Zero.Constant],'_`[_`][''s_.Sort,''0.Zero.Constant], '_`[_`][''_`[_`].Qid,'_`,_['''s_^4.Sort.Constant, '''0.Zero.Constant.Constant]],'''NzNat.Sort.Constant]]]], ''Configuration.Sort]], 'Configuration) ========================================== erewrite in RUSSIAN-DOLLS : <> < me : User | pending: predef,level: 3 > createInterpreter(interpreterManager, me, none) . rewrites: 241 result Configuration: <> < me : User | pending: nil,level: 3 > erewroteTerm(me, interpreter(0), 180, '__['<>.Portal,'<_:_|_>['me.Oid,'User.Cid,'_`,_[ 'level:_['s_^2['0.Zero]],'pending:_['nil.Seq]]],'erewroteTerm['me.Oid, 'interpreter['0.Zero],'s_^120['0.Zero],'_`[_`][''__.Sort,'_`,_[ ''<>.Portal.Constant,'_`[_`][''<_:_|_>.Variable,'_`,_[''me.Oid.Constant, ''User.Cid.Constant,'_`[_`][''_`,_.Qid,'_`,_['_`[_`][''level:_.Variable, '_`[_`][''s_.Sort,''0.Zero.Constant]],'_`[_`][''pending:_.Variable, ''nil.Seq.Constant]]]]],'_`[_`][''erewroteTerm.Sort,'_`,_[ ''me.Oid.Constant,'_`[_`][''interpreter.Sort,''0.Zero.Constant],'_`[_`][ ''s_^60.Sort,''0.Zero.Constant],'_`[_`][''_`[_`].Qid,'_`,_[ '''__.Sort.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''<>.Portal.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''<_:_|_>.Variable.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''me.Oid.Constant.Constant,'''User.Cid.Constant.Constant,'_`[_`][ ''_`[_`].Qid,'_`,_['''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_['_`[_`][ ''_`[_`].Qid,'_`,_['''level:_.Variable.Constant, '''0.Zero.Constant.Constant]],'_`[_`][''_`[_`].Qid,'_`,_[ '''pending:_.Variable.Constant,'''nil.Seq.Constant.Constant]]]]]]]]]], '_`[_`][''_`[_`].Qid,'_`,_['''erewroteTerm.Sort.Constant,'_`[_`][ ''_`,_.Qid,'_`,_['''me.Oid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''interpreter.Sort.Constant,'''0.Zero.Constant.Constant]],'_`[_`][ ''_`[_`].Qid,'_`,_['''s_.Sort.Constant,'''0.Zero.Constant.Constant]], '_`[_`][''_`[_`].Qid,'_`,_['''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''s_^4.Sort.Constant.Constant,''''0.Zero.Constant.Constant.Constant]]]], ''''NzNat.Sort.Constant.Constant]]]]]]]], '''Configuration.Sort.Constant]]]],''Configuration.Sort]], 'Configuration) ========================================== erewrite in RUSSIAN-DOLLS : <> < me : User | pending: predef,level: 4 > createInterpreter(interpreterManager, me, none) . rewrites: 301 result Configuration: <> < me : User | pending: nil,level: 4 > erewroteTerm(me, interpreter(0), 240, '__['<>.Portal,'<_:_|_>['me.Oid,'User.Cid,'_`,_[ 'level:_['s_^3['0.Zero]],'pending:_['nil.Seq]]],'erewroteTerm['me.Oid, 'interpreter['0.Zero],'s_^180['0.Zero],'_`[_`][''__.Sort,'_`,_[ ''<>.Portal.Constant,'_`[_`][''<_:_|_>.Variable,'_`,_[''me.Oid.Constant, ''User.Cid.Constant,'_`[_`][''_`,_.Qid,'_`,_['_`[_`][''level:_.Variable, '_`[_`][''s_^2.Sort,''0.Zero.Constant]],'_`[_`][''pending:_.Variable, ''nil.Seq.Constant]]]]],'_`[_`][''erewroteTerm.Sort,'_`,_[ ''me.Oid.Constant,'_`[_`][''interpreter.Sort,''0.Zero.Constant],'_`[_`][ ''s_^120.Sort,''0.Zero.Constant],'_`[_`][''_`[_`].Qid,'_`,_[ '''__.Sort.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''<>.Portal.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''<_:_|_>.Variable.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''me.Oid.Constant.Constant,'''User.Cid.Constant.Constant,'_`[_`][ ''_`[_`].Qid,'_`,_['''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_['_`[_`][ ''_`[_`].Qid,'_`,_['''level:_.Variable.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''s_.Sort.Constant,'''0.Zero.Constant.Constant]]]],'_`[_`][''_`[_`].Qid, '_`,_['''pending:_.Variable.Constant, '''nil.Seq.Constant.Constant]]]]]]]]]],'_`[_`][''_`[_`].Qid,'_`,_[ '''erewroteTerm.Sort.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''me.Oid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''interpreter.Sort.Constant,'''0.Zero.Constant.Constant]],'_`[_`][ ''_`[_`].Qid,'_`,_['''s_^60.Sort.Constant,'''0.Zero.Constant.Constant]], '_`[_`][''_`[_`].Qid,'_`,_['''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''__.Sort.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''<>.Portal.Constant.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''<_:_|_>.Variable.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''me.Oid.Constant.Constant.Constant, ''''User.Cid.Constant.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''_`,_.Qid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_['_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''level:_.Variable.Constant.Constant, ''''0.Zero.Constant.Constant.Constant]]]],'_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''pending:_.Variable.Constant.Constant, ''''nil.Seq.Constant.Constant.Constant]]]]]]]]]]]]]]]]]]]],'_`[_`][ ''_`[_`].Qid,'_`,_['''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''erewroteTerm.Sort.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''me.Oid.Constant.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''interpreter.Sort.Constant.Constant, ''''0.Zero.Constant.Constant.Constant]]]],'_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''s_.Sort.Constant.Constant,''''0.Zero.Constant.Constant.Constant]]]], '_`[_`][''_`[_`].Qid,'_`,_['''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''_`[_`].Qid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''''s_^4.Sort.Constant.Constant.Constant, '''''0.Zero.Constant.Constant.Constant.Constant]]]]]]]], '''''NzNat.Sort.Constant.Constant.Constant]]]]]]]]]]]]]]]], ''''Configuration.Sort.Constant.Constant]]]]]]]], '''Configuration.Sort.Constant]]]],''Configuration.Sort]], 'Configuration) Bye. maude-3.1/tests/Meta/metaMatch.maude0000644000175200017520000000706710025725255014362 00000000000000set show timing off . set show advisories off . mod SEARCH-TEST is sort Nat . op _+_ : Nat Nat -> Nat [assoc comm prec 5] . op _*_ : Nat Nat -> Nat [assoc comm prec 3] . ops a b c d e 0 1 : -> Nat . vars W X Y Z : Nat . eq 0 * X = 0 . eq 1 * X = X . eq 0 + X = X . rl X * (Y + Z) => X * Y + X * Z . rl X * Y + X * Z => X * (Y + Z) . endm select META-LEVEL . red metaMatch(['SEARCH-TEST], 'X:Nat, '_*_['a.Nat, '_+_['b.Nat, 'c.Nat]], '_*_['Y:Nat, 'Z:Nat] := 'X:Nat, 0) . red metaMatch(['SEARCH-TEST], 'X:Nat, '_*_['a.Nat, '_+_['b.Nat, 'c.Nat]], '_*_['Y:Nat, 'Z:Nat] := 'X:Nat, 1) . red metaMatch(['SEARCH-TEST], 'X:Nat, '_*_['a.Nat, '_+_['b.Nat, 'c.Nat]], '_*_['Y:Nat, 'Z:Nat] := 'X:Nat, 2) . red metaMatch(['SEARCH-TEST], 'X:Nat, '_*_['a.Nat, '_+_['b.Nat, 'c.Nat]], '_*_['Y:Nat, 'Z:Nat] := 'X:Nat /\ 'Y:Nat = 'a.Nat, 0) . red metaMatch(['SEARCH-TEST], 'X:Nat, '_*_['a.Nat, '_+_['b.Nat, 'c.Nat]], '_*_['Y:Nat, 'Z:Nat] := 'X:Nat /\ 'Y:Nat = 'a.Nat, 1) . red in META-LEVEL : metaMatch(fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [comm] . none none endfm, 'f['Y:Foo, 'Y:Foo], 'f['b.Foo, 'b.Foo], nil, 0) . red in META-LEVEL : metaMatch(fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [comm] . none none endfm, 'f['Y:Foo, 'Y:Foo], 'f['b.Foo, 'b.Foo], nil, 1) . red in META-LEVEL : metaMatch(fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [comm] . none none endfm, 'f['X:Foo, 'Y:Foo], 'f['a.Foo, 'b.Foo], nil, 0) . red in META-LEVEL : metaMatch(fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [comm] . none none endfm, 'f['X:Foo, 'Y:Foo], 'f['a.Foo, 'b.Foo], nil, 1) . red in META-LEVEL : metaMatch(fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [comm] . none none endfm, 'f['X:Foo, 'Y:Foo], 'f['a.Foo, 'b.Foo], nil, 2) . red in META-LEVEL : metaMatch( fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] . none none endfm, 'g['f['X:Foo, 'Y:Foo], 'Z:Foo], 'g['f['a.Foo, 'b.Foo], 'f['c.Foo, 'c.Foo]], nil, 0) . red in META-LEVEL : metaMatch( fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] . none none endfm, 'g['f['X:Foo, 'Y:Foo], 'Z:Foo], 'g['f['a.Foo, 'b.Foo], 'f['c.Foo, 'c.Foo]], nil, 2) . red in META-LEVEL : metaMatch( fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] . none none endfm, 'g['f['X:Foo, 'Y:Foo], 'Z:Foo], 'g['f['a.Foo, 'b.Foo], 'f['c.Foo, 'c.Foo]], nil, 1) . maude-3.1/tests/Meta/metaVariantMatch.maude0000644000175200017520000000365313726260657015717 00000000000000set show timing off . fmod XOR is sort XOR . sort Elem . ops cst1 cst2 cst3 cst4 : -> Elem . subsort Elem < XOR . op _+_ : XOR XOR -> XOR [ctor assoc comm] . op 0 : -> XOR . vars X Y : XOR . eq Y + 0 = Y [variant] . eq X + X = 0 [variant] . eq X + X + Y = Y [variant] . endfm fmod META-TEST is inc XOR . inc META-LEVEL . endfm reduce in META-TEST : metaVariantMatch(['XOR], upTerm(cst1 + X:XOR) <=? upTerm( cst2 + Y:XOR), (empty).GroundTermList, '#, none, (0).Zero) . reduce in META-TEST : metaVariantMatch(['XOR], upTerm(cst1 + X:XOR) <=? upTerm( cst2 + Y:XOR), (empty).GroundTermList, '#, none, (1).Zero) . reduce in META-TEST : metaVariantMatch(['XOR], upTerm(X:XOR + Y:XOR) <=? upTerm( cst1 + cst2), (empty).GroundTermList, '#, none, (0).Zero) . reduce in META-TEST : metaVariantMatch(['XOR], upTerm(X:XOR + Y:XOR) <=? upTerm( cst1 + cst2), (empty).GroundTermList, '#, none, (1).Zero) . reduce in META-TEST : metaVariantMatch(['XOR], upTerm(X:XOR + Y:XOR) <=? upTerm( cst1 + cst2), (empty).GroundTermList, '#, none, (2).Zero) . reduce in META-TEST : metaVariantMatch(['XOR], upTerm(X:XOR + Y:XOR) <=? upTerm( cst1 + cst2), (empty).GroundTermList, '#, none, (3).Zero) . reduce in META-TEST : metaVariantMatch(['XOR], upTerm(X:XOR + Y:XOR) <=? upTerm( cst1 + cst2), (empty).GroundTermList, '#, none, (4).Zero) . reduce in META-TEST : metaVariantMatch(['XOR], upTerm(X:XOR + Y:XOR) <=? upTerm( cst1 + cst2), (empty).GroundTermList, '#, none, (5).Zero) . reduce in META-TEST : metaVariantMatch(['XOR], upTerm(X:XOR + Y:XOR) <=? upTerm( cst1 + cst2), (empty).GroundTermList, '#, none, (6).Zero) . reduce in META-TEST : metaVariantMatch(['XOR], upTerm(X:XOR + Y:XOR) <=? upTerm( cst1 + cst2), (empty).GroundTermList, '#, none, (7).Zero) . reduce in META-TEST : metaVariantMatch(['XOR], upTerm(X:XOR + Y:XOR) <=? upTerm( cst1 + cst2), (empty).GroundTermList, '#, none, (8).Zero) . maude-3.1/tests/Meta/metaSort.expected0000644000175200017520000002121713724333347014762 00000000000000========================================== reduce in META-LEVEL : sortLeq(fmod 'FOO is nil sorts 'NzNat ; 'Nat ; 'Int ; 'NzInt . subsort 'NzNat < 'Nat . subsort 'NzNat < 'NzInt . subsort 'Nat < 'Int . subsort 'NzInt < 'Int . none none none endfm, 'NzNat, 'Int) . rewrites: 1 result Bool: true ========================================== reduce in META-LEVEL : sortLeq(fmod 'FOO is nil sorts 'NzNat ; 'Nat ; 'Int ; 'NzInt . subsort 'NzNat < 'Nat . subsort 'NzNat < 'NzInt . subsort 'Nat < 'Int . subsort 'NzInt < 'Int . none none none endfm, 'Int, 'NzInt) . rewrites: 1 result Bool: false ========================================== reduce in META-LEVEL : sameKind(fmod 'FOO is nil sorts 'NzNat ; 'Nat ; 'Int ; 'NzInt . subsort 'NzNat < 'Nat . subsort 'NzNat < 'NzInt . subsort 'Nat < 'Int . subsort 'NzInt < 'Int . none none none endfm, '`[Int`], 'NzInt) . rewrites: 1 result Bool: true ========================================== reduce in META-LEVEL : sameKind(fmod 'FOO is protecting 'BOOL . sorts 'NzNat ; 'Nat ; 'Int ; 'NzInt . subsort 'NzNat < 'Nat . subsort 'NzNat < 'NzInt . subsort 'Nat < 'Int . subsort 'NzInt < 'Int . none none none endfm, '`[Int`], 'Bool) . rewrites: 1 result Bool: false ========================================== reduce in META-LEVEL : leastSort(fmod 'FOO is protecting 'FLOAT . sorts none . none none none none endfm, 'pi.Float) . rewrites: 1 result Sort: 'FiniteFloat ========================================== reduce in META-LEVEL : completeName(fmod 'FOO is protecting 'BOOL . sorts 'NzNat ; 'Nat ; 'NzInt . subsort 'NzNat < 'Nat . subsort 'NzNat < 'NzInt . none none none endfm, '`[NzInt`]) . rewrites: 1 result Kind: '`[NzInt`,Nat`] ========================================== reduce in META-LEVEL : completeName(fmod 'FOO is protecting 'BOOL . sorts 'NzNat ; 'Nat ; 'NzInt . subsort 'NzNat < 'Nat . subsort 'NzNat < 'NzInt . none none none endfm, '`[NzInt`,Nat`]) . rewrites: 1 result Kind: '`[NzInt`,Nat`] ========================================== reduce in META-LEVEL : lesserSorts(fmod 'FOO is protecting 'BOOL . sorts 'NzNat ; 'Nat ; 'Int ; 'NzInt . subsort 'NzNat < 'Nat . subsort 'NzNat < 'NzInt . subsort 'Nat < 'Int . subsort 'NzInt < 'Int . none none none endfm, 'Int) . rewrites: 1 result NeSortSet: 'Nat ; 'NzInt ; 'NzNat ========================================== reduce in META-LEVEL : lesserSorts(fmod 'FOO is protecting 'BOOL . sorts 'NzNat ; 'Nat ; 'Int ; 'NzInt . subsort 'NzNat < 'Nat . subsort 'NzNat < 'NzInt . subsort 'Nat < 'Int . subsort 'NzInt < 'Int . none none none endfm, 'NzNat) . rewrites: 1 result EmptyQidSet: (none).EmptyQidSet ========================================== reduce in META-LEVEL : lesserSorts(fmod 'FOO is protecting 'BOOL . sorts 'NzNat ; 'Nat ; 'Int ; 'NzInt . subsort 'NzNat < 'Nat . subsort 'NzNat < 'NzInt . subsort 'Nat < 'Int . subsort 'NzInt < 'Int . none none none endfm, 'Nat) . rewrites: 1 result Sort: 'NzNat ========================================== reduce in META-LEVEL : glbSorts(fmod 'FOO is protecting 'BOOL . sorts 'NzNat ; 'Nat ; 'Int ; 'NzInt . subsort 'NzNat < 'Nat . subsort 'NzNat < 'NzInt . subsort 'Nat < 'Int . subsort 'NzInt < 'Int . none none none endfm, 'Nat, 'NzInt) . rewrites: 1 result Sort: 'NzNat ========================================== reduce in META-LEVEL : glbSorts(fmod 'FOO is protecting 'BOOL . sorts 'NzNat ; 'Nat ; 'Int ; 'NzInt . subsort 'NzNat < 'Nat . subsort 'NzNat < 'NzInt . subsort 'Nat < 'Int . subsort 'NzInt < 'Int . none none none endfm, 'Nat, 'Int) . rewrites: 1 result Sort: 'Nat ========================================== reduce in META-LEVEL : glbSorts(fmod 'FOO is protecting 'BOOL . sorts 'Nat ; 'Int ; 'NzInt . subsort 'Nat < 'Int . subsort 'NzInt < 'Int . none none none endfm, 'Nat, 'NzInt) . rewrites: 1 result EmptyQidSet: (none).EmptyQidSet ========================================== reduce in META-LEVEL : getKind(fmod 'FOO is protecting 'FLOAT . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm, 'Foo) . rewrites: 1 result Kind: '`[Foo`] ========================================== reduce in META-LEVEL : getKind(fmod 'FOO is protecting 'FLOAT . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm, 'Bar) . rewrites: 1 result Kind: '`[Foo`] ========================================== reduce in META-LEVEL : getKind(fmod 'FOO is protecting 'FLOAT . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . mb 'a.Foo : 'Bar [none] . none endfm, '`[Bar`]) . rewrites: 1 result Kind: '`[Foo`] ========================================== reduce in META-LEVEL : getKinds(fmod 'FOO is nil sorts none . none none none none endfm) . rewrites: 1 result EmptyQidSet: (none).EmptyQidSet ========================================== reduce in META-LEVEL : getKinds(fmod 'FOO is protecting 'BOOL . sorts none . none none none none endfm) . rewrites: 1 result Kind: '`[Bool`] ========================================== reduce in META-LEVEL : getKinds(fmod 'FOO is protecting 'META-LEVEL . sorts none . none none none none endfm) . rewrites: 1 result NeKindSet: '`[AttrSet`] ; '`[Bool`] ; '`[Condition`] ; '`[EquationSet`] ; '`[FindResult`,NatList`,Bound`,Parent`] ; '`[HookList`] ; '`[ImportList`] ; '`[MatchingProblem`] ; '`[MembAxSet`] ; '`[ModuleExpression`,ParameterList`,GTermList`,QidSet`,QidList`,TypeListSet`,Type?`,Header`] ; '`[Module`] ; '`[NarrowingApplyResult?`] ; '`[NarrowingSearchPathResult?`] ; '`[NarrowingSearchResult?`] ; '`[NarrowingTrace`] ; '`[OpDeclSet`] ; '`[OpMappingSet`] ; '`[ParameterDeclList`] ; '`[PrintOptionSet`] ; '`[RenamingSet`] ; '`[Result4Tuple?`] ; '`[ResultPair?`] ; '`[ResultTriple?`] ; '`[RuleSet`] ; '`[SmtResult?`] ; '`[SortMappingSet`] ; '`[SrewriteOption`] ; '`[StratDeclSet`] ; '`[StratDefSet`] ; '`[StratMappingSet`] ; '`[StrategyList`,Strategy?`] ; '`[String`] ; '`[SubsortDeclSet`] ; '`[Substitution?`] ; '`[Trace?`] ; '`[UnificationPair?`,MatchOrUnificationPair`,MatchPair?`] ; '`[UnificationProblem`] ; '`[UnificationTriple?`] ; '`[UsingPairSet`] ; '`[Variant?`] ; '`[VariantOptionSet`] ; '`[View`] ========================================== reduce in META-LEVEL : maximalSorts(fmod 'FOO is protecting 'META-LEVEL . sorts none . none none none none endfm, '`[Qid`]) . rewrites: 1 result NeSortSet: 'GTermList ; 'Header ; 'ModuleExpression ; 'ParameterList ; 'QidList ; 'QidSet ; 'Type? ; 'TypeListSet ========================================== reduce in META-LEVEL : minimalSorts(fmod 'FOO is protecting 'META-LEVEL . sorts none . none none none none endfm, '`[Qid`]) . rewrites: 1 result NeSortSet: 'Constant ; 'Context ; 'EmptyCommaList ; 'EmptyQidSet ; 'Kind ; 'Sort ; 'Variable ========================================== reduce in META-LEVEL : maximalSorts(fmod 'FOO is protecting 'META-LEVEL . sorts none . none none none none endfm, 'Qid) . rewrites: 0 result [ModuleExpression,ParameterList,GTermList,QidSet,QidList,TypeListSet, Type?,Header]: maximalSorts(fmod 'FOO is protecting 'META-LEVEL . sorts none . none none none none endfm, 'Qid) ========================================== reduce in META-LEVEL : minimalSorts(fmod 'FOO is protecting 'META-LEVEL . sorts none . none none none none endfm, 'Qid) . rewrites: 0 result [ModuleExpression,ParameterList,GTermList,QidSet,QidList,TypeListSet, Type?,Header]: minimalSorts(fmod 'FOO is protecting 'META-LEVEL . sorts none . none none none none endfm, 'Qid) ========================================== reduce in META-LEVEL : maximalAritySet(['RAT], '_+_, 'Nat 'Nat, 'PosRat) . rewrites: 2 result TypeListSet: 'Nat 'PosRat ; 'PosRat 'Nat ; 'PosRat 'PosRat ========================================== reduce in META-LEVEL : maximalAritySet(['RAT], '_+_, 'Nat 'Nat, 'Rat) . rewrites: 2 result NeTypeList: 'Rat 'Rat ========================================== reduce in META-LEVEL : maximalAritySet(['RAT], '_/_, 'Nat 'Nat, 'Nat) . rewrites: 2 result EmptyQidSet: (none).EmptyQidSet ========================================== reduce in META-LEVEL : maximalAritySet(['META-LEVEL], '_;_, 'TypeSet 'TypeSet, 'KindSet) . rewrites: 2 result NeTypeList: 'KindSet 'KindSet ========================================== reduce in META-LEVEL : maximalAritySet(['NAT], '0, nil, 'Nat) . rewrites: 2 result TypeList: (nil).TypeList ========================================== reduce in META-LEVEL : glbSorts(['RAT], '`[Int`], 'Int) . rewrites: 2 result Sort: 'Int Bye. maude-3.1/tests/Meta/metaMatch0000755000175200017520000000034010511605036013250 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaMatch.maude -no-banner -no-advise \ > metaMatch.out 2>&1 diff $srcdir/metaMatch.expected metaMatch.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaModule0000755000175200017520000000034410511605132013442 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaModule.maude -no-banner -no-advise \ > metaModule.out 2>&1 diff $srcdir/metaModule.expected metaModule.out > /dev/null 2>&1 maude-3.1/tests/Meta/russianDollsNonFlat.maude0000644000175200017520000000567113366052720016423 00000000000000set show timing off . set show advisories off . *** *** Run nested meta-interpreters with structured meta-modules. *** load metaInterpreter mod RUSSIAN-DOLLS is pr META-INTERPRETER . sort ViewCmd ModuleCmd Seq . subsort ViewCmd ModuleCmd < Seq . op v : Qid -> ViewCmd . op m : Qid -> ModuleCmd . op __ : Seq Seq -> Seq [assoc id: nil] . op nil : -> Seq . op predef : -> Seq . eq predef = m('TRUTH-VALUE) m('BOOL-OPS) m('TRUTH) m('BOOL) m('EXT-BOOL) m('NAT) m('STRING) m('BOUND) m('QID) m('TRIV) v('Bool) v('Nat) v('String) v('Qid) m('LIST) m('SET) m('NAT-LIST) m('QID-LIST) m('QID-SET) m('META-TERM) m('META-CONDITION) m('META-STRATEGY) m('META-MODULE) m('META-VIEW) m('META-LEVEL) m('CONFIGURATION) m('META-INTERPRETER) m('RUSSIAN-DOLLS) . op me : -> Oid . op User : -> Cid . op pending:_ : Seq -> Attribute . op level:_ : Nat -> Attribute . vars X Y Z : Oid . var Q : Qid . var Rest : Seq . var AS : AttributeSet . var N : Nat . op problem : Nat -> Term . eq problem(s N) = '__['<>.Portal,'createInterpreter['interpreterManager.Oid,'me.Oid,'none.InterpreterOptionSet], '<_:_|_>['me.Oid,'User.Cid, '_`,_[ 'pending:_['predef.Seq], 'level:_[upTerm(N)] ] ] ] . eq problem(0) = '_+_['s_^2['0.Zero], 's_^2['0.Zero]] . rl < X : User | pending: (m(Q) Rest), AS > createdInterpreter(X, Y, Z) => < X : User | pending: Rest, AS > insertModule(Z, X, upModule(Q, false)) . rl < X : User | pending: (m(Q) Rest), AS > insertedModule(X, Y) => < X : User | pending: Rest, AS > insertModule(Y, X, upModule(Q, false)) . rl < X : User | pending: (m(Q) Rest), AS > insertedView(X, Y) => < X : User | pending: Rest, AS > insertModule(Y, X, upModule(Q, false)) . rl < X : User | pending: (v(Q) Rest), AS > insertedModule(X, Y) => < X : User | pending: Rest, AS > insertView(Y, X, upView(Q)) . rl < X : User | pending: (v(Q) Rest), AS > insertedView(X, Y) => < X : User | pending: Rest, AS > insertView(Y, X, upView(Q)) . rl < X : User | pending: nil, level: N > insertedModule(X, Y) => < X : User | pending: nil, level: N > erewriteTerm(Y, X, unbounded, 1, 'RUSSIAN-DOLLS, problem(N)) . endm erew in RUSSIAN-DOLLS : <> < me : User | pending: predef, level: 0 > createInterpreter(interpreterManager, me, none) . erew in RUSSIAN-DOLLS : <> < me : User | pending: predef, level: 1 > createInterpreter(interpreterManager, me, none) . erew in RUSSIAN-DOLLS : <> < me : User | pending: predef, level: 2 > createInterpreter(interpreterManager, me, none) . erew in RUSSIAN-DOLLS : <> < me : User | pending: predef, level: 3 > createInterpreter(interpreterManager, me, none) . erew in RUSSIAN-DOLLS : <> < me : User | pending: predef, level: 4 > createInterpreter(interpreterManager, me, none) . maude-3.1/tests/Meta/metaIntMatch0000755000175200017520000000035413332704760013740 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaIntMatch.maude -no-banner -no-advise \ > metaIntMatch.out 2>&1 diff $srcdir/metaIntMatch.expected metaIntMatch.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaUpDown0000755000175200017520000000034410511605777013450 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaUpDown.maude -no-banner -no-advise \ > metaUpDown.out 2>&1 diff $srcdir/metaUpDown.expected metaUpDown.out > /dev/null 2>&1 maude-3.1/tests/Meta/russianDollsNonFlat3.maude0000644000175200017520000000643513522536500016502 00000000000000set show timing off . set show advisories off . *** *** Run nested meta-interpreters with structured meta-modules. *** This version tests parameterized views. *** load metaInterpreter view SetAsDefault{X :: TRIV} from DEFAULT to SET*{X} is sort Elt to Set{X} . op 0 to term {} . endv mod RUSSIAN-DOLLS is pr META-INTERPRETER . pr ARRAY{String, SetAsDefault{String}} . sort ViewCmd ModuleCmd Seq . subsort ViewCmd ModuleCmd < Seq . op v : Qid -> ViewCmd . op m : Qid -> ModuleCmd . op __ : Seq Seq -> Seq [assoc id: nil] . op nil : -> Seq . op predef : -> Seq . eq predef = m('TRUTH-VALUE) m('BOOL-OPS) m('TRUTH) m('BOOL) m('EXT-BOOL) m('NAT) m('STRING) m('BOUND) m('QID) m('TRIV) m('DEFAULT) v('Bool) v('Nat) v('String) v('Qid) m('LIST) v('List) m('SET) v('Set) m('ARRAY) v('Array) m('SET*) v('Set*) m('NAT-LIST) m('QID-LIST) m('QID-SET) m('META-TERM) m('META-CONDITION) m('META-STRATEGY) m('META-MODULE) m('META-VIEW) m('META-LEVEL) m('CONFIGURATION) m('META-INTERPRETER) v('SetAsDefault) m('RUSSIAN-DOLLS) . op me : -> Oid . op User : -> Cid . op pending:_ : Seq -> Attribute . op level:_ : Nat -> Attribute . vars X Y Z : Oid . var Q : Qid . var Rest : Seq . var AS : AttributeSet . var N : Nat . op problem : Nat -> Term . eq problem(s N) = '__['<>.Portal,'createInterpreter['interpreterManager.Oid,'me.Oid,'none.InterpreterOptionSet], '<_:_|_>['me.Oid,'User.Cid, '_`,_[ 'pending:_['predef.Seq], 'level:_[upTerm(N)] ] ] ] . eq problem(0) = '_`[_`][upTerm(insert("cat", {"c", "a", "t"}, insert("dog", {"d", "o", "g"}, empty))), '"rat".String] . rl < X : User | pending: (m(Q) Rest), AS > createdInterpreter(X, Y, Z) => < X : User | pending: Rest, AS > insertModule(Z, X, upModule(Q, false)) . rl < X : User | pending: (m(Q) Rest), AS > insertedModule(X, Y) => < X : User | pending: Rest, AS > insertModule(Y, X, upModule(Q, false)) . rl < X : User | pending: (m(Q) Rest), AS > insertedView(X, Y) => < X : User | pending: Rest, AS > insertModule(Y, X, upModule(Q, false)) . rl < X : User | pending: (v(Q) Rest), AS > insertedModule(X, Y) => < X : User | pending: Rest, AS > insertView(Y, X, upView(Q)) . rl < X : User | pending: (v(Q) Rest), AS > insertedView(X, Y) => < X : User | pending: Rest, AS > insertView(Y, X, upView(Q)) . rl < X : User | pending: nil, level: N > insertedModule(X, Y) => < X : User | pending: nil, level: N > erewriteTerm(Y, X, unbounded, 1, 'RUSSIAN-DOLLS, problem(N)) . endm erew in RUSSIAN-DOLLS : <> < me : User | pending: predef, level: 0 > createInterpreter(interpreterManager, me, none) . erew in RUSSIAN-DOLLS : <> < me : User | pending: predef, level: 1 > createInterpreter(interpreterManager, me, none) . erew in RUSSIAN-DOLLS : <> < me : User | pending: predef, level: 2 > createInterpreter(interpreterManager, me, none) . erew in RUSSIAN-DOLLS : <> < me : User | pending: predef, level: 3 > createInterpreter(interpreterManager, me, none) . erew in RUSSIAN-DOLLS : <> < me : User | pending: predef, level: 4 > createInterpreter(interpreterManager, me, none) . maude-3.1/tests/Meta/metaUp.expected0000644000175200017520000010064013730553707014416 00000000000000========================================== reduce in META-LEVEL : upEqs('ATTR-TEST, true) . rewrites: 1 result EquationSet: eq '_and_['A:Bool,'A:Bool] = 'A:Bool [none] . eq '_and_['A:Bool,'_xor_['B:Bool,'C:Bool]] = '_xor_['_and_['A:Bool,'B:Bool], '_and_['A:Bool,'C:Bool]] [none] . eq '_and_['false.Bool,'A:Bool] = 'false.Bool [none] . eq '_and_['true.Bool,'A:Bool] = 'A:Bool [none] . eq '_implies_['A:Bool,'B:Bool] = 'not_['_xor_['A:Bool,'_and_['A:Bool,'B:Bool]]] [none] . eq '_or_['A:Bool,'B:Bool] = '_xor_['_and_['A:Bool,'B:Bool],'_xor_['A:Bool, 'B:Bool]] [none] . eq '_xor_['A:Bool,'A:Bool] = 'false.Bool [none] . eq '_xor_['false.Bool,'A:Bool] = 'A:Bool [none] . eq 'f['X:Foo,'a.Foo] = 'X:Foo [label('first) metadata( "this is the first equation")] . eq 'f['b.Foo,'Y:Foo] = 'b.Foo [metadata("this is the second equation")] . eq 'not_['A:Bool] = '_xor_['true.Bool,'A:Bool] [none] . ========================================== reduce in META-LEVEL : upRls('ATTR-TEST, true) . rewrites: 1 result Rule: rl 'a.Foo => 'b.Foo [label('r1)] . ========================================== reduce in META-LEVEL : upMbs('ATTR-TEST, true) . rewrites: 1 result MembAx: mb 'a.Foo : 'Foo [label('baz) metadata("this is an mb")] . ========================================== reduce in META-LEVEL : upEqs('ATTR-TEST, false) . rewrites: 1 result EquationSet: eq 'f['X:Foo,'a.Foo] = 'X:Foo [label('first) metadata( "this is the first equation")] . eq 'f['b.Foo,'Y:Foo] = 'b.Foo [metadata("this is the second equation")] . ========================================== reduce in META-LEVEL : upRls('ATTR-TEST, false) . rewrites: 1 result Rule: rl 'a.Foo => 'b.Foo [label('r1)] . ========================================== reduce in META-LEVEL : upMbs('ATTR-TEST, false) . rewrites: 1 result MembAx: mb 'a.Foo : 'Foo [label('baz) metadata("this is an mb")] . ========================================== reduce in META-LEVEL : upRls('BOOL, true) . rewrites: 1 result RuleSet: (none).RuleSet ========================================== reduce in META-LEVEL : upRls('KNIGHT, true) . rewrites: 1 result RuleSet: rl 'knight['0.Zero] => '`[_`,_`]['s_['0.Zero],'s_['0.Zero]] [ none] . rl 'move_['`[_`,_`]['X:Int,'Y:Int]] => '`[_`,_`]['_+_['X:Int,'s_['0.Zero]], '_+_['Y:Int,'s_^2['0.Zero]]] [none] . rl 'move_['`[_`,_`]['X:Int,'Y:Int]] => '`[_`,_`]['_+_['X:Int,'s_['0.Zero]], '_-_['Y:Int,'s_^2['0.Zero]]] [none] . rl 'move_['`[_`,_`]['X:Int,'Y:Int]] => '`[_`,_`]['_+_['X:Int,'s_^2['0.Zero]], '_+_['Y:Int,'s_['0.Zero]]] [none] . rl 'move_['`[_`,_`]['X:Int,'Y:Int]] => '`[_`,_`]['_+_['X:Int,'s_^2['0.Zero]], '_-_['Y:Int,'s_['0.Zero]]] [none] . rl 'move_['`[_`,_`]['X:Int,'Y:Int]] => '`[_`,_`]['_-_['X:Int,'s_['0.Zero]], '_+_['Y:Int,'s_^2['0.Zero]]] [none] . rl 'move_['`[_`,_`]['X:Int,'Y:Int]] => '`[_`,_`]['_-_['X:Int,'s_['0.Zero]], '_-_['Y:Int,'s_^2['0.Zero]]] [none] . rl 'move_['`[_`,_`]['X:Int,'Y:Int]] => '`[_`,_`]['_-_['X:Int,'s_^2['0.Zero]], '_+_['Y:Int,'s_['0.Zero]]] [none] . rl 'move_['`[_`,_`]['X:Int,'Y:Int]] => '`[_`,_`]['_-_['X:Int,'s_^2['0.Zero]], '_-_['Y:Int,'s_['0.Zero]]] [none] . crl 'knight['N:Int] => '__['L:List,'__['P:Pair,'Q:Pair]] if '_>_['N:Int, '0.Zero] = 'true.Bool /\ 'knight['_-_['N:Int,'s_['0.Zero]]] => '__['L:List, 'P:Pair] /\ 'move_['P:Pair] => 'Q:Pair /\ 'legal['Q:Pair] = 'true.Bool /\ 'not_['contains['__['L:List,'P:Pair],'Q:Pair]] = 'true.Bool [none] . ========================================== rewrite in INTROSPECTION : rules . rewrites: 2 result Rule: rl 'rules.RuleSet => 'upRls[''INTROSPECTION.Sort,'false.Bool] [ none] . ========================================== rewrite in SELF-REFLECTION : myRules . rewrites: 2 result RuleSet: rl 'allRules.RuleSet => 'upRls[''SELF-REFLECTION.Sort, 'true.Bool] [none] . rl 'myRules.RuleSet => 'upRls[''SELF-REFLECTION.Sort,'false.Bool] [none] . ========================================== rewrite in SELF-REFLECTION : allRules . rewrites: 2 result RuleSet: rl 'allRules.RuleSet => 'upRls[''SELF-REFLECTION.Sort, 'true.Bool] [none] . rl 'myRules.RuleSet => 'upRls[''SELF-REFLECTION.Sort,'false.Bool] [none] . rl 'rules.RuleSet => 'upRls[''INTROSPECTION.Sort,'false.Bool] [none] . ========================================== reduce in META-LEVEL : upEqs('META-LEVEL, true) . rewrites: 1 result EquationSet: eq '$applySubstitution['Q:Qid,'S:Substitution] = 'Q:Qid [ owise] . eq '$applySubstitution['V:Variable,'_;_['S:Substitution,'_<-_['V:Variable, 'T:Term]]] = 'T:Term [none] . eq '$applySubstitution['_`,_['T:Term,'TL:NeTermList],'S:Substitution] = '_`,_[ '$applySubstitution['T:Term,'S:Substitution],'$applySubstitution[ 'TL:NeTermList,'S:Substitution]] [none] . eq '$applySubstitution['_`[_`]['Q:Qid,'TL:NeTermList],'S:Substitution] = '_`[_`]['Q:Qid,'$applySubstitution['TL:NeTermList,'S:Substitution]] [none] . eq '$card['none.EmptyQidSet,'C:Nat] = 'C:Nat [none] . eq '$card['_;_['E:Qid,'S:QidSet],'C:Nat] = '$card['S:QidSet,'_+_['C:Nat,'s_[ '0.Zero]]] [owise] . eq '$card['_;_['N:NeQidSet,'N:NeQidSet,'S:QidSet],'C:Nat] = '$card['_;_[ 'N:NeQidSet,'S:QidSet],'C:Nat] [none] . eq '$diff['none.EmptyQidSet,'S':QidSet,'A:QidSet] = 'A:QidSet [none] . eq '$diff['_;_['E:Qid,'S:QidSet],'S':QidSet,'A:QidSet] = '$diff['S:QidSet, 'S':QidSet,'if_then_else_fi['_in_['E:Qid,'S':QidSet],'A:QidSet,'_;_['E:Qid, 'A:QidSet]]] [none] . eq '$intersect['none.EmptyQidSet,'S':QidSet,'A:QidSet] = 'A:QidSet [none] . eq '$intersect['_;_['E:Qid,'S:QidSet],'S':QidSet,'A:QidSet] = '$intersect[ 'S:QidSet,'S':QidSet,'if_then_else_fi['_in_['E:Qid,'S':QidSet],'_;_['E:Qid, 'A:QidSet],'A:QidSet]] [none] . eq '$reverse['nil.NatList,'A:NatList] = 'A:NatList [none] . eq '$reverse['nil.TypeList,'A:QidList] = 'A:QidList [none] . eq '$reverse['__['E:Nat,'L:NatList],'A:NatList] = '$reverse['L:NatList,'__[ 'E:Nat,'A:NatList]] [none] . eq '$reverse['__['E:Qid,'L:QidList],'A:QidList] = '$reverse['L:QidList,'__[ 'E:Qid,'A:QidList]] [none] . eq '$size['nil.NatList,'C:Nat] = 'C:Nat [none] . eq '$size['nil.TypeList,'C:Nat] = 'C:Nat [none] . eq '$size['__['E:Nat,'L:NatList],'C:Nat] = '$size['L:NatList,'_+_['C:Nat,'s_[ '0.Zero]]] [none] . eq '$size['__['E:Qid,'L:QidList],'C:Nat] = '$size['L:QidList,'_+_['C:Nat,'s_[ '0.Zero]]] [none] . eq '_;_['A:Assignment,'A:Assignment] = 'A:Assignment [none] . eq '_;_['N:NeQidSet,'N:NeQidSet] = 'N:NeQidSet [none] . eq '_;_['T:TypeList,'T:TypeList] = 'T:TypeList [none] . eq '_\_['S:QidSet,'N:NeQidSet] = '$diff['S:QidSet,'N:NeQidSet, 'none.EmptyQidSet] [none] . eq '_\_['S:QidSet,'none.EmptyQidSet] = 'S:QidSet [none] . eq '__['A:Attr,'A:Attr] = 'A:Attr [none] . eq '__['D:StratDefinition,'D:StratDefinition] = 'D:StratDefinition [none] . eq '__['E:Equation,'E:Equation] = 'E:Equation [none] . eq '__['M:MembAx,'M:MembAx] = 'M:MembAx [none] . eq '__['O:OpDecl,'O:OpDecl] = 'O:OpDecl [none] . eq '__['O:OpMapping,'O:OpMapping] = 'O:OpMapping [none] . eq '__['O:StratDecl,'O:StratDecl] = 'O:StratDecl [none] . eq '__['R:Rule,'R:Rule] = 'R:Rule [none] . eq '__['S:SortMapping,'S:SortMapping] = 'S:SortMapping [none] . eq '__['S:StratMapping,'S:StratMapping] = 'S:StratMapping [none] . eq '__['S:SubsortDecl,'S:SubsortDecl] = 'S:SubsortDecl [none] . eq '_`,_['U:UsingPair,'U:UsingPair] = 'U:UsingPair [none] . eq '_and-then_['false.Bool,'B:`[Bool`]] = 'false.Bool [none] . eq '_and-then_['true.Bool,'B:`[Bool`]] = 'B:`[Bool`] [none] . eq '_and_['A:Bool,'A:Bool] = 'A:Bool [none] . eq '_and_['A:Bool,'_xor_['B:Bool,'C:Bool]] = '_xor_['_and_['A:Bool,'B:Bool], '_and_['A:Bool,'C:Bool]] [none] . eq '_and_['false.Bool,'A:Bool] = 'false.Bool [none] . eq '_and_['true.Bool,'A:Bool] = 'A:Bool [none] . eq '_implies_['A:Bool,'B:Bool] = 'not_['_xor_['A:Bool,'_and_['A:Bool,'B:Bool]]] [none] . eq '_in_['E:Qid,'S:QidSet] = 'false.Bool [owise] . eq '_in_['E:Qid,'_;_['E:Qid,'S:QidSet]] = 'true.Bool [none] . eq '_or-else_['false.Bool,'B:`[Bool`]] = 'B:`[Bool`] [none] . eq '_or-else_['true.Bool,'B:`[Bool`]] = 'true.Bool [none] . eq '_or_['A:Bool,'B:Bool] = '_xor_['_and_['A:Bool,'B:Bool],'_xor_['A:Bool, 'B:Bool]] [none] . eq '_psubset_['S:QidSet,'S':QidSet] = '_and-then_['_=/=_['S:QidSet,'S':QidSet], '_subset_['S:QidSet,'S':QidSet]] [none] . eq '_subset_['none.EmptyQidSet,'S':QidSet] = 'true.Bool [none] . eq '_subset_['_;_['E:Qid,'S:QidSet],'S':QidSet] = '_and-then_['_in_['E:Qid, 'S':QidSet],'_subset_['S:QidSet,'S':QidSet]] [none] . eq '_xor_['A:Bool,'A:Bool] = 'false.Bool [none] . eq '_xor_['false.Bool,'A:Bool] = 'A:Bool [none] . eq '`[_`]['Q:Qid] = 'sth_is_sorts_._______endsth['Q:Qid,'including_.['Q:Qid], 'none.EmptyQidSet,'none.SubsortDeclSet,'none.OpDeclSet,'none.MembAxSet, 'none.EquationSet,'none.RuleSet,'none.StratDeclSet,'none.StratDefSet] [ none] . eq 'append['A:NatList,'L:NatList] = '__['A:NatList,'L:NatList] [none] . eq 'append['A:QidList,'L:QidList] = '__['A:QidList,'L:QidList] [none] . eq 'applySubstitution['M:Module,'T:Term,'S:Substitution] = 'getTerm[ 'metaNormalize['M:Module,'$applySubstitution['T:Term,'S:Substitution]]] [ none] . eq 'delete['E:Qid,'S:QidSet] = 'S:QidSet [owise] . eq 'delete['E:Qid,'_;_['E:Qid,'S:QidSet]] = 'delete['E:Qid,'S:QidSet] [none] . eq 'front['__['L:NatList,'E:Nat]] = 'L:NatList [none] . eq 'front['__['L:QidList,'E:Qid]] = 'L:QidList [none] . eq 'getAccumulatedSubstitution['`{_`,_`,_`,_`,_`,_`,_`}['C:Context,'L:Qid, 'U:Substitution,'UV:Qid,'T:Term,'T:Type,'A:Substitution]] = 'A:Substitution [none] . eq 'getAccumulatedSubstitution['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type, 'A:Substitution,'SV:Qid,'U:Substitution,'UV:Qid]] = 'A:Substitution [none] . eq 'getContext['`{_`,_`,_`,_`,_`,_`,_`}['C:Context,'L:Qid,'U:Substitution, 'UV:Qid,'T:Term,'T:Type,'A:Substitution]] = 'C:Context [none] . eq 'getContext['`{_`,_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'C:Context,'L:Qid, 'TS:Substitution,'RS:Substitution,'V:Qid]] = 'C:Context [none] . eq 'getContext['`{_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution,'C:Context]] = 'C:Context [none] . eq 'getContext['`{_`,_`}['S:Substitution,'C:Context]] = 'C:Context [none] . eq 'getEqs['fmod_is_sorts_.____endfm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'EQS:EquationSet [none] . eq 'getEqs['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'EQS:EquationSet [none] . eq 'getEqs['mod_is_sorts_._____endm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'EQS:EquationSet [none] . eq 'getEqs['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'EQS:EquationSet [ none] . eq 'getEqs['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'EQS:EquationSet [ none] . eq 'getEqs['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'EQS:EquationSet [none] . eq 'getFrom['view_from_to_is___endv['Q:Qid,'ME:ModuleExpression, 'ME':ModuleExpression,'SMS:SortMappingSet,'OMS:OpMappingSet, 'TMS:StratMappingSet]] = 'ME:ModuleExpression [none] . eq 'getImports['fmod_is_sorts_.____endfm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'IL:ImportList [none] . eq 'getImports['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'IL:ImportList [none] . eq 'getImports['mod_is_sorts_._____endm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'IL:ImportList [none] . eq 'getImports['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'IL:ImportList [ none] . eq 'getImports['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'IL:ImportList [ none] . eq 'getImports['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'IL:ImportList [none] . eq 'getInitialSubstitution['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type, 'S:Substitution,'T:NarrowingTrace,'U:Substitution,'UV:Qid]] = 'S:Substitution [none] . eq 'getInitialTerm['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution, 'T:NarrowingTrace,'U:Substitution,'UV:Qid]] = 'T:Term [none] . eq 'getInitialType['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution, 'T:NarrowingTrace,'U:Substitution,'UV:Qid]] = 'T:Type [none] . eq 'getLabel['`{_`,_`,_`,_`,_`,_`,_`}['C:Context,'L:Qid,'U:Substitution, 'UV:Qid,'T:Term,'T:Type,'A:Substitution]] = 'L:Qid [none] . eq 'getLabel['`{_`,_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'C:Context,'L:Qid, 'TS:Substitution,'RS:Substitution,'V:Qid]] = 'L:Qid [none] . eq 'getLhsSubstitution['`{_`,_`,_`}['LS:Substitution,'RS:Substitution,'V:Qid]] = 'LS:Substitution [none] . eq 'getMbs['fmod_is_sorts_.____endfm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'MAS:MembAxSet [none] . eq 'getMbs['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'MAS:MembAxSet [none] . eq 'getMbs['mod_is_sorts_._____endm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'MAS:MembAxSet [none] . eq 'getMbs['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'MAS:MembAxSet [ none] . eq 'getMbs['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'MAS:MembAxSet [ none] . eq 'getMbs['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'MAS:MembAxSet [none] . eq 'getMoreVariantsInLayerFlag['`{_`,_`,_`,_`,_`}['T:Term,'S:Substitution, 'Q:Qid,'P:Parent,'B:Bool]] = 'B:Bool [none] . eq 'getName['C:Constant] = 'qid['substr['string['C:Constant],'0.Zero,'rfind[ 'string['C:Constant],'".".Char,'length['string['C:Constant]]]]] [none] . eq 'getName['V:Variable] = 'qid['substr['string['V:Variable],'0.Zero,'rfind[ 'string['V:Variable],'":".Char,'length['string['V:Variable]]]]] [none] . eq 'getName['fmod_is_sorts_.____endfm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'Q:Qid [none] . eq 'getName['fmod_is_sorts_.____endfm['_`{_`}['Q:Qid,'PDL:ParameterDeclList], 'IL:ImportList,'SS:SortSet,'SSDS:SubsortDeclSet,'OPDS:OpDeclSet, 'MAS:MembAxSet,'EQS:EquationSet]] = 'Q:Qid [none] . eq 'getName['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'Q:Qid [none] . eq 'getName['mod_is_sorts_._____endm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'Q:Qid [none] . eq 'getName['mod_is_sorts_._____endm['_`{_`}['Q:Qid,'PDL:ParameterDeclList], 'IL:ImportList,'SS:SortSet,'SSDS:SubsortDeclSet,'OPDS:OpDeclSet, 'MAS:MembAxSet,'EQS:EquationSet,'RLS:RuleSet]] = 'Q:Qid [none] . eq 'getName['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'Q:Qid [none] . eq 'getName['smod_is_sorts_._______endsm['_`{_`}['Q:Qid, 'PDL:ParameterDeclList],'IL:ImportList,'SS:SortSet,'SSDS:SubsortDeclSet, 'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet,'RLS:RuleSet, 'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'Q:Qid [none] . eq 'getName['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'Q:Qid [none] . eq 'getName['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'Q:Qid [none] . eq 'getName['view_from_to_is___endv['Q:Qid,'ME:ModuleExpression, 'ME':ModuleExpression,'SMS:SortMappingSet,'OMS:OpMappingSet, 'TMS:StratMappingSet]] = 'Q:Qid [none] . eq 'getName['view_from_to_is___endv['_`{_`}['Q:Qid,'PDL:ParameterDeclList], 'ME:ModuleExpression,'ME':ModuleExpression,'SMS:SortMappingSet, 'OMS:OpMappingSet,'TMS:StratMappingSet]] = 'Q:Qid [none] . eq 'getOpMappings['view_from_to_is___endv['Q:Qid,'ME:ModuleExpression, 'ME':ModuleExpression,'SMS:SortMappingSet,'OMS:OpMappingSet, 'TMS:StratMappingSet]] = 'OMS:OpMappingSet [none] . eq 'getOps['fmod_is_sorts_.____endfm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'OPDS:OpDeclSet [none] . eq 'getOps['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'OPDS:OpDeclSet [none] . eq 'getOps['mod_is_sorts_._____endm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'OPDS:OpDeclSet [none] . eq 'getOps['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'OPDS:OpDeclSet [ none] . eq 'getOps['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'OPDS:OpDeclSet [ none] . eq 'getOps['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'OPDS:OpDeclSet [none] . eq 'getParent['`{_`,_`,_`,_`,_`}['T:Term,'S:Substitution,'Q:Qid,'P:Parent, 'B:Bool]] = 'P:Parent [none] . eq 'getRhsSubstitution['`{_`,_`,_`}['LS:Substitution,'RS:Substitution,'V:Qid]] = 'RS:Substitution [none] . eq 'getRls['fmod_is_sorts_.____endfm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'none.RuleSet [none] . eq 'getRls['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'none.RuleSet [none] . eq 'getRls['mod_is_sorts_._____endm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'RLS:RuleSet [none] . eq 'getRls['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'RLS:RuleSet [none] . eq 'getRls['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'RLS:RuleSet [none] . eq 'getRls['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'RLS:RuleSet [none] . eq 'getRule['`{_`,_`,_`}['T:Term,'T:Type,'R:Rule]] = 'R:Rule [none] . eq 'getRuleSubstitution['`{_`,_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'C:Context, 'L:Qid,'TS:Substitution,'RS:Substitution,'V:Qid]] = 'RS:Substitution [none] . eq 'getSds['fmod_is_sorts_.____endfm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'none.StratDefSet [none] . eq 'getSds['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'none.StratDefSet [none] . eq 'getSds['mod_is_sorts_._____endm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'none.StratDefSet [none] . eq 'getSds['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'STDFS:StratDefSet [ none] . eq 'getSds['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'STDFS:StratDefSet [ none] . eq 'getSds['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'none.StratDefSet [none] . eq 'getSortMappings['view_from_to_is___endv['Q:Qid,'ME:ModuleExpression, 'ME':ModuleExpression,'SMS:SortMappingSet,'OMS:OpMappingSet, 'TMS:StratMappingSet]] = 'SMS:SortMappingSet [none] . eq 'getSorts['fmod_is_sorts_.____endfm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'SS:SortSet [none] . eq 'getSorts['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'SS:SortSet [none] . eq 'getSorts['mod_is_sorts_._____endm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'SS:SortSet [none] . eq 'getSorts['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'SS:SortSet [none] . eq 'getSorts['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'SS:SortSet [none] . eq 'getSorts['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'SS:SortSet [none] . eq 'getStateVariableFamily['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type, 'A:Substitution,'SV:Qid,'U:Substitution,'UV:Qid]] = 'SV:Qid [none] . eq 'getStratMappings['view_from_to_is___endv['Q:Qid,'ME:ModuleExpression, 'ME':ModuleExpression,'SMS:SortMappingSet,'OMS:OpMappingSet, 'TMS:StratMappingSet]] = 'TMS:StratMappingSet [none] . eq 'getStrats['fmod_is_sorts_.____endfm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'none.StratDeclSet [none] . eq 'getStrats['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'none.StratDeclSet [none] . eq 'getStrats['mod_is_sorts_._____endm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'none.StratDeclSet [none] . eq 'getStrats['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'STDS:StratDeclSet [ none] . eq 'getStrats['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'STDS:StratDeclSet [ none] . eq 'getStrats['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'none.StratDeclSet [none] . eq 'getSubsorts['fmod_is_sorts_.____endfm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'SSDS:SubsortDeclSet [none] . eq 'getSubsorts['fth_is_sorts_.____endfth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet]] = 'SSDS:SubsortDeclSet [none] . eq 'getSubsorts['mod_is_sorts_._____endm['H:Header,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'SSDS:SubsortDeclSet [none] . eq 'getSubsorts['smod_is_sorts_._______endsm['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'SSDS:SubsortDeclSet [none] . eq 'getSubsorts['sth_is_sorts_._______endsth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet,'STDS:StratDeclSet,'STDFS:StratDefSet]] = 'SSDS:SubsortDeclSet [none] . eq 'getSubsorts['th_is_sorts_._____endth['Q:Qid,'IL:ImportList,'SS:SortSet, 'SSDS:SubsortDeclSet,'OPDS:OpDeclSet,'MAS:MembAxSet,'EQS:EquationSet, 'RLS:RuleSet]] = 'SSDS:SubsortDeclSet [none] . eq 'getSubstitution['`{_`,_`,_`,_`,_`}['T:Term,'S:Substitution,'Q:Qid, 'P:Parent,'B:Bool]] = 'S:Substitution [none] . eq 'getSubstitution['`{_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution, 'C:Context]] = 'S:Substitution [none] . eq 'getSubstitution['`{_`,_`,_`}['T:Term,'T:Type,'S:Substitution]] = 'S:Substitution [none] . eq 'getSubstitution['`{_`,_`}['S:Substitution,'C:Context]] = 'S:Substitution [ none] . eq 'getSubstitution['`{_`,_`}['S:Substitution,'V:Qid]] = 'S:Substitution [none] . eq 'getTerm['`{_`,_`,_`,_`,_`,_`,_`}['C:Context,'L:Qid,'U:Substitution,'UV:Qid, 'T:Term,'T:Type,'A:Substitution]] = 'T:Term [none] . eq 'getTerm['`{_`,_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'C:Context,'L:Qid, 'TS:Substitution,'RS:Substitution,'V:Qid]] = 'T:Term [none] . eq 'getTerm['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'A:Substitution,'SV:Qid, 'U:Substitution,'UV:Qid]] = 'T:Term [none] . eq 'getTerm['`{_`,_`,_`,_`,_`}['T:Term,'S:Substitution,'Q:Qid,'P:Parent, 'B:Bool]] = 'T:Term [none] . eq 'getTerm['`{_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution,'C:Context]] = 'T:Term [none] . eq 'getTerm['`{_`,_`,_`}['T:Term,'T:Type,'R:Rule]] = 'T:Term [none] . eq 'getTerm['`{_`,_`,_`}['T:Term,'T:Type,'S:Substitution]] = 'T:Term [none] . eq 'getTerm['`{_`,_`}['T:Term,'T:Type]] = 'T:Term [none] . eq 'getTermSubstitution['`{_`,_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'C:Context, 'L:Qid,'TS:Substitution,'RS:Substitution,'V:Qid]] = 'TS:Substitution [none] . eq 'getTo['view_from_to_is___endv['Q:Qid,'ME:ModuleExpression, 'ME':ModuleExpression,'SMS:SortMappingSet,'OMS:OpMappingSet, 'TMS:StratMappingSet]] = 'ME':ModuleExpression [none] . eq 'getTrace['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution, 'T:NarrowingTrace,'U:Substitution,'UV:Qid]] = 'T:NarrowingTrace [none] . eq 'getType['C:Constant] = 'qid['substr['string['C:Constant],'_+_['s_['0.Zero], 'rfind['string['C:Constant],'".".Char,'length['string['C:Constant]]]], 'length['string['C:Constant]]]] [none] . eq 'getType['V:Variable] = 'qid['substr['string['V:Variable],'_+_['s_['0.Zero], 'rfind['string['V:Variable],'":".Char,'length['string['V:Variable]]]], 'length['string['V:Variable]]]] [none] . eq 'getType['`{_`,_`,_`,_`,_`,_`,_`}['C:Context,'L:Qid,'U:Substitution,'UV:Qid, 'T:Term,'T:Type,'A:Substitution]] = 'T:Type [none] . eq 'getType['`{_`,_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'C:Context,'L:Qid, 'TS:Substitution,'RS:Substitution,'V:Qid]] = 'T:Type [none] . eq 'getType['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'A:Substitution,'SV:Qid, 'U:Substitution,'UV:Qid]] = 'T:Type [none] . eq 'getType['`{_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution,'C:Context]] = 'T:Type [none] . eq 'getType['`{_`,_`,_`}['T:Term,'T:Type,'R:Rule]] = 'T:Type [none] . eq 'getType['`{_`,_`,_`}['T:Term,'T:Type,'S:Substitution]] = 'T:Type [none] . eq 'getType['`{_`,_`}['T:Term,'T:Type]] = 'T:Type [none] . eq 'getUnifier['`{_`,_`,_`,_`,_`,_`,_`}['C:Context,'L:Qid,'U:Substitution, 'UV:Qid,'T:Term,'T:Type,'A:Substitution]] = 'U:Substitution [none] . eq 'getUnifier['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'A:Substitution,'SV:Qid, 'U:Substitution,'UV:Qid]] = 'U:Substitution [none] . eq 'getUnifier['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'S:Substitution, 'T:NarrowingTrace,'U:Substitution,'UV:Qid]] = 'U:Substitution [none] . eq 'getUnifierVariableFamily['`{_`,_`,_`,_`,_`,_`,_`}['C:Context,'L:Qid, 'U:Substitution,'UV:Qid,'T:Term,'T:Type,'A:Substitution]] = 'UV:Qid [none] . eq 'getUnifierVariableFamily['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type, 'A:Substitution,'SV:Qid,'U:Substitution,'UV:Qid]] = 'UV:Qid [none] . eq 'getUnifierVariableFamily['`{_`,_`,_`,_`,_`,_`}['T:Term,'T:Type, 'S:Substitution,'T:NarrowingTrace,'U:Substitution,'UV:Qid]] = 'UV:Qid [ none] . eq 'getVariableFamily['`{_`,_`,_`,_`,_`,_`,_`}['T:Term,'T:Type,'C:Context, 'L:Qid,'TS:Substitution,'RS:Substitution,'V:Qid]] = 'V:Qid [none] . eq 'getVariableFamily['`{_`,_`,_`,_`,_`}['T:Term,'S:Substitution,'Q:Qid, 'P:Parent,'B:Bool]] = 'Q:Qid [none] . eq 'getVariableFamily['`{_`,_`,_`}['LS:Substitution,'RS:Substitution,'V:Qid]] = 'V:Qid [none] . eq 'getVariableFamily['`{_`,_`}['S:Substitution,'V:Qid]] = 'V:Qid [none] . eq 'head['__['E:Nat,'L:NatList]] = 'E:Nat [none] . eq 'head['__['E:Qid,'L:QidList]] = 'E:Qid [none] . eq 'insert['E:Qid,'S:QidSet] = '_;_['E:Qid,'S:QidSet] [none] . eq 'intersection['S:QidSet,'N:NeQidSet] = '$intersect['S:QidSet,'N:NeQidSet, 'none.EmptyQidSet] [none] . eq 'intersection['S:QidSet,'none.EmptyQidSet] = 'none.EmptyQidSet [none] . eq 'last['__['L:NatList,'E:Nat]] = 'E:Nat [none] . eq 'last['__['L:QidList,'E:Qid]] = 'E:Qid [none] . eq 'metaNarrowingApply['M:Module,'T:Term,'TL:TermList,'Q:Qid,'N:Nat] = 'metaNarrowingApply['M:Module,'T:Term,'TL:TermList,'Q:Qid, 'none.VariantOptionSet,'N:Nat] [none] . eq 'metaNarrowingSearch['M:Module,'T:Term,'T2:Term,'S:Qid,'B:Bound,'F:Qid, 'N:Nat] = 'metaNarrowingSearch['M:Module,'T:Term,'T2:Term,'S:Qid,'B:Bound, 'F:Qid,'none.VariantOptionSet,'N:Nat] [none] . eq 'metaNarrowingSearchPath['M:Module,'T:Term,'T2:Term,'S:Qid,'B:Bound,'F:Qid, 'N:Nat] = 'metaNarrowingSearchPath['M:Module,'T:Term,'T2:Term,'S:Qid, 'B:Bound,'F:Qid,'none.VariantOptionSet,'N:Nat] [none] . eq 'metaParse['M:Module,'Q:QidList,'T:Type?] = 'metaParse['M:Module, 'none.EmptyQidSet,'Q:QidList,'T:Type?] [none] . eq 'metaPrettyPrint['M:Module,'T:Term] = 'metaPrettyPrint['M:Module, 'none.EmptyQidSet,'T:Term,'__['mixfix.PrintOption,'__['flat.PrintOption, '__['format.PrintOption,'__['number.PrintOption,'rat.PrintOption]]]]] [ none] . eq 'metaPrettyPrint['M:Module,'T:Term,'P:PrintOptionSet] = 'metaPrettyPrint[ 'M:Module,'none.EmptyQidSet,'T:Term,'P:PrintOptionSet] [none] . eq 'metaVariantDisjointUnify['M:Module,'U:UnificationProblem,'TL:TermList, 'Q:Qid,'N:Nat] = 'metaVariantDisjointUnify['M:Module,'U:UnificationProblem, 'TL:TermList,'Q:Qid,'none.VariantOptionSet,'N:Nat] [none] . eq 'metaVariantUnify['M:Module,'U:UnificationProblem,'TL:TermList,'Q:Qid, 'N:Nat] = 'metaVariantUnify['M:Module,'U:UnificationProblem,'TL:TermList, 'Q:Qid,'none.VariantOptionSet,'N:Nat] [none] . eq 'not_['A:Bool] = '_xor_['true.Bool,'A:Bool] [none] . eq 'occurs['E:Nat,'nil.NatList] = 'false.Bool [none] . eq 'occurs['E:Nat,'__['E':Nat,'L:NatList]] = 'if_then_else_fi['_==_['E:Nat, 'E':Nat],'true.Bool,'occurs['E:Nat,'L:NatList]] [none] . eq 'occurs['E:Qid,'nil.TypeList] = 'false.Bool [none] . eq 'occurs['E:Qid,'__['E':Qid,'L:QidList]] = 'if_then_else_fi['_==_['E:Qid, 'E':Qid],'true.Bool,'occurs['E:Qid,'L:QidList]] [none] . eq 'reverse['L:NatList] = '$reverse['L:NatList,'nil.NatList] [none] . eq 'reverse['L:QidList] = '$reverse['L:QidList,'nil.TypeList] [none] . eq 'size['L:NatList] = '$size['L:NatList,'0.Zero] [none] . eq 'size['L:QidList] = '$size['L:QidList,'0.Zero] [none] . eq 'tail['__['E:Nat,'L:NatList]] = 'L:NatList [none] . eq 'tail['__['E:Qid,'L:QidList]] = 'L:QidList [none] . eq 'union['S:QidSet,'S':QidSet] = '_;_['S:QidSet,'S':QidSet] [none] . eq '|_|['S:QidSet] = '$card['S:QidSet,'0.Zero] [none] . Bye. maude-3.1/tests/Meta/metaIntStrategy.expected0000644000175200017520000000742313565216260016310 00000000000000========================================== erewrite in RUN : <> < me : User | option: breadthFirst,output: empty,input: n1999 @ 'additive-normal-form[[empty]] > createInterpreter( interpreterManager, me, none) . rewrites: 120 result Configuration: <> < me : User | option: breadthFirst,output: ('__[ 'M.RomanSymbol,'D.RomanSymbol,'C.RomanSymbol,'X.RomanSymbol,'V.RomanSymbol, 'I.RomanSymbol,'I.RomanSymbol,'I.RomanSymbol,'I.RomanSymbol]),solcount: 1, input: '__['M.RomanSymbol,'C.RomanSymbol,'M.RomanSymbol,'X.RomanSymbol, 'C.RomanSymbol,'I.RomanSymbol,'X.RomanSymbol] @ 'additive-normal-form[[ empty]] > noSuchResult(me, interpreter(0), 115) ========================================== erewrite in RUN : <> < me : User | option: depthFirst,output: empty,input: n1999 @ 'additive-normal-form[[empty]] > createInterpreter( interpreterManager, me, none) . rewrites: 120 result Configuration: <> < me : User | option: depthFirst,output: ('__[ 'M.RomanSymbol,'D.RomanSymbol,'C.RomanSymbol,'X.RomanSymbol,'V.RomanSymbol, 'I.RomanSymbol,'I.RomanSymbol,'I.RomanSymbol,'I.RomanSymbol]),solcount: 1, input: '__['M.RomanSymbol,'C.RomanSymbol,'M.RomanSymbol,'X.RomanSymbol, 'C.RomanSymbol,'I.RomanSymbol,'X.RomanSymbol] @ 'additive-normal-form[[ empty]] > noSuchResult(me, interpreter(0), 115) ========================================== erewrite in RUN : <> < me : User | option: depthFirst,output: empty,input: n1999 @ 'add[none]{empty} > createInterpreter(interpreterManager, me, none) . rewrites: 10 result Configuration: <> < me : User | option: depthFirst,output: ('__[ 'M.RomanSymbol,'D.RomanSymbol,'X.RomanSymbol,'X.RomanSymbol,'X.RomanSymbol, 'X.RomanSymbol,'X.RomanSymbol,'C.RomanSymbol,'I.RomanSymbol, 'X.RomanSymbol],'__['M.RomanSymbol,'C.RomanSymbol,'M.RomanSymbol, 'X.RomanSymbol,'C.RomanSymbol,'V.RomanSymbol,'I.RomanSymbol,'I.RomanSymbol, 'I.RomanSymbol,'I.RomanSymbol],'__['M.RomanSymbol,'C.RomanSymbol, 'M.RomanSymbol,'L.RomanSymbol,'X.RomanSymbol,'X.RomanSymbol,'X.RomanSymbol, 'X.RomanSymbol,'I.RomanSymbol,'X.RomanSymbol]),solcount: 3,input: '__[ 'M.RomanSymbol,'C.RomanSymbol,'M.RomanSymbol,'X.RomanSymbol,'C.RomanSymbol, 'I.RomanSymbol,'X.RomanSymbol] @ 'add[none]{empty} > noSuchResult(me, interpreter(0), 3) ========================================== erewrite in RUN : <> < me : User | option: depthFirst,output: empty,input: n1999 @ 'sort[none]{empty} ; 'add[none]{empty} > createInterpreter( interpreterManager, me, none) . rewrites: 74 result Configuration: <> < me : User | option: depthFirst,output: ('__[ 'M.RomanSymbol,'M.RomanSymbol,'C.RomanSymbol,'X.RomanSymbol,'C.RomanSymbol, 'V.RomanSymbol,'I.RomanSymbol,'I.RomanSymbol,'I.RomanSymbol, 'I.RomanSymbol],'__['M.RomanSymbol,'M.RomanSymbol,'C.RomanSymbol, 'L.RomanSymbol,'X.RomanSymbol,'X.RomanSymbol,'X.RomanSymbol,'X.RomanSymbol, 'I.RomanSymbol,'X.RomanSymbol],'__['M.RomanSymbol,'D.RomanSymbol, 'X.RomanSymbol,'X.RomanSymbol,'X.RomanSymbol,'X.RomanSymbol,'C.RomanSymbol, 'X.RomanSymbol,'I.RomanSymbol,'X.RomanSymbol],'__['M.RomanSymbol, 'C.RomanSymbol,'M.RomanSymbol,'C.RomanSymbol,'X.RomanSymbol,'V.RomanSymbol, 'I.RomanSymbol,'I.RomanSymbol,'I.RomanSymbol,'I.RomanSymbol],'__[ 'M.RomanSymbol,'D.RomanSymbol,'X.RomanSymbol,'X.RomanSymbol,'X.RomanSymbol, 'X.RomanSymbol,'X.RomanSymbol,'C.RomanSymbol,'X.RomanSymbol, 'I.RomanSymbol],'__['M.RomanSymbol,'C.RomanSymbol,'M.RomanSymbol, 'L.RomanSymbol,'X.RomanSymbol,'X.RomanSymbol,'X.RomanSymbol,'X.RomanSymbol, 'X.RomanSymbol,'I.RomanSymbol]),solcount: 6,input: '__['M.RomanSymbol, 'C.RomanSymbol,'M.RomanSymbol,'X.RomanSymbol,'C.RomanSymbol,'I.RomanSymbol, 'X.RomanSymbol] @ 'sort[none]{empty} ; 'add[none]{empty} > noSuchResult(me, interpreter(0), 64) Bye. maude-3.1/tests/Meta/metaIntStrategy0000755000175200017520000000037013565216260014505 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaIntStrategy.maude -no-banner -no-advise \ > metaIntStrategy.out 2>&1 diff $srcdir/metaIntStrategy.expected metaIntStrategy.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaVariantUnify2.maude0000644000175200017520000001232213724061465016022 00000000000000set show timing off . *** *** We test the effect of delay and filter flags. *** fmod EXCLUSIVE-OR is sorts Elem ElemXor . subsort Elem < ElemXor . ops a b c : -> Elem . op mt : -> ElemXor . op _*_ : ElemXor ElemXor -> ElemXor [assoc comm] . vars X Y Z U V : [ElemXor] . vars V1 V2 V3 V4 V5 V6 V7 V8 V9 : [ElemXor] . eq [idem] : X * X = mt [variant] . eq [idem-Coh] : X * X * Z = Z [variant] . eq [id] : X * mt = X [variant] . op f1 : [ElemXor] -> [ElemXor] . op f2 : [ElemXor] [ElemXor] -> [ElemXor] . op f3 : [ElemXor] [ElemXor] [ElemXor] -> [ElemXor] . endfm fmod META-VARIANT-TEST is pr EXCLUSIVE-OR . inc META-LEVEL . sort UnifierList . subsorts UnificationPair < UnifierList . op _;_ : UnifierList UnifierList -> UnifierList [assoc id: nil] . op nil : -> UnifierList . op getUnifiers : Module UnificationProblem VariantOptionSet Nat -> UnifierList . var M : Module . var U : UnificationProblem . var V : VariantOptionSet . var N : Nat . eq getUnifiers(M, U, V, N) = if metaVariantUnify(M, U, empty, '#, V, N) == noUnifier or metaVariantUnify(M, U, empty, '#, V, N) == noUnifierIncomplete then nil else metaVariantUnify(M, U, empty, '#, V, N) ; getUnifiers(M, U, V, N + 1) fi . vars V1 V2 V3 V4 V5 V6 V7 V8 V9 : [ElemXor] . endfm red getUnifiers(['EXCLUSIVE-OR], upTerm(V1 * V2) =? upTerm(f1(V3 * V3 * f1(V4))), none, 0) . red getUnifiers(['EXCLUSIVE-OR], upTerm(V1 * V2) =? upTerm(f1(V3 * V3 * f1(V4))), delay, 0) . red getUnifiers(['EXCLUSIVE-OR], upTerm(V1 * V2) =? upTerm(f1(V3 * V3 * f1(V4))), filter, 0) . red getUnifiers(['EXCLUSIVE-OR], upTerm(V1 * V2) =? upTerm(f1(V3 * V3 * f1(V4))), delay filter, 0) . red getUnifiers(['EXCLUSIVE-OR], upTerm(f1(V1) * f1(V2)) =? upTerm(f1(V3) * f1(V3 * V4)), none, 0) . red getUnifiers(['EXCLUSIVE-OR], upTerm(f1(V1) * f1(V2)) =? upTerm(f1(V3) * f1(V3 * V4)), delay, 0) . red getUnifiers(['EXCLUSIVE-OR], upTerm(f1(V1) * f1(V2)) =? upTerm(f1(V3) * f1(V3 * V4)), filter, 0) . red getUnifiers(['EXCLUSIVE-OR], upTerm(f1(V1) * f1(V2)) =? upTerm(f1(V3) * f1(V3 * V4)), delay filter, 0) . red getUnifiers(['EXCLUSIVE-OR], upTerm(f1(a) * f1(V1)) =? upTerm(f1(V2 * b) * f1(V3 * c)), none, 0) . red getUnifiers(['EXCLUSIVE-OR], upTerm(f1(a) * f1(V1)) =? upTerm(f1(V2 * b) * f1(V3 * c)), delay, 0) . red getUnifiers(['EXCLUSIVE-OR], upTerm(f1(a) * f1(V1)) =? upTerm(f1(V2 * b) * f1(V3 * c)), filter, 0) . red getUnifiers(['EXCLUSIVE-OR], upTerm(f1(a) * f1(V1)) =? upTerm(f1(V2 * b) * f1(V3 * c)), delay filter, 0) . fmod META-VARIANT-TEST is pr EXCLUSIVE-OR . inc META-LEVEL . sort UnifierList . subsorts UnificationTriple < UnifierList . op _;_ : UnifierList UnifierList -> UnifierList [assoc id: nil] . op nil : -> UnifierList . op getUnifiers : Module UnificationProblem VariantOptionSet Nat -> UnifierList . var M : Module . var U : UnificationProblem . var V : VariantOptionSet . var N : Nat . eq getUnifiers(M, U, V, N) = if metaVariantDisjointUnify(M, U, empty, '#, V, N) == noUnifier or metaVariantDisjointUnify(M, U, empty, '#, V, N) == noUnifierIncomplete then nil else metaVariantDisjointUnify(M, U, empty, '#, V, N) ; getUnifiers(M, U, V, N + 1) fi . vars V1 V2 V3 V4 V5 V6 V7 V8 V9 : [ElemXor] . endfm red getUnifiers(['EXCLUSIVE-OR], upTerm(V1 * V2) =? upTerm(f1(V3 * V3 * f1(V4))), none, 0) . red getUnifiers(['EXCLUSIVE-OR], upTerm(V1 * V2) =? upTerm(f1(V3 * V3 * f1(V4))), delay, 0) . red getUnifiers(['EXCLUSIVE-OR], upTerm(V1 * V2) =? upTerm(f1(V3 * V3 * f1(V4))), filter, 0) . red getUnifiers(['EXCLUSIVE-OR], upTerm(V1 * V2) =? upTerm(f1(V3 * V3 * f1(V4))), delay filter, 0) . red getUnifiers(['EXCLUSIVE-OR], upTerm(f1(V1) * f1(V2)) =? upTerm(f1(V3) * f1(V3 * V4)), none, 0) . red getUnifiers(['EXCLUSIVE-OR], upTerm(f1(V1) * f1(V2)) =? upTerm(f1(V3) * f1(V3 * V4)), delay, 0) . red getUnifiers(['EXCLUSIVE-OR], upTerm(f1(V1) * f1(V2)) =? upTerm(f1(V3) * f1(V3 * V4)), filter, 0) . red getUnifiers(['EXCLUSIVE-OR], upTerm(f1(V1) * f1(V2)) =? upTerm(f1(V3) * f1(V3 * V4)), delay filter, 0) . red getUnifiers(['EXCLUSIVE-OR], upTerm(f1(a) * f1(V1)) =? upTerm(f1(V2 * b) * f1(V3 * c)), none, 0) . red getUnifiers(['EXCLUSIVE-OR], upTerm(f1(a) * f1(V1)) =? upTerm(f1(V2 * b) * f1(V3 * c)), delay, 0) . red getUnifiers(['EXCLUSIVE-OR], upTerm(f1(a) * f1(V1)) =? upTerm(f1(V2 * b) * f1(V3 * c)), filter, 0) . red getUnifiers(['EXCLUSIVE-OR], upTerm(f1(a) * f1(V1)) =? upTerm(f1(V2 * b) * f1(V3 * c)), delay filter, 0) . maude-3.1/tests/Meta/metaPolymorph.expected0000644000175200017520000001003013140741642016004 00000000000000========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is including 'STRING . sorts 'Value . none (op 'eq : 'Universal 'Universal -> 'Value [poly(1 2) special( id-hook('EqualitySymbol, nil) term-hook('equalTerm, 'tt.Value) term-hook('notEqualTerm, 'ff.Value))] . op 'ff : nil -> 'Value [none] .) op 'tt : nil -> 'Value [none] . none none endfm, 'eq['"a".String,'"a".String]) . rewrites: 2 result ResultPair: {'tt.Value,'Value} ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is including 'STRING . sorts 'Value . none (op 'eq : 'Universal 'Universal -> 'Value [poly(1 2) special( id-hook('EqualitySymbol, nil) term-hook('equalTerm, 'tt.Value) term-hook('notEqualTerm, 'ff.Value))] . op 'ff : nil -> 'Value [none] .) op 'tt : nil -> 'Value [none] . none none endfm, 'eq['"a".String,'"b".String]) . rewrites: 2 result ResultPair: {'ff.Value,'Value} ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is including 'STRING . sorts 'Value . none (op '? : 'Value 'Universal 'Universal -> 'Universal [poly(2 3 0) special( id-hook('BranchSymbol, nil) term-hook('1, 'tt.Value) term-hook('2, 'ff.Value))] . op 'ff : nil -> 'Value [none] .) op 'tt : nil -> 'Value [none] . none none endfm, '?['tt.Value,'"a".String,'"b".String]) . rewrites: 2 result ResultPair: {'"a".Char,'Char} ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is including 'STRING . sorts 'Value . none (op '? : 'Value 'Universal 'Universal -> 'Universal [poly(2 3 0) special( id-hook('BranchSymbol, nil) term-hook('1, 'tt.Value) term-hook('2, 'ff.Value))] . op 'ff : nil -> 'Value [none] .) op 'tt : nil -> 'Value [none] . none none endfm, '?['ff.Value,'"a".String,'"b".String]) . rewrites: 2 result ResultPair: {'"b".Char,'Char} ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is including 'STRING . including 'META-LEVEL . sorts none . none op '^ : 'Universal -> 'Term [poly(1) special( id-hook('MetaLevelOpSymbol, 'metaUpTerm) op-hook('shareWith, 'metaReduce, 'Module 'Term, 'ResultPair))] . none none endfm, '^['"a".String]) . rewrites: 2 result ResultPair: {''"a".Char.Constant,'Constant} ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is including 'STRING . including 'META-LEVEL . sorts none . none op '! : 'Term 'Universal -> 'Universal [poly(2 0) special( id-hook('MetaLevelOpSymbol, 'metaDownTerm) op-hook('shareWith, 'metaReduce, 'Module 'Term, 'ResultPair))] . none none endfm, '![''"a".String.Constant,'"b".String]) . rewrites: 2 result ResultPair: {'"a".Char,'Char} ========================================== reduce in META-LEVEL : metaReduce(fmod 'POLY-ID3 is including 'BOOL . sorts 'Foo . none op '1 : nil -> 'Foo [none] . op 'f : 'Universal 'Foo -> 'Universal [right-id('1.Foo) poly(1 0)] . none none endfm, 'f['true.Bool,'1.Foo]) . rewrites: 1 result ResultPair: {'true.Bool,'Bool} ========================================== reduce in META-LEVEL : metaReduce(fmod 'POLY-ID3 is including 'BOOL . sorts 'Foo . none (op 'f : 'Universal 'Foo -> 'Universal [right-id('1.Foo) poly(1 0)] . op 'g : 'Univeral -> 'Universal [poly(1 0)] .) op '1 : nil -> 'Foo [none] . none eq 'g['f['true.Bool,'X:Foo]] = 'false.Bool [none] . endfm, 'g['true.Bool]) . rewrites: 2 result ResultPair: {'false.Bool,'Bool} ========================================== reduce in META-LEVEL : metaReduce(fmod 'POLY-ID3 is including 'BOOL . sorts 'Foo . none op '1 : nil -> 'Universal [poly(0)] . none none endfm, '1.Bool) . rewrites: 1 result ResultPair: {'1.`[Bool`],'`[Bool`]} ========================================== reduce in META-LEVEL : metaReduce(fmod 'POLY-ID3 is including 'BOOL . sorts 'Foo . none op '1 : nil -> 'Universal [poly(0)] . none none endfm, '1.Foo) . rewrites: 1 result ResultPair: {'1.`[Foo`],'`[Foo`]} Bye. maude-3.1/tests/Meta/metaIntNewNarrow.maude0000644000175200017520000001440513730465014015715 00000000000000set show timing off . set show advisories off . *** *** Test getOneStepNarrowing() in the meta-interpreter. *** load metaInterpreter mod NARROW is sort Foo . op f : Foo Foo -> Foo [assoc comm] . ops g h : Foo -> Foo . ops a b c d e : -> Foo . vars X Y Z W : Foo . rl g(f(X, X)) => h(X) [narrowing]. endm mod NARROW-TEST is pr META-INTERPRETER . sort MsgList . subsort Msg < MsgList . op empty : -> MsgList . op _;_ : MsgList MsgList -> MsgList [assoc id: empty] . op me : -> Oid . op User : -> Cid . op soln:_ : Nat -> Attribute . op got:_ : MsgList -> Attribute . op start:_ : Term -> Attribute . op irred:_ : TermList -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . vars N M : Nat . vars S S' : Substitution . var ST T : Term . var TY : Type . var C : Context . var Q L : Qid . var ML : MsgList . var TL : TermList . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('NARROW, true)) . rl < X : User | AS, start: ST, irred: TL > insertedModule(X, Y) => < X : User | AS, soln: 1, start: ST, irred: TL, got: empty > getOneStepNarrowing(Y, X, 'NARROW, ST, TL, '#, 0) . rl < X : User | AS, soln: N, start: ST, irred: TL, got: ML > gotOneStepNarrowing(X, Y, M, T, TY, C, L, S, S', Q) => < X : User | AS, soln: (N + 1), start: ST, irred: TL, got: (ML ; gotOneStepNarrowing(X, Y, M, T, TY, C, L, S, S', Q)) > getOneStepNarrowing(Y, X, 'NARROW, ST, TL, '#, N) . endm set show breakdown on . erew in NARROW-TEST : <> < me : User | start: ('g['f['#22:Foo, '#21:Foo, '#23:Foo]]), irred: empty > createInterpreter(interpreterManager, me, none) . mod NARROW is sort Foo . op f : Foo Foo -> Foo [assoc] . ops g h : Foo -> Foo . ops a b c d e : -> Foo . vars X Y Z W : Foo . rl g(f(X, X)) => h(X) [narrowing]. endm erew in NARROW-TEST : <> < me : User | start: ('g['f['#22:Foo, '#21:Foo, '#23:Foo]]), irred: empty > createInterpreter(interpreterManager, me, none) . erew in NARROW-TEST : <> < me : User | start: ('g['f['#22:Foo, '#22:Foo, '#23:Foo]]), irred: empty > createInterpreter(interpreterManager, me, none) . erew in NARROW-TEST : <> < me : User | start: ('g['f['#22:Foo, '#23:Foo, '#23:Foo]]), irred: empty > createInterpreter(interpreterManager, me, none) . mod XOR is sorts Elt Expr . subsort Elt < Expr . ops a b c d e : -> Elt . op _+_ : Expr Expr -> Expr [assoc comm] . op 0 : -> Elt . vars W X Y Z : Expr . eq Y + 0 = Y [variant] . eq X + X = 0 [variant] . eq X + X + Y = Y [variant] . endm mod NARROW is inc XOR . ops g h : Expr -> Expr . op f : Expr Expr -> Expr . vars W X Y Z : Expr . rl g(Y + a) => h(Y) [narrowing label one] . endm *** bound variable in irreducibility constraint erew in NARROW-TEST : <> < me : User | start: ('f['g['_+_['W:Expr, 'b.Elt]], 'Z:Expr]), irred: ('_+_['W:Expr, 'b.Elt]) > createInterpreter(interpreterManager, me, none) . *** unbound variable in irreducibility constraint erew in NARROW-TEST : <> < me : User | start: ('f['g['_+_['W:Expr, 'b.Elt]], 'Z:Expr]), irred: ('_+_['X:Expr, 'b.Elt]) > createInterpreter(interpreterManager, me, none) . *** # variable in input erew in NARROW-TEST : <> < me : User | start: ('f['g['_+_['#1:Expr, 'b.Elt]], '#2:Expr]), irred: ('_+_['#3:Expr, 'b.Elt]) > createInterpreter(interpreterManager, me, none) . mod NARROW-TEST2 is pr META-INTERPRETER . sort MsgList . subsort Msg < MsgList . op empty : -> MsgList . op _;_ : MsgList MsgList -> MsgList [assoc id: empty] . op me : -> Oid . op User : -> Cid . op soln:_ : Nat -> Attribute . op got:_ : MsgList -> Attribute . op start:_ : Term -> Attribute . op irred:_ : TermList -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . vars N M : Nat . vars S S' : Substitution . var ST T : Term . var TY : Type . var C : Context . var Q L : Qid . var ML : MsgList . var TL : TermList . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('NARROW, true)) . rl < X : User | AS, start: ST, irred: TL > insertedModule(X, Y) => < X : User | AS, soln: 1, start: ST, irred: TL, got: empty > getOneStepNarrowing(Y, X, 'NARROW, ST, TL, '#, (delay filter), 0) . rl < X : User | AS, soln: N, start: ST, irred: TL, got: ML > gotOneStepNarrowing(X, Y, M, T, TY, C, L, S, S', Q) => < X : User | AS, soln: (N + 1), start: ST, irred: TL, got: (ML ; gotOneStepNarrowing(X, Y, M, T, TY, C, L, S, S', Q)) > getOneStepNarrowing(Y, X, 'NARROW, ST, TL, '#, (delay filter), N) . endm *** bound variable in irreducibility constraint erew in NARROW-TEST2 : <> < me : User | start: ('f['g['_+_['W:Expr, 'b.Elt]], 'Z:Expr]), irred: ('_+_['W:Expr, 'b.Elt]) > createInterpreter(interpreterManager, me, none) . *** unbound variable in irreducibility constraint erew in NARROW-TEST2 : <> < me : User | start: ('f['g['_+_['W:Expr, 'b.Elt]], 'Z:Expr]), irred: ('_+_['X:Expr, 'b.Elt]) > createInterpreter(interpreterManager, me, none) . *** # variable in input erew in NARROW-TEST2 : <> < me : User | start: ('f['g['_+_['#1:Expr, 'b.Elt]], '#2:Expr]), irred: ('_+_['#3:Expr, 'b.Elt]) > createInterpreter(interpreterManager, me, none) . fmod EXCLUSIVE-OR is sorts Elem ElemXor . subsort Elem < ElemXor . ops a b c : -> Elem . op mt : -> ElemXor . op _*_ : ElemXor ElemXor -> ElemXor [assoc comm] . vars X Y Z U V : [ElemXor] . vars V1 V2 V3 V4 V5 V6 V7 V8 V9 : [ElemXor] . eq [idem] : X * X = mt [variant] . eq [idem-Coh] : X * X * Z = Z [variant] . eq [id] : X * mt = X [variant] . op f1 : [ElemXor] -> [ElemXor] . op f2 : [ElemXor] [ElemXor] -> [ElemXor] . op f3 : [ElemXor] [ElemXor] [ElemXor] -> [ElemXor] . endfm mod NARROW is inc EXCLUSIVE-OR . vars W X Y Z : [ElemXor] . op f : ElemXor ElemXor -> ElemXor . rl X * Y => f(X, Y) [narrowing label one] . endm *** 57 unifiers variant unify in NARROW : A:ElemXor * B:ElemXor =? X * Y . *** 1 unifier filtered variant unify in NARROW : A:ElemXor * B:ElemXor =? X * Y . erew in NARROW-TEST : <> < me : User | start: ('_*_['A:ElemXor, 'B:ElemXor]), irred: empty > createInterpreter(interpreterManager, me, none) . erew in NARROW-TEST2 : <> < me : User | start: ('_*_['A:ElemXor, 'B:ElemXor]), irred: empty > createInterpreter(interpreterManager, me, none) . maude-3.1/tests/Meta/metaIntPrelude0000755000175200017520000000036413300701401014265 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaIntPrelude.maude -no-banner -no-advise \ > metaIntPrelude.out 2>&1 diff $srcdir/metaIntPrelude.expected metaIntPrelude.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaReduce.maude0000644000175200017520000000276210025725410014523 00000000000000set show timing off . set show advisories off . *** *** Test the metaReduce() descent function. *** red in META-LEVEL : metaReduce( fmod 'FOO is nil sorts 'Foo . none op 'a : nil -> 'Foo [none] . none none endfm, 'a.Foo) . red in META-LEVEL : metaReduce( fmod 'FOO is nil sorts 'Foo . none op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'f : 'Foo -> 'Foo [strat(0)] . none eq 'a.Foo = 'b.Foo [none] . endfm, 'f['a.Foo]) . red in META-LEVEL : metaReduce( fmod 'FOO is nil sorts 'Foo . none op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'f : 'Foo -> 'Foo [strat(1 0)] . none eq 'a.Foo = 'b.Foo [none] . endfm, 'f['a.Foo]) . select META-LEVEL . red metaReduce( fmod 'FOO is protecting 'STRING . sorts none . none none none none endfm, '"a".String) . red metaReduce( fmod 'FOO is protecting 'STRING . sorts none . none none none none endfm, '"this is a string".String) . red metaReduce( fmod 'FOO is protecting 'STRING . sorts none . none none none none endfm, '"this is\na string".String) . red metaReduce( fmod 'FOO is protecting 'STRING . sorts none . none none none none endfm, '"\n".String) . red metaReduce( fmod 'FOO is protecting 'FLOAT . sorts none . none none none none endfm, 'pi.Float) . select META-LEVEL . red metaReduce( fmod 'FOO is protecting 'INT . sorts 'Foo . none op 'a : nil -> 'Foo [none] . none none endfm, '_+_['s_['0.Int], 's_^12['0.Int]]) . maude-3.1/tests/Meta/metaUp0000755000175200017520000000032410511605446012607 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaUp.maude -no-banner -no-advise \ > metaUp.out 2>&1 diff $srcdir/metaUp.expected metaUp.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaIntUnify.expected0000644000175200017520000003057113703744241015577 00000000000000========================================== erewrite in UNIFY-TEST : <> < me : User | problem: ('_+_['X:Nat,'Y:Nat] =? '_+_['Z:Nat,'W:Nat]) > createInterpreter(interpreterManager, me, none) . rewrites: 19 result Configuration: <> < me : User | problem: ('_+_['X:Nat,'Y:Nat] =? '_+_[ 'Z:Nat,'W:Nat]),soln: 8,result: gotUnifier(me, interpreter(0), 'W:Nat <- '%2:Nat ; 'X:Nat <- '%1:Nat ; 'Y:Nat <- '%2:Nat ; 'Z:Nat <- '%1:Nat, '%),result: gotUnifier(me, interpreter(0), 'W:Nat <- '%2:Nat ; 'X:Nat <- '%1:Nat ; 'Y:Nat <- '_+_['%2:Nat,'%3:Nat] ; 'Z:Nat <- '_+_['%1:Nat,'%3:Nat], '%),result: gotUnifier(me, interpreter(0), 'W:Nat <- '%2:Nat ; 'X:Nat <- '%2:Nat ; 'Y:Nat <- '%1:Nat ; 'Z:Nat <- '%1:Nat, '%),result: gotUnifier(me, interpreter(0), 'W:Nat <- '%2:Nat ; 'X:Nat <- '_+_['%2:Nat,'%3:Nat] ; 'Y:Nat <- '%1:Nat ; 'Z:Nat <- '_+_['%1:Nat,'%3:Nat], '%),result: gotUnifier(me, interpreter(0), 'W:Nat <- '_+_['%1:Nat,'%3:Nat] ; 'X:Nat <- '%1:Nat ; 'Y:Nat <- '_+_['%2:Nat,'%3:Nat] ; 'Z:Nat <- '%2:Nat, '%),result: gotUnifier(me, interpreter(0), 'W:Nat <- '_+_['%1:Nat,'%3:Nat] ; 'X:Nat <- '_+_['%2:Nat,'%3:Nat] ; 'Y:Nat <- '%1:Nat ; 'Z:Nat <- '%2:Nat, '%),result: gotUnifier(me, interpreter(0), 'W:Nat <- '_+_['%3:Nat,'%4:Nat] ; 'X:Nat <- '_+_['%1:Nat,'%3:Nat] ; 'Y:Nat <- '_+_['%2:Nat,'%4:Nat] ; 'Z:Nat <- '_+_['%1:Nat,'%2:Nat], '%) > noSuchResult(me, interpreter(0), true) ========================================== unify in RAT : X:Nat + Y:Nat =? W:Nat + Z . Unifier 1 X:Nat --> #1:Nat + #3:Nat Y:Nat --> #2:Nat + #4:Nat Z --> #1:Nat + #2:Nat W:Nat --> #3:Nat + #4:Nat Unifier 2 X:Nat --> #2:Nat + #3:Nat Y:Nat --> #1:Nat Z --> #1:Nat + #3:Nat W:Nat --> #2:Nat Unifier 3 X:Nat --> #1:Nat Y:Nat --> #2:Nat + #3:Nat Z --> #1:Nat + #3:Nat W:Nat --> #2:Nat Unifier 4 X:Nat --> #2:Nat + #3:Nat Y:Nat --> #1:Nat Z --> #2:Nat W:Nat --> #1:Nat + #3:Nat Unifier 5 X:Nat --> #1:Nat Y:Nat --> #2:Nat Z --> #1:Nat W:Nat --> #2:Nat Unifier 6 X:Nat --> #1:Nat Y:Nat --> #2:Nat + #3:Nat Z --> #2:Nat W:Nat --> #1:Nat + #3:Nat Unifier 7 X:Nat --> #2:Nat Y:Nat --> #1:Nat Z --> #1:Nat W:Nat --> #2:Nat ========================================== erewrite in UNIFY-TEST : <> < me : User | problem: ('_+_['X:Nat,'X:Nat] =? '_+_['Z:Nat,'W:Nat]) > createInterpreter(interpreterManager, me, none) . rewrites: 15 result Configuration: <> < me : User | problem: ('_+_['X:Nat,'X:Nat] =? '_+_[ 'Z:Nat,'W:Nat]),soln: 6,result: gotUnifier(me, interpreter(0), 'W:Nat <- '%1:Nat ; 'X:Nat <- '%1:Nat ; 'Z:Nat <- '%1:Nat, '%),result: gotUnifier(me, interpreter(0), 'W:Nat <- '%1:Nat ; 'X:Nat <- '_+_['%1:Nat,'%2:Nat] ; 'Z:Nat <- '_+_['%1:Nat,'%2:Nat,'%2:Nat], '%),result: gotUnifier(me, interpreter(0), 'W:Nat <- '_+_['%2:Nat,'%2:Nat] ; 'X:Nat <- '_+_['%1:Nat,'%2:Nat] ; 'Z:Nat <- '_+_['%1:Nat,'%1:Nat], '%),result: gotUnifier(me, interpreter(0), 'W:Nat <- '_+_['%1:Nat,'%2:Nat,'%2:Nat] ; 'X:Nat <- '_+_['%1:Nat,'%2:Nat] ; 'Z:Nat <- '%1:Nat, '%),result: gotUnifier(me, interpreter(0), 'W:Nat <- '_+_['%2:Nat,'%3:Nat,'%3:Nat] ; 'X:Nat <- '_+_['%1:Nat,'%2:Nat,'%3:Nat] ; 'Z:Nat <- '_+_['%1:Nat,'%1:Nat,'%2:Nat], '%) > noSuchResult(me, interpreter( 0), true) ========================================== unify in RAT : X:Nat + X:Nat =? W:Nat + Z . Unifier 1 X:Nat --> #1:Nat + #2:Nat + #3:Nat Z --> #1:Nat + #1:Nat + #2:Nat W:Nat --> #2:Nat + #3:Nat + #3:Nat Unifier 2 X:Nat --> #1:Nat + #2:Nat Z --> #1:Nat + #2:Nat + #2:Nat W:Nat --> #1:Nat Unifier 3 X:Nat --> #1:Nat + #2:Nat Z --> #1:Nat + #1:Nat W:Nat --> #2:Nat + #2:Nat Unifier 4 X:Nat --> #1:Nat + #2:Nat Z --> #1:Nat W:Nat --> #1:Nat + #2:Nat + #2:Nat Unifier 5 X:Nat --> #1:Nat Z --> #1:Nat W:Nat --> #1:Nat ========================================== erewrite in UNIFY-TEST2 : <> < me : User | problem: ('__['X:Foo,'Y:Foo] =? '__[ 'Z:Foo,'W:Foo]) > createInterpreter(interpreterManager, me, none) . rewrites: 9 result Configuration: <> < me : User | problem: ('__['X:Foo,'Y:Foo] =? '__[ 'Z:Foo,'W:Foo]),soln: 4,result: gotUnifier(me, interpreter(0), 'W:Foo <- '#2:Foo ; 'X:Foo <- '#1:Foo ; 'Y:Foo <- '#2:Foo ; 'Z:Foo <- '#1:Foo, '#),result: gotUnifier(me, interpreter(0), 'W:Foo <- '#2:Foo ; 'X:Foo <- '#1:Foo ; 'Y:Foo <- '__['#3:Foo,'#2:Foo] ; 'Z:Foo <- '__['#1:Foo,'#3:Foo], '#),result: gotUnifier(me, interpreter(0), 'W:Foo <- '__['#3:Foo,'#1:Foo] ; 'X:Foo <- '__['#2:Foo,'#3:Foo] ; 'Y:Foo <- '#1:Foo ; 'Z:Foo <- '#2:Foo, '#) > noSuchResult(me, interpreter(0), true) ========================================== unify in FOO : X:Foo Y:Foo =? W:Foo Z:Foo . Unifier 1 X:Foo --> #2:Foo #3:Foo Y:Foo --> #1:Foo W:Foo --> #2:Foo Z:Foo --> #3:Foo #1:Foo Unifier 2 X:Foo --> #1:Foo Y:Foo --> #3:Foo #2:Foo W:Foo --> #1:Foo #3:Foo Z:Foo --> #2:Foo Unifier 3 X:Foo --> #1:Foo Y:Foo --> #2:Foo W:Foo --> #1:Foo Z:Foo --> #2:Foo ========================================== erewrite in UNIFY-TEST2 : <> < me : User | problem: ('__['X:Foo,'X:Foo] =? '__[ 'Z:Foo,'W:Foo]) > createInterpreter(interpreterManager, me, none) . rewrites: 9 result Configuration: <> < me : User | problem: ('__['X:Foo,'X:Foo] =? '__[ 'Z:Foo,'W:Foo]),soln: 4,result: gotUnifier(me, interpreter(0), 'W:Foo <- '#1:Foo ; 'X:Foo <- '#1:Foo ; 'Z:Foo <- '#1:Foo, '#),result: gotUnifier(me, interpreter(0), 'W:Foo <- '#1:Foo ; 'X:Foo <- '__['#2:Foo,'#1:Foo] ; 'Z:Foo <- '__['#2:Foo,'#1:Foo,'#2:Foo], '#),result: gotUnifier(me, interpreter(0), 'W:Foo <- '__['#2:Foo,'#1:Foo,'#2:Foo] ; 'X:Foo <- '__['#1:Foo,'#2:Foo] ; 'Z:Foo <- '#1:Foo, '#) > noSuchResult(me, interpreter(0), true) ========================================== unify in FOO : X:Foo X:Foo =? W:Foo Z:Foo . Unifier 1 X:Foo --> #2:Foo #1:Foo W:Foo --> #2:Foo #1:Foo #2:Foo Z:Foo --> #1:Foo Unifier 2 X:Foo --> #1:Foo #2:Foo W:Foo --> #1:Foo Z:Foo --> #2:Foo #1:Foo #2:Foo Unifier 3 X:Foo --> #1:Foo W:Foo --> #1:Foo Z:Foo --> #1:Foo ========================================== erewrite in UNIFY-TEST2 : <> < me : User | problem: ('__['X:Foo,'Y:Foo] =? '__[ 'Z:Foo,'X:Foo]) > createInterpreter(interpreterManager, me, none) . Warning: Unification modulo the theory of operator __ has encountered an instance for which it may not be complete. rewrites: 7 result Configuration: <> < me : User | problem: ('__['X:Foo,'Y:Foo] =? '__[ 'Z:Foo,'X:Foo]),soln: 3,result: gotUnifier(me, interpreter(0), 'X:Foo <- '#1:Foo ; 'Y:Foo <- '#1:Foo ; 'Z:Foo <- '#1:Foo, '#),result: gotUnifier(me, interpreter(0), 'X:Foo <- '#1:Foo ; 'Y:Foo <- '__['#2:Foo,'#1:Foo] ; 'Z:Foo <- '__['#1:Foo,'#2:Foo], '#) > noSuchResult(me, interpreter(0), false) ========================================== unify in FOO : X:Foo Y:Foo =? W:Foo X:Foo . Warning: Unification modulo the theory of operator __ has encountered an instance for which it may not be complete. Unifier 1 X:Foo --> #1:Foo Y:Foo --> #2:Foo #1:Foo W:Foo --> #1:Foo #2:Foo Unifier 2 X:Foo --> #1:Foo Y:Foo --> #1:Foo W:Foo --> #1:Foo Warning: Some unifiers may have been missed due to incomplete unification algorithm(s). ========================================== erewrite in DISJOINT-UNIFY-TEST : <> < me : User | problem: ('_+_['X:Nat, 'Y:Nat] =? '_+_['X:Nat,'Y:Nat]) > createInterpreter(interpreterManager, me, none) . rewrites: 19 result Configuration: <> < me : User | problem: ('_+_['X:Nat,'Y:Nat] =? '_+_[ 'X:Nat,'Y:Nat]),soln: 8,result: gotDisjointUnifier(me, interpreter(0), 'X:Nat <- '#1:Nat ; 'Y:Nat <- '#2:Nat, 'X:Nat <- '#1:Nat ; 'Y:Nat <- '#2:Nat, '#),result: gotDisjointUnifier(me, interpreter(0), 'X:Nat <- '#1:Nat ; 'Y:Nat <- '_+_['#2:Nat,'#3:Nat], 'X:Nat <- '#2:Nat ; 'Y:Nat <- '_+_['#1:Nat,'#3:Nat], '#),result: gotDisjointUnifier(me, interpreter(0), 'X:Nat <- '#1:Nat ; 'Y:Nat <- '_+_['#2:Nat,'#3:Nat], 'X:Nat <- '_+_['#1:Nat,'#3:Nat] ; 'Y:Nat <- '#2:Nat, '#),result: gotDisjointUnifier(me, interpreter(0), 'X:Nat <- '#2:Nat ; 'Y:Nat <- '#1:Nat, 'X:Nat <- '#1:Nat ; 'Y:Nat <- '#2:Nat, '#),result: gotDisjointUnifier(me, interpreter(0), 'X:Nat <- '_+_['#1:Nat,'#3:Nat] ; 'Y:Nat <- '_+_['#2:Nat,'#4:Nat], 'X:Nat <- '_+_['#1:Nat,'#2:Nat] ; 'Y:Nat <- '_+_['#3:Nat,'#4:Nat], '#),result: gotDisjointUnifier(me, interpreter(0), 'X:Nat <- '_+_['#2:Nat,'#3:Nat] ; 'Y:Nat <- '#1:Nat, 'X:Nat <- '#2:Nat ; 'Y:Nat <- '_+_['#1:Nat,'#3:Nat], '#),result: gotDisjointUnifier(me, interpreter(0), 'X:Nat <- '_+_['#2:Nat,'#3:Nat] ; 'Y:Nat <- '#1:Nat, 'X:Nat <- '_+_['#1:Nat,'#3:Nat] ; 'Y:Nat <- '#2:Nat, '#) > noSuchResult(me, interpreter(0), true) ========================================== erewrite in DISJOINT-UNIFY-TEST : <> < me : User | problem: ('_+_['X:Nat, 'X:Nat] =? '_+_['X:Nat,'Y:Nat]) > createInterpreter(interpreterManager, me, none) . rewrites: 15 result Configuration: <> < me : User | problem: ('_+_['X:Nat,'X:Nat] =? '_+_[ 'X:Nat,'Y:Nat]),soln: 6,result: gotDisjointUnifier(me, interpreter(0), 'X:Nat <- '#1:Nat, 'X:Nat <- '#1:Nat ; 'Y:Nat <- '#1:Nat, '#),result: gotDisjointUnifier(me, interpreter(0), 'X:Nat <- '_+_['#1:Nat,'#2:Nat], 'X:Nat <- '#1:Nat ; 'Y:Nat <- '_+_['#1:Nat,'#2:Nat,'#2:Nat], '#),result: gotDisjointUnifier(me, interpreter(0), 'X:Nat <- '_+_['#1:Nat,'#2:Nat], 'X:Nat <- '_+_['#1:Nat,'#1:Nat] ; 'Y:Nat <- '_+_['#2:Nat,'#2:Nat], '#),result: gotDisjointUnifier(me, interpreter(0), 'X:Nat <- '_+_['#1:Nat,'#2:Nat], 'X:Nat <- '_+_['#1:Nat,'#2:Nat,'#2:Nat] ; 'Y:Nat <- '#1:Nat, '#),result: gotDisjointUnifier(me, interpreter(0), 'X:Nat <- '_+_['#1:Nat,'#2:Nat,'#3:Nat], 'X:Nat <- '_+_['#1:Nat,'#1:Nat,'#2:Nat] ; 'Y:Nat <- '_+_['#2:Nat,'#3:Nat,'#3:Nat], '#) > noSuchResult(me, interpreter( 0), true) ========================================== erewrite in DISJOINT-UNIFY-TEST2 : <> < me : User | problem: ('__['X:Foo, 'Y:Foo] =? '__['X:Foo,'Y:Foo]) > createInterpreter(interpreterManager, me, none) . rewrites: 9 result Configuration: <> < me : User | problem: ('__['X:Foo,'Y:Foo] =? '__[ 'X:Foo,'Y:Foo]),soln: 4,result: gotDisjointUnifier(me, interpreter(0), 'X:Foo <- '%1:Foo ; 'Y:Foo <- '%2:Foo, 'X:Foo <- '%1:Foo ; 'Y:Foo <- '%2:Foo, '%),result: gotDisjointUnifier(me, interpreter(0), 'X:Foo <- '%1:Foo ; 'Y:Foo <- '__['%3:Foo,'%2:Foo], 'X:Foo <- '__['%1:Foo,'%3:Foo] ; 'Y:Foo <- '%2:Foo, '%),result: gotDisjointUnifier(me, interpreter(0), 'X:Foo <- '__['%2:Foo,'%3:Foo] ; 'Y:Foo <- '%1:Foo, 'X:Foo <- '%2:Foo ; 'Y:Foo <- '__['%3:Foo,'%1:Foo], '%) > noSuchResult(me, interpreter(0), true) ========================================== erewrite in DISJOINT-UNIFY-TEST2 : <> < me : User | problem: ('__['X:Foo, 'Y:Foo,'X:Foo] =? '__['X:Foo,'X:Foo]) > createInterpreter( interpreterManager, me, none) . Warning: Unification modulo the theory of operator __ has encountered an instance for which it may not be complete. rewrites: 7 result Configuration: <> < me : User | problem: ('__['X:Foo,'Y:Foo,'X:Foo] =? '__['X:Foo,'X:Foo]),soln: 3,result: gotDisjointUnifier(me, interpreter(0), 'X:Foo <- '%1:Foo ; 'Y:Foo <- '__['%1:Foo,'%1:Foo], 'X:Foo <- '__['%1:Foo,'%1:Foo], '%),result: gotDisjointUnifier(me, interpreter(0), 'X:Foo <- '%1:Foo ; 'Y:Foo <- '__['%2:Foo,'%1:Foo,'%1:Foo,'%2:Foo], 'X:Foo <- '__['%1:Foo,'%2:Foo,'%1:Foo], '%) > noSuchResult(me, interpreter( 0), false) ========================================== erewrite in IRRED-UNIFY-TEST : <> < me : User | problem: ('__['L:Bag,'M:Bag] =? '__['P:Bag,'Q:Bag]) > createInterpreter(interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | problem: ('__['L:Bag,'M:Bag] =? '__[ 'P:Bag,'Q:Bag]),soln: 2,result: gotIrredundantUnifier(me, interpreter(0), 'L:Bag <- '__['%2:Bag,'%4:Bag] ; 'M:Bag <- '__['%1:Bag,'%3:Bag] ; 'P:Bag <- '__['%3:Bag,'%4:Bag] ; 'Q:Bag <- '__['%1:Bag,'%2:Bag], '%) > noSuchResult(me, interpreter(0), true) ========================================== erewrite in IRRED-DISJOINT-UNIFY-TEST : <> < me : User | problem: ('__['L:Bag, 'M:Bag] =? '__['P:Bag,'Q:Bag]) > createInterpreter(interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | problem: ('__['L:Bag,'M:Bag] =? '__[ 'P:Bag,'Q:Bag]),soln: 2,result: gotIrredundantDisjointUnifier(me, interpreter(0), 'L:Bag <- '__['#2:Bag,'#4:Bag] ; 'M:Bag <- '__['#1:Bag,'#3:Bag], 'P:Bag <- '__['#3:Bag,'#4:Bag] ; 'Q:Bag <- '__['#1:Bag,'#2:Bag], '#) > noSuchResult(me, interpreter(0), true) Bye. maude-3.1/tests/Meta/metaReduce0000755000175200017520000000034410511605241013425 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaReduce.maude -no-banner -no-advise \ > metaReduce.out 2>&1 diff $srcdir/metaReduce.expected metaReduce.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaModule.expected0000644000175200017520000000401113140741642015242 00000000000000========================================== reduce in META-MODULE : subsort 'Foo < 'Bar . . rewrites: 0 result SubsortDecl: subsort 'Foo < 'Bar . ========================================== reduce in META-MODULE : op 'f : 'Foo -> 'Bar [none] . . rewrites: 0 result OpDecl: op 'f : 'Foo -> 'Bar [none] . ========================================== reduce in META-MODULE : ceq 'f['X:Foo] = 'a.Bar if 'g['a.Foo,'Y:Foo] := 'X:Foo [none] . . rewrites: 0 result Equation: ceq 'f['X:Foo] = 'a.Bar if 'g['a.Foo,'Y:Foo] := 'X:Foo [none] . ========================================== reduce in META-MODULE : 'g['a.Foo,'Y:Foo] := 'X:Foo . rewrites: 0 result EqCondition: 'g['a.Foo,'Y:Foo] := 'X:Foo ========================================== reduce in META-MODULE : fmod 'FOO is including 'MACHINE-INT . sorts 'Bar ; 'Foo . subsort 'Foo < 'Bar . op 'f : 'Foo -> 'Bar [none] . op 'g : '`[Bar`] -> '`[Bar`] [none] . cmb 'X:Bar : 'Foo if 'f['Y:Bar] := 'f['X:Bar] /\ 'g['Y:Bar,'a.Foo] = 'a.Foo [ none] . eq 'f['X:Foo] = 'g['a.Foo,'X:Foo] [none] . ceq 'f['X:Foo] = 'a.Bar if 'g['a.Foo,'Y:Foo] := 'X:Foo [none] . endfm . rewrites: 0 result FModule: fmod 'FOO is including 'MACHINE-INT . sorts 'Bar ; 'Foo . subsort 'Foo < 'Bar . op 'f : 'Foo -> 'Bar [none] . op 'g : '`[Bar`] -> '`[Bar`] [none] . cmb 'X:Bar : 'Foo if 'f['Y:Bar] := 'f['X:Bar] /\ 'g['Y:Bar,'a.Foo] = 'a.Foo [ none] . eq 'f['X:Foo] = 'g['a.Foo,'X:Foo] [none] . ceq 'f['X:Foo] = 'a.Bar if 'g['a.Foo,'Y:Foo] := 'X:Foo [none] . endfm ========================================== reduce in META-MODULE : fmod 'FOO is including 'MACHINE-INT . sorts 'Bar ; 'Foo . subsort 'Foo < 'Bar . op 'f : 'Foo -> 'Bar [none] . op 'g : '`[Bar`] -> '`[Bar`] [none] . none eq 'f['X:Foo] = 'g['a.Foo,'X:Foo] [none] . endfm . rewrites: 0 result FModule: fmod 'FOO is including 'MACHINE-INT . sorts 'Bar ; 'Foo . subsort 'Foo < 'Bar . op 'f : 'Foo -> 'Bar [none] . op 'g : '`[Bar`] -> '`[Bar`] [none] . none eq 'f['X:Foo] = 'g['a.Foo,'X:Foo] [none] . endfm Bye. maude-3.1/tests/Meta/metaIntSort.expected0000644000175200017520000002456713724333711015443 00000000000000========================================== erewrite in SORT-TEST : <> < me : User | type: 'Int > createInterpreter( interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > gotLesserSorts(me, interpreter( 0), 'Nat ; 'NzInt ; 'NzNat ; 'Zero) ========================================== erewrite in SORT-TEST : <> < me : User | type: 'Rat > createInterpreter( interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > gotLesserSorts(me, interpreter( 0), 'Int ; 'Nat ; 'NzInt ; 'NzNat ; 'NzRat ; 'PosRat ; 'Zero) ========================================== erewrite in SORT-TEST : <> < me : User | type: '`[Rat`] > createInterpreter( interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > gotLesserSorts(me, interpreter( 0), 'Int ; 'Nat ; 'NzInt ; 'NzNat ; 'NzRat ; 'PosRat ; 'Rat ; 'Zero) ========================================== erewrite in SORT-TEST : <> < me : User | type: '`[Bool`] > createInterpreter( interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > gotLesserSorts(me, interpreter( 0), 'Bool) ========================================== erewrite in SORT-TEST : <> < me : User | type: 'Bool > createInterpreter( interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > gotLesserSorts(me, interpreter( 0), none) ========================================== erewrite in SORT-TEST2 : <> < me : User | kind: '`[Rat`] > createInterpreter( interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > gotMaximalSorts(me, interpreter( 0), 'Rat) ========================================== erewrite in SORT-TEST2 : <> < me : User | kind: '`[Bool`] > createInterpreter( interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > gotMaximalSorts(me, interpreter( 0), 'Bool) ========================================== erewrite in SORT-TEST3 : <> < me : User | kind: '`[Rat`] > createInterpreter( interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > gotMinimalSorts(me, interpreter( 0), 'NzNat ; 'Zero) ========================================== erewrite in SORT-TEST3 : <> < me : User | kind: '`[Bool`] > createInterpreter( interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > gotMinimalSorts(me, interpreter( 0), 'Bool) ========================================== erewrite in SORT-TEST4 : <> < me : User | typePair: 'Nat : 'Bool > createInterpreter(interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > comparedTypes(me, interpreter(0), false, false, false) ========================================== erewrite in SORT-TEST4 : <> < me : User | typePair: 'Nat : 'Rat > createInterpreter(interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > comparedTypes(me, interpreter(0), true, true, false) ========================================== erewrite in SORT-TEST4 : <> < me : User | typePair: 'Rat : 'Rat > createInterpreter(interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > comparedTypes(me, interpreter(0), true, true, true) ========================================== erewrite in SORT-TEST4 : <> < me : User | typePair: 'Rat : 'Int > createInterpreter(interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > comparedTypes(me, interpreter(0), true, false, true) ========================================== erewrite in SORT-TEST4 : <> < me : User | typePair: 'NzRat : 'Int > createInterpreter(interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > comparedTypes(me, interpreter(0), true, false, false) ========================================== erewrite in SORT-TEST5 : <> < me : User | type: 'Nat > createInterpreter( interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > gotKind(me, interpreter(0), '`[Rat`]) ========================================== erewrite in SORT-TEST5 : <> < me : User | type: 'Bool > createInterpreter( interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > gotKind(me, interpreter(0), '`[Bool`]) ========================================== erewrite in SORT-TEST6 : <> < me : User | module: 'RAT > createInterpreter( interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > gotKinds(me, interpreter(0), '`[Bool`] ; '`[Rat`]) ========================================== erewrite in SORT-TEST6 : <> < me : User | module: 'META-LEVEL > createInterpreter(interpreterManager, me, none) . rewrites: 4 result Configuration: <> < me : User | none > gotKinds(me, interpreter(0), '`[AttrSet`] ; '`[Bool`] ; '`[Condition`] ; '`[EquationSet`] ; '`[FindResult`,NatList`,Parent`,Bound`] ; '`[HookList`] ; '`[ImportList`] ; '`[MatchPair?`,UnificationPair?`,MatchOrUnificationPair`] ; '`[MatchingProblem`] ; '`[MembAxSet`] ; '`[Module`] ; '`[NarrowingApplyResult?`] ; '`[NarrowingSearchPathResult?`] ; '`[NarrowingSearchResult?`] ; '`[NarrowingTrace`] ; '`[OpDeclSet`] ; '`[OpMappingSet`] ; '`[ParameterDeclList`] ; '`[PrintOptionSet`] ; '`[QidList`,TypeListSet`,QidSet`,GTermList`,Header`,Type?`,ModuleExpression`,ParameterList`] ; '`[RenamingSet`] ; '`[Result4Tuple?`] ; '`[ResultPair?`] ; '`[ResultTriple?`] ; '`[RuleSet`] ; '`[SmtResult?`] ; '`[SortMappingSet`] ; '`[SrewriteOption`] ; '`[StratDeclSet`] ; '`[StratDefSet`] ; '`[StratMappingSet`] ; '`[Strategy?`,StrategyList`] ; '`[String`] ; '`[SubsortDeclSet`] ; '`[Substitution?`] ; '`[Trace?`] ; '`[UnificationProblem`] ; '`[UnificationTriple?`] ; '`[UsingPairSet`] ; '`[Variant?`] ; '`[VariantOptionSet`] ; '`[View`]) ========================================== erewrite in SORT-TEST6 : <> < me : User | module: 'META-INTERPRETER > createInterpreter(interpreterManager, me, none) . rewrites: 4 result Configuration: <> < me : User | none > gotKinds(me, interpreter(0), '`[AttrSet`] ; '`[AttributeSet`] ; '`[Bool`] ; '`[Cid`] ; '`[Condition`] ; '`[Configuration`] ; '`[EquationSet`] ; '`[FindResult`,NatList`,Parent`,RewriteCount`,Bound`] ; '`[HookList`] ; '`[ImportList`] ; '`[InterpreterOptionSet`] ; '`[MatchPair?`,UnificationPair?`,MatchOrUnificationPair`] ; '`[MatchingProblem`] ; '`[MembAxSet`] ; '`[Module`] ; '`[NarrowingApplyResult?`] ; '`[NarrowingSearchPathResult?`] ; '`[NarrowingSearchResult?`] ; '`[NarrowingTrace`] ; '`[Oid`] ; '`[OpDeclSet`] ; '`[OpMappingSet`] ; '`[ParameterDeclList`] ; '`[PrintOptionSet`] ; '`[QidList`,TypeListSet`,QidSet`,GTermList`,Header`,Type?`,ModuleExpression`,ParameterList`] ; '`[RenamingSet`] ; '`[Result4Tuple?`] ; '`[ResultPair?`] ; '`[ResultTriple?`] ; '`[RuleSet`] ; '`[SmtResult?`] ; '`[SortMappingSet`] ; '`[SrewriteOption`] ; '`[StratDeclSet`] ; '`[StratDefSet`] ; '`[StratMappingSet`] ; '`[Strategy?`,StrategyList`] ; '`[String`] ; '`[SubsortDeclSet`] ; '`[Substitution?`] ; '`[Trace?`] ; '`[UnificationProblem`] ; '`[UnificationTriple?`] ; '`[UsingPairSet`] ; '`[Variant?`] ; '`[VariantOptionSet`] ; '`[View`]) ========================================== erewrite in SORT-TEST7 : <> < me : User | types: ('Nat ; 'NzRat) > createInterpreter(interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > gotGlbTypes(me, interpreter(0), 'NzNat) ========================================== erewrite in SORT-TEST7 : <> < me : User | types: none > createInterpreter( interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > gotGlbTypes(me, interpreter(0), none) ========================================== erewrite in SORT-TEST7 : <> < me : User | types: '`[Nat`] > createInterpreter( interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > gotGlbTypes(me, interpreter(0), '`[Rat`]) ========================================== erewrite in SORT-TEST7 : <> < me : User | types: ('Nat ; 'NzRat ; 'Zero) > createInterpreter(interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > gotGlbTypes(me, interpreter(0), none) ========================================== erewrite in SORT-TEST7 : <> < me : User | types: ('Nat ; 'Int ; 'NzRat) > createInterpreter(interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > gotGlbTypes(me, interpreter(0), 'NzNat) ========================================== erewrite in SORT-TEST8 : <> < me : User | op:('_+_ : 'Nat 'Nat -> 'Nat) > createInterpreter(interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > gotMaximalAritySet(me, interpreter(0), 'Nat 'Nat) ========================================== erewrite in SORT-TEST8 : <> < me : User | op:('_+_ : 'Nat 'Nat -> 'NzNat) > createInterpreter(interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > gotMaximalAritySet(me, interpreter(0), 'Nat 'NzNat ; 'NzNat 'Nat) ========================================== erewrite in SORT-TEST8 : <> < me : User | op:('_+_ : 'Nat 'Nat -> 'NzRat) > createInterpreter(interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > gotMaximalAritySet(me, interpreter(0), 'Nat 'PosRat ; 'PosRat 'Nat ; 'PosRat 'PosRat) ========================================== erewrite in SORT-TEST9 : <> < me : User | term: ('_+_['X:Nat,'_+_['Y:Rat, 'X:Nat]]) > createInterpreter(interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > normalizedTerm(me, interpreter( 0), '_+_['X:Nat,'X:Nat,'Y:Rat], 'Rat) ========================================== erewrite in SORT-TEST9 : <> < me : User | term: ('_+_['_+_['X:Nat,'Y:Rat],'_+_[ 'Y:Rat,'X:Nat]]) > createInterpreter(interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > normalizedTerm(me, interpreter( 0), '_+_['X:Nat,'X:Nat,'Y:Rat,'Y:Rat], 'Rat) ========================================== erewrite in SORT-TEST9 : <> < me : User | term: ('_+_['_+_['X:NzNat,'Y:PosRat], '_+_['Y:PosRat,'X:NzNat]]) > createInterpreter(interpreterManager, me, none) . rewrites: 5 result Configuration: <> < me : User | none > normalizedTerm(me, interpreter( 0), '_+_['X:NzNat,'X:NzNat,'Y:PosRat,'Y:PosRat], 'PosRat) Bye. maude-3.1/tests/Meta/legacyMetaGetVariant0000755000175200017520000000041413553733004015415 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/legacyMetaGetVariant.maude -no-banner -no-advise \ > legacyMetaGetVariant.out 2>&1 diff $srcdir/legacyMetaGetVariant.expected legacyMetaGetVariant.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaIntUnify.maude0000644000175200017520000001626713703741646015105 00000000000000set show timing off . set show advisories off . *** *** Test unification and disjoint unification in the meta-interpreter. *** load metaInterpreter mod UNIFY-TEST is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op problem:_ : UnificationProblem -> Attribute . op soln:_ : Nat -> Attribute . op result:_ : Msg -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . var U : UnificationProblem . var S : Substitution . var Q : Qid . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('RAT, true)) . rl < X : User | AS, problem: U > insertedModule(X, Y) => < X : User | AS, problem: U, soln: 1 > getUnifier(Y, X, 'RAT, U, '#, 0) . rl < X : User | AS, problem: U, soln: N > gotUnifier(X, Y, S, Q) => < X : User | AS, problem: U, soln: (N + 1), result: gotUnifier(X, Y, S, Q) > getUnifier(Y, X, 'RAT, U, '#, N) . endm erew in UNIFY-TEST : <> < me : User | problem: ('_+_['X:Nat, 'Y:Nat] =? '_+_['Z:Nat, 'W:Nat]) > createInterpreter(interpreterManager, me, none) . unify in RAT : X:Nat + Y:Nat =? W:Nat + Z:Nat . erew in UNIFY-TEST : <> < me : User | problem: ('_+_['X:Nat, 'X:Nat] =? '_+_['Z:Nat, 'W:Nat]) > createInterpreter(interpreterManager, me, none) . unify in RAT : X:Nat + X:Nat =? W:Nat + Z:Nat . fmod FOO is sort Foo . op __ : Foo Foo -> Foo [assoc] . endfm mod UNIFY-TEST2 is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op problem:_ : UnificationProblem -> Attribute . op soln:_ : Nat -> Attribute . op result:_ : Msg -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . var U : UnificationProblem . var S : Substitution . var Q : Qid . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('FOO, true)) . rl < X : User | AS, problem: U > insertedModule(X, Y) => < X : User | AS, problem: U, soln: 1 > getUnifier(Y, X, 'FOO, U, '%, 0) . rl < X : User | AS, problem: U, soln: N > gotUnifier(X, Y, S, Q) => < X : User | AS, problem: U, soln: (N + 1), result: gotUnifier(X, Y, S, Q) > getUnifier(Y, X, 'FOO, U, '%, N) . endm erew in UNIFY-TEST2 : <> < me : User | problem: ('__['X:Foo, 'Y:Foo] =? '__['Z:Foo, 'W:Foo]) > createInterpreter(interpreterManager, me, none) . unify in FOO : X:Foo Y:Foo =? W:Foo Z:Foo . erew in UNIFY-TEST2 : <> < me : User | problem: ('__['X:Foo, 'X:Foo] =? '__['Z:Foo, 'W:Foo]) > createInterpreter(interpreterManager, me, none) . unify in FOO : X:Foo X:Foo =? W:Foo Z:Foo . erew in UNIFY-TEST2 : <> < me : User | problem: ('__['X:Foo, 'Y:Foo] =? '__['Z:Foo, 'X:Foo]) > createInterpreter(interpreterManager, me, none) . unify in FOO : X:Foo Y:Foo =? W:Foo X:Foo . mod DISJOINT-UNIFY-TEST is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op problem:_ : UnificationProblem -> Attribute . op soln:_ : Nat -> Attribute . op result:_ : Msg -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . var U : UnificationProblem . var S S' : Substitution . var Q : Qid . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('RAT, true)) . rl < X : User | AS, problem: U > insertedModule(X, Y) => < X : User | AS, problem: U, soln: 1 > getDisjointUnifier(Y, X, 'RAT, U, '@, 0) . rl < X : User | AS, problem: U, soln: N > gotDisjointUnifier(X, Y, S, S', Q) => < X : User | AS, problem: U, soln: (N + 1), result: gotDisjointUnifier(X, Y, S, S', Q) > getDisjointUnifier(Y, X, 'RAT, U, '@, N) . endm erew in DISJOINT-UNIFY-TEST : <> < me : User | problem: ('_+_['X:Nat, 'Y:Nat] =? '_+_['X:Nat, 'Y:Nat]) > createInterpreter(interpreterManager, me, none) . erew in DISJOINT-UNIFY-TEST : <> < me : User | problem: ('_+_['X:Nat, 'X:Nat] =? '_+_['X:Nat, 'Y:Nat]) > createInterpreter(interpreterManager, me, none) . mod DISJOINT-UNIFY-TEST2 is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op problem:_ : UnificationProblem -> Attribute . op soln:_ : Nat -> Attribute . op result:_ : Msg -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . var U : UnificationProblem . var S S' : Substitution . var Q : Qid . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('FOO, true)) . rl < X : User | AS, problem: U > insertedModule(X, Y) => < X : User | AS, problem: U, soln: 1 > getDisjointUnifier(Y, X, 'FOO, U, '#, 0) . rl < X : User | AS, problem: U, soln: N > gotDisjointUnifier(X, Y, S, S', Q) => < X : User | AS, problem: U, soln: (N + 1), result: gotDisjointUnifier(X, Y, S, S', Q) > getDisjointUnifier(Y, X, 'FOO, U, '#, N) . endm erew in DISJOINT-UNIFY-TEST2 : <> < me : User | problem: ('__['X:Foo, 'Y:Foo] =? '__['X:Foo, 'Y:Foo]) > createInterpreter(interpreterManager, me, none) . erew in DISJOINT-UNIFY-TEST2 : <> < me : User | problem: ('__['X:Foo, 'Y:Foo, 'X:Foo] =? '__['X:Foo, 'X:Foo]) > createInterpreter(interpreterManager, me, none) . *** irredundant unifiers fmod BAG is sorts Elt Bag . subsort Elt < Bag . op empty : -> Bag . op __ : Bag Bag -> Bag [assoc comm id: empty] . endfm mod IRRED-UNIFY-TEST is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op problem:_ : UnificationProblem -> Attribute . op soln:_ : Nat -> Attribute . op result:_ : Msg -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . var U : UnificationProblem . var S : Substitution . var Q : Qid . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('BAG, true)) . rl < X : User | AS, problem: U > insertedModule(X, Y) => < X : User | AS, problem: U, soln: 1 > getIrredundantUnifier(Y, X, 'BAG, U, '#, 0) . rl < X : User | AS, problem: U, soln: N > gotIrredundantUnifier(X, Y, S, Q) => < X : User | AS, problem: U, soln: (N + 1), result: gotIrredundantUnifier(X, Y, S, Q) > getIrredundantUnifier(Y, X, 'BAG, U, '#, N) . endm erew in IRRED-UNIFY-TEST : <> < me : User | problem: ('__['L:Bag, 'M:Bag] =? '__['P:Bag, 'Q:Bag]) > createInterpreter(interpreterManager, me, none) . mod IRRED-DISJOINT-UNIFY-TEST is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op problem:_ : UnificationProblem -> Attribute . op soln:_ : Nat -> Attribute . op result:_ : Msg -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . var U : UnificationProblem . var S S' : Substitution . var Q : Qid . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('BAG, true)) . rl < X : User | AS, problem: U > insertedModule(X, Y) => < X : User | AS, problem: U, soln: 1 > getIrredundantDisjointUnifier(Y, X, 'BAG, U, '@, 0) . rl < X : User | AS, problem: U, soln: N > gotIrredundantDisjointUnifier(X, Y, S, S', Q) => < X : User | AS, problem: U, soln: (N + 1), result: gotIrredundantDisjointUnifier(X, Y, S, S', Q) > getIrredundantDisjointUnifier(Y, X, 'BAG, U, '@, N) . endm erew in IRRED-DISJOINT-UNIFY-TEST : <> < me : User | problem: ('__['L:Bag, 'M:Bag] =? '__['P:Bag, 'Q:Bag]) > createInterpreter(interpreterManager, me, none) . maude-3.1/tests/Meta/metaIntVariantMatch.maude0000644000175200017520000000372113726057240016356 00000000000000set show timing off . *** *** Test variant unification in the meta-interpreter. *** load metaInterpreter fmod XOR is sort XOR . sort Elem . ops c1 c2 c3 c4 : -> Elem . subsort Elem < XOR . op _+_ : XOR XOR -> XOR [ctor assoc comm] . op 0 : -> XOR . op a : -> XOR . vars X Y : XOR . eq Y + 0 = Y [variant] . eq X + X = 0 [variant] . eq X + X + Y = Y [variant] . endfm mod VARIANT-MATCH-TEST is pr META-INTERPRETER . sort MsgList . subsort Msg < MsgList . op me : -> Oid . op User : -> Cid . op problem:(_,_) : MatchingProblem TermList -> Attribute . op soln:_ : Nat -> Attribute . op result : MsgList -> Attribute . op _,_ : MsgList MsgList -> MsgList [assoc id: nil] . op nil : -> MsgList . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . var V : Term . var TL : TermList . var S : Substitution . var Q : Qid . var B : Bool . var P : Parent . var R : RewriteCount . var ML : MsgList . var MP : MatchingProblem . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('XOR, true)) . rl < X : User | AS, problem:(MP, TL) > insertedModule(X, Y) => < X : User | AS, problem:(MP, TL), soln: 1, result(nil) > getVariantMatcher(Y, X, 'XOR, MP, TL, '#, none, 0) . rl < X : User | AS, problem:(MP, TL), soln: N, result(ML) > gotVariantMatcher(X, Y, R, S) => < X : User | AS, problem:(MP, TL), soln: (N + 1), result(ML, gotVariantMatcher(X, Y, R, S)) > getVariantMatcher(Y, X, 'XOR, MP, TL, '#, none, N) . endm erew in VARIANT-MATCH-TEST : <> < me : User | problem: ('_+_['X:XOR, 'c1.Elem] <=? '_+_['Y:XOR, 'c2.Elem], empty) > createInterpreter(interpreterManager, me, none) . variant match in XOR : X:XOR + c1 <=? Y:XOR + c2 . erew in VARIANT-MATCH-TEST : <> < me : User | problem: ('_+_['X:XOR, 'Y:XOR] <=? '_+_['c1.Elem, 'c2.Elem], empty) > createInterpreter(interpreterManager, me, none) . variant match in XOR : X:XOR + Y:XOR <=? c1 + c2 . maude-3.1/tests/Meta/metaNarrow0000755000175200017520000000034413026100037013463 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaNarrow.maude -no-banner -no-advise \ > metaNarrow.out 2>&1 diff $srcdir/metaNarrow.expected metaNarrow.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaGetVariant.expected0000644000175200017520000000527613553743245016110 00000000000000========================================== reduce in TEST : metaGetVariant(['XOR], upTerm(cst1 + X:XOR), ( empty).GroundTermList, '#, (0).Zero) . rewrites: 3 result Variant: {'_+_['cst1.Elem,'%1:XOR], 'X:XOR <- '%1:XOR,'%,(none).Parent,false} ========================================== reduce in TEST : metaGetVariant(upModule('XOR, false), upTerm(cst1 + X:XOR), ( empty).GroundTermList, '#, (0).Zero) . rewrites: 3 result Variant: {'_+_['cst1.Elem,'%1:XOR], 'X:XOR <- '%1:XOR,'%,(none).Parent,false} ========================================== reduce in TEST : metaGetVariant(['XOR], upTerm(cst1 + X:XOR), ( empty).GroundTermList, '@, (0).Zero) . rewrites: 3 result Variant: {'_+_['cst1.Elem,'#1:XOR], 'X:XOR <- '#1:XOR,'#,(none).Parent,false} ========================================== reduce in TEST : metaGetVariant(['XOR], upTerm(cst1 + X:XOR), ( empty).GroundTermList, '#, 1) . rewrites: 6 result Variant: {'cst1.Elem, 'X:XOR <- '0.XOR,'@,(0).Zero,true} ========================================== reduce in TEST : metaGetVariant(['XOR], upTerm(cst1 + X:XOR), ( empty).GroundTermList, '#, 2) . rewrites: 3 result Variant: {'0.XOR, 'X:XOR <- 'cst1.Elem,'@,(0).Zero,true} ========================================== reduce in TEST : metaGetVariant(['XOR], upTerm(cst1 + X:XOR), ( empty).GroundTermList, '#, 3) . rewrites: 3 result Variant: {'@1:XOR, 'X:XOR <- '_+_['cst1.Elem,'@1:XOR],'@,(0).Zero,false} ========================================== reduce in TEST : metaGetVariant(['XOR], upTerm(cst1 + X:XOR), ( empty).GroundTermList, '#, 4) . rewrites: 3 result Variant?: noVariant ========================================== reduce in TEST : metaGetVariant(['XOR], upTerm(cst2 + X:XOR), upTerm(a + X:XOR), '#, (0).Zero) . rewrites: 4 result Variant: {'_+_['cst2.Elem,'%1:XOR], 'X:XOR <- '%1:XOR,'%,(none).Parent,false} ========================================== reduce in TEST : metaGetVariant(['XOR], upTerm(cst2 + X:XOR), upTerm(a + X:XOR), '#, 1) . rewrites: 6 result Variant: {'0.XOR, 'X:XOR <- 'cst2.Elem,'@,(0).Zero,true} ========================================== reduce in TEST : metaGetVariant(['XOR], upTerm(cst2 + X:XOR), upTerm(a + X:XOR), '#, 2) . rewrites: 4 result Variant: {'@1:XOR, 'X:XOR <- '_+_['cst2.Elem,'@1:XOR],'@,(0).Zero,false} ========================================== reduce in TEST : metaGetVariant(['XOR], upTerm(cst2 + X:XOR), upTerm(a + X:XOR), '#, 3) . rewrites: 4 result Variant?: noVariant ========================================== reduce in TEST : metaGetVariant(['XOR], upTerm(cst1 + %1:XOR), ( empty).GroundTermList, '#, (0).Zero) . Warning: unsafe variable name %1:XOR in variant narrowing problem. rewrites: 3 result Variant?: noVariant Bye. maude-3.1/tests/Meta/metaIntVariant.expected0000644000175200017520000004451013703750056016110 00000000000000========================================== erewrite in VARIANT-TEST : <> < me : User | problem:('_+_['X:XOR,'c1.Elem], empty) > createInterpreter(interpreterManager, me, none) . rewrites: 14 result Configuration: <> < me : User | soln: 5,result(gotVariant(me, interpreter(0), 0, '_+_['c1.Elem,'%1:XOR], 'X:XOR <- '%1:XOR, '%, none, false),gotVariant(me, interpreter(0), 3, 'c1.Elem, 'X:XOR <- '0.XOR, '@, 0, true),gotVariant(me, interpreter(0), 0, '0.XOR, 'X:XOR <- 'c1.Elem, '@, 0, true),gotVariant(me, interpreter(0), 0, '@1:XOR, 'X:XOR <- '_+_['c1.Elem,'@1:XOR], '@, 0, false)),problem:('_+_['X:XOR, 'c1.Elem],empty) > noSuchResult(me, interpreter(0), 0, true) ========================================== get variants in XOR : c1 + X . Variant 1 rewrites: 0 XOR: c1 + #1:XOR X --> #1:XOR Variant 2 rewrites: 3 Elem: c1 X --> 0 Variant 3 rewrites: 3 XOR: 0 X --> c1 Variant 4 rewrites: 3 XOR: %1:XOR X --> c1 + %1:XOR No more variants. rewrites: 3 ========================================== erewrite in VARIANT-TEST : <> < me : User | problem:('_+_['X:XOR,'c1.Elem], '_+_['X:XOR,'a.Elem]) > createInterpreter(interpreterManager, me, none) . rewrites: 11 result Configuration: <> < me : User | soln: 4,result(gotVariant(me, interpreter(0), 0, '_+_['c1.Elem,'%1:XOR], 'X:XOR <- '%1:XOR, '%, none, false),gotVariant(me, interpreter(0), 2, '0.XOR, 'X:XOR <- 'c1.Elem, '@, 0, true),gotVariant(me, interpreter(0), 0, '@1:XOR, 'X:XOR <- '_+_['c1.Elem,'@1:XOR], '@, 0, false)),problem:('_+_['X:XOR, 'c1.Elem],'_+_['X:XOR,'a.Elem]) > noSuchResult(me, interpreter(0), 0, true) ========================================== get variants in XOR : c1 + X such that X + a irreducible . Variant 1 rewrites: 0 XOR: c1 + #1:XOR X --> #1:XOR Variant 2 rewrites: 2 XOR: 0 X --> c1 Variant 3 rewrites: 2 XOR: %1:XOR X --> c1 + %1:XOR No more variants. rewrites: 2 ========================================== erewrite in VARIANT-TEST : <> < me : User | problem:('_+_['X:XOR,'Y:XOR, 'c1.Elem],empty) > createInterpreter(interpreterManager, me, none) . rewrites: 91 result Configuration: <> < me : User | soln: 22,result(gotVariant(me, interpreter(0), 0, '_+_['c1.Elem,'%1:XOR,'%2:XOR], 'X:XOR <- '%1:XOR ; 'Y:XOR <- '%2:XOR, '%, none, false),gotVariant(me, interpreter(0), 10, '_+_[ 'c1.Elem,'@1:XOR], 'X:XOR <- '0.XOR ; 'Y:XOR <- '@1:XOR, '@, 0, true),gotVariant(me, interpreter(0), 0, '_+_[ 'c1.Elem,'@1:XOR], 'X:XOR <- '@1:XOR ; 'Y:XOR <- '0.XOR, '@, 0, true),gotVariant(me, interpreter(0), 0, '_+_[ '@1:XOR,'@2:XOR], 'X:XOR <- '_+_['c1.Elem,'@2:XOR] ; 'Y:XOR <- '@1:XOR, '@, 0, true),gotVariant(me, interpreter(0), 0, '@1:XOR, 'X:XOR <- 'c1.Elem ; 'Y:XOR <- '@1:XOR, '@, 0, true),gotVariant(me, interpreter(0), 0, '_+_[ '@1:XOR,'@2:XOR], 'X:XOR <- '@1:XOR ; 'Y:XOR <- '_+_['c1.Elem,'@2:XOR], '@, 0, true),gotVariant(me, interpreter(0), 0, '@1:XOR, 'X:XOR <- '@1:XOR ; 'Y:XOR <- 'c1.Elem, '@, 0, true),gotVariant(me, interpreter(0), 0, '_+_[ 'c1.Elem,'@2:XOR,'@3:XOR], 'X:XOR <- '_+_['@1:XOR,'@2:XOR] ; 'Y:XOR <- '_+_['@1:XOR,'@3:XOR], '@, 0, true),gotVariant(me, interpreter(0), 0, '_+_['c1.Elem,'@2:XOR], 'X:XOR <- '_+_['@1:XOR,'@2:XOR] ; 'Y:XOR <- '@1:XOR, '@, 0, true),gotVariant(me, interpreter(0), 0, '_+_[ 'c1.Elem,'@2:XOR], 'X:XOR <- '@1:XOR ; 'Y:XOR <- '_+_['@1:XOR,'@2:XOR], '@, 0, true),gotVariant(me, interpreter(0), 0, 'c1.Elem, 'X:XOR <- '@1:XOR ; 'Y:XOR <- '@1:XOR, '@, 0, false),gotVariant(me, interpreter(0), 28, '%1:XOR, 'X:XOR <- '0.XOR ; 'Y:XOR <- '_+_['c1.Elem,'%1:XOR], '%, 1, true),gotVariant(me, interpreter(0), 0, '%1:XOR, 'X:XOR <- '_+_['c1.Elem,'%1:XOR] ; 'Y:XOR <- '0.XOR, '%, 2, true),gotVariant(me, interpreter(0), 0, '0.XOR, 'X:XOR <- '_+_['c1.Elem,'%1:XOR] ; 'Y:XOR <- '%1:XOR, '%, 3, true),gotVariant(me, interpreter(0), 0, '_+_[ '%2:XOR,'%3:XOR], 'X:XOR <- '_+_['c1.Elem,'%1:XOR,'%3:XOR] ; 'Y:XOR <- '_+_['%1:XOR,'%2:XOR], '%, 3, true),gotVariant(me, interpreter(0), 0, '%1:XOR, 'X:XOR <- '_+_['c1.Elem,'%2:XOR] ; 'Y:XOR <- '_+_['%1:XOR,'%2:XOR], '%, 3, true),gotVariant(me, interpreter(0), 0, '%1:XOR, 'X:XOR <- '_+_['c1.Elem,'%1:XOR,'%2:XOR] ; 'Y:XOR <- '%2:XOR, '%, 3, true),gotVariant(me, interpreter(0), 0, '0.XOR, 'X:XOR <- '%1:XOR ; 'Y:XOR <- '_+_['c1.Elem,'%1:XOR], '%, 5, true),gotVariant(me, interpreter(0), 0, '_+_['%2:XOR,'%3:XOR], 'X:XOR <- '_+_['%1:XOR,'%2:XOR] ; 'Y:XOR <- '_+_['c1.Elem,'%1:XOR,'%3:XOR], '%, 5, true),gotVariant(me, interpreter(0), 0, '%1:XOR, 'X:XOR <- '_+_['%1:XOR,'%2:XOR] ; 'Y:XOR <- '_+_['c1.Elem,'%2:XOR], '%, 5, true),gotVariant(me, interpreter(0), 0, '%1:XOR, 'X:XOR <- '%2:XOR ; 'Y:XOR <- '_+_['c1.Elem,'%1:XOR,'%2:XOR], '%, 5, false)),problem:('_+_[ 'X:XOR,'Y:XOR,'c1.Elem],empty) > noSuchResult(me, interpreter(0), 8, true) ========================================== get variants in XOR : X + c1 + Y . Variant 1 rewrites: 0 XOR: c1 + #1:XOR + #2:XOR X --> #1:XOR Y --> #2:XOR Variant 2 rewrites: 10 XOR: c1 + %1:XOR X --> 0 Y --> %1:XOR Variant 3 rewrites: 10 XOR: c1 + %1:XOR X --> %1:XOR Y --> 0 Variant 4 rewrites: 10 XOR: %1:XOR + %2:XOR X --> c1 + %2:XOR Y --> %1:XOR Variant 5 rewrites: 10 XOR: %1:XOR X --> c1 Y --> %1:XOR Variant 6 rewrites: 10 XOR: %1:XOR + %2:XOR X --> %1:XOR Y --> c1 + %2:XOR Variant 7 rewrites: 10 XOR: %1:XOR X --> %1:XOR Y --> c1 Variant 8 rewrites: 10 XOR: c1 + %2:XOR + %3:XOR X --> %1:XOR + %2:XOR Y --> %1:XOR + %3:XOR Variant 9 rewrites: 10 XOR: c1 + %2:XOR X --> %1:XOR + %2:XOR Y --> %1:XOR Variant 10 rewrites: 10 XOR: c1 + %2:XOR X --> %1:XOR Y --> %1:XOR + %2:XOR Variant 11 rewrites: 10 Elem: c1 X --> %1:XOR Y --> %1:XOR Variant 12 rewrites: 38 XOR: #1:XOR X --> 0 Y --> c1 + #1:XOR Variant 13 rewrites: 38 XOR: #1:XOR X --> c1 + #1:XOR Y --> 0 Variant 14 rewrites: 38 XOR: 0 X --> c1 + #1:XOR Y --> #1:XOR Variant 15 rewrites: 38 XOR: #2:XOR + #3:XOR X --> c1 + #1:XOR + #3:XOR Y --> #1:XOR + #2:XOR Variant 16 rewrites: 38 XOR: #1:XOR X --> c1 + #2:XOR Y --> #1:XOR + #2:XOR Variant 17 rewrites: 38 XOR: #1:XOR X --> c1 + #1:XOR + #2:XOR Y --> #2:XOR Variant 18 rewrites: 38 XOR: 0 X --> #1:XOR Y --> c1 + #1:XOR Variant 19 rewrites: 38 XOR: #2:XOR + #3:XOR X --> #1:XOR + #2:XOR Y --> c1 + #1:XOR + #3:XOR Variant 20 rewrites: 38 XOR: #1:XOR X --> #1:XOR + #2:XOR Y --> c1 + #2:XOR Variant 21 rewrites: 38 XOR: #1:XOR X --> #2:XOR Y --> c1 + #1:XOR + #2:XOR No more variants. rewrites: 46 ========================================== erewrite in VARIANT-TEST : <> < me : User | problem:('_+_['X:XOR,'Y:XOR, 'c1.Elem],'_+_['X:XOR,'c1.Elem],'_+_['X:XOR,'c2.Elem]) > createInterpreter( interpreterManager, me, none) . rewrites: 50 result Configuration: <> < me : User | soln: 13,result(gotVariant(me, interpreter(0), 0, '_+_['c1.Elem,'%1:XOR,'%2:XOR], 'X:XOR <- '%1:XOR ; 'Y:XOR <- '%2:XOR, '%, none, false),gotVariant(me, interpreter(0), 7, '_+_[ 'c1.Elem,'@1:XOR], 'X:XOR <- '@1:XOR ; 'Y:XOR <- '0.XOR, '@, 0, true),gotVariant(me, interpreter(0), 0, '_+_[ '@1:XOR,'@2:XOR], 'X:XOR <- '@1:XOR ; 'Y:XOR <- '_+_['c1.Elem,'@2:XOR], '@, 0, true),gotVariant(me, interpreter(0), 0, '@1:XOR, 'X:XOR <- '@1:XOR ; 'Y:XOR <- 'c1.Elem, '@, 0, true),gotVariant(me, interpreter(0), 0, '_+_[ 'c1.Elem,'@2:XOR,'@3:XOR], 'X:XOR <- '_+_['@1:XOR,'@2:XOR] ; 'Y:XOR <- '_+_['@1:XOR,'@3:XOR], '@, 0, true),gotVariant(me, interpreter(0), 0, '_+_['c1.Elem,'@2:XOR], 'X:XOR <- '_+_['@1:XOR,'@2:XOR] ; 'Y:XOR <- '@1:XOR, '@, 0, true),gotVariant(me, interpreter(0), 0, '_+_[ 'c1.Elem,'@2:XOR], 'X:XOR <- '@1:XOR ; 'Y:XOR <- '_+_['@1:XOR,'@2:XOR], '@, 0, true),gotVariant(me, interpreter(0), 0, 'c1.Elem, 'X:XOR <- '@1:XOR ; 'Y:XOR <- '@1:XOR, '@, 0, false),gotVariant(me, interpreter(0), 12, '0.XOR, 'X:XOR <- '%1:XOR ; 'Y:XOR <- '_+_['c1.Elem,'%1:XOR], '%, 2, true),gotVariant(me, interpreter(0), 0, '_+_['%2:XOR,'%3:XOR], 'X:XOR <- '_+_['%1:XOR,'%2:XOR] ; 'Y:XOR <- '_+_['c1.Elem,'%1:XOR,'%3:XOR], '%, 2, true),gotVariant(me, interpreter(0), 0, '%1:XOR, 'X:XOR <- '_+_['%1:XOR,'%2:XOR] ; 'Y:XOR <- '_+_['c1.Elem,'%2:XOR], '%, 2, true),gotVariant(me, interpreter(0), 0, '%1:XOR, 'X:XOR <- '%2:XOR ; 'Y:XOR <- '_+_['c1.Elem,'%1:XOR,'%2:XOR], '%, 2, false)),problem:('_+_[ 'X:XOR,'Y:XOR,'c1.Elem],'_+_['X:XOR,'c1.Elem],'_+_['X:XOR,'c2.Elem]) > noSuchResult(me, interpreter(0), 4, true) ========================================== get variants in XOR : X + c1 + Y such that X + c1, X + c2 irreducible . Variant 1 rewrites: 0 XOR: c1 + #1:XOR + #2:XOR X --> #1:XOR Y --> #2:XOR Variant 2 rewrites: 7 XOR: c1 + %1:XOR X --> %1:XOR Y --> 0 Variant 3 rewrites: 7 XOR: %1:XOR + %2:XOR X --> %1:XOR Y --> c1 + %2:XOR Variant 4 rewrites: 7 XOR: %1:XOR X --> %1:XOR Y --> c1 Variant 5 rewrites: 7 XOR: c1 + %2:XOR + %3:XOR X --> %1:XOR + %2:XOR Y --> %1:XOR + %3:XOR Variant 6 rewrites: 7 XOR: c1 + %2:XOR X --> %1:XOR + %2:XOR Y --> %1:XOR Variant 7 rewrites: 7 XOR: c1 + %2:XOR X --> %1:XOR Y --> %1:XOR + %2:XOR Variant 8 rewrites: 7 Elem: c1 X --> %1:XOR Y --> %1:XOR Variant 9 rewrites: 19 XOR: 0 X --> #1:XOR Y --> c1 + #1:XOR Variant 10 rewrites: 19 XOR: #2:XOR + #3:XOR X --> #1:XOR + #2:XOR Y --> c1 + #1:XOR + #3:XOR Variant 11 rewrites: 19 XOR: #1:XOR X --> #1:XOR + #2:XOR Y --> c1 + #2:XOR Variant 12 rewrites: 19 XOR: #1:XOR X --> #2:XOR Y --> c1 + #1:XOR + #2:XOR No more variants. rewrites: 23 ========================================== erewrite in VARIANT-TEST2 : <> < me : User | problem:('_+_['X:XOR,'c1.Elem], empty) > createInterpreter(interpreterManager, me, none) . rewrites: 14 result Configuration: <> < me : User | soln: 5,result(gotVariant(me, interpreter(0), 3, '_+_['c1.Elem,'%1:XOR], 'X:XOR <- '%1:XOR, '%, none, false),gotVariant(me, interpreter(0), 0, 'c1.Elem, 'X:XOR <- '0.XOR, '@, 0, true),gotVariant(me, interpreter(0), 0, '0.XOR, 'X:XOR <- 'c1.Elem, '@, 0, true),gotVariant(me, interpreter(0), 0, '@1:XOR, 'X:XOR <- '_+_['c1.Elem,'@1:XOR], '@, 0, false)),problem:('_+_['X:XOR, 'c1.Elem],empty) > noSuchResult(me, interpreter(0), 0, true) ========================================== get irredundant variants in XOR : c1 + X . rewrites: 3 Variant 1 XOR: c1 + #1:XOR X --> #1:XOR Variant 2 Elem: c1 X --> 0 Variant 3 XOR: 0 X --> c1 Variant 4 XOR: %1:XOR X --> c1 + %1:XOR No more variants. ========================================== erewrite in VARIANT-TEST2 : <> < me : User | problem:('_+_['X:XOR,'c1.Elem], '_+_['X:XOR,'a.Elem]) > createInterpreter(interpreterManager, me, none) . rewrites: 11 result Configuration: <> < me : User | soln: 4,result(gotVariant(me, interpreter(0), 2, '_+_['c1.Elem,'%1:XOR], 'X:XOR <- '%1:XOR, '%, none, false),gotVariant(me, interpreter(0), 0, '0.XOR, 'X:XOR <- 'c1.Elem, '@, 0, true),gotVariant(me, interpreter(0), 0, '@1:XOR, 'X:XOR <- '_+_['c1.Elem,'@1:XOR], '@, 0, false)),problem:('_+_['X:XOR, 'c1.Elem],'_+_['X:XOR,'a.Elem]) > noSuchResult(me, interpreter(0), 0, true) ========================================== get irredundant variants in XOR : c1 + X such that X + a irreducible . rewrites: 2 Variant 1 XOR: c1 + #1:XOR X --> #1:XOR Variant 2 XOR: 0 X --> c1 Variant 3 XOR: %1:XOR X --> c1 + %1:XOR No more variants. ========================================== erewrite in VARIANT-TEST2 : <> < me : User | problem:('_+_['X:XOR,'Y:XOR, 'c1.Elem],empty) > createInterpreter(interpreterManager, me, none) . rewrites: 91 result Configuration: <> < me : User | soln: 22,result(gotVariant(me, interpreter(0), 46, '_+_['c1.Elem,'%1:XOR,'%2:XOR], 'X:XOR <- '%1:XOR ; 'Y:XOR <- '%2:XOR, '%, none, false),gotVariant(me, interpreter(0), 0, '_+_[ 'c1.Elem,'@1:XOR], 'X:XOR <- '0.XOR ; 'Y:XOR <- '@1:XOR, '@, 0, true),gotVariant(me, interpreter(0), 0, '_+_[ 'c1.Elem,'@1:XOR], 'X:XOR <- '@1:XOR ; 'Y:XOR <- '0.XOR, '@, 0, true),gotVariant(me, interpreter(0), 0, '_+_[ '@1:XOR,'@2:XOR], 'X:XOR <- '_+_['c1.Elem,'@2:XOR] ; 'Y:XOR <- '@1:XOR, '@, 0, true),gotVariant(me, interpreter(0), 0, '@1:XOR, 'X:XOR <- 'c1.Elem ; 'Y:XOR <- '@1:XOR, '@, 0, true),gotVariant(me, interpreter(0), 0, '_+_[ '@1:XOR,'@2:XOR], 'X:XOR <- '@1:XOR ; 'Y:XOR <- '_+_['c1.Elem,'@2:XOR], '@, 0, true),gotVariant(me, interpreter(0), 0, '@1:XOR, 'X:XOR <- '@1:XOR ; 'Y:XOR <- 'c1.Elem, '@, 0, true),gotVariant(me, interpreter(0), 0, '_+_[ 'c1.Elem,'@2:XOR,'@3:XOR], 'X:XOR <- '_+_['@1:XOR,'@2:XOR] ; 'Y:XOR <- '_+_['@1:XOR,'@3:XOR], '@, 0, true),gotVariant(me, interpreter(0), 0, '_+_['c1.Elem,'@2:XOR], 'X:XOR <- '_+_['@1:XOR,'@2:XOR] ; 'Y:XOR <- '@1:XOR, '@, 0, true),gotVariant(me, interpreter(0), 0, '_+_[ 'c1.Elem,'@2:XOR], 'X:XOR <- '@1:XOR ; 'Y:XOR <- '_+_['@1:XOR,'@2:XOR], '@, 0, true),gotVariant(me, interpreter(0), 0, 'c1.Elem, 'X:XOR <- '@1:XOR ; 'Y:XOR <- '@1:XOR, '@, 0, false),gotVariant(me, interpreter(0), 0, '%1:XOR, 'X:XOR <- '0.XOR ; 'Y:XOR <- '_+_['c1.Elem,'%1:XOR], '%, 1, true),gotVariant(me, interpreter(0), 0, '%1:XOR, 'X:XOR <- '_+_['c1.Elem,'%1:XOR] ; 'Y:XOR <- '0.XOR, '%, 2, true),gotVariant(me, interpreter(0), 0, '0.XOR, 'X:XOR <- '_+_['c1.Elem,'%1:XOR] ; 'Y:XOR <- '%1:XOR, '%, 3, true),gotVariant(me, interpreter(0), 0, '_+_[ '%2:XOR,'%3:XOR], 'X:XOR <- '_+_['c1.Elem,'%1:XOR,'%3:XOR] ; 'Y:XOR <- '_+_['%1:XOR,'%2:XOR], '%, 3, true),gotVariant(me, interpreter(0), 0, '%1:XOR, 'X:XOR <- '_+_['c1.Elem,'%2:XOR] ; 'Y:XOR <- '_+_['%1:XOR,'%2:XOR], '%, 3, true),gotVariant(me, interpreter(0), 0, '%1:XOR, 'X:XOR <- '_+_['c1.Elem,'%1:XOR,'%2:XOR] ; 'Y:XOR <- '%2:XOR, '%, 3, true),gotVariant(me, interpreter(0), 0, '0.XOR, 'X:XOR <- '%1:XOR ; 'Y:XOR <- '_+_['c1.Elem,'%1:XOR], '%, 5, true),gotVariant(me, interpreter(0), 0, '_+_['%2:XOR,'%3:XOR], 'X:XOR <- '_+_['%1:XOR,'%2:XOR] ; 'Y:XOR <- '_+_['c1.Elem,'%1:XOR,'%3:XOR], '%, 5, true),gotVariant(me, interpreter(0), 0, '%1:XOR, 'X:XOR <- '_+_['%1:XOR,'%2:XOR] ; 'Y:XOR <- '_+_['c1.Elem,'%2:XOR], '%, 5, true),gotVariant(me, interpreter(0), 0, '%1:XOR, 'X:XOR <- '%2:XOR ; 'Y:XOR <- '_+_['c1.Elem,'%1:XOR,'%2:XOR], '%, 5, false)),problem:('_+_[ 'X:XOR,'Y:XOR,'c1.Elem],empty) > noSuchResult(me, interpreter(0), 0, true) ========================================== get irredundant variants in XOR : X + c1 + Y . rewrites: 46 Variant 1 XOR: c1 + #1:XOR + #2:XOR X --> #1:XOR Y --> #2:XOR Variant 2 XOR: c1 + %1:XOR X --> 0 Y --> %1:XOR Variant 3 XOR: c1 + %1:XOR X --> %1:XOR Y --> 0 Variant 4 XOR: %1:XOR + %2:XOR X --> c1 + %2:XOR Y --> %1:XOR Variant 5 XOR: %1:XOR X --> c1 Y --> %1:XOR Variant 6 XOR: %1:XOR + %2:XOR X --> %1:XOR Y --> c1 + %2:XOR Variant 7 XOR: %1:XOR X --> %1:XOR Y --> c1 Variant 8 XOR: c1 + %2:XOR + %3:XOR X --> %1:XOR + %2:XOR Y --> %1:XOR + %3:XOR Variant 9 XOR: c1 + %2:XOR X --> %1:XOR + %2:XOR Y --> %1:XOR Variant 10 XOR: c1 + %2:XOR X --> %1:XOR Y --> %1:XOR + %2:XOR Variant 11 Elem: c1 X --> %1:XOR Y --> %1:XOR Variant 12 XOR: #1:XOR X --> 0 Y --> c1 + #1:XOR Variant 13 XOR: #1:XOR X --> c1 + #1:XOR Y --> 0 Variant 14 XOR: 0 X --> c1 + #1:XOR Y --> #1:XOR Variant 15 XOR: #2:XOR + #3:XOR X --> c1 + #1:XOR + #3:XOR Y --> #1:XOR + #2:XOR Variant 16 XOR: #1:XOR X --> c1 + #2:XOR Y --> #1:XOR + #2:XOR Variant 17 XOR: #1:XOR X --> c1 + #1:XOR + #2:XOR Y --> #2:XOR Variant 18 XOR: 0 X --> #1:XOR Y --> c1 + #1:XOR Variant 19 XOR: #2:XOR + #3:XOR X --> #1:XOR + #2:XOR Y --> c1 + #1:XOR + #3:XOR Variant 20 XOR: #1:XOR X --> #1:XOR + #2:XOR Y --> c1 + #2:XOR Variant 21 XOR: #1:XOR X --> #2:XOR Y --> c1 + #1:XOR + #2:XOR No more variants. ========================================== erewrite in VARIANT-TEST2 : <> < me : User | problem:('_+_['X:XOR,'Y:XOR, 'c1.Elem],'_+_['X:XOR,'c1.Elem],'_+_['X:XOR,'c2.Elem]) > createInterpreter( interpreterManager, me, none) . rewrites: 50 result Configuration: <> < me : User | soln: 13,result(gotVariant(me, interpreter(0), 23, '_+_['c1.Elem,'%1:XOR,'%2:XOR], 'X:XOR <- '%1:XOR ; 'Y:XOR <- '%2:XOR, '%, none, false),gotVariant(me, interpreter(0), 0, '_+_[ 'c1.Elem,'@1:XOR], 'X:XOR <- '@1:XOR ; 'Y:XOR <- '0.XOR, '@, 0, true),gotVariant(me, interpreter(0), 0, '_+_[ '@1:XOR,'@2:XOR], 'X:XOR <- '@1:XOR ; 'Y:XOR <- '_+_['c1.Elem,'@2:XOR], '@, 0, true),gotVariant(me, interpreter(0), 0, '@1:XOR, 'X:XOR <- '@1:XOR ; 'Y:XOR <- 'c1.Elem, '@, 0, true),gotVariant(me, interpreter(0), 0, '_+_[ 'c1.Elem,'@2:XOR,'@3:XOR], 'X:XOR <- '_+_['@1:XOR,'@2:XOR] ; 'Y:XOR <- '_+_['@1:XOR,'@3:XOR], '@, 0, true),gotVariant(me, interpreter(0), 0, '_+_['c1.Elem,'@2:XOR], 'X:XOR <- '_+_['@1:XOR,'@2:XOR] ; 'Y:XOR <- '@1:XOR, '@, 0, true),gotVariant(me, interpreter(0), 0, '_+_[ 'c1.Elem,'@2:XOR], 'X:XOR <- '@1:XOR ; 'Y:XOR <- '_+_['@1:XOR,'@2:XOR], '@, 0, true),gotVariant(me, interpreter(0), 0, 'c1.Elem, 'X:XOR <- '@1:XOR ; 'Y:XOR <- '@1:XOR, '@, 0, false),gotVariant(me, interpreter(0), 0, '0.XOR, 'X:XOR <- '%1:XOR ; 'Y:XOR <- '_+_['c1.Elem,'%1:XOR], '%, 2, true),gotVariant(me, interpreter(0), 0, '_+_['%2:XOR,'%3:XOR], 'X:XOR <- '_+_['%1:XOR,'%2:XOR] ; 'Y:XOR <- '_+_['c1.Elem,'%1:XOR,'%3:XOR], '%, 2, true),gotVariant(me, interpreter(0), 0, '%1:XOR, 'X:XOR <- '_+_['%1:XOR,'%2:XOR] ; 'Y:XOR <- '_+_['c1.Elem,'%2:XOR], '%, 2, true),gotVariant(me, interpreter(0), 0, '%1:XOR, 'X:XOR <- '%2:XOR ; 'Y:XOR <- '_+_['c1.Elem,'%1:XOR,'%2:XOR], '%, 2, false)),problem:('_+_[ 'X:XOR,'Y:XOR,'c1.Elem],'_+_['X:XOR,'c1.Elem],'_+_['X:XOR,'c2.Elem]) > noSuchResult(me, interpreter(0), 0, true) ========================================== get irredundant variants in XOR : X + c1 + Y such that X + c1, X + c2 irreducible . rewrites: 23 Variant 1 XOR: c1 + #1:XOR + #2:XOR X --> #1:XOR Y --> #2:XOR Variant 2 XOR: c1 + %1:XOR X --> %1:XOR Y --> 0 Variant 3 XOR: %1:XOR + %2:XOR X --> %1:XOR Y --> c1 + %2:XOR Variant 4 XOR: %1:XOR X --> %1:XOR Y --> c1 Variant 5 XOR: c1 + %2:XOR + %3:XOR X --> %1:XOR + %2:XOR Y --> %1:XOR + %3:XOR Variant 6 XOR: c1 + %2:XOR X --> %1:XOR + %2:XOR Y --> %1:XOR Variant 7 XOR: c1 + %2:XOR X --> %1:XOR Y --> %1:XOR + %2:XOR Variant 8 Elem: c1 X --> %1:XOR Y --> %1:XOR Variant 9 XOR: 0 X --> #1:XOR Y --> c1 + #1:XOR Variant 10 XOR: #2:XOR + #3:XOR X --> #1:XOR + #2:XOR Y --> c1 + #1:XOR + #3:XOR Variant 11 XOR: #1:XOR X --> #1:XOR + #2:XOR Y --> c1 + #2:XOR Variant 12 XOR: #1:XOR X --> #2:XOR Y --> c1 + #1:XOR + #2:XOR No more variants. Bye. maude-3.1/tests/Meta/metaIntMatch.expected0000644000175200017520000000651013333167466015544 00000000000000========================================== erewrite in MATCH-TEST : <> < me : User | soln: 0 > createInterpreter( interpreterManager, me, none) . rewrites: 3 result Configuration: <> < me : User | none > gotMatch(me, interpreter(0), 0, 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'f['b.Foo,'a.Foo]) ========================================== erewrite in MATCH-TEST : <> < me : User | soln: 1 > createInterpreter( interpreterManager, me, none) . rewrites: 3 result Configuration: <> < me : User | none > gotMatch(me, interpreter(0), 0, 'X:Foo <- 'f['a.Foo,'b.Foo] ; 'Y:Foo <- 'a.Foo) ========================================== erewrite in MATCH-TEST : <> < me : User | soln: 2 > createInterpreter( interpreterManager, me, none) . rewrites: 3 result Configuration: <> < me : User | none > noSuchResult(me, interpreter(0), 0) ========================================== erewrite in MATCH-CACHE-TEST : <> < me : User | none > createInterpreter( interpreterManager, me, none) . rewrites: 7 result Configuration: <> < me : User | soln: 3,got: gotMatch(me, interpreter( 0), 0, 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'f['b.Foo,'a.Foo]),got: gotMatch(me, interpreter(0), 0, 'X:Foo <- 'f['a.Foo,'b.Foo] ; 'Y:Foo <- 'a.Foo) > noSuchResult(me, interpreter(0), 0) ========================================== erewrite in XMATCH-TEST : <> < me : User | soln: 0 > createInterpreter( interpreterManager, me, none) . rewrites: 3 result Configuration: <> < me : User | none > gotXmatch(me, interpreter(0), 0, 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'b.Foo, 'g['f[[],'a.Foo]]) ========================================== erewrite in XMATCH-TEST : <> < me : User | soln: 1 > createInterpreter( interpreterManager, me, none) . rewrites: 3 result Configuration: <> < me : User | none > gotXmatch(me, interpreter(0), 0, 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'f['b.Foo,'a.Foo], 'g[[]]) ========================================== erewrite in XMATCH-TEST : <> < me : User | soln: 2 > createInterpreter( interpreterManager, me, none) . rewrites: 3 result Configuration: <> < me : User | none > gotXmatch(me, interpreter(0), 0, 'X:Foo <- 'f['a.Foo,'b.Foo] ; 'Y:Foo <- 'a.Foo, 'g[[]]) ========================================== erewrite in XMATCH-TEST : <> < me : User | soln: 3 > createInterpreter( interpreterManager, me, none) . rewrites: 3 result Configuration: <> < me : User | none > gotXmatch(me, interpreter(0), 0, 'X:Foo <- 'b.Foo ; 'Y:Foo <- 'a.Foo, 'g['f['a.Foo,[]]]) ========================================== erewrite in XMATCH-TEST : <> < me : User | soln: 4 > createInterpreter( interpreterManager, me, none) . rewrites: 3 result Configuration: <> < me : User | none > noSuchResult(me, interpreter(0), 0) ========================================== erewrite in XMATCH-CACHE-TEST : <> < me : User | none > createInterpreter( interpreterManager, me, none) . rewrites: 11 result Configuration: <> < me : User | soln: 5,got: gotXmatch(me, interpreter( 0), 0, 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'b.Foo, 'g['f[[],'a.Foo]]),got: gotXmatch(me, interpreter(0), 0, 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'f['b.Foo,'a.Foo], 'g[[]]),got: gotXmatch(me, interpreter(0), 0, 'X:Foo <- 'b.Foo ; 'Y:Foo <- 'a.Foo, 'g['f['a.Foo,[]]]),got: gotXmatch(me, interpreter(0), 0, 'X:Foo <- 'f['a.Foo,'b.Foo] ; 'Y:Foo <- 'a.Foo, 'g[[]]) > noSuchResult(me, interpreter(0), 0) Bye. maude-3.1/tests/Meta/metaUpDown.maude0000644000175200017520000000157510026157165014540 00000000000000set show timing off . set show advisories off . select META-LEVEL . red metaReduce(['BOOL], 'true.Bool) . red upTerm(1) . red upTerm(X:Nat + 21) . red downTerm('s_['0.Zero], 0) . red downTerm('_+_['X:Nat,'s_^21['0.Zero]], 0) . red upTerm(upTerm(X:Nat + 21)) . red upTerm(upTerm(upTerm(X:Nat + 21))) . red downTerm(upTerm(X:Nat + 21), 0) . red downTerm(downTerm(upTerm(upTerm(X:Nat + 21)), X:Term), 0) . set trace on . red downTerm(downTerm(downTerm( upTerm(upTerm(upTerm(X:Nat + 21))) , X:Term), X:Term), 0) . set trace off . fmod UP-DOWN-TEST is inc META-LEVEL . sort Foo . ops a b c d e : -> Foo . op f : Foo Foo -> Foo . eq c = d . endfm red upTerm(f(a, f(b, c))) . red upTerm(upTerm(f(a, f(b, c)))) . red downTerm(upTerm(upTerm(f(a, f(b, c)))), X:Term) . red downTerm(downTerm(upTerm(upTerm(f(a, f(b, c)))), X:Term), a) . red downTerm('f['a.Foo,'f['b.Foo,'c.Foo]], a) . maude-3.1/tests/Meta/metaUp2.maude0000644000175200017520000000360510026157526013767 00000000000000set show timing off . set show advisories off . select META-LEVEL . red upSorts('META-LEVEL, true) . red upSorts('META-LEVEL, false) . red upSubsortDecls('META-LEVEL, true) . red upSubsortDecls('META-LEVEL, false) . red upImports('META-LEVEL) . red upImports('NAT) . red upImports('TRUTH-VALUE) . set trace on . red upOpDecls('TRUTH-VALUE, true) . set trace off . red upOpDecls('META-LEVEL, true) . red upOpDecls('META-LEVEL, false) . red upOpDecls('IDENTICAL, true) . red in META-LEVEL : upModule('META-LEVEL, true) . red in META-LEVEL : upModule('META-LEVEL, false) . red in META-LEVEL : upModule('BOOL, true) . red in META-LEVEL : metaReduce(upModule('BOOL, true), '_==_['true.Bool, 'false.Bool]) . red in META-LEVEL : upModule('BOOL, false) . red in META-LEVEL : metaReduce(upModule('BOOL, false), '_==_['true.Bool, 'false.Bool]) . red in META-LEVEL : upModule('TRUTH, true) . red in META-LEVEL : upModule('NAT, true) . red in META-LEVEL : metaReduce(upModule('NAT, true), '_+_[upTerm(100), upTerm(66)]) . red in META-LEVEL : upModule('NAT, false) . red in META-LEVEL : metaReduce(upModule('NAT, false), '_+_[upTerm(100), upTerm(66)]) . red in META-LEVEL : metaReduce(upModule('NAT, true), 'modExp[upTerm(100), upTerm(66), upTerm(17)]) . red in META-LEVEL : upModule('META-LEVEL, true) . red in META-LEVEL : upModule('STRING, true) . red in META-LEVEL : metaReduce(upModule('STRING, true), '_+_[upTerm("a"), upTerm("b")]) . red in META-LEVEL : metaReduce(upModule('META-LEVEL, true), 'modExp[upTerm(100), upTerm(66), upTerm(17)]) . red in META-LEVEL : metaReduce(upModule('META-LEVEL, true), 'upModule[upTerm('META-LEVEL), upTerm(true)]) . red upTerm(upModule('META-LEVEL, true)) . red {upTerm(upModule('META-LEVEL, true)), 'FModule} . red in META-LEVEL : metaReduce(upModule('META-LEVEL, true), 'upModule[upTerm('META-LEVEL), upTerm(true)]) == {upTerm(upModule('META-LEVEL, true)), 'FModule} . maude-3.1/tests/Meta/metaMeta0000755000175200017520000000033410511605055013106 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaMeta.maude -no-banner -no-advise \ > metaMeta.out 2>&1 diff $srcdir/metaMeta.expected metaMeta.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaModExp.maude0000644000175200017520000000336410026156534014515 00000000000000set show timing off . set show advisories off . red in META-LEVEL : ( fmod 'FOO is including ('NAT + 'INT) * (sort 'Nat to 'Nat2, op 'foo to 'bar [none], op 'baz : 'Quux 'Quux -> 'Quux to 'quux [prec(10)], label 'foo to 'bar) . sorts 'Foo . none none none none endfm ) . select META-LEVEL . red metaReduce( fmod 'FOO is including 'NAT + 'INT . sorts 'Foo . none none none none endfm, '0.Nat) . red metaReduce( fmod 'FOO is including 'NAT * (sort 'Zero to 'ZZ) . sorts 'Foo . none none none none endfm, '0.Nat) . red in META-LEVEL : metaReduce( fmod 'FOO is including ('NAT + 'FLOAT) * (sort 'Zero to 'ZZ, op '_+_ to 'plus [none]) . sorts 'Foo . none none none none endfm, 'plus['s_^2['0.Nat],'s_^2['0.Nat]]) . red in META-LEVEL : metaReduce( fmod 'FOO is including 'NAT * (op '_+_ to 'plus [none]) . sorts 'Foo . none none none none endfm, 'plus['s_^2['0.Nat],'s_^2['0.Nat]]) . red in META-LEVEL : metaReduce( fmod 'FOO is including 'NAT . sorts 'Foo . none none none none endfm, '_+_['s_^2['0.Nat],'s_^2['0.Nat]]) . red in META-LEVEL : metaReduce( fmod 'FOO is including 'NAT * (op '_+_ to 'plus [none]) . sorts 'Foo . none none none none endfm, '_*_['s_^2['0.Nat],'s_^2['0.Nat]]) . red in META-LEVEL : metaReduce( fmod 'FOO is including 'NAT * (sort 'Zero to 'ZZ) . sorts 'Foo . none none none none endfm, '_*_['s_^2['0.Nat],'s_^2['0.Nat]]) . red in META-LEVEL : metaReduce( fmod 'FOO is including 'NAT * (sort 'Zero to 'ZZ) . sorts 'Foo . none none none none endfm, 'sd['s_^3['0.Nat],'s_^2['0.Nat]]) . red in META-LEVEL : metaReduce( fmod 'FOO is including 'NAT * (op '_+_ to 'plus [none]) . sorts 'Foo . none none none none endfm, '0.Nat) . maude-3.1/tests/Meta/metaIntNewNarrowSearch.maude0000644000175200017520000000721613402641046017042 00000000000000set show timing off . set show advisories off . *** *** Test getNarrowingSearchResult()/getNarrowingSearchResultAndPath() in the meta-interpreter. *** load metaInterpreter mod NARROW is sort Foo . ops f g h : Foo -> Foo . ops i j k : Foo Foo -> Foo . vars X Y Z W A B C D : Foo . eq j(f(X), Y) = i(f(Y), X) [variant] . rl g(i(X, k(Y, Z))) => f(k(Z, X)) [narrowing] . endm mod NARROW-TEST is pr META-INTERPRETER . sort MsgList . subsort Msg < MsgList . op empty : -> MsgList . op _;_ : MsgList MsgList -> MsgList [assoc id: empty] . op me : -> Oid . op User : -> Cid . op soln:_ : Nat -> Attribute . op got:_ : MsgList -> Attribute . op start:_ : Term -> Attribute . op goal:_ : Term -> Attribute . op fold:_ : Qid -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . vars N M : Nat . vars S S' : Substitution . var ST T G : Term . var TY : Type . var C : Context . var Q Q' L : Qid . var ML : MsgList . var TL : TermList . var F : Qid . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('NARROW, true)) . rl < X : User | AS, start: ST, goal: G, fold: F > insertedModule(X, Y) => < X : User | AS, soln: 1, start: ST, goal: G, fold: F, got: empty > getNarrowingSearchResult(Y, X, 'NARROW, ST, G, '*, unbounded, F, 0) . rl < X : User | AS, soln: N, start: ST, goal: G, fold: F, got: ML > gotNarrowingSearchResult(X, Y, M, T, TY, S, Q, S', Q') => < X : User | AS, soln: (N + 1), start: ST, goal: G, fold: F, got: (ML ; gotNarrowingSearchResult(X, Y, M, T, TY, S, Q, S', Q')) > getNarrowingSearchResult(Y, X, 'NARROW, ST, G, '*, unbounded, F, N) . endm set show breakdown on . erew in NARROW-TEST : <> < me : User | start: ('g['j['A:Foo, 'B:Foo]]), goal: 'C:Foo, fold: 'none > createInterpreter(interpreterManager, me, none) . erew in NARROW-TEST : <> < me : User | start: ('g['j['A:Foo, 'B:Foo]]), goal: 'C:Foo, fold: 'match > createInterpreter(interpreterManager, me, none) . mod NARROW-TEST is pr META-INTERPRETER . sort MsgList . subsort Msg < MsgList . op empty : -> MsgList . op _;_ : MsgList MsgList -> MsgList [assoc id: empty] . op me : -> Oid . op User : -> Cid . op soln:_ : Nat -> Attribute . op got:_ : MsgList -> Attribute . op start:_ : Term -> Attribute . op goal:_ : Term -> Attribute . op fold:_ : Qid -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . vars N M : Nat . vars S S' : Substitution . var ST T G : Term . var TY : Type . var C : Context . var Q Q' L : Qid . var ML : MsgList . var TL : TermList . var F : Qid . var TR : NarrowingTrace . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('NARROW, true)) . rl < X : User | AS, start: ST, goal: G, fold: F > insertedModule(X, Y) => < X : User | AS, soln: 1, start: ST, goal: G, fold: F, got: empty > getNarrowingSearchResultAndPath(Y, X, 'NARROW, ST, G, '*, unbounded, F, 0) . rl < X : User | AS, soln: N, start: ST, goal: G, fold: F, got: ML > gotNarrowingSearchResultAndPath(X, Y, M, T, TY, S, TR, S', Q') => < X : User | AS, soln: (N + 1), start: ST, goal: G, fold: F, got: (ML ; gotNarrowingSearchResultAndPath(X, Y, M, T, TY, S, TR, S', Q')) > getNarrowingSearchResultAndPath(Y, X, 'NARROW, ST, G, '*, unbounded, F, N) . endm erew in NARROW-TEST : <> < me : User | start: ('g['j['A:Foo, 'B:Foo]]), goal: 'C:Foo, fold: 'none > createInterpreter(interpreterManager, me, none) . erew in NARROW-TEST : <> < me : User | start: ('g['j['A:Foo, 'B:Foo]]), goal: 'C:Foo, fold: 'match > createInterpreter(interpreterManager, me, none) . maude-3.1/tests/Meta/metaParse.maude0000644000175200017520000000317313560111051014360 00000000000000set show timing off . set show advisories off . select META-LEVEL . red metaParse( fmod 'FOO is protecting 'FLOAT . sorts none . none none none none endfm, '1.0 '+ '1.0, anyType) . red in META-LEVEL : metaParse( fmod 'FOO is including 'RAT . sorts 'Foo . none none none none endfm, '3 , anyType) . red in META-LEVEL : metaParse( fmod 'FOO is including 'RAT . sorts 'Foo . none none none none endfm, '-3 , anyType) . red in META-LEVEL : metaParse( fmod 'FOO is including 'RAT . sorts 'Foo . none none none none endfm, '-2/3 , anyType) . red in META-LEVEL : metaParse( fmod 'FOO is including 'RAT . sorts 'Foo . none none none none endfm, 's_^2 '`( '0 '`) , anyType) . red in META-LEVEL : metaParse( fmod 'FOO is including 'RAT . sorts 'Foo . none none none none endfm, '-256789/387654 , anyType) . red in META-LEVEL : metaParse( fmod 'FOO is including 'BOOL . sorts 'Foo . none op 's : 'Bool -> 'Bool [iter] . none none endfm, 's^1234 '`( 'true '`), anyType) . *** test new variable alias feature red metaParse( fmod 'FOO is protecting 'FLOAT . sorts none . none none none none endfm, 'X:Float, 'X '+ '1.0, anyType) . red metaParse( fmod 'FOO is protecting 'FLOAT . sorts none . none none none none endfm, 'X:Float ; 'Y:Float, 'X '+ '1.0, anyType) . red metaParse( fmod 'FOO is protecting 'FLOAT . sorts none . none none none none endfm, 'X:Float ; 'Y:Float, 'X '+ 'Y, anyType) . *** should fail red metaParse( fmod 'FOO is protecting 'FLOAT . sorts none . none none none none endfm, 'X:Float, 'X '+ 'Y, anyType) . maude-3.1/tests/Meta/metaModExp.expected0000644000175200017520000000564313140741642015225 00000000000000========================================== reduce in META-LEVEL : fmod 'FOO is including ('INT + 'NAT) * ( sort 'Nat to 'Nat2, (label 'foo to 'bar, op 'baz : 'Quux 'Quux -> 'Quux to 'quux [prec(10)]), op 'foo to 'bar [none] ) . sorts 'Foo . none none none none endfm . rewrites: 0 result FModule: fmod 'FOO is including ('INT + 'NAT) * ( sort 'Nat to 'Nat2, label 'foo to 'bar, op 'foo to 'bar [none], op 'baz : 'Quux 'Quux -> 'Quux to 'quux [prec(10)] ) . sorts 'Foo . none none none none endfm ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is including 'INT + 'NAT . sorts 'Foo . none none none none endfm, '0.Nat) . rewrites: 1 result ResultPair: {'0.Zero,'Zero} ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is including 'NAT * ( sort 'Zero to 'ZZ ) . sorts 'Foo . none none none none endfm, '0.Nat) . rewrites: 1 result ResultPair: {'0.ZZ,'ZZ} ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is including ('FLOAT + 'NAT) * ( sort 'Zero to 'ZZ, op '_+_ to 'plus [none] ) . sorts 'Foo . none none none none endfm, 'plus['s_^2['0.Nat],'s_^2['0.Nat]]) . rewrites: 2 result ResultPair: {'s_^4['0.ZZ],'NzNat} ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is including 'NAT * ( op '_+_ to 'plus [none] ) . sorts 'Foo . none none none none endfm, 'plus['s_^2['0.Nat],'s_^2['0.Nat]]) . rewrites: 2 result ResultPair: {'s_^4['0.Zero],'NzNat} ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is including 'NAT . sorts 'Foo . none none none none endfm, '_+_['s_^2['0.Nat],'s_^2['0.Nat]]) . rewrites: 2 result ResultPair: {'s_^4['0.Zero],'NzNat} ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is including 'NAT * ( op '_+_ to 'plus [none] ) . sorts 'Foo . none none none none endfm, '_*_['s_^2['0.Nat],'s_^2['0.Nat]]) . rewrites: 2 result ResultPair: {'s_^4['0.Zero],'NzNat} ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is including 'NAT * ( sort 'Zero to 'ZZ ) . sorts 'Foo . none none none none endfm, '_*_['s_^2['0.Nat],'s_^2['0.Nat]]) . rewrites: 2 result ResultPair: {'s_^4['0.ZZ],'NzNat} ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is including 'NAT * ( sort 'Zero to 'ZZ ) . sorts 'Foo . none none none none endfm, 'sd['s_^3['0.Nat],'s_^2['0.Nat]]) . rewrites: 2 result ResultPair: {'s_['0.ZZ],'NzNat} ========================================== reduce in META-LEVEL : metaReduce(fmod 'FOO is including 'NAT * ( op '_+_ to 'plus [none] ) . sorts 'Foo . none none none none endfm, '0.Nat) . rewrites: 1 result ResultPair: {'0.Zero,'Zero} Bye. maude-3.1/tests/Meta/metaIntUnify0000755000175200017520000000035413353023362013771 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaIntUnify.maude -no-banner -no-advise \ > metaIntUnify.out 2>&1 diff $srcdir/metaIntUnify.expected metaIntUnify.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaIntSearch.maude0000644000175200017520000001041713333156601015175 00000000000000set show timing off . set show advisories off . *** *** Test search in the meta-interpreter without and with path. *** load metaInterpreter mod SEARCH is sort State . ops a b c d e : -> State . rl [a-move1] : a => b . rl [a-move2] : a => c . rl [b-move] : b => d . rl [c-move] : c => e . endm mod SEARCH-TEST is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op soln:_ : Nat -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('SEARCH, true)) . rl < X : User | soln: N, AS > insertedModule(X, Y) => < X : User | AS > getSearchResult(Y, X, 'SEARCH, 'a.State, 'X:State, nil, '*, 20, N) . endm erew in SEARCH-TEST : <> < me : User | soln: 0 > createInterpreter(interpreterManager, me, none) . erew in SEARCH-TEST : <> < me : User | soln: 1 > createInterpreter(interpreterManager, me, none) . erew in SEARCH-TEST : <> < me : User | soln: 2 > createInterpreter(interpreterManager, me, none) . erew in SEARCH-TEST : <> < me : User | soln: 3 > createInterpreter(interpreterManager, me, none) . erew in SEARCH-TEST : <> < me : User | soln: 4 > createInterpreter(interpreterManager, me, none) . erew in SEARCH-TEST : <> < me : User | soln: 5 > createInterpreter(interpreterManager, me, none) . mod SEARCH-CACHE-TEST is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op soln:_ : Nat -> Attribute . op got:_ : Msg -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . vars N M : Nat . var S : Substitution . var T : Term . var TY : Type . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('SEARCH, true)) . rl < X : User | soln: N, AS > insertedModule(X, Y) => < X : User | AS, soln: 1 > getSearchResult(Y, X, 'SEARCH, 'a.State, 'X:State, nil, '*, 20, 0) . rl < X : User | soln: N, AS > gotSearchResult(X, Y, M, T, TY, S) => < X : User | AS, soln: (N + 1), got: gotSearchResult(X, Y, M, T, TY, S) > getSearchResult(Y, X, 'SEARCH, 'a.State, 'X:State, nil, '*, 20, N) . endm erew in SEARCH-CACHE-TEST : <> < me : User | soln: 0 > createInterpreter(interpreterManager, me, none) . mod SEARCH-PATH-TEST is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op soln:_ : Nat -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . var N : Nat . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('SEARCH, true)) . rl < X : User | soln: N, AS > insertedModule(X, Y) => < X : User | AS > getSearchResultAndPath(Y, X, 'SEARCH, 'a.State, 'X:State, nil, '*, 20, N) . endm erew in SEARCH-PATH-TEST : <> < me : User | soln: 0 > createInterpreter(interpreterManager, me, none) . erew in SEARCH-PATH-TEST : <> < me : User | soln: 1 > createInterpreter(interpreterManager, me, none) . erew in SEARCH-PATH-TEST : <> < me : User | soln: 2 > createInterpreter(interpreterManager, me, none) . erew in SEARCH-PATH-TEST : <> < me : User | soln: 3 > createInterpreter(interpreterManager, me, none) . erew in SEARCH-PATH-TEST : <> < me : User | soln: 4 > createInterpreter(interpreterManager, me, none) . erew in SEARCH-PATH-TEST : <> < me : User | soln: 5 > createInterpreter(interpreterManager, me, none) . mod SEARCH-PATH-CACHE-TEST is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op soln:_ : Nat -> Attribute . op got:_ : Msg -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . vars N M : Nat . var S : Substitution . var T : Term . var TY : Type . var TR : Trace . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('SEARCH, true)) . rl < X : User | soln: N, AS > insertedModule(X, Y) => < X : User | AS, soln: 1 > getSearchResultAndPath(Y, X, 'SEARCH, 'a.State, 'X:State, nil, '*, 20, 0) . rl < X : User | soln: N, AS > gotSearchResultAndPath(X, Y, M, T, TY, S, TR) => < X : User | AS, soln: (N + 1), got: gotSearchResultAndPath(X, Y, M, T, TY, S, TR) > getSearchResultAndPath(Y, X, 'SEARCH, 'a.State, 'X:State, nil, '*, 20, N) . endm erew in SEARCH-PATH-CACHE-TEST : <> < me : User | soln: 0 > createInterpreter(interpreterManager, me, none) . maude-3.1/tests/Meta/metaXmatch.maude0000644000175200017520000002370510025725631014545 00000000000000set show timing off . set show advisories off . mod SEARCH-TEST is sort Nat . op _+_ : Nat Nat -> Nat [assoc comm prec 5] . op _*_ : Nat Nat -> Nat [assoc comm prec 3] . ops a b c d e 0 1 : -> Nat . vars W X Y Z : Nat . eq 0 * X = 0 . eq 1 * X = X . eq 0 + X = X . rl X * (Y + Z) => X * Y + X * Z . rl X * Y + X * Z => X * (Y + Z) . endm select META-LEVEL . red metaXmatch(['SEARCH-TEST], 'X:Nat, '_*_['a.Nat, '_+_['b.Nat, 'c.Nat]], '_+_['Y:Nat, 'Z:Nat] := 'X:Nat, 1, 2, 0) . red metaXmatch(['SEARCH-TEST], 'X:Nat, '_*_['a.Nat, '_+_['b.Nat, 'c.Nat]], '_+_['Y:Nat, 'Z:Nat] := 'X:Nat, 1, 2, 1) . red metaXmatch(['SEARCH-TEST], 'X:Nat, '_*_['a.Nat, '_+_['b.Nat, 'c.Nat]], '_+_['Y:Nat, 'Z:Nat] := 'X:Nat, 1, 2, 2) . red metaXmatch(['SEARCH-TEST], 'X:Nat, '_*_['a.Nat, '_+_['b.Nat, 'c.Nat]], '_+_['Y:Nat, 'Z:Nat] := 'X:Nat, 1, unbounded, 0) . red metaXmatch(['SEARCH-TEST], 'X:Nat, '_*_['a.Nat, '_+_['b.Nat, 'c.Nat]], '_+_['Y:Nat, 'Z:Nat] := 'X:Nat, 1, unbounded, 1) . red metaXmatch(['SEARCH-TEST], 'X:Nat, '_*_['a.Nat, '_+_['b.Nat, 'c.Nat]], '_+_['Y:Nat, 'Z:Nat] := 'X:Nat, 1, unbounded, 2) . red in META-LEVEL : metaXmatch( fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] . none none endfm, 'g['f['X:Foo, 'Y:Foo], 'Z:Foo], 'g['f['a.Foo, 'b.Foo], 'f['c.Foo, 'c.Foo]], nil, 0, 100, 0) . red in META-LEVEL : metaXmatch( fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] . none none endfm, 'g['f['X:Foo, 'Y:Foo], 'Z:Foo], 'g['f['a.Foo, 'b.Foo], 'f['c.Foo, 'c.Foo]], nil, 0, unbounded, 0) . red in META-LEVEL : metaXmatch( fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] . none none endfm, 'g['f['X:Foo, 'Y:Foo], 'Z:Foo], 'g['f['a.Foo, 'b.Foo], 'f['c.Foo, 'c.Foo]], nil, 0, unbounded, 1) . red in META-LEVEL : metaXmatch( fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] . none none endfm, 'g['f['X:Foo, 'Y:Foo], 'Z:Foo], 'g['f['a.Foo, 'b.Foo], 'f['c.Foo, 'c.Foo]], nil, 0, unbounded, 2) . red in META-LEVEL : metaXmatch( fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] . none none endfm, 'g['f['X:Foo, 'Y:Foo], 'Z:Foo], 'g['f['a.Foo, 'b.Foo], 'f['c.Foo, 'c.Foo]], nil, 0, unbounded, 3) . red in META-LEVEL : metaXmatch( fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] . none none endfm, 'f['X:Foo, 'Y:Foo], 'g['f['a.Foo, 'b.Foo], 'f['c.Foo, 'c.Foo]], nil, 0, 100, 0) . red in META-LEVEL : metaXmatch( fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] . none none endfm, 'f['X:Foo, 'Y:Foo], 'g['f['a.Foo, 'b.Foo], 'f['c.Foo, 'c.Foo]], nil, 0, 100, 1) . red in META-LEVEL : metaXmatch( fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] . none none endfm, 'f['X:Foo, 'Y:Foo], 'g['f['a.Foo, 'b.Foo], 'f['c.Foo, 'c.Foo]], nil, 0, 100, 2) . red in META-LEVEL : metaXmatch( fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] . none none endfm, 'f['X:Foo, 'Y:Foo], 'g['f['a.Foo, 'b.Foo], 'f['c.Foo, 'c.Foo]], nil, 0, 100, 3) . red in META-LEVEL : metaXmatch( fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . none none endfm, 'f['X:Foo, 'Y:Foo], 'f['a.Foo, 'b.Foo, 'c.Foo, 'c.Foo], nil, 0, 100, 0) . red in META-LEVEL : metaXmatch( fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . none none endfm, 'f['X:Foo, 'Y:Foo], 'f['a.Foo, 'b.Foo, 'c.Foo, 'c.Foo], nil, 0, 100, 1) . red in META-LEVEL : metaXmatch( fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . none none endfm, 'f['X:Foo, 'Y:Foo], 'f['a.Foo, 'b.Foo, 'c.Foo, 'c.Foo], nil, 0, 100, 2) . red in META-LEVEL : metaXmatch( fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . none none endfm, 'f['X:Foo, 'Y:Foo], 'f['a.Foo, 'b.Foo, 'c.Foo, 'c.Foo], nil, 0, 100, 3) . red in META-LEVEL : metaXmatch( fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . none none endfm, 'f['X:Foo, 'Y:Foo], 'f['a.Foo, 'b.Foo, 'c.Foo, 'c.Foo], nil, 0, 100, 4) . red in META-LEVEL : metaXmatch( fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . none none endfm, 'f['X:Foo, 'Y:Foo], 'f['a.Foo, 'b.Foo, 'c.Foo, 'c.Foo], nil, 0, 100, 5) . red in META-LEVEL : metaXmatch( fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . none none endfm, 'f['X:Foo, 'Y:Foo], 'f['a.Foo, 'b.Foo, 'c.Foo, 'c.Foo], nil, 0, 100, 4) . red in META-LEVEL : metaXmatch( fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . none none endfm, 'f['X:Foo, 'Y:Foo], 'f['a.Foo, 'b.Foo, 'c.Foo, 'c.Foo], nil, 0, 100, 6) . red in META-LEVEL : metaXmatch( fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . none none endfm, 'f['X:Foo, 'Y:Foo], 'f['a.Foo, 'b.Foo, 'c.Foo, 'c.Foo], nil, 0, 100, 7) . red in META-LEVEL : metaXmatch( fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . none none endfm, 'f['X:Foo, 'Y:Foo], 'f['a.Foo, 'b.Foo, 'c.Foo, 'c.Foo], nil, 0, 100, 10) . red in META-LEVEL : metaXmatch( fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . none none endfm, 'f['X:Foo, 'Y:Foo], 'f['a.Foo, 'b.Foo, 'c.Foo, 'c.Foo], nil, 0, 100, 14) . red in META-LEVEL : metaXmatch( fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . none none endfm, 'f['X:Foo, 'Y:Foo], 'f['a.Foo, 'b.Foo, 'c.Foo, 'c.Foo], nil, 0, 100, 17) . red in META-LEVEL : metaXmatch( fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . none none endfm, 'f['X:Foo, 'Y:Foo], 'f['a.Foo, 'b.Foo, 'c.Foo, 'c.Foo], nil, 0, 100, 20) . red in META-LEVEL : metaXmatch( fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . none none endfm, 'f['X:Foo, 'Y:Foo], 'f['a.Foo, 'b.Foo, 'c.Foo, 'c.Foo], nil, 0, 100, 31) . red in META-LEVEL : metaXmatch( fmod 'FOO is protecting 'BOOL . sorts 'Foo ; 'Bar . subsort 'Bar < 'Foo . op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [assoc comm] . none none endfm, 'f['X:Foo, 'Y:Foo], 'f['a.Foo, 'b.Foo, 'c.Foo, 'c.Foo], nil, 0, 100, 30) . fmod FOO is protecting BOOL . sorts Foo Bar . subsort Bar < Foo . op a : -> Foo . op b : -> Foo . op c : -> Foo . op f : Foo Foo -> Foo [assoc comm] . endfm xmatch f(X:Foo, Y:Foo) <=? f(a, b, c, c) . maude-3.1/tests/Meta/metaIntReplace20000755000175200017520000000037013301151216014323 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaIntReplace2.maude -no-banner -no-advise \ > metaIntReplace2.out 2>&1 diff $srcdir/metaIntReplace2.expected metaIntReplace2.out > /dev/null 2>&1 maude-3.1/tests/Meta/metaPrintAttr.expected0000644000175200017520000000355213140741642015755 00000000000000========================================== reduce in COND : f(a, b) . rewrites: 1 result Foo: g(a, h(b)) ========================================== reduce in META-LEVEL : upModule('COND, false) . rewrites: 1 result FModule: fmod 'COND is including 'BOOL . sorts 'Foo . none op 'a : nil -> 'Foo [none] . op 'b : nil -> 'Foo [none] . op 'c : nil -> 'Foo [none] . op 'd : nil -> 'Foo [none] . op 'e : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [none] . op 'g : 'Foo 'Foo -> 'Foo [none] . op 'h : 'Foo -> 'Foo [none] . none ceq 'f['X:Foo,'Y:Foo] = 'g['X:Foo,'Z:Foo] if 'Z:Foo := 'h['Y:Foo] [print( '"X = " 'X:Foo '", Z = " 'Z:Foo)] . endfm ========================================== reduce in META-LEVEL : metaReduce(fmod 'COND is including 'BOOL . sorts 'Foo . none ((((((op 'g : 'Foo 'Foo -> 'Foo [none] . op 'h : 'Foo -> 'Foo [none] .) op 'f : 'Foo 'Foo -> 'Foo [none] .) op 'e : nil -> 'Foo [none] .) op 'd : nil -> 'Foo [none] .) op 'c : nil -> 'Foo [none] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none ceq 'f['X:Foo,'Y:Foo] = 'g['X:Foo,'Z:Foo] if 'Z:Foo := 'h['Y:Foo] [print( '"X = " 'X:Foo '", Z = " 'Z:Foo)] . endfm, 'f['a.Foo,'b.Foo]) . X = a, Z = h(b) rewrites: 2 result ResultPair: {'g['a.Foo,'h['b.Foo]],'Foo} ========================================== reduce in META-LEVEL : metaReduce(fmod 'COND is including 'BOOL . sorts 'Foo . none ((((((op 'g : 'Foo 'Foo -> 'Foo [none] . op 'h : 'Foo -> 'Foo [none] .) op 'f : 'Foo 'Foo -> 'Foo [none] .) op 'e : nil -> 'Foo [none] .) op 'd : nil -> 'Foo [none] .) op 'c : nil -> 'Foo [none] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none ceq 'f['X:Foo,'Y:Foo] = 'g['X:Foo,'Z:Foo] if 'Z:Foo := 'h['Y:Foo] [print( nil)] . endfm, 'f['a.Foo,'b.Foo]) . rewrites: 2 result ResultPair: {'g['a.Foo,'h['b.Foo]],'Foo} Bye. maude-3.1/tests/Meta/Makefile.in0000644000175200017520000013030113741175703013500 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = tests/Meta ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_have_poll.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/mkinstalldirs \ $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ BUDDY_LIB = @BUDDY_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CVC4_LIB = @CVC4_LIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FLEX = @FLEX@ GCC_LIBS = @GCC_LIBS@ GMP_LIBS = @GMP_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSIGSEGV_LIB = @LIBSIGSEGV_LIB@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TECLA_LIBS = @TECLA_LIBS@ VERSION = @VERSION@ YICES2_LIB = @YICES2_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ TESTS = \ metaApply \ metaUnify \ metaFrewrite \ metaMatch \ metaMeta \ metaModule \ metaParse \ metaPrettyPrint \ metaReduce \ metaRewrite \ metaSearch \ metaSort \ metaSpecial \ metaTerm \ metaUp \ metaWellFormed \ metaXapply \ metaXmatch \ metaUp2 \ metaUpModExp \ metaModExp \ metaPolymorph \ metaUpDown \ metaPrintAttr \ metaMetadata \ metaVariantUnify \ metaVariantUnify2 \ metaVariantMatch \ metaGetVariant \ metaNarrow \ metaIntPrelude \ metaIntReplace \ metaIntReplace2 \ russianDollsFlat \ russianDollsNonFlat \ russianDollsNonFlat2 \ russianDollsNonFlat3 \ metaIntMatch \ metaIntSearch \ metaIntSort \ metaIntUnify \ metaIntVariant \ metaIntVariantUnify \ metaIntVariantUnify2 \ metaIntVariantMatch \ metaIntPrint \ metaIntParse \ metaIntApply \ metaIntNewNarrow \ metaIntNewNarrowSearch \ legacyMetaUnify \ legacyMetaVariantUnify \ legacyMetaGetVariant \ metaIntStrategy \ checkUnifiers MAUDE_FILES = \ metaApply.maude \ metaUnify.maude \ metaFrewrite.maude \ metaMatch.maude \ metaMeta.maude \ metaModule.maude \ metaParse.maude \ metaPrettyPrint.maude \ metaReduce.maude \ metaRewrite.maude \ metaSearch.maude \ metaSort.maude \ metaSpecial.maude \ metaTerm.maude \ metaUp.maude \ metaWellFormed.maude \ metaXapply.maude \ metaXmatch.maude \ metaUp2.maude \ metaUpModExp.maude \ metaModExp.maude \ metaPolymorph.maude \ metaUpDown.maude \ metaPrintAttr.maude \ metaMetadata.maude \ metaVariantUnify.maude \ metaVariantUnify2.maude \ metaVariantMatch.maude \ metaGetVariant.maude \ metaNarrow.maude \ metaIntPrelude.maude \ metaIntReplace.maude \ metaIntReplace2.maude \ russianDollsFlat.maude \ russianDollsNonFlat.maude \ russianDollsNonFlat2.maude \ russianDollsNonFlat3.maude \ metaIntMatch.maude \ metaIntSearch.maude \ metaIntSort.maude \ metaIntUnify.maude \ metaIntVariant.maude \ metaIntVariantUnify.maude \ metaIntVariantUnify2.maude \ metaIntVariantMatch.maude \ metaIntPrint.maude \ metaIntParse.maude \ metaIntApply.maude \ metaIntNewNarrow.maude \ metaIntNewNarrowSearch.maude \ legacyMetaUnify.maude \ legacyMetaVariantUnify.maude \ legacyMetaGetVariant.maude \ metaIntStrategy.maude \ checkUnifiers.maude RESULT_FILES = \ metaApply.expected \ metaUnify.expected \ metaFrewrite.expected \ metaApply.expected \ metaFrewrite.expected \ metaMatch.expected \ metaMeta.expected \ metaModule.expected \ metaParse.expected \ metaPrettyPrint.expected \ metaReduce.expected \ metaRewrite.expected \ metaSearch.expected \ metaSort.expected \ metaSpecial.expected \ metaTerm.expected \ metaUp.expected \ metaWellFormed.expected \ metaXapply.expected \ metaXmatch.expected \ metaUp2.expected \ metaUpModExp.expected \ metaModExp.expected \ metaPolymorph.expected \ metaUpDown.expected \ metaPrintAttr.expected \ metaMetadata.expected \ metaVariantUnify.expected \ metaVariantUnify2.expected \ metaVariantMatch.expected \ metaGetVariant.expected \ metaNarrow.expected \ metaIntPrelude.expected \ metaIntReplace.expected \ metaIntReplace2.expected \ russianDollsFlat.expected \ russianDollsNonFlat.expected \ russianDollsNonFlat2.expected \ russianDollsNonFlat3.expected \ metaIntMatch.expected \ metaIntSearch.expected \ metaIntSort.expected \ metaIntUnify.expected \ metaIntVariant.expected \ metaIntVariantUnify.expected \ metaIntVariantUnify2.expected \ metaIntVariantMatch.expected \ metaIntPrint.expected \ metaIntParse.expected \ metaIntApply.expected \ metaIntNewNarrow.expected \ metaIntNewNarrowSearch.expected \ legacyMetaUnify.expected \ legacyMetaVariantUnify.expected \ legacyMetaGetVariant.expected \ metaIntStrategy.expected \ checkUnifiers.expected EXTRA_DIST = $(TESTS) $(MAUDE_FILES) $(RESULT_FILES) all: all-am .SUFFIXES: .SUFFIXES: .log .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Meta/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/Meta/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? metaApply.log: metaApply @p='metaApply'; \ b='metaApply'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaUnify.log: metaUnify @p='metaUnify'; \ b='metaUnify'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaFrewrite.log: metaFrewrite @p='metaFrewrite'; \ b='metaFrewrite'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaMatch.log: metaMatch @p='metaMatch'; \ b='metaMatch'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaMeta.log: metaMeta @p='metaMeta'; \ b='metaMeta'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaModule.log: metaModule @p='metaModule'; \ b='metaModule'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaParse.log: metaParse @p='metaParse'; \ b='metaParse'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaPrettyPrint.log: metaPrettyPrint @p='metaPrettyPrint'; \ b='metaPrettyPrint'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaReduce.log: metaReduce @p='metaReduce'; \ b='metaReduce'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaRewrite.log: metaRewrite @p='metaRewrite'; \ b='metaRewrite'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaSearch.log: metaSearch @p='metaSearch'; \ b='metaSearch'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaSort.log: metaSort @p='metaSort'; \ b='metaSort'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaSpecial.log: metaSpecial @p='metaSpecial'; \ b='metaSpecial'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaTerm.log: metaTerm @p='metaTerm'; \ b='metaTerm'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaUp.log: metaUp @p='metaUp'; \ b='metaUp'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaWellFormed.log: metaWellFormed @p='metaWellFormed'; \ b='metaWellFormed'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaXapply.log: metaXapply @p='metaXapply'; \ b='metaXapply'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaXmatch.log: metaXmatch @p='metaXmatch'; \ b='metaXmatch'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaUp2.log: metaUp2 @p='metaUp2'; \ b='metaUp2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaUpModExp.log: metaUpModExp @p='metaUpModExp'; \ b='metaUpModExp'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaModExp.log: metaModExp @p='metaModExp'; \ b='metaModExp'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaPolymorph.log: metaPolymorph @p='metaPolymorph'; \ b='metaPolymorph'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaUpDown.log: metaUpDown @p='metaUpDown'; \ b='metaUpDown'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaPrintAttr.log: metaPrintAttr @p='metaPrintAttr'; \ b='metaPrintAttr'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaMetadata.log: metaMetadata @p='metaMetadata'; \ b='metaMetadata'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaVariantUnify.log: metaVariantUnify @p='metaVariantUnify'; \ b='metaVariantUnify'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaVariantUnify2.log: metaVariantUnify2 @p='metaVariantUnify2'; \ b='metaVariantUnify2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaVariantMatch.log: metaVariantMatch @p='metaVariantMatch'; \ b='metaVariantMatch'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaGetVariant.log: metaGetVariant @p='metaGetVariant'; \ b='metaGetVariant'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaNarrow.log: metaNarrow @p='metaNarrow'; \ b='metaNarrow'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaIntPrelude.log: metaIntPrelude @p='metaIntPrelude'; \ b='metaIntPrelude'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaIntReplace.log: metaIntReplace @p='metaIntReplace'; \ b='metaIntReplace'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaIntReplace2.log: metaIntReplace2 @p='metaIntReplace2'; \ b='metaIntReplace2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) russianDollsFlat.log: russianDollsFlat @p='russianDollsFlat'; \ b='russianDollsFlat'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) russianDollsNonFlat.log: russianDollsNonFlat @p='russianDollsNonFlat'; \ b='russianDollsNonFlat'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) russianDollsNonFlat2.log: russianDollsNonFlat2 @p='russianDollsNonFlat2'; \ b='russianDollsNonFlat2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) russianDollsNonFlat3.log: russianDollsNonFlat3 @p='russianDollsNonFlat3'; \ b='russianDollsNonFlat3'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaIntMatch.log: metaIntMatch @p='metaIntMatch'; \ b='metaIntMatch'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaIntSearch.log: metaIntSearch @p='metaIntSearch'; \ b='metaIntSearch'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaIntSort.log: metaIntSort @p='metaIntSort'; \ b='metaIntSort'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaIntUnify.log: metaIntUnify @p='metaIntUnify'; \ b='metaIntUnify'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaIntVariant.log: metaIntVariant @p='metaIntVariant'; \ b='metaIntVariant'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaIntVariantUnify.log: metaIntVariantUnify @p='metaIntVariantUnify'; \ b='metaIntVariantUnify'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaIntVariantUnify2.log: metaIntVariantUnify2 @p='metaIntVariantUnify2'; \ b='metaIntVariantUnify2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaIntVariantMatch.log: metaIntVariantMatch @p='metaIntVariantMatch'; \ b='metaIntVariantMatch'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaIntPrint.log: metaIntPrint @p='metaIntPrint'; \ b='metaIntPrint'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaIntParse.log: metaIntParse @p='metaIntParse'; \ b='metaIntParse'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaIntApply.log: metaIntApply @p='metaIntApply'; \ b='metaIntApply'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaIntNewNarrow.log: metaIntNewNarrow @p='metaIntNewNarrow'; \ b='metaIntNewNarrow'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaIntNewNarrowSearch.log: metaIntNewNarrowSearch @p='metaIntNewNarrowSearch'; \ b='metaIntNewNarrowSearch'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) legacyMetaUnify.log: legacyMetaUnify @p='legacyMetaUnify'; \ b='legacyMetaUnify'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) legacyMetaVariantUnify.log: legacyMetaVariantUnify @p='legacyMetaVariantUnify'; \ b='legacyMetaVariantUnify'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) legacyMetaGetVariant.log: legacyMetaGetVariant @p='legacyMetaGetVariant'; \ b='legacyMetaGetVariant'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) metaIntStrategy.log: metaIntStrategy @p='metaIntStrategy'; \ b='metaIntStrategy'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) checkUnifiers.log: checkUnifiers @p='checkUnifiers'; \ b='checkUnifiers'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: all all-am check check-TESTS check-am clean clean-generic \ cscopelist-am ctags-am distclean distclean-generic distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am recheck tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: maude-3.1/tests/Meta/metaModule.maude0000644000175200017520000000150710025725306014541 00000000000000set show timing off . set show advisories off . select META-MODULE . red (subsort 'Foo < 'Bar .) . red (op 'f : 'Foo -> 'Bar [none] .) . red (ceq 'f['X:Foo] = 'a.Bar if 'g['a.Foo,'Y:Foo] := 'X:Foo [none] .) . red 'g['a.Foo,'Y:Foo] := 'X:Foo . red (fmod 'FOO is including 'MACHINE-INT . sorts 'Foo ; 'Bar . subsort 'Foo < 'Bar . op 'f : 'Foo -> 'Bar [none] . op 'g : '`[Bar`] -> '`[Bar`] [none] . cmb 'X:Bar : 'Foo if 'f['Y:Bar] := 'f['X:Bar] /\ 'g['Y:Bar, 'a.Foo] = 'a.Foo [none] . eq 'f['X:Foo] = 'g['a.Foo,'X:Foo] [none] . ceq 'f['X:Foo] = 'a.Bar if 'g['a.Foo,'Y:Foo] := 'X:Foo [none] . endfm) . red (fmod 'FOO is including 'MACHINE-INT . sorts 'Foo ; 'Bar . subsort 'Foo < 'Bar . op 'f : 'Foo -> 'Bar[none]. op 'g : '`[Bar`] -> '`[Bar`][none]. none eq 'f['X:Foo] = 'g['a.Foo,'X:Foo] [none] . endfm). maude-3.1/tests/Meta/metaMatch.expected0000644000175200017520000001165413140741636015067 00000000000000========================================== reduce in META-LEVEL : metaMatch(['SEARCH-TEST], 'X:Nat, '_*_['a.Nat,'_+_[ 'b.Nat,'c.Nat]], '_*_['Y:Nat,'Z:Nat] := 'X:Nat, 0) . rewrites: 2 result Substitution: 'X:Nat <- '_*_['a.Nat,'_+_['b.Nat,'c.Nat]] ; 'Y:Nat <- '_+_['b.Nat,'c.Nat] ; 'Z:Nat <- 'a.Nat ========================================== reduce in META-LEVEL : metaMatch(['SEARCH-TEST], 'X:Nat, '_*_['a.Nat,'_+_[ 'b.Nat,'c.Nat]], '_*_['Y:Nat,'Z:Nat] := 'X:Nat, 1) . rewrites: 2 result Substitution: 'X:Nat <- '_*_['a.Nat,'_+_['b.Nat,'c.Nat]] ; 'Y:Nat <- 'a.Nat ; 'Z:Nat <- '_+_['b.Nat,'c.Nat] ========================================== reduce in META-LEVEL : metaMatch(['SEARCH-TEST], 'X:Nat, '_*_['a.Nat,'_+_[ 'b.Nat,'c.Nat]], '_*_['Y:Nat,'Z:Nat] := 'X:Nat, 2) . rewrites: 2 result Substitution?: (noMatch).Substitution? ========================================== reduce in META-LEVEL : metaMatch(['SEARCH-TEST], 'X:Nat, '_*_['a.Nat,'_+_[ 'b.Nat,'c.Nat]], '_*_['Y:Nat,'Z:Nat] := 'X:Nat /\ 'Y:Nat = 'a.Nat, 0) . rewrites: 2 result Substitution: 'X:Nat <- '_*_['a.Nat,'_+_['b.Nat,'c.Nat]] ; 'Y:Nat <- 'a.Nat ; 'Z:Nat <- '_+_['b.Nat,'c.Nat] ========================================== reduce in META-LEVEL : metaMatch(['SEARCH-TEST], 'X:Nat, '_*_['a.Nat,'_+_[ 'b.Nat,'c.Nat]], '_*_['Y:Nat,'Z:Nat] := 'X:Nat /\ 'Y:Nat = 'a.Nat, 1) . rewrites: 2 result Substitution?: (noMatch).Substitution? ========================================== reduce in META-LEVEL : metaMatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (op 'b : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [comm] .) op 'a : nil -> 'Foo [none] . none none endfm, 'f['Y:Foo,'Y:Foo], 'f['b.Foo,'b.Foo], nil, 0) . rewrites: 1 result Assignment: 'Y:Foo <- 'b.Foo ========================================== reduce in META-LEVEL : metaMatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (op 'b : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [comm] .) op 'a : nil -> 'Foo [none] . none none endfm, 'f['Y:Foo,'Y:Foo], 'f['b.Foo,'b.Foo], nil, 1) . rewrites: 1 result Substitution?: (noMatch).Substitution? ========================================== reduce in META-LEVEL : metaMatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (op 'b : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [comm] .) op 'a : nil -> 'Foo [none] . none none endfm, 'f['X:Foo,'Y:Foo], 'f['a.Foo,'b.Foo], nil, 0) . rewrites: 1 result Substitution: 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'b.Foo ========================================== reduce in META-LEVEL : metaMatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (op 'b : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [comm] .) op 'a : nil -> 'Foo [none] . none none endfm, 'f['X:Foo,'Y:Foo], 'f['a.Foo,'b.Foo], nil, 1) . rewrites: 1 result Substitution: 'X:Foo <- 'b.Foo ; 'Y:Foo <- 'a.Foo ========================================== reduce in META-LEVEL : metaMatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (op 'b : nil -> 'Foo [none] . op 'f : 'Foo 'Foo -> 'Foo [comm] .) op 'a : nil -> 'Foo [none] . none none endfm, 'f['X:Foo,'Y:Foo], 'f['a.Foo,'b.Foo], nil, 2) . rewrites: 1 result Substitution?: (noMatch).Substitution? ========================================== reduce in META-LEVEL : metaMatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (((op 'f : 'Foo 'Foo -> 'Foo [comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'c : nil -> 'Foo [none] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none endfm, 'g['f['X:Foo,'Y:Foo],'Z:Foo], 'g['f['a.Foo,'b.Foo],'f['c.Foo,'c.Foo]], nil, 0) . rewrites: 1 result Substitution: 'X:Foo <- 'a.Foo ; 'Y:Foo <- 'b.Foo ; 'Z:Foo <- 'f['c.Foo,'c.Foo] ========================================== reduce in META-LEVEL : metaMatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (((op 'f : 'Foo 'Foo -> 'Foo [comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'c : nil -> 'Foo [none] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none endfm, 'g['f['X:Foo,'Y:Foo],'Z:Foo], 'g['f['a.Foo,'b.Foo],'f['c.Foo,'c.Foo]], nil, 2) . rewrites: 1 result Substitution: 'X:Foo <- 'c.Foo ; 'Y:Foo <- 'c.Foo ; 'Z:Foo <- 'f['a.Foo,'b.Foo] ========================================== reduce in META-LEVEL : metaMatch(fmod 'FOO is protecting 'BOOL . sorts 'Bar ; 'Foo . subsort 'Bar < 'Foo . (((op 'f : 'Foo 'Foo -> 'Foo [comm] . op 'g : 'Foo 'Foo -> 'Foo [assoc comm] .) op 'c : nil -> 'Foo [none] .) op 'b : nil -> 'Foo [none] .) op 'a : nil -> 'Foo [none] . none none endfm, 'g['f['X:Foo,'Y:Foo],'Z:Foo], 'g['f['a.Foo,'b.Foo],'f['c.Foo,'c.Foo]], nil, 1) . rewrites: 1 result Substitution: 'X:Foo <- 'b.Foo ; 'Y:Foo <- 'a.Foo ; 'Z:Foo <- 'f['c.Foo,'c.Foo] Bye. maude-3.1/tests/Meta/metaIntApply.maude0000644000175200017520000000517613372446253015073 00000000000000set show timing off . set show advisories off . *** *** Test applyRule() in the meta-interpreter without and with extension. *** load metaInterpreter mod APPLY is sorts Foo . ops a b : -> Foo . op f : Foo Foo -> Foo [comm] . rl f(X:Foo, Y:Foo) => X:Foo [label k] . endm mod APPLY-TEST is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op soln:_ : Nat -> Attribute . op got:_ : Msg -> Attribute . op subst:_ : Substitution -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . vars N M : Nat . vars IS S : Substitution . var T : Term . var TY : Type . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('APPLY, true)) . rl < X : User | AS, subst: IS > insertedModule(X, Y) => < X : User | AS, soln: 1, subst: IS > applyRule(Y, X, 'APPLY, 'f['a.Foo, 'b.Foo], 'k, IS, 0) . rl < X : User | AS, soln: N, subst: IS > appliedRule(X, Y, M, T, TY, S) => < X : User | AS, soln: (N + 1), subst: IS, got: appliedRule(X, Y, M, T, TY, S) > applyRule(Y, X, 'APPLY, 'f['a.Foo, 'b.Foo], 'k, IS, N) . endm set show breakdown on . erew in APPLY-TEST : <> < me : User | subst: none > createInterpreter(interpreterManager, me, none) . erew in APPLY-TEST : <> < me : User | subst: ('Y:Foo <- 'b.Foo) > createInterpreter(interpreterManager, me, none) . mod APPLY2 is sorts Foo . ops a b c : -> Foo . op f : Foo Foo -> Foo [assoc comm] . op g : Foo -> Foo . rl f(X:Foo, Y:Foo) => X:Foo [label k] . endm mod APPLY-TEST2 is pr META-INTERPRETER . op me : -> Oid . op User : -> Cid . op soln:_ : Nat -> Attribute . op got:_ : Msg -> Attribute . op subst:_ : Substitution -> Attribute . vars X Y Z : Oid . var AS : AttributeSet . vars N M : Nat . vars IS S : Substitution . var T : Term . var TY : Type . var C : Context . rl < X : User | AS > createdInterpreter(X, Y, Z) => < X : User | AS > insertModule(Z, X, upModule('APPLY2, true)) . rl < X : User | AS, subst: IS > insertedModule(X, Y) => < X : User | AS, soln: 1, subst: IS > applyRule(Y, X, 'APPLY2, 'g['g['f['a.Foo, 'b.Foo, 'c.Foo]]], 'k, IS, 0, unbounded, 0) . rl < X : User | AS, soln: N, subst: IS > appliedRule(X, Y, M, T, TY, S, C) => < X : User | AS, soln: (N + 1), subst: IS, got: appliedRule(X, Y, M, T, TY, S, C) > applyRule(Y, X, 'APPLY2, 'g['g['f['a.Foo, 'b.Foo, 'c.Foo]]], 'k, IS, 0, unbounded, N) . endm erew in APPLY-TEST2 : <> < me : User | subst: none > createInterpreter(interpreterManager, me, none) . erew in APPLY-TEST2 : <> < me : User | subst: ('X:Foo <- 'a.Foo) > createInterpreter(interpreterManager, me, none) . maude-3.1/tests/Meta/russianDollsNonFlat3.expected0000644000175200017520000001640213522536500017203 00000000000000========================================== erewrite in RUSSIAN-DOLLS : <> < me : User | pending: predef,level: 0 > createInterpreter(interpreterManager, me, none) . rewrites: 84 result Configuration: <> < me : User | pending: nil,level: 0 > erewroteTerm(me, interpreter(0), 1, '`{`}.Set`{String`}, 'Set`{String`}) ========================================== erewrite in RUSSIAN-DOLLS : <> < me : User | pending: predef,level: 1 > createInterpreter(interpreterManager, me, none) . rewrites: 160 result Configuration: <> < me : User | pending: nil,level: 1 > erewroteTerm(me, interpreter(0), 83, '__['<>.Portal,'<_:_|_>['me.Oid,'User.Cid,'_`,_[ 'level:_['0.Zero],'pending:_['nil.Seq]]],'erewroteTerm['me.Oid, 'interpreter['0.Zero],'s_['0.Zero],''`{`}.Set`{String`}.Constant, ''Set`{String`}.Sort]], 'Configuration) ========================================== erewrite in RUSSIAN-DOLLS : <> < me : User | pending: predef,level: 2 > createInterpreter(interpreterManager, me, none) . rewrites: 236 result Configuration: <> < me : User | pending: nil,level: 2 > erewroteTerm(me, interpreter(0), 159, '__['<>.Portal,'<_:_|_>['me.Oid,'User.Cid,'_`,_[ 'level:_['s_['0.Zero]],'pending:_['nil.Seq]]],'erewroteTerm['me.Oid, 'interpreter['0.Zero],'s_^83['0.Zero],'_`[_`][''__.Sort,'_`,_[ ''<>.Portal.Constant,'_`[_`][''<_:_|_>.Variable,'_`,_[''me.Oid.Constant, ''User.Cid.Constant,'_`[_`][''_`,_.Qid,'_`,_['_`[_`][''level:_.Variable, ''0.Zero.Constant],'_`[_`][''pending:_.Variable,''nil.Seq.Constant]]]]], '_`[_`][''erewroteTerm.Sort,'_`,_[''me.Oid.Constant,'_`[_`][ ''interpreter.Sort,''0.Zero.Constant],'_`[_`][''s_.Sort,''0.Zero.Constant], '''`{`}.Set`{String`}.Constant.Constant,'''Set`{String`}.Sort.Constant]]]], ''Configuration.Sort]], 'Configuration) ========================================== erewrite in RUSSIAN-DOLLS : <> < me : User | pending: predef,level: 3 > createInterpreter(interpreterManager, me, none) . rewrites: 312 result Configuration: <> < me : User | pending: nil,level: 3 > erewroteTerm(me, interpreter(0), 235, '__['<>.Portal,'<_:_|_>['me.Oid,'User.Cid,'_`,_[ 'level:_['s_^2['0.Zero]],'pending:_['nil.Seq]]],'erewroteTerm['me.Oid, 'interpreter['0.Zero],'s_^159['0.Zero],'_`[_`][''__.Sort,'_`,_[ ''<>.Portal.Constant,'_`[_`][''<_:_|_>.Variable,'_`,_[''me.Oid.Constant, ''User.Cid.Constant,'_`[_`][''_`,_.Qid,'_`,_['_`[_`][''level:_.Variable, '_`[_`][''s_.Sort,''0.Zero.Constant]],'_`[_`][''pending:_.Variable, ''nil.Seq.Constant]]]]],'_`[_`][''erewroteTerm.Sort,'_`,_[ ''me.Oid.Constant,'_`[_`][''interpreter.Sort,''0.Zero.Constant],'_`[_`][ ''s_^83.Sort,''0.Zero.Constant],'_`[_`][''_`[_`].Qid,'_`,_[ '''__.Sort.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''<>.Portal.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''<_:_|_>.Variable.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''me.Oid.Constant.Constant,'''User.Cid.Constant.Constant,'_`[_`][ ''_`[_`].Qid,'_`,_['''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_['_`[_`][ ''_`[_`].Qid,'_`,_['''level:_.Variable.Constant, '''0.Zero.Constant.Constant]],'_`[_`][''_`[_`].Qid,'_`,_[ '''pending:_.Variable.Constant,'''nil.Seq.Constant.Constant]]]]]]]]]], '_`[_`][''_`[_`].Qid,'_`,_['''erewroteTerm.Sort.Constant,'_`[_`][ ''_`,_.Qid,'_`,_['''me.Oid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''interpreter.Sort.Constant,'''0.Zero.Constant.Constant]],'_`[_`][ ''_`[_`].Qid,'_`,_['''s_.Sort.Constant,'''0.Zero.Constant.Constant]], ''''`{`}.Set`{String`}.Constant.Constant.Constant, ''''Set`{String`}.Sort.Constant.Constant]]]]]]]], '''Configuration.Sort.Constant]]]],''Configuration.Sort]], 'Configuration) ========================================== erewrite in RUSSIAN-DOLLS : <> < me : User | pending: predef,level: 4 > createInterpreter(interpreterManager, me, none) . rewrites: 388 result Configuration: <> < me : User | pending: nil,level: 4 > erewroteTerm(me, interpreter(0), 311, '__['<>.Portal,'<_:_|_>['me.Oid,'User.Cid,'_`,_[ 'level:_['s_^3['0.Zero]],'pending:_['nil.Seq]]],'erewroteTerm['me.Oid, 'interpreter['0.Zero],'s_^235['0.Zero],'_`[_`][''__.Sort,'_`,_[ ''<>.Portal.Constant,'_`[_`][''<_:_|_>.Variable,'_`,_[''me.Oid.Constant, ''User.Cid.Constant,'_`[_`][''_`,_.Qid,'_`,_['_`[_`][''level:_.Variable, '_`[_`][''s_^2.Sort,''0.Zero.Constant]],'_`[_`][''pending:_.Variable, ''nil.Seq.Constant]]]]],'_`[_`][''erewroteTerm.Sort,'_`,_[ ''me.Oid.Constant,'_`[_`][''interpreter.Sort,''0.Zero.Constant],'_`[_`][ ''s_^159.Sort,''0.Zero.Constant],'_`[_`][''_`[_`].Qid,'_`,_[ '''__.Sort.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''<>.Portal.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''<_:_|_>.Variable.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''me.Oid.Constant.Constant,'''User.Cid.Constant.Constant,'_`[_`][ ''_`[_`].Qid,'_`,_['''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_['_`[_`][ ''_`[_`].Qid,'_`,_['''level:_.Variable.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''s_.Sort.Constant,'''0.Zero.Constant.Constant]]]],'_`[_`][''_`[_`].Qid, '_`,_['''pending:_.Variable.Constant, '''nil.Seq.Constant.Constant]]]]]]]]]],'_`[_`][''_`[_`].Qid,'_`,_[ '''erewroteTerm.Sort.Constant,'_`[_`][''_`,_.Qid,'_`,_[ '''me.Oid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''interpreter.Sort.Constant,'''0.Zero.Constant.Constant]],'_`[_`][ ''_`[_`].Qid,'_`,_['''s_^83.Sort.Constant,'''0.Zero.Constant.Constant]], '_`[_`][''_`[_`].Qid,'_`,_['''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''__.Sort.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''<>.Portal.Constant.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''<_:_|_>.Variable.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''me.Oid.Constant.Constant.Constant, ''''User.Cid.Constant.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''_`,_.Qid.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_['_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''level:_.Variable.Constant.Constant, ''''0.Zero.Constant.Constant.Constant]]]],'_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''pending:_.Variable.Constant.Constant, ''''nil.Seq.Constant.Constant.Constant]]]]]]]]]]]]]]]]]]]],'_`[_`][ ''_`[_`].Qid,'_`,_['''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''erewroteTerm.Sort.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`,_.Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''me.Oid.Constant.Constant.Constant,'_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''interpreter.Sort.Constant.Constant, ''''0.Zero.Constant.Constant.Constant]]]],'_`[_`][''_`[_`].Qid,'_`,_[ '''_`[_`].Qid.Constant,'_`[_`][''_`,_.Qid,'_`,_[ ''''s_.Sort.Constant.Constant,''''0.Zero.Constant.Constant.Constant]]]], '''''`{`}.Set`{String`}.Constant.Constant.Constant.Constant, '''''Set`{String`}.Sort.Constant.Constant.Constant]]]]]]]]]]]]]]]], ''''Configuration.Sort.Constant.Constant]]]]]]]], '''Configuration.Sort.Constant]]]],''Configuration.Sort]], 'Configuration) Bye. maude-3.1/tests/Meta/metaIntSearch0000755000175200017520000000036013332707135014105 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/metaIntSearch.maude -no-banner -no-advise \ > metaIntSearch.out 2>&1 diff $srcdir/metaIntSearch.expected metaIntSearch.out > /dev/null 2>&1 maude-3.1/tests/Misc/0000755000175200017520000000000013741222371011514 500000000000000maude-3.1/tests/Misc/mapToParameterTheory0000755000175200017520000000041413472130213015467 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/mapToParameterTheory.maude -no-banner -no-advise \ > mapToParameterTheory.out 2>&1 diff $srcdir/mapToParameterTheory.expected mapToParameterTheory.out > /dev/null 2>&1 maude-3.1/tests/Misc/sreduce.maude0000644000175200017520000001032112234062520014072 00000000000000set show timing off . set show advisories off . set include BOOL off . fmod MODULAR is sorts Nat NzNat . subsort NzNat < Nat . var X Y Z : Nat . op 0 : -> Nat . op s_ : Nat -> NzNat . op _+_ : Nat NzNat -> Nat . op _+_ : Nat Nat -> Nat . eq 0 + X = X . eq s Y + X = s (Y + X) . op _*_ : NzNat NzNat -> NzNat . op _*_ : Nat Nat -> Nat . eq 0 * X = 0 . eq s Y * X = X + (Y * X) . op _^_ : Nat Nat -> Nat . op _^_ : NzNat Nat -> NzNat . eq X ^ 0 = s 0 . eq X ^ s Y = X * (X ^ Y) . op c : Nat Nat -> Nat . eq c(0, Y) = 0 . eq c(X, 0) = X . eq c(s X, s Y) = c(X, Y) . op _mod_ : Nat NzNat -> Nat . eq X mod Y = i(X, Y, Y) . op i : Nat Nat NzNat -> Nat . eq i(0, 0, Z) = 0 . eq i(0, s Y, Z) = c(Z, s Y) . eq i(s X, 0, Z) = i(s X, Z, Z) . eq i(s X, s Y, Z) = i(X, Y, Z) . op modExp : Nat Nat NzNat ~> Nat . eq modExp(X, 0, Z) = s 0 . eq modExp(X, s Y, Z) = (X * modExp(X, Y, Z)) mod Z . endfm sred modExp(s s s s 0, s s 0 ^ ((s s 0 ^ s s s s 0) + s s s s 0), s s s s s 0) . fmod NAT' is sorts Nat NzNat . subsort NzNat < Nat . var X Y : Nat . op 0 : -> Nat . op s_ : Nat -> NzNat . op _+_ : Nat NzNat -> Nat . op _+_ : Nat Nat -> Nat . eq 0 + X = X . eq s Y + X = s (X + Y) . op _*_ : NzNat NzNat -> NzNat . op _*_ : Nat Nat -> Nat . eq 0 * X = 0 . eq s Y * X = X + (Y * X) . endfm fmod LIST-BENCH is pr NAT' . sorts Elt List . op dirtyElt : ~> Elt . op dirtyList : ~> List . op nil : -> List . op __ : Elt List -> List . ops a b c d e : -> Elt . vars E E' : Elt . vars L L' : List . var N : Nat . *** to make big lists by doubling op cat : List List -> List . eq cat(E L, L') = E cat(L, L') . eq cat(nil, L') = L' . op dup : List Nat -> List . eq dup(L, 0) = L . eq dup(L, s N) = cat(dup(L, N), dup(L, N)) . op head : List -> Elt . eq head(E L) = E . *** efficient reverse op rev : List List -> List . eq rev(E L, L') = rev(L, E L') . eq rev(nil, L) = L . op rev : List -> List . eq rev(L) = rev(L, nil) . op multi : List Nat -> List . eq multi(L, 0) = L . eq multi(L, s N) = rev(multi(L, N)) . endfm sred head(multi(dup(a b c d e nil, s s s s 0 * s s s s 0), s s s s s s s s s 0 * s s s s s s s s s 0)) . fmod BIT is sorts Bool Bit List . ops true false : -> Bool . ops 0 1 : -> Bit . op nil : -> List . op __ : Bit List -> List . var L : List . op isZero : List -> Bool . eq isZero(nil) = true . eq isZero(0 L) = isZero(L) . eq isZero(1 L) = false . op dec : List -> List . eq dec(nil) = nil . eq dec(0 L) = 1 dec(L) . eq dec(1 L) = 0 L . op count : List -> List . eq count(L) = count'(isZero(L), L) . op count' : Bool List -> List . eq count'(false, L) = count(dec(L)) . eq count'(true, L) = L . endfm sred count(1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 nil) . ***( sred count(1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 nil) . ) fmod BINARY is sorts Bool Bit Num . ops true false : -> Bool . ops 0 1 : -> Bit . op nil : -> Num . op __ : Bit Num -> Num . var X Y : Num . var B : Bit . op add : Num Num -> Num . eq add(nil, X) = X . eq add(X, nil) = X . eq add(0 X, B Y) = B add(X, Y) . eq add(B X, 0 Y) = B add(X, Y) . eq add(1 X, 1 Y) = 0 c(X, Y) . op c : Num Num -> Num . eq c(nil, X) = add(1 nil, X) . eq c(X, nil) = add(1 nil, X) . eq c(1 X, B Y) = B c(X, Y) . eq c(B X, 1 Y) = B c(X, Y) . eq c(0 X, 0 Y) = 1 add(X, Y) . op mult : Num Num -> Num . eq mult(nil, X) = 0 nil . eq mult(X, nil) = 0 nil . eq mult(0 X, Y) = 0 mult(X, Y) . eq mult(1 X, Y) = add(Y, 0 mult(X, Y)) . op dec : Num -> Num . eq dec(nil) = nil . eq dec(0 X) = 1 dec(X) . eq dec(1 X) = 0 X . op isZero : Num -> Bool . eq isZero(nil) = true . eq isZero(0 X) = isZero(X) . eq isZero(1 X) = false . op fact : Num -> Num . eq fact(X) = fact'(isZero(X), X) . op fact' : Bool Num -> Num . eq fact'(true, X) = 1 nil . eq fact'(false, X) = mult(X, fact(dec(X))) . op count : Num -> Num . eq count(nil) = 0 nil . eq count(0 X) = count(X) . eq count(1 X) = add(1 nil, count(X)) . endfm sred count(fact(1 1 1 1 1 1 1 1 1 1 nil)) . ***( *** count 1's in binary representation of 4095! sred count(fact(1 1 1 1 1 1 1 1 1 1 1 1 nil)) . ) maude-3.1/tests/Misc/variantMatching.expected0000644000175200017520000001205113724605744016307 00000000000000========================================== variant unify in FOO : f(X, g(Y, Z)) =? f(x, g(y, z)) . Unifier 1 rewrites: 1 X --> x Y --> y Z --> z No more unifiers. rewrites: 1 ========================================== variant match in FOO : f(X, g(Y, Z)) <=? f(X, g(Y, Z)) . rewrites: 1 Matcher 1 X --> X Y --> Y Z --> Z No more matchers. ========================================== variant unify in FOO : g(f(X, Y), Z) =? g(a, g(a, b)) . Unifier 1 rewrites: 2 X --> a Y --> 1f Z --> g(a, b) Unifier 2 rewrites: 2 X --> 1f Y --> a Z --> g(a, b) No more unifiers. rewrites: 2 ========================================== variant match in FOO : g(f(X, Y), Z) <=? g(a, g(A, B)) . rewrites: 2 Matcher 1 X --> a Y --> 1f Z --> g(A, B) Matcher 2 X --> 1f Y --> a Z --> g(A, B) No more matchers. ========================================== variant unify in FOO : f(1f, g(Y, Z)) =? g(y, z) . Unifier 1 rewrites: 1 Y --> y Z --> z No more unifiers. rewrites: 1 ========================================== variant match in FOO : f(1f, g(Y, Z)) <=? g(Y, Z) . rewrites: 1 Matcher 1 Y --> Y Z --> Z No more matchers. ========================================== variant unify in FOO : g(f(X, Y), Z) =? g(a, f(b, c)) . Unifier 1 rewrites: 2 X --> a Y --> 1f Z --> f(b, c) Unifier 2 rewrites: 2 X --> 1f Y --> a Z --> f(b, c) No more unifiers. rewrites: 2 ========================================== variant match in FOO : g(f(X, Y), Z) <=? g(A, f(B, C)) . rewrites: 2 Matcher 1 X --> A Y --> 1f Z --> f(B, C) Matcher 2 X --> 1f Y --> A Z --> f(B, C) No more matchers. ========================================== variant unify in LEFT-ID : X:Magma a =? y a a . Unifier 1 rewrites: 1 X:Magma --> y a No more unifiers. rewrites: 1 ========================================== variant match in LEFT-ID : X:Magma a <=? Y:Magma a a . rewrites: 1 Matcher 1 X:Magma --> Y:Magma a No more matchers. ========================================== variant unify in LEFT-ID : a X:Magma =? a a y . No unifiers. rewrites: 0 ========================================== variant match in LEFT-ID : a X:Magma <=? a a Y:Magma . rewrites: 0 No matchers. ========================================== variant unify in RIGHT-ID : X:Magma a =? y a a . No unifiers. rewrites: 0 ========================================== variant match in RIGHT-ID : X:Magma a <=? Y:Magma a a . rewrites: 0 No matchers. ========================================== variant unify in RIGHT-ID : a X:Magma =? a a y . Unifier 1 rewrites: 1 X:Magma --> a y No more unifiers. rewrites: 1 ========================================== variant match in RIGHT-ID : a X:Magma <=? a a Y:Magma . rewrites: 1 Matcher 1 X:Magma --> a Y:Magma No more matchers. ========================================== variant unify in XOR : X + Y =? c . Unifier 1 rewrites: 10 X --> 0 Y --> c Unifier 2 rewrites: 10 X --> c Y --> 0 Unifier 3 rewrites: 10 X --> c + #1:XOR Y --> #1:XOR Unifier 4 rewrites: 10 X --> #1:XOR Y --> c + #1:XOR No more unifiers. rewrites: 10 ========================================== variant match in XOR : X + Y <=? c . rewrites: 10 Matcher 1 X --> 0 Y --> c Matcher 2 X --> c Y --> 0 Matcher 3 X --> c + #1:XOR Y --> #1:XOR Matcher 4 X --> #1:XOR Y --> c + #1:XOR No more matchers. ========================================== variant unify in XOR : X + Y =? c + d . Unifier 1 rewrites: 6 X --> c Y --> d Unifier 2 rewrites: 6 X --> d Y --> c Unifier 3 rewrites: 10 X --> 0 Y --> c + d Unifier 4 rewrites: 10 X --> c + d Y --> 0 Unifier 5 rewrites: 10 X --> c + #1:XOR Y --> d + #1:XOR Unifier 6 rewrites: 10 X --> d + #1:XOR Y --> c + #1:XOR Unifier 7 rewrites: 10 X --> c + d + #1:XOR Y --> #1:XOR Unifier 8 rewrites: 10 X --> #1:XOR Y --> c + d + #1:XOR No more unifiers. rewrites: 10 ========================================== variant match in XOR : X + Y <=? c + d . rewrites: 10 Matcher 1 X --> c Y --> d Matcher 2 X --> d Y --> c Matcher 3 X --> 0 Y --> c + d Matcher 4 X --> c + d Y --> 0 Matcher 5 X --> c + #1:XOR Y --> d + #1:XOR Matcher 6 X --> d + #1:XOR Y --> c + #1:XOR Matcher 7 X --> c + d + #1:XOR Y --> #1:XOR Matcher 8 X --> #1:XOR Y --> c + d + #1:XOR No more matchers. ========================================== variant match in XOR : X + Y <=? #1:Elem + d . rewrites: 10 Matcher 1 X --> d Y --> #1:Elem Matcher 2 X --> #1:Elem Y --> d Matcher 3 X --> 0 Y --> d + #1:Elem Matcher 4 X --> d + #1:Elem Y --> 0 Matcher 5 X --> d + #2:XOR Y --> #2:XOR + #1:Elem Matcher 6 X --> #2:XOR + #1:Elem Y --> d + #2:XOR Matcher 7 X --> d + #2:XOR + #1:Elem Y --> #2:XOR Matcher 8 X --> #2:XOR Y --> d + #2:XOR + #1:Elem No more matchers. ========================================== variant match in XOR : X + Y <=? #1:Elem + #2:Elem . rewrites: 10 Matcher 1 X --> #1:Elem Y --> #2:Elem Matcher 2 X --> #2:Elem Y --> #1:Elem Matcher 3 X --> 0 Y --> #1:Elem + #2:Elem Matcher 4 X --> #1:Elem + #2:Elem Y --> 0 Matcher 5 X --> #3:XOR + #1:Elem Y --> #3:XOR + #2:Elem Matcher 6 X --> #3:XOR + #2:Elem Y --> #3:XOR + #1:Elem Matcher 7 X --> #3:XOR + #1:Elem + #2:Elem Y --> #3:XOR Matcher 8 X --> #3:XOR Y --> #3:XOR + #1:Elem + #2:Elem No more matchers. Bye. maude-3.1/tests/Misc/parse.expected0000644000175200017520000000131413252630462014271 00000000000000Warning: , line 17: ambiguous term, two parses are: A : a_(b_(c`d`e)) -versus- A : a_(b_(c_(d`e))) Arbitrarily taking the first as correct. A: a_(b_(c`d`e)) Warning: , line 31: ambiguous term, two parses are: A : a_(b_(c`d`e)) -versus- A : a_(b_(c_e(d))) Arbitrarily taking the first as correct. A: a_(b_(c`d`e)) Warning: , line 51: ambiguous term, two parses are: A : a_(b_(c_(d`e))) -versus- A : a_(b_(c_(_e(d)))) Arbitrarily taking the first as correct. A: a_(b_(c_(d`e))) Warning: , line 72: ambiguous term, two parses are: A : a_(b_(c_(d_(e)))) -versus- A : a_(b_(c_(_e(d)))) Arbitrarily taking the first as correct. A: a_(b_(c_(d_(e)))) Bye. maude-3.1/tests/Misc/narrow0000755000175200017520000000032413060660467012677 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/narrow.maude -no-banner -no-advise \ > narrow.out 2>&1 diff $srcdir/narrow.expected narrow.out > /dev/null 2>&1 maude-3.1/tests/Misc/unification3.maude0000644000175200017520000000407611444017676015063 00000000000000*** Unification problems where the order sorting interacts with collapse *** 9/14/10 set show timing off . fmod FOO is sorts Small Big . subsort Small < Big . op f : Big Big -> Big [assoc comm id: 1f] . op 1f : -> Small . op h : Small -> Big . endfm *** only collapse version is sortable unify X:Big =? h(f(Y:Big, Z:Big)) . fmod FOO1 is sorts Small Big . subsort Small < Big . op f : Big Big -> Big [assoc comm id: 1f] . op f : Small Small -> Small [ditto] . op 1f : -> Big . endfm *** collapse version is no longer covered unify X:Small =? f(Y:Big, Z:Big) . fmod FOO2 is sorts Small Big . subsort Small < Big . op a : -> Small . op g : Big -> Big . op f : Big Big -> Big [assoc comm id: g(a)] . op f : Small Small -> Small [assoc comm id: g(a)] . op 1f : -> Small . endfm *** only collapse version is sortable unify X:Small =? f(g(Y:Small), Z:Small) . fmod FOO3 is sorts Small Big . subsort Small < Big . op a : -> Big . op g : Big -> Big . op g : Small -> Small . op f : Big Big -> Big [assoc comm id: g(a)] . op f : Small Small -> Small [assoc comm id: g(a)] . op 1f : -> Small . endfm *** collapse version is no longer covered unify X:Small =? f(g(Y:Big), Z:Small) . fmod FOO4 is sorts Small Big . subsort Small < Big . op a : -> Small . op g : Big -> Big [iter] . op f : Big Big -> Big [assoc comm id: g^1000000(a)] . op f : Small Small -> Small [ditto] . op 1f : -> Small . endfm *** only collapse version is sortable unify X:Small =? f(g(Y:Big), Z:Small) . fmod FOO5 is sorts Small Big . subsort Small < Big . op a : -> Big . op g : Big -> Big [iter]. op g : Small -> Small [ditto] . op f : Big Big -> Big [assoc comm id: g^1000000(a)] . op f : Small Small -> Small [ditto] . op 1f : -> Small . endfm *** collapse version is no longer covered unify X:Small =? f(g(Y:Big), Z:Small) . fmod FOO6 is sorts Small Big . subsort Small < Big . op f : Big Big -> Big [assoc comm id: 1f] . op 1f : -> Small . op h : Small -> Big . endfm *** need empty basis selection unify X:Big =? h(f(Y:Big, Y:Big)) . maude-3.1/tests/Misc/AU_Unification0000755000175200017520000000036413677265117014237 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/AU_Unification.maude -no-banner -no-advise \ > AU_Unification.out 2>&1 diff $srcdir/AU_Unification.expected AU_Unification.out > /dev/null 2>&1 maude-3.1/tests/Misc/variantNarrowing.expected0000644000175200017520000027207113703746632016534 00000000000000========================================== get variants in TEST : g(f(u(g(g(X3:Msg, X15:Msg), X16:Msg), u(2, X14:Msg)), u( g(X12:Msg, X3:Msg), g(X8:Msg, g(X10:Msg, X9:Msg)))), f(u(f(X8:Msg, X15:Msg), u(X15:Msg, X9:Msg)), g(f(X2:Msg, X2:Msg), g(3, X6:Msg)))) . Variant 1 rewrites: 0 Msg: g(f(u(2, #4:Msg, g(g(#1:Msg, #2:Msg), #3:Msg)), u(g(#5:Msg, #1:Msg), g( #6:Msg, g(#7:Msg, #8:Msg)))), f(u(#2:Msg, #8:Msg, f(#6:Msg, #2:Msg)), g(f( #9:Msg, #9:Msg), g(3, #10:Msg)))) X3:Msg --> #1:Msg X15:Msg --> #2:Msg X16:Msg --> #3:Msg X14:Msg --> #4:Msg X12:Msg --> #5:Msg X8:Msg --> #6:Msg X10:Msg --> #7:Msg X9:Msg --> #8:Msg X2:Msg --> #9:Msg X6:Msg --> #10:Msg Variant 2 rewrites: 14 Msg: g(f(u(%10:Msg, g(g(%1:Msg, %2:Msg), %3:Msg)), u(g(%4:Msg, %1:Msg), g( %5:Msg, g(%6:Msg, %7:Msg)))), f(u(%2:Msg, %7:Msg, f(%5:Msg, %2:Msg)), g(f( %8:Msg, %8:Msg), g(3, %9:Msg)))) X3:Msg --> %1:Msg X15:Msg --> %2:Msg X16:Msg --> %3:Msg X14:Msg --> u(2, %10:Msg) X12:Msg --> %4:Msg X8:Msg --> %5:Msg X10:Msg --> %6:Msg X9:Msg --> %7:Msg X2:Msg --> %8:Msg X6:Msg --> %9:Msg Variant 3 rewrites: 14 Msg: g(f(g(g(%1:Msg, %2:Msg), %3:Msg), u(g(%4:Msg, %1:Msg), g(%5:Msg, g(%6:Msg, %7:Msg)))), f(u(%2:Msg, %7:Msg, f(%5:Msg, %2:Msg)), g(f(%8:Msg, %8:Msg), g( 3, %9:Msg)))) X3:Msg --> %1:Msg X15:Msg --> %2:Msg X16:Msg --> %3:Msg X14:Msg --> 2 X12:Msg --> %4:Msg X8:Msg --> %5:Msg X10:Msg --> %6:Msg X9:Msg --> %7:Msg X2:Msg --> %8:Msg X6:Msg --> %9:Msg Variant 4 rewrites: 14 Msg: g(f(u(2, %10:Msg), u(g(%4:Msg, %1:Msg), g(%5:Msg, g(%6:Msg, %7:Msg)))), f( u(%2:Msg, %7:Msg, f(%5:Msg, %2:Msg)), g(f(%8:Msg, %8:Msg), g(3, %9:Msg)))) X3:Msg --> %1:Msg X15:Msg --> %2:Msg X16:Msg --> %3:Msg X14:Msg --> u(%10:Msg, g(g(%1:Msg, %2:Msg), %3:Msg)) X12:Msg --> %4:Msg X8:Msg --> %5:Msg X10:Msg --> %6:Msg X9:Msg --> %7:Msg X2:Msg --> %8:Msg X6:Msg --> %9:Msg Variant 5 rewrites: 14 Msg: g(f(2, u(g(%4:Msg, %1:Msg), g(%5:Msg, g(%6:Msg, %7:Msg)))), f(u(%2:Msg, %7:Msg, f(%5:Msg, %2:Msg)), g(f(%8:Msg, %8:Msg), g(3, %9:Msg)))) X3:Msg --> %1:Msg X15:Msg --> %2:Msg X16:Msg --> %3:Msg X14:Msg --> g(g(%1:Msg, %2:Msg), %3:Msg) X12:Msg --> %4:Msg X8:Msg --> %5:Msg X10:Msg --> %6:Msg X9:Msg --> %7:Msg X2:Msg --> %8:Msg X6:Msg --> %9:Msg Variant 6 rewrites: 14 Msg: g(f(u(2, g(g(%1:Msg, %2:Msg), %3:Msg)), u(g(%4:Msg, %1:Msg), g(%5:Msg, g( %6:Msg, %7:Msg)))), f(u(%2:Msg, %7:Msg, f(%5:Msg, %2:Msg)), g(f(%8:Msg, %8:Msg), g(3, %9:Msg)))) X3:Msg --> %1:Msg X15:Msg --> %2:Msg X16:Msg --> %3:Msg X14:Msg --> null X12:Msg --> %4:Msg X8:Msg --> %5:Msg X10:Msg --> %6:Msg X9:Msg --> %7:Msg X2:Msg --> %8:Msg X6:Msg --> %9:Msg Variant 7 rewrites: 14 Msg: g(f(u(2, %1:Msg, g(g(g(%5:Msg, %6:Msg), %2:Msg), %3:Msg)), null), f(u( %2:Msg, %6:Msg, f(%4:Msg, %2:Msg)), g(f(%7:Msg, %7:Msg), g(3, %8:Msg)))) X3:Msg --> g(%5:Msg, %6:Msg) X15:Msg --> %2:Msg X16:Msg --> %3:Msg X14:Msg --> %1:Msg X12:Msg --> %4:Msg X8:Msg --> %4:Msg X10:Msg --> %5:Msg X9:Msg --> %6:Msg X2:Msg --> %7:Msg X6:Msg --> %8:Msg Variant 8 rewrites: 14 Msg: g(f(u(2, %2:Msg, g(g(%3:Msg, u(%1:Msg, %10:Msg)), %4:Msg)), u(g(%5:Msg, %3:Msg), g(%6:Msg, g(%7:Msg, u(%1:Msg, %11:Msg))))), f(u(%10:Msg, %11:Msg, f(%6:Msg, u(%1:Msg, %10:Msg))), g(f(%8:Msg, %8:Msg), g(3, %9:Msg)))) X3:Msg --> %3:Msg X15:Msg --> u(%1:Msg, %10:Msg) X16:Msg --> %4:Msg X14:Msg --> %2:Msg X12:Msg --> %5:Msg X8:Msg --> %6:Msg X10:Msg --> %7:Msg X9:Msg --> u(%1:Msg, %11:Msg) X2:Msg --> %8:Msg X6:Msg --> %9:Msg Variant 9 rewrites: 14 Msg: g(f(u(2, %1:Msg, g(g(%2:Msg, u(%7:Msg, %10:Msg)), %3:Msg)), u(g(%4:Msg, %2:Msg), g(%5:Msg, g(%6:Msg, %7:Msg)))), f(u(%10:Msg, f(%5:Msg, u(%7:Msg, %10:Msg))), g(f(%8:Msg, %8:Msg), g(3, %9:Msg)))) X3:Msg --> %2:Msg X15:Msg --> u(%7:Msg, %10:Msg) X16:Msg --> %3:Msg X14:Msg --> %1:Msg X12:Msg --> %4:Msg X8:Msg --> %5:Msg X10:Msg --> %6:Msg X9:Msg --> %7:Msg X2:Msg --> %8:Msg X6:Msg --> %9:Msg Variant 10 rewrites: 14 Msg: g(f(u(2, %1:Msg, g(g(%2:Msg, %3:Msg), %4:Msg)), u(g(%5:Msg, %2:Msg), g( %6:Msg, g(%7:Msg, u(%3:Msg, %10:Msg))))), f(u(%10:Msg, f(%6:Msg, %3:Msg)), g(f(%8:Msg, %8:Msg), g(3, %9:Msg)))) X3:Msg --> %2:Msg X15:Msg --> %3:Msg X16:Msg --> %4:Msg X14:Msg --> %1:Msg X12:Msg --> %5:Msg X8:Msg --> %6:Msg X10:Msg --> %7:Msg X9:Msg --> u(%3:Msg, %10:Msg) X2:Msg --> %8:Msg X6:Msg --> %9:Msg Variant 11 rewrites: 14 Msg: g(f(u(2, %1:Msg, g(g(%2:Msg, %3:Msg), %4:Msg)), u(g(%5:Msg, %2:Msg), g( %6:Msg, g(%7:Msg, %3:Msg)))), f(f(%6:Msg, %3:Msg), g(f(%8:Msg, %8:Msg), g( 3, %9:Msg)))) X3:Msg --> %2:Msg X15:Msg --> %3:Msg X16:Msg --> %4:Msg X14:Msg --> %1:Msg X12:Msg --> %5:Msg X8:Msg --> %6:Msg X10:Msg --> %7:Msg X9:Msg --> %3:Msg X2:Msg --> %8:Msg X6:Msg --> %9:Msg Variant 12 rewrites: 14 Msg: g(f(u(2, %1:Msg, g(g(%2:Msg, %3:Msg), %4:Msg)), u(g(%5:Msg, %2:Msg), g( %6:Msg, g(%7:Msg, u(%10:Msg, f(%6:Msg, %3:Msg)))))), f(u(%3:Msg, %10:Msg), g(f(%8:Msg, %8:Msg), g(3, %9:Msg)))) X3:Msg --> %2:Msg X15:Msg --> %3:Msg X16:Msg --> %4:Msg X14:Msg --> %1:Msg X12:Msg --> %5:Msg X8:Msg --> %6:Msg X10:Msg --> %7:Msg X9:Msg --> u(%10:Msg, f(%6:Msg, %3:Msg)) X2:Msg --> %8:Msg X6:Msg --> %9:Msg Variant 13 rewrites: 14 Msg: g(f(u(2, %1:Msg, g(g(%2:Msg, %3:Msg), %4:Msg)), u(g(%5:Msg, %2:Msg), g( %6:Msg, g(%7:Msg, f(%6:Msg, %3:Msg))))), f(%3:Msg, g(f(%8:Msg, %8:Msg), g( 3, %9:Msg)))) X3:Msg --> %2:Msg X15:Msg --> %3:Msg X16:Msg --> %4:Msg X14:Msg --> %1:Msg X12:Msg --> %5:Msg X8:Msg --> %6:Msg X10:Msg --> %7:Msg X9:Msg --> f(%6:Msg, %3:Msg) X2:Msg --> %8:Msg X6:Msg --> %9:Msg Variant 14 rewrites: 14 Msg: g(f(u(2, %1:Msg, g(g(%2:Msg, null), %3:Msg)), u(g(%4:Msg, %2:Msg), g( %5:Msg, g(%6:Msg, %7:Msg)))), f(u(%7:Msg, f(%5:Msg, null)), g(f(%8:Msg, %8:Msg), g(3, %9:Msg)))) X3:Msg --> %2:Msg X15:Msg --> null X16:Msg --> %3:Msg X14:Msg --> %1:Msg X12:Msg --> %4:Msg X8:Msg --> %5:Msg X10:Msg --> %6:Msg X9:Msg --> %7:Msg X2:Msg --> %8:Msg X6:Msg --> %9:Msg Variant 15 rewrites: 14 Msg: g(f(u(2, %1:Msg, g(g(%2:Msg, %3:Msg), %4:Msg)), u(g(%5:Msg, %2:Msg), g( %6:Msg, g(%7:Msg, null)))), f(u(%3:Msg, f(%6:Msg, %3:Msg)), g(f(%8:Msg, %8:Msg), g(3, %9:Msg)))) X3:Msg --> %2:Msg X15:Msg --> %3:Msg X16:Msg --> %4:Msg X14:Msg --> %1:Msg X12:Msg --> %5:Msg X8:Msg --> %6:Msg X10:Msg --> %7:Msg X9:Msg --> null X2:Msg --> %8:Msg X6:Msg --> %9:Msg Variant 16 rewrites: 141 Msg: g(f(null, u(g(#4:Msg, #1:Msg), g(#5:Msg, g(#6:Msg, #7:Msg)))), f(u(#2:Msg, #7:Msg, f(#5:Msg, #2:Msg)), g(f(#8:Msg, #8:Msg), g(3, #9:Msg)))) X3:Msg --> #1:Msg X15:Msg --> #2:Msg X16:Msg --> #3:Msg X14:Msg --> u(2, g(g(#1:Msg, #2:Msg), #3:Msg)) X12:Msg --> #4:Msg X8:Msg --> #5:Msg X10:Msg --> #6:Msg X9:Msg --> #7:Msg X2:Msg --> #8:Msg X6:Msg --> #9:Msg Variant 17 rewrites: 141 Msg: g(f(#1:Msg, u(g(#5:Msg, #2:Msg), g(#6:Msg, g(#7:Msg, #8:Msg)))), f(u( #3:Msg, #8:Msg, f(#6:Msg, #3:Msg)), g(f(#9:Msg, #9:Msg), g(3, #10:Msg)))) X3:Msg --> #2:Msg X15:Msg --> #3:Msg X16:Msg --> #4:Msg X14:Msg --> u(2, #1:Msg, g(g(#2:Msg, #3:Msg), #4:Msg)) X12:Msg --> #5:Msg X8:Msg --> #6:Msg X10:Msg --> #7:Msg X9:Msg --> #8:Msg X2:Msg --> #9:Msg X6:Msg --> #10:Msg Variant 18 rewrites: 141 Msg: g(f(u(#1:Msg, g(g(g(#5:Msg, #6:Msg), #2:Msg), #3:Msg)), null), f(u(#2:Msg, #6:Msg, f(#4:Msg, #2:Msg)), g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> g(#5:Msg, #6:Msg) X15:Msg --> #2:Msg X16:Msg --> #3:Msg X14:Msg --> u(2, #1:Msg) X12:Msg --> #4:Msg X8:Msg --> #4:Msg X10:Msg --> #5:Msg X9:Msg --> #6:Msg X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 19 rewrites: 141 Msg: g(f(u(#2:Msg, g(g(#3:Msg, u(#1:Msg, #10:Msg)), #4:Msg)), u(g(#5:Msg, #3:Msg), g(#6:Msg, g(#7:Msg, u(#1:Msg, #11:Msg))))), f(u(#10:Msg, #11:Msg, f(#6:Msg, u(#1:Msg, #10:Msg))), g(f(#8:Msg, #8:Msg), g(3, #9:Msg)))) X3:Msg --> #3:Msg X15:Msg --> u(#1:Msg, #10:Msg) X16:Msg --> #4:Msg X14:Msg --> u(2, #2:Msg) X12:Msg --> #5:Msg X8:Msg --> #6:Msg X10:Msg --> #7:Msg X9:Msg --> u(#1:Msg, #11:Msg) X2:Msg --> #8:Msg X6:Msg --> #9:Msg Variant 20 rewrites: 141 Msg: g(f(u(#1:Msg, g(g(#2:Msg, u(#7:Msg, #10:Msg)), #3:Msg)), u(g(#4:Msg, #2:Msg), g(#5:Msg, g(#6:Msg, #7:Msg)))), f(u(#10:Msg, f(#5:Msg, u(#7:Msg, #10:Msg))), g(f(#8:Msg, #8:Msg), g(3, #9:Msg)))) X3:Msg --> #2:Msg X15:Msg --> u(#7:Msg, #10:Msg) X16:Msg --> #3:Msg X14:Msg --> u(2, #1:Msg) X12:Msg --> #4:Msg X8:Msg --> #5:Msg X10:Msg --> #6:Msg X9:Msg --> #7:Msg X2:Msg --> #8:Msg X6:Msg --> #9:Msg Variant 21 rewrites: 141 Msg: g(f(u(#1:Msg, g(g(#2:Msg, #3:Msg), #4:Msg)), u(g(#5:Msg, #2:Msg), g( #6:Msg, g(#7:Msg, u(#3:Msg, #10:Msg))))), f(u(#10:Msg, f(#6:Msg, #3:Msg)), g(f(#8:Msg, #8:Msg), g(3, #9:Msg)))) X3:Msg --> #2:Msg X15:Msg --> #3:Msg X16:Msg --> #4:Msg X14:Msg --> u(2, #1:Msg) X12:Msg --> #5:Msg X8:Msg --> #6:Msg X10:Msg --> #7:Msg X9:Msg --> u(#3:Msg, #10:Msg) X2:Msg --> #8:Msg X6:Msg --> #9:Msg Variant 22 rewrites: 141 Msg: g(f(u(#1:Msg, g(g(#2:Msg, #3:Msg), #4:Msg)), u(g(#5:Msg, #2:Msg), g( #6:Msg, g(#7:Msg, #3:Msg)))), f(f(#6:Msg, #3:Msg), g(f(#8:Msg, #8:Msg), g( 3, #9:Msg)))) X3:Msg --> #2:Msg X15:Msg --> #3:Msg X16:Msg --> #4:Msg X14:Msg --> u(2, #1:Msg) X12:Msg --> #5:Msg X8:Msg --> #6:Msg X10:Msg --> #7:Msg X9:Msg --> #3:Msg X2:Msg --> #8:Msg X6:Msg --> #9:Msg Variant 23 rewrites: 141 Msg: g(f(u(#1:Msg, g(g(#2:Msg, #3:Msg), #4:Msg)), u(g(#5:Msg, #2:Msg), g( #6:Msg, g(#7:Msg, u(#10:Msg, f(#6:Msg, #3:Msg)))))), f(u(#3:Msg, #10:Msg), g(f(#8:Msg, #8:Msg), g(3, #9:Msg)))) X3:Msg --> #2:Msg X15:Msg --> #3:Msg X16:Msg --> #4:Msg X14:Msg --> u(2, #1:Msg) X12:Msg --> #5:Msg X8:Msg --> #6:Msg X10:Msg --> #7:Msg X9:Msg --> u(#10:Msg, f(#6:Msg, #3:Msg)) X2:Msg --> #8:Msg X6:Msg --> #9:Msg Variant 24 rewrites: 141 Msg: g(f(u(#1:Msg, g(g(#2:Msg, #3:Msg), #4:Msg)), u(g(#5:Msg, #2:Msg), g( #6:Msg, g(#7:Msg, f(#6:Msg, #3:Msg))))), f(#3:Msg, g(f(#8:Msg, #8:Msg), g( 3, #9:Msg)))) X3:Msg --> #2:Msg X15:Msg --> #3:Msg X16:Msg --> #4:Msg X14:Msg --> u(2, #1:Msg) X12:Msg --> #5:Msg X8:Msg --> #6:Msg X10:Msg --> #7:Msg X9:Msg --> f(#6:Msg, #3:Msg) X2:Msg --> #8:Msg X6:Msg --> #9:Msg Variant 25 rewrites: 141 Msg: g(f(u(#1:Msg, g(g(#2:Msg, null), #3:Msg)), u(g(#4:Msg, #2:Msg), g(#5:Msg, g(#6:Msg, #7:Msg)))), f(u(#7:Msg, f(#5:Msg, null)), g(f(#8:Msg, #8:Msg), g( 3, #9:Msg)))) X3:Msg --> #2:Msg X15:Msg --> null X16:Msg --> #3:Msg X14:Msg --> u(2, #1:Msg) X12:Msg --> #4:Msg X8:Msg --> #5:Msg X10:Msg --> #6:Msg X9:Msg --> #7:Msg X2:Msg --> #8:Msg X6:Msg --> #9:Msg Variant 26 rewrites: 141 Msg: g(f(u(#1:Msg, g(g(#2:Msg, #3:Msg), #4:Msg)), u(g(#5:Msg, #2:Msg), g( #6:Msg, g(#7:Msg, null)))), f(u(#3:Msg, f(#6:Msg, #3:Msg)), g(f(#8:Msg, #8:Msg), g(3, #9:Msg)))) X3:Msg --> #2:Msg X15:Msg --> #3:Msg X16:Msg --> #4:Msg X14:Msg --> u(2, #1:Msg) X12:Msg --> #5:Msg X8:Msg --> #6:Msg X10:Msg --> #7:Msg X9:Msg --> null X2:Msg --> #8:Msg X6:Msg --> #9:Msg Variant 27 rewrites: 141 Msg: g(f(g(g(g(#4:Msg, #5:Msg), #1:Msg), #2:Msg), null), f(u(#1:Msg, #5:Msg, f( #3:Msg, #1:Msg)), g(f(#6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> g(#4:Msg, #5:Msg) X15:Msg --> #1:Msg X16:Msg --> #2:Msg X14:Msg --> 2 X12:Msg --> #3:Msg X8:Msg --> #3:Msg X10:Msg --> #4:Msg X9:Msg --> #5:Msg X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 28 rewrites: 141 Msg: g(f(g(g(#2:Msg, u(#1:Msg, #9:Msg)), #3:Msg), u(g(#4:Msg, #2:Msg), g( #5:Msg, g(#6:Msg, u(#1:Msg, #10:Msg))))), f(u(#9:Msg, #10:Msg, f(#5:Msg, u( #1:Msg, #9:Msg))), g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #2:Msg X15:Msg --> u(#1:Msg, #9:Msg) X16:Msg --> #3:Msg X14:Msg --> 2 X12:Msg --> #4:Msg X8:Msg --> #5:Msg X10:Msg --> #6:Msg X9:Msg --> u(#1:Msg, #10:Msg) X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 29 rewrites: 141 Msg: g(f(g(g(#1:Msg, u(#6:Msg, #9:Msg)), #2:Msg), u(g(#3:Msg, #1:Msg), g( #4:Msg, g(#5:Msg, #6:Msg)))), f(u(#9:Msg, f(#4:Msg, u(#6:Msg, #9:Msg))), g( f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #1:Msg X15:Msg --> u(#6:Msg, #9:Msg) X16:Msg --> #2:Msg X14:Msg --> 2 X12:Msg --> #3:Msg X8:Msg --> #4:Msg X10:Msg --> #5:Msg X9:Msg --> #6:Msg X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 30 rewrites: 141 Msg: g(f(g(g(#1:Msg, #2:Msg), #3:Msg), u(g(#4:Msg, #1:Msg), g(#5:Msg, g(#6:Msg, u(#2:Msg, #9:Msg))))), f(u(#9:Msg, f(#5:Msg, #2:Msg)), g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #1:Msg X15:Msg --> #2:Msg X16:Msg --> #3:Msg X14:Msg --> 2 X12:Msg --> #4:Msg X8:Msg --> #5:Msg X10:Msg --> #6:Msg X9:Msg --> u(#2:Msg, #9:Msg) X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 31 rewrites: 141 Msg: g(f(g(g(#1:Msg, #2:Msg), #3:Msg), u(g(#4:Msg, #1:Msg), g(#5:Msg, g(#6:Msg, #2:Msg)))), f(f(#5:Msg, #2:Msg), g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #1:Msg X15:Msg --> #2:Msg X16:Msg --> #3:Msg X14:Msg --> 2 X12:Msg --> #4:Msg X8:Msg --> #5:Msg X10:Msg --> #6:Msg X9:Msg --> #2:Msg X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 32 rewrites: 141 Msg: g(f(g(g(#1:Msg, #2:Msg), #3:Msg), u(g(#4:Msg, #1:Msg), g(#5:Msg, g(#6:Msg, u(#9:Msg, f(#5:Msg, #2:Msg)))))), f(u(#2:Msg, #9:Msg), g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #1:Msg X15:Msg --> #2:Msg X16:Msg --> #3:Msg X14:Msg --> 2 X12:Msg --> #4:Msg X8:Msg --> #5:Msg X10:Msg --> #6:Msg X9:Msg --> u(#9:Msg, f(#5:Msg, #2:Msg)) X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 33 rewrites: 141 Msg: g(f(g(g(#1:Msg, #2:Msg), #3:Msg), u(g(#4:Msg, #1:Msg), g(#5:Msg, g(#6:Msg, f(#5:Msg, #2:Msg))))), f(#2:Msg, g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #1:Msg X15:Msg --> #2:Msg X16:Msg --> #3:Msg X14:Msg --> 2 X12:Msg --> #4:Msg X8:Msg --> #5:Msg X10:Msg --> #6:Msg X9:Msg --> f(#5:Msg, #2:Msg) X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 34 rewrites: 141 Msg: g(f(g(g(#1:Msg, null), #2:Msg), u(g(#3:Msg, #1:Msg), g(#4:Msg, g(#5:Msg, #6:Msg)))), f(u(#6:Msg, f(#4:Msg, null)), g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #1:Msg X15:Msg --> null X16:Msg --> #2:Msg X14:Msg --> 2 X12:Msg --> #3:Msg X8:Msg --> #4:Msg X10:Msg --> #5:Msg X9:Msg --> #6:Msg X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 35 rewrites: 141 Msg: g(f(g(g(#1:Msg, #2:Msg), #3:Msg), u(g(#4:Msg, #1:Msg), g(#5:Msg, g(#6:Msg, null)))), f(u(#2:Msg, f(#5:Msg, #2:Msg)), g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #1:Msg X15:Msg --> #2:Msg X16:Msg --> #3:Msg X14:Msg --> 2 X12:Msg --> #4:Msg X8:Msg --> #5:Msg X10:Msg --> #6:Msg X9:Msg --> null X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 36 rewrites: 141 Msg: g(f(u(2, #1:Msg), null), f(u(#4:Msg, #5:Msg, f(#2:Msg, #5:Msg)), g(f( #6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> g(#3:Msg, #4:Msg) X15:Msg --> #5:Msg X16:Msg --> #8:Msg X14:Msg --> u(#1:Msg, g(g(g(#3:Msg, #4:Msg), #5:Msg), #8:Msg)) X12:Msg --> #2:Msg X8:Msg --> #2:Msg X10:Msg --> #3:Msg X9:Msg --> #4:Msg X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 37 rewrites: 141 Msg: g(f(u(2, #2:Msg), u(g(#3:Msg, #4:Msg), g(#5:Msg, g(#6:Msg, u(#1:Msg, #11:Msg))))), f(u(#10:Msg, #11:Msg, f(#5:Msg, u(#1:Msg, #10:Msg))), g(f( #7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #4:Msg X15:Msg --> u(#1:Msg, #10:Msg) X16:Msg --> #9:Msg X14:Msg --> u(#2:Msg, g(g(#4:Msg, u(#1:Msg, #10:Msg)), #9:Msg)) X12:Msg --> #3:Msg X8:Msg --> #5:Msg X10:Msg --> #6:Msg X9:Msg --> u(#1:Msg, #11:Msg) X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 38 rewrites: 141 Msg: g(f(u(2, #1:Msg), u(g(#2:Msg, #3:Msg), g(#4:Msg, g(#5:Msg, #6:Msg)))), f( u(#10:Msg, f(#4:Msg, u(#6:Msg, #10:Msg))), g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #3:Msg X15:Msg --> u(#6:Msg, #10:Msg) X16:Msg --> #9:Msg X14:Msg --> u(#1:Msg, g(g(#3:Msg, u(#6:Msg, #10:Msg)), #9:Msg)) X12:Msg --> #2:Msg X8:Msg --> #4:Msg X10:Msg --> #5:Msg X9:Msg --> #6:Msg X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 39 rewrites: 141 Msg: g(f(u(2, #1:Msg), u(g(#2:Msg, #3:Msg), g(#4:Msg, g(#5:Msg, u(#6:Msg, #10:Msg))))), f(u(#10:Msg, f(#4:Msg, #6:Msg)), g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #3:Msg X15:Msg --> #6:Msg X16:Msg --> #9:Msg X14:Msg --> u(#1:Msg, g(g(#3:Msg, #6:Msg), #9:Msg)) X12:Msg --> #2:Msg X8:Msg --> #4:Msg X10:Msg --> #5:Msg X9:Msg --> u(#6:Msg, #10:Msg) X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 40 rewrites: 141 Msg: g(f(u(2, #1:Msg), u(g(#2:Msg, #3:Msg), g(#4:Msg, g(#5:Msg, #6:Msg)))), f( f(#4:Msg, #6:Msg), g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #3:Msg X15:Msg --> #6:Msg X16:Msg --> #9:Msg X14:Msg --> u(#1:Msg, g(g(#3:Msg, #6:Msg), #9:Msg)) X12:Msg --> #2:Msg X8:Msg --> #4:Msg X10:Msg --> #5:Msg X9:Msg --> #6:Msg X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 41 rewrites: 141 Msg: g(f(u(2, #1:Msg), u(g(#2:Msg, #3:Msg), g(#4:Msg, g(#5:Msg, u(#10:Msg, f( #4:Msg, #6:Msg)))))), f(u(#6:Msg, #10:Msg), g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #3:Msg X15:Msg --> #6:Msg X16:Msg --> #9:Msg X14:Msg --> u(#1:Msg, g(g(#3:Msg, #6:Msg), #9:Msg)) X12:Msg --> #2:Msg X8:Msg --> #4:Msg X10:Msg --> #5:Msg X9:Msg --> u(#10:Msg, f(#4:Msg, #6:Msg)) X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 42 rewrites: 141 Msg: g(f(u(2, #1:Msg), u(g(#2:Msg, #3:Msg), g(#4:Msg, g(#5:Msg, f(#4:Msg, #6:Msg))))), f(#6:Msg, g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #3:Msg X15:Msg --> #6:Msg X16:Msg --> #9:Msg X14:Msg --> u(#1:Msg, g(g(#3:Msg, #6:Msg), #9:Msg)) X12:Msg --> #2:Msg X8:Msg --> #4:Msg X10:Msg --> #5:Msg X9:Msg --> f(#4:Msg, #6:Msg) X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 43 rewrites: 141 Msg: g(f(u(2, #1:Msg), u(g(#2:Msg, #3:Msg), g(#4:Msg, g(#5:Msg, #6:Msg)))), f( u(#6:Msg, f(#4:Msg, null)), g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #3:Msg X15:Msg --> null X16:Msg --> #9:Msg X14:Msg --> u(#1:Msg, g(g(#3:Msg, null), #9:Msg)) X12:Msg --> #2:Msg X8:Msg --> #4:Msg X10:Msg --> #5:Msg X9:Msg --> #6:Msg X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 44 rewrites: 141 Msg: g(f(u(2, #1:Msg), u(g(#2:Msg, #3:Msg), g(#4:Msg, g(#5:Msg, null)))), f(u( #6:Msg, f(#4:Msg, #6:Msg)), g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #3:Msg X15:Msg --> #6:Msg X16:Msg --> #9:Msg X14:Msg --> u(#1:Msg, g(g(#3:Msg, #6:Msg), #9:Msg)) X12:Msg --> #2:Msg X8:Msg --> #4:Msg X10:Msg --> #5:Msg X9:Msg --> null X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 45 rewrites: 141 Msg: g(f(2, null), f(u(#3:Msg, #4:Msg, f(#1:Msg, #4:Msg)), g(f(#5:Msg, #5:Msg), g(3, #6:Msg)))) X3:Msg --> g(#2:Msg, #3:Msg) X15:Msg --> #4:Msg X16:Msg --> #7:Msg X14:Msg --> g(g(g(#2:Msg, #3:Msg), #4:Msg), #7:Msg) X12:Msg --> #1:Msg X8:Msg --> #1:Msg X10:Msg --> #2:Msg X9:Msg --> #3:Msg X2:Msg --> #5:Msg X6:Msg --> #6:Msg Variant 46 rewrites: 141 Msg: g(f(2, u(g(#2:Msg, #3:Msg), g(#4:Msg, g(#5:Msg, u(#1:Msg, #10:Msg))))), f( u(#9:Msg, #10:Msg, f(#4:Msg, u(#1:Msg, #9:Msg))), g(f(#6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> #3:Msg X15:Msg --> u(#1:Msg, #9:Msg) X16:Msg --> #8:Msg X14:Msg --> g(g(#3:Msg, u(#1:Msg, #9:Msg)), #8:Msg) X12:Msg --> #2:Msg X8:Msg --> #4:Msg X10:Msg --> #5:Msg X9:Msg --> u(#1:Msg, #10:Msg) X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 47 rewrites: 141 Msg: g(f(2, u(g(#1:Msg, #2:Msg), g(#3:Msg, g(#4:Msg, #5:Msg)))), f(u(#9:Msg, f( #3:Msg, u(#5:Msg, #9:Msg))), g(f(#6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> #2:Msg X15:Msg --> u(#5:Msg, #9:Msg) X16:Msg --> #8:Msg X14:Msg --> g(g(#2:Msg, u(#5:Msg, #9:Msg)), #8:Msg) X12:Msg --> #1:Msg X8:Msg --> #3:Msg X10:Msg --> #4:Msg X9:Msg --> #5:Msg X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 48 rewrites: 141 Msg: g(f(2, u(g(#1:Msg, #2:Msg), g(#3:Msg, g(#4:Msg, u(#5:Msg, #9:Msg))))), f( u(#9:Msg, f(#3:Msg, #5:Msg)), g(f(#6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> #2:Msg X15:Msg --> #5:Msg X16:Msg --> #8:Msg X14:Msg --> g(g(#2:Msg, #5:Msg), #8:Msg) X12:Msg --> #1:Msg X8:Msg --> #3:Msg X10:Msg --> #4:Msg X9:Msg --> u(#5:Msg, #9:Msg) X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 49 rewrites: 141 Msg: g(f(2, u(g(#1:Msg, #2:Msg), g(#3:Msg, g(#4:Msg, #5:Msg)))), f(f(#3:Msg, #5:Msg), g(f(#6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> #2:Msg X15:Msg --> #5:Msg X16:Msg --> #8:Msg X14:Msg --> g(g(#2:Msg, #5:Msg), #8:Msg) X12:Msg --> #1:Msg X8:Msg --> #3:Msg X10:Msg --> #4:Msg X9:Msg --> #5:Msg X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 50 rewrites: 141 Msg: g(f(2, u(g(#1:Msg, #2:Msg), g(#3:Msg, g(#4:Msg, u(#9:Msg, f(#3:Msg, #5:Msg)))))), f(u(#5:Msg, #9:Msg), g(f(#6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> #2:Msg X15:Msg --> #5:Msg X16:Msg --> #8:Msg X14:Msg --> g(g(#2:Msg, #5:Msg), #8:Msg) X12:Msg --> #1:Msg X8:Msg --> #3:Msg X10:Msg --> #4:Msg X9:Msg --> u(#9:Msg, f(#3:Msg, #5:Msg)) X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 51 rewrites: 141 Msg: g(f(2, u(g(#1:Msg, #2:Msg), g(#3:Msg, g(#4:Msg, f(#3:Msg, #5:Msg))))), f( #5:Msg, g(f(#6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> #2:Msg X15:Msg --> #5:Msg X16:Msg --> #8:Msg X14:Msg --> g(g(#2:Msg, #5:Msg), #8:Msg) X12:Msg --> #1:Msg X8:Msg --> #3:Msg X10:Msg --> #4:Msg X9:Msg --> f(#3:Msg, #5:Msg) X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 52 rewrites: 141 Msg: g(f(2, u(g(#1:Msg, #2:Msg), g(#3:Msg, g(#4:Msg, #5:Msg)))), f(u(#5:Msg, f( #3:Msg, null)), g(f(#6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> #2:Msg X15:Msg --> null X16:Msg --> #8:Msg X14:Msg --> g(g(#2:Msg, null), #8:Msg) X12:Msg --> #1:Msg X8:Msg --> #3:Msg X10:Msg --> #4:Msg X9:Msg --> #5:Msg X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 53 rewrites: 141 Msg: g(f(2, u(g(#1:Msg, #2:Msg), g(#3:Msg, g(#4:Msg, null)))), f(u(#5:Msg, f( #3:Msg, #5:Msg)), g(f(#6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> #2:Msg X15:Msg --> #5:Msg X16:Msg --> #8:Msg X14:Msg --> g(g(#2:Msg, #5:Msg), #8:Msg) X12:Msg --> #1:Msg X8:Msg --> #3:Msg X10:Msg --> #4:Msg X9:Msg --> null X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 54 rewrites: 141 Msg: g(f(u(2, g(g(g(#4:Msg, #5:Msg), #1:Msg), #2:Msg)), null), f(u(#1:Msg, #5:Msg, f(#3:Msg, #1:Msg)), g(f(#6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> g(#4:Msg, #5:Msg) X15:Msg --> #1:Msg X16:Msg --> #2:Msg X14:Msg --> null X12:Msg --> #3:Msg X8:Msg --> #3:Msg X10:Msg --> #4:Msg X9:Msg --> #5:Msg X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 55 rewrites: 141 Msg: g(f(u(2, g(g(#2:Msg, u(#1:Msg, #9:Msg)), #3:Msg)), u(g(#4:Msg, #2:Msg), g( #5:Msg, g(#6:Msg, u(#1:Msg, #10:Msg))))), f(u(#9:Msg, #10:Msg, f(#5:Msg, u( #1:Msg, #9:Msg))), g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #2:Msg X15:Msg --> u(#1:Msg, #9:Msg) X16:Msg --> #3:Msg X14:Msg --> null X12:Msg --> #4:Msg X8:Msg --> #5:Msg X10:Msg --> #6:Msg X9:Msg --> u(#1:Msg, #10:Msg) X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 56 rewrites: 141 Msg: g(f(u(2, g(g(#1:Msg, u(#6:Msg, #9:Msg)), #2:Msg)), u(g(#3:Msg, #1:Msg), g( #4:Msg, g(#5:Msg, #6:Msg)))), f(u(#9:Msg, f(#4:Msg, u(#6:Msg, #9:Msg))), g( f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #1:Msg X15:Msg --> u(#6:Msg, #9:Msg) X16:Msg --> #2:Msg X14:Msg --> null X12:Msg --> #3:Msg X8:Msg --> #4:Msg X10:Msg --> #5:Msg X9:Msg --> #6:Msg X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 57 rewrites: 141 Msg: g(f(u(2, g(g(#1:Msg, #2:Msg), #3:Msg)), u(g(#4:Msg, #1:Msg), g(#5:Msg, g( #6:Msg, u(#2:Msg, #9:Msg))))), f(u(#9:Msg, f(#5:Msg, #2:Msg)), g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #1:Msg X15:Msg --> #2:Msg X16:Msg --> #3:Msg X14:Msg --> null X12:Msg --> #4:Msg X8:Msg --> #5:Msg X10:Msg --> #6:Msg X9:Msg --> u(#2:Msg, #9:Msg) X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 58 rewrites: 141 Msg: g(f(u(2, g(g(#1:Msg, #2:Msg), #3:Msg)), u(g(#4:Msg, #1:Msg), g(#5:Msg, g( #6:Msg, #2:Msg)))), f(f(#5:Msg, #2:Msg), g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #1:Msg X15:Msg --> #2:Msg X16:Msg --> #3:Msg X14:Msg --> null X12:Msg --> #4:Msg X8:Msg --> #5:Msg X10:Msg --> #6:Msg X9:Msg --> #2:Msg X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 59 rewrites: 141 Msg: g(f(u(2, g(g(#1:Msg, #2:Msg), #3:Msg)), u(g(#4:Msg, #1:Msg), g(#5:Msg, g( #6:Msg, u(#9:Msg, f(#5:Msg, #2:Msg)))))), f(u(#2:Msg, #9:Msg), g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #1:Msg X15:Msg --> #2:Msg X16:Msg --> #3:Msg X14:Msg --> null X12:Msg --> #4:Msg X8:Msg --> #5:Msg X10:Msg --> #6:Msg X9:Msg --> u(#9:Msg, f(#5:Msg, #2:Msg)) X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 60 rewrites: 141 Msg: g(f(u(2, g(g(#1:Msg, #2:Msg), #3:Msg)), u(g(#4:Msg, #1:Msg), g(#5:Msg, g( #6:Msg, f(#5:Msg, #2:Msg))))), f(#2:Msg, g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #1:Msg X15:Msg --> #2:Msg X16:Msg --> #3:Msg X14:Msg --> null X12:Msg --> #4:Msg X8:Msg --> #5:Msg X10:Msg --> #6:Msg X9:Msg --> f(#5:Msg, #2:Msg) X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 61 rewrites: 141 Msg: g(f(u(2, g(g(#1:Msg, null), #2:Msg)), u(g(#3:Msg, #1:Msg), g(#4:Msg, g( #5:Msg, #6:Msg)))), f(u(#6:Msg, f(#4:Msg, null)), g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #1:Msg X15:Msg --> null X16:Msg --> #2:Msg X14:Msg --> null X12:Msg --> #3:Msg X8:Msg --> #4:Msg X10:Msg --> #5:Msg X9:Msg --> #6:Msg X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 62 rewrites: 141 Msg: g(f(u(2, g(g(#1:Msg, #2:Msg), #3:Msg)), u(g(#4:Msg, #1:Msg), g(#5:Msg, g( #6:Msg, null)))), f(u(#2:Msg, f(#5:Msg, #2:Msg)), g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #1:Msg X15:Msg --> #2:Msg X16:Msg --> #3:Msg X14:Msg --> null X12:Msg --> #4:Msg X8:Msg --> #5:Msg X10:Msg --> #6:Msg X9:Msg --> null X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 63 rewrites: 141 Msg: g(f(u(2, #2:Msg, g(g(g(#3:Msg, u(#1:Msg, #9:Msg)), u(#1:Msg, #8:Msg)), #4:Msg)), null), f(u(#8:Msg, #9:Msg, f(#5:Msg, u(#1:Msg, #8:Msg))), g(f( #6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> g(#3:Msg, u(#1:Msg, #9:Msg)) X15:Msg --> u(#1:Msg, #8:Msg) X16:Msg --> #4:Msg X14:Msg --> #2:Msg X12:Msg --> #5:Msg X8:Msg --> #5:Msg X10:Msg --> #3:Msg X9:Msg --> u(#1:Msg, #9:Msg) X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 64 rewrites: 141 Msg: g(f(u(2, #1:Msg, g(g(g(#2:Msg, #3:Msg), u(#3:Msg, #8:Msg)), #4:Msg)), null), f(u(#8:Msg, f(#5:Msg, u(#3:Msg, #8:Msg))), g(f(#6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> g(#2:Msg, #3:Msg) X15:Msg --> u(#3:Msg, #8:Msg) X16:Msg --> #4:Msg X14:Msg --> #1:Msg X12:Msg --> #5:Msg X8:Msg --> #5:Msg X10:Msg --> #2:Msg X9:Msg --> #3:Msg X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 65 rewrites: 141 Msg: g(f(u(2, #1:Msg, g(g(g(#2:Msg, u(#3:Msg, #8:Msg)), #3:Msg), #4:Msg)), null), f(u(#8:Msg, f(#5:Msg, #3:Msg)), g(f(#6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> g(#2:Msg, u(#3:Msg, #8:Msg)) X15:Msg --> #3:Msg X16:Msg --> #4:Msg X14:Msg --> #1:Msg X12:Msg --> #5:Msg X8:Msg --> #5:Msg X10:Msg --> #2:Msg X9:Msg --> u(#3:Msg, #8:Msg) X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 66 rewrites: 141 Msg: g(f(u(2, #1:Msg, g(g(g(#2:Msg, #3:Msg), #3:Msg), #4:Msg)), null), f(f( #5:Msg, #3:Msg), g(f(#6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> g(#2:Msg, #3:Msg) X15:Msg --> #3:Msg X16:Msg --> #4:Msg X14:Msg --> #1:Msg X12:Msg --> #5:Msg X8:Msg --> #5:Msg X10:Msg --> #2:Msg X9:Msg --> #3:Msg X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 67 rewrites: 141 Msg: g(f(u(2, #1:Msg, g(g(g(#2:Msg, u(#8:Msg, f(#5:Msg, #3:Msg))), #3:Msg), #4:Msg)), null), f(u(#3:Msg, #8:Msg), g(f(#6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> g(#2:Msg, u(#8:Msg, f(#5:Msg, #3:Msg))) X15:Msg --> #3:Msg X16:Msg --> #4:Msg X14:Msg --> #1:Msg X12:Msg --> #5:Msg X8:Msg --> #5:Msg X10:Msg --> #2:Msg X9:Msg --> u(#8:Msg, f(#5:Msg, #3:Msg)) X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 68 rewrites: 141 Msg: g(f(u(2, #1:Msg, g(g(g(#2:Msg, f(#5:Msg, #3:Msg)), #3:Msg), #4:Msg)), null), f(#3:Msg, g(f(#6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> g(#2:Msg, f(#5:Msg, #3:Msg)) X15:Msg --> #3:Msg X16:Msg --> #4:Msg X14:Msg --> #1:Msg X12:Msg --> #5:Msg X8:Msg --> #5:Msg X10:Msg --> #2:Msg X9:Msg --> f(#5:Msg, #3:Msg) X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 69 rewrites: 141 Msg: g(f(u(2, #1:Msg, g(g(g(#2:Msg, #3:Msg), null), #4:Msg)), null), f(u( #3:Msg, f(#5:Msg, null)), g(f(#6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> g(#2:Msg, #3:Msg) X15:Msg --> null X16:Msg --> #4:Msg X14:Msg --> #1:Msg X12:Msg --> #5:Msg X8:Msg --> #5:Msg X10:Msg --> #2:Msg X9:Msg --> #3:Msg X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 70 rewrites: 141 Msg: g(f(u(2, #1:Msg, g(g(g(#2:Msg, null), #3:Msg), #4:Msg)), null), f(u( #3:Msg, f(#5:Msg, #3:Msg)), g(f(#6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> g(#2:Msg, null) X15:Msg --> #3:Msg X16:Msg --> #4:Msg X14:Msg --> #1:Msg X12:Msg --> #5:Msg X8:Msg --> #5:Msg X10:Msg --> #2:Msg X9:Msg --> null X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 71 rewrites: 141 Msg: g(f(u(2, #1:Msg, g(g(#2:Msg, u(#3:Msg, #4:Msg)), #5:Msg)), u(g(#6:Msg, #2:Msg), g(#7:Msg, g(#8:Msg, u(#3:Msg, #11:Msg, f(#7:Msg, u(#3:Msg, #4:Msg))))))), f(u(#4:Msg, #11:Msg), g(f(#9:Msg, #9:Msg), g(3, #10:Msg)))) X3:Msg --> #2:Msg X15:Msg --> u(#3:Msg, #4:Msg) X16:Msg --> #5:Msg X14:Msg --> #1:Msg X12:Msg --> #6:Msg X8:Msg --> #7:Msg X10:Msg --> #8:Msg X9:Msg --> u(#3:Msg, #11:Msg, f(#7:Msg, u(#3:Msg, #4:Msg))) X2:Msg --> #9:Msg X6:Msg --> #10:Msg Variant 72 rewrites: 141 Msg: g(f(u(2, #1:Msg, g(g(#2:Msg, u(#3:Msg, #4:Msg)), #5:Msg)), u(g(#6:Msg, #2:Msg), g(#7:Msg, g(#8:Msg, u(#3:Msg, f(#7:Msg, u(#3:Msg, #4:Msg))))))), f(#4:Msg, g(f(#9:Msg, #9:Msg), g(3, #10:Msg)))) X3:Msg --> #2:Msg X15:Msg --> u(#3:Msg, #4:Msg) X16:Msg --> #5:Msg X14:Msg --> #1:Msg X12:Msg --> #6:Msg X8:Msg --> #7:Msg X10:Msg --> #8:Msg X9:Msg --> u(#3:Msg, f(#7:Msg, u(#3:Msg, #4:Msg))) X2:Msg --> #9:Msg X6:Msg --> #10:Msg Variant 73 rewrites: 141 Msg: g(f(u(2, #1:Msg, g(g(#2:Msg, #3:Msg), #4:Msg)), u(g(#5:Msg, #2:Msg), g( #6:Msg, g(#7:Msg, u(#3:Msg, f(#6:Msg, #3:Msg)))))), f(null, g(f(#8:Msg, #8:Msg), g(3, #9:Msg)))) X3:Msg --> #2:Msg X15:Msg --> #3:Msg X16:Msg --> #4:Msg X14:Msg --> #1:Msg X12:Msg --> #5:Msg X8:Msg --> #6:Msg X10:Msg --> #7:Msg X9:Msg --> u(#3:Msg, f(#6:Msg, #3:Msg)) X2:Msg --> #8:Msg X6:Msg --> #9:Msg Variant 74 rewrites: 141 Msg: g(f(u(2, #2:Msg, g(g(#3:Msg, #4:Msg), #5:Msg)), u(g(#6:Msg, #3:Msg), g( #7:Msg, g(#8:Msg, u(#1:Msg, #4:Msg, f(#7:Msg, #4:Msg)))))), f(#1:Msg, g(f( #9:Msg, #9:Msg), g(3, #10:Msg)))) X3:Msg --> #3:Msg X15:Msg --> #4:Msg X16:Msg --> #5:Msg X14:Msg --> #2:Msg X12:Msg --> #6:Msg X8:Msg --> #7:Msg X10:Msg --> #8:Msg X9:Msg --> u(#1:Msg, #4:Msg, f(#7:Msg, #4:Msg)) X2:Msg --> #9:Msg X6:Msg --> #10:Msg Variant 75 rewrites: 141 Msg: g(f(u(2, #1:Msg, g(g(#2:Msg, null), #3:Msg)), u(g(#4:Msg, #2:Msg), g( #5:Msg, g(#6:Msg, u(#7:Msg, f(#5:Msg, null)))))), f(#7:Msg, g(f(#8:Msg, #8:Msg), g(3, #9:Msg)))) X3:Msg --> #2:Msg X15:Msg --> null X16:Msg --> #3:Msg X14:Msg --> #1:Msg X12:Msg --> #4:Msg X8:Msg --> #5:Msg X10:Msg --> #6:Msg X9:Msg --> u(#7:Msg, f(#5:Msg, null)) X2:Msg --> #8:Msg X6:Msg --> #9:Msg Variant 76 rewrites: 451 Msg: g(f(null, null), f(u(%3:Msg, %4:Msg, f(%1:Msg, %4:Msg)), g(f(%5:Msg, %5:Msg), g(3, %6:Msg)))) X3:Msg --> g(%2:Msg, %3:Msg) X15:Msg --> %4:Msg X16:Msg --> %7:Msg X14:Msg --> u(2, g(g(g(%2:Msg, %3:Msg), %4:Msg), %7:Msg)) X12:Msg --> %1:Msg X8:Msg --> %1:Msg X10:Msg --> %2:Msg X9:Msg --> %3:Msg X2:Msg --> %5:Msg X6:Msg --> %6:Msg Variant 77 rewrites: 451 Msg: g(f(null, u(g(%2:Msg, %3:Msg), g(%4:Msg, g(%5:Msg, u(%1:Msg, %10:Msg))))), f(u(%9:Msg, %10:Msg, f(%4:Msg, u(%1:Msg, %9:Msg))), g(f(%6:Msg, %6:Msg), g( 3, %7:Msg)))) X3:Msg --> %3:Msg X15:Msg --> u(%1:Msg, %9:Msg) X16:Msg --> %8:Msg X14:Msg --> u(2, g(g(%3:Msg, u(%1:Msg, %9:Msg)), %8:Msg)) X12:Msg --> %2:Msg X8:Msg --> %4:Msg X10:Msg --> %5:Msg X9:Msg --> u(%1:Msg, %10:Msg) X2:Msg --> %6:Msg X6:Msg --> %7:Msg Variant 78 rewrites: 451 Msg: g(f(null, u(g(%1:Msg, %2:Msg), g(%3:Msg, g(%4:Msg, %5:Msg)))), f(u(%9:Msg, f(%3:Msg, u(%5:Msg, %9:Msg))), g(f(%6:Msg, %6:Msg), g(3, %7:Msg)))) X3:Msg --> %2:Msg X15:Msg --> u(%5:Msg, %9:Msg) X16:Msg --> %8:Msg X14:Msg --> u(2, g(g(%2:Msg, u(%5:Msg, %9:Msg)), %8:Msg)) X12:Msg --> %1:Msg X8:Msg --> %3:Msg X10:Msg --> %4:Msg X9:Msg --> %5:Msg X2:Msg --> %6:Msg X6:Msg --> %7:Msg Variant 79 rewrites: 451 Msg: g(f(null, u(g(%1:Msg, %2:Msg), g(%3:Msg, g(%4:Msg, u(%5:Msg, %9:Msg))))), f(u(%9:Msg, f(%3:Msg, %5:Msg)), g(f(%6:Msg, %6:Msg), g(3, %7:Msg)))) X3:Msg --> %2:Msg X15:Msg --> %5:Msg X16:Msg --> %8:Msg X14:Msg --> u(2, g(g(%2:Msg, %5:Msg), %8:Msg)) X12:Msg --> %1:Msg X8:Msg --> %3:Msg X10:Msg --> %4:Msg X9:Msg --> u(%5:Msg, %9:Msg) X2:Msg --> %6:Msg X6:Msg --> %7:Msg Variant 80 rewrites: 451 Msg: g(f(null, u(g(%1:Msg, %2:Msg), g(%3:Msg, g(%4:Msg, %5:Msg)))), f(f(%3:Msg, %5:Msg), g(f(%6:Msg, %6:Msg), g(3, %7:Msg)))) X3:Msg --> %2:Msg X15:Msg --> %5:Msg X16:Msg --> %8:Msg X14:Msg --> u(2, g(g(%2:Msg, %5:Msg), %8:Msg)) X12:Msg --> %1:Msg X8:Msg --> %3:Msg X10:Msg --> %4:Msg X9:Msg --> %5:Msg X2:Msg --> %6:Msg X6:Msg --> %7:Msg Variant 81 rewrites: 451 Msg: g(f(null, u(g(%1:Msg, %2:Msg), g(%3:Msg, g(%4:Msg, u(%9:Msg, f(%3:Msg, %5:Msg)))))), f(u(%5:Msg, %9:Msg), g(f(%6:Msg, %6:Msg), g(3, %7:Msg)))) X3:Msg --> %2:Msg X15:Msg --> %5:Msg X16:Msg --> %8:Msg X14:Msg --> u(2, g(g(%2:Msg, %5:Msg), %8:Msg)) X12:Msg --> %1:Msg X8:Msg --> %3:Msg X10:Msg --> %4:Msg X9:Msg --> u(%9:Msg, f(%3:Msg, %5:Msg)) X2:Msg --> %6:Msg X6:Msg --> %7:Msg Variant 82 rewrites: 451 Msg: g(f(null, u(g(%1:Msg, %2:Msg), g(%3:Msg, g(%4:Msg, f(%3:Msg, %5:Msg))))), f(%5:Msg, g(f(%6:Msg, %6:Msg), g(3, %7:Msg)))) X3:Msg --> %2:Msg X15:Msg --> %5:Msg X16:Msg --> %8:Msg X14:Msg --> u(2, g(g(%2:Msg, %5:Msg), %8:Msg)) X12:Msg --> %1:Msg X8:Msg --> %3:Msg X10:Msg --> %4:Msg X9:Msg --> f(%3:Msg, %5:Msg) X2:Msg --> %6:Msg X6:Msg --> %7:Msg Variant 83 rewrites: 451 Msg: g(f(null, u(g(%1:Msg, %2:Msg), g(%3:Msg, g(%4:Msg, %5:Msg)))), f(u(%5:Msg, f(%3:Msg, null)), g(f(%6:Msg, %6:Msg), g(3, %7:Msg)))) X3:Msg --> %2:Msg X15:Msg --> null X16:Msg --> %8:Msg X14:Msg --> u(2, g(g(%2:Msg, null), %8:Msg)) X12:Msg --> %1:Msg X8:Msg --> %3:Msg X10:Msg --> %4:Msg X9:Msg --> %5:Msg X2:Msg --> %6:Msg X6:Msg --> %7:Msg Variant 84 rewrites: 451 Msg: g(f(null, u(g(%1:Msg, %2:Msg), g(%3:Msg, g(%4:Msg, null)))), f(u(%5:Msg, f(%3:Msg, %5:Msg)), g(f(%6:Msg, %6:Msg), g(3, %7:Msg)))) X3:Msg --> %2:Msg X15:Msg --> %5:Msg X16:Msg --> %8:Msg X14:Msg --> u(2, g(g(%2:Msg, %5:Msg), %8:Msg)) X12:Msg --> %1:Msg X8:Msg --> %3:Msg X10:Msg --> %4:Msg X9:Msg --> null X2:Msg --> %6:Msg X6:Msg --> %7:Msg Variant 85 rewrites: 451 Msg: g(f(%1:Msg, null), f(u(%4:Msg, %5:Msg, f(%2:Msg, %5:Msg)), g(f(%6:Msg, %6:Msg), g(3, %7:Msg)))) X3:Msg --> g(%3:Msg, %4:Msg) X15:Msg --> %5:Msg X16:Msg --> %8:Msg X14:Msg --> u(2, %1:Msg, g(g(g(%3:Msg, %4:Msg), %5:Msg), %8:Msg)) X12:Msg --> %2:Msg X8:Msg --> %2:Msg X10:Msg --> %3:Msg X9:Msg --> %4:Msg X2:Msg --> %6:Msg X6:Msg --> %7:Msg Variant 86 rewrites: 451 Msg: g(f(%2:Msg, u(g(%3:Msg, %4:Msg), g(%5:Msg, g(%6:Msg, u(%1:Msg, %11:Msg))))), f(u(%10:Msg, %11:Msg, f(%5:Msg, u(%1:Msg, %10:Msg))), g(f( %7:Msg, %7:Msg), g(3, %8:Msg)))) X3:Msg --> %4:Msg X15:Msg --> u(%1:Msg, %10:Msg) X16:Msg --> %9:Msg X14:Msg --> u(2, %2:Msg, g(g(%4:Msg, u(%1:Msg, %10:Msg)), %9:Msg)) X12:Msg --> %3:Msg X8:Msg --> %5:Msg X10:Msg --> %6:Msg X9:Msg --> u(%1:Msg, %11:Msg) X2:Msg --> %7:Msg X6:Msg --> %8:Msg Variant 87 rewrites: 451 Msg: g(f(%1:Msg, u(g(%2:Msg, %3:Msg), g(%4:Msg, g(%5:Msg, %6:Msg)))), f(u( %10:Msg, f(%4:Msg, u(%6:Msg, %10:Msg))), g(f(%7:Msg, %7:Msg), g(3, %8:Msg)))) X3:Msg --> %3:Msg X15:Msg --> u(%6:Msg, %10:Msg) X16:Msg --> %9:Msg X14:Msg --> u(2, %1:Msg, g(g(%3:Msg, u(%6:Msg, %10:Msg)), %9:Msg)) X12:Msg --> %2:Msg X8:Msg --> %4:Msg X10:Msg --> %5:Msg X9:Msg --> %6:Msg X2:Msg --> %7:Msg X6:Msg --> %8:Msg Variant 88 rewrites: 451 Msg: g(f(%1:Msg, u(g(%2:Msg, %3:Msg), g(%4:Msg, g(%5:Msg, u(%6:Msg, %10:Msg))))), f(u(%10:Msg, f(%4:Msg, %6:Msg)), g(f(%7:Msg, %7:Msg), g(3, %8:Msg)))) X3:Msg --> %3:Msg X15:Msg --> %6:Msg X16:Msg --> %9:Msg X14:Msg --> u(2, %1:Msg, g(g(%3:Msg, %6:Msg), %9:Msg)) X12:Msg --> %2:Msg X8:Msg --> %4:Msg X10:Msg --> %5:Msg X9:Msg --> u(%6:Msg, %10:Msg) X2:Msg --> %7:Msg X6:Msg --> %8:Msg Variant 89 rewrites: 451 Msg: g(f(%1:Msg, u(g(%2:Msg, %3:Msg), g(%4:Msg, g(%5:Msg, %6:Msg)))), f(f( %4:Msg, %6:Msg), g(f(%7:Msg, %7:Msg), g(3, %8:Msg)))) X3:Msg --> %3:Msg X15:Msg --> %6:Msg X16:Msg --> %9:Msg X14:Msg --> u(2, %1:Msg, g(g(%3:Msg, %6:Msg), %9:Msg)) X12:Msg --> %2:Msg X8:Msg --> %4:Msg X10:Msg --> %5:Msg X9:Msg --> %6:Msg X2:Msg --> %7:Msg X6:Msg --> %8:Msg Variant 90 rewrites: 451 Msg: g(f(%1:Msg, u(g(%2:Msg, %3:Msg), g(%4:Msg, g(%5:Msg, u(%10:Msg, f(%4:Msg, %6:Msg)))))), f(u(%6:Msg, %10:Msg), g(f(%7:Msg, %7:Msg), g(3, %8:Msg)))) X3:Msg --> %3:Msg X15:Msg --> %6:Msg X16:Msg --> %9:Msg X14:Msg --> u(2, %1:Msg, g(g(%3:Msg, %6:Msg), %9:Msg)) X12:Msg --> %2:Msg X8:Msg --> %4:Msg X10:Msg --> %5:Msg X9:Msg --> u(%10:Msg, f(%4:Msg, %6:Msg)) X2:Msg --> %7:Msg X6:Msg --> %8:Msg Variant 91 rewrites: 451 Msg: g(f(%1:Msg, u(g(%2:Msg, %3:Msg), g(%4:Msg, g(%5:Msg, f(%4:Msg, %6:Msg))))), f(%6:Msg, g(f(%7:Msg, %7:Msg), g(3, %8:Msg)))) X3:Msg --> %3:Msg X15:Msg --> %6:Msg X16:Msg --> %9:Msg X14:Msg --> u(2, %1:Msg, g(g(%3:Msg, %6:Msg), %9:Msg)) X12:Msg --> %2:Msg X8:Msg --> %4:Msg X10:Msg --> %5:Msg X9:Msg --> f(%4:Msg, %6:Msg) X2:Msg --> %7:Msg X6:Msg --> %8:Msg Variant 92 rewrites: 451 Msg: g(f(%1:Msg, u(g(%2:Msg, %3:Msg), g(%4:Msg, g(%5:Msg, %6:Msg)))), f(u( %6:Msg, f(%4:Msg, null)), g(f(%7:Msg, %7:Msg), g(3, %8:Msg)))) X3:Msg --> %3:Msg X15:Msg --> null X16:Msg --> %9:Msg X14:Msg --> u(2, %1:Msg, g(g(%3:Msg, null), %9:Msg)) X12:Msg --> %2:Msg X8:Msg --> %4:Msg X10:Msg --> %5:Msg X9:Msg --> %6:Msg X2:Msg --> %7:Msg X6:Msg --> %8:Msg Variant 93 rewrites: 451 Msg: g(f(%1:Msg, u(g(%2:Msg, %3:Msg), g(%4:Msg, g(%5:Msg, null)))), f(u(%6:Msg, f(%4:Msg, %6:Msg)), g(f(%7:Msg, %7:Msg), g(3, %8:Msg)))) X3:Msg --> %3:Msg X15:Msg --> %6:Msg X16:Msg --> %9:Msg X14:Msg --> u(2, %1:Msg, g(g(%3:Msg, %6:Msg), %9:Msg)) X12:Msg --> %2:Msg X8:Msg --> %4:Msg X10:Msg --> %5:Msg X9:Msg --> null X2:Msg --> %7:Msg X6:Msg --> %8:Msg Variant 94 rewrites: 451 Msg: g(f(u(%2:Msg, g(g(g(%3:Msg, u(%1:Msg, %9:Msg)), u(%1:Msg, %8:Msg)), %4:Msg)), null), f(u(%8:Msg, %9:Msg, f(%5:Msg, u(%1:Msg, %8:Msg))), g(f( %6:Msg, %6:Msg), g(3, %7:Msg)))) X3:Msg --> g(%3:Msg, u(%1:Msg, %9:Msg)) X15:Msg --> u(%1:Msg, %8:Msg) X16:Msg --> %4:Msg X14:Msg --> u(2, %2:Msg) X12:Msg --> %5:Msg X8:Msg --> %5:Msg X10:Msg --> %3:Msg X9:Msg --> u(%1:Msg, %9:Msg) X2:Msg --> %6:Msg X6:Msg --> %7:Msg Variant 95 rewrites: 451 Msg: g(f(u(%1:Msg, g(g(g(%2:Msg, %3:Msg), u(%3:Msg, %8:Msg)), %4:Msg)), null), f(u(%8:Msg, f(%5:Msg, u(%3:Msg, %8:Msg))), g(f(%6:Msg, %6:Msg), g(3, %7:Msg)))) X3:Msg --> g(%2:Msg, %3:Msg) X15:Msg --> u(%3:Msg, %8:Msg) X16:Msg --> %4:Msg X14:Msg --> u(2, %1:Msg) X12:Msg --> %5:Msg X8:Msg --> %5:Msg X10:Msg --> %2:Msg X9:Msg --> %3:Msg X2:Msg --> %6:Msg X6:Msg --> %7:Msg Variant 96 rewrites: 451 Msg: g(f(u(%1:Msg, g(g(g(%2:Msg, u(%3:Msg, %8:Msg)), %3:Msg), %4:Msg)), null), f(u(%8:Msg, f(%5:Msg, %3:Msg)), g(f(%6:Msg, %6:Msg), g(3, %7:Msg)))) X3:Msg --> g(%2:Msg, u(%3:Msg, %8:Msg)) X15:Msg --> %3:Msg X16:Msg --> %4:Msg X14:Msg --> u(2, %1:Msg) X12:Msg --> %5:Msg X8:Msg --> %5:Msg X10:Msg --> %2:Msg X9:Msg --> u(%3:Msg, %8:Msg) X2:Msg --> %6:Msg X6:Msg --> %7:Msg Variant 97 rewrites: 451 Msg: g(f(u(%1:Msg, g(g(g(%2:Msg, %3:Msg), %3:Msg), %4:Msg)), null), f(f(%5:Msg, %3:Msg), g(f(%6:Msg, %6:Msg), g(3, %7:Msg)))) X3:Msg --> g(%2:Msg, %3:Msg) X15:Msg --> %3:Msg X16:Msg --> %4:Msg X14:Msg --> u(2, %1:Msg) X12:Msg --> %5:Msg X8:Msg --> %5:Msg X10:Msg --> %2:Msg X9:Msg --> %3:Msg X2:Msg --> %6:Msg X6:Msg --> %7:Msg Variant 98 rewrites: 451 Msg: g(f(u(%1:Msg, g(g(g(%2:Msg, u(%8:Msg, f(%5:Msg, %3:Msg))), %3:Msg), %4:Msg)), null), f(u(%3:Msg, %8:Msg), g(f(%6:Msg, %6:Msg), g(3, %7:Msg)))) X3:Msg --> g(%2:Msg, u(%8:Msg, f(%5:Msg, %3:Msg))) X15:Msg --> %3:Msg X16:Msg --> %4:Msg X14:Msg --> u(2, %1:Msg) X12:Msg --> %5:Msg X8:Msg --> %5:Msg X10:Msg --> %2:Msg X9:Msg --> u(%8:Msg, f(%5:Msg, %3:Msg)) X2:Msg --> %6:Msg X6:Msg --> %7:Msg Variant 99 rewrites: 451 Msg: g(f(u(%1:Msg, g(g(g(%2:Msg, f(%5:Msg, %3:Msg)), %3:Msg), %4:Msg)), null), f(%3:Msg, g(f(%6:Msg, %6:Msg), g(3, %7:Msg)))) X3:Msg --> g(%2:Msg, f(%5:Msg, %3:Msg)) X15:Msg --> %3:Msg X16:Msg --> %4:Msg X14:Msg --> u(2, %1:Msg) X12:Msg --> %5:Msg X8:Msg --> %5:Msg X10:Msg --> %2:Msg X9:Msg --> f(%5:Msg, %3:Msg) X2:Msg --> %6:Msg X6:Msg --> %7:Msg Variant 100 rewrites: 451 Msg: g(f(u(%1:Msg, g(g(g(%2:Msg, %3:Msg), null), %4:Msg)), null), f(u(%3:Msg, f(%5:Msg, null)), g(f(%6:Msg, %6:Msg), g(3, %7:Msg)))) X3:Msg --> g(%2:Msg, %3:Msg) X15:Msg --> null X16:Msg --> %4:Msg X14:Msg --> u(2, %1:Msg) X12:Msg --> %5:Msg X8:Msg --> %5:Msg X10:Msg --> %2:Msg X9:Msg --> %3:Msg X2:Msg --> %6:Msg X6:Msg --> %7:Msg Variant 101 rewrites: 451 Msg: g(f(u(%1:Msg, g(g(g(%2:Msg, null), %3:Msg), %4:Msg)), null), f(u(%3:Msg, f(%5:Msg, %3:Msg)), g(f(%6:Msg, %6:Msg), g(3, %7:Msg)))) X3:Msg --> g(%2:Msg, null) X15:Msg --> %3:Msg X16:Msg --> %4:Msg X14:Msg --> u(2, %1:Msg) X12:Msg --> %5:Msg X8:Msg --> %5:Msg X10:Msg --> %2:Msg X9:Msg --> null X2:Msg --> %6:Msg X6:Msg --> %7:Msg Variant 102 rewrites: 451 Msg: g(f(u(%1:Msg, g(g(%2:Msg, u(%3:Msg, %4:Msg)), %5:Msg)), u(g(%6:Msg, %2:Msg), g(%7:Msg, g(%8:Msg, u(%3:Msg, %11:Msg, f(%7:Msg, u(%3:Msg, %4:Msg))))))), f(u(%4:Msg, %11:Msg), g(f(%9:Msg, %9:Msg), g(3, %10:Msg)))) X3:Msg --> %2:Msg X15:Msg --> u(%3:Msg, %4:Msg) X16:Msg --> %5:Msg X14:Msg --> u(2, %1:Msg) X12:Msg --> %6:Msg X8:Msg --> %7:Msg X10:Msg --> %8:Msg X9:Msg --> u(%3:Msg, %11:Msg, f(%7:Msg, u(%3:Msg, %4:Msg))) X2:Msg --> %9:Msg X6:Msg --> %10:Msg Variant 103 rewrites: 451 Msg: g(f(u(%1:Msg, g(g(%2:Msg, u(%3:Msg, %4:Msg)), %5:Msg)), u(g(%6:Msg, %2:Msg), g(%7:Msg, g(%8:Msg, u(%3:Msg, f(%7:Msg, u(%3:Msg, %4:Msg))))))), f(%4:Msg, g(f(%9:Msg, %9:Msg), g(3, %10:Msg)))) X3:Msg --> %2:Msg X15:Msg --> u(%3:Msg, %4:Msg) X16:Msg --> %5:Msg X14:Msg --> u(2, %1:Msg) X12:Msg --> %6:Msg X8:Msg --> %7:Msg X10:Msg --> %8:Msg X9:Msg --> u(%3:Msg, f(%7:Msg, u(%3:Msg, %4:Msg))) X2:Msg --> %9:Msg X6:Msg --> %10:Msg Variant 104 rewrites: 451 Msg: g(f(u(%1:Msg, g(g(%2:Msg, %3:Msg), %4:Msg)), u(g(%5:Msg, %2:Msg), g( %6:Msg, g(%7:Msg, u(%3:Msg, f(%6:Msg, %3:Msg)))))), f(null, g(f(%8:Msg, %8:Msg), g(3, %9:Msg)))) X3:Msg --> %2:Msg X15:Msg --> %3:Msg X16:Msg --> %4:Msg X14:Msg --> u(2, %1:Msg) X12:Msg --> %5:Msg X8:Msg --> %6:Msg X10:Msg --> %7:Msg X9:Msg --> u(%3:Msg, f(%6:Msg, %3:Msg)) X2:Msg --> %8:Msg X6:Msg --> %9:Msg Variant 105 rewrites: 451 Msg: g(f(u(%2:Msg, g(g(%3:Msg, %4:Msg), %5:Msg)), u(g(%6:Msg, %3:Msg), g( %7:Msg, g(%8:Msg, u(%1:Msg, %4:Msg, f(%7:Msg, %4:Msg)))))), f(%1:Msg, g(f( %9:Msg, %9:Msg), g(3, %10:Msg)))) X3:Msg --> %3:Msg X15:Msg --> %4:Msg X16:Msg --> %5:Msg X14:Msg --> u(2, %2:Msg) X12:Msg --> %6:Msg X8:Msg --> %7:Msg X10:Msg --> %8:Msg X9:Msg --> u(%1:Msg, %4:Msg, f(%7:Msg, %4:Msg)) X2:Msg --> %9:Msg X6:Msg --> %10:Msg Variant 106 rewrites: 451 Msg: g(f(u(%1:Msg, g(g(%2:Msg, null), %3:Msg)), u(g(%4:Msg, %2:Msg), g(%5:Msg, g(%6:Msg, u(%7:Msg, f(%5:Msg, null)))))), f(%7:Msg, g(f(%8:Msg, %8:Msg), g( 3, %9:Msg)))) X3:Msg --> %2:Msg X15:Msg --> null X16:Msg --> %3:Msg X14:Msg --> u(2, %1:Msg) X12:Msg --> %4:Msg X8:Msg --> %5:Msg X10:Msg --> %6:Msg X9:Msg --> u(%7:Msg, f(%5:Msg, null)) X2:Msg --> %8:Msg X6:Msg --> %9:Msg Variant 107 rewrites: 451 Msg: g(f(g(g(g(%2:Msg, u(%1:Msg, %8:Msg)), u(%1:Msg, %7:Msg)), %3:Msg), null), f(u(%7:Msg, %8:Msg, f(%4:Msg, u(%1:Msg, %7:Msg))), g(f(%5:Msg, %5:Msg), g( 3, %6:Msg)))) X3:Msg --> g(%2:Msg, u(%1:Msg, %8:Msg)) X15:Msg --> u(%1:Msg, %7:Msg) X16:Msg --> %3:Msg X14:Msg --> 2 X12:Msg --> %4:Msg X8:Msg --> %4:Msg X10:Msg --> %2:Msg X9:Msg --> u(%1:Msg, %8:Msg) X2:Msg --> %5:Msg X6:Msg --> %6:Msg Variant 108 rewrites: 451 Msg: g(f(g(g(g(%1:Msg, %2:Msg), u(%2:Msg, %7:Msg)), %3:Msg), null), f(u(%7:Msg, f(%4:Msg, u(%2:Msg, %7:Msg))), g(f(%5:Msg, %5:Msg), g(3, %6:Msg)))) X3:Msg --> g(%1:Msg, %2:Msg) X15:Msg --> u(%2:Msg, %7:Msg) X16:Msg --> %3:Msg X14:Msg --> 2 X12:Msg --> %4:Msg X8:Msg --> %4:Msg X10:Msg --> %1:Msg X9:Msg --> %2:Msg X2:Msg --> %5:Msg X6:Msg --> %6:Msg Variant 109 rewrites: 451 Msg: g(f(g(g(g(%1:Msg, u(%2:Msg, %7:Msg)), %2:Msg), %3:Msg), null), f(u(%7:Msg, f(%4:Msg, %2:Msg)), g(f(%5:Msg, %5:Msg), g(3, %6:Msg)))) X3:Msg --> g(%1:Msg, u(%2:Msg, %7:Msg)) X15:Msg --> %2:Msg X16:Msg --> %3:Msg X14:Msg --> 2 X12:Msg --> %4:Msg X8:Msg --> %4:Msg X10:Msg --> %1:Msg X9:Msg --> u(%2:Msg, %7:Msg) X2:Msg --> %5:Msg X6:Msg --> %6:Msg Variant 110 rewrites: 451 Msg: g(f(g(g(g(%1:Msg, %2:Msg), %2:Msg), %3:Msg), null), f(f(%4:Msg, %2:Msg), g(f(%5:Msg, %5:Msg), g(3, %6:Msg)))) X3:Msg --> g(%1:Msg, %2:Msg) X15:Msg --> %2:Msg X16:Msg --> %3:Msg X14:Msg --> 2 X12:Msg --> %4:Msg X8:Msg --> %4:Msg X10:Msg --> %1:Msg X9:Msg --> %2:Msg X2:Msg --> %5:Msg X6:Msg --> %6:Msg Variant 111 rewrites: 451 Msg: g(f(g(g(g(%1:Msg, u(%7:Msg, f(%4:Msg, %2:Msg))), %2:Msg), %3:Msg), null), f(u(%2:Msg, %7:Msg), g(f(%5:Msg, %5:Msg), g(3, %6:Msg)))) X3:Msg --> g(%1:Msg, u(%7:Msg, f(%4:Msg, %2:Msg))) X15:Msg --> %2:Msg X16:Msg --> %3:Msg X14:Msg --> 2 X12:Msg --> %4:Msg X8:Msg --> %4:Msg X10:Msg --> %1:Msg X9:Msg --> u(%7:Msg, f(%4:Msg, %2:Msg)) X2:Msg --> %5:Msg X6:Msg --> %6:Msg Variant 112 rewrites: 451 Msg: g(f(g(g(g(%1:Msg, f(%4:Msg, %2:Msg)), %2:Msg), %3:Msg), null), f(%2:Msg, g(f(%5:Msg, %5:Msg), g(3, %6:Msg)))) X3:Msg --> g(%1:Msg, f(%4:Msg, %2:Msg)) X15:Msg --> %2:Msg X16:Msg --> %3:Msg X14:Msg --> 2 X12:Msg --> %4:Msg X8:Msg --> %4:Msg X10:Msg --> %1:Msg X9:Msg --> f(%4:Msg, %2:Msg) X2:Msg --> %5:Msg X6:Msg --> %6:Msg Variant 113 rewrites: 451 Msg: g(f(g(g(g(%1:Msg, %2:Msg), null), %3:Msg), null), f(u(%2:Msg, f(%4:Msg, null)), g(f(%5:Msg, %5:Msg), g(3, %6:Msg)))) X3:Msg --> g(%1:Msg, %2:Msg) X15:Msg --> null X16:Msg --> %3:Msg X14:Msg --> 2 X12:Msg --> %4:Msg X8:Msg --> %4:Msg X10:Msg --> %1:Msg X9:Msg --> %2:Msg X2:Msg --> %5:Msg X6:Msg --> %6:Msg Variant 114 rewrites: 451 Msg: g(f(g(g(g(%1:Msg, null), %2:Msg), %3:Msg), null), f(u(%2:Msg, f(%4:Msg, %2:Msg)), g(f(%5:Msg, %5:Msg), g(3, %6:Msg)))) X3:Msg --> g(%1:Msg, null) X15:Msg --> %2:Msg X16:Msg --> %3:Msg X14:Msg --> 2 X12:Msg --> %4:Msg X8:Msg --> %4:Msg X10:Msg --> %1:Msg X9:Msg --> null X2:Msg --> %5:Msg X6:Msg --> %6:Msg Variant 115 rewrites: 451 Msg: g(f(g(g(%1:Msg, u(%2:Msg, %3:Msg)), %4:Msg), u(g(%5:Msg, %1:Msg), g( %6:Msg, g(%7:Msg, u(%2:Msg, %10:Msg, f(%6:Msg, u(%2:Msg, %3:Msg))))))), f( u(%3:Msg, %10:Msg), g(f(%8:Msg, %8:Msg), g(3, %9:Msg)))) X3:Msg --> %1:Msg X15:Msg --> u(%2:Msg, %3:Msg) X16:Msg --> %4:Msg X14:Msg --> 2 X12:Msg --> %5:Msg X8:Msg --> %6:Msg X10:Msg --> %7:Msg X9:Msg --> u(%2:Msg, %10:Msg, f(%6:Msg, u(%2:Msg, %3:Msg))) X2:Msg --> %8:Msg X6:Msg --> %9:Msg Variant 116 rewrites: 451 Msg: g(f(g(g(%1:Msg, u(%2:Msg, %3:Msg)), %4:Msg), u(g(%5:Msg, %1:Msg), g( %6:Msg, g(%7:Msg, u(%2:Msg, f(%6:Msg, u(%2:Msg, %3:Msg))))))), f(%3:Msg, g( f(%8:Msg, %8:Msg), g(3, %9:Msg)))) X3:Msg --> %1:Msg X15:Msg --> u(%2:Msg, %3:Msg) X16:Msg --> %4:Msg X14:Msg --> 2 X12:Msg --> %5:Msg X8:Msg --> %6:Msg X10:Msg --> %7:Msg X9:Msg --> u(%2:Msg, f(%6:Msg, u(%2:Msg, %3:Msg))) X2:Msg --> %8:Msg X6:Msg --> %9:Msg Variant 117 rewrites: 451 Msg: g(f(g(g(%1:Msg, %2:Msg), %3:Msg), u(g(%4:Msg, %1:Msg), g(%5:Msg, g(%6:Msg, u(%2:Msg, f(%5:Msg, %2:Msg)))))), f(null, g(f(%7:Msg, %7:Msg), g(3, %8:Msg)))) X3:Msg --> %1:Msg X15:Msg --> %2:Msg X16:Msg --> %3:Msg X14:Msg --> 2 X12:Msg --> %4:Msg X8:Msg --> %5:Msg X10:Msg --> %6:Msg X9:Msg --> u(%2:Msg, f(%5:Msg, %2:Msg)) X2:Msg --> %7:Msg X6:Msg --> %8:Msg Variant 118 rewrites: 451 Msg: g(f(g(g(%2:Msg, %3:Msg), %4:Msg), u(g(%5:Msg, %2:Msg), g(%6:Msg, g(%7:Msg, u(%1:Msg, %3:Msg, f(%6:Msg, %3:Msg)))))), f(%1:Msg, g(f(%8:Msg, %8:Msg), g( 3, %9:Msg)))) X3:Msg --> %2:Msg X15:Msg --> %3:Msg X16:Msg --> %4:Msg X14:Msg --> 2 X12:Msg --> %5:Msg X8:Msg --> %6:Msg X10:Msg --> %7:Msg X9:Msg --> u(%1:Msg, %3:Msg, f(%6:Msg, %3:Msg)) X2:Msg --> %8:Msg X6:Msg --> %9:Msg Variant 119 rewrites: 451 Msg: g(f(g(g(%1:Msg, null), %2:Msg), u(g(%3:Msg, %1:Msg), g(%4:Msg, g(%5:Msg, u(%6:Msg, f(%4:Msg, null)))))), f(%6:Msg, g(f(%7:Msg, %7:Msg), g(3, %8:Msg)))) X3:Msg --> %1:Msg X15:Msg --> null X16:Msg --> %2:Msg X14:Msg --> 2 X12:Msg --> %3:Msg X8:Msg --> %4:Msg X10:Msg --> %5:Msg X9:Msg --> u(%6:Msg, f(%4:Msg, null)) X2:Msg --> %7:Msg X6:Msg --> %8:Msg Variant 120 rewrites: 451 Msg: g(f(u(2, %2:Msg), null), f(u(%8:Msg, %9:Msg, f(%3:Msg, u(%1:Msg, %9:Msg))), g(f(%4:Msg, %4:Msg), g(3, %5:Msg)))) X3:Msg --> g(%6:Msg, u(%1:Msg, %8:Msg)) X15:Msg --> u(%1:Msg, %9:Msg) X16:Msg --> %7:Msg X14:Msg --> u(%2:Msg, g(g(g(%6:Msg, u(%1:Msg, %8:Msg)), u(%1:Msg, %9:Msg)), %7:Msg)) X12:Msg --> %3:Msg X8:Msg --> %3:Msg X10:Msg --> %6:Msg X9:Msg --> u(%1:Msg, %8:Msg) X2:Msg --> %4:Msg X6:Msg --> %5:Msg Variant 121 rewrites: 451 Msg: g(f(u(2, %1:Msg), null), f(u(%8:Msg, f(%3:Msg, %2:Msg)), g(f(%4:Msg, %4:Msg), g(3, %5:Msg)))) X3:Msg --> g(%6:Msg, u(%2:Msg, %8:Msg)) X15:Msg --> %2:Msg X16:Msg --> %7:Msg X14:Msg --> u(%1:Msg, g(g(g(%6:Msg, u(%2:Msg, %8:Msg)), %2:Msg), %7:Msg)) X12:Msg --> %3:Msg X8:Msg --> %3:Msg X10:Msg --> %6:Msg X9:Msg --> u(%2:Msg, %8:Msg) X2:Msg --> %4:Msg X6:Msg --> %5:Msg Variant 122 rewrites: 451 Msg: g(f(u(2, %1:Msg), null), f(u(%8:Msg, f(%3:Msg, u(%2:Msg, %8:Msg))), g(f( %4:Msg, %4:Msg), g(3, %5:Msg)))) X3:Msg --> g(%6:Msg, %2:Msg) X15:Msg --> u(%2:Msg, %8:Msg) X16:Msg --> %7:Msg X14:Msg --> u(%1:Msg, g(g(g(%6:Msg, %2:Msg), u(%2:Msg, %8:Msg)), %7:Msg)) X12:Msg --> %3:Msg X8:Msg --> %3:Msg X10:Msg --> %6:Msg X9:Msg --> %2:Msg X2:Msg --> %4:Msg X6:Msg --> %5:Msg Variant 123 rewrites: 451 Msg: g(f(u(2, %1:Msg), null), f(f(%3:Msg, %2:Msg), g(f(%4:Msg, %4:Msg), g(3, %5:Msg)))) X3:Msg --> g(%6:Msg, %2:Msg) X15:Msg --> %2:Msg X16:Msg --> %7:Msg X14:Msg --> u(%1:Msg, g(g(g(%6:Msg, %2:Msg), %2:Msg), %7:Msg)) X12:Msg --> %3:Msg X8:Msg --> %3:Msg X10:Msg --> %6:Msg X9:Msg --> %2:Msg X2:Msg --> %4:Msg X6:Msg --> %5:Msg Variant 124 rewrites: 451 Msg: g(f(u(2, %1:Msg), null), f(u(%2:Msg, %8:Msg), g(f(%4:Msg, %4:Msg), g(3, %5:Msg)))) X3:Msg --> g(%6:Msg, u(%8:Msg, f(%3:Msg, %2:Msg))) X15:Msg --> %2:Msg X16:Msg --> %7:Msg X14:Msg --> u(%1:Msg, g(g(g(%6:Msg, u(%8:Msg, f(%3:Msg, %2:Msg))), %2:Msg), %7:Msg)) X12:Msg --> %3:Msg X8:Msg --> %3:Msg X10:Msg --> %6:Msg X9:Msg --> u(%8:Msg, f(%3:Msg, %2:Msg)) X2:Msg --> %4:Msg X6:Msg --> %5:Msg Variant 125 rewrites: 451 Msg: g(f(u(2, %1:Msg), null), f(%2:Msg, g(f(%4:Msg, %4:Msg), g(3, %5:Msg)))) X3:Msg --> g(%6:Msg, f(%3:Msg, %2:Msg)) X15:Msg --> %2:Msg X16:Msg --> %7:Msg X14:Msg --> u(%1:Msg, g(g(g(%6:Msg, f(%3:Msg, %2:Msg)), %2:Msg), %7:Msg)) X12:Msg --> %3:Msg X8:Msg --> %3:Msg X10:Msg --> %6:Msg X9:Msg --> f(%3:Msg, %2:Msg) X2:Msg --> %4:Msg X6:Msg --> %5:Msg Variant 126 rewrites: 451 Msg: g(f(u(2, %1:Msg), null), f(u(%2:Msg, f(%3:Msg, %2:Msg)), g(f(%4:Msg, %4:Msg), g(3, %5:Msg)))) X3:Msg --> g(%6:Msg, null) X15:Msg --> %2:Msg X16:Msg --> %7:Msg X14:Msg --> u(%1:Msg, g(g(g(%6:Msg, null), %2:Msg), %7:Msg)) X12:Msg --> %3:Msg X8:Msg --> %3:Msg X10:Msg --> %6:Msg X9:Msg --> null X2:Msg --> %4:Msg X6:Msg --> %5:Msg Variant 127 rewrites: 451 Msg: g(f(u(2, %1:Msg), null), f(u(%2:Msg, f(%3:Msg, null)), g(f(%4:Msg, %4:Msg), g(3, %5:Msg)))) X3:Msg --> g(%6:Msg, %2:Msg) X15:Msg --> null X16:Msg --> %7:Msg X14:Msg --> u(%1:Msg, g(g(g(%6:Msg, %2:Msg), null), %7:Msg)) X12:Msg --> %3:Msg X8:Msg --> %3:Msg X10:Msg --> %6:Msg X9:Msg --> %2:Msg X2:Msg --> %4:Msg X6:Msg --> %5:Msg Variant 128 rewrites: 451 Msg: g(f(u(2, %1:Msg), u(g(%2:Msg, %3:Msg), g(%4:Msg, g(%5:Msg, u(%6:Msg, %11:Msg, f(%4:Msg, u(%6:Msg, %7:Msg))))))), f(u(%7:Msg, %11:Msg), g(f( %8:Msg, %8:Msg), g(3, %9:Msg)))) X3:Msg --> %3:Msg X15:Msg --> u(%6:Msg, %7:Msg) X16:Msg --> %10:Msg X14:Msg --> u(%1:Msg, g(g(%3:Msg, u(%6:Msg, %7:Msg)), %10:Msg)) X12:Msg --> %2:Msg X8:Msg --> %4:Msg X10:Msg --> %5:Msg X9:Msg --> u(%6:Msg, %11:Msg, f(%4:Msg, u(%6:Msg, %7:Msg))) X2:Msg --> %8:Msg X6:Msg --> %9:Msg Variant 129 rewrites: 451 Msg: g(f(u(2, %1:Msg), u(g(%2:Msg, %3:Msg), g(%4:Msg, g(%5:Msg, u(%6:Msg, f( %4:Msg, u(%6:Msg, %7:Msg))))))), f(%7:Msg, g(f(%8:Msg, %8:Msg), g(3, %9:Msg)))) X3:Msg --> %3:Msg X15:Msg --> u(%6:Msg, %7:Msg) X16:Msg --> %10:Msg X14:Msg --> u(%1:Msg, g(g(%3:Msg, u(%6:Msg, %7:Msg)), %10:Msg)) X12:Msg --> %2:Msg X8:Msg --> %4:Msg X10:Msg --> %5:Msg X9:Msg --> u(%6:Msg, f(%4:Msg, u(%6:Msg, %7:Msg))) X2:Msg --> %8:Msg X6:Msg --> %9:Msg Variant 130 rewrites: 451 Msg: g(f(u(2, %1:Msg), u(g(%2:Msg, %3:Msg), g(%4:Msg, g(%5:Msg, u(%6:Msg, f( %4:Msg, %6:Msg)))))), f(null, g(f(%7:Msg, %7:Msg), g(3, %8:Msg)))) X3:Msg --> %3:Msg X15:Msg --> %6:Msg X16:Msg --> %9:Msg X14:Msg --> u(%1:Msg, g(g(%3:Msg, %6:Msg), %9:Msg)) X12:Msg --> %2:Msg X8:Msg --> %4:Msg X10:Msg --> %5:Msg X9:Msg --> u(%6:Msg, f(%4:Msg, %6:Msg)) X2:Msg --> %7:Msg X6:Msg --> %8:Msg Variant 131 rewrites: 451 Msg: g(f(u(2, %2:Msg), u(g(%3:Msg, %4:Msg), g(%5:Msg, g(%6:Msg, u(%1:Msg, %7:Msg, f(%5:Msg, %7:Msg)))))), f(%1:Msg, g(f(%8:Msg, %8:Msg), g(3, %9:Msg)))) X3:Msg --> %4:Msg X15:Msg --> %7:Msg X16:Msg --> %10:Msg X14:Msg --> u(%2:Msg, g(g(%4:Msg, %7:Msg), %10:Msg)) X12:Msg --> %3:Msg X8:Msg --> %5:Msg X10:Msg --> %6:Msg X9:Msg --> u(%1:Msg, %7:Msg, f(%5:Msg, %7:Msg)) X2:Msg --> %8:Msg X6:Msg --> %9:Msg Variant 132 rewrites: 451 Msg: g(f(u(2, %1:Msg), u(g(%2:Msg, %3:Msg), g(%4:Msg, g(%5:Msg, u(%6:Msg, f( %4:Msg, null)))))), f(%6:Msg, g(f(%7:Msg, %7:Msg), g(3, %8:Msg)))) X3:Msg --> %3:Msg X15:Msg --> null X16:Msg --> %9:Msg X14:Msg --> u(%1:Msg, g(g(%3:Msg, null), %9:Msg)) X12:Msg --> %2:Msg X8:Msg --> %4:Msg X10:Msg --> %5:Msg X9:Msg --> u(%6:Msg, f(%4:Msg, null)) X2:Msg --> %7:Msg X6:Msg --> %8:Msg Variant 133 rewrites: 451 Msg: g(f(2, null), f(u(%7:Msg, %8:Msg, f(%2:Msg, u(%1:Msg, %8:Msg))), g(f( %3:Msg, %3:Msg), g(3, %4:Msg)))) X3:Msg --> g(%5:Msg, u(%1:Msg, %7:Msg)) X15:Msg --> u(%1:Msg, %8:Msg) X16:Msg --> %6:Msg X14:Msg --> g(g(g(%5:Msg, u(%1:Msg, %7:Msg)), u(%1:Msg, %8:Msg)), %6:Msg) X12:Msg --> %2:Msg X8:Msg --> %2:Msg X10:Msg --> %5:Msg X9:Msg --> u(%1:Msg, %7:Msg) X2:Msg --> %3:Msg X6:Msg --> %4:Msg Variant 134 rewrites: 451 Msg: g(f(2, null), f(u(%7:Msg, f(%2:Msg, %1:Msg)), g(f(%3:Msg, %3:Msg), g(3, %4:Msg)))) X3:Msg --> g(%5:Msg, u(%1:Msg, %7:Msg)) X15:Msg --> %1:Msg X16:Msg --> %6:Msg X14:Msg --> g(g(g(%5:Msg, u(%1:Msg, %7:Msg)), %1:Msg), %6:Msg) X12:Msg --> %2:Msg X8:Msg --> %2:Msg X10:Msg --> %5:Msg X9:Msg --> u(%1:Msg, %7:Msg) X2:Msg --> %3:Msg X6:Msg --> %4:Msg Variant 135 rewrites: 451 Msg: g(f(2, null), f(u(%7:Msg, f(%2:Msg, u(%1:Msg, %7:Msg))), g(f(%3:Msg, %3:Msg), g(3, %4:Msg)))) X3:Msg --> g(%5:Msg, %1:Msg) X15:Msg --> u(%1:Msg, %7:Msg) X16:Msg --> %6:Msg X14:Msg --> g(g(g(%5:Msg, %1:Msg), u(%1:Msg, %7:Msg)), %6:Msg) X12:Msg --> %2:Msg X8:Msg --> %2:Msg X10:Msg --> %5:Msg X9:Msg --> %1:Msg X2:Msg --> %3:Msg X6:Msg --> %4:Msg Variant 136 rewrites: 451 Msg: g(f(2, null), f(f(%2:Msg, %1:Msg), g(f(%3:Msg, %3:Msg), g(3, %4:Msg)))) X3:Msg --> g(%5:Msg, %1:Msg) X15:Msg --> %1:Msg X16:Msg --> %6:Msg X14:Msg --> g(g(g(%5:Msg, %1:Msg), %1:Msg), %6:Msg) X12:Msg --> %2:Msg X8:Msg --> %2:Msg X10:Msg --> %5:Msg X9:Msg --> %1:Msg X2:Msg --> %3:Msg X6:Msg --> %4:Msg Variant 137 rewrites: 451 Msg: g(f(2, null), f(u(%1:Msg, %7:Msg), g(f(%3:Msg, %3:Msg), g(3, %4:Msg)))) X3:Msg --> g(%5:Msg, u(%7:Msg, f(%2:Msg, %1:Msg))) X15:Msg --> %1:Msg X16:Msg --> %6:Msg X14:Msg --> g(g(g(%5:Msg, u(%7:Msg, f(%2:Msg, %1:Msg))), %1:Msg), %6:Msg) X12:Msg --> %2:Msg X8:Msg --> %2:Msg X10:Msg --> %5:Msg X9:Msg --> u(%7:Msg, f(%2:Msg, %1:Msg)) X2:Msg --> %3:Msg X6:Msg --> %4:Msg Variant 138 rewrites: 451 Msg: g(f(2, null), f(%1:Msg, g(f(%3:Msg, %3:Msg), g(3, %4:Msg)))) X3:Msg --> g(%5:Msg, f(%2:Msg, %1:Msg)) X15:Msg --> %1:Msg X16:Msg --> %6:Msg X14:Msg --> g(g(g(%5:Msg, f(%2:Msg, %1:Msg)), %1:Msg), %6:Msg) X12:Msg --> %2:Msg X8:Msg --> %2:Msg X10:Msg --> %5:Msg X9:Msg --> f(%2:Msg, %1:Msg) X2:Msg --> %3:Msg X6:Msg --> %4:Msg Variant 139 rewrites: 451 Msg: g(f(2, null), f(u(%1:Msg, f(%2:Msg, %1:Msg)), g(f(%3:Msg, %3:Msg), g(3, %4:Msg)))) X3:Msg --> g(%5:Msg, null) X15:Msg --> %1:Msg X16:Msg --> %6:Msg X14:Msg --> g(g(g(%5:Msg, null), %1:Msg), %6:Msg) X12:Msg --> %2:Msg X8:Msg --> %2:Msg X10:Msg --> %5:Msg X9:Msg --> null X2:Msg --> %3:Msg X6:Msg --> %4:Msg Variant 140 rewrites: 451 Msg: g(f(2, null), f(u(%1:Msg, f(%2:Msg, null)), g(f(%3:Msg, %3:Msg), g(3, %4:Msg)))) X3:Msg --> g(%5:Msg, %1:Msg) X15:Msg --> null X16:Msg --> %6:Msg X14:Msg --> g(g(g(%5:Msg, %1:Msg), null), %6:Msg) X12:Msg --> %2:Msg X8:Msg --> %2:Msg X10:Msg --> %5:Msg X9:Msg --> %1:Msg X2:Msg --> %3:Msg X6:Msg --> %4:Msg Variant 141 rewrites: 451 Msg: g(f(2, u(g(%1:Msg, %2:Msg), g(%3:Msg, g(%4:Msg, u(%5:Msg, %10:Msg, f( %3:Msg, u(%5:Msg, %6:Msg))))))), f(u(%6:Msg, %10:Msg), g(f(%7:Msg, %7:Msg), g(3, %8:Msg)))) X3:Msg --> %2:Msg X15:Msg --> u(%5:Msg, %6:Msg) X16:Msg --> %9:Msg X14:Msg --> g(g(%2:Msg, u(%5:Msg, %6:Msg)), %9:Msg) X12:Msg --> %1:Msg X8:Msg --> %3:Msg X10:Msg --> %4:Msg X9:Msg --> u(%5:Msg, %10:Msg, f(%3:Msg, u(%5:Msg, %6:Msg))) X2:Msg --> %7:Msg X6:Msg --> %8:Msg Variant 142 rewrites: 451 Msg: g(f(2, u(g(%1:Msg, %2:Msg), g(%3:Msg, g(%4:Msg, u(%5:Msg, f(%3:Msg, u( %5:Msg, %6:Msg))))))), f(%6:Msg, g(f(%7:Msg, %7:Msg), g(3, %8:Msg)))) X3:Msg --> %2:Msg X15:Msg --> u(%5:Msg, %6:Msg) X16:Msg --> %9:Msg X14:Msg --> g(g(%2:Msg, u(%5:Msg, %6:Msg)), %9:Msg) X12:Msg --> %1:Msg X8:Msg --> %3:Msg X10:Msg --> %4:Msg X9:Msg --> u(%5:Msg, f(%3:Msg, u(%5:Msg, %6:Msg))) X2:Msg --> %7:Msg X6:Msg --> %8:Msg Variant 143 rewrites: 451 Msg: g(f(2, u(g(%1:Msg, %2:Msg), g(%3:Msg, g(%4:Msg, u(%5:Msg, f(%3:Msg, %5:Msg)))))), f(null, g(f(%6:Msg, %6:Msg), g(3, %7:Msg)))) X3:Msg --> %2:Msg X15:Msg --> %5:Msg X16:Msg --> %8:Msg X14:Msg --> g(g(%2:Msg, %5:Msg), %8:Msg) X12:Msg --> %1:Msg X8:Msg --> %3:Msg X10:Msg --> %4:Msg X9:Msg --> u(%5:Msg, f(%3:Msg, %5:Msg)) X2:Msg --> %6:Msg X6:Msg --> %7:Msg Variant 144 rewrites: 451 Msg: g(f(2, u(g(%2:Msg, %3:Msg), g(%4:Msg, g(%5:Msg, u(%1:Msg, %6:Msg, f( %4:Msg, %6:Msg)))))), f(%1:Msg, g(f(%7:Msg, %7:Msg), g(3, %8:Msg)))) X3:Msg --> %3:Msg X15:Msg --> %6:Msg X16:Msg --> %9:Msg X14:Msg --> g(g(%3:Msg, %6:Msg), %9:Msg) X12:Msg --> %2:Msg X8:Msg --> %4:Msg X10:Msg --> %5:Msg X9:Msg --> u(%1:Msg, %6:Msg, f(%4:Msg, %6:Msg)) X2:Msg --> %7:Msg X6:Msg --> %8:Msg Variant 145 rewrites: 451 Msg: g(f(2, u(g(%1:Msg, %2:Msg), g(%3:Msg, g(%4:Msg, u(%5:Msg, f(%3:Msg, null)))))), f(%5:Msg, g(f(%6:Msg, %6:Msg), g(3, %7:Msg)))) X3:Msg --> %2:Msg X15:Msg --> null X16:Msg --> %8:Msg X14:Msg --> g(g(%2:Msg, null), %8:Msg) X12:Msg --> %1:Msg X8:Msg --> %3:Msg X10:Msg --> %4:Msg X9:Msg --> u(%5:Msg, f(%3:Msg, null)) X2:Msg --> %6:Msg X6:Msg --> %7:Msg Variant 146 rewrites: 451 Msg: g(f(u(2, g(g(g(%2:Msg, u(%1:Msg, %8:Msg)), u(%1:Msg, %7:Msg)), %3:Msg)), null), f(u(%7:Msg, %8:Msg, f(%4:Msg, u(%1:Msg, %7:Msg))), g(f(%5:Msg, %5:Msg), g(3, %6:Msg)))) X3:Msg --> g(%2:Msg, u(%1:Msg, %8:Msg)) X15:Msg --> u(%1:Msg, %7:Msg) X16:Msg --> %3:Msg X14:Msg --> null X12:Msg --> %4:Msg X8:Msg --> %4:Msg X10:Msg --> %2:Msg X9:Msg --> u(%1:Msg, %8:Msg) X2:Msg --> %5:Msg X6:Msg --> %6:Msg Variant 147 rewrites: 451 Msg: g(f(u(2, g(g(g(%1:Msg, %2:Msg), u(%2:Msg, %7:Msg)), %3:Msg)), null), f(u( %7:Msg, f(%4:Msg, u(%2:Msg, %7:Msg))), g(f(%5:Msg, %5:Msg), g(3, %6:Msg)))) X3:Msg --> g(%1:Msg, %2:Msg) X15:Msg --> u(%2:Msg, %7:Msg) X16:Msg --> %3:Msg X14:Msg --> null X12:Msg --> %4:Msg X8:Msg --> %4:Msg X10:Msg --> %1:Msg X9:Msg --> %2:Msg X2:Msg --> %5:Msg X6:Msg --> %6:Msg Variant 148 rewrites: 451 Msg: g(f(u(2, g(g(g(%1:Msg, u(%2:Msg, %7:Msg)), %2:Msg), %3:Msg)), null), f(u( %7:Msg, f(%4:Msg, %2:Msg)), g(f(%5:Msg, %5:Msg), g(3, %6:Msg)))) X3:Msg --> g(%1:Msg, u(%2:Msg, %7:Msg)) X15:Msg --> %2:Msg X16:Msg --> %3:Msg X14:Msg --> null X12:Msg --> %4:Msg X8:Msg --> %4:Msg X10:Msg --> %1:Msg X9:Msg --> u(%2:Msg, %7:Msg) X2:Msg --> %5:Msg X6:Msg --> %6:Msg Variant 149 rewrites: 451 Msg: g(f(u(2, g(g(g(%1:Msg, %2:Msg), %2:Msg), %3:Msg)), null), f(f(%4:Msg, %2:Msg), g(f(%5:Msg, %5:Msg), g(3, %6:Msg)))) X3:Msg --> g(%1:Msg, %2:Msg) X15:Msg --> %2:Msg X16:Msg --> %3:Msg X14:Msg --> null X12:Msg --> %4:Msg X8:Msg --> %4:Msg X10:Msg --> %1:Msg X9:Msg --> %2:Msg X2:Msg --> %5:Msg X6:Msg --> %6:Msg Variant 150 rewrites: 451 Msg: g(f(u(2, g(g(g(%1:Msg, u(%7:Msg, f(%4:Msg, %2:Msg))), %2:Msg), %3:Msg)), null), f(u(%2:Msg, %7:Msg), g(f(%5:Msg, %5:Msg), g(3, %6:Msg)))) X3:Msg --> g(%1:Msg, u(%7:Msg, f(%4:Msg, %2:Msg))) X15:Msg --> %2:Msg X16:Msg --> %3:Msg X14:Msg --> null X12:Msg --> %4:Msg X8:Msg --> %4:Msg X10:Msg --> %1:Msg X9:Msg --> u(%7:Msg, f(%4:Msg, %2:Msg)) X2:Msg --> %5:Msg X6:Msg --> %6:Msg Variant 151 rewrites: 451 Msg: g(f(u(2, g(g(g(%1:Msg, f(%4:Msg, %2:Msg)), %2:Msg), %3:Msg)), null), f( %2:Msg, g(f(%5:Msg, %5:Msg), g(3, %6:Msg)))) X3:Msg --> g(%1:Msg, f(%4:Msg, %2:Msg)) X15:Msg --> %2:Msg X16:Msg --> %3:Msg X14:Msg --> null X12:Msg --> %4:Msg X8:Msg --> %4:Msg X10:Msg --> %1:Msg X9:Msg --> f(%4:Msg, %2:Msg) X2:Msg --> %5:Msg X6:Msg --> %6:Msg Variant 152 rewrites: 451 Msg: g(f(u(2, g(g(g(%1:Msg, %2:Msg), null), %3:Msg)), null), f(u(%2:Msg, f( %4:Msg, null)), g(f(%5:Msg, %5:Msg), g(3, %6:Msg)))) X3:Msg --> g(%1:Msg, %2:Msg) X15:Msg --> null X16:Msg --> %3:Msg X14:Msg --> null X12:Msg --> %4:Msg X8:Msg --> %4:Msg X10:Msg --> %1:Msg X9:Msg --> %2:Msg X2:Msg --> %5:Msg X6:Msg --> %6:Msg Variant 153 rewrites: 451 Msg: g(f(u(2, g(g(g(%1:Msg, null), %2:Msg), %3:Msg)), null), f(u(%2:Msg, f( %4:Msg, %2:Msg)), g(f(%5:Msg, %5:Msg), g(3, %6:Msg)))) X3:Msg --> g(%1:Msg, null) X15:Msg --> %2:Msg X16:Msg --> %3:Msg X14:Msg --> null X12:Msg --> %4:Msg X8:Msg --> %4:Msg X10:Msg --> %1:Msg X9:Msg --> null X2:Msg --> %5:Msg X6:Msg --> %6:Msg Variant 154 rewrites: 451 Msg: g(f(u(2, g(g(%1:Msg, u(%2:Msg, %3:Msg)), %4:Msg)), u(g(%5:Msg, %1:Msg), g( %6:Msg, g(%7:Msg, u(%2:Msg, %10:Msg, f(%6:Msg, u(%2:Msg, %3:Msg))))))), f( u(%3:Msg, %10:Msg), g(f(%8:Msg, %8:Msg), g(3, %9:Msg)))) X3:Msg --> %1:Msg X15:Msg --> u(%2:Msg, %3:Msg) X16:Msg --> %4:Msg X14:Msg --> null X12:Msg --> %5:Msg X8:Msg --> %6:Msg X10:Msg --> %7:Msg X9:Msg --> u(%2:Msg, %10:Msg, f(%6:Msg, u(%2:Msg, %3:Msg))) X2:Msg --> %8:Msg X6:Msg --> %9:Msg Variant 155 rewrites: 451 Msg: g(f(u(2, g(g(%1:Msg, u(%2:Msg, %3:Msg)), %4:Msg)), u(g(%5:Msg, %1:Msg), g( %6:Msg, g(%7:Msg, u(%2:Msg, f(%6:Msg, u(%2:Msg, %3:Msg))))))), f(%3:Msg, g( f(%8:Msg, %8:Msg), g(3, %9:Msg)))) X3:Msg --> %1:Msg X15:Msg --> u(%2:Msg, %3:Msg) X16:Msg --> %4:Msg X14:Msg --> null X12:Msg --> %5:Msg X8:Msg --> %6:Msg X10:Msg --> %7:Msg X9:Msg --> u(%2:Msg, f(%6:Msg, u(%2:Msg, %3:Msg))) X2:Msg --> %8:Msg X6:Msg --> %9:Msg Variant 156 rewrites: 451 Msg: g(f(u(2, g(g(%1:Msg, %2:Msg), %3:Msg)), u(g(%4:Msg, %1:Msg), g(%5:Msg, g( %6:Msg, u(%2:Msg, f(%5:Msg, %2:Msg)))))), f(null, g(f(%7:Msg, %7:Msg), g(3, %8:Msg)))) X3:Msg --> %1:Msg X15:Msg --> %2:Msg X16:Msg --> %3:Msg X14:Msg --> null X12:Msg --> %4:Msg X8:Msg --> %5:Msg X10:Msg --> %6:Msg X9:Msg --> u(%2:Msg, f(%5:Msg, %2:Msg)) X2:Msg --> %7:Msg X6:Msg --> %8:Msg Variant 157 rewrites: 451 Msg: g(f(u(2, g(g(%2:Msg, %3:Msg), %4:Msg)), u(g(%5:Msg, %2:Msg), g(%6:Msg, g( %7:Msg, u(%1:Msg, %3:Msg, f(%6:Msg, %3:Msg)))))), f(%1:Msg, g(f(%8:Msg, %8:Msg), g(3, %9:Msg)))) X3:Msg --> %2:Msg X15:Msg --> %3:Msg X16:Msg --> %4:Msg X14:Msg --> null X12:Msg --> %5:Msg X8:Msg --> %6:Msg X10:Msg --> %7:Msg X9:Msg --> u(%1:Msg, %3:Msg, f(%6:Msg, %3:Msg)) X2:Msg --> %8:Msg X6:Msg --> %9:Msg Variant 158 rewrites: 451 Msg: g(f(u(2, g(g(%1:Msg, null), %2:Msg)), u(g(%3:Msg, %1:Msg), g(%4:Msg, g( %5:Msg, u(%6:Msg, f(%4:Msg, null)))))), f(%6:Msg, g(f(%7:Msg, %7:Msg), g(3, %8:Msg)))) X3:Msg --> %1:Msg X15:Msg --> null X16:Msg --> %2:Msg X14:Msg --> null X12:Msg --> %3:Msg X8:Msg --> %4:Msg X10:Msg --> %5:Msg X9:Msg --> u(%6:Msg, f(%4:Msg, null)) X2:Msg --> %7:Msg X6:Msg --> %8:Msg Variant 159 rewrites: 451 Msg: g(f(u(2, %1:Msg, g(g(g(%2:Msg, u(%3:Msg, %9:Msg, f(%6:Msg, u(%3:Msg, %4:Msg)))), u(%3:Msg, %4:Msg)), %5:Msg)), null), f(u(%4:Msg, %9:Msg), g(f( %7:Msg, %7:Msg), g(3, %8:Msg)))) X3:Msg --> g(%2:Msg, u(%3:Msg, %9:Msg, f(%6:Msg, u(%3:Msg, %4:Msg)))) X15:Msg --> u(%3:Msg, %4:Msg) X16:Msg --> %5:Msg X14:Msg --> %1:Msg X12:Msg --> %6:Msg X8:Msg --> %6:Msg X10:Msg --> %2:Msg X9:Msg --> u(%3:Msg, %9:Msg, f(%6:Msg, u(%3:Msg, %4:Msg))) X2:Msg --> %7:Msg X6:Msg --> %8:Msg Variant 160 rewrites: 451 Msg: g(f(u(2, %1:Msg, g(g(g(%2:Msg, u(%3:Msg, f(%6:Msg, u(%3:Msg, %4:Msg)))), u(%3:Msg, %4:Msg)), %5:Msg)), null), f(%4:Msg, g(f(%7:Msg, %7:Msg), g(3, %8:Msg)))) X3:Msg --> g(%2:Msg, u(%3:Msg, f(%6:Msg, u(%3:Msg, %4:Msg)))) X15:Msg --> u(%3:Msg, %4:Msg) X16:Msg --> %5:Msg X14:Msg --> %1:Msg X12:Msg --> %6:Msg X8:Msg --> %6:Msg X10:Msg --> %2:Msg X9:Msg --> u(%3:Msg, f(%6:Msg, u(%3:Msg, %4:Msg))) X2:Msg --> %7:Msg X6:Msg --> %8:Msg Variant 161 rewrites: 451 Msg: g(f(u(2, %1:Msg, g(g(g(%2:Msg, u(%3:Msg, f(%5:Msg, %3:Msg))), %3:Msg), %4:Msg)), null), f(null, g(f(%6:Msg, %6:Msg), g(3, %7:Msg)))) X3:Msg --> g(%2:Msg, u(%3:Msg, f(%5:Msg, %3:Msg))) X15:Msg --> %3:Msg X16:Msg --> %4:Msg X14:Msg --> %1:Msg X12:Msg --> %5:Msg X8:Msg --> %5:Msg X10:Msg --> %2:Msg X9:Msg --> u(%3:Msg, f(%5:Msg, %3:Msg)) X2:Msg --> %6:Msg X6:Msg --> %7:Msg Variant 162 rewrites: 451 Msg: g(f(u(2, %2:Msg, g(g(g(%3:Msg, u(%1:Msg, %4:Msg, f(%6:Msg, %4:Msg))), %4:Msg), %5:Msg)), null), f(%1:Msg, g(f(%7:Msg, %7:Msg), g(3, %8:Msg)))) X3:Msg --> g(%3:Msg, u(%1:Msg, %4:Msg, f(%6:Msg, %4:Msg))) X15:Msg --> %4:Msg X16:Msg --> %5:Msg X14:Msg --> %2:Msg X12:Msg --> %6:Msg X8:Msg --> %6:Msg X10:Msg --> %3:Msg X9:Msg --> u(%1:Msg, %4:Msg, f(%6:Msg, %4:Msg)) X2:Msg --> %7:Msg X6:Msg --> %8:Msg Variant 163 rewrites: 451 Msg: g(f(u(2, %1:Msg, g(g(g(%2:Msg, u(%3:Msg, f(%4:Msg, null))), null), %5:Msg)), null), f(%3:Msg, g(f(%6:Msg, %6:Msg), g(3, %7:Msg)))) X3:Msg --> g(%2:Msg, u(%3:Msg, f(%4:Msg, null))) X15:Msg --> null X16:Msg --> %5:Msg X14:Msg --> %1:Msg X12:Msg --> %4:Msg X8:Msg --> %4:Msg X10:Msg --> %2:Msg X9:Msg --> u(%3:Msg, f(%4:Msg, null)) X2:Msg --> %6:Msg X6:Msg --> %7:Msg Variant 164 rewrites: 728 Msg: g(f(null, null), f(u(#7:Msg, #8:Msg, f(#2:Msg, u(#1:Msg, #8:Msg))), g(f( #3:Msg, #3:Msg), g(3, #4:Msg)))) X3:Msg --> g(#5:Msg, u(#1:Msg, #7:Msg)) X15:Msg --> u(#1:Msg, #8:Msg) X16:Msg --> #6:Msg X14:Msg --> u(2, g(g(g(#5:Msg, u(#1:Msg, #7:Msg)), u(#1:Msg, #8:Msg)), #6:Msg)) X12:Msg --> #2:Msg X8:Msg --> #2:Msg X10:Msg --> #5:Msg X9:Msg --> u(#1:Msg, #7:Msg) X2:Msg --> #3:Msg X6:Msg --> #4:Msg Variant 165 rewrites: 728 Msg: g(f(null, null), f(u(#7:Msg, f(#2:Msg, #1:Msg)), g(f(#3:Msg, #3:Msg), g(3, #4:Msg)))) X3:Msg --> g(#5:Msg, u(#1:Msg, #7:Msg)) X15:Msg --> #1:Msg X16:Msg --> #6:Msg X14:Msg --> u(2, g(g(g(#5:Msg, u(#1:Msg, #7:Msg)), #1:Msg), #6:Msg)) X12:Msg --> #2:Msg X8:Msg --> #2:Msg X10:Msg --> #5:Msg X9:Msg --> u(#1:Msg, #7:Msg) X2:Msg --> #3:Msg X6:Msg --> #4:Msg Variant 166 rewrites: 728 Msg: g(f(null, null), f(u(#7:Msg, f(#2:Msg, u(#1:Msg, #7:Msg))), g(f(#3:Msg, #3:Msg), g(3, #4:Msg)))) X3:Msg --> g(#5:Msg, #1:Msg) X15:Msg --> u(#1:Msg, #7:Msg) X16:Msg --> #6:Msg X14:Msg --> u(2, g(g(g(#5:Msg, #1:Msg), u(#1:Msg, #7:Msg)), #6:Msg)) X12:Msg --> #2:Msg X8:Msg --> #2:Msg X10:Msg --> #5:Msg X9:Msg --> #1:Msg X2:Msg --> #3:Msg X6:Msg --> #4:Msg Variant 167 rewrites: 728 Msg: g(f(null, null), f(f(#2:Msg, #1:Msg), g(f(#3:Msg, #3:Msg), g(3, #4:Msg)))) X3:Msg --> g(#5:Msg, #1:Msg) X15:Msg --> #1:Msg X16:Msg --> #6:Msg X14:Msg --> u(2, g(g(g(#5:Msg, #1:Msg), #1:Msg), #6:Msg)) X12:Msg --> #2:Msg X8:Msg --> #2:Msg X10:Msg --> #5:Msg X9:Msg --> #1:Msg X2:Msg --> #3:Msg X6:Msg --> #4:Msg Variant 168 rewrites: 728 Msg: g(f(null, null), f(u(#1:Msg, #7:Msg), g(f(#3:Msg, #3:Msg), g(3, #4:Msg)))) X3:Msg --> g(#5:Msg, u(#7:Msg, f(#2:Msg, #1:Msg))) X15:Msg --> #1:Msg X16:Msg --> #6:Msg X14:Msg --> u(2, g(g(g(#5:Msg, u(#7:Msg, f(#2:Msg, #1:Msg))), #1:Msg), #6:Msg)) X12:Msg --> #2:Msg X8:Msg --> #2:Msg X10:Msg --> #5:Msg X9:Msg --> u(#7:Msg, f(#2:Msg, #1:Msg)) X2:Msg --> #3:Msg X6:Msg --> #4:Msg Variant 169 rewrites: 728 Msg: g(f(null, null), f(#1:Msg, g(f(#3:Msg, #3:Msg), g(3, #4:Msg)))) X3:Msg --> g(#5:Msg, f(#2:Msg, #1:Msg)) X15:Msg --> #1:Msg X16:Msg --> #6:Msg X14:Msg --> u(2, g(g(g(#5:Msg, f(#2:Msg, #1:Msg)), #1:Msg), #6:Msg)) X12:Msg --> #2:Msg X8:Msg --> #2:Msg X10:Msg --> #5:Msg X9:Msg --> f(#2:Msg, #1:Msg) X2:Msg --> #3:Msg X6:Msg --> #4:Msg Variant 170 rewrites: 728 Msg: g(f(null, null), f(u(#1:Msg, f(#2:Msg, #1:Msg)), g(f(#3:Msg, #3:Msg), g(3, #4:Msg)))) X3:Msg --> g(#5:Msg, null) X15:Msg --> #1:Msg X16:Msg --> #6:Msg X14:Msg --> u(2, g(g(g(#5:Msg, null), #1:Msg), #6:Msg)) X12:Msg --> #2:Msg X8:Msg --> #2:Msg X10:Msg --> #5:Msg X9:Msg --> null X2:Msg --> #3:Msg X6:Msg --> #4:Msg Variant 171 rewrites: 728 Msg: g(f(null, null), f(u(#1:Msg, f(#2:Msg, null)), g(f(#3:Msg, #3:Msg), g(3, #4:Msg)))) X3:Msg --> g(#5:Msg, #1:Msg) X15:Msg --> null X16:Msg --> #6:Msg X14:Msg --> u(2, g(g(g(#5:Msg, #1:Msg), null), #6:Msg)) X12:Msg --> #2:Msg X8:Msg --> #2:Msg X10:Msg --> #5:Msg X9:Msg --> #1:Msg X2:Msg --> #3:Msg X6:Msg --> #4:Msg Variant 172 rewrites: 728 Msg: g(f(null, u(g(#1:Msg, #2:Msg), g(#3:Msg, g(#4:Msg, u(#5:Msg, #10:Msg, f( #3:Msg, u(#5:Msg, #6:Msg))))))), f(u(#6:Msg, #10:Msg), g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #2:Msg X15:Msg --> u(#5:Msg, #6:Msg) X16:Msg --> #9:Msg X14:Msg --> u(2, g(g(#2:Msg, u(#5:Msg, #6:Msg)), #9:Msg)) X12:Msg --> #1:Msg X8:Msg --> #3:Msg X10:Msg --> #4:Msg X9:Msg --> u(#5:Msg, #10:Msg, f(#3:Msg, u(#5:Msg, #6:Msg))) X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 173 rewrites: 728 Msg: g(f(null, u(g(#1:Msg, #2:Msg), g(#3:Msg, g(#4:Msg, u(#5:Msg, f(#3:Msg, u( #5:Msg, #6:Msg))))))), f(#6:Msg, g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #2:Msg X15:Msg --> u(#5:Msg, #6:Msg) X16:Msg --> #9:Msg X14:Msg --> u(2, g(g(#2:Msg, u(#5:Msg, #6:Msg)), #9:Msg)) X12:Msg --> #1:Msg X8:Msg --> #3:Msg X10:Msg --> #4:Msg X9:Msg --> u(#5:Msg, f(#3:Msg, u(#5:Msg, #6:Msg))) X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 174 rewrites: 728 Msg: g(f(null, u(g(#1:Msg, #2:Msg), g(#3:Msg, g(#4:Msg, u(#5:Msg, f(#3:Msg, #5:Msg)))))), f(null, g(f(#6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> #2:Msg X15:Msg --> #5:Msg X16:Msg --> #8:Msg X14:Msg --> u(2, g(g(#2:Msg, #5:Msg), #8:Msg)) X12:Msg --> #1:Msg X8:Msg --> #3:Msg X10:Msg --> #4:Msg X9:Msg --> u(#5:Msg, f(#3:Msg, #5:Msg)) X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 175 rewrites: 728 Msg: g(f(null, u(g(#2:Msg, #3:Msg), g(#4:Msg, g(#5:Msg, u(#1:Msg, #6:Msg, f( #4:Msg, #6:Msg)))))), f(#1:Msg, g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #3:Msg X15:Msg --> #6:Msg X16:Msg --> #9:Msg X14:Msg --> u(2, g(g(#3:Msg, #6:Msg), #9:Msg)) X12:Msg --> #2:Msg X8:Msg --> #4:Msg X10:Msg --> #5:Msg X9:Msg --> u(#1:Msg, #6:Msg, f(#4:Msg, #6:Msg)) X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 176 rewrites: 728 Msg: g(f(null, u(g(#1:Msg, #2:Msg), g(#3:Msg, g(#4:Msg, u(#5:Msg, f(#3:Msg, null)))))), f(#5:Msg, g(f(#6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> #2:Msg X15:Msg --> null X16:Msg --> #8:Msg X14:Msg --> u(2, g(g(#2:Msg, null), #8:Msg)) X12:Msg --> #1:Msg X8:Msg --> #3:Msg X10:Msg --> #4:Msg X9:Msg --> u(#5:Msg, f(#3:Msg, null)) X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 177 rewrites: 728 Msg: g(f(#2:Msg, null), f(u(#8:Msg, #9:Msg, f(#3:Msg, u(#1:Msg, #9:Msg))), g(f( #4:Msg, #4:Msg), g(3, #5:Msg)))) X3:Msg --> g(#6:Msg, u(#1:Msg, #8:Msg)) X15:Msg --> u(#1:Msg, #9:Msg) X16:Msg --> #7:Msg X14:Msg --> u(2, #2:Msg, g(g(g(#6:Msg, u(#1:Msg, #8:Msg)), u(#1:Msg, #9:Msg)), #7:Msg)) X12:Msg --> #3:Msg X8:Msg --> #3:Msg X10:Msg --> #6:Msg X9:Msg --> u(#1:Msg, #8:Msg) X2:Msg --> #4:Msg X6:Msg --> #5:Msg Variant 178 rewrites: 728 Msg: g(f(#1:Msg, null), f(u(#8:Msg, f(#3:Msg, #2:Msg)), g(f(#4:Msg, #4:Msg), g( 3, #5:Msg)))) X3:Msg --> g(#6:Msg, u(#2:Msg, #8:Msg)) X15:Msg --> #2:Msg X16:Msg --> #7:Msg X14:Msg --> u(2, #1:Msg, g(g(g(#6:Msg, u(#2:Msg, #8:Msg)), #2:Msg), #7:Msg)) X12:Msg --> #3:Msg X8:Msg --> #3:Msg X10:Msg --> #6:Msg X9:Msg --> u(#2:Msg, #8:Msg) X2:Msg --> #4:Msg X6:Msg --> #5:Msg Variant 179 rewrites: 728 Msg: g(f(#1:Msg, null), f(u(#8:Msg, f(#3:Msg, u(#2:Msg, #8:Msg))), g(f(#4:Msg, #4:Msg), g(3, #5:Msg)))) X3:Msg --> g(#6:Msg, #2:Msg) X15:Msg --> u(#2:Msg, #8:Msg) X16:Msg --> #7:Msg X14:Msg --> u(2, #1:Msg, g(g(g(#6:Msg, #2:Msg), u(#2:Msg, #8:Msg)), #7:Msg)) X12:Msg --> #3:Msg X8:Msg --> #3:Msg X10:Msg --> #6:Msg X9:Msg --> #2:Msg X2:Msg --> #4:Msg X6:Msg --> #5:Msg Variant 180 rewrites: 728 Msg: g(f(#1:Msg, null), f(f(#3:Msg, #2:Msg), g(f(#4:Msg, #4:Msg), g(3, #5:Msg)))) X3:Msg --> g(#6:Msg, #2:Msg) X15:Msg --> #2:Msg X16:Msg --> #7:Msg X14:Msg --> u(2, #1:Msg, g(g(g(#6:Msg, #2:Msg), #2:Msg), #7:Msg)) X12:Msg --> #3:Msg X8:Msg --> #3:Msg X10:Msg --> #6:Msg X9:Msg --> #2:Msg X2:Msg --> #4:Msg X6:Msg --> #5:Msg Variant 181 rewrites: 728 Msg: g(f(#1:Msg, null), f(u(#2:Msg, #8:Msg), g(f(#4:Msg, #4:Msg), g(3, #5:Msg)))) X3:Msg --> g(#6:Msg, u(#8:Msg, f(#3:Msg, #2:Msg))) X15:Msg --> #2:Msg X16:Msg --> #7:Msg X14:Msg --> u(2, #1:Msg, g(g(g(#6:Msg, u(#8:Msg, f(#3:Msg, #2:Msg))), #2:Msg), #7:Msg)) X12:Msg --> #3:Msg X8:Msg --> #3:Msg X10:Msg --> #6:Msg X9:Msg --> u(#8:Msg, f(#3:Msg, #2:Msg)) X2:Msg --> #4:Msg X6:Msg --> #5:Msg Variant 182 rewrites: 728 Msg: g(f(#1:Msg, null), f(#2:Msg, g(f(#4:Msg, #4:Msg), g(3, #5:Msg)))) X3:Msg --> g(#6:Msg, f(#3:Msg, #2:Msg)) X15:Msg --> #2:Msg X16:Msg --> #7:Msg X14:Msg --> u(2, #1:Msg, g(g(g(#6:Msg, f(#3:Msg, #2:Msg)), #2:Msg), #7:Msg)) X12:Msg --> #3:Msg X8:Msg --> #3:Msg X10:Msg --> #6:Msg X9:Msg --> f(#3:Msg, #2:Msg) X2:Msg --> #4:Msg X6:Msg --> #5:Msg Variant 183 rewrites: 728 Msg: g(f(#1:Msg, null), f(u(#2:Msg, f(#3:Msg, #2:Msg)), g(f(#4:Msg, #4:Msg), g( 3, #5:Msg)))) X3:Msg --> g(#6:Msg, null) X15:Msg --> #2:Msg X16:Msg --> #7:Msg X14:Msg --> u(2, #1:Msg, g(g(g(#6:Msg, null), #2:Msg), #7:Msg)) X12:Msg --> #3:Msg X8:Msg --> #3:Msg X10:Msg --> #6:Msg X9:Msg --> null X2:Msg --> #4:Msg X6:Msg --> #5:Msg Variant 184 rewrites: 728 Msg: g(f(#1:Msg, null), f(u(#2:Msg, f(#3:Msg, null)), g(f(#4:Msg, #4:Msg), g(3, #5:Msg)))) X3:Msg --> g(#6:Msg, #2:Msg) X15:Msg --> null X16:Msg --> #7:Msg X14:Msg --> u(2, #1:Msg, g(g(g(#6:Msg, #2:Msg), null), #7:Msg)) X12:Msg --> #3:Msg X8:Msg --> #3:Msg X10:Msg --> #6:Msg X9:Msg --> #2:Msg X2:Msg --> #4:Msg X6:Msg --> #5:Msg Variant 185 rewrites: 728 Msg: g(f(#1:Msg, u(g(#2:Msg, #3:Msg), g(#4:Msg, g(#5:Msg, u(#6:Msg, #11:Msg, f( #4:Msg, u(#6:Msg, #7:Msg))))))), f(u(#7:Msg, #11:Msg), g(f(#8:Msg, #8:Msg), g(3, #9:Msg)))) X3:Msg --> #3:Msg X15:Msg --> u(#6:Msg, #7:Msg) X16:Msg --> #10:Msg X14:Msg --> u(2, #1:Msg, g(g(#3:Msg, u(#6:Msg, #7:Msg)), #10:Msg)) X12:Msg --> #2:Msg X8:Msg --> #4:Msg X10:Msg --> #5:Msg X9:Msg --> u(#6:Msg, #11:Msg, f(#4:Msg, u(#6:Msg, #7:Msg))) X2:Msg --> #8:Msg X6:Msg --> #9:Msg Variant 186 rewrites: 728 Msg: g(f(#1:Msg, u(g(#2:Msg, #3:Msg), g(#4:Msg, g(#5:Msg, u(#6:Msg, f(#4:Msg, u(#6:Msg, #7:Msg))))))), f(#7:Msg, g(f(#8:Msg, #8:Msg), g(3, #9:Msg)))) X3:Msg --> #3:Msg X15:Msg --> u(#6:Msg, #7:Msg) X16:Msg --> #10:Msg X14:Msg --> u(2, #1:Msg, g(g(#3:Msg, u(#6:Msg, #7:Msg)), #10:Msg)) X12:Msg --> #2:Msg X8:Msg --> #4:Msg X10:Msg --> #5:Msg X9:Msg --> u(#6:Msg, f(#4:Msg, u(#6:Msg, #7:Msg))) X2:Msg --> #8:Msg X6:Msg --> #9:Msg Variant 187 rewrites: 728 Msg: g(f(#1:Msg, u(g(#2:Msg, #3:Msg), g(#4:Msg, g(#5:Msg, u(#6:Msg, f(#4:Msg, #6:Msg)))))), f(null, g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #3:Msg X15:Msg --> #6:Msg X16:Msg --> #9:Msg X14:Msg --> u(2, #1:Msg, g(g(#3:Msg, #6:Msg), #9:Msg)) X12:Msg --> #2:Msg X8:Msg --> #4:Msg X10:Msg --> #5:Msg X9:Msg --> u(#6:Msg, f(#4:Msg, #6:Msg)) X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 188 rewrites: 728 Msg: g(f(#2:Msg, u(g(#3:Msg, #4:Msg), g(#5:Msg, g(#6:Msg, u(#1:Msg, #7:Msg, f( #5:Msg, #7:Msg)))))), f(#1:Msg, g(f(#8:Msg, #8:Msg), g(3, #9:Msg)))) X3:Msg --> #4:Msg X15:Msg --> #7:Msg X16:Msg --> #10:Msg X14:Msg --> u(2, #2:Msg, g(g(#4:Msg, #7:Msg), #10:Msg)) X12:Msg --> #3:Msg X8:Msg --> #5:Msg X10:Msg --> #6:Msg X9:Msg --> u(#1:Msg, #7:Msg, f(#5:Msg, #7:Msg)) X2:Msg --> #8:Msg X6:Msg --> #9:Msg Variant 189 rewrites: 728 Msg: g(f(#1:Msg, u(g(#2:Msg, #3:Msg), g(#4:Msg, g(#5:Msg, u(#6:Msg, f(#4:Msg, null)))))), f(#6:Msg, g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> #3:Msg X15:Msg --> null X16:Msg --> #9:Msg X14:Msg --> u(2, #1:Msg, g(g(#3:Msg, null), #9:Msg)) X12:Msg --> #2:Msg X8:Msg --> #4:Msg X10:Msg --> #5:Msg X9:Msg --> u(#6:Msg, f(#4:Msg, null)) X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 190 rewrites: 728 Msg: g(f(u(#1:Msg, g(g(g(#2:Msg, u(#3:Msg, #9:Msg, f(#6:Msg, u(#3:Msg, #4:Msg)))), u(#3:Msg, #4:Msg)), #5:Msg)), null), f(u(#4:Msg, #9:Msg), g(f( #7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> g(#2:Msg, u(#3:Msg, #9:Msg, f(#6:Msg, u(#3:Msg, #4:Msg)))) X15:Msg --> u(#3:Msg, #4:Msg) X16:Msg --> #5:Msg X14:Msg --> u(2, #1:Msg) X12:Msg --> #6:Msg X8:Msg --> #6:Msg X10:Msg --> #2:Msg X9:Msg --> u(#3:Msg, #9:Msg, f(#6:Msg, u(#3:Msg, #4:Msg))) X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 191 rewrites: 728 Msg: g(f(u(#1:Msg, g(g(g(#2:Msg, u(#3:Msg, f(#6:Msg, u(#3:Msg, #4:Msg)))), u( #3:Msg, #4:Msg)), #5:Msg)), null), f(#4:Msg, g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> g(#2:Msg, u(#3:Msg, f(#6:Msg, u(#3:Msg, #4:Msg)))) X15:Msg --> u(#3:Msg, #4:Msg) X16:Msg --> #5:Msg X14:Msg --> u(2, #1:Msg) X12:Msg --> #6:Msg X8:Msg --> #6:Msg X10:Msg --> #2:Msg X9:Msg --> u(#3:Msg, f(#6:Msg, u(#3:Msg, #4:Msg))) X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 192 rewrites: 728 Msg: g(f(u(#1:Msg, g(g(g(#2:Msg, u(#3:Msg, f(#5:Msg, #3:Msg))), #3:Msg), #4:Msg)), null), f(null, g(f(#6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> g(#2:Msg, u(#3:Msg, f(#5:Msg, #3:Msg))) X15:Msg --> #3:Msg X16:Msg --> #4:Msg X14:Msg --> u(2, #1:Msg) X12:Msg --> #5:Msg X8:Msg --> #5:Msg X10:Msg --> #2:Msg X9:Msg --> u(#3:Msg, f(#5:Msg, #3:Msg)) X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 193 rewrites: 728 Msg: g(f(u(#2:Msg, g(g(g(#3:Msg, u(#1:Msg, #4:Msg, f(#6:Msg, #4:Msg))), #4:Msg), #5:Msg)), null), f(#1:Msg, g(f(#7:Msg, #7:Msg), g(3, #8:Msg)))) X3:Msg --> g(#3:Msg, u(#1:Msg, #4:Msg, f(#6:Msg, #4:Msg))) X15:Msg --> #4:Msg X16:Msg --> #5:Msg X14:Msg --> u(2, #2:Msg) X12:Msg --> #6:Msg X8:Msg --> #6:Msg X10:Msg --> #3:Msg X9:Msg --> u(#1:Msg, #4:Msg, f(#6:Msg, #4:Msg)) X2:Msg --> #7:Msg X6:Msg --> #8:Msg Variant 194 rewrites: 728 Msg: g(f(u(#1:Msg, g(g(g(#2:Msg, u(#3:Msg, f(#4:Msg, null))), null), #5:Msg)), null), f(#3:Msg, g(f(#6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> g(#2:Msg, u(#3:Msg, f(#4:Msg, null))) X15:Msg --> null X16:Msg --> #5:Msg X14:Msg --> u(2, #1:Msg) X12:Msg --> #4:Msg X8:Msg --> #4:Msg X10:Msg --> #2:Msg X9:Msg --> u(#3:Msg, f(#4:Msg, null)) X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 195 rewrites: 728 Msg: g(f(g(g(g(#1:Msg, u(#2:Msg, #8:Msg, f(#5:Msg, u(#2:Msg, #3:Msg)))), u( #2:Msg, #3:Msg)), #4:Msg), null), f(u(#3:Msg, #8:Msg), g(f(#6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> g(#1:Msg, u(#2:Msg, #8:Msg, f(#5:Msg, u(#2:Msg, #3:Msg)))) X15:Msg --> u(#2:Msg, #3:Msg) X16:Msg --> #4:Msg X14:Msg --> 2 X12:Msg --> #5:Msg X8:Msg --> #5:Msg X10:Msg --> #1:Msg X9:Msg --> u(#2:Msg, #8:Msg, f(#5:Msg, u(#2:Msg, #3:Msg))) X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 196 rewrites: 728 Msg: g(f(g(g(g(#1:Msg, u(#2:Msg, f(#5:Msg, u(#2:Msg, #3:Msg)))), u(#2:Msg, #3:Msg)), #4:Msg), null), f(#3:Msg, g(f(#6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> g(#1:Msg, u(#2:Msg, f(#5:Msg, u(#2:Msg, #3:Msg)))) X15:Msg --> u(#2:Msg, #3:Msg) X16:Msg --> #4:Msg X14:Msg --> 2 X12:Msg --> #5:Msg X8:Msg --> #5:Msg X10:Msg --> #1:Msg X9:Msg --> u(#2:Msg, f(#5:Msg, u(#2:Msg, #3:Msg))) X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 197 rewrites: 728 Msg: g(f(g(g(g(#1:Msg, u(#2:Msg, f(#4:Msg, #2:Msg))), #2:Msg), #3:Msg), null), f(null, g(f(#5:Msg, #5:Msg), g(3, #6:Msg)))) X3:Msg --> g(#1:Msg, u(#2:Msg, f(#4:Msg, #2:Msg))) X15:Msg --> #2:Msg X16:Msg --> #3:Msg X14:Msg --> 2 X12:Msg --> #4:Msg X8:Msg --> #4:Msg X10:Msg --> #1:Msg X9:Msg --> u(#2:Msg, f(#4:Msg, #2:Msg)) X2:Msg --> #5:Msg X6:Msg --> #6:Msg Variant 198 rewrites: 728 Msg: g(f(g(g(g(#2:Msg, u(#1:Msg, #3:Msg, f(#5:Msg, #3:Msg))), #3:Msg), #4:Msg), null), f(#1:Msg, g(f(#6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> g(#2:Msg, u(#1:Msg, #3:Msg, f(#5:Msg, #3:Msg))) X15:Msg --> #3:Msg X16:Msg --> #4:Msg X14:Msg --> 2 X12:Msg --> #5:Msg X8:Msg --> #5:Msg X10:Msg --> #2:Msg X9:Msg --> u(#1:Msg, #3:Msg, f(#5:Msg, #3:Msg)) X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 199 rewrites: 728 Msg: g(f(g(g(g(#1:Msg, u(#2:Msg, f(#3:Msg, null))), null), #4:Msg), null), f( #2:Msg, g(f(#5:Msg, #5:Msg), g(3, #6:Msg)))) X3:Msg --> g(#1:Msg, u(#2:Msg, f(#3:Msg, null))) X15:Msg --> null X16:Msg --> #4:Msg X14:Msg --> 2 X12:Msg --> #3:Msg X8:Msg --> #3:Msg X10:Msg --> #1:Msg X9:Msg --> u(#2:Msg, f(#3:Msg, null)) X2:Msg --> #5:Msg X6:Msg --> #6:Msg Variant 200 rewrites: 728 Msg: g(f(u(2, #1:Msg), null), f(u(#2:Msg, #9:Msg), g(f(#5:Msg, #5:Msg), g(3, #6:Msg)))) X3:Msg --> g(#7:Msg, u(#4:Msg, #9:Msg, f(#3:Msg, u(#2:Msg, #4:Msg)))) X15:Msg --> u(#2:Msg, #4:Msg) X16:Msg --> #8:Msg X14:Msg --> u(#1:Msg, g(g(g(#7:Msg, u(#4:Msg, #9:Msg, f(#3:Msg, u(#2:Msg, #4:Msg)))), u(#2:Msg, #4:Msg)), #8:Msg)) X12:Msg --> #3:Msg X8:Msg --> #3:Msg X10:Msg --> #7:Msg X9:Msg --> u(#4:Msg, #9:Msg, f(#3:Msg, u(#2:Msg, #4:Msg))) X2:Msg --> #5:Msg X6:Msg --> #6:Msg Variant 201 rewrites: 728 Msg: g(f(u(2, #1:Msg), null), f(#2:Msg, g(f(#5:Msg, #5:Msg), g(3, #6:Msg)))) X3:Msg --> g(#7:Msg, u(#4:Msg, f(#3:Msg, u(#2:Msg, #4:Msg)))) X15:Msg --> u(#2:Msg, #4:Msg) X16:Msg --> #8:Msg X14:Msg --> u(#1:Msg, g(g(g(#7:Msg, u(#4:Msg, f(#3:Msg, u(#2:Msg, #4:Msg)))), u(#2:Msg, #4:Msg)), #8:Msg)) X12:Msg --> #3:Msg X8:Msg --> #3:Msg X10:Msg --> #7:Msg X9:Msg --> u(#4:Msg, f(#3:Msg, u(#2:Msg, #4:Msg))) X2:Msg --> #5:Msg X6:Msg --> #6:Msg Variant 202 rewrites: 728 Msg: g(f(u(2, #1:Msg), null), f(null, g(f(#4:Msg, #4:Msg), g(3, #5:Msg)))) X3:Msg --> g(#6:Msg, u(#3:Msg, f(#2:Msg, #3:Msg))) X15:Msg --> #3:Msg X16:Msg --> #7:Msg X14:Msg --> u(#1:Msg, g(g(g(#6:Msg, u(#3:Msg, f(#2:Msg, #3:Msg))), #3:Msg), #7:Msg)) X12:Msg --> #2:Msg X8:Msg --> #2:Msg X10:Msg --> #6:Msg X9:Msg --> u(#3:Msg, f(#2:Msg, #3:Msg)) X2:Msg --> #4:Msg X6:Msg --> #5:Msg Variant 203 rewrites: 728 Msg: g(f(u(2, #2:Msg), null), f(#1:Msg, g(f(#5:Msg, #5:Msg), g(3, #6:Msg)))) X3:Msg --> g(#7:Msg, u(#1:Msg, #4:Msg, f(#3:Msg, #4:Msg))) X15:Msg --> #4:Msg X16:Msg --> #8:Msg X14:Msg --> u(#2:Msg, g(g(g(#7:Msg, u(#1:Msg, #4:Msg, f(#3:Msg, #4:Msg))), #4:Msg), #8:Msg)) X12:Msg --> #3:Msg X8:Msg --> #3:Msg X10:Msg --> #7:Msg X9:Msg --> u(#1:Msg, #4:Msg, f(#3:Msg, #4:Msg)) X2:Msg --> #5:Msg X6:Msg --> #6:Msg Variant 204 rewrites: 728 Msg: g(f(u(2, #1:Msg), null), f(#2:Msg, g(f(#3:Msg, #3:Msg), g(3, #4:Msg)))) X3:Msg --> g(#5:Msg, u(#2:Msg, f(#6:Msg, null))) X15:Msg --> null X16:Msg --> #7:Msg X14:Msg --> u(#1:Msg, g(g(g(#5:Msg, u(#2:Msg, f(#6:Msg, null))), null), #7:Msg)) X12:Msg --> #6:Msg X8:Msg --> #6:Msg X10:Msg --> #5:Msg X9:Msg --> u(#2:Msg, f(#6:Msg, null)) X2:Msg --> #3:Msg X6:Msg --> #4:Msg Variant 205 rewrites: 728 Msg: g(f(2, null), f(u(#1:Msg, #8:Msg), g(f(#4:Msg, #4:Msg), g(3, #5:Msg)))) X3:Msg --> g(#6:Msg, u(#3:Msg, #8:Msg, f(#2:Msg, u(#1:Msg, #3:Msg)))) X15:Msg --> u(#1:Msg, #3:Msg) X16:Msg --> #7:Msg X14:Msg --> g(g(g(#6:Msg, u(#3:Msg, #8:Msg, f(#2:Msg, u(#1:Msg, #3:Msg)))), u( #1:Msg, #3:Msg)), #7:Msg) X12:Msg --> #2:Msg X8:Msg --> #2:Msg X10:Msg --> #6:Msg X9:Msg --> u(#3:Msg, #8:Msg, f(#2:Msg, u(#1:Msg, #3:Msg))) X2:Msg --> #4:Msg X6:Msg --> #5:Msg Variant 206 rewrites: 728 Msg: g(f(2, null), f(#1:Msg, g(f(#4:Msg, #4:Msg), g(3, #5:Msg)))) X3:Msg --> g(#6:Msg, u(#3:Msg, f(#2:Msg, u(#1:Msg, #3:Msg)))) X15:Msg --> u(#1:Msg, #3:Msg) X16:Msg --> #7:Msg X14:Msg --> g(g(g(#6:Msg, u(#3:Msg, f(#2:Msg, u(#1:Msg, #3:Msg)))), u(#1:Msg, #3:Msg)), #7:Msg) X12:Msg --> #2:Msg X8:Msg --> #2:Msg X10:Msg --> #6:Msg X9:Msg --> u(#3:Msg, f(#2:Msg, u(#1:Msg, #3:Msg))) X2:Msg --> #4:Msg X6:Msg --> #5:Msg Variant 207 rewrites: 728 Msg: g(f(2, null), f(null, g(f(#3:Msg, #3:Msg), g(3, #4:Msg)))) X3:Msg --> g(#5:Msg, u(#2:Msg, f(#1:Msg, #2:Msg))) X15:Msg --> #2:Msg X16:Msg --> #6:Msg X14:Msg --> g(g(g(#5:Msg, u(#2:Msg, f(#1:Msg, #2:Msg))), #2:Msg), #6:Msg) X12:Msg --> #1:Msg X8:Msg --> #1:Msg X10:Msg --> #5:Msg X9:Msg --> u(#2:Msg, f(#1:Msg, #2:Msg)) X2:Msg --> #3:Msg X6:Msg --> #4:Msg Variant 208 rewrites: 728 Msg: g(f(2, null), f(#1:Msg, g(f(#4:Msg, #4:Msg), g(3, #5:Msg)))) X3:Msg --> g(#6:Msg, u(#1:Msg, #3:Msg, f(#2:Msg, #3:Msg))) X15:Msg --> #3:Msg X16:Msg --> #7:Msg X14:Msg --> g(g(g(#6:Msg, u(#1:Msg, #3:Msg, f(#2:Msg, #3:Msg))), #3:Msg), #7:Msg) X12:Msg --> #2:Msg X8:Msg --> #2:Msg X10:Msg --> #6:Msg X9:Msg --> u(#1:Msg, #3:Msg, f(#2:Msg, #3:Msg)) X2:Msg --> #4:Msg X6:Msg --> #5:Msg Variant 209 rewrites: 728 Msg: g(f(2, null), f(#1:Msg, g(f(#2:Msg, #2:Msg), g(3, #3:Msg)))) X3:Msg --> g(#4:Msg, u(#1:Msg, f(#5:Msg, null))) X15:Msg --> null X16:Msg --> #6:Msg X14:Msg --> g(g(g(#4:Msg, u(#1:Msg, f(#5:Msg, null))), null), #6:Msg) X12:Msg --> #5:Msg X8:Msg --> #5:Msg X10:Msg --> #4:Msg X9:Msg --> u(#1:Msg, f(#5:Msg, null)) X2:Msg --> #2:Msg X6:Msg --> #3:Msg Variant 210 rewrites: 728 Msg: g(f(u(2, g(g(g(#1:Msg, u(#2:Msg, #8:Msg, f(#5:Msg, u(#2:Msg, #3:Msg)))), u(#2:Msg, #3:Msg)), #4:Msg)), null), f(u(#3:Msg, #8:Msg), g(f(#6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> g(#1:Msg, u(#2:Msg, #8:Msg, f(#5:Msg, u(#2:Msg, #3:Msg)))) X15:Msg --> u(#2:Msg, #3:Msg) X16:Msg --> #4:Msg X14:Msg --> null X12:Msg --> #5:Msg X8:Msg --> #5:Msg X10:Msg --> #1:Msg X9:Msg --> u(#2:Msg, #8:Msg, f(#5:Msg, u(#2:Msg, #3:Msg))) X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 211 rewrites: 728 Msg: g(f(u(2, g(g(g(#1:Msg, u(#2:Msg, f(#5:Msg, u(#2:Msg, #3:Msg)))), u(#2:Msg, #3:Msg)), #4:Msg)), null), f(#3:Msg, g(f(#6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> g(#1:Msg, u(#2:Msg, f(#5:Msg, u(#2:Msg, #3:Msg)))) X15:Msg --> u(#2:Msg, #3:Msg) X16:Msg --> #4:Msg X14:Msg --> null X12:Msg --> #5:Msg X8:Msg --> #5:Msg X10:Msg --> #1:Msg X9:Msg --> u(#2:Msg, f(#5:Msg, u(#2:Msg, #3:Msg))) X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 212 rewrites: 728 Msg: g(f(u(2, g(g(g(#1:Msg, u(#2:Msg, f(#4:Msg, #2:Msg))), #2:Msg), #3:Msg)), null), f(null, g(f(#5:Msg, #5:Msg), g(3, #6:Msg)))) X3:Msg --> g(#1:Msg, u(#2:Msg, f(#4:Msg, #2:Msg))) X15:Msg --> #2:Msg X16:Msg --> #3:Msg X14:Msg --> null X12:Msg --> #4:Msg X8:Msg --> #4:Msg X10:Msg --> #1:Msg X9:Msg --> u(#2:Msg, f(#4:Msg, #2:Msg)) X2:Msg --> #5:Msg X6:Msg --> #6:Msg Variant 213 rewrites: 728 Msg: g(f(u(2, g(g(g(#2:Msg, u(#1:Msg, #3:Msg, f(#5:Msg, #3:Msg))), #3:Msg), #4:Msg)), null), f(#1:Msg, g(f(#6:Msg, #6:Msg), g(3, #7:Msg)))) X3:Msg --> g(#2:Msg, u(#1:Msg, #3:Msg, f(#5:Msg, #3:Msg))) X15:Msg --> #3:Msg X16:Msg --> #4:Msg X14:Msg --> null X12:Msg --> #5:Msg X8:Msg --> #5:Msg X10:Msg --> #2:Msg X9:Msg --> u(#1:Msg, #3:Msg, f(#5:Msg, #3:Msg)) X2:Msg --> #6:Msg X6:Msg --> #7:Msg Variant 214 rewrites: 728 Msg: g(f(u(2, g(g(g(#1:Msg, u(#2:Msg, f(#3:Msg, null))), null), #4:Msg)), null), f(#2:Msg, g(f(#5:Msg, #5:Msg), g(3, #6:Msg)))) X3:Msg --> g(#1:Msg, u(#2:Msg, f(#3:Msg, null))) X15:Msg --> null X16:Msg --> #4:Msg X14:Msg --> null X12:Msg --> #3:Msg X8:Msg --> #3:Msg X10:Msg --> #1:Msg X9:Msg --> u(#2:Msg, f(#3:Msg, null)) X2:Msg --> #5:Msg X6:Msg --> #6:Msg Variant 215 rewrites: 820 Msg: g(f(null, null), f(u(%1:Msg, %8:Msg), g(f(%4:Msg, %4:Msg), g(3, %5:Msg)))) X3:Msg --> g(%6:Msg, u(%3:Msg, %8:Msg, f(%2:Msg, u(%1:Msg, %3:Msg)))) X15:Msg --> u(%1:Msg, %3:Msg) X16:Msg --> %7:Msg X14:Msg --> u(2, g(g(g(%6:Msg, u(%3:Msg, %8:Msg, f(%2:Msg, u(%1:Msg, %3:Msg)))), u(%1:Msg, %3:Msg)), %7:Msg)) X12:Msg --> %2:Msg X8:Msg --> %2:Msg X10:Msg --> %6:Msg X9:Msg --> u(%3:Msg, %8:Msg, f(%2:Msg, u(%1:Msg, %3:Msg))) X2:Msg --> %4:Msg X6:Msg --> %5:Msg Variant 216 rewrites: 820 Msg: g(f(null, null), f(%1:Msg, g(f(%4:Msg, %4:Msg), g(3, %5:Msg)))) X3:Msg --> g(%6:Msg, u(%3:Msg, f(%2:Msg, u(%1:Msg, %3:Msg)))) X15:Msg --> u(%1:Msg, %3:Msg) X16:Msg --> %7:Msg X14:Msg --> u(2, g(g(g(%6:Msg, u(%3:Msg, f(%2:Msg, u(%1:Msg, %3:Msg)))), u( %1:Msg, %3:Msg)), %7:Msg)) X12:Msg --> %2:Msg X8:Msg --> %2:Msg X10:Msg --> %6:Msg X9:Msg --> u(%3:Msg, f(%2:Msg, u(%1:Msg, %3:Msg))) X2:Msg --> %4:Msg X6:Msg --> %5:Msg Variant 217 rewrites: 820 Msg: g(f(null, null), f(null, g(f(%3:Msg, %3:Msg), g(3, %4:Msg)))) X3:Msg --> g(%5:Msg, u(%2:Msg, f(%1:Msg, %2:Msg))) X15:Msg --> %2:Msg X16:Msg --> %6:Msg X14:Msg --> u(2, g(g(g(%5:Msg, u(%2:Msg, f(%1:Msg, %2:Msg))), %2:Msg), %6:Msg)) X12:Msg --> %1:Msg X8:Msg --> %1:Msg X10:Msg --> %5:Msg X9:Msg --> u(%2:Msg, f(%1:Msg, %2:Msg)) X2:Msg --> %3:Msg X6:Msg --> %4:Msg Variant 218 rewrites: 820 Msg: g(f(null, null), f(%1:Msg, g(f(%4:Msg, %4:Msg), g(3, %5:Msg)))) X3:Msg --> g(%6:Msg, u(%1:Msg, %3:Msg, f(%2:Msg, %3:Msg))) X15:Msg --> %3:Msg X16:Msg --> %7:Msg X14:Msg --> u(2, g(g(g(%6:Msg, u(%1:Msg, %3:Msg, f(%2:Msg, %3:Msg))), %3:Msg), %7:Msg)) X12:Msg --> %2:Msg X8:Msg --> %2:Msg X10:Msg --> %6:Msg X9:Msg --> u(%1:Msg, %3:Msg, f(%2:Msg, %3:Msg)) X2:Msg --> %4:Msg X6:Msg --> %5:Msg Variant 219 rewrites: 820 Msg: g(f(null, null), f(%1:Msg, g(f(%2:Msg, %2:Msg), g(3, %3:Msg)))) X3:Msg --> g(%4:Msg, u(%1:Msg, f(%5:Msg, null))) X15:Msg --> null X16:Msg --> %6:Msg X14:Msg --> u(2, g(g(g(%4:Msg, u(%1:Msg, f(%5:Msg, null))), null), %6:Msg)) X12:Msg --> %5:Msg X8:Msg --> %5:Msg X10:Msg --> %4:Msg X9:Msg --> u(%1:Msg, f(%5:Msg, null)) X2:Msg --> %2:Msg X6:Msg --> %3:Msg Variant 220 rewrites: 820 Msg: g(f(%1:Msg, null), f(u(%2:Msg, %9:Msg), g(f(%5:Msg, %5:Msg), g(3, %6:Msg)))) X3:Msg --> g(%7:Msg, u(%4:Msg, %9:Msg, f(%3:Msg, u(%2:Msg, %4:Msg)))) X15:Msg --> u(%2:Msg, %4:Msg) X16:Msg --> %8:Msg X14:Msg --> u(2, %1:Msg, g(g(g(%7:Msg, u(%4:Msg, %9:Msg, f(%3:Msg, u(%2:Msg, %4:Msg)))), u(%2:Msg, %4:Msg)), %8:Msg)) X12:Msg --> %3:Msg X8:Msg --> %3:Msg X10:Msg --> %7:Msg X9:Msg --> u(%4:Msg, %9:Msg, f(%3:Msg, u(%2:Msg, %4:Msg))) X2:Msg --> %5:Msg X6:Msg --> %6:Msg Variant 221 rewrites: 820 Msg: g(f(%1:Msg, null), f(%2:Msg, g(f(%5:Msg, %5:Msg), g(3, %6:Msg)))) X3:Msg --> g(%7:Msg, u(%4:Msg, f(%3:Msg, u(%2:Msg, %4:Msg)))) X15:Msg --> u(%2:Msg, %4:Msg) X16:Msg --> %8:Msg X14:Msg --> u(2, %1:Msg, g(g(g(%7:Msg, u(%4:Msg, f(%3:Msg, u(%2:Msg, %4:Msg)))), u(%2:Msg, %4:Msg)), %8:Msg)) X12:Msg --> %3:Msg X8:Msg --> %3:Msg X10:Msg --> %7:Msg X9:Msg --> u(%4:Msg, f(%3:Msg, u(%2:Msg, %4:Msg))) X2:Msg --> %5:Msg X6:Msg --> %6:Msg Variant 222 rewrites: 820 Msg: g(f(%1:Msg, null), f(null, g(f(%4:Msg, %4:Msg), g(3, %5:Msg)))) X3:Msg --> g(%6:Msg, u(%3:Msg, f(%2:Msg, %3:Msg))) X15:Msg --> %3:Msg X16:Msg --> %7:Msg X14:Msg --> u(2, %1:Msg, g(g(g(%6:Msg, u(%3:Msg, f(%2:Msg, %3:Msg))), %3:Msg), %7:Msg)) X12:Msg --> %2:Msg X8:Msg --> %2:Msg X10:Msg --> %6:Msg X9:Msg --> u(%3:Msg, f(%2:Msg, %3:Msg)) X2:Msg --> %4:Msg X6:Msg --> %5:Msg Variant 223 rewrites: 820 Msg: g(f(%2:Msg, null), f(%1:Msg, g(f(%5:Msg, %5:Msg), g(3, %6:Msg)))) X3:Msg --> g(%7:Msg, u(%1:Msg, %4:Msg, f(%3:Msg, %4:Msg))) X15:Msg --> %4:Msg X16:Msg --> %8:Msg X14:Msg --> u(2, %2:Msg, g(g(g(%7:Msg, u(%1:Msg, %4:Msg, f(%3:Msg, %4:Msg))), %4:Msg), %8:Msg)) X12:Msg --> %3:Msg X8:Msg --> %3:Msg X10:Msg --> %7:Msg X9:Msg --> u(%1:Msg, %4:Msg, f(%3:Msg, %4:Msg)) X2:Msg --> %5:Msg X6:Msg --> %6:Msg Variant 224 rewrites: 820 Msg: g(f(%1:Msg, null), f(%2:Msg, g(f(%3:Msg, %3:Msg), g(3, %4:Msg)))) X3:Msg --> g(%5:Msg, u(%2:Msg, f(%6:Msg, null))) X15:Msg --> null X16:Msg --> %7:Msg X14:Msg --> u(2, %1:Msg, g(g(g(%5:Msg, u(%2:Msg, f(%6:Msg, null))), null), %7:Msg)) X12:Msg --> %6:Msg X8:Msg --> %6:Msg X10:Msg --> %5:Msg X9:Msg --> u(%2:Msg, f(%6:Msg, null)) X2:Msg --> %3:Msg X6:Msg --> %4:Msg No more variants. rewrites: 828 ========================================== get variants in XOR : cst1 + X . Variant 1 rewrites: 0 XOR: cst1 + #1:XOR X --> #1:XOR Variant 2 rewrites: 3 Elem: cst1 X --> 0 Variant 3 rewrites: 3 XOR: 0 X --> cst1 Variant 4 rewrites: 3 XOR: %1:XOR X --> cst1 + %1:XOR No more variants. rewrites: 3 ========================================== get variants in XOR : cst2 + X . Variant 1 rewrites: 0 XOR: cst2 + #1:XOR X --> #1:XOR Variant 2 rewrites: 3 Elem: cst2 X --> 0 Variant 3 rewrites: 3 XOR: 0 X --> cst2 Variant 4 rewrites: 3 XOR: %1:XOR X --> cst2 + %1:XOR No more variants. rewrites: 3 ========================================== get variants in XOR : cst2 + X such that X + a irreducible . Variant 1 rewrites: 0 XOR: cst2 + #1:XOR X --> #1:XOR Variant 2 rewrites: 2 XOR: 0 X --> cst2 Variant 3 rewrites: 2 XOR: %1:XOR X --> cst2 + %1:XOR No more variants. rewrites: 2 ========================================== get variants in XOR : X + cst1 + Y . Variant 1 rewrites: 0 XOR: cst1 + #1:XOR + #2:XOR X --> #1:XOR Y --> #2:XOR Variant 2 rewrites: 10 XOR: cst1 + %1:XOR X --> 0 Y --> %1:XOR Variant 3 rewrites: 10 XOR: cst1 + %1:XOR X --> %1:XOR Y --> 0 Variant 4 rewrites: 10 XOR: %1:XOR + %2:XOR X --> cst1 + %2:XOR Y --> %1:XOR Variant 5 rewrites: 10 XOR: %1:XOR X --> cst1 Y --> %1:XOR Variant 6 rewrites: 10 XOR: %1:XOR + %2:XOR X --> %1:XOR Y --> cst1 + %2:XOR Variant 7 rewrites: 10 XOR: %1:XOR X --> %1:XOR Y --> cst1 Variant 8 rewrites: 10 XOR: cst1 + %2:XOR + %3:XOR X --> %1:XOR + %2:XOR Y --> %1:XOR + %3:XOR Variant 9 rewrites: 10 XOR: cst1 + %2:XOR X --> %1:XOR + %2:XOR Y --> %1:XOR Variant 10 rewrites: 10 XOR: cst1 + %2:XOR X --> %1:XOR Y --> %1:XOR + %2:XOR Variant 11 rewrites: 10 Elem: cst1 X --> %1:XOR Y --> %1:XOR Variant 12 rewrites: 38 XOR: #1:XOR X --> 0 Y --> cst1 + #1:XOR Variant 13 rewrites: 38 XOR: #1:XOR X --> cst1 + #1:XOR Y --> 0 Variant 14 rewrites: 38 XOR: 0 X --> cst1 + #1:XOR Y --> #1:XOR Variant 15 rewrites: 38 XOR: #2:XOR + #3:XOR X --> cst1 + #1:XOR + #3:XOR Y --> #1:XOR + #2:XOR Variant 16 rewrites: 38 XOR: #1:XOR X --> cst1 + #2:XOR Y --> #1:XOR + #2:XOR Variant 17 rewrites: 38 XOR: #1:XOR X --> cst1 + #1:XOR + #2:XOR Y --> #2:XOR Variant 18 rewrites: 38 XOR: 0 X --> #1:XOR Y --> cst1 + #1:XOR Variant 19 rewrites: 38 XOR: #2:XOR + #3:XOR X --> #1:XOR + #2:XOR Y --> cst1 + #1:XOR + #3:XOR Variant 20 rewrites: 38 XOR: #1:XOR X --> #1:XOR + #2:XOR Y --> cst1 + #2:XOR Variant 21 rewrites: 38 XOR: #1:XOR X --> #2:XOR Y --> cst1 + #1:XOR + #2:XOR No more variants. rewrites: 46 ========================================== get variants in XOR : X + cst1 + Y such that X + cst1, X + cst2 irreducible . Variant 1 rewrites: 0 XOR: cst1 + #1:XOR + #2:XOR X --> #1:XOR Y --> #2:XOR Variant 2 rewrites: 7 XOR: cst1 + %1:XOR X --> %1:XOR Y --> 0 Variant 3 rewrites: 7 XOR: %1:XOR + %2:XOR X --> %1:XOR Y --> cst1 + %2:XOR Variant 4 rewrites: 7 XOR: %1:XOR X --> %1:XOR Y --> cst1 Variant 5 rewrites: 7 XOR: cst1 + %2:XOR + %3:XOR X --> %1:XOR + %2:XOR Y --> %1:XOR + %3:XOR Variant 6 rewrites: 7 XOR: cst1 + %2:XOR X --> %1:XOR + %2:XOR Y --> %1:XOR Variant 7 rewrites: 7 XOR: cst1 + %2:XOR X --> %1:XOR Y --> %1:XOR + %2:XOR Variant 8 rewrites: 7 Elem: cst1 X --> %1:XOR Y --> %1:XOR Variant 9 rewrites: 19 XOR: 0 X --> #1:XOR Y --> cst1 + #1:XOR Variant 10 rewrites: 19 XOR: #2:XOR + #3:XOR X --> #1:XOR + #2:XOR Y --> cst1 + #1:XOR + #3:XOR Variant 11 rewrites: 19 XOR: #1:XOR X --> #1:XOR + #2:XOR Y --> cst1 + #2:XOR Variant 12 rewrites: 19 XOR: #1:XOR X --> #2:XOR Y --> cst1 + #1:XOR + #2:XOR No more variants. rewrites: 23 Bye. maude-3.1/tests/Misc/AU_Unification.maude0000644000175200017520000000723013677457224015327 00000000000000*** *** Tests for associative-identity unification. *** set show timing off . fmod AU-TEST is sort Foo . op 1 : -> Foo . op __ : Foo Foo -> Foo [assoc id: 1] . ops a b c : -> Foo . vars A B C X Y Z : Foo . endfm *** one side goes to one variable unify X =? Y X /\ Z Y =? A B . variant unify X =? Y X /\ Z Y =? A B . *** one side goes to empty unify X =? Y X /\ Z C =? C /\ Z Y =? A B . variant unify X =? Y X /\ Z C =? C /\ Z Y =? A B . *** both sides go to one variable unify X =? Y X /\ A C =? C /\ Z Y =? A B . variant unify X =? Y X /\ A C =? C /\ Z Y =? A B . *** both side to to empty unify X =? Y X /\ Y =? A B Z /\ Z Y =? A B . variant unify X =? Y X /\ Y =? A B Z /\ Z Y =? A B . *** AU problem completely nulls out unify X =? 1 /\ Y =? 1 /\ Z =? 1 /\ X =? Y Z . variant unify X =? 1 /\ Y =? 1 /\ Z =? 1 /\ X =? Y Z . unify X =? 1 /\ Y =? 1 /\ Z =? 1 /\ X Y =? Y Z . variant unify X =? 1 /\ Y =? 1 /\ Z =? 1 /\ X Y =? Y Z . *** null equation unify X =? Y X /\ 1 =? A B Z /\ Z Y =? A B . variant unify X =? Y X /\ 1 =? A B Z /\ Z Y =? A B . unify X =? Y X /\ C =? 1 /\ C =? A B Z /\ Z Y =? A B . variant unify X =? Y X /\ C =? 1 /\ C =? A B Z /\ Z Y =? A B . *** collapse unify A B C =? a . variant unify A B C =? a . unify Y =? 1 /\ X =? Y Z . variant unify Y =? 1 /\ X =? Y Z . *** linear unify A B =? X Y . variant unify A B =? X Y . unify A B =? X Y Z . variant unify A B =? X Y Z . unify A B C =? X Y Z . variant unify A B C =? X Y Z . *** order-sorted unification fmod LIST is sorts Elt List . subsort Elt < List . op nil : -> List . op __ : List List -> List [assoc id: nil] . vars L M N : List . vars E F G : Elt . endfm unify E =? L M N . variant unify E =? L M N . unify E L E M =? E N F N . variant unify E L E M =? E N F N . *** cycle breaking fmod NAT' is protecting BOOL . sorts Zero NzNat Nat . subsort Zero NzNat < Nat . op 0 : -> Zero . op s_ : Nat -> NzNat [iter] . op _*_ : NzNat NzNat -> NzNat [assoc id: s(0) prec 31] . op _*_ : Nat Nat -> Nat [ditto] . vars W X Y Z A B C D : Nat . endfm *** cycle breaking through S theory unify X =? s (X * Y) . unify X =? s X * Y . *** theory conflict unify s X =? s X * Y . unify s X =? X * Y . fmod COMM is sort Foo . ops a b c d : -> Foo . op f : Foo Foo -> Foo [assoc id: c(a, b)] . op c : Foo Foo -> Foo [comm] . vars W X Y Z A B C D : Foo . endfm *** cycle breaking through comm theory unify X =? c(f(X, Y), Z) . fmod FOO2 is sort Foo . ops a b c d : -> Foo . op f : Foo Foo -> Foo [assoc id: g(c, d)] . op g : Foo Foo -> Foo [assoc id: f(a, b)] . vars X Y : Foo . endfm *** cycle breaking with non-disjoint identities unify X =? f(Y, a, b) /\ Y =? g(X, c, d) . fmod FOO3 is sort Foo . ops a b : -> Foo . op h : Foo -> Foo . op f : Foo Foo -> Foo [assoc id: h(f(a, b))] . vars X Y : Foo . endfm *** cycle breaking with non-disjoint identity unify X =? f(Y, a, b) /\ Y =? h(X) . *** order-sorted mgus need not be unsorted mgus fmod AU-UNSORTED is sort Foo . op 1 : -> Foo . op f : Foo Foo -> Foo [assoc id: 1] . endfm *** 1 mgu unify X:Foo =? f(Y:Foo, Z:Foo) . variant unify X:Foo =? f(Y:Foo, Z:Foo) . fmod AU-SORTED1 is sorts Lo Hi . subsort Lo < Hi . op 1 : -> Hi . op f : Hi Hi -> Hi [assoc id: 1] . endfm *** unsorted mgu can't be sorted so collapse solutions becomes mgus unify X:Lo =? f(Y:Hi, Z:Hi) . variant unify X:Lo =? f(Y:Hi, Z:Hi) . fmod AU-SORTED2 is sorts Lo Hi . subsort Lo < Hi . op 1 : -> Hi . op f : Hi Hi -> Hi [assoc id: 1] . op f : Lo Lo -> Lo [assoc id: 1] . endfm *** collapse solutions not subsumed by non-collapse solution after sorting unify X:Lo =? f(Y:Hi, Z:Hi) . variant unify X:Lo =? f(Y:Hi, Z:Hi) . maude-3.1/tests/Misc/filteredVariantUnification0000755000175200017520000000044413723616151016703 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/filteredVariantUnification.maude -no-banner -no-advise \ > filteredVariantUnification.out 2>&1 diff $srcdir/filteredVariantUnification.expected filteredVariantUnification.out > /dev/null 2>&1 maude-3.1/tests/Misc/dataStructures0000755000175200017520000000036410511603326014375 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/dataStructures.maude -no-banner -no-advise \ > dataStructures.out 2>&1 diff $srcdir/dataStructures.expected dataStructures.out > /dev/null 2>&1 maude-3.1/tests/Misc/unification20000755000175200017520000000035411431127521013751 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/unification2.maude -no-banner -no-advise \ > unification2.out 2>&1 diff $srcdir/unification2.expected unification2.out > /dev/null 2>&1 maude-3.1/tests/Misc/variantUnification0000755000175200017520000000040412006071130015201 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/variantUnification.maude -no-banner -no-advise \ > variantUnification.out 2>&1 diff $srcdir/variantUnification.expected variantUnification.out > /dev/null 2>&1 maude-3.1/tests/Misc/variantNarrowing0000755000175200017520000000037412006104637014716 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/variantNarrowing.maude -no-banner -no-advise \ > variantNarrowing.out 2>&1 diff $srcdir/variantNarrowing.expected variantNarrowing.out > /dev/null 2>&1 maude-3.1/tests/Misc/smtTest.maude0000755000175200017520000002057313210417135014121 00000000000000set show timing off . load smt *** Base theory fmod TEST-B is pr BOOLEAN . vars W X Y Z : Boolean . endfm check W =/== X and Y . check W === X and Y . check X =/== true and X =/== Y and Y =/== true . check X =/== true and X =/== Y and Y =/== false . check (X xor true) and (X xor Y) and (Y xor true) . check (X xor true) and (X xor Y) and (Y xor false) . check not (X or not X) . check not(X implies Y implies X) . check (X ? Y : Z) and (Y implies X) and (Z implies X) . check (X ? Y : Z) and (Y implies not X) and (Z implies X) . check X === Y and Y === Z . check X === Y and Y === Z and Z =/== X . *** Theory of integers fmod TEST-I is pr INTEGER . vars W X Y Z : Boolean . vars I J K L : Integer . endfm check I > J and J > K . check I > J and J > K and K > I . check I < J and J < K . check I < J and J < K and K < I . check I >= J and J >= I . check I >= J and J >= I and I =/== J . check I <= J and J <= I . check I <= J and J <= I and I =/== J . check I === J + K and I > J and I > K . check I === J + K and I > J + K . check I === J + K and I > J + K + L . check I === J - K and I > J + K . check - I === J - K and I > J + K . check I =/== J + K and I > J + K . check (I > J ? I : J) >= I and (I > J ? I : J) >= J . check (I > J ? I : J) < I . check (I > J ? I : J) === I or (I > J ? I : J) === J . check not((I > J ? I : J) === I or (I > J ? I : J) === J) . check (I > J ? I : J) =/== I and (I > J ? I : J) =/== J . *** Theory of reals fmod TEST-R is pr REAL . vars W X Y Z : Boolean . vars P Q R S : Real . endfm check P > Q and Q > R . check P > Q and Q > R and R > P . check P < Q and Q < R . check P < Q and Q < R and R < P . check P >= Q and Q >= P . check P >= Q and Q >= P and P =/== Q . check P <= Q and Q <= P . check P <= Q and Q <= P and P =/== Q . check P === Q + R and P > Q and P > R . check P === Q + R and P > Q + R . check P === Q + R and P > Q + R + S . check P === Q - R and P > Q + R . check - P === Q - R and P > Q + R . check P =/== Q + R and P > Q + R . check (P > Q ? P : Q) >= P and (P > Q ? P : Q) >= Q . check (P > Q ? P : Q) < P . check (P > Q ? P : Q) === P or (P > Q ? P : Q) === Q . check not((P > Q ? P : Q) === P or (P > Q ? P : Q) === Q) . check (P > Q ? P : Q) =/== P and (P > Q ? P : Q) =/== Q . *** Theory of reals + integers fmod TEST-RI is pr REAL-INTEGER . vars W X Y Z : Boolean . vars I J K L : Integer . vars P Q R S : Real . endfm check isInteger(toReal(I) + toReal(J)) =/== false . check isInteger(toReal(I) + toReal(J)) =/== true . check toInteger(R) + toInteger(P) === toInteger(R + P) . check not(toInteger(R) + toInteger(P) === toInteger(R + P)) . check 1/2 < P . check 1/2 < P and P < 3/4 . check 1/2 < P and P < 3/4 and isInteger(P) . check -2 < I . check -2 < I and -2 * I > -1 . check -2 < I and -2 * I > -1 and I =/== -1 . check -2 < I and -2 * I > -1 and I =/== -1 and I - I =/== I . *** meta-level version select META-LEVEL . red metaCheck(['REAL-INTEGER], '_=_['_+_['1.Integer, '1.Integer], '2.Integer]) . red metaCheck(['REAL-INTEGER], '_=_['_+_['1.Integer, '1.Integer], '3.Integer]) . fmod META-CHECK is pr META-LEVEL . pr REAL-INTEGER . vars W X Y Z : Boolean . vars I J K L : Integer . vars P Q R S : Real . endfm red metaCheck(['META-CHECK], upTerm((I > J ? I : J) < I)) . red metaCheck(['META-CHECK], upTerm((I > J ? I : J) > I)) . red metaCheck(['META-CHECK], upTerm( (I > J ? I : J) === I or (I > J ? I : J) === J )) . red metaCheck(['META-CHECK], upTerm( not((I > J ? I : J) === I or (I > J ? I : J) === J ) )) . red metaCheck(['META-CHECK], upTerm( (I > J ? I : J) =/== I and (I > J ? I : J) =/== J )) . red metaCheck(['META-CHECK], upTerm( (I > J ? I : J) =/== I or (I > J ? I : J) =/== J )) . mod MULTI is pr INTEGER . vars A B C D E : Boolean . vars I J K L M N : Integer . vars X Y : Foo . sort Pair . sort State . op <_|_> : State Boolean -> Pair . sort Foo . ops f g : Integer Foo -> State . crl f(I, X) => g(I + 1, Y) if I < 0 = true [nonexec] . endm smt-search [10] f(-2, X) =>* Z:State . mod TEST is pr MULTI . pr META-LEVEL . vars X Y : Foo . endm red metaSmtSearch(['MULTI], upTerm(f(-2, X)), 'Z:State, nil, '*, 1, 1, 0) . red metaSmtSearch(['MULTI], upTerm(f(-2, X)), 'Z:State, nil, '*, 1, 1, 1) . red metaSmtSearch(['MULTI], upTerm(f(-2, X)), 'Z:State, nil, '*, 1, 1, 2) . red metaSmtSearch(['MULTI], upTerm(f(-2, X)), 'Z:State, nil, '+, 200, 1, 0) . red metaSmtSearch(['MULTI], upTerm(f(-2, X)), 'Z:State, nil, '+, 200, 1, 1) . mod ITEST is pr INTEGER . vars A B C D E : Boolean . vars I J K L M N : Integer . sort State . sort Foo . ops f : Integer -> State . var X : State . crl f(I) => f(I + 1) if I >= 10 = true /\ I <= 12 = true . crl f(I) => f(I - 1) if I >= 10 = true /\ I <= 12 = true . endm smt-search [4] f(11) =>1 X . smt-search [4] f(11) =>* X . smt-search [4] f(11) =>+ X . smt-search [4, 1] f(11) =>+ X . smt-search [4, 2] f(11) =>+ X . smt-search [4, 0] f(11) =>* X . smt-search [4, 1] f(11) =>* X . smt-search [4, 2] f(11) =>* X . smt-search [20] f(11) =>* X . smt-search [4] f(J) =>* X . smt-search [4] f(J) =>* f(J) . smt-search [4] f(J) =>* f(K) such that J = K . *** test continue smt-search [1] f(11) =>1 X . cont . smt-search [1] f(11) =>* X . cont 2 . cont 1 . cont 1 . debug smt-search [4] f(11) =>+ X . step . step . step . resume . smt-search [4] f(J) =>* f(K) such that J = K . debug cont 1 . step . resume . mod TEST2 is pr ITEST . pr META-LEVEL . vars I J K L M N : Integer . endm red metaSmtSearch(['ITEST], upTerm(f(J)), upTerm(f(K)), 'J:Integer = 'K:Integer, '*, 42, 2, 0) . red metaSmtSearch(['ITEST], upTerm(f(J)), upTerm(f(K)), 'J:Integer = 'K:Integer, '*, 42, 2, 1) . red metaSmtSearch(['ITEST], upTerm(f(J)), upTerm(f(K)), 'J:Integer = 'K:Integer, '*, 42, 2, 2) . red metaSmtSearch(['ITEST], upTerm(f(J)), upTerm(f(K)), 'J:Integer = 'K:Integer, '*, 42, 2, 3) . red in TEST2 : metaSmtSearch(['ITEST], upTerm(f(J)), upTerm(f(K)), 'J:Integer = 'K:Integer, '*, 42, unbounded, 3) . *** check violations of SMT restrictions mod COLLAPSE-AXIOM is pr INTEGER . op bad : Foo Foo -> Foo [idem] . sort Foo . op f : Foo Foo -> Foo . op g : Foo -> Foo . op h : Integer -> Foo . vars A B C : Foo . vars X Y Z : Integer . crl f(h(X), h(Y)) => g(h(X)) if X = Y . endm smt-search f(h(X), h(Y)) =>+ g(C) . mod COLLAPSE-AXIOM2 is pr INTEGER . op bad : Foo Foo -> Foo [poly (1 2 3) idem] . sort Foo . op f : Foo Foo -> Foo . op g : Foo -> Foo . op h : Integer -> Foo . vars A B C : Foo . vars X Y Z : Integer . crl f(h(X), h(Y)) => g(h(X)) if X = Y . endm smt-search f(h(X), h(Y)) =>+ g(C) . mod SMT-OP-IN-LHS is pr INTEGER . sort Foo . op f : Foo Foo -> Foo . op g : Foo -> Foo . op h : Integer -> Foo . vars A B C : Foo . vars X Y Z : Integer . crl f(h(X), h(Y + 1)) => g(h(X)) if X = Y . endm smt-search f(h(X), h(Y)) =>+ g(C) . mod NONLINEAR-VAR-IN-LHS is pr INTEGER . sort Foo . op f : Foo Foo -> Foo . op g : Foo -> Foo . op h : Integer -> Foo . vars A B C : Foo . vars X Y Z : Integer . crl f(h(X), h(X)) => g(h(X)) if X = 1 . endm smt-search f(h(X), h(Y)) =>+ g(C) . mod EQ-AND-MB-NO_RULES is pr INTEGER . op bad : Foo Foo -> Foo . sort Foo . op f : Foo Foo -> Foo . op g : Foo -> Foo . op h : Integer -> Foo . vars A B C : Foo . vars X Y Z : Integer . mb A : Foo . eq f(A, A) = g(A) . endm smt-search f(h(X), h(Y)) =>+ g(C) . mod FOO is pr INTEGER . op bad : Foo Foo -> Foo . sort Foo . op f : Foo Foo -> Foo . op g : Foo -> Foo . op h : Integer -> Foo . vars A B C : Foo . vars X Y Z : Integer . crl f(h(X), h(Y)) => g(h(X)) if X = Y . endm *** nonlinear variable in pattern smt-search f(h(X), h(Y)) =>+ f(C, C) . *** SMT operator in pattern smt-search f(h(X), h(Y)) =>+ h(X + Y) . maude-3.1/tests/Misc/dataStructures.expected0000644000175200017520000002247713140740407016206 00000000000000========================================== reduce in SORTABLE-LIST-TEST : size(gen(100)) . rewrites: 504 result NzNat: 100 ========================================== reduce in SORTABLE-LIST-TEST : sort(gen(100)) . rewrites: 2627 result NeList{Nat<}: 0 0 0 0 0 0 0 0 0 0 1 1 1 1 4 4 4 4 9 9 9 9 16 16 16 16 21 21 21 21 24 24 24 24 25 25 25 25 25 25 25 25 25 25 29 29 29 29 36 36 36 36 41 41 41 41 44 44 44 44 49 49 49 49 56 56 56 56 61 61 61 61 64 64 64 64 69 69 69 69 76 76 76 76 81 81 81 81 84 84 84 84 89 89 89 89 96 96 96 96 ========================================== reduce in SORTABLE-LIST-TEST : reverse(sort(gen(100))) . rewrites: 2729 result NeList{Nat<}: 96 96 96 96 89 89 89 89 84 84 84 84 81 81 81 81 76 76 76 76 69 69 69 69 64 64 64 64 61 61 61 61 56 56 56 56 49 49 49 49 44 44 44 44 41 41 41 41 36 36 36 36 29 29 29 29 25 25 25 25 25 25 25 25 25 25 24 24 24 24 21 21 21 21 16 16 16 16 9 9 9 9 4 4 4 4 1 1 1 1 0 0 0 0 0 0 0 0 0 0 ========================================== reduce in SORTABLE-LIST-TEST : occurs(5, gen(100)) . rewrites: 603 result Bool: false ========================================== reduce in SORTABLE-LIST-TEST : occurs(24, gen(100)) . rewrites: 356 result Bool: true ========================================== reduce in SET-TEST : intersection(gen(100, 13), gen(100, 4)) . rewrites: 906 result NeSet{Nat}: 52, 104, 156, 208, 260, 312, 364 ========================================== reduce in SET-TEST : union(gen(100, 13), gen(100, 4)) . rewrites: 606 result NeSet{Nat}: 4, 8, 12, 13, 16, 20, 24, 26, 28, 32, 36, 39, 40, 44, 48, 52, 56, 60, 64, 65, 68, 72, 76, 78, 80, 84, 88, 91, 92, 96, 100, 104, 108, 112, 116, 117, 120, 124, 128, 130, 132, 136, 140, 143, 144, 148, 152, 156, 160, 164, 168, 169, 172, 176, 180, 182, 184, 188, 192, 195, 196, 200, 204, 208, 212, 216, 220, 221, 224, 228, 232, 234, 236, 240, 244, 247, 248, 252, 256, 260, 264, 268, 272, 273, 276, 280, 284, 286, 288, 292, 296, 299, 300, 304, 308, 312, 316, 320, 324, 325, 328, 332, 336, 338, 340, 344, 348, 351, 352, 356, 360, 364, 368, 372, 376, 377, 380, 384, 388, 390, 392, 396, 400, 403, 416, 429, 442, 455, 468, 481, 494, 507, 520, 533, 546, 559, 572, 585, 598, 611, 624, 637, 650, 663, 676, 689, 702, 715, 728, 741, 754, 767, 780, 793, 806, 819, 832, 845, 858, 871, 884, 897, 910, 923, 936, 949, 962, 975, 988, 1001, 1014, 1027, 1040, 1053, 1066, 1079, 1092, 1105, 1118, 1131, 1144, 1157, 1170, 1183, 1196, 1209, 1222, 1235, 1248, 1261, 1274, 1287, 1300 ========================================== reduce in SET-TEST : gen(100, 13) \ gen(100, 52) . rewrites: 906 result NeSet{Nat}: 13, 26, 39, 65, 78, 91, 117, 130, 143, 169, 182, 195, 221, 234, 247, 273, 286, 299, 325, 338, 351, 377, 390, 403, 429, 442, 455, 481, 494, 507, 533, 546, 559, 585, 598, 611, 637, 650, 663, 689, 702, 715, 741, 754, 767, 793, 806, 819, 845, 858, 871, 897, 910, 923, 949, 962, 975, 1001, 1014, 1027, 1053, 1066, 1079, 1105, 1118, 1131, 1157, 1170, 1183, 1209, 1222, 1235, 1261, 1274, 1287 ========================================== reduce in SET-TEST : intersection(gen(100, 13), gen(100, 4)) \ gen(100, 52) . rewrites: 1231 result Set{Nat}: empty ========================================== reduce in SET-TEST : | gen(100, 13) | . rewrites: 504 result NzNat: 100 ========================================== reduce in SET-TEST : delete(3, (4, 3, 5)) . rewrites: 2 result NeSet{Nat}: 4, 5 ========================================== reduce in SET-TEST : 53 in union(gen(100, 13), gen(100, 4)) . rewrites: 607 result Bool: false ========================================== reduce in SET-TEST : 52 in union(gen(100, 13), gen(100, 4)) . rewrites: 607 result Bool: true ========================================== reduce in LIST-AND-SET-TEST : gen(100) . rewrites: 302 result NeList{Nat}: 1 4 9 16 25 36 49 64 81 0 21 44 69 96 25 56 89 24 61 0 41 84 29 76 25 76 29 84 41 0 61 24 89 56 25 96 69 44 21 0 81 64 49 36 25 16 9 4 1 0 1 4 9 16 25 36 49 64 81 0 21 44 69 96 25 56 89 24 61 0 41 84 29 76 25 76 29 84 41 0 61 24 89 56 25 96 69 44 21 0 81 64 49 36 25 16 9 4 1 0 ========================================== reduce in LIST-AND-SET-TEST : makeSet(gen(100)) . rewrites: 482 result NeSet{Nat}: 0, 1, 4, 9, 16, 21, 24, 25, 29, 36, 41, 44, 49, 56, 61, 64, 69, 76, 81, 84, 89, 96 ========================================== reduce in LIST-AND-SET-TEST : filter(gen(100), makeSet(gen(10))) . rewrites: 648 result NeList{Nat}: 1 4 9 16 25 36 49 64 81 0 25 0 25 0 25 0 81 64 49 36 25 16 9 4 1 0 1 4 9 16 25 36 49 64 81 0 25 0 25 0 25 0 81 64 49 36 25 16 9 4 1 0 ========================================== reduce in LIST-AND-SET-TEST : filterOut(gen(100), makeSet(gen(10))) . rewrites: 648 result NeList{Nat}: 21 44 69 96 56 89 24 61 41 84 29 76 76 29 84 41 61 24 89 56 96 69 44 21 21 44 69 96 56 89 24 61 41 84 29 76 76 29 84 41 61 24 89 56 96 69 44 21 ========================================== reduce in SORTABLE-LIST-AND-SET-TEST : makeList(makeSet(gen(100))) . rewrites: 781 result NeList{Nat<}: 0 1 4 9 16 21 24 25 29 36 41 44 49 56 61 64 69 76 81 84 89 96 ========================================== reduce in LIST*-TEST : append(a, b) . rewrites: 3 result NeList{Nat}: [[1 2 3] [] [3 4 5 6] [[1] []] 2 [1 2 3]] ========================================== reduce in LIST*-TEST : size(append(a, b)) . rewrites: 16 result NzNat: 6 ========================================== reduce in LIST*-TEST : reverse(append(a, b)) . rewrites: 9 result NeList{Nat}: [[1 2 3] 2 [[1] []] [3 4 5 6] [] [1 2 3]] ========================================== reduce in LIST*-TEST : head(a) . rewrites: 2 result NeList{Nat}: [1 2 3] ========================================== reduce in LIST*-TEST : tail(a) . rewrites: 2 result NeList{Nat}: [[] [3 4 5 6]] ========================================== reduce in LIST*-TEST : last(a) . rewrites: 2 result NeList{Nat}: [3 4 5 6] ========================================== reduce in LIST*-TEST : front(a) . rewrites: 2 result NeList{Nat}: [[1 2 3] []] ========================================== reduce in LIST*-TEST : occurs([], a) . rewrites: 7 result Bool: true ========================================== reduce in LIST*-TEST : occurs([2 3], a) . rewrites: 9 result Bool: false ========================================== reduce in SET*-TEST : zf(0) . rewrites: 1 result Set{Nat}: {} ========================================== reduce in SET*-TEST : zf(1) . rewrites: 3 result NeSet{Nat}: {{}} ========================================== reduce in SET*-TEST : zf(2) . rewrites: 5 result NeSet{Nat}: {{}, {{}}} ========================================== reduce in SET*-TEST : zf(3) . rewrites: 7 result NeSet{Nat}: {{}, {{}}, {{}, {{}}}} ========================================== reduce in SET*-TEST : zf(4) . rewrites: 9 result NeSet{Nat}: {{}, {{}}, {{}, {{}}}, {{}, {{}}, {{}, {{}}}}} ========================================== reduce in SET*-TEST : | zf(10) | . rewrites: 42 result NzNat: 10 ========================================== reduce in SET*-TEST : | zf(100) | . rewrites: 402 result NzNat: 100 ========================================== reduce in SET*-TEST : 2^ zf(4) . rewrites: 69 result NeSet{Nat}: {{}, {{}}, {{{}}}, {{{}, {{}}}}, {{{}, {{}}, {{}, {{}}}}}, { {}, {{}}}, {{}, {{}, {{}}}}, {{}, {{}, {{}}, {{}, {{}}}}}, {{{}}, {{}, {{ }}}}, {{{}}, {{}, {{}}, {{}, {{}}}}}, {{{}, {{}}}, {{}, {{}}, {{}, {{}}}}}, {{}, {{}}, {{}, {{}}}}, {{}, {{}}, {{}, {{}}, {{}, {{}}}}}, {{}, {{}, {{ }}}, {{}, {{}}, {{}, {{}}}}}, {{{}}, {{}, {{}}}, {{}, {{}}, {{}, {{}}}}}, { {}, {{}}, {{}, {{}}}, {{}, {{}}, {{}, {{}}}}}} ========================================== reduce in SET*-TEST : | 2^ zf(9) | . rewrites: 3093 result NzNat: 512 ========================================== reduce in MAP-TEST : a . rewrites: 5 result Map{String,Nat}: "one" |-> 1, "three" |-> 3, "two" |-> 2, "zero" |-> 0 ========================================== reduce in MAP-TEST : a["one"] . rewrites: 8 result NzNat: 1 ========================================== reduce in ARRAY-TEST : gen(100) . rewrites: 501 result Array{Nat,Nat0}: 1 |-> 1 ; 2 |-> 2 ; 3 |-> 3 ; 4 |-> 4 ; 5 |-> 5 ; 6 |-> 6 ; 7 |-> 7 ; 8 |-> 8 ; 9 |-> 9 ; 11 |-> 1 ; 12 |-> 2 ; 13 |-> 3 ; 14 |-> 4 ; 15 |-> 5 ; 16 |-> 6 ; 17 |-> 7 ; 18 |-> 8 ; 19 |-> 9 ; 21 |-> 1 ; 22 |-> 2 ; 23 |-> 3 ; 24 |-> 4 ; 25 |-> 5 ; 26 |-> 6 ; 27 |-> 7 ; 28 |-> 8 ; 29 |-> 9 ; 31 |-> 1 ; 32 |-> 2 ; 33 |-> 3 ; 34 |-> 4 ; 35 |-> 5 ; 36 |-> 6 ; 37 |-> 7 ; 38 |-> 8 ; 39 |-> 9 ; 41 |-> 1 ; 42 |-> 2 ; 43 |-> 3 ; 44 |-> 4 ; 45 |-> 5 ; 46 |-> 6 ; 47 |-> 7 ; 48 |-> 8 ; 49 |-> 9 ; 51 |-> 1 ; 52 |-> 2 ; 53 |-> 3 ; 54 |-> 4 ; 55 |-> 5 ; 56 |-> 6 ; 57 |-> 7 ; 58 |-> 8 ; 59 |-> 9 ; 61 |-> 1 ; 62 |-> 2 ; 63 |-> 3 ; 64 |-> 4 ; 65 |-> 5 ; 66 |-> 6 ; 67 |-> 7 ; 68 |-> 8 ; 69 |-> 9 ; 71 |-> 1 ; 72 |-> 2 ; 73 |-> 3 ; 74 |-> 4 ; 75 |-> 5 ; 76 |-> 6 ; 77 |-> 7 ; 78 |-> 8 ; 79 |-> 9 ; 81 |-> 1 ; 82 |-> 2 ; 83 |-> 3 ; 84 |-> 4 ; 85 |-> 5 ; 86 |-> 6 ; 87 |-> 7 ; 88 |-> 8 ; 89 |-> 9 ; 91 |-> 1 ; 92 |-> 2 ; 93 |-> 3 ; 94 |-> 4 ; 95 |-> 5 ; 96 |-> 6 ; 97 |-> 7 ; 98 |-> 8 ; 99 |-> 9 ========================================== reduce in ARRAY-TEST : gen(100)[55] . rewrites: 504 result NzNat: 5 ========================================== reduce in ARRAY-TEST : gen(100)[60] . rewrites: 502 result Zero: 0 ========================================== reduce in ARRAY-TEST : gen(100)[1000000000000000000000] . rewrites: 502 result Zero: 0 Bye. maude-3.1/tests/Misc/AU_Unification.expected0000644000175200017520000005762113720017072016024 00000000000000========================================== unify in AU-TEST : X =? Y X /\ Z Y =? A B . Unifier 1 X --> #1:Foo Y --> 1 Z --> #2:Foo #3:Foo A --> #2:Foo B --> #3:Foo Unifier 2 X --> #1:Foo Y --> 1 Z --> #2:Foo A --> 1 B --> #2:Foo Unifier 3 X --> #1:Foo Y --> 1 Z --> #2:Foo A --> #2:Foo B --> 1 Unifier 4 X --> #1:Foo Y --> 1 Z --> 1 A --> 1 B --> 1 Unifier 5 X --> 1 Y --> 1 Z --> #1:Foo #2:Foo A --> #1:Foo B --> #2:Foo Unifier 6 X --> 1 Y --> 1 Z --> #1:Foo A --> 1 B --> #1:Foo Unifier 7 X --> 1 Y --> 1 Z --> #1:Foo A --> #1:Foo B --> 1 Unifier 8 X --> 1 Y --> 1 Z --> 1 A --> 1 B --> 1 ========================================== variant unify in AU-TEST : X =? Y X /\ Z Y =? A B . Unifier 1 rewrites: 0 X --> %1:Foo Z --> %2:Foo %3:Foo Y --> 1 A --> %2:Foo B --> %3:Foo No more unifiers. rewrites: 0 ========================================== unify in AU-TEST : X =? Y X /\ Z C =? C /\ Z Y =? A B . Unifier 1 X --> #1:Foo Y --> 1 Z --> 1 C --> #2:Foo A --> 1 B --> 1 Unifier 2 X --> #1:Foo Y --> 1 Z --> 1 C --> 1 A --> 1 B --> 1 Unifier 3 X --> 1 Y --> 1 Z --> 1 C --> #1:Foo A --> 1 B --> 1 Unifier 4 X --> 1 Y --> 1 Z --> 1 C --> 1 A --> 1 B --> 1 ========================================== variant unify in AU-TEST : X =? Y X /\ Z C =? C /\ Z Y =? A B . Unifier 1 rewrites: 0 X --> %1:Foo Z --> 1 C --> %2:Foo Y --> 1 A --> 1 B --> 1 No more unifiers. rewrites: 0 ========================================== unify in AU-TEST : X =? Y X /\ A C =? C /\ Z Y =? A B . Unifier 1 X --> #1:Foo Y --> 1 A --> 1 C --> #2:Foo Z --> #3:Foo B --> #3:Foo Unifier 2 X --> #1:Foo Y --> 1 A --> 1 C --> #2:Foo Z --> 1 B --> 1 Unifier 3 X --> #1:Foo Y --> 1 A --> 1 C --> 1 Z --> #2:Foo B --> #2:Foo Unifier 4 X --> #1:Foo Y --> 1 A --> 1 C --> 1 Z --> 1 B --> 1 Unifier 5 X --> 1 Y --> 1 A --> 1 C --> #1:Foo Z --> #2:Foo B --> #2:Foo Unifier 6 X --> 1 Y --> 1 A --> 1 C --> #1:Foo Z --> 1 B --> 1 Unifier 7 X --> 1 Y --> 1 A --> 1 C --> 1 Z --> #1:Foo B --> #1:Foo Unifier 8 X --> 1 Y --> 1 A --> 1 C --> 1 Z --> 1 B --> 1 ========================================== variant unify in AU-TEST : X =? Y X /\ A C =? C /\ Z Y =? A B . Unifier 1 rewrites: 0 X --> %1:Foo A --> 1 C --> %2:Foo Z --> %3:Foo Y --> 1 B --> %3:Foo No more unifiers. rewrites: 0 ========================================== unify in AU-TEST : X =? Y X /\ Y =? A B Z /\ Z Y =? A B . Unifier 1 X --> #1:Foo Y --> 1 A --> 1 B --> 1 Z --> 1 Unifier 2 X --> 1 Y --> 1 A --> 1 B --> 1 Z --> 1 ========================================== variant unify in AU-TEST : X =? Y X /\ Y =? A B Z /\ Z Y =? A B . Unifier 1 rewrites: 0 X --> %1:Foo Y --> 1 Z --> 1 A --> 1 B --> 1 No more unifiers. rewrites: 0 ========================================== unify in AU-TEST : X =? 1 /\ Y =? 1 /\ Z =? 1 /\ X =? Y Z . Unifier 1 X --> 1 Y --> 1 Z --> 1 ========================================== variant unify in AU-TEST : X =? 1 /\ Y =? 1 /\ Z =? 1 /\ X =? Y Z . Unifier 1 rewrites: 0 X --> 1 Y --> 1 Z --> 1 No more unifiers. rewrites: 0 ========================================== unify in AU-TEST : X =? 1 /\ Y =? 1 /\ Z =? 1 /\ X Y =? Y Z . Unifier 1 X --> 1 Y --> 1 Z --> 1 ========================================== variant unify in AU-TEST : X =? 1 /\ Y =? 1 /\ Z =? 1 /\ X Y =? Y Z . Unifier 1 rewrites: 0 X --> 1 Y --> 1 Z --> 1 No more unifiers. rewrites: 0 ========================================== unify in AU-TEST : X =? Y X /\ 1 =? A B Z /\ Z Y =? A B . Unifier 1 X --> #1:Foo Y --> 1 A --> 1 B --> 1 Z --> 1 Unifier 2 X --> 1 Y --> 1 A --> 1 B --> 1 Z --> 1 ========================================== variant unify in AU-TEST : X =? Y X /\ 1 =? A B Z /\ Z Y =? A B . Unifier 1 rewrites: 0 X --> %1:Foo Z --> 1 Y --> 1 A --> 1 B --> 1 No more unifiers. rewrites: 0 ========================================== unify in AU-TEST : X =? Y X /\ C =? 1 /\ C =? A B Z /\ Z Y =? A B . Unifier 1 X --> #1:Foo Y --> 1 C --> 1 A --> 1 B --> 1 Z --> 1 Unifier 2 X --> 1 Y --> 1 C --> 1 A --> 1 B --> 1 Z --> 1 ========================================== variant unify in AU-TEST : X =? Y X /\ C =? 1 /\ C =? A B Z /\ Z Y =? A B . Unifier 1 rewrites: 0 X --> %1:Foo C --> 1 Z --> 1 Y --> 1 A --> 1 B --> 1 No more unifiers. rewrites: 0 ========================================== unify in AU-TEST : A B C =? a . Unifier 1 A --> 1 B --> 1 C --> a Unifier 2 A --> 1 B --> a C --> 1 Unifier 3 A --> a B --> 1 C --> 1 ========================================== variant unify in AU-TEST : A B C =? a . Unifier 1 rewrites: 0 A --> 1 B --> 1 C --> a Unifier 2 rewrites: 0 A --> 1 B --> a C --> 1 Unifier 3 rewrites: 0 A --> a B --> 1 C --> 1 No more unifiers. rewrites: 0 ========================================== unify in AU-TEST : Y =? 1 /\ X =? Y Z . Unifier 1 Y --> 1 X --> #1:Foo Z --> #1:Foo Unifier 2 Y --> 1 X --> 1 Z --> 1 ========================================== variant unify in AU-TEST : Y =? 1 /\ X =? Y Z . Unifier 1 rewrites: 0 Y --> 1 X --> %1:Foo Z --> %1:Foo No more unifiers. rewrites: 0 ========================================== unify in AU-TEST : A B =? X Y . Unifier 1 A --> #2:Foo #3:Foo B --> #1:Foo X --> #2:Foo Y --> #3:Foo #1:Foo Unifier 2 A --> #1:Foo B --> #3:Foo #2:Foo X --> #1:Foo #3:Foo Y --> #2:Foo Unifier 3 A --> #1:Foo B --> #2:Foo X --> #1:Foo Y --> #2:Foo Unifier 4 A --> 1 B --> #1:Foo #2:Foo X --> #1:Foo Y --> #2:Foo Unifier 5 A --> #1:Foo #2:Foo B --> 1 X --> #1:Foo Y --> #2:Foo Unifier 6 A --> 1 B --> 1 X --> 1 Y --> 1 Unifier 7 A --> #1:Foo B --> #2:Foo X --> 1 Y --> #1:Foo #2:Foo Unifier 8 A --> 1 B --> #1:Foo X --> 1 Y --> #1:Foo Unifier 9 A --> #1:Foo B --> 1 X --> 1 Y --> #1:Foo Unifier 10 A --> #1:Foo B --> #2:Foo X --> #1:Foo #2:Foo Y --> 1 Unifier 11 A --> 1 B --> #1:Foo X --> #1:Foo Y --> 1 Unifier 12 A --> #1:Foo B --> 1 X --> #1:Foo Y --> 1 ========================================== variant unify in AU-TEST : A B =? X Y . Unifier 1 rewrites: 0 A --> %2:Foo %3:Foo B --> %1:Foo X --> %2:Foo Y --> %3:Foo %1:Foo Unifier 2 rewrites: 0 A --> %1:Foo B --> %3:Foo %2:Foo X --> %1:Foo %3:Foo Y --> %2:Foo No more unifiers. rewrites: 0 ========================================== unify in AU-TEST : A B =? X Y Z . Unifier 1 A --> #2:Foo #3:Foo #4:Foo B --> #1:Foo X --> #2:Foo Y --> #3:Foo Z --> #4:Foo #1:Foo Unifier 2 A --> #1:Foo #3:Foo B --> #4:Foo #2:Foo X --> #1:Foo Y --> #3:Foo #4:Foo Z --> #2:Foo Unifier 3 A --> #2:Foo #3:Foo B --> #1:Foo X --> #2:Foo Y --> #3:Foo Z --> #1:Foo Unifier 4 A --> #1:Foo B --> #4:Foo #2:Foo #3:Foo X --> #1:Foo #4:Foo Y --> #2:Foo Z --> #3:Foo Unifier 5 A --> #1:Foo B --> #2:Foo #3:Foo X --> #1:Foo Y --> #2:Foo Z --> #3:Foo Unifier 6 A --> 1 B --> #1:Foo #2:Foo #3:Foo X --> #1:Foo Y --> #2:Foo Z --> #3:Foo Unifier 7 A --> #1:Foo #2:Foo #3:Foo B --> 1 X --> #1:Foo Y --> #2:Foo Z --> #3:Foo Unifier 8 A --> 1 B --> 1 X --> 1 Y --> 1 Z --> 1 Unifier 9 A --> #2:Foo #3:Foo B --> #1:Foo X --> 1 Y --> #2:Foo Z --> #3:Foo #1:Foo Unifier 10 A --> #1:Foo B --> #3:Foo #2:Foo X --> 1 Y --> #1:Foo #3:Foo Z --> #2:Foo Unifier 11 A --> #1:Foo B --> #2:Foo X --> 1 Y --> #1:Foo Z --> #2:Foo Unifier 12 A --> 1 B --> #1:Foo #2:Foo X --> 1 Y --> #1:Foo Z --> #2:Foo Unifier 13 A --> #1:Foo #2:Foo B --> 1 X --> 1 Y --> #1:Foo Z --> #2:Foo Unifier 14 A --> #2:Foo #3:Foo B --> #1:Foo X --> #2:Foo Y --> 1 Z --> #3:Foo #1:Foo Unifier 15 A --> #1:Foo B --> #3:Foo #2:Foo X --> #1:Foo #3:Foo Y --> 1 Z --> #2:Foo Unifier 16 A --> #1:Foo B --> #2:Foo X --> #1:Foo Y --> 1 Z --> #2:Foo Unifier 17 A --> 1 B --> #1:Foo #2:Foo X --> #1:Foo Y --> 1 Z --> #2:Foo Unifier 18 A --> #1:Foo #2:Foo B --> 1 X --> #1:Foo Y --> 1 Z --> #2:Foo Unifier 19 A --> #1:Foo B --> #2:Foo X --> 1 Y --> 1 Z --> #1:Foo #2:Foo Unifier 20 A --> 1 B --> #1:Foo X --> 1 Y --> 1 Z --> #1:Foo Unifier 21 A --> #1:Foo B --> 1 X --> 1 Y --> 1 Z --> #1:Foo Unifier 22 A --> #2:Foo #3:Foo B --> #1:Foo X --> #2:Foo Y --> #3:Foo #1:Foo Z --> 1 Unifier 23 A --> #1:Foo B --> #3:Foo #2:Foo X --> #1:Foo #3:Foo Y --> #2:Foo Z --> 1 Unifier 24 A --> #1:Foo B --> #2:Foo X --> #1:Foo Y --> #2:Foo Z --> 1 Unifier 25 A --> 1 B --> #1:Foo #2:Foo X --> #1:Foo Y --> #2:Foo Z --> 1 Unifier 26 A --> #1:Foo #2:Foo B --> 1 X --> #1:Foo Y --> #2:Foo Z --> 1 Unifier 27 A --> #1:Foo B --> #2:Foo X --> 1 Y --> #1:Foo #2:Foo Z --> 1 Unifier 28 A --> 1 B --> #1:Foo X --> 1 Y --> #1:Foo Z --> 1 Unifier 29 A --> #1:Foo B --> 1 X --> 1 Y --> #1:Foo Z --> 1 Unifier 30 A --> #1:Foo B --> #2:Foo X --> #1:Foo #2:Foo Y --> 1 Z --> 1 Unifier 31 A --> 1 B --> #1:Foo X --> #1:Foo Y --> 1 Z --> 1 Unifier 32 A --> #1:Foo B --> 1 X --> #1:Foo Y --> 1 Z --> 1 ========================================== variant unify in AU-TEST : A B =? X Y Z . Unifier 1 rewrites: 0 A --> %2:Foo %3:Foo %4:Foo B --> %1:Foo X --> %2:Foo Y --> %3:Foo Z --> %4:Foo %1:Foo Unifier 2 rewrites: 0 A --> %1:Foo %3:Foo B --> %4:Foo %2:Foo X --> %1:Foo Y --> %3:Foo %4:Foo Z --> %2:Foo Unifier 3 rewrites: 0 A --> %1:Foo B --> %4:Foo %2:Foo %3:Foo X --> %1:Foo %4:Foo Y --> %2:Foo Z --> %3:Foo No more unifiers. rewrites: 0 ========================================== unify in AU-TEST : A B C =? X Y Z . Unifier 1 A --> #3:Foo #4:Foo #5:Foo B --> #1:Foo C --> #2:Foo X --> #3:Foo Y --> #4:Foo Z --> #5:Foo #1:Foo #2:Foo Unifier 2 A --> #2:Foo #3:Foo B --> #4:Foo #5:Foo C --> #1:Foo X --> #2:Foo Y --> #3:Foo #4:Foo Z --> #5:Foo #1:Foo Unifier 3 A --> #2:Foo #4:Foo B --> #1:Foo C --> #5:Foo #3:Foo X --> #2:Foo Y --> #4:Foo #1:Foo #5:Foo Z --> #3:Foo Unifier 4 A --> #3:Foo #4:Foo B --> #1:Foo C --> #2:Foo X --> #3:Foo Y --> #4:Foo #1:Foo Z --> #2:Foo Unifier 5 A --> #3:Foo #4:Foo B --> #1:Foo C --> #2:Foo X --> #3:Foo Y --> #4:Foo Z --> #1:Foo #2:Foo Unifier 6 A --> #1:Foo B --> #4:Foo #3:Foo #5:Foo C --> #2:Foo X --> #1:Foo #4:Foo Y --> #3:Foo Z --> #5:Foo #2:Foo Unifier 7 A --> #1:Foo B --> #3:Foo #4:Foo C --> #5:Foo #2:Foo X --> #1:Foo #3:Foo Y --> #4:Foo #5:Foo Z --> #2:Foo Unifier 8 A --> #1:Foo B --> #4:Foo #3:Foo C --> #2:Foo X --> #1:Foo #4:Foo Y --> #3:Foo Z --> #2:Foo Unifier 9 A --> #1:Foo B --> #2:Foo C --> #5:Foo #3:Foo #4:Foo X --> #1:Foo #2:Foo #5:Foo Y --> #3:Foo Z --> #4:Foo Unifier 10 A --> #1:Foo B --> #2:Foo C --> #3:Foo #4:Foo X --> #1:Foo #2:Foo Y --> #3:Foo Z --> #4:Foo Unifier 11 A --> #1:Foo B --> #3:Foo #4:Foo C --> #2:Foo X --> #1:Foo Y --> #3:Foo Z --> #4:Foo #2:Foo Unifier 12 A --> #1:Foo B --> #2:Foo C --> #4:Foo #3:Foo X --> #1:Foo Y --> #2:Foo #4:Foo Z --> #3:Foo Unifier 13 A --> #1:Foo B --> #2:Foo C --> #3:Foo X --> #1:Foo Y --> #2:Foo Z --> #3:Foo Unifier 14 A --> 1 B --> #2:Foo #3:Foo #4:Foo C --> #1:Foo X --> #2:Foo Y --> #3:Foo Z --> #4:Foo #1:Foo Unifier 15 A --> 1 B --> #1:Foo #3:Foo C --> #4:Foo #2:Foo X --> #1:Foo Y --> #3:Foo #4:Foo Z --> #2:Foo Unifier 16 A --> 1 B --> #2:Foo #3:Foo C --> #1:Foo X --> #2:Foo Y --> #3:Foo Z --> #1:Foo Unifier 17 A --> 1 B --> #1:Foo C --> #4:Foo #2:Foo #3:Foo X --> #1:Foo #4:Foo Y --> #2:Foo Z --> #3:Foo Unifier 18 A --> 1 B --> #1:Foo C --> #2:Foo #3:Foo X --> #1:Foo Y --> #2:Foo Z --> #3:Foo Unifier 19 A --> #2:Foo #3:Foo #4:Foo B --> 1 C --> #1:Foo X --> #2:Foo Y --> #3:Foo Z --> #4:Foo #1:Foo Unifier 20 A --> #1:Foo #3:Foo B --> 1 C --> #4:Foo #2:Foo X --> #1:Foo Y --> #3:Foo #4:Foo Z --> #2:Foo Unifier 21 A --> #2:Foo #3:Foo B --> 1 C --> #1:Foo X --> #2:Foo Y --> #3:Foo Z --> #1:Foo Unifier 22 A --> #1:Foo B --> 1 C --> #4:Foo #2:Foo #3:Foo X --> #1:Foo #4:Foo Y --> #2:Foo Z --> #3:Foo Unifier 23 A --> #1:Foo B --> 1 C --> #2:Foo #3:Foo X --> #1:Foo Y --> #2:Foo Z --> #3:Foo Unifier 24 A --> 1 B --> 1 C --> #1:Foo #2:Foo #3:Foo X --> #1:Foo Y --> #2:Foo Z --> #3:Foo Unifier 25 A --> #2:Foo #3:Foo #4:Foo B --> #1:Foo C --> 1 X --> #2:Foo Y --> #3:Foo Z --> #4:Foo #1:Foo Unifier 26 A --> #1:Foo #3:Foo B --> #4:Foo #2:Foo C --> 1 X --> #1:Foo Y --> #3:Foo #4:Foo Z --> #2:Foo Unifier 27 A --> #2:Foo #3:Foo B --> #1:Foo C --> 1 X --> #2:Foo Y --> #3:Foo Z --> #1:Foo Unifier 28 A --> #1:Foo B --> #4:Foo #2:Foo #3:Foo C --> 1 X --> #1:Foo #4:Foo Y --> #2:Foo Z --> #3:Foo Unifier 29 A --> #1:Foo B --> #2:Foo #3:Foo C --> 1 X --> #1:Foo Y --> #2:Foo Z --> #3:Foo Unifier 30 A --> 1 B --> #1:Foo #2:Foo #3:Foo C --> 1 X --> #1:Foo Y --> #2:Foo Z --> #3:Foo Unifier 31 A --> #1:Foo #2:Foo #3:Foo B --> 1 C --> 1 X --> #1:Foo Y --> #2:Foo Z --> #3:Foo Unifier 32 A --> 1 B --> 1 C --> 1 X --> 1 Y --> 1 Z --> 1 Unifier 33 A --> #3:Foo #4:Foo B --> #1:Foo C --> #2:Foo X --> 1 Y --> #3:Foo Z --> #4:Foo #1:Foo #2:Foo Unifier 34 A --> #1:Foo B --> #3:Foo #4:Foo C --> #2:Foo X --> 1 Y --> #1:Foo #3:Foo Z --> #4:Foo #2:Foo Unifier 35 A --> #1:Foo B --> #2:Foo C --> #4:Foo #3:Foo X --> 1 Y --> #1:Foo #2:Foo #4:Foo Z --> #3:Foo Unifier 36 A --> #1:Foo B --> #2:Foo C --> #3:Foo X --> 1 Y --> #1:Foo #2:Foo Z --> #3:Foo Unifier 37 A --> #1:Foo B --> #2:Foo C --> #3:Foo X --> 1 Y --> #1:Foo Z --> #2:Foo #3:Foo Unifier 38 A --> 1 B --> #2:Foo #3:Foo C --> #1:Foo X --> 1 Y --> #2:Foo Z --> #3:Foo #1:Foo Unifier 39 A --> 1 B --> #1:Foo C --> #3:Foo #2:Foo X --> 1 Y --> #1:Foo #3:Foo Z --> #2:Foo Unifier 40 A --> 1 B --> #1:Foo C --> #2:Foo X --> 1 Y --> #1:Foo Z --> #2:Foo Unifier 41 A --> #2:Foo #3:Foo B --> 1 C --> #1:Foo X --> 1 Y --> #2:Foo Z --> #3:Foo #1:Foo Unifier 42 A --> #1:Foo B --> 1 C --> #3:Foo #2:Foo X --> 1 Y --> #1:Foo #3:Foo Z --> #2:Foo Unifier 43 A --> #1:Foo B --> 1 C --> #2:Foo X --> 1 Y --> #1:Foo Z --> #2:Foo Unifier 44 A --> 1 B --> 1 C --> #1:Foo #2:Foo X --> 1 Y --> #1:Foo Z --> #2:Foo Unifier 45 A --> #2:Foo #3:Foo B --> #1:Foo C --> 1 X --> 1 Y --> #2:Foo Z --> #3:Foo #1:Foo Unifier 46 A --> #1:Foo B --> #3:Foo #2:Foo C --> 1 X --> 1 Y --> #1:Foo #3:Foo Z --> #2:Foo Unifier 47 A --> #1:Foo B --> #2:Foo C --> 1 X --> 1 Y --> #1:Foo Z --> #2:Foo Unifier 48 A --> 1 B --> #1:Foo #2:Foo C --> 1 X --> 1 Y --> #1:Foo Z --> #2:Foo Unifier 49 A --> #1:Foo #2:Foo B --> 1 C --> 1 X --> 1 Y --> #1:Foo Z --> #2:Foo Unifier 50 A --> #3:Foo #4:Foo B --> #1:Foo C --> #2:Foo X --> #3:Foo Y --> 1 Z --> #4:Foo #1:Foo #2:Foo Unifier 51 A --> #1:Foo B --> #3:Foo #4:Foo C --> #2:Foo X --> #1:Foo #3:Foo Y --> 1 Z --> #4:Foo #2:Foo Unifier 52 A --> #1:Foo B --> #2:Foo C --> #4:Foo #3:Foo X --> #1:Foo #2:Foo #4:Foo Y --> 1 Z --> #3:Foo Unifier 53 A --> #1:Foo B --> #2:Foo C --> #3:Foo X --> #1:Foo #2:Foo Y --> 1 Z --> #3:Foo Unifier 54 A --> #1:Foo B --> #2:Foo C --> #3:Foo X --> #1:Foo Y --> 1 Z --> #2:Foo #3:Foo Unifier 55 A --> 1 B --> #2:Foo #3:Foo C --> #1:Foo X --> #2:Foo Y --> 1 Z --> #3:Foo #1:Foo Unifier 56 A --> 1 B --> #1:Foo C --> #3:Foo #2:Foo X --> #1:Foo #3:Foo Y --> 1 Z --> #2:Foo Unifier 57 A --> 1 B --> #1:Foo C --> #2:Foo X --> #1:Foo Y --> 1 Z --> #2:Foo Unifier 58 A --> #2:Foo #3:Foo B --> 1 C --> #1:Foo X --> #2:Foo Y --> 1 Z --> #3:Foo #1:Foo Unifier 59 A --> #1:Foo B --> 1 C --> #3:Foo #2:Foo X --> #1:Foo #3:Foo Y --> 1 Z --> #2:Foo Unifier 60 A --> #1:Foo B --> 1 C --> #2:Foo X --> #1:Foo Y --> 1 Z --> #2:Foo Unifier 61 A --> 1 B --> 1 C --> #1:Foo #2:Foo X --> #1:Foo Y --> 1 Z --> #2:Foo Unifier 62 A --> #2:Foo #3:Foo B --> #1:Foo C --> 1 X --> #2:Foo Y --> 1 Z --> #3:Foo #1:Foo Unifier 63 A --> #1:Foo B --> #3:Foo #2:Foo C --> 1 X --> #1:Foo #3:Foo Y --> 1 Z --> #2:Foo Unifier 64 A --> #1:Foo B --> #2:Foo C --> 1 X --> #1:Foo Y --> 1 Z --> #2:Foo Unifier 65 A --> 1 B --> #1:Foo #2:Foo C --> 1 X --> #1:Foo Y --> 1 Z --> #2:Foo Unifier 66 A --> #1:Foo #2:Foo B --> 1 C --> 1 X --> #1:Foo Y --> 1 Z --> #2:Foo Unifier 67 A --> #1:Foo B --> #2:Foo C --> #3:Foo X --> 1 Y --> 1 Z --> #1:Foo #2:Foo #3:Foo Unifier 68 A --> 1 B --> #1:Foo C --> #2:Foo X --> 1 Y --> 1 Z --> #1:Foo #2:Foo Unifier 69 A --> #1:Foo B --> 1 C --> #2:Foo X --> 1 Y --> 1 Z --> #1:Foo #2:Foo Unifier 70 A --> 1 B --> 1 C --> #1:Foo X --> 1 Y --> 1 Z --> #1:Foo Unifier 71 A --> #1:Foo B --> #2:Foo C --> 1 X --> 1 Y --> 1 Z --> #1:Foo #2:Foo Unifier 72 A --> 1 B --> #1:Foo C --> 1 X --> 1 Y --> 1 Z --> #1:Foo Unifier 73 A --> #1:Foo B --> 1 C --> 1 X --> 1 Y --> 1 Z --> #1:Foo Unifier 74 A --> #3:Foo #4:Foo B --> #1:Foo C --> #2:Foo X --> #3:Foo Y --> #4:Foo #1:Foo #2:Foo Z --> 1 Unifier 75 A --> #1:Foo B --> #3:Foo #4:Foo C --> #2:Foo X --> #1:Foo #3:Foo Y --> #4:Foo #2:Foo Z --> 1 Unifier 76 A --> #1:Foo B --> #2:Foo C --> #4:Foo #3:Foo X --> #1:Foo #2:Foo #4:Foo Y --> #3:Foo Z --> 1 Unifier 77 A --> #1:Foo B --> #2:Foo C --> #3:Foo X --> #1:Foo #2:Foo Y --> #3:Foo Z --> 1 Unifier 78 A --> #1:Foo B --> #2:Foo C --> #3:Foo X --> #1:Foo Y --> #2:Foo #3:Foo Z --> 1 Unifier 79 A --> 1 B --> #2:Foo #3:Foo C --> #1:Foo X --> #2:Foo Y --> #3:Foo #1:Foo Z --> 1 Unifier 80 A --> 1 B --> #1:Foo C --> #3:Foo #2:Foo X --> #1:Foo #3:Foo Y --> #2:Foo Z --> 1 Unifier 81 A --> 1 B --> #1:Foo C --> #2:Foo X --> #1:Foo Y --> #2:Foo Z --> 1 Unifier 82 A --> #2:Foo #3:Foo B --> 1 C --> #1:Foo X --> #2:Foo Y --> #3:Foo #1:Foo Z --> 1 Unifier 83 A --> #1:Foo B --> 1 C --> #3:Foo #2:Foo X --> #1:Foo #3:Foo Y --> #2:Foo Z --> 1 Unifier 84 A --> #1:Foo B --> 1 C --> #2:Foo X --> #1:Foo Y --> #2:Foo Z --> 1 Unifier 85 A --> 1 B --> 1 C --> #1:Foo #2:Foo X --> #1:Foo Y --> #2:Foo Z --> 1 Unifier 86 A --> #2:Foo #3:Foo B --> #1:Foo C --> 1 X --> #2:Foo Y --> #3:Foo #1:Foo Z --> 1 Unifier 87 A --> #1:Foo B --> #3:Foo #2:Foo C --> 1 X --> #1:Foo #3:Foo Y --> #2:Foo Z --> 1 Unifier 88 A --> #1:Foo B --> #2:Foo C --> 1 X --> #1:Foo Y --> #2:Foo Z --> 1 Unifier 89 A --> 1 B --> #1:Foo #2:Foo C --> 1 X --> #1:Foo Y --> #2:Foo Z --> 1 Unifier 90 A --> #1:Foo #2:Foo B --> 1 C --> 1 X --> #1:Foo Y --> #2:Foo Z --> 1 Unifier 91 A --> #1:Foo B --> #2:Foo C --> #3:Foo X --> 1 Y --> #1:Foo #2:Foo #3:Foo Z --> 1 Unifier 92 A --> 1 B --> #1:Foo C --> #2:Foo X --> 1 Y --> #1:Foo #2:Foo Z --> 1 Unifier 93 A --> #1:Foo B --> 1 C --> #2:Foo X --> 1 Y --> #1:Foo #2:Foo Z --> 1 Unifier 94 A --> 1 B --> 1 C --> #1:Foo X --> 1 Y --> #1:Foo Z --> 1 Unifier 95 A --> #1:Foo B --> #2:Foo C --> 1 X --> 1 Y --> #1:Foo #2:Foo Z --> 1 Unifier 96 A --> 1 B --> #1:Foo C --> 1 X --> 1 Y --> #1:Foo Z --> 1 Unifier 97 A --> #1:Foo B --> 1 C --> 1 X --> 1 Y --> #1:Foo Z --> 1 Unifier 98 A --> #1:Foo B --> #2:Foo C --> #3:Foo X --> #1:Foo #2:Foo #3:Foo Y --> 1 Z --> 1 Unifier 99 A --> 1 B --> #1:Foo C --> #2:Foo X --> #1:Foo #2:Foo Y --> 1 Z --> 1 Unifier 100 A --> #1:Foo B --> 1 C --> #2:Foo X --> #1:Foo #2:Foo Y --> 1 Z --> 1 Unifier 101 A --> 1 B --> 1 C --> #1:Foo X --> #1:Foo Y --> 1 Z --> 1 Unifier 102 A --> #1:Foo B --> #2:Foo C --> 1 X --> #1:Foo #2:Foo Y --> 1 Z --> 1 Unifier 103 A --> 1 B --> #1:Foo C --> 1 X --> #1:Foo Y --> 1 Z --> 1 Unifier 104 A --> #1:Foo B --> 1 C --> 1 X --> #1:Foo Y --> 1 Z --> 1 ========================================== variant unify in AU-TEST : A B C =? X Y Z . Unifier 1 rewrites: 0 A --> %3:Foo %4:Foo %5:Foo B --> %1:Foo C --> %2:Foo X --> %3:Foo Y --> %4:Foo Z --> %5:Foo %1:Foo %2:Foo Unifier 2 rewrites: 0 A --> %2:Foo %3:Foo B --> %4:Foo %5:Foo C --> %1:Foo X --> %2:Foo Y --> %3:Foo %4:Foo Z --> %5:Foo %1:Foo Unifier 3 rewrites: 0 A --> %2:Foo %4:Foo B --> %1:Foo C --> %5:Foo %3:Foo X --> %2:Foo Y --> %4:Foo %1:Foo %5:Foo Z --> %3:Foo Unifier 4 rewrites: 0 A --> %1:Foo B --> %4:Foo %3:Foo %5:Foo C --> %2:Foo X --> %1:Foo %4:Foo Y --> %3:Foo Z --> %5:Foo %2:Foo Unifier 5 rewrites: 0 A --> %1:Foo B --> %3:Foo %4:Foo C --> %5:Foo %2:Foo X --> %1:Foo %3:Foo Y --> %4:Foo %5:Foo Z --> %2:Foo Unifier 6 rewrites: 0 A --> %1:Foo B --> %2:Foo C --> %5:Foo %3:Foo %4:Foo X --> %1:Foo %2:Foo %5:Foo Y --> %3:Foo Z --> %4:Foo No more unifiers. rewrites: 0 ========================================== unify in LIST : E =? L M N . Unifier 1 E --> #1:Elt L --> nil M --> nil N --> #1:Elt Unifier 2 E --> #1:Elt L --> nil M --> #1:Elt N --> nil Unifier 3 E --> #1:Elt L --> #1:Elt M --> nil N --> nil ========================================== variant unify in LIST : E =? L M N . Unifier 1 rewrites: 0 E --> %1:Elt L --> nil M --> nil N --> %1:Elt Unifier 2 rewrites: 0 E --> %1:Elt L --> nil M --> %1:Elt N --> nil Unifier 3 rewrites: 0 E --> %1:Elt L --> %1:Elt M --> nil N --> nil No more unifiers. rewrites: 0 ========================================== unify in LIST : E L E M =? E N F N . Unifier 1 E --> #1:Elt L --> #4:List #1:Elt #2:List #3:Elt #4:List M --> #2:List N --> #4:List #1:Elt #2:List F --> #3:Elt Unifier 2 E --> #1:Elt L --> #1:Elt #2:List #3:Elt M --> #2:List N --> #1:Elt #2:List F --> #3:Elt Unifier 3 E --> #1:Elt L --> #2:List M --> #4:List #3:Elt #2:List #1:Elt #4:List N --> #2:List #1:Elt #4:List F --> #3:Elt Unifier 4 E --> #1:Elt L --> #2:List M --> #3:Elt #2:List #1:Elt N --> #2:List #1:Elt F --> #3:Elt Unifier 5 E --> #1:Elt L --> #2:List M --> #2:List N --> #2:List F --> #1:Elt Unifier 6 E --> #1:Elt L --> nil M --> #3:List #2:Elt #1:Elt #3:List N --> #1:Elt #3:List F --> #2:Elt Unifier 7 E --> #1:Elt L --> nil M --> #2:Elt #1:Elt N --> #1:Elt F --> #2:Elt Unifier 8 E --> #1:Elt L --> #3:List #1:Elt #2:Elt #3:List M --> nil N --> #3:List #1:Elt F --> #2:Elt Unifier 9 E --> #1:Elt L --> #1:Elt #2:Elt M --> nil N --> #1:Elt F --> #2:Elt Unifier 10 E --> #1:Elt L --> nil M --> nil N --> nil F --> #1:Elt ========================================== variant unify in LIST : E L E M =? E N F N . Unifier 1 rewrites: 0 E --> %1:Elt L --> %4:List %1:Elt %2:List %3:Elt %4:List M --> %2:List N --> %4:List %1:Elt %2:List F --> %3:Elt Unifier 2 rewrites: 0 E --> %1:Elt L --> %2:List M --> %4:List %3:Elt %2:List %1:Elt %4:List N --> %2:List %1:Elt %4:List F --> %3:Elt Unifier 3 rewrites: 0 E --> %1:Elt L --> %2:List M --> %2:List N --> %2:List F --> %1:Elt No more unifiers. rewrites: 0 ========================================== unify in NAT' : X =? s (X * Y) . Unifier 1 X --> s 0 Y --> 0 Unifier 2 X --> s 0 Y --> 0 ========================================== unify in NAT' : X =? s X * Y . Unifier 1 X --> 0 Y --> 0 Unifier 2 X --> 0 Y --> 0 ========================================== unify in NAT' : s X =? s X * Y . Unifier 1 X --> #1:Nat Y --> s 0 Unifier 2 X --> 0 Y --> s 0 ========================================== unify in NAT' : s X =? X * Y . Unifier 1 X --> s 0 Y --> s_^2(0) ========================================== unify in COMM : X =? c(f(X, Y), Z) . Unifier 1 X --> c(a, b) Z --> a Y --> b Unifier 2 X --> c(a, b) Z --> b Y --> a Unifier 3 X --> c(a, b) Z --> a Y --> b Unifier 4 X --> c(a, b) Z --> b Y --> a ========================================== unify in FOO2 : X =? f(Y, a, b) /\ Y =? g(X, c, d) . Unifier 1 X --> f(a, b) Y --> g(c, d) Unifier 2 X --> f(a, b) Y --> g(c, d) Unifier 3 X --> f(a, b) Y --> g(c, d) Unifier 4 X --> f(a, b) Y --> g(c, d) ========================================== unify in FOO3 : X =? f(Y, a, b) /\ Y =? h(X) . Unifier 1 X --> f(a, b) Y --> h(f(a, b)) Unifier 2 X --> f(a, b) Y --> h(f(a, b)) ========================================== unify in AU-UNSORTED : X:Foo =? f(Y:Foo, Z:Foo) . Unifier 1 X:Foo --> f(#1:Foo, #2:Foo) Y:Foo --> #1:Foo Z:Foo --> #2:Foo Unifier 2 X:Foo --> #1:Foo Y:Foo --> 1 Z:Foo --> #1:Foo Unifier 3 X:Foo --> #1:Foo Y:Foo --> #1:Foo Z:Foo --> 1 Unifier 4 X:Foo --> 1 Y:Foo --> 1 Z:Foo --> 1 ========================================== variant unify in AU-UNSORTED : X:Foo =? f(Y:Foo, Z:Foo) . Unifier 1 rewrites: 0 X:Foo --> f(%1:Foo, %2:Foo) Y:Foo --> %1:Foo Z:Foo --> %2:Foo No more unifiers. rewrites: 0 ========================================== unify in AU-SORTED1 : X:Lo =? f(Y:Hi, Z:Hi) . Unifier 1 X:Lo --> #1:Lo Y:Hi --> 1 Z:Hi --> #1:Lo Unifier 2 X:Lo --> #1:Lo Y:Hi --> #1:Lo Z:Hi --> 1 ========================================== variant unify in AU-SORTED1 : X:Lo =? f(Y:Hi, Z:Hi) . Unifier 1 rewrites: 0 X:Lo --> %1:Lo Y:Hi --> 1 Z:Hi --> %1:Lo Unifier 2 rewrites: 0 X:Lo --> %1:Lo Y:Hi --> %1:Lo Z:Hi --> 1 No more unifiers. rewrites: 0 ========================================== unify in AU-SORTED2 : X:Lo =? f(Y:Hi, Z:Hi) . Unifier 1 X:Lo --> f(#1:Lo, #2:Lo) Y:Hi --> #1:Lo Z:Hi --> #2:Lo Unifier 2 X:Lo --> #1:Lo Y:Hi --> 1 Z:Hi --> #1:Lo Unifier 3 X:Lo --> #1:Lo Y:Hi --> #1:Lo Z:Hi --> 1 ========================================== variant unify in AU-SORTED2 : X:Lo =? f(Y:Hi, Z:Hi) . Unifier 1 rewrites: 0 X:Lo --> f(%1:Lo, %2:Lo) Y:Hi --> %1:Lo Z:Hi --> %2:Lo Unifier 2 rewrites: 0 X:Lo --> %1:Lo Y:Hi --> 1 Z:Hi --> %1:Lo Unifier 3 rewrites: 0 X:Lo --> %1:Lo Y:Hi --> %1:Lo Z:Hi --> 1 No more unifiers. rewrites: 0 Bye. maude-3.1/tests/Misc/view.expected0000644000175200017520000000057113275423732014142 00000000000000fmod TEST is sort Foo . op g : Foo -> Foo . eq g(X:Foo) = X:Foo . endfm fmod TEST is sort Foo . op c : -> Foo . op g : Foo -> Foo . eq g(X:Foo) = X:Foo . endfm fmod TEST is sort Foo . op c : -> Foo . op g : Foo -> Foo . eq g(X:Foo) = c . endfm fmod TEST is sort Foo . op h : Foo -> Foo . op g : Foo -> Foo . eq g(X:Foo) = h(h(X:Foo)) . endfm Bye. maude-3.1/tests/Misc/rot13.expected0000644000175200017520000000106413321016237014124 00000000000000========================================== erewrite in ROT13 : run . ROT13 Encryption ---------------- Enter plain text> Cypher text: Gur gvzr unf pbzr gur jnyehf fnvq, Enter plain text> Cypher text: Gb gnyx bs znal guvatf. Enter plain text> Cypher text: Bs fubrf naq fuvcf naq frnyvat jnk, Enter plain text> Cypher text: Bs pnoontrf naq xvatf. Enter plain text> Cypher text: Bs jul gur frn vf obvyvat ubg, Enter plain text> Cypher text: Naq jurgure cvtf unir jvatf. Enter plain text> rewrites: 3516 result Configuration: <> < myObj : myClass | none > Bye. maude-3.1/tests/Misc/unification0000755000175200017520000000035011002247132013656 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/unification.maude -no-banner -no-advise \ > unification.out 2>&1 diff $srcdir/unification.expected unification.out > /dev/null 2>&1 maude-3.1/tests/Misc/commands0000755000175200017520000000033410511602743013160 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/commands.maude -no-banner -no-advise \ > commands.out 2>&1 diff $srcdir/commands.expected commands.out > /dev/null 2>&1 maude-3.1/tests/Misc/CU_Unification.maude0000644000175200017520000000230012117477771015317 00000000000000set show timing off . *** Ul theory fmod FOO is sort Foo . op f : Foo Foo -> Foo [left id: 1f] . op 1f : -> Foo . vars U V W X Y Z : Foo . endfm unify f(X, Y) =? f(U, V) . variant unify f(X, Y) =? f(U, V) . unify f(X, Y) =? X . variant unify f(X, Y) =? X . unify f(X, Y) =? Y . variant unify f(X, Y) =? Y . *** Ur theory fmod FOO2 is sort Foo . op f : Foo Foo -> Foo [right id: 1f] . op 1f : -> Foo . vars U V W X Y Z : Foo . endfm unify f(X, Y) =? f(U, V) . variant unify f(X, Y) =? f(U, V) . unify f(X, Y) =? X . variant unify f(X, Y) =? X . unify f(X, Y) =? Y . variant unify f(X, Y) =? Y . *** U theory fmod FOO3 is sort Foo . op f : Foo Foo -> Foo [id: 1f] . op 1f : -> Foo . vars U V W X Y Z : Foo . endfm unify f(X, Y) =? f(U, V) . variant unify f(X, Y) =? f(U, V) . unify f(X, Y) =? X . variant unify f(X, Y) =? X . unify f(X, Y) =? Y . variant unify f(X, Y) =? Y . *** CU theory fmod FOO4 is sort Foo . op f : Foo Foo -> Foo [comm id: 1f] . op 1f : -> Foo . vars U V W X Y Z : Foo . endfm unify f(X, Y) =? f(U, V) . variant unify f(X, Y) =? f(U, V) . unify f(X, Y) =? X . variant unify f(X, Y) =? X . unify f(X, Y) =? Y . variant unify f(X, Y) =? Y . maude-3.1/tests/Misc/commands.expected0000644000175200017520000015003313550051240014753 00000000000000Warning: , line 12 (mod FOO): variable Z is used before it is bound in rule: crl f(X, Y, Y) => f(Z, X) if Z =/= Y = true . mod FOO is including INT . sorts Foo . subsorts Int < Foo . op f : Int Int -> Int [assoc comm id: 1] . vars X Y Z : Int . eq f (f (X, Y), X) = f (Y, Y) . cq f (f (X, Y), Y) = f (Y, X) if X =/= Y . rl f (f (X, Y), X) => f (Y, Y) . crl f (f (X, Y), Y) => f (Z, X) if Z =/= Y . mb f (X, X) : NzInt . cmb f (X, Y) : NzInt if X =/= Y . endm Warning: membership axioms are not guaranteed to work correctly for iterated symbol s_ as it has declarations that are not at the kind level. Warning: membership axioms are not guaranteed to work correctly for associative symbol _+_ as it has declarations that are not at the kind level. Warning: membership axioms are not guaranteed to work correctly for associative symbol _*_ as it has declarations that are not at the kind level. Warning: membership axioms are not guaranteed to work correctly for associative symbol gcd as it has declarations that are not at the kind level. Warning: membership axioms are not guaranteed to work correctly for associative symbol lcm as it has declarations that are not at the kind level. Warning: membership axioms are not guaranteed to work correctly for associative symbol min as it has declarations that are not at the kind level. Warning: membership axioms are not guaranteed to work correctly for associative symbol max as it has declarations that are not at the kind level. Warning: membership axioms are not guaranteed to work correctly for associative symbol _xor_ as it has declarations that are not at the kind level. Warning: membership axioms are not guaranteed to work correctly for associative symbol _&_ as it has declarations that are not at the kind level. Warning: membership axioms are not guaranteed to work correctly for associative symbol _|_ as it has declarations that are not at the kind level. Warning: membership axioms are not guaranteed to work correctly for associative symbol f as it has declarations that are not at the kind level. mod FOO is sorts Bool Zero NzNat Nat NzInt Int Foo . subsorts Zero NzNat NzNat < Nat . subsort NzNat < NzInt . subsorts NzInt Nat < Int . subsort Int < Foo . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op 0 : -> Zero [ctor] . op s_ : Nat -> NzNat [ctor iter prec 15 gather (E) special ( id-hook SuccSymbol term-hook zeroTerm (0))] . op _+_ : NzNat Nat -> NzNat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Nat Nat -> Nat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Int Int -> Int [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op sd : Nat Nat -> Nat [comm special ( id-hook CUI_NumberOpSymbol (sd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : NzNat NzNat -> NzNat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Nat Nat -> Nat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : NzInt NzInt -> NzInt [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Int Int -> Int [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Int NzInt -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Int NzInt -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Nat Nat -> Nat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzNat Nat -> NzNat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Int Nat -> Int [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzInt Nat -> NzInt [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op modExp : [Foo] [Foo] [Foo] -> [Foo] [special ( id-hook NumberOpSymbol (modExp) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : NzInt Int -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Int Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzInt NzInt -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Int Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzInt NzInt -> NzInt [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Int Int -> Int [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzInt NzInt -> NzInt [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Int Int -> Int [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzNat Int -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Nat Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _xor_ : Nat Nat -> Nat [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _xor_ : Int Int -> Int [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Nat Nat -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Nat Int -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Int Int -> Int [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : NzNat Nat -> NzNat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : Nat Nat -> Nat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : NzInt Int -> NzInt [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : Int Int -> Int [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _>>_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _>>_ : Int Nat -> Int [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<<_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<<_ : Int Nat -> Int [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzNat Nat -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzInt Int -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op -_ : NzNat -> NzInt [ctor prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : NzInt -> NzInt [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : Int -> Int [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _-_ : Int Int -> Int [prec 33 gather (E e) special ( id-hook NumberOpSymbol (-) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : NzInt -> NzNat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : Int -> Nat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op ~_ : Int -> Int [prec 15 gather (E) special ( id-hook NumberOpSymbol (~) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op f : Int Int -> Int [assoc comm id: 1] . var Z : Int . var X : Int . var Y : Int . mb f(X, X) : NzInt . cmb f(X, Y) : NzInt if X =/= Y = true . eq f(X, X, Y) = f(Y, Y) . ceq f(X, Y, Y) = f(X, Y) if X =/= Y = true . eq true and A:Bool = A:Bool . eq false and A:Bool = false . eq A:Bool and A:Bool = A:Bool . eq false xor A:Bool = A:Bool . eq A:Bool xor A:Bool = false . eq A:Bool and (B:Bool xor C:Bool) = A:Bool and B:Bool xor A:Bool and C:Bool . eq not A:Bool = true xor A:Bool . eq A:Bool or B:Bool = A:Bool and B:Bool xor A:Bool xor B:Bool . eq A:Bool implies B:Bool = not (A:Bool xor A:Bool and B:Bool) . rl f(X, X, Y) => f(Y, Y) . crl f(X, Y, Y) => f(Z, X) if Z =/= Y = true [nonexec] . endm sort Bool . sort Zero . subsorts Zero < Nat Int Foo . sort NzNat . subsorts NzNat < Nat NzInt Int Foo . sort Nat . subsorts NzNat Zero < Nat < Int Foo . sort NzInt . subsorts NzNat < NzInt < Int Foo . sort Int . subsorts NzNat Zero Nat NzInt < Int < Foo . sort Foo . subsorts NzNat Zero Nat NzInt Int < Foo . [Bool]: 1 Bool [Foo]: 1 Foo 2 Int 3 NzInt 4 Nat 5 Zero 6 NzNat eq f(X, X, Y) = f(Y, Y) . ceq f(X, Y, Y) = f(X, Y) if X =/= Y = true . eq true and A:Bool = A:Bool . eq false and A:Bool = false . eq A:Bool and A:Bool = A:Bool . eq false xor A:Bool = A:Bool . eq A:Bool xor A:Bool = false . eq A:Bool and (B:Bool xor C:Bool) = A:Bool and B:Bool xor A:Bool and C:Bool . eq not A:Bool = true xor A:Bool . eq A:Bool or B:Bool = A:Bool and B:Bool xor A:Bool xor B:Bool . eq A:Bool implies B:Bool = not (A:Bool xor A:Bool and B:Bool) . mb f(X, X) : NzInt . cmb f(X, Y) : NzInt if X =/= Y = true . rl f(X, X, Y) => f(Y, Y) . crl f(X, Y, Y) => f(Z, X) if Z =/= Y = true [nonexec] . var Z : Int . var X : Int . var Y : Int . Grammar: nonterminals: 43 terminals: 126 productions: 197 Term rewriting system: kinds: 2 sorts: 7 user symbols: 35 total symbols: 38 polymorphic operators: 3 membership axioms: 2 equations: 11 rules: 2 strategies: 0 strategy definitions: 0 fmod INT is protecting NAT . sorts NzInt Int . subsorts NzNat < NzInt Nat < Int . op -_ : NzNat -> NzInt [ctor special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op -_ : NzInt -> NzInt [ditto] . op -_ : Int -> Int [ditto] . op _+_ : Int Int -> Int [assoc comm prec 33 special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op _-_ : Int Int -> Int [prec 33 gather (E e) special ( id-hook NumberOpSymbol (-) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op _*_ : NzInt NzInt -> NzInt [assoc comm prec 31 special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op _*_ : Int Int -> Int [ditto] . op _quo_ : Int NzInt -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op _rem_ : Int NzInt -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op _^_ : Int Nat -> Int [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op _^_ : NzInt Nat -> NzInt [ditto] . op abs : NzInt -> NzNat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op abs : Int -> Nat [ditto] . op gcd : NzInt Int -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op gcd : Int Int -> Nat [ditto] . op lcm : NzInt NzInt -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op lcm : Int Int -> Nat [ditto] . op min : NzInt NzInt -> NzInt [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op min : Int Int -> Int [ditto] . op max : NzInt NzInt -> NzInt [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op max : Int Int -> Int [ditto] . op max : NzNat Int -> NzNat [ditto] . op max : Nat Int -> Nat [ditto] . op ~_ : Int -> Int [special ( id-hook NumberOpSymbol (~) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op _xor_ : Int Int -> Int [assoc comm prec 55 special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op _&_ : Nat Int -> Nat [assoc comm prec 53 special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op _&_ : Int Int -> Int [ditto] . op _|_ : NzInt Int -> NzInt [assoc comm prec 57 special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op _|_ : Int Int -> Int [ditto] . op _>>_ : Int Nat -> Int [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op _<<_ : Int Nat -> Int [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op _<_ : Int Int -> Bool [prec 37 special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Int Int -> Bool [prec 37 special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Int Int -> Bool [prec 37 special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Int Int -> Bool [prec 37 special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzInt Int -> Bool [prec 51 special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int) term-hook trueTerm (true) term-hook falseTerm (false))] . endfm mod FOO is including INT . sorts Foo . subsorts Int < Foo . op f : Int Int -> Int [assoc comm id: 1] . vars X Y Z : Int . eq f (f (X, Y), X) = f (Y, Y) . cq f (f (X, Y), Y) = f (Y, X) if X =/= Y . rl f (f (X, Y), X) => f (Y, Y) . crl f (f (X, Y), Y) => f (Z, X) if Z =/= Y . mb f (X, X) : NzInt . cmb f (X, Y) : NzInt if X =/= Y . endm eq f(X, X, Y) = f(Y, Y) . ceq f(X, Y, Y) = f(X, Y) if X =/= Y = true . eq true and A:Bool = A:Bool . eq false and A:Bool = false . eq A:Bool and A:Bool = A:Bool . eq false xor A:Bool = A:Bool . eq A:Bool xor A:Bool = false . eq A:Bool and (B:Bool xor C:Bool) = A:Bool and B:Bool xor A:Bool and C:Bool . eq not A:Bool = true xor A:Bool . eq A:Bool or B:Bool = A:Bool and B:Bool xor A:Bool xor B:Bool . eq A:Bool implies B:Bool = not (A:Bool xor A:Bool and B:Bool) . Int: f(0, 2) mod FOO is sorts Bool Zero NzNat Nat NzInt Int Foo . subsorts Zero NzNat NzNat < Nat . subsort NzNat < NzInt . subsorts NzInt Nat < Int . subsort Int < Foo . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op 0 : -> Zero [ctor] . op s_ : Nat -> NzNat [ctor iter prec 15 gather (E) special ( id-hook SuccSymbol term-hook zeroTerm (0))] . op _+_ : NzNat Nat -> NzNat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Nat Nat -> Nat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Int Int -> Int [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op sd : Nat Nat -> Nat [comm special ( id-hook CUI_NumberOpSymbol (sd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : NzNat NzNat -> NzNat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Nat Nat -> Nat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : NzInt NzInt -> NzInt [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Int Int -> Int [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Int NzInt -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Int NzInt -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Nat Nat -> Nat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzNat Nat -> NzNat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Int Nat -> Int [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzInt Nat -> NzInt [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op modExp : [Foo] [Foo] [Foo] -> [Foo] [special ( id-hook NumberOpSymbol (modExp) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : NzInt Int -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Int Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzInt NzInt -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Int Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzInt NzInt -> NzInt [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Int Int -> Int [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzInt NzInt -> NzInt [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Int Int -> Int [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzNat Int -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Nat Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _xor_ : Nat Nat -> Nat [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _xor_ : Int Int -> Int [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Nat Nat -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Nat Int -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Int Int -> Int [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : NzNat Nat -> NzNat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : Nat Nat -> Nat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : NzInt Int -> NzInt [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : Int Int -> Int [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _>>_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _>>_ : Int Nat -> Int [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<<_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<<_ : Int Nat -> Int [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzNat Nat -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzInt Int -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op -_ : NzNat -> NzInt [ctor prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : NzInt -> NzInt [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : Int -> Int [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _-_ : Int Int -> Int [prec 33 gather (E e) special ( id-hook NumberOpSymbol (-) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : NzInt -> NzNat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : Int -> Nat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op ~_ : Int -> Int [prec 15 gather (E) special ( id-hook NumberOpSymbol (~) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op f : Int Int -> Int [assoc comm id: 1] . var Z : Int . var X : Int . var Y : Int . mb f(X, X) : NzInt . cmb f(X, Y) : NzInt if _=/=_(X, Y) = true . eq f(X, X, Y) = f(Y, Y) . ceq f(X, Y, Y) = f(X, Y) if _=/=_(X, Y) = true . eq _and_(true, A:Bool) = A:Bool . eq _and_(false, A:Bool) = false . eq _and_(A:Bool, A:Bool) = A:Bool . eq _xor_(false, A:Bool) = A:Bool . eq _xor_(A:Bool, A:Bool) = false . eq _and_(A:Bool, _xor_(B:Bool, C:Bool)) = _xor_(_and_(A:Bool, B:Bool), _and_( A:Bool, C:Bool)) . eq not_(A:Bool) = _xor_(true, A:Bool) . eq _or_(A:Bool, B:Bool) = _xor_(_and_(A:Bool, B:Bool), _xor_(A:Bool, B:Bool)) . eq _implies_(A:Bool, B:Bool) = not_(_xor_(A:Bool, _and_(A:Bool, B:Bool))) . rl f(X, X, Y) => f(Y, Y) . crl f(X, Y, Y) => f(Z, X) if _=/=_(Z, Y) = true [nonexec] . endm mod FOO is sorts Bool Zero NzNat Nat NzInt Int Foo . subsorts Zero NzNat NzNat < Nat . subsort NzNat < NzInt . subsorts NzInt Nat < Int . subsort Int < Foo . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op 0 : -> Zero [ctor] . op s_ : Nat -> NzNat [ctor iter prec 15 gather (E) special ( id-hook SuccSymbol term-hook zeroTerm (0))] . op _+_ : NzNat Nat -> NzNat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Nat Nat -> Nat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Int Int -> Int [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op sd : Nat Nat -> Nat [comm special ( id-hook CUI_NumberOpSymbol (sd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : NzNat NzNat -> NzNat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Nat Nat -> Nat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : NzInt NzInt -> NzInt [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Int Int -> Int [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Int NzInt -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Int NzInt -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Nat Nat -> Nat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzNat Nat -> NzNat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Int Nat -> Int [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzInt Nat -> NzInt [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op modExp : [Foo] [Foo] [Foo] -> [Foo] [special ( id-hook NumberOpSymbol (modExp) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : NzInt Int -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Int Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzInt NzInt -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Int Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzInt NzInt -> NzInt [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Int Int -> Int [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzInt NzInt -> NzInt [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Int Int -> Int [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzNat Int -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Nat Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _xor_ : Nat Nat -> Nat [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _xor_ : Int Int -> Int [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Nat Nat -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Nat Int -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Int Int -> Int [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : NzNat Nat -> NzNat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : Nat Nat -> Nat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : NzInt Int -> NzInt [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : Int Int -> Int [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _>>_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _>>_ : Int Nat -> Int [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<<_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<<_ : Int Nat -> Int [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzNat Nat -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzInt Int -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op -_ : NzNat -> NzInt [ctor prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : NzInt -> NzInt [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : Int -> Int [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _-_ : Int Int -> Int [prec 33 gather (E e) special ( id-hook NumberOpSymbol (-) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : NzInt -> NzNat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : Int -> Nat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op ~_ : Int -> Int [prec 15 gather (E) special ( id-hook NumberOpSymbol (~) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op f : Int Int -> Int [assoc comm id: 1] . var Z : Int . var X : Int . var Y : Int . mb f(X, X) : NzInt . cmb f(X, Y) : NzInt if (X =/= Y) = true . eq f(X, X, Y) = f(Y, Y) . ceq f(X, Y, Y) = f(X, Y) if (X =/= Y) = true . eq (true and A:Bool) = A:Bool . eq (false and A:Bool) = false . eq (A:Bool and A:Bool) = A:Bool . eq (false xor A:Bool) = A:Bool . eq (A:Bool xor A:Bool) = false . eq (A:Bool and (B:Bool xor C:Bool)) = ((A:Bool and B:Bool) xor (A:Bool and C:Bool)) . eq (not A:Bool) = (true xor A:Bool) . eq (A:Bool or B:Bool) = ((A:Bool and B:Bool) xor (A:Bool xor B:Bool)) . eq (A:Bool implies B:Bool) = (not (A:Bool xor (A:Bool and B:Bool))) . rl f(X, X, Y) => f(Y, Y) . crl f(X, Y, Y) => f(Z, X) if (Z =/= Y) = true [nonexec] . endm Bye. maude-3.1/tests/Misc/CU_Unification.expected0000644000175200017520000001475613720017024016025 00000000000000========================================== unify in FOO : f(X, Y) =? f(U, V) . Unifier 1 X --> #1:Foo Y --> #2:Foo U --> #1:Foo V --> #2:Foo Unifier 2 X --> 1f Y --> #1:Foo U --> 1f V --> #1:Foo Unifier 3 X --> 1f Y --> f(#1:Foo, #2:Foo) U --> #1:Foo V --> #2:Foo Unifier 4 X --> 1f Y --> #1:Foo U --> 1f V --> #1:Foo Unifier 5 X --> #1:Foo Y --> #2:Foo U --> 1f V --> f(#1:Foo, #2:Foo) ========================================== variant unify in FOO : f(X, Y) =? f(U, V) . Unifier 1 rewrites: 0 X --> %1:Foo Y --> %2:Foo U --> %1:Foo V --> %2:Foo Unifier 2 rewrites: 0 X --> 1f Y --> f(%1:Foo, %2:Foo) U --> %1:Foo V --> %2:Foo Unifier 3 rewrites: 0 X --> %1:Foo Y --> %2:Foo U --> 1f V --> f(%1:Foo, %2:Foo) No more unifiers. rewrites: 0 ========================================== unify in FOO : f(X, Y) =? X . Unifier 1 X --> 1f Y --> 1f ========================================== variant unify in FOO : f(X, Y) =? X . Unifier 1 rewrites: 0 X --> 1f Y --> 1f No more unifiers. rewrites: 0 ========================================== unify in FOO : f(X, Y) =? Y . Unifier 1 X --> 1f Y --> #1:Foo ========================================== variant unify in FOO : f(X, Y) =? Y . Unifier 1 rewrites: 0 X --> 1f Y --> %1:Foo No more unifiers. rewrites: 0 ========================================== unify in FOO2 : f(X, Y) =? f(U, V) . Unifier 1 X --> #1:Foo Y --> #2:Foo U --> #1:Foo V --> #2:Foo Unifier 2 X --> #1:Foo Y --> 1f U --> #1:Foo V --> 1f Unifier 3 X --> f(#1:Foo, #2:Foo) Y --> 1f U --> #1:Foo V --> #2:Foo Unifier 4 X --> #1:Foo Y --> 1f U --> #1:Foo V --> 1f Unifier 5 X --> #1:Foo Y --> #2:Foo U --> f(#1:Foo, #2:Foo) V --> 1f ========================================== variant unify in FOO2 : f(X, Y) =? f(U, V) . Unifier 1 rewrites: 0 X --> %1:Foo Y --> %2:Foo U --> %1:Foo V --> %2:Foo Unifier 2 rewrites: 0 X --> f(%1:Foo, %2:Foo) Y --> 1f U --> %1:Foo V --> %2:Foo Unifier 3 rewrites: 0 X --> %1:Foo Y --> %2:Foo U --> f(%1:Foo, %2:Foo) V --> 1f No more unifiers. rewrites: 0 ========================================== unify in FOO2 : f(X, Y) =? X . Unifier 1 X --> #1:Foo Y --> 1f ========================================== variant unify in FOO2 : f(X, Y) =? X . Unifier 1 rewrites: 0 X --> %1:Foo Y --> 1f No more unifiers. rewrites: 0 ========================================== unify in FOO2 : f(X, Y) =? Y . Unifier 1 X --> 1f Y --> 1f ========================================== variant unify in FOO2 : f(X, Y) =? Y . Unifier 1 rewrites: 0 X --> 1f Y --> 1f No more unifiers. rewrites: 0 ========================================== unify in FOO3 : f(X, Y) =? f(U, V) . Unifier 1 X --> #1:Foo Y --> #2:Foo U --> #1:Foo V --> #2:Foo Unifier 2 X --> 1f Y --> #1:Foo U --> 1f V --> #1:Foo Unifier 3 X --> 1f Y --> #1:Foo U --> #1:Foo V --> 1f Unifier 4 X --> 1f Y --> f(#1:Foo, #2:Foo) U --> #1:Foo V --> #2:Foo Unifier 5 X --> #1:Foo Y --> 1f U --> 1f V --> #1:Foo Unifier 6 X --> #1:Foo Y --> 1f U --> #1:Foo V --> 1f Unifier 7 X --> f(#1:Foo, #2:Foo) Y --> 1f U --> #1:Foo V --> #2:Foo Unifier 8 X --> 1f Y --> #1:Foo U --> 1f V --> #1:Foo Unifier 9 X --> #1:Foo Y --> 1f U --> 1f V --> #1:Foo Unifier 10 X --> #1:Foo Y --> #2:Foo U --> 1f V --> f(#1:Foo, #2:Foo) Unifier 11 X --> 1f Y --> #1:Foo U --> #1:Foo V --> 1f Unifier 12 X --> #1:Foo Y --> 1f U --> #1:Foo V --> 1f Unifier 13 X --> #1:Foo Y --> #2:Foo U --> f(#1:Foo, #2:Foo) V --> 1f ========================================== variant unify in FOO3 : f(X, Y) =? f(U, V) . Unifier 1 rewrites: 0 X --> %1:Foo Y --> %2:Foo U --> %1:Foo V --> %2:Foo Unifier 2 rewrites: 0 X --> 1f Y --> f(%1:Foo, %2:Foo) U --> %1:Foo V --> %2:Foo Unifier 3 rewrites: 0 X --> f(%1:Foo, %2:Foo) Y --> 1f U --> %1:Foo V --> %2:Foo Unifier 4 rewrites: 0 X --> %1:Foo Y --> %2:Foo U --> 1f V --> f(%1:Foo, %2:Foo) Unifier 5 rewrites: 0 X --> %1:Foo Y --> %2:Foo U --> f(%1:Foo, %2:Foo) V --> 1f No more unifiers. rewrites: 0 ========================================== unify in FOO3 : f(X, Y) =? X . Unifier 1 X --> 1f Y --> 1f Unifier 2 X --> #1:Foo Y --> 1f ========================================== variant unify in FOO3 : f(X, Y) =? X . Unifier 1 rewrites: 0 X --> %1:Foo Y --> 1f No more unifiers. rewrites: 0 ========================================== unify in FOO3 : f(X, Y) =? Y . Unifier 1 X --> 1f Y --> #1:Foo Unifier 2 X --> 1f Y --> 1f ========================================== variant unify in FOO3 : f(X, Y) =? Y . Unifier 1 rewrites: 0 X --> 1f Y --> %1:Foo No more unifiers. rewrites: 0 ========================================== unify in FOO4 : f(X, Y) =? f(U, V) . Unifier 1 X --> #1:Foo Y --> #2:Foo V --> #1:Foo U --> #2:Foo Unifier 2 X --> #2:Foo Y --> #1:Foo V --> #1:Foo U --> #2:Foo Unifier 3 X --> 1f Y --> #1:Foo V --> 1f U --> #1:Foo Unifier 4 X --> 1f Y --> #1:Foo V --> #1:Foo U --> 1f Unifier 5 X --> 1f Y --> f(#1:Foo, #2:Foo) V --> #1:Foo U --> #2:Foo Unifier 6 X --> #1:Foo Y --> 1f V --> 1f U --> #1:Foo Unifier 7 X --> #1:Foo Y --> 1f V --> #1:Foo U --> 1f Unifier 8 X --> f(#1:Foo, #2:Foo) Y --> 1f V --> #1:Foo U --> #2:Foo Unifier 9 X --> 1f Y --> #1:Foo V --> 1f U --> #1:Foo Unifier 10 X --> #1:Foo Y --> 1f V --> 1f U --> #1:Foo Unifier 11 X --> #1:Foo Y --> #2:Foo V --> 1f U --> f(#1:Foo, #2:Foo) Unifier 12 X --> 1f Y --> #1:Foo V --> #1:Foo U --> 1f Unifier 13 X --> #1:Foo Y --> 1f V --> #1:Foo U --> 1f Unifier 14 X --> #1:Foo Y --> #2:Foo V --> f(#1:Foo, #2:Foo) U --> 1f ========================================== variant unify in FOO4 : f(X, Y) =? f(U, V) . Unifier 1 rewrites: 0 X --> %1:Foo Y --> %2:Foo V --> %1:Foo U --> %2:Foo Unifier 2 rewrites: 0 X --> %2:Foo Y --> %1:Foo V --> %1:Foo U --> %2:Foo Unifier 3 rewrites: 0 X --> 1f Y --> f(%1:Foo, %2:Foo) V --> %1:Foo U --> %2:Foo Unifier 4 rewrites: 0 X --> f(%1:Foo, %2:Foo) Y --> 1f V --> %1:Foo U --> %2:Foo Unifier 5 rewrites: 0 X --> %1:Foo Y --> %2:Foo V --> 1f U --> f(%1:Foo, %2:Foo) Unifier 6 rewrites: 0 X --> %1:Foo Y --> %2:Foo V --> f(%1:Foo, %2:Foo) U --> 1f No more unifiers. rewrites: 0 ========================================== unify in FOO4 : f(X, Y) =? X . Unifier 1 X --> 1f Y --> 1f Unifier 2 X --> #1:Foo Y --> 1f ========================================== variant unify in FOO4 : f(X, Y) =? X . Unifier 1 rewrites: 0 X --> %1:Foo Y --> 1f No more unifiers. rewrites: 0 ========================================== unify in FOO4 : f(X, Y) =? Y . Unifier 1 X --> 1f Y --> #1:Foo Unifier 2 X --> 1f Y --> 1f ========================================== variant unify in FOO4 : f(X, Y) =? Y . Unifier 1 rewrites: 0 X --> 1f Y --> %1:Foo No more unifiers. rewrites: 0 Bye. maude-3.1/tests/Misc/Makefile.am0000755000175200017520000000362213724605267013510 00000000000000TESTS = \ view \ parameterizedView \ mapToParameterTheory \ badView \ dekker \ commands \ debug \ renaming \ dataStructures \ parameterization \ unification \ unification2 \ unification3 \ attributes \ diophantine \ variantUnification \ filteredVariantUnification \ variantNarrowing \ meseguerFiniteVariant \ variantMatching \ CU_Unification \ assocUnification \ AU_Unification \ sreduce \ smtTest \ narrow \ continue \ parse \ bubble \ rot13 MAUDE_FILES = \ view.maude \ parameterizedView.maude \ mapToParameterTheory.maude \ badView.maude \ dekker.maude \ commands.maude \ debug.maude \ renaming.maude \ dataStructures.maude \ parameterization.maude \ unification.maude \ unification2.maude \ unification3.maude \ attributes.maude \ diophantine.maude \ variantUnification.maude \ filteredVariantUnification.maude \ variantNarrowing.maude \ meseguerFiniteVariant.maude \ variantMatching.maude \ CU_Unification.maude \ assocUnification.maude \ AU_Unification.maude \ sreduce.maude \ smtTest.maude \ narrow.maude \ continue.maude \ parse.maude \ bubble.maude \ rot13.maude RESULT_FILES = \ view.expected \ parameterizedView.expected \ mapToParameterTheory.expected \ badView.expected \ dekker.expected \ commands.expected \ debug.expected \ renaming.expected \ dataStructures.expected \ parameterization.expected \ unification.expected \ unification2.expected \ unification3.expected \ attributes.expected \ diophantine.expected \ variantUnification.expected \ filteredVariantUnification.expected \ variantNarrowing.expected \ meseguerFiniteVariant.expected \ variantMatching.expected \ CU_Unification.expected \ assocUnification.expected \ AU_Unification.expected \ sreduce.expected \ smtTest.expected \ narrow.expected \ continue.expected \ parse.expected \ bubble.expected \ rot13.expected EXTRA_DIST = $(TESTS) $(MAUDE_FILES) $(RESULT_FILES) maude-3.1/tests/Misc/bubble.expected0000644000175200017520000000761513256560526014433 00000000000000Foo: start tokens(nil) tokens(nil) tokens(nil) Foo: start tokens(nil) tokens(nil) Warning: , line 43: ambiguous term, two parses are: Foo : start tokens(nil) tokens('a) -versus- Foo : start tokens('a) tokens(nil) Arbitrarily taking the first as correct. Foo: start tokens(nil) tokens('a) Warning: , line 46: ambiguous term, two parses are: Foo : start tokens(nil) tokens('< 'a '>) -versus- Foo : start tokens('< 'a '>) tokens(nil) Arbitrarily taking the first as correct. Foo: start tokens(nil) tokens('< 'a '>) Foo: [tokens(nil) tokens2(nil) tokens(nil)] Warning: , line 92: ambiguous term, two parses are: Foo : tokens(nil) tokens('a) -versus- Foo : tokens('a) tokens(nil) Arbitrarily taking the first as correct. Foo: tokens(nil) tokens('a) Foo: tokens('a) tokens2(nil) Warning: , line 147: ambiguous term, two parses are: Bar : tokens(nil) tokens2('start) -versus- Foo : start tokens(nil) tokens(nil) tokens2(nil) Arbitrarily taking the first as correct. Bar: tokens(nil) tokens2('start) Warning: , line 167: didn't expect token >: start a b > <---*HERE* Warning: , line 167: no parse for term. Warning: , line 170 : unexpected end of tokens. Warning: , line 170: no parse for term. Warning: , line 173: didn't expect token g: start < a < b > c d e f g <---*HERE* Warning: , line 173: no parse for term. Foo: start tokens('a ; '<) Foo: start tokens('a '<|) Warning: , line 209: ambiguous term, two parses are: Foo : start tokens('a ; 'b) -versus- Foo : start tokens('a 'b) Arbitrarily taking the first as correct. Foo: start tokens('a ; 'b) Foo: start tokens('a ; 'b) Foo: start tokens('a 'b 'c '< 'e '> 'f) Warning: , line 243: ambiguous term, two parses are: Foo : start tokens('a ; 'b ; 'c) -versus- Foo : start tokens('a 'b 'c) Arbitrarily taking the first as correct. Foo: start tokens('a ; 'b ; 'c) Foo: start tokens('a) tokens('b) Warning: , line 266: ambiguous term, two parses are: Foo : start tokens('a) tokens('b 'c 'd 'e 'f 'g) -versus- Foo : start tokens('a 'b) tokens('c 'd 'e 'f 'g) Arbitrarily taking the first as correct. Foo: start tokens('a) tokens('b 'c 'd 'e 'f 'g) Foo: start tokens('< 'b '>) tokens('< 'd 'e 'f 'g '>) Warning: , line 272 : unexpected end of tokens. Warning: , line 272: no parse for term. Warning: , line 275: didn't expect token >: start < b > > <---*HERE* Warning: , line 275: no parse for term. Warning: , line 293 : unexpected end of tokens. Warning: , line 293: no parse for term. Foo: start tokens('a 'b 'c) tokens('d 'e 'f) Warning: , line 299: ambiguous term, two parses are: Foo : start tokens('a 'b 'c) tokens('d 'e 'f 'g) -versus- Foo : start tokens('a 'b 'c 'd) tokens('e 'f 'g) Arbitrarily taking the first as correct. Foo: start tokens('a 'b 'c) tokens('d 'e 'f 'g) Foo: start tokens('< 'a 'b 'c 'd '>) tokens('< 'e 'f 'g '>) Warning: , line 320: ambiguous term, two parses are: Foo : start tokens('a 'b) tokens('c 'd 'e) -versus- Foo : start tokens('a 'b 'c) tokens('d 'e) Arbitrarily taking the first as correct. Foo: start tokens('a 'b) tokens('c 'd 'e) Foo: start tokens('< 'a '>) tokens('b 'c) Foo: start tokens('a 'b 'c) tokens('d 'e 'f) Warning: , line 329: didn't expect token g: start a b c d e f g <---*HERE* Warning: , line 329: no parse for term. Warning: , line 352: ambiguous term, two parses are: Foo : end -versus- Foo : tokens(nil) end Arbitrarily taking the first as correct. Foo: end Warning: , line 375: ambiguous term, two parses are: Bar : start tokens(nil) e n d -versus- Bar : start tokens(nil) tokens(nil) e n d Arbitrarily taking the first as correct. Bar: start tokens(nil) e n d Bye. maude-3.1/tests/Misc/badView.maude0000644000175200017520000000463413472140776014052 00000000000000*** *** Examples to exercise error detection and recovering in views. *** set show timing off . fth MONOID is sort Elt . op 0 : -> Elt . op _._ : Elt Elt -> Elt [assoc] . endfth view GOOD from MONOID to NAT is sort Elt to Nat . vars X Y : Elt . op X . Y to term X + Y . endv *** rhs variable of op->term mapping not in lhs view BAD1 from MONOID to NAT is sort Elt to Nat . vars X Y Z : Elt . op X . Y to term X + Y + Z . endv *** non-variable argument in lhs of op->term mapping view BAD2 from MONOID to NAT is sort Elt to Nat . var X : Elt . op X . 0 to term X + X . endv *** nonlinear lhs of op->term mapping view BAD3 from MONOID to NAT is sort Elt to Nat . var X : Elt . op X . X to term X + X . endv fth MONOID2 is sort Elt . op 0 : -> Elt . op f : Elt Elt -> Elt [assoc] . endfth *** wrong number of lhs args; parses due to flattening view BAD4 from MONOID2 to NAT is sort Elt to Nat . vars X Y Z : Elt . op f(X, Y, Z) to term X + Y + Z . endv *** *** Interaction between parameterized views and theory views. *** *** conflict *** created by view instantiation *** propagation view->module via instantiation by module-view argument *** propagation module->module via module importation *** trigged by module instantiation fmod WRAPPER{U :: TRIV} is sort Wrapper{U} . endfm view MapToList{A :: TRIV, B :: TRIV} from TRIV to MAP{List{A}, List{B}} is sort Elt to Map{List{A}, List{B}} . endv fmod MAP-TO-LIST-WRAP{C :: TRIV, D :: TRIV} is inc WRAPPER{MapToList{C, Set{D}}} . endfm *** MapToList{C, Set{D}} creates a conflict between C and D *** propagates into WRAPPER{MapToList{C, Set{D}}} by instantiation *** propagates into MAP-TO-LIST-WRAP by importation fmod TEST{E :: TRIV, F :: TRIV} is inc MAP-TO-LIST-WRAP{TRIV, TRIV}{E, F} . endfm *** should trigger conflict between C and D *** conflict *** created by module instantiation, *** propagation module->view via toModule *** triggered by view instantiation fmod WRAPPER{U :: TRIV} is sort Wrapper{U} . endfm view V{A :: TRIV, B :: TRIV} from TRIV to MAP{A, Set{B}} is sort Elt to Map{A, Set{B}} . endv *** MAP{A, Set{B}} creates a conflict between A and B *** popagates into V via toModule fmod TEST{P :: TRIV, Q :: TRIV} is inc WRAPPER{V{TRIV,TRIV}{P, Q}} . endfm *** should trigger conflict between A and B *** Parameter not appearing in toModule. view Wrapper{V :: TRIV} from TRIV to NAT is sort Elt to Nat . endv maude-3.1/tests/Misc/attributes.expected0000644000175200017520000000547613140737545015370 00000000000000mod ATTRIBUTES is sorts Bool Foo Bar . subsort Foo < Bar . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op a : -> Foo . op b : -> Foo . op c : -> Foo . op f : Foo Foo -> Foo [metadata "binary op"] . op f : Bar Bar -> Bar . op g : Foo -> Bar [metadata "unary op"] . op h : Foo -> Bar [metadata "unary op"] . var X : Foo . var Y : Bar . mb g(g(X)) : Foo [label downSort metadata "down sort" print "sort became Foo"] . cmb Y : Foo if f(Y, a) = f(a, Y) [nonexec] . eq a = b [metadata "definition"] . eq f(X, X) = g(X) [print "X = " X] . eq f(g(X), X) = c [label collapse metadata "collapse" print "X = " X] . eq g(X) = f(X, X) [nonexec label rev metadata "rev"] . eq true and A:Bool = A:Bool . eq false and A:Bool = false . eq A:Bool and A:Bool = A:Bool . eq false xor A:Bool = A:Bool . eq A:Bool xor A:Bool = false . eq A:Bool and (B:Bool xor C:Bool) = A:Bool and B:Bool xor A:Bool and C:Bool . eq not A:Bool = true xor A:Bool . eq A:Bool or B:Bool = A:Bool and B:Bool xor A:Bool xor B:Bool . eq A:Bool implies B:Bool = not (A:Bool xor A:Bool and B:Bool) . rl f(X, X) => f(g(X), g(X)) [nonexec label expand] . rl h(h(X)) => f(c, X) [label tick metadata "step" print "step X = " X] . endm ========================================== reduce in ATTRIBUTES : f(c, c) . rewrites: 1 result Bar: g(c) ========================================== reduce in ATTRIBUTES : f(c, c) . X = c rewrites: 1 result Bar: g(c) ========================================== reduce in ATTRIBUTES : f(g(c), c) . X = c rewrites: 1 result Foo: c ========================================== reduce in ATTRIBUTES : f(g(c), c) . X = crewrites: 1 result Foo: c ========================================== reduce in ATTRIBUTES : g(g(c)) . sort became Foo rewrites: 1 result Foo: g(g(c)) ========================================== rewrite in ATTRIBUTES : h(h(b)) . step X = b rewrites: 1 result Foo: f(c, b) Bye. maude-3.1/tests/Misc/attributes.maude0000644000175200017520000000164411064251067014644 00000000000000set show timing off . mod ATTRIBUTES is sorts Foo Bar . subsort Foo < Bar . ops a b c : -> Foo . op f : Foo Foo -> Foo [metadata "binary op"] . op f : Bar Bar -> Bar [ditto] . ops g h : Foo -> Bar [metadata "unary op"] . var X : Foo . var Y : Bar . eq a = b [metadata "definition"] . eq f(X, X) = g(X) [print "X = " X] . eq f(g(X), X) = c [label collapse metadata "collapse" print "X = " X] . eq g(X) = f(X, X) [label rev nonexec metadata "rev"] . mb g(g(X)) : Foo [metadata "down sort" label downSort print "sort became Foo"] . cmb Y : Foo if f(Y, a) = f(a, Y) [nonexec] . rl f(X, X) => f(g(X), g(X)) [label expand nonexec] . rl h(h(X)) => f(c, X) [metadata "step" label tick print "step X = " X:Foo] . endm show all . red f(c, c) . set print attr on . red f(c, c) . red f(g(c), c) . set print attr newline off . red f(g(c), c) . set print attr newline on . red g(g(c)) . rew h(h(b)) . maude-3.1/tests/Misc/filteredVariantUnification.maude0000644000175200017520000000441713723616547020007 00000000000000set show timing off . ***( From: Santiago Escobar, Julia Sapiña: Most General Variant Unifiers. International Conference on Logic Programming (ICLP 2019) Technical Communications, EPTCS 306, pp.154-167 ) fmod EXCLUSIVE-OR is sorts Elem ElemXor . subsort Elem < ElemXor . ops a b c : -> Elem . op mt : -> ElemXor . op _*_ : ElemXor ElemXor -> ElemXor [assoc comm] . vars X Y Z U V : [ElemXor] . vars V1 V2 V3 V4 V5 V6 V7 V8 V9 : [ElemXor] . eq [idem] : X * X = mt [variant] . eq [idem-Coh] : X * X * Z = Z [variant] . eq [id] : X * mt = X [variant] . op f1 : [ElemXor] -> [ElemXor] . op f2 : [ElemXor] [ElemXor] -> [ElemXor] . op f3 : [ElemXor] [ElemXor] [ElemXor] -> [ElemXor] . endfm *** P1 filtered variant unify V1 =? V2 * V3 . *** P2 filtered variant unify V1 =? V2 * V3 * V4 . *** P3 filtered variant unify V1 =? f1(V2 * V3 * f1(V4)) . *** P4 filtered variant unify V1 =? f2(V2 * V3, f1(V2 * V4)) . *** P5 filtered variant unify V1 =? f3(V2 * V3, f1(V3 * V4), f2(V2, f1(V4))) . --------------------------------------------------------------- *** P6 filtered variant unify V1 * V2 =? V3 * V4 . *** P7 filtered variant unify V1 * V2 =? f1(V3 * V4) . *** P8 filtered variant unify V1 * V2 =? f1(V3 * V3 * f1(V4)) . *** P9 - too slow for test suite *** filtered variant unify V1 * V2 =? f2(V3 * V4, f1(V3 * V5)) . *** P10 - too slow for test suite *** filtered variant unify V1 * V2 =? f3(V3 * V4, f1(V4 * V5), f2(V3, f1(V5))) . --------------------------------------------------------------- *** P11 filtered variant unify f1(V1) =? f1(V2 * V3) . *** P12 - 3 mgus filtered variant unify f1(V1) * f1(V2) =? f1(V3) * f1(V3 * V4) . *** P13 - too slow for test suite *** filtered variant unify f1(V1 * V2) =? f1(V3 * V4 * V5) . *** P14 filtered variant unify f2(V1 * V2, V2 * V3) =? f2(V4, V5) . *** P15 filtered variant unify f3(V1 * V2, V3 * V4, V5 * V6) =? f3(V7, V8, V9) . --------------------------------------------------------------- *** P16 filtered variant unify V1 =? a * b * V2 . *** P17 filtered variant unify V1 * V2 =? a * b * V3 . *** P18 filtered variant unify V1 * a =? V2 * b . *** P19 - 3 mgus filtered variant unify f1(a) * f1(V1) =? f1(V2 * b) * f1(V3 * c) . *** P20 filtered variant unify f2(a, V1) =? f2(V2 * V3, f1(a * b)) . maude-3.1/tests/Misc/meseguerFiniteVariant0000755000175200017520000000042012664176320015663 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/meseguerFiniteVariant.maude -no-banner -no-advise \ > meseguerFiniteVariant.out 2>&1 diff $srcdir/meseguerFiniteVariant.expected meseguerFiniteVariant.out > /dev/null 2>&1 maude-3.1/tests/Misc/mapToParameterTheory.expected0000644000175200017520000000452213472141533017277 00000000000000fmod TEST is sorts Bar Foo{V2} Baz{V{V2}} . op a : -> Bar . op f : Bar -> Foo{V2} . op g : Bar -> Baz{V{V2}} . endfm fmod TEST is sorts Bar Foo{V2} Baz{V{V2}} . op a : -> Bar . op f : Bar -> Foo{V2} . op g : Bar -> Baz{V{V2}} . endfm fmod TEST is sorts Elt Foo{V2} Baz{V{V2}} . op a : -> Elt . op f : Elt -> Foo{V2} . op g : Elt -> Baz{V{V2}} . endfm fmod TEST is sorts Elt Foo{V2} Baz{V{V2}} . op a : -> Elt . op f : Elt -> Foo{V2} . op g : Elt -> Baz{V{V2}} . endfm fmod TEST is sort Bar . op summation : Bar Bar -> Bar . op g : Bar -> Bar . op h : Bar Bar -> Bar . eq g(X:Bar) = summation(X:Bar, X:Bar) . eq h(X:Bar, Y:Bar) = summation(X:Bar, Y:Bar) . endfm fmod TEST is sort Bar . op summation : Bar Bar -> Bar . op g : Bar -> Bar . op h : Bar Bar -> Bar . eq g(X:Bar) = summation(X:Bar, X:Bar) . eq h(X:Bar, Y:Bar) = summation(X:Bar, Y:Bar) . endfm fmod TEST is sort Bar . op summation : Bar Bar -> Bar . op g : Bar -> Bar . op h : Bar Bar -> Bar . eq g(X:Bar) = summation(X:Bar, X:Bar) . eq h(X:Bar, Y:Bar) = summation(X:Bar, g(Y:Bar)) . endfm fmod TEST is sort Bar . op summation : Bar Bar -> Bar . op inv : Bar -> Bar . op g : Bar -> Bar . op h : Bar Bar -> Bar . eq g(X:Bar) = summation(inv(X:Bar), inv(X:Bar)) . eq h(X:Bar, Y:Bar) = summation(inv(Y:Bar), inv(X:Bar)) . endfm fmod TEST is sort Bar . op summation : Bar Bar -> Bar . op inv : Bar -> Bar . op g : Bar -> Bar . op h : Bar Bar Bar -> Bar . eq g(X:Bar) = summation(inv(X:Bar), inv(X:Bar)) . eq h(X:Bar, Y:Bar, Z:Bar) = summation(inv(X:Bar), inv(Z:Bar)) . endfm fmod TEST is sort Bar . op summation : Bar Bar -> Bar . op inv : Bar -> Bar . op g : Bar -> Bar . op h : Bar Bar Bar Bar -> Bar . eq g(X:Bar) = summation(inv(X:Bar), inv(X:Bar)) . eq h(W:Bar, X:Bar, Y:Bar, Z:Bar) = summation(inv(X:Bar), inv(Z:Bar)) . endfm fmod TEST is sorts Bar One{V2} Two{V2} MySort . op h : Bar Universal -> Universal [poly (2 0)] . op 1 : -> Bar . op 2 : -> Bar . op g1 : One{V2} -> One{V2} . op g2 : Two{V2} -> Two{V2} . op p : Bar MySort -> MySort . eq g1(X:One{V2}) = h(1, X:One{V2}) . eq g2(Y:Two{V2}) = h(2, Y:Two{V2}) . eq p(X:Bar, Y:MySort) = h(X:Bar, Y:MySort) . endfm ========================================== reduce in TEST : p(1, A:MySort) . rewrites: 1 result [MySort]: h(1, A:MySort) Bye. maude-3.1/tests/Misc/parameterizedView.expected0000644000175200017520000002107313522536500016650 00000000000000========================================== reduce in TEST : insert("one", {1}, insert("one-two", {1, 2}, empty)) . rewrites: 6 result Array{String,SetAsDefault{Nat}}: "one" |-> {1} ; "one-two" |-> {1, 2} ========================================== reduce in TEST : insert("one", {1}, insert("one-two", {1, 2}, empty))["unseen"] . rewrites: 7 result Set{Nat}: {} ========================================== reduce in TEST : insert("one", {1}, insert("one-two", {1, 2}, empty))["one"] . rewrites: 9 result NeSet{Nat}: {1} ========================================== reduce in TEST2 : insert("one", {1}, insert("one-two", {1, 2}, empty)) . rewrites: 6 result Array{String,SetAsDefault{Nat}}: "one" |-> {1} ; "one-two" |-> {1, 2} ========================================== reduce in TEST2 : insert("one", {1}, insert("one-two", {1, 2}, empty))[ "unseen"] . rewrites: 7 result Set{Nat}: {} ========================================== reduce in TEST2 : insert("one", {1}, insert("one-two", {1, 2}, empty))["one"] . rewrites: 9 result NeSet{Nat}: {1} ========================================== reduce in TEST3 : insert("one", {1}, insert("one-two", {1, 2}, empty)) insert( "one", {1}, insert("one-two-three", {1, 2, 3}, empty)) insert("two", {2}, insert("one-two-three", {1, 2, 3}, empty)) . rewrites: 15 result NeList{ArrayOfSets{String,Nat}}: ("one" |-> {1} ; "one-two" |-> {1, 2}) ("one" |-> {1} ; "one-two-three" |-> {1, 2, 3}) ("one-two-three" |-> {1, 2, 3} ; "two" |-> {2}) ========================================== reduce in TEST4 : insert("one", {1}, insert("one-two", {1, 2}, empty))["one"] . rewrites: 9 result NeSet{DEFAULT}{Nat0}: {1} view Bool view Nat view Int view Rat view Float view String view Qid view TRIV view STRICT-WEAK-ORDER view STRICT-TOTAL-ORDER view Nat< view Int< view Rat< view Float< view String< view TOTAL-PREORDER view TOTAL-ORDER view Nat<= view Int<= view Rat<= view Float<= view String<= view DEFAULT view Nat0 view Int0 view Rat0 view Float0 view String0 view Qid0 view List view WeaklySortableList view SortableList view WeaklySortableList' view SortableList' view Set view List* view Set* view Map view Array view SetAsDefault view ArrayOfSets view SetAsDefault{[Y]} view SetAsDefault{Nat} view ArrayOfSets{[X], [Y]} view ArrayOfSets{String, Nat} view SetAsDefault{DEFAULT} view SetAsDefault{DEFAULT}{Nat0} fmod BOOL fmod TRUTH-VALUE fmod BOOL-OPS fmod TRUTH fmod EXT-BOOL fmod NAT fmod INT fmod RAT fmod FLOAT fmod STRING fmod CONVERSION fmod RANDOM fmod BOUND fmod QID fth TRIV fth STRICT-WEAK-ORDER fth STRICT-TOTAL-ORDER fth TOTAL-PREORDER fth TOTAL-ORDER fth DEFAULT fmod LIST fmod WEAKLY-SORTABLE-LIST fmod SORTABLE-LIST fmod WEAKLY-SORTABLE-LIST' fmod SORTABLE-LIST' fmod SET fmod LIST-AND-SET fmod SORTABLE-LIST-AND-SET fmod SORTABLE-LIST-AND-SET' fmod LIST* fmod SET* fmod MAP fmod ARRAY fmod NAT-LIST fmod QID-LIST fmod QID-SET fmod META-TERM fmod META-CONDITION fmod META-STRATEGY fmod META-MODULE fmod META-VIEW fmod META-LEVEL fmod LEXICAL mod COUNTER mod LOOP-MODE mod CONFIGURATION fmod FOO fmod ARRAY-OF-SETS fmod TEST fmod TEST2 fmod LIST-OF-ARRAYS-OF-SETS fmod TEST3 fmod TEST4 fth X :: TRIV fmod LIST{[X]} fth X :: STRICT-WEAK-ORDER fmod LIST{STRICT-WEAK-ORDER} fmod LIST{STRICT-WEAK-ORDER}{[X]} fmod LIST{STRICT-WEAK-ORDER}{[X]} * (sort NeList{STRICT-WEAK-ORDER}{X} to NeList{X}, sort List{STRICT-WEAK-ORDER}{X} to List{X}) fmod WEAKLY-SORTABLE-LIST{[X]} fth X :: STRICT-TOTAL-ORDER fmod WEAKLY-SORTABLE-LIST{STRICT-TOTAL-ORDER} fmod LIST{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER} fmod LIST{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} fmod LIST{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeList{STRICT-TOTAL-ORDER}{X}, sort List{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to List{ STRICT-TOTAL-ORDER}{X}) fmod WEAKLY-SORTABLE-LIST{STRICT-TOTAL-ORDER}{[X]} fmod WEAKLY-SORTABLE-LIST{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-TOTAL-ORDER}{X} to NeList{X}, sort List{STRICT-TOTAL-ORDER}{X} to List{X}) fmod LIST{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeList{STRICT-TOTAL-ORDER}{X}, sort List{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to List{ STRICT-TOTAL-ORDER}{X}) * (sort NeList{STRICT-TOTAL-ORDER}{X} to NeList{X}, sort List{STRICT-TOTAL-ORDER}{X} to List{X}) fmod SORTABLE-LIST{[X]} fth X :: TOTAL-PREORDER fmod LIST{TOTAL-PREORDER} fmod LIST{TOTAL-PREORDER}{[X]} fmod LIST{TOTAL-PREORDER}{[X]} * (sort NeList{TOTAL-PREORDER}{X} to NeList{X}, sort List{TOTAL-PREORDER}{X} to List{X}) fmod WEAKLY-SORTABLE-LIST'{[X]} fth X :: TOTAL-ORDER fmod WEAKLY-SORTABLE-LIST'{TOTAL-ORDER} fmod LIST{TOTAL-PREORDER}{TOTAL-ORDER} fmod LIST{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} fmod LIST{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeList{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to NeList{TOTAL-ORDER}{X}, sort List{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to List{TOTAL-ORDER}{X}) fmod WEAKLY-SORTABLE-LIST'{TOTAL-ORDER}{[X]} fmod WEAKLY-SORTABLE-LIST'{TOTAL-ORDER}{[X]} * (sort NeList{TOTAL-ORDER}{X} to NeList{X}, sort List{TOTAL-ORDER}{X} to List{X}) fmod LIST{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeList{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to NeList{TOTAL-ORDER}{X}, sort List{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to List{TOTAL-ORDER}{X}) * (sort NeList{TOTAL-ORDER}{X} to NeList{X}, sort List{TOTAL-ORDER}{X} to List{X}) fmod SORTABLE-LIST'{[X]} fmod SET{[X]} fmod LIST-AND-SET{STRICT-WEAK-ORDER} fmod SET{STRICT-WEAK-ORDER} fmod SET{STRICT-WEAK-ORDER}{[X]} fmod LIST-AND-SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER} fmod SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER} fmod SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} fmod LIST-AND-SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} fmod LIST-AND-SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeList{STRICT-TOTAL-ORDER}{X}, sort List{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to List{ STRICT-TOTAL-ORDER}{X}) fmod LIST-AND-SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeList{STRICT-TOTAL-ORDER}{X}, sort List{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to List{ STRICT-TOTAL-ORDER}{X}) * (sort NeList{STRICT-TOTAL-ORDER}{X} to NeList{X}, sort List{STRICT-TOTAL-ORDER}{X} to List{X}, sort NeSet{STRICT-WEAK-ORDER}{ STRICT-TOTAL-ORDER}{X} to NeSet{X}, sort Set{STRICT-WEAK-ORDER}{ STRICT-TOTAL-ORDER}{X} to Set{X}) fmod SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeSet{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeSet{X}, sort Set{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to Set{X}) fmod LIST-AND-SET{TOTAL-PREORDER} fmod SET{TOTAL-PREORDER} fmod SET{TOTAL-PREORDER}{[X]} fmod LIST-AND-SET{TOTAL-PREORDER}{TOTAL-ORDER} fmod SET{TOTAL-PREORDER}{TOTAL-ORDER} fmod SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} fmod LIST-AND-SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} fmod LIST-AND-SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeList{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to NeList{TOTAL-ORDER}{X}, sort List{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to List{TOTAL-ORDER}{X}) fmod LIST-AND-SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeList{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to NeList{TOTAL-ORDER}{X}, sort List{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to List{TOTAL-ORDER}{X}) * (sort NeList{ TOTAL-ORDER}{X} to NeList{X}, sort List{TOTAL-ORDER}{X} to List{X}, sort NeSet{TOTAL-PREORDER}{TOTAL-ORDER}{X} to NeSet{X}, sort Set{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to Set{X}) fmod SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeSet{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to NeSet{X}, sort Set{TOTAL-PREORDER}{TOTAL-ORDER}{X} to Set{X}) fmod LIST*{[X]} fmod SET*{[X]} fth Y :: TRIV fmod MAP{[X], [Y]} fth Y :: DEFAULT fmod ARRAY{[X], [Y]} fmod LIST{Nat} fmod LIST{Nat} * (sort NeList{Nat} to NeNatList, sort List{Nat} to NatList) fmod LIST{Qid} fmod LIST{Qid} * (sort NeList{Qid} to NeQidList, sort List{Qid} to QidList) fmod SET{Qid} fmod SET{Qid} * (sort NeSet{Qid} to NeQidSet, sort Set{Qid} to QidSet) fmod QID-SET * (op _`,_ to _;_ [prec 43], op empty to none) fmod SET{Qid} * (sort NeSet{Qid} to NeQidSet, sort Set{Qid} to QidSet) * (op _`,_ to _;_ [prec 43], op empty to none) fmod SET{[X]} + MAP{[X], [Y]} fmod SET*{[Y]} fmod ARRAY{[X], SetAsDefault{[Y]}} fmod ARRAY-OF-SETS{String, Nat} fmod SET*{Nat} fmod ARRAY{String, SetAsDefault{Nat}} fmod LIST{ArrayOfSets{[X], [Y]}} fmod LIST-OF-ARRAYS-OF-SETS{String, Nat} fmod LIST{ArrayOfSets{String, Nat}} fmod SET*{DEFAULT} fth X :: DEFAULT fmod SET*{DEFAULT}{[X]} fmod SET*{DEFAULT}{Nat0} fmod ARRAY{String, SetAsDefault{DEFAULT}{Nat0}} Bye. maude-3.1/tests/Misc/assocUnification.expected0000644000175200017520000462313613735220146016500 00000000000000========================================== unify in A-UNIF : A B =? X . Unifier 1 A --> #1:List B --> #2:List X --> #1:List #2:List ========================================== unify in A-UNIF : A B =? X Y . Unifier 1 A --> #2:List #3:List B --> #1:List X --> #2:List Y --> #3:List #1:List Unifier 2 A --> #1:List B --> #3:List #2:List X --> #1:List #3:List Y --> #2:List Unifier 3 A --> #1:List B --> #2:List X --> #1:List Y --> #2:List ========================================== unify in A-UNIF : A B C =? X Y . Unifier 1 A --> #3:List #4:List B --> #1:List C --> #2:List X --> #3:List Y --> #4:List #1:List #2:List Unifier 2 A --> #1:List B --> #3:List #4:List C --> #2:List X --> #1:List #3:List Y --> #4:List #2:List Unifier 3 A --> #1:List B --> #2:List C --> #4:List #3:List X --> #1:List #2:List #4:List Y --> #3:List Unifier 4 A --> #1:List B --> #2:List C --> #3:List X --> #1:List #2:List Y --> #3:List Unifier 5 A --> #1:List B --> #2:List C --> #3:List X --> #1:List Y --> #2:List #3:List ========================================== unify in A-UNIF : A B C =? X Y Z . Unifier 1 A --> #3:List #4:List #5:List B --> #1:List C --> #2:List X --> #3:List Y --> #4:List Z --> #5:List #1:List #2:List Unifier 2 A --> #2:List #3:List B --> #4:List #5:List C --> #1:List X --> #2:List Y --> #3:List #4:List Z --> #5:List #1:List Unifier 3 A --> #2:List #4:List B --> #1:List C --> #5:List #3:List X --> #2:List Y --> #4:List #1:List #5:List Z --> #3:List Unifier 4 A --> #3:List #4:List B --> #1:List C --> #2:List X --> #3:List Y --> #4:List #1:List Z --> #2:List Unifier 5 A --> #3:List #4:List B --> #1:List C --> #2:List X --> #3:List Y --> #4:List Z --> #1:List #2:List Unifier 6 A --> #1:List B --> #4:List #3:List #5:List C --> #2:List X --> #1:List #4:List Y --> #3:List Z --> #5:List #2:List Unifier 7 A --> #1:List B --> #3:List #4:List C --> #5:List #2:List X --> #1:List #3:List Y --> #4:List #5:List Z --> #2:List Unifier 8 A --> #1:List B --> #4:List #3:List C --> #2:List X --> #1:List #4:List Y --> #3:List Z --> #2:List Unifier 9 A --> #1:List B --> #2:List C --> #5:List #3:List #4:List X --> #1:List #2:List #5:List Y --> #3:List Z --> #4:List Unifier 10 A --> #1:List B --> #2:List C --> #3:List #4:List X --> #1:List #2:List Y --> #3:List Z --> #4:List Unifier 11 A --> #1:List B --> #3:List #4:List C --> #2:List X --> #1:List Y --> #3:List Z --> #4:List #2:List Unifier 12 A --> #1:List B --> #2:List C --> #4:List #3:List X --> #1:List Y --> #2:List #4:List Z --> #3:List Unifier 13 A --> #1:List B --> #2:List C --> #3:List X --> #1:List Y --> #2:List Z --> #3:List ========================================== unify in A-UNIF : A B C D =? X Y Z . Unifier 1 A --> #4:List #5:List #6:List B --> #1:List C --> #2:List D --> #3:List X --> #4:List Y --> #5:List Z --> #6:List #1:List #2:List #3:List Unifier 2 A --> #3:List #4:List B --> #5:List #6:List C --> #1:List D --> #2:List X --> #3:List Y --> #4:List #5:List Z --> #6:List #1:List #2:List Unifier 3 A --> #3:List #4:List B --> #1:List C --> #5:List #6:List D --> #2:List X --> #3:List Y --> #4:List #1:List #5:List Z --> #6:List #2:List Unifier 4 A --> #3:List #5:List B --> #1:List C --> #2:List D --> #6:List #4:List X --> #3:List Y --> #5:List #1:List #2:List #6:List Z --> #4:List Unifier 5 A --> #4:List #5:List B --> #1:List C --> #2:List D --> #3:List X --> #4:List Y --> #5:List #1:List #2:List Z --> #3:List Unifier 6 A --> #4:List #5:List B --> #1:List C --> #2:List D --> #3:List X --> #4:List Y --> #5:List #1:List Z --> #2:List #3:List Unifier 7 A --> #4:List #5:List B --> #1:List C --> #2:List D --> #3:List X --> #4:List Y --> #5:List Z --> #1:List #2:List #3:List Unifier 8 A --> #1:List B --> #5:List #4:List #6:List C --> #2:List D --> #3:List X --> #1:List #5:List Y --> #4:List Z --> #6:List #2:List #3:List Unifier 9 A --> #1:List B --> #3:List #4:List C --> #5:List #6:List D --> #2:List X --> #1:List #3:List Y --> #4:List #5:List Z --> #6:List #2:List Unifier 10 A --> #1:List B --> #4:List #5:List C --> #2:List D --> #6:List #3:List X --> #1:List #4:List Y --> #5:List #2:List #6:List Z --> #3:List Unifier 11 A --> #1:List B --> #4:List #5:List C --> #2:List D --> #3:List X --> #1:List #4:List Y --> #5:List #2:List Z --> #3:List Unifier 12 A --> #1:List B --> #5:List #4:List C --> #2:List D --> #3:List X --> #1:List #5:List Y --> #4:List Z --> #2:List #3:List Unifier 13 A --> #1:List B --> #2:List C --> #5:List #4:List #6:List D --> #3:List X --> #1:List #2:List #5:List Y --> #4:List Z --> #6:List #3:List Unifier 14 A --> #1:List B --> #2:List C --> #4:List #5:List D --> #6:List #3:List X --> #1:List #2:List #4:List Y --> #5:List #6:List Z --> #3:List Unifier 15 A --> #1:List B --> #2:List C --> #5:List #4:List D --> #3:List X --> #1:List #2:List #5:List Y --> #4:List Z --> #3:List Unifier 16 A --> #1:List B --> #2:List C --> #3:List D --> #6:List #4:List #5:List X --> #1:List #2:List #3:List #6:List Y --> #4:List Z --> #5:List Unifier 17 A --> #1:List B --> #2:List C --> #3:List D --> #4:List #5:List X --> #1:List #2:List #3:List Y --> #4:List Z --> #5:List Unifier 18 A --> #1:List B --> #2:List C --> #4:List #5:List D --> #3:List X --> #1:List #2:List Y --> #4:List Z --> #5:List #3:List Unifier 19 A --> #1:List B --> #2:List C --> #3:List D --> #5:List #4:List X --> #1:List #2:List Y --> #3:List #5:List Z --> #4:List Unifier 20 A --> #1:List B --> #2:List C --> #3:List D --> #4:List X --> #1:List #2:List Y --> #3:List Z --> #4:List Unifier 21 A --> #1:List B --> #4:List #5:List C --> #2:List D --> #3:List X --> #1:List Y --> #4:List Z --> #5:List #2:List #3:List Unifier 22 A --> #1:List B --> #2:List C --> #4:List #5:List D --> #3:List X --> #1:List Y --> #2:List #4:List Z --> #5:List #3:List Unifier 23 A --> #1:List B --> #2:List C --> #3:List D --> #5:List #4:List X --> #1:List Y --> #2:List #3:List #5:List Z --> #4:List Unifier 24 A --> #1:List B --> #2:List C --> #3:List D --> #4:List X --> #1:List Y --> #2:List #3:List Z --> #4:List Unifier 25 A --> #1:List B --> #2:List C --> #3:List D --> #4:List X --> #1:List Y --> #2:List Z --> #3:List #4:List ========================================== unify in A-UNIF : A B C D G =? X Y Z . Unifier 1 A --> #5:List #6:List #7:List B --> #1:List C --> #2:List D --> #3:List G --> #4:List X --> #5:List Y --> #6:List Z --> #7:List #1:List #2:List #3:List #4:List Unifier 2 A --> #4:List #5:List B --> #6:List #7:List C --> #1:List D --> #2:List G --> #3:List X --> #4:List Y --> #5:List #6:List Z --> #7:List #1:List #2:List #3:List Unifier 3 A --> #4:List #5:List B --> #1:List C --> #6:List #7:List D --> #2:List G --> #3:List X --> #4:List Y --> #5:List #1:List #6:List Z --> #7:List #2:List #3:List Unifier 4 A --> #4:List #5:List B --> #1:List C --> #2:List D --> #6:List #7:List G --> #3:List X --> #4:List Y --> #5:List #1:List #2:List #6:List Z --> #7:List #3:List Unifier 5 A --> #4:List #6:List B --> #1:List C --> #2:List D --> #3:List G --> #7:List #5:List X --> #4:List Y --> #6:List #1:List #2:List #3:List #7:List Z --> #5:List Unifier 6 A --> #5:List #6:List B --> #1:List C --> #2:List D --> #3:List G --> #4:List X --> #5:List Y --> #6:List #1:List #2:List #3:List Z --> #4:List Unifier 7 A --> #5:List #6:List B --> #1:List C --> #2:List D --> #3:List G --> #4:List X --> #5:List Y --> #6:List #1:List #2:List Z --> #3:List #4:List Unifier 8 A --> #5:List #6:List B --> #1:List C --> #2:List D --> #3:List G --> #4:List X --> #5:List Y --> #6:List #1:List Z --> #2:List #3:List #4:List Unifier 9 A --> #5:List #6:List B --> #1:List C --> #2:List D --> #3:List G --> #4:List X --> #5:List Y --> #6:List Z --> #1:List #2:List #3:List #4:List Unifier 10 A --> #1:List B --> #6:List #5:List #7:List C --> #2:List D --> #3:List G --> #4:List X --> #1:List #6:List Y --> #5:List Z --> #7:List #2:List #3:List #4:List Unifier 11 A --> #1:List B --> #4:List #5:List C --> #6:List #7:List D --> #2:List G --> #3:List X --> #1:List #4:List Y --> #5:List #6:List Z --> #7:List #2:List #3:List Unifier 12 A --> #1:List B --> #4:List #5:List C --> #2:List D --> #6:List #7:List G --> #3:List X --> #1:List #4:List Y --> #5:List #2:List #6:List Z --> #7:List #3:List Unifier 13 A --> #1:List B --> #5:List #6:List C --> #2:List D --> #3:List G --> #7:List #4:List X --> #1:List #5:List Y --> #6:List #2:List #3:List #7:List Z --> #4:List Unifier 14 A --> #1:List B --> #5:List #6:List C --> #2:List D --> #3:List G --> #4:List X --> #1:List #5:List Y --> #6:List #2:List #3:List Z --> #4:List Unifier 15 A --> #1:List B --> #5:List #6:List C --> #2:List D --> #3:List G --> #4:List X --> #1:List #5:List Y --> #6:List #2:List Z --> #3:List #4:List Unifier 16 A --> #1:List B --> #6:List #5:List C --> #2:List D --> #3:List G --> #4:List X --> #1:List #6:List Y --> #5:List Z --> #2:List #3:List #4:List Unifier 17 A --> #1:List B --> #2:List C --> #6:List #5:List #7:List D --> #3:List G --> #4:List X --> #1:List #2:List #6:List Y --> #5:List Z --> #7:List #3:List #4:List Unifier 18 A --> #1:List B --> #2:List C --> #4:List #5:List D --> #6:List #7:List G --> #3:List X --> #1:List #2:List #4:List Y --> #5:List #6:List Z --> #7:List #3:List Unifier 19 A --> #1:List B --> #2:List C --> #5:List #6:List D --> #3:List G --> #7:List #4:List X --> #1:List #2:List #5:List Y --> #6:List #3:List #7:List Z --> #4:List Unifier 20 A --> #1:List B --> #2:List C --> #5:List #6:List D --> #3:List G --> #4:List X --> #1:List #2:List #5:List Y --> #6:List #3:List Z --> #4:List Unifier 21 A --> #1:List B --> #2:List C --> #6:List #5:List D --> #3:List G --> #4:List X --> #1:List #2:List #6:List Y --> #5:List Z --> #3:List #4:List Unifier 22 A --> #1:List B --> #2:List C --> #3:List D --> #6:List #5:List #7:List G --> #4:List X --> #1:List #2:List #3:List #6:List Y --> #5:List Z --> #7:List #4:List Unifier 23 A --> #1:List B --> #2:List C --> #3:List D --> #5:List #6:List G --> #7:List #4:List X --> #1:List #2:List #3:List #5:List Y --> #6:List #7:List Z --> #4:List Unifier 24 A --> #1:List B --> #2:List C --> #3:List D --> #6:List #5:List G --> #4:List X --> #1:List #2:List #3:List #6:List Y --> #5:List Z --> #4:List Unifier 25 A --> #1:List B --> #2:List C --> #3:List D --> #4:List G --> #7:List #5:List #6:List X --> #1:List #2:List #3:List #4:List #7:List Y --> #5:List Z --> #6:List Unifier 26 A --> #1:List B --> #2:List C --> #3:List D --> #4:List G --> #5:List #6:List X --> #1:List #2:List #3:List #4:List Y --> #5:List Z --> #6:List Unifier 27 A --> #1:List B --> #2:List C --> #3:List D --> #5:List #6:List G --> #4:List X --> #1:List #2:List #3:List Y --> #5:List Z --> #6:List #4:List Unifier 28 A --> #1:List B --> #2:List C --> #3:List D --> #4:List G --> #6:List #5:List X --> #1:List #2:List #3:List Y --> #4:List #6:List Z --> #5:List Unifier 29 A --> #1:List B --> #2:List C --> #3:List D --> #4:List G --> #5:List X --> #1:List #2:List #3:List Y --> #4:List Z --> #5:List Unifier 30 A --> #1:List B --> #2:List C --> #5:List #6:List D --> #3:List G --> #4:List X --> #1:List #2:List Y --> #5:List Z --> #6:List #3:List #4:List Unifier 31 A --> #1:List B --> #2:List C --> #3:List D --> #5:List #6:List G --> #4:List X --> #1:List #2:List Y --> #3:List #5:List Z --> #6:List #4:List Unifier 32 A --> #1:List B --> #2:List C --> #3:List D --> #4:List G --> #6:List #5:List X --> #1:List #2:List Y --> #3:List #4:List #6:List Z --> #5:List Unifier 33 A --> #1:List B --> #2:List C --> #3:List D --> #4:List G --> #5:List X --> #1:List #2:List Y --> #3:List #4:List Z --> #5:List Unifier 34 A --> #1:List B --> #2:List C --> #3:List D --> #4:List G --> #5:List X --> #1:List #2:List Y --> #3:List Z --> #4:List #5:List Unifier 35 A --> #1:List B --> #5:List #6:List C --> #2:List D --> #3:List G --> #4:List X --> #1:List Y --> #5:List Z --> #6:List #2:List #3:List #4:List Unifier 36 A --> #1:List B --> #2:List C --> #5:List #6:List D --> #3:List G --> #4:List X --> #1:List Y --> #2:List #5:List Z --> #6:List #3:List #4:List Unifier 37 A --> #1:List B --> #2:List C --> #3:List D --> #5:List #6:List G --> #4:List X --> #1:List Y --> #2:List #3:List #5:List Z --> #6:List #4:List Unifier 38 A --> #1:List B --> #2:List C --> #3:List D --> #4:List G --> #6:List #5:List X --> #1:List Y --> #2:List #3:List #4:List #6:List Z --> #5:List Unifier 39 A --> #1:List B --> #2:List C --> #3:List D --> #4:List G --> #5:List X --> #1:List Y --> #2:List #3:List #4:List Z --> #5:List Unifier 40 A --> #1:List B --> #2:List C --> #3:List D --> #4:List G --> #5:List X --> #1:List Y --> #2:List #3:List Z --> #4:List #5:List Unifier 41 A --> #1:List B --> #2:List C --> #3:List D --> #4:List G --> #5:List X --> #1:List Y --> #2:List Z --> #3:List #4:List #5:List ========================================== unify in A-UNIF : A B C =? X Y Z /\ G H I =? M N . Unifier 1 A --> #3:List #4:List #9:List B --> #1:List C --> #2:List X --> #3:List Y --> #4:List Z --> #9:List #1:List #2:List G --> #7:List #8:List H --> #5:List I --> #6:List M --> #7:List N --> #8:List #5:List #6:List Unifier 2 A --> #2:List #7:List B --> #8:List #9:List C --> #1:List X --> #2:List Y --> #7:List #8:List Z --> #9:List #1:List G --> #5:List #6:List H --> #3:List I --> #4:List M --> #5:List N --> #6:List #3:List #4:List Unifier 3 A --> #2:List #8:List B --> #1:List C --> #9:List #3:List X --> #2:List Y --> #8:List #1:List #9:List Z --> #3:List G --> #6:List #7:List H --> #4:List I --> #5:List M --> #6:List N --> #7:List #4:List #5:List Unifier 4 A --> #3:List #8:List B --> #1:List C --> #2:List X --> #3:List Y --> #8:List #1:List Z --> #2:List G --> #6:List #7:List H --> #4:List I --> #5:List M --> #6:List N --> #7:List #4:List #5:List Unifier 5 A --> #3:List #4:List B --> #1:List C --> #2:List X --> #3:List Y --> #4:List Z --> #1:List #2:List G --> #7:List #8:List H --> #5:List I --> #6:List M --> #7:List N --> #8:List #5:List #6:List Unifier 6 A --> #1:List B --> #8:List #3:List #9:List C --> #2:List X --> #1:List #8:List Y --> #3:List Z --> #9:List #2:List G --> #6:List #7:List H --> #4:List I --> #5:List M --> #6:List N --> #7:List #4:List #5:List Unifier 7 A --> #1:List B --> #7:List #8:List C --> #9:List #2:List X --> #1:List #7:List Y --> #8:List #9:List Z --> #2:List G --> #5:List #6:List H --> #3:List I --> #4:List M --> #5:List N --> #6:List #3:List #4:List Unifier 8 A --> #1:List B --> #8:List #3:List C --> #2:List X --> #1:List #8:List Y --> #3:List Z --> #2:List G --> #6:List #7:List H --> #4:List I --> #5:List M --> #6:List N --> #7:List #4:List #5:List Unifier 9 A --> #1:List B --> #2:List C --> #9:List #3:List #4:List X --> #1:List #2:List #9:List Y --> #3:List Z --> #4:List G --> #7:List #8:List H --> #5:List I --> #6:List M --> #7:List N --> #8:List #5:List #6:List Unifier 10 A --> #1:List B --> #2:List C --> #3:List #4:List X --> #1:List #2:List Y --> #3:List Z --> #4:List G --> #7:List #8:List H --> #5:List I --> #6:List M --> #7:List N --> #8:List #5:List #6:List Unifier 11 A --> #1:List B --> #3:List #8:List C --> #2:List X --> #1:List Y --> #3:List Z --> #8:List #2:List G --> #6:List #7:List H --> #4:List I --> #5:List M --> #6:List N --> #7:List #4:List #5:List Unifier 12 A --> #1:List B --> #2:List C --> #8:List #3:List X --> #1:List Y --> #2:List #8:List Z --> #3:List G --> #6:List #7:List H --> #4:List I --> #5:List M --> #6:List N --> #7:List #4:List #5:List Unifier 13 A --> #1:List B --> #2:List C --> #3:List X --> #1:List Y --> #2:List Z --> #3:List G --> #6:List #7:List H --> #4:List I --> #5:List M --> #6:List N --> #7:List #4:List #5:List Unifier 14 A --> #3:List #4:List #9:List B --> #1:List C --> #2:List X --> #3:List Y --> #4:List Z --> #9:List #1:List #2:List G --> #5:List H --> #7:List #8:List I --> #6:List M --> #5:List #7:List N --> #8:List #6:List Unifier 15 A --> #2:List #7:List B --> #8:List #9:List C --> #1:List X --> #2:List Y --> #7:List #8:List Z --> #9:List #1:List G --> #3:List H --> #5:List #6:List I --> #4:List M --> #3:List #5:List N --> #6:List #4:List Unifier 16 A --> #2:List #8:List B --> #1:List C --> #9:List #3:List X --> #2:List Y --> #8:List #1:List #9:List Z --> #3:List G --> #4:List H --> #6:List #7:List I --> #5:List M --> #4:List #6:List N --> #7:List #5:List Unifier 17 A --> #3:List #8:List B --> #1:List C --> #2:List X --> #3:List Y --> #8:List #1:List Z --> #2:List G --> #4:List H --> #6:List #7:List I --> #5:List M --> #4:List #6:List N --> #7:List #5:List Unifier 18 A --> #3:List #4:List B --> #1:List C --> #2:List X --> #3:List Y --> #4:List Z --> #1:List #2:List G --> #5:List H --> #7:List #8:List I --> #6:List M --> #5:List #7:List N --> #8:List #6:List Unifier 19 A --> #1:List B --> #8:List #3:List #9:List C --> #2:List X --> #1:List #8:List Y --> #3:List Z --> #9:List #2:List G --> #4:List H --> #6:List #7:List I --> #5:List M --> #4:List #6:List N --> #7:List #5:List Unifier 20 A --> #1:List B --> #7:List #8:List C --> #9:List #2:List X --> #1:List #7:List Y --> #8:List #9:List Z --> #2:List G --> #3:List H --> #5:List #6:List I --> #4:List M --> #3:List #5:List N --> #6:List #4:List Unifier 21 A --> #1:List B --> #8:List #3:List C --> #2:List X --> #1:List #8:List Y --> #3:List Z --> #2:List G --> #4:List H --> #6:List #7:List I --> #5:List M --> #4:List #6:List N --> #7:List #5:List Unifier 22 A --> #1:List B --> #2:List C --> #9:List #3:List #4:List X --> #1:List #2:List #9:List Y --> #3:List Z --> #4:List G --> #5:List H --> #7:List #8:List I --> #6:List M --> #5:List #7:List N --> #8:List #6:List Unifier 23 A --> #1:List B --> #2:List C --> #3:List #4:List X --> #1:List #2:List Y --> #3:List Z --> #4:List G --> #5:List H --> #7:List #8:List I --> #6:List M --> #5:List #7:List N --> #8:List #6:List Unifier 24 A --> #1:List B --> #3:List #8:List C --> #2:List X --> #1:List Y --> #3:List Z --> #8:List #2:List G --> #4:List H --> #6:List #7:List I --> #5:List M --> #4:List #6:List N --> #7:List #5:List Unifier 25 A --> #1:List B --> #2:List C --> #8:List #3:List X --> #1:List Y --> #2:List #8:List Z --> #3:List G --> #4:List H --> #6:List #7:List I --> #5:List M --> #4:List #6:List N --> #7:List #5:List Unifier 26 A --> #1:List B --> #2:List C --> #3:List X --> #1:List Y --> #2:List Z --> #3:List G --> #4:List H --> #6:List #7:List I --> #5:List M --> #4:List #6:List N --> #7:List #5:List Unifier 27 A --> #3:List #4:List #9:List B --> #1:List C --> #2:List X --> #3:List Y --> #4:List Z --> #9:List #1:List #2:List G --> #5:List H --> #6:List I --> #8:List #7:List M --> #5:List #6:List #8:List N --> #7:List Unifier 28 A --> #2:List #7:List B --> #8:List #9:List C --> #1:List X --> #2:List Y --> #7:List #8:List Z --> #9:List #1:List G --> #3:List H --> #4:List I --> #6:List #5:List M --> #3:List #4:List #6:List N --> #5:List Unifier 29 A --> #2:List #8:List B --> #1:List C --> #9:List #3:List X --> #2:List Y --> #8:List #1:List #9:List Z --> #3:List G --> #4:List H --> #5:List I --> #7:List #6:List M --> #4:List #5:List #7:List N --> #6:List Unifier 30 A --> #3:List #8:List B --> #1:List C --> #2:List X --> #3:List Y --> #8:List #1:List Z --> #2:List G --> #4:List H --> #5:List I --> #7:List #6:List M --> #4:List #5:List #7:List N --> #6:List Unifier 31 A --> #3:List #4:List B --> #1:List C --> #2:List X --> #3:List Y --> #4:List Z --> #1:List #2:List G --> #5:List H --> #6:List I --> #8:List #7:List M --> #5:List #6:List #8:List N --> #7:List Unifier 32 A --> #1:List B --> #8:List #3:List #9:List C --> #2:List X --> #1:List #8:List Y --> #3:List Z --> #9:List #2:List G --> #4:List H --> #5:List I --> #7:List #6:List M --> #4:List #5:List #7:List N --> #6:List Unifier 33 A --> #1:List B --> #7:List #8:List C --> #9:List #2:List X --> #1:List #7:List Y --> #8:List #9:List Z --> #2:List G --> #3:List H --> #4:List I --> #6:List #5:List M --> #3:List #4:List #6:List N --> #5:List Unifier 34 A --> #1:List B --> #8:List #3:List C --> #2:List X --> #1:List #8:List Y --> #3:List Z --> #2:List G --> #4:List H --> #5:List I --> #7:List #6:List M --> #4:List #5:List #7:List N --> #6:List Unifier 35 A --> #1:List B --> #2:List C --> #9:List #3:List #4:List X --> #1:List #2:List #9:List Y --> #3:List Z --> #4:List G --> #5:List H --> #6:List I --> #8:List #7:List M --> #5:List #6:List #8:List N --> #7:List Unifier 36 A --> #1:List B --> #2:List C --> #3:List #4:List X --> #1:List #2:List Y --> #3:List Z --> #4:List G --> #5:List H --> #6:List I --> #8:List #7:List M --> #5:List #6:List #8:List N --> #7:List Unifier 37 A --> #1:List B --> #3:List #8:List C --> #2:List X --> #1:List Y --> #3:List Z --> #8:List #2:List G --> #4:List H --> #5:List I --> #7:List #6:List M --> #4:List #5:List #7:List N --> #6:List Unifier 38 A --> #1:List B --> #2:List C --> #8:List #3:List X --> #1:List Y --> #2:List #8:List Z --> #3:List G --> #4:List H --> #5:List I --> #7:List #6:List M --> #4:List #5:List #7:List N --> #6:List Unifier 39 A --> #1:List B --> #2:List C --> #3:List X --> #1:List Y --> #2:List Z --> #3:List G --> #4:List H --> #5:List I --> #7:List #6:List M --> #4:List #5:List #7:List N --> #6:List Unifier 40 A --> #3:List #4:List #8:List B --> #1:List C --> #2:List X --> #3:List Y --> #4:List Z --> #8:List #1:List #2:List G --> #5:List H --> #6:List I --> #7:List M --> #5:List #6:List N --> #7:List Unifier 41 A --> #2:List #6:List B --> #7:List #8:List C --> #1:List X --> #2:List Y --> #6:List #7:List Z --> #8:List #1:List G --> #3:List H --> #4:List I --> #5:List M --> #3:List #4:List N --> #5:List Unifier 42 A --> #2:List #7:List B --> #1:List C --> #8:List #3:List X --> #2:List Y --> #7:List #1:List #8:List Z --> #3:List G --> #4:List H --> #5:List I --> #6:List M --> #4:List #5:List N --> #6:List Unifier 43 A --> #3:List #7:List B --> #1:List C --> #2:List X --> #3:List Y --> #7:List #1:List Z --> #2:List G --> #4:List H --> #5:List I --> #6:List M --> #4:List #5:List N --> #6:List Unifier 44 A --> #3:List #4:List B --> #1:List C --> #2:List X --> #3:List Y --> #4:List Z --> #1:List #2:List G --> #5:List H --> #6:List I --> #7:List M --> #5:List #6:List N --> #7:List Unifier 45 A --> #1:List B --> #7:List #3:List #8:List C --> #2:List X --> #1:List #7:List Y --> #3:List Z --> #8:List #2:List G --> #4:List H --> #5:List I --> #6:List M --> #4:List #5:List N --> #6:List Unifier 46 A --> #1:List B --> #6:List #7:List C --> #8:List #2:List X --> #1:List #6:List Y --> #7:List #8:List Z --> #2:List G --> #3:List H --> #4:List I --> #5:List M --> #3:List #4:List N --> #5:List Unifier 47 A --> #1:List B --> #7:List #3:List C --> #2:List X --> #1:List #7:List Y --> #3:List Z --> #2:List G --> #4:List H --> #5:List I --> #6:List M --> #4:List #5:List N --> #6:List Unifier 48 A --> #1:List B --> #2:List C --> #8:List #3:List #4:List X --> #1:List #2:List #8:List Y --> #3:List Z --> #4:List G --> #5:List H --> #6:List I --> #7:List M --> #5:List #6:List N --> #7:List Unifier 49 A --> #1:List B --> #2:List C --> #3:List #4:List X --> #1:List #2:List Y --> #3:List Z --> #4:List G --> #5:List H --> #6:List I --> #7:List M --> #5:List #6:List N --> #7:List Unifier 50 A --> #1:List B --> #3:List #7:List C --> #2:List X --> #1:List Y --> #3:List Z --> #7:List #2:List G --> #4:List H --> #5:List I --> #6:List M --> #4:List #5:List N --> #6:List Unifier 51 A --> #1:List B --> #2:List C --> #7:List #3:List X --> #1:List Y --> #2:List #7:List Z --> #3:List G --> #4:List H --> #5:List I --> #6:List M --> #4:List #5:List N --> #6:List Unifier 52 A --> #1:List B --> #2:List C --> #3:List X --> #1:List Y --> #2:List Z --> #3:List G --> #4:List H --> #5:List I --> #6:List M --> #4:List #5:List N --> #6:List Unifier 53 A --> #3:List #4:List #8:List B --> #1:List C --> #2:List X --> #3:List Y --> #4:List Z --> #8:List #1:List #2:List G --> #5:List H --> #6:List I --> #7:List M --> #5:List N --> #6:List #7:List Unifier 54 A --> #2:List #6:List B --> #7:List #8:List C --> #1:List X --> #2:List Y --> #6:List #7:List Z --> #8:List #1:List G --> #3:List H --> #4:List I --> #5:List M --> #3:List N --> #4:List #5:List Unifier 55 A --> #2:List #7:List B --> #1:List C --> #8:List #3:List X --> #2:List Y --> #7:List #1:List #8:List Z --> #3:List G --> #4:List H --> #5:List I --> #6:List M --> #4:List N --> #5:List #6:List Unifier 56 A --> #3:List #7:List B --> #1:List C --> #2:List X --> #3:List Y --> #7:List #1:List Z --> #2:List G --> #4:List H --> #5:List I --> #6:List M --> #4:List N --> #5:List #6:List Unifier 57 A --> #3:List #4:List B --> #1:List C --> #2:List X --> #3:List Y --> #4:List Z --> #1:List #2:List G --> #5:List H --> #6:List I --> #7:List M --> #5:List N --> #6:List #7:List Unifier 58 A --> #1:List B --> #7:List #3:List #8:List C --> #2:List X --> #1:List #7:List Y --> #3:List Z --> #8:List #2:List G --> #4:List H --> #5:List I --> #6:List M --> #4:List N --> #5:List #6:List Unifier 59 A --> #1:List B --> #6:List #7:List C --> #8:List #2:List X --> #1:List #6:List Y --> #7:List #8:List Z --> #2:List G --> #3:List H --> #4:List I --> #5:List M --> #3:List N --> #4:List #5:List Unifier 60 A --> #1:List B --> #7:List #3:List C --> #2:List X --> #1:List #7:List Y --> #3:List Z --> #2:List G --> #4:List H --> #5:List I --> #6:List M --> #4:List N --> #5:List #6:List Unifier 61 A --> #1:List B --> #2:List C --> #8:List #3:List #4:List X --> #1:List #2:List #8:List Y --> #3:List Z --> #4:List G --> #5:List H --> #6:List I --> #7:List M --> #5:List N --> #6:List #7:List Unifier 62 A --> #1:List B --> #2:List C --> #3:List #4:List X --> #1:List #2:List Y --> #3:List Z --> #4:List G --> #5:List H --> #6:List I --> #7:List M --> #5:List N --> #6:List #7:List Unifier 63 A --> #1:List B --> #3:List #7:List C --> #2:List X --> #1:List Y --> #3:List Z --> #7:List #2:List G --> #4:List H --> #5:List I --> #6:List M --> #4:List N --> #5:List #6:List Unifier 64 A --> #1:List B --> #2:List C --> #7:List #3:List X --> #1:List Y --> #2:List #7:List Z --> #3:List G --> #4:List H --> #5:List I --> #6:List M --> #4:List N --> #5:List #6:List Unifier 65 A --> #1:List B --> #2:List C --> #3:List X --> #1:List Y --> #2:List Z --> #3:List G --> #4:List H --> #5:List I --> #6:List M --> #4:List N --> #5:List #6:List ========================================== unify in A-UNIF : A B =? B C . Unifier 1 A --> #1:List #2:List B --> #1:List C --> #2:List #1:List Warning: Unification modulo the theory of operator __ has encountered an instance for which it may not be complete. Unifier 2 A --> #1:List B --> #1:List C --> #1:List Warning: Some unifiers may have been missed due to incomplete unification algorithm(s). ========================================== unify in A-UNIF : a A a =? B a C . Unifier 1 A --> #1:List a #2:List B --> a #1:List C --> #2:List a Unifier 2 A --> #1:List a B --> a #1:List C --> a Unifier 3 A --> a #1:List B --> a C --> #1:List a Unifier 4 A --> a B --> a C --> a ========================================== unify in A-UNIF : a A b =? B c C . Unifier 1 A --> #1:List c #2:List B --> a #1:List C --> #2:List b Unifier 2 A --> #1:List c B --> a #1:List C --> b Unifier 3 A --> c #1:List B --> a C --> #1:List b Unifier 4 A --> c B --> a C --> b ========================================== unify in A-UNIF : a A a =? B a C a D . Unifier 1 A --> #2:List a #1:List a #3:List B --> a #2:List C --> #1:List D --> #3:List a Unifier 2 A --> #2:List a #1:List a B --> a #2:List C --> #1:List D --> a Unifier 3 A --> a #1:List a #2:List B --> a C --> #1:List D --> #2:List a Unifier 4 A --> a #1:List a B --> a C --> #1:List D --> a ========================================== unify in A-UNIF : a A b =? B c C d D . Unifier 1 A --> #2:List c #1:List d #3:List B --> a #2:List C --> #1:List D --> #3:List b Unifier 2 A --> #2:List c #1:List d B --> a #2:List C --> #1:List D --> b Unifier 3 A --> c #1:List d #2:List B --> a C --> #1:List D --> #2:List b Unifier 4 A --> c #1:List d B --> a C --> #1:List D --> b ========================================== unify in A-UNIF : h(A, B, B) C h(G, H) =? I h(J, i(K)) L . Unifier 1 A --> #1:List B --> #2:List C --> #7:List h(#5:List, i(#6:List)) #8:List H --> #3:List G --> #4:List I --> h(#1:List, #2:List, #2:List) #7:List J --> #5:List K --> #6:List L --> #8:List h(#3:List, #4:List) Unifier 2 A --> #1:List B --> #2:List C --> #7:List h(#5:List, i(#6:List)) H --> #3:List G --> #4:List I --> h(#1:List, #2:List, #2:List) #7:List J --> #5:List K --> #6:List L --> h(#3:List, #4:List) Unifier 3 A --> #1:List B --> #2:List C --> h(#5:List, i(#6:List)) #7:List H --> #3:List G --> #4:List I --> h(#1:List, #2:List, #2:List) J --> #5:List K --> #6:List L --> #7:List h(#3:List, #4:List) Unifier 4 A --> #1:List B --> #2:List C --> h(#5:List, i(#6:List)) H --> #3:List G --> #4:List I --> h(#1:List, #2:List, #2:List) J --> #5:List K --> #6:List L --> h(#3:List, #4:List) ========================================== unify in A-UNIF : h(A, B) C h(G, H) =? I h(J, J) L h(M, M) N . Unifier 1 A --> #1:List B --> #2:List C --> #8:List h(#5:List, #5:List) #6:List h(#7:List, #7:List) #9:List H --> #3:List G --> #4:List I --> h(#1:List, #2:List) #8:List J --> #5:List L --> #6:List M --> #7:List N --> #9:List h(#3:List, #4:List) Unifier 2 A --> #1:List B --> #2:List C --> #8:List h(#5:List, #5:List) #6:List h(#7:List, #7:List) H --> #3:List G --> #4:List I --> h(#1:List, #2:List) #8:List J --> #5:List L --> #6:List M --> #7:List N --> h(#3:List, #4:List) Unifier 3 A --> #1:List B --> #2:List C --> h(#5:List, #5:List) #6:List h(#7:List, #7:List) #8:List H --> #3:List G --> #4:List I --> h(#1:List, #2:List) J --> #5:List L --> #6:List M --> #7:List N --> #8:List h(#3:List, #4:List) Unifier 4 A --> #1:List B --> #2:List C --> h(#5:List, #5:List) #6:List h(#7:List, #7:List) H --> #3:List G --> #4:List I --> h(#1:List, #2:List) J --> #5:List L --> #6:List M --> #7:List N --> h(#3:List, #4:List) ========================================== unify in A-UNIF : A h(X, Y) B =? C h(U, V) D h(U, U) G . Unifier 1 A --> #4:List h(#5:List, #6:List) #7:List h(#6:List, #6:List) #8:List X --> #1:List Y --> #2:List B --> #3:List C --> #4:List V --> #5:List U --> #6:List D --> #7:List G --> #8:List h(#1:List, #2:List) #3:List Unifier 2 A --> #4:List h(#5:List, #6:List) #7:List h(#6:List, #6:List) X --> #1:List Y --> #2:List B --> #3:List C --> #4:List V --> #5:List U --> #6:List D --> #7:List G --> h(#1:List, #2:List) #3:List Unifier 3 A --> #3:List h(#4:List, #5:List) #7:List X --> #1:List Y --> #2:List B --> #8:List h(#5:List, #5:List) #6:List C --> #3:List V --> #4:List U --> #5:List D --> #7:List h(#1:List, #2:List) #8:List G --> #6:List Unifier 4 A --> #3:List h(#4:List, #5:List) #7:List X --> #1:List Y --> #2:List B --> h(#5:List, #5:List) #6:List C --> #3:List V --> #4:List U --> #5:List D --> #7:List h(#1:List, #2:List) G --> #6:List Unifier 5 A --> #2:List h(#3:List, #5:List, #6:List, #7:List) #4:List X --> h(#5:List, #5:List, #6:List) Y --> h(#6:List, #7:List, #7:List) B --> #1:List C --> #2:List V --> #3:List U --> h(#5:List, #6:List, #7:List) D --> #4:List G --> #1:List Unifier 6 A --> #3:List h(#1:List, #4:List, #6:List) #5:List X --> h(#1:List, #6:List, #6:List) Y --> #1:List B --> #2:List C --> #3:List V --> #4:List U --> h(#1:List, #6:List) D --> #5:List G --> #2:List Unifier 7 A --> #2:List h(#3:List, #5:List, #6:List) #4:List X --> h(#5:List, #5:List) Y --> h(#6:List, #6:List) B --> #1:List C --> #2:List V --> #3:List U --> h(#5:List, #6:List) D --> #4:List G --> #1:List Unifier 8 A --> #3:List h(#1:List, #4:List, #6:List) #5:List X --> #1:List Y --> h(#1:List, #6:List, #6:List) B --> #2:List C --> #3:List V --> #4:List U --> h(#1:List, #6:List) D --> #5:List G --> #2:List Unifier 9 A --> #2:List h(#3:List, #4:List) #5:List X --> #4:List Y --> #4:List B --> #1:List C --> #2:List V --> #3:List U --> #4:List D --> #5:List G --> #1:List Unifier 10 A --> #3:List h(#4:List, #5:List) X --> #1:List Y --> #2:List B --> #7:List h(#5:List, #5:List) #6:List C --> #3:List V --> #4:List U --> #5:List D --> h(#1:List, #2:List) #7:List G --> #6:List Unifier 11 A --> #3:List h(#4:List, #5:List) X --> #1:List Y --> #2:List B --> h(#5:List, #5:List) #6:List C --> #3:List V --> #4:List U --> #5:List D --> h(#1:List, #2:List) G --> #6:List Unifier 12 A --> #1:List X --> #2:List Y --> #3:List B --> #8:List h(#4:List, #5:List) #6:List h(#5:List, #5:List) #7:List C --> #1:List h(#2:List, #3:List) #8:List V --> #4:List U --> #5:List D --> #6:List G --> #7:List Unifier 13 A --> #1:List X --> #2:List Y --> #3:List B --> h(#4:List, #5:List) #6:List h(#5:List, #5:List) #7:List C --> #1:List h(#2:List, #3:List) V --> #4:List U --> #5:List D --> #6:List G --> #7:List Unifier 14 A --> #1:List X --> h(#4:List, #6:List) Y --> h(#5:List, #7:List) B --> #2:List h(#4:List, #4:List, #5:List, #5:List) #3:List C --> #1:List V --> h(#6:List, #7:List) U --> h(#4:List, #5:List) D --> #2:List G --> #3:List Unifier 15 A --> #1:List X --> h(#3:List, #6:List) Y --> #2:List B --> #4:List h(#2:List, #2:List, #6:List, #6:List) #5:List C --> #1:List V --> #3:List U --> h(#2:List, #6:List) D --> #4:List G --> #5:List Unifier 16 A --> #1:List X --> #2:List Y --> h(#3:List, #6:List) B --> #4:List h(#2:List, #2:List, #6:List, #6:List) #5:List C --> #1:List V --> #3:List U --> h(#2:List, #6:List) D --> #4:List G --> #5:List Unifier 17 A --> #1:List X --> h(#3:List, #6:List) Y --> #2:List B --> #4:List h(#3:List, #3:List) #5:List C --> #1:List V --> h(#2:List, #6:List) U --> #3:List D --> #4:List G --> #5:List Unifier 18 A --> #1:List X --> #3:List Y --> #2:List B --> #4:List h(#3:List, #3:List) #5:List C --> #1:List V --> #2:List U --> #3:List D --> #4:List G --> #5:List Unifier 19 A --> #1:List X --> #2:List Y --> h(#3:List, #6:List) B --> #4:List h(#3:List, #3:List) #5:List C --> #1:List V --> h(#2:List, #6:List) U --> #3:List D --> #4:List G --> #5:List Unifier 20 A --> #1:List X --> #2:List Y --> #3:List B --> #4:List h(#3:List, #3:List) #5:List C --> #1:List V --> #2:List U --> #3:List D --> #4:List G --> #5:List ========================================== unify in A-UNIF : g(h(A, B, B) C h(G, H), X Y a Z) =? g(I h(J, i(K)) L, U b V W) . Unifier 1 A --> #1:List B --> #2:List C --> #12:List h(#7:List, i(#8:List)) #13:List H --> #3:List G --> #4:List X --> #9:List b #10:List #11:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #12:List J --> #7:List K --> #8:List L --> #13:List h(#3:List, #4:List) U --> #9:List V --> #10:List W --> #11:List #5:List a #6:List Unifier 2 A --> #1:List B --> #2:List C --> #12:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #9:List b #10:List #11:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #12:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #9:List V --> #10:List W --> #11:List #5:List a #6:List Unifier 3 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #12:List H --> #3:List G --> #4:List X --> #9:List b #10:List #11:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #12:List h(#3:List, #4:List) U --> #9:List V --> #10:List W --> #11:List #5:List a #6:List Unifier 4 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #9:List b #10:List #11:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #9:List V --> #10:List W --> #11:List #5:List a #6:List Unifier 5 A --> #1:List B --> #2:List C --> #12:List h(#6:List, i(#7:List)) #13:List H --> #3:List G --> #4:List X --> #8:List b #9:List Y --> #10:List #11:List Z --> #5:List I --> h(#1:List, #2:List, #2:List) #12:List J --> #6:List K --> #7:List L --> #13:List h(#3:List, #4:List) U --> #8:List V --> #9:List #10:List W --> #11:List a #5:List Unifier 6 A --> #1:List B --> #2:List C --> #12:List h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #8:List b #9:List Y --> #10:List #11:List Z --> #5:List I --> h(#1:List, #2:List, #2:List) #12:List J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #8:List V --> #9:List #10:List W --> #11:List a #5:List Unifier 7 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) #12:List H --> #3:List G --> #4:List X --> #8:List b #9:List Y --> #10:List #11:List Z --> #5:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> #12:List h(#3:List, #4:List) U --> #8:List V --> #9:List #10:List W --> #11:List a #5:List Unifier 8 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #8:List b #9:List Y --> #10:List #11:List Z --> #5:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #8:List V --> #9:List #10:List W --> #11:List a #5:List Unifier 9 A --> #1:List B --> #2:List C --> #12:List h(#6:List, i(#7:List)) #13:List H --> #3:List G --> #4:List X --> #8:List b #10:List Y --> #5:List Z --> #11:List #9:List I --> h(#1:List, #2:List, #2:List) #12:List J --> #6:List K --> #7:List L --> #13:List h(#3:List, #4:List) U --> #8:List V --> #10:List #5:List a #11:List W --> #9:List Unifier 10 A --> #1:List B --> #2:List C --> #12:List h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #8:List b #10:List Y --> #5:List Z --> #11:List #9:List I --> h(#1:List, #2:List, #2:List) #12:List J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #8:List V --> #10:List #5:List a #11:List W --> #9:List Unifier 11 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) #12:List H --> #3:List G --> #4:List X --> #8:List b #10:List Y --> #5:List Z --> #11:List #9:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> #12:List h(#3:List, #4:List) U --> #8:List V --> #10:List #5:List a #11:List W --> #9:List Unifier 12 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #8:List b #10:List Y --> #5:List Z --> #11:List #9:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #8:List V --> #10:List #5:List a #11:List W --> #9:List Unifier 13 A --> #1:List B --> #2:List C --> #11:List h(#7:List, i(#8:List)) #12:List H --> #3:List G --> #4:List X --> #9:List b #10:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #7:List K --> #8:List L --> #12:List h(#3:List, #4:List) U --> #9:List V --> #10:List #5:List a W --> #6:List Unifier 14 A --> #1:List B --> #2:List C --> #11:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #9:List b #10:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #9:List V --> #10:List #5:List a W --> #6:List Unifier 15 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #11:List H --> #3:List G --> #4:List X --> #9:List b #10:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #11:List h(#3:List, #4:List) U --> #9:List V --> #10:List #5:List a W --> #6:List Unifier 16 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #9:List b #10:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #9:List V --> #10:List #5:List a W --> #6:List Unifier 17 A --> #1:List B --> #2:List C --> #11:List h(#7:List, i(#8:List)) #12:List H --> #3:List G --> #4:List X --> #9:List b #10:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #7:List K --> #8:List L --> #12:List h(#3:List, #4:List) U --> #9:List V --> #10:List #5:List W --> a #6:List Unifier 18 A --> #1:List B --> #2:List C --> #11:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #9:List b #10:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #9:List V --> #10:List #5:List W --> a #6:List Unifier 19 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #11:List H --> #3:List G --> #4:List X --> #9:List b #10:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #11:List h(#3:List, #4:List) U --> #9:List V --> #10:List #5:List W --> a #6:List Unifier 20 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #9:List b #10:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #9:List V --> #10:List #5:List W --> a #6:List Unifier 21 A --> #1:List B --> #2:List C --> #11:List h(#7:List, i(#8:List)) #12:List H --> #3:List G --> #4:List X --> #9:List b #10:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #7:List K --> #8:List L --> #12:List h(#3:List, #4:List) U --> #9:List V --> #10:List W --> #5:List a #6:List Unifier 22 A --> #1:List B --> #2:List C --> #11:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #9:List b #10:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #9:List V --> #10:List W --> #5:List a #6:List Unifier 23 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #11:List H --> #3:List G --> #4:List X --> #9:List b #10:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #11:List h(#3:List, #4:List) U --> #9:List V --> #10:List W --> #5:List a #6:List Unifier 24 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #9:List b #10:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #9:List V --> #10:List W --> #5:List a #6:List Unifier 25 A --> #1:List B --> #2:List C --> #11:List h(#6:List, i(#7:List)) #12:List H --> #3:List G --> #4:List X --> #8:List b Y --> #9:List #10:List Z --> #5:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #6:List K --> #7:List L --> #12:List h(#3:List, #4:List) U --> #8:List V --> #9:List W --> #10:List a #5:List Unifier 26 A --> #1:List B --> #2:List C --> #11:List h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #8:List b Y --> #9:List #10:List Z --> #5:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #8:List V --> #9:List W --> #10:List a #5:List Unifier 27 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) #11:List H --> #3:List G --> #4:List X --> #8:List b Y --> #9:List #10:List Z --> #5:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> #11:List h(#3:List, #4:List) U --> #8:List V --> #9:List W --> #10:List a #5:List Unifier 28 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #8:List b Y --> #9:List #10:List Z --> #5:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #8:List V --> #9:List W --> #10:List a #5:List Unifier 29 A --> #1:List B --> #2:List C --> #11:List h(#6:List, i(#7:List)) #12:List H --> #3:List G --> #4:List X --> #8:List b Y --> #5:List Z --> #10:List #9:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #6:List K --> #7:List L --> #12:List h(#3:List, #4:List) U --> #8:List V --> #5:List a #10:List W --> #9:List Unifier 30 A --> #1:List B --> #2:List C --> #11:List h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #8:List b Y --> #5:List Z --> #10:List #9:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #8:List V --> #5:List a #10:List W --> #9:List Unifier 31 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) #11:List H --> #3:List G --> #4:List X --> #8:List b Y --> #5:List Z --> #10:List #9:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> #11:List h(#3:List, #4:List) U --> #8:List V --> #5:List a #10:List W --> #9:List Unifier 32 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #8:List b Y --> #5:List Z --> #10:List #9:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #8:List V --> #5:List a #10:List W --> #9:List Unifier 33 A --> #1:List B --> #2:List C --> #10:List h(#7:List, i(#8:List)) #11:List H --> #3:List G --> #4:List X --> #9:List b Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #10:List J --> #7:List K --> #8:List L --> #11:List h(#3:List, #4:List) U --> #9:List V --> #5:List a W --> #6:List Unifier 34 A --> #1:List B --> #2:List C --> #10:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #9:List b Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #10:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #9:List V --> #5:List a W --> #6:List Unifier 35 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #10:List H --> #3:List G --> #4:List X --> #9:List b Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #10:List h(#3:List, #4:List) U --> #9:List V --> #5:List a W --> #6:List Unifier 36 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #9:List b Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #9:List V --> #5:List a W --> #6:List Unifier 37 A --> #1:List B --> #2:List C --> #10:List h(#7:List, i(#8:List)) #11:List H --> #3:List G --> #4:List X --> #9:List b Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #10:List J --> #7:List K --> #8:List L --> #11:List h(#3:List, #4:List) U --> #9:List V --> #5:List W --> a #6:List Unifier 38 A --> #1:List B --> #2:List C --> #10:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #9:List b Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #10:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #9:List V --> #5:List W --> a #6:List Unifier 39 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #10:List H --> #3:List G --> #4:List X --> #9:List b Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #10:List h(#3:List, #4:List) U --> #9:List V --> #5:List W --> a #6:List Unifier 40 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #9:List b Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #9:List V --> #5:List W --> a #6:List Unifier 41 A --> #1:List B --> #2:List C --> #12:List h(#7:List, i(#8:List)) #13:List H --> #3:List G --> #4:List X --> #5:List Y --> #10:List b #9:List #11:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #12:List J --> #7:List K --> #8:List L --> #13:List h(#3:List, #4:List) U --> #5:List #10:List V --> #9:List W --> #11:List a #6:List Unifier 42 A --> #1:List B --> #2:List C --> #12:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #10:List b #9:List #11:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #12:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List #10:List V --> #9:List W --> #11:List a #6:List Unifier 43 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #12:List H --> #3:List G --> #4:List X --> #5:List Y --> #10:List b #9:List #11:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #12:List h(#3:List, #4:List) U --> #5:List #10:List V --> #9:List W --> #11:List a #6:List Unifier 44 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #10:List b #9:List #11:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List #10:List V --> #9:List W --> #11:List a #6:List Unifier 45 A --> #1:List B --> #2:List C --> #12:List h(#6:List, i(#7:List)) #13:List H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b #10:List Z --> #11:List #8:List I --> h(#1:List, #2:List, #2:List) #12:List J --> #6:List K --> #7:List L --> #13:List h(#3:List, #4:List) U --> #5:List #9:List V --> #10:List a #11:List W --> #8:List Unifier 46 A --> #1:List B --> #2:List C --> #12:List h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b #10:List Z --> #11:List #8:List I --> h(#1:List, #2:List, #2:List) #12:List J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #5:List #9:List V --> #10:List a #11:List W --> #8:List Unifier 47 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) #12:List H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b #10:List Z --> #11:List #8:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> #12:List h(#3:List, #4:List) U --> #5:List #9:List V --> #10:List a #11:List W --> #8:List Unifier 48 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b #10:List Z --> #11:List #8:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #5:List #9:List V --> #10:List a #11:List W --> #8:List Unifier 49 A --> #1:List B --> #2:List C --> #11:List h(#7:List, i(#8:List)) #12:List H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b #10:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #7:List K --> #8:List L --> #12:List h(#3:List, #4:List) U --> #5:List #9:List V --> #10:List a W --> #6:List Unifier 50 A --> #1:List B --> #2:List C --> #11:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b #10:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List #9:List V --> #10:List a W --> #6:List Unifier 51 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #11:List H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b #10:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #11:List h(#3:List, #4:List) U --> #5:List #9:List V --> #10:List a W --> #6:List Unifier 52 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b #10:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List #9:List V --> #10:List a W --> #6:List Unifier 53 A --> #1:List B --> #2:List C --> #11:List h(#7:List, i(#8:List)) #12:List H --> #3:List G --> #4:List X --> #5:List Y --> #10:List b #9:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #7:List K --> #8:List L --> #12:List h(#3:List, #4:List) U --> #5:List #10:List V --> #9:List W --> a #6:List Unifier 54 A --> #1:List B --> #2:List C --> #11:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #10:List b #9:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List #10:List V --> #9:List W --> a #6:List Unifier 55 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #11:List H --> #3:List G --> #4:List X --> #5:List Y --> #10:List b #9:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #11:List h(#3:List, #4:List) U --> #5:List #10:List V --> #9:List W --> a #6:List Unifier 56 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #10:List b #9:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List #10:List V --> #9:List W --> a #6:List Unifier 57 A --> #1:List B --> #2:List C --> #11:List h(#6:List, i(#7:List)) #12:List H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b Z --> #10:List #8:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #6:List K --> #7:List L --> #12:List h(#3:List, #4:List) U --> #5:List #9:List V --> a #10:List W --> #8:List Unifier 58 A --> #1:List B --> #2:List C --> #11:List h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b Z --> #10:List #8:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #5:List #9:List V --> a #10:List W --> #8:List Unifier 59 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) #11:List H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b Z --> #10:List #8:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> #11:List h(#3:List, #4:List) U --> #5:List #9:List V --> a #10:List W --> #8:List Unifier 60 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b Z --> #10:List #8:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #5:List #9:List V --> a #10:List W --> #8:List Unifier 61 A --> #1:List B --> #2:List C --> #10:List h(#7:List, i(#8:List)) #11:List H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b Z --> #6:List I --> h(#1:List, #2:List, #2:List) #10:List J --> #7:List K --> #8:List L --> #11:List h(#3:List, #4:List) U --> #5:List #9:List V --> a W --> #6:List Unifier 62 A --> #1:List B --> #2:List C --> #10:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b Z --> #6:List I --> h(#1:List, #2:List, #2:List) #10:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List #9:List V --> a W --> #6:List Unifier 63 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #10:List H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #10:List h(#3:List, #4:List) U --> #5:List #9:List V --> a W --> #6:List Unifier 64 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List #9:List V --> a W --> #6:List Unifier 65 A --> #1:List B --> #2:List C --> #12:List h(#7:List, i(#8:List)) #13:List H --> #3:List G --> #4:List X --> #5:List Y --> #6:List Z --> #11:List b #9:List #10:List I --> h(#1:List, #2:List, #2:List) #12:List J --> #7:List K --> #8:List L --> #13:List h(#3:List, #4:List) U --> #5:List #6:List a #11:List V --> #9:List W --> #10:List Unifier 66 A --> #1:List B --> #2:List C --> #12:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #6:List Z --> #11:List b #9:List #10:List I --> h(#1:List, #2:List, #2:List) #12:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List #6:List a #11:List V --> #9:List W --> #10:List Unifier 67 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #12:List H --> #3:List G --> #4:List X --> #5:List Y --> #6:List Z --> #11:List b #9:List #10:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #12:List h(#3:List, #4:List) U --> #5:List #6:List a #11:List V --> #9:List W --> #10:List Unifier 68 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #6:List Z --> #11:List b #9:List #10:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List #6:List a #11:List V --> #9:List W --> #10:List Unifier 69 A --> #1:List B --> #2:List C --> #11:List h(#7:List, i(#8:List)) #12:List H --> #3:List G --> #4:List X --> #5:List Y --> #6:List Z --> b #9:List #10:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #7:List K --> #8:List L --> #12:List h(#3:List, #4:List) U --> #5:List #6:List a V --> #9:List W --> #10:List Unifier 70 A --> #1:List B --> #2:List C --> #11:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #6:List Z --> b #9:List #10:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List #6:List a V --> #9:List W --> #10:List Unifier 71 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #11:List H --> #3:List G --> #4:List X --> #5:List Y --> #6:List Z --> b #9:List #10:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #11:List h(#3:List, #4:List) U --> #5:List #6:List a V --> #9:List W --> #10:List Unifier 72 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #6:List Z --> b #9:List #10:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List #6:List a V --> #9:List W --> #10:List Unifier 73 A --> #1:List B --> #2:List C --> #11:List h(#7:List, i(#8:List)) #12:List H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List #10:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #7:List K --> #8:List L --> #12:List h(#3:List, #4:List) U --> #5:List V --> #9:List W --> #10:List a #6:List Unifier 74 A --> #1:List B --> #2:List C --> #11:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List #10:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List V --> #9:List W --> #10:List a #6:List Unifier 75 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #11:List H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List #10:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #11:List h(#3:List, #4:List) U --> #5:List V --> #9:List W --> #10:List a #6:List Unifier 76 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List #10:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List V --> #9:List W --> #10:List a #6:List Unifier 77 A --> #1:List B --> #2:List C --> #11:List h(#6:List, i(#7:List)) #12:List H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List Z --> #10:List #8:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #6:List K --> #7:List L --> #12:List h(#3:List, #4:List) U --> #5:List V --> #9:List a #10:List W --> #8:List Unifier 78 A --> #1:List B --> #2:List C --> #11:List h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List Z --> #10:List #8:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #5:List V --> #9:List a #10:List W --> #8:List Unifier 79 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) #11:List H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List Z --> #10:List #8:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> #11:List h(#3:List, #4:List) U --> #5:List V --> #9:List a #10:List W --> #8:List Unifier 80 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List Z --> #10:List #8:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #5:List V --> #9:List a #10:List W --> #8:List Unifier 81 A --> #1:List B --> #2:List C --> #10:List h(#7:List, i(#8:List)) #11:List H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #10:List J --> #7:List K --> #8:List L --> #11:List h(#3:List, #4:List) U --> #5:List V --> #9:List a W --> #6:List Unifier 82 A --> #1:List B --> #2:List C --> #10:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #10:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List V --> #9:List a W --> #6:List Unifier 83 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #10:List H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #10:List h(#3:List, #4:List) U --> #5:List V --> #9:List a W --> #6:List Unifier 84 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List V --> #9:List a W --> #6:List Unifier 85 A --> #1:List B --> #2:List C --> #10:List h(#7:List, i(#8:List)) #11:List H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #10:List J --> #7:List K --> #8:List L --> #11:List h(#3:List, #4:List) U --> #5:List V --> #9:List W --> a #6:List Unifier 86 A --> #1:List B --> #2:List C --> #10:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #10:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List V --> #9:List W --> a #6:List Unifier 87 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #10:List H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #10:List h(#3:List, #4:List) U --> #5:List V --> #9:List W --> a #6:List Unifier 88 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List V --> #9:List W --> a #6:List Unifier 89 A --> #1:List B --> #2:List C --> #10:List h(#6:List, i(#7:List)) #11:List H --> #3:List G --> #4:List X --> #5:List Y --> b Z --> #9:List #8:List I --> h(#1:List, #2:List, #2:List) #10:List J --> #6:List K --> #7:List L --> #11:List h(#3:List, #4:List) U --> #5:List V --> a #9:List W --> #8:List Unifier 90 A --> #1:List B --> #2:List C --> #10:List h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #5:List Y --> b Z --> #9:List #8:List I --> h(#1:List, #2:List, #2:List) #10:List J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #5:List V --> a #9:List W --> #8:List Unifier 91 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) #10:List H --> #3:List G --> #4:List X --> #5:List Y --> b Z --> #9:List #8:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> #10:List h(#3:List, #4:List) U --> #5:List V --> a #9:List W --> #8:List Unifier 92 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #5:List Y --> b Z --> #9:List #8:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #5:List V --> a #9:List W --> #8:List Unifier 93 A --> #1:List B --> #2:List C --> #9:List h(#7:List, i(#8:List)) #10:List H --> #3:List G --> #4:List X --> #5:List Y --> b Z --> #6:List I --> h(#1:List, #2:List, #2:List) #9:List J --> #7:List K --> #8:List L --> #10:List h(#3:List, #4:List) U --> #5:List V --> a W --> #6:List Unifier 94 A --> #1:List B --> #2:List C --> #9:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> b Z --> #6:List I --> h(#1:List, #2:List, #2:List) #9:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List V --> a W --> #6:List Unifier 95 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #9:List H --> #3:List G --> #4:List X --> #5:List Y --> b Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #9:List h(#3:List, #4:List) U --> #5:List V --> a W --> #6:List Unifier 96 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> b Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List V --> a W --> #6:List ========================================== unify in A-UNIF : h(h(A, B, B) C h(G, H), X Y a Z) =? h(I h(J, i(K)) L, U b V W) . Unifier 1 A --> #1:List B --> #2:List C --> #12:List h(#7:List, i(#8:List)) #13:List H --> #3:List G --> #4:List X --> #5:List Y --> #6:List Z --> #11:List b #9:List #10:List I --> h(#1:List, #2:List, #2:List) #12:List J --> #7:List K --> #8:List L --> #13:List h(#3:List, #4:List) U --> #5:List #6:List a #11:List V --> #9:List W --> #10:List Unifier 2 A --> #1:List B --> #2:List C --> #12:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #6:List Z --> #11:List b #9:List #10:List I --> h(#1:List, #2:List, #2:List) #12:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List #6:List a #11:List V --> #9:List W --> #10:List Unifier 3 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #12:List H --> #3:List G --> #4:List X --> #5:List Y --> #6:List Z --> #11:List b #9:List #10:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #12:List h(#3:List, #4:List) U --> #5:List #6:List a #11:List V --> #9:List W --> #10:List Unifier 4 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #6:List Z --> #11:List b #9:List #10:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List #6:List a #11:List V --> #9:List W --> #10:List Unifier 5 A --> #1:List B --> #2:List C --> #11:List h(#7:List, i(#8:List)) #12:List H --> #3:List G --> #4:List X --> #5:List Y --> #6:List Z --> b #9:List #10:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #7:List K --> #8:List L --> #12:List h(#3:List, #4:List) U --> #5:List #6:List a V --> #9:List W --> #10:List Unifier 6 A --> #1:List B --> #2:List C --> #11:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #6:List Z --> b #9:List #10:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List #6:List a V --> #9:List W --> #10:List Unifier 7 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #11:List H --> #3:List G --> #4:List X --> #5:List Y --> #6:List Z --> b #9:List #10:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #11:List h(#3:List, #4:List) U --> #5:List #6:List a V --> #9:List W --> #10:List Unifier 8 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #6:List Z --> b #9:List #10:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List #6:List a V --> #9:List W --> #10:List Unifier 9 A --> #1:List B --> #2:List C --> #12:List h(#6:List, i(#7:List)) #13:List H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b #10:List Z --> #11:List #8:List I --> h(#1:List, #2:List, #2:List) #12:List J --> #6:List K --> #7:List L --> #13:List h(#3:List, #4:List) U --> #5:List #9:List V --> #10:List a #11:List W --> #8:List Unifier 10 A --> #1:List B --> #2:List C --> #12:List h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b #10:List Z --> #11:List #8:List I --> h(#1:List, #2:List, #2:List) #12:List J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #5:List #9:List V --> #10:List a #11:List W --> #8:List Unifier 11 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) #12:List H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b #10:List Z --> #11:List #8:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> #12:List h(#3:List, #4:List) U --> #5:List #9:List V --> #10:List a #11:List W --> #8:List Unifier 12 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b #10:List Z --> #11:List #8:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #5:List #9:List V --> #10:List a #11:List W --> #8:List Unifier 13 A --> #1:List B --> #2:List C --> #11:List h(#7:List, i(#8:List)) #12:List H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b #10:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #7:List K --> #8:List L --> #12:List h(#3:List, #4:List) U --> #5:List #9:List V --> #10:List a W --> #6:List Unifier 14 A --> #1:List B --> #2:List C --> #11:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b #10:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List #9:List V --> #10:List a W --> #6:List Unifier 15 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #11:List H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b #10:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #11:List h(#3:List, #4:List) U --> #5:List #9:List V --> #10:List a W --> #6:List Unifier 16 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b #10:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List #9:List V --> #10:List a W --> #6:List Unifier 17 A --> #1:List B --> #2:List C --> #12:List h(#7:List, i(#8:List)) #13:List H --> #3:List G --> #4:List X --> #5:List Y --> #10:List b #9:List #11:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #12:List J --> #7:List K --> #8:List L --> #13:List h(#3:List, #4:List) U --> #5:List #10:List V --> #9:List W --> #11:List a #6:List Unifier 18 A --> #1:List B --> #2:List C --> #12:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #10:List b #9:List #11:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #12:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List #10:List V --> #9:List W --> #11:List a #6:List Unifier 19 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #12:List H --> #3:List G --> #4:List X --> #5:List Y --> #10:List b #9:List #11:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #12:List h(#3:List, #4:List) U --> #5:List #10:List V --> #9:List W --> #11:List a #6:List Unifier 20 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #10:List b #9:List #11:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List #10:List V --> #9:List W --> #11:List a #6:List Unifier 21 A --> #1:List B --> #2:List C --> #11:List h(#7:List, i(#8:List)) #12:List H --> #3:List G --> #4:List X --> #5:List Y --> #10:List b #9:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #7:List K --> #8:List L --> #12:List h(#3:List, #4:List) U --> #5:List #10:List V --> #9:List W --> a #6:List Unifier 22 A --> #1:List B --> #2:List C --> #11:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #10:List b #9:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List #10:List V --> #9:List W --> a #6:List Unifier 23 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #11:List H --> #3:List G --> #4:List X --> #5:List Y --> #10:List b #9:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #11:List h(#3:List, #4:List) U --> #5:List #10:List V --> #9:List W --> a #6:List Unifier 24 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #10:List b #9:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List #10:List V --> #9:List W --> a #6:List Unifier 25 A --> #1:List B --> #2:List C --> #11:List h(#6:List, i(#7:List)) #12:List H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b Z --> #10:List #8:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #6:List K --> #7:List L --> #12:List h(#3:List, #4:List) U --> #5:List #9:List V --> a #10:List W --> #8:List Unifier 26 A --> #1:List B --> #2:List C --> #11:List h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b Z --> #10:List #8:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #5:List #9:List V --> a #10:List W --> #8:List Unifier 27 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) #11:List H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b Z --> #10:List #8:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> #11:List h(#3:List, #4:List) U --> #5:List #9:List V --> a #10:List W --> #8:List Unifier 28 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b Z --> #10:List #8:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #5:List #9:List V --> a #10:List W --> #8:List Unifier 29 A --> #1:List B --> #2:List C --> #10:List h(#7:List, i(#8:List)) #11:List H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b Z --> #6:List I --> h(#1:List, #2:List, #2:List) #10:List J --> #7:List K --> #8:List L --> #11:List h(#3:List, #4:List) U --> #5:List #9:List V --> a W --> #6:List Unifier 30 A --> #1:List B --> #2:List C --> #10:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b Z --> #6:List I --> h(#1:List, #2:List, #2:List) #10:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List #9:List V --> a W --> #6:List Unifier 31 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #10:List H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #10:List h(#3:List, #4:List) U --> #5:List #9:List V --> a W --> #6:List Unifier 32 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> #9:List b Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List #9:List V --> a W --> #6:List Unifier 33 A --> #1:List B --> #2:List C --> #12:List h(#6:List, i(#7:List)) #13:List H --> #3:List G --> #4:List X --> #8:List b #10:List Y --> #5:List Z --> #11:List #9:List I --> h(#1:List, #2:List, #2:List) #12:List J --> #6:List K --> #7:List L --> #13:List h(#3:List, #4:List) U --> #8:List V --> #10:List #5:List a #11:List W --> #9:List Unifier 34 A --> #1:List B --> #2:List C --> #12:List h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #8:List b #10:List Y --> #5:List Z --> #11:List #9:List I --> h(#1:List, #2:List, #2:List) #12:List J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #8:List V --> #10:List #5:List a #11:List W --> #9:List Unifier 35 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) #12:List H --> #3:List G --> #4:List X --> #8:List b #10:List Y --> #5:List Z --> #11:List #9:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> #12:List h(#3:List, #4:List) U --> #8:List V --> #10:List #5:List a #11:List W --> #9:List Unifier 36 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #8:List b #10:List Y --> #5:List Z --> #11:List #9:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #8:List V --> #10:List #5:List a #11:List W --> #9:List Unifier 37 A --> #1:List B --> #2:List C --> #11:List h(#7:List, i(#8:List)) #12:List H --> #3:List G --> #4:List X --> #9:List b #10:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #7:List K --> #8:List L --> #12:List h(#3:List, #4:List) U --> #9:List V --> #10:List #5:List a W --> #6:List Unifier 38 A --> #1:List B --> #2:List C --> #11:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #9:List b #10:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #9:List V --> #10:List #5:List a W --> #6:List Unifier 39 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #11:List H --> #3:List G --> #4:List X --> #9:List b #10:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #11:List h(#3:List, #4:List) U --> #9:List V --> #10:List #5:List a W --> #6:List Unifier 40 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #9:List b #10:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #9:List V --> #10:List #5:List a W --> #6:List Unifier 41 A --> #1:List B --> #2:List C --> #12:List h(#6:List, i(#7:List)) #13:List H --> #3:List G --> #4:List X --> #8:List b #9:List Y --> #10:List #11:List Z --> #5:List I --> h(#1:List, #2:List, #2:List) #12:List J --> #6:List K --> #7:List L --> #13:List h(#3:List, #4:List) U --> #8:List V --> #9:List #10:List W --> #11:List a #5:List Unifier 42 A --> #1:List B --> #2:List C --> #12:List h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #8:List b #9:List Y --> #10:List #11:List Z --> #5:List I --> h(#1:List, #2:List, #2:List) #12:List J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #8:List V --> #9:List #10:List W --> #11:List a #5:List Unifier 43 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) #12:List H --> #3:List G --> #4:List X --> #8:List b #9:List Y --> #10:List #11:List Z --> #5:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> #12:List h(#3:List, #4:List) U --> #8:List V --> #9:List #10:List W --> #11:List a #5:List Unifier 44 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #8:List b #9:List Y --> #10:List #11:List Z --> #5:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #8:List V --> #9:List #10:List W --> #11:List a #5:List Unifier 45 A --> #1:List B --> #2:List C --> #11:List h(#7:List, i(#8:List)) #12:List H --> #3:List G --> #4:List X --> #9:List b #10:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #7:List K --> #8:List L --> #12:List h(#3:List, #4:List) U --> #9:List V --> #10:List #5:List W --> a #6:List Unifier 46 A --> #1:List B --> #2:List C --> #11:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #9:List b #10:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #9:List V --> #10:List #5:List W --> a #6:List Unifier 47 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #11:List H --> #3:List G --> #4:List X --> #9:List b #10:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #11:List h(#3:List, #4:List) U --> #9:List V --> #10:List #5:List W --> a #6:List Unifier 48 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #9:List b #10:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #9:List V --> #10:List #5:List W --> a #6:List Unifier 49 A --> #1:List B --> #2:List C --> #12:List h(#7:List, i(#8:List)) #13:List H --> #3:List G --> #4:List X --> #9:List b #10:List #11:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #12:List J --> #7:List K --> #8:List L --> #13:List h(#3:List, #4:List) U --> #9:List V --> #10:List W --> #11:List #5:List a #6:List Unifier 50 A --> #1:List B --> #2:List C --> #12:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #9:List b #10:List #11:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #12:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #9:List V --> #10:List W --> #11:List #5:List a #6:List Unifier 51 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #12:List H --> #3:List G --> #4:List X --> #9:List b #10:List #11:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #12:List h(#3:List, #4:List) U --> #9:List V --> #10:List W --> #11:List #5:List a #6:List Unifier 52 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #9:List b #10:List #11:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #9:List V --> #10:List W --> #11:List #5:List a #6:List Unifier 53 A --> #1:List B --> #2:List C --> #11:List h(#7:List, i(#8:List)) #12:List H --> #3:List G --> #4:List X --> #9:List b #10:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #7:List K --> #8:List L --> #12:List h(#3:List, #4:List) U --> #9:List V --> #10:List W --> #5:List a #6:List Unifier 54 A --> #1:List B --> #2:List C --> #11:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #9:List b #10:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #9:List V --> #10:List W --> #5:List a #6:List Unifier 55 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #11:List H --> #3:List G --> #4:List X --> #9:List b #10:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #11:List h(#3:List, #4:List) U --> #9:List V --> #10:List W --> #5:List a #6:List Unifier 56 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #9:List b #10:List Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #9:List V --> #10:List W --> #5:List a #6:List Unifier 57 A --> #1:List B --> #2:List C --> #11:List h(#6:List, i(#7:List)) #12:List H --> #3:List G --> #4:List X --> #8:List b Y --> #5:List Z --> #10:List #9:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #6:List K --> #7:List L --> #12:List h(#3:List, #4:List) U --> #8:List V --> #5:List a #10:List W --> #9:List Unifier 58 A --> #1:List B --> #2:List C --> #11:List h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #8:List b Y --> #5:List Z --> #10:List #9:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #8:List V --> #5:List a #10:List W --> #9:List Unifier 59 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) #11:List H --> #3:List G --> #4:List X --> #8:List b Y --> #5:List Z --> #10:List #9:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> #11:List h(#3:List, #4:List) U --> #8:List V --> #5:List a #10:List W --> #9:List Unifier 60 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #8:List b Y --> #5:List Z --> #10:List #9:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #8:List V --> #5:List a #10:List W --> #9:List Unifier 61 A --> #1:List B --> #2:List C --> #10:List h(#7:List, i(#8:List)) #11:List H --> #3:List G --> #4:List X --> #9:List b Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #10:List J --> #7:List K --> #8:List L --> #11:List h(#3:List, #4:List) U --> #9:List V --> #5:List a W --> #6:List Unifier 62 A --> #1:List B --> #2:List C --> #10:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #9:List b Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #10:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #9:List V --> #5:List a W --> #6:List Unifier 63 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #10:List H --> #3:List G --> #4:List X --> #9:List b Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #10:List h(#3:List, #4:List) U --> #9:List V --> #5:List a W --> #6:List Unifier 64 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #9:List b Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #9:List V --> #5:List a W --> #6:List Unifier 65 A --> #1:List B --> #2:List C --> #11:List h(#6:List, i(#7:List)) #12:List H --> #3:List G --> #4:List X --> #8:List b Y --> #9:List #10:List Z --> #5:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #6:List K --> #7:List L --> #12:List h(#3:List, #4:List) U --> #8:List V --> #9:List W --> #10:List a #5:List Unifier 66 A --> #1:List B --> #2:List C --> #11:List h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #8:List b Y --> #9:List #10:List Z --> #5:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #8:List V --> #9:List W --> #10:List a #5:List Unifier 67 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) #11:List H --> #3:List G --> #4:List X --> #8:List b Y --> #9:List #10:List Z --> #5:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> #11:List h(#3:List, #4:List) U --> #8:List V --> #9:List W --> #10:List a #5:List Unifier 68 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #8:List b Y --> #9:List #10:List Z --> #5:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #8:List V --> #9:List W --> #10:List a #5:List Unifier 69 A --> #1:List B --> #2:List C --> #10:List h(#7:List, i(#8:List)) #11:List H --> #3:List G --> #4:List X --> #9:List b Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #10:List J --> #7:List K --> #8:List L --> #11:List h(#3:List, #4:List) U --> #9:List V --> #5:List W --> a #6:List Unifier 70 A --> #1:List B --> #2:List C --> #10:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #9:List b Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #10:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #9:List V --> #5:List W --> a #6:List Unifier 71 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #10:List H --> #3:List G --> #4:List X --> #9:List b Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #10:List h(#3:List, #4:List) U --> #9:List V --> #5:List W --> a #6:List Unifier 72 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #9:List b Y --> #5:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #9:List V --> #5:List W --> a #6:List Unifier 73 A --> #1:List B --> #2:List C --> #11:List h(#6:List, i(#7:List)) #12:List H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List Z --> #10:List #8:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #6:List K --> #7:List L --> #12:List h(#3:List, #4:List) U --> #5:List V --> #9:List a #10:List W --> #8:List Unifier 74 A --> #1:List B --> #2:List C --> #11:List h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List Z --> #10:List #8:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #5:List V --> #9:List a #10:List W --> #8:List Unifier 75 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) #11:List H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List Z --> #10:List #8:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> #11:List h(#3:List, #4:List) U --> #5:List V --> #9:List a #10:List W --> #8:List Unifier 76 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List Z --> #10:List #8:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #5:List V --> #9:List a #10:List W --> #8:List Unifier 77 A --> #1:List B --> #2:List C --> #10:List h(#7:List, i(#8:List)) #11:List H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #10:List J --> #7:List K --> #8:List L --> #11:List h(#3:List, #4:List) U --> #5:List V --> #9:List a W --> #6:List Unifier 78 A --> #1:List B --> #2:List C --> #10:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #10:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List V --> #9:List a W --> #6:List Unifier 79 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #10:List H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #10:List h(#3:List, #4:List) U --> #5:List V --> #9:List a W --> #6:List Unifier 80 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List V --> #9:List a W --> #6:List Unifier 81 A --> #1:List B --> #2:List C --> #11:List h(#7:List, i(#8:List)) #12:List H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List #10:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #7:List K --> #8:List L --> #12:List h(#3:List, #4:List) U --> #5:List V --> #9:List W --> #10:List a #6:List Unifier 82 A --> #1:List B --> #2:List C --> #11:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List #10:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #11:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List V --> #9:List W --> #10:List a #6:List Unifier 83 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #11:List H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List #10:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #11:List h(#3:List, #4:List) U --> #5:List V --> #9:List W --> #10:List a #6:List Unifier 84 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List #10:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List V --> #9:List W --> #10:List a #6:List Unifier 85 A --> #1:List B --> #2:List C --> #10:List h(#7:List, i(#8:List)) #11:List H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #10:List J --> #7:List K --> #8:List L --> #11:List h(#3:List, #4:List) U --> #5:List V --> #9:List W --> a #6:List Unifier 86 A --> #1:List B --> #2:List C --> #10:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) #10:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List V --> #9:List W --> a #6:List Unifier 87 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #10:List H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #10:List h(#3:List, #4:List) U --> #5:List V --> #9:List W --> a #6:List Unifier 88 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> b #9:List Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List V --> #9:List W --> a #6:List Unifier 89 A --> #1:List B --> #2:List C --> #10:List h(#6:List, i(#7:List)) #11:List H --> #3:List G --> #4:List X --> #5:List Y --> b Z --> #9:List #8:List I --> h(#1:List, #2:List, #2:List) #10:List J --> #6:List K --> #7:List L --> #11:List h(#3:List, #4:List) U --> #5:List V --> a #9:List W --> #8:List Unifier 90 A --> #1:List B --> #2:List C --> #10:List h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #5:List Y --> b Z --> #9:List #8:List I --> h(#1:List, #2:List, #2:List) #10:List J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #5:List V --> a #9:List W --> #8:List Unifier 91 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) #10:List H --> #3:List G --> #4:List X --> #5:List Y --> b Z --> #9:List #8:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> #10:List h(#3:List, #4:List) U --> #5:List V --> a #9:List W --> #8:List Unifier 92 A --> #1:List B --> #2:List C --> h(#6:List, i(#7:List)) H --> #3:List G --> #4:List X --> #5:List Y --> b Z --> #9:List #8:List I --> h(#1:List, #2:List, #2:List) J --> #6:List K --> #7:List L --> h(#3:List, #4:List) U --> #5:List V --> a #9:List W --> #8:List Unifier 93 A --> #1:List B --> #2:List C --> #9:List h(#7:List, i(#8:List)) #10:List H --> #3:List G --> #4:List X --> #5:List Y --> b Z --> #6:List I --> h(#1:List, #2:List, #2:List) #9:List J --> #7:List K --> #8:List L --> #10:List h(#3:List, #4:List) U --> #5:List V --> a W --> #6:List Unifier 94 A --> #1:List B --> #2:List C --> #9:List h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> b Z --> #6:List I --> h(#1:List, #2:List, #2:List) #9:List J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List V --> a W --> #6:List Unifier 95 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) #9:List H --> #3:List G --> #4:List X --> #5:List Y --> b Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> #9:List h(#3:List, #4:List) U --> #5:List V --> a W --> #6:List Unifier 96 A --> #1:List B --> #2:List C --> h(#7:List, i(#8:List)) H --> #3:List G --> #4:List X --> #5:List Y --> b Z --> #6:List I --> h(#1:List, #2:List, #2:List) J --> #7:List K --> #8:List L --> h(#3:List, #4:List) U --> #5:List V --> a W --> #6:List Unifier 97 A --> #1:List B --> #2:List C --> #12:List b #10:List #13:List H --> #3:List G --> #4:List X --> #5:List Y --> #6:List Z --> #11:List h(#7:List, i(#8:List)) #9:List I --> #5:List #6:List a #11:List J --> #7:List K --> #8:List L --> #9:List U --> h(#1:List, #2:List, #2:List) #12:List V --> #10:List W --> #13:List h(#3:List, #4:List) Unifier 98 A --> #1:List B --> #2:List C --> #11:List b #10:List #12:List H --> #3:List G --> #4:List X --> #5:List Y --> #6:List Z --> h(#7:List, i(#8:List)) #9:List I --> #5:List #6:List a J --> #7:List K --> #8:List L --> #9:List U --> h(#1:List, #2:List, #2:List) #11:List V --> #10:List W --> #12:List h(#3:List, #4:List) Unifier 99 A --> #1:List B --> #2:List C --> #12:List b #9:List #13:List H --> #3:List G --> #4:List X --> #5:List Y --> #10:List h(#7:List, i(#8:List)) #11:List Z --> #6:List I --> #5:List #10:List J --> #7:List K --> #8:List L --> #11:List a #6:List U --> h(#1:List, #2:List, #2:List) #12:List V --> #9:List W --> #13:List h(#3:List, #4:List) Unifier 100 A --> #1:List B --> #2:List C --> #11:List b #9:List #12:List H --> #3:List G --> #4:List X --> #5:List Y --> #10:List h(#7:List, i(#8:List)) Z --> #6:List I --> #5:List #10:List J --> #7:List K --> #8:List L --> a #6:List U --> h(#1:List, #2:List, #2:List) #11:List V --> #9:List W --> #12:List h(#3:List, #4:List) Unifier 101 A --> #1:List B --> #2:List C --> #12:List b #10:List #13:List H --> #3:List G --> #4:List X --> #7:List h(#8:List, i(#9:List)) #11:List Y --> #5:List Z --> #6:List I --> #7:List J --> #8:List K --> #9:List L --> #11:List #5:List a #6:List U --> h(#1:List, #2:List, #2:List) #12:List V --> #10:List W --> #13:List h(#3:List, #4:List) Unifier 102 A --> #1:List B --> #2:List C --> #11:List b #10:List #12:List H --> #3:List G --> #4:List X --> #7:List h(#8:List, i(#9:List)) Y --> #5:List Z --> #6:List I --> #7:List J --> #8:List K --> #9:List L --> #5:List a #6:List U --> h(#1:List, #2:List, #2:List) #11:List V --> #10:List W --> #12:List h(#3:List, #4:List) Unifier 103 A --> #1:List B --> #2:List C --> #11:List b #9:List #12:List H --> #3:List G --> #4:List X --> #5:List Y --> h(#7:List, i(#8:List)) #10:List Z --> #6:List I --> #5:List J --> #7:List K --> #8:List L --> #10:List a #6:List U --> h(#1:List, #2:List, #2:List) #11:List V --> #9:List W --> #12:List h(#3:List, #4:List) Unifier 104 A --> #1:List B --> #2:List C --> #10:List b #9:List #11:List H --> #3:List G --> #4:List X --> #5:List Y --> h(#7:List, i(#8:List)) Z --> #6:List I --> #5:List J --> #7:List K --> #8:List L --> a #6:List U --> h(#1:List, #2:List, #2:List) #10:List V --> #9:List W --> #11:List h(#3:List, #4:List) Unifier 105 A --> #1:List B --> #2:List C --> #12:List b #10:List H --> #3:List G --> #4:List X --> #5:List Y --> #6:List Z --> #11:List h(#7:List, i(#8:List)) #9:List I --> #5:List #6:List a #11:List J --> #7:List K --> #8:List L --> #9:List U --> h(#1:List, #2:List, #2:List) #12:List V --> #10:List W --> h(#3:List, #4:List) Unifier 106 A --> #1:List B --> #2:List C --> #11:List b #10:List H --> #3:List G --> #4:List X --> #5:List Y --> #6:List Z --> h(#7:List, i(#8:List)) #9:List I --> #5:List #6:List a J --> #7:List K --> #8:List L --> #9:List U --> h(#1:List, #2:List, #2:List) #11:List V --> #10:List W --> h(#3:List, #4:List) Unifier 107 A --> #1:List B --> #2:List C --> #12:List b #9:List H --> #3:List G --> #4:List X --> #5:List Y --> #10:List h(#7:List, i(#8:List)) #11:List Z --> #6:List I --> #5:List #10:List J --> #7:List K --> #8:List L --> #11:List a #6:List U --> h(#1:List, #2:List, #2:List) #12:List V --> #9:List W --> h(#3:List, #4:List) Unifier 108 A --> #1:List B --> #2:List C --> #11:List b #9:List H --> #3:List G --> #4:List X --> #5:List Y --> #10:List h(#7:List, i(#8:List)) Z --> #6:List I --> #5:List #10:List J --> #7:List K --> #8:List L --> a #6:List U --> h(#1:List, #2:List, #2:List) #11:List V --> #9:List W --> h(#3:List, #4:List) Unifier 109 A --> #1:List B --> #2:List C --> #12:List b #10:List H --> #3:List G --> #4:List X --> #7:List h(#8:List, i(#9:List)) #11:List Y --> #5:List Z --> #6:List I --> #7:List J --> #8:List K --> #9:List L --> #11:List #5:List a #6:List U --> h(#1:List, #2:List, #2:List) #12:List V --> #10:List W --> h(#3:List, #4:List) Unifier 110 A --> #1:List B --> #2:List C --> #11:List b #10:List H --> #3:List G --> #4:List X --> #7:List h(#8:List, i(#9:List)) Y --> #5:List Z --> #6:List I --> #7:List J --> #8:List K --> #9:List L --> #5:List a #6:List U --> h(#1:List, #2:List, #2:List) #11:List V --> #10:List W --> h(#3:List, #4:List) Unifier 111 A --> #1:List B --> #2:List C --> #11:List b #9:List H --> #3:List G --> #4:List X --> #5:List Y --> h(#7:List, i(#8:List)) #10:List Z --> #6:List I --> #5:List J --> #7:List K --> #8:List L --> #10:List a #6:List U --> h(#1:List, #2:List, #2:List) #11:List V --> #9:List W --> h(#3:List, #4:List) Unifier 112 A --> #1:List B --> #2:List C --> #10:List b #9:List H --> #3:List G --> #4:List X --> #5:List Y --> h(#7:List, i(#8:List)) Z --> #6:List I --> #5:List J --> #7:List K --> #8:List L --> a #6:List U --> h(#1:List, #2:List, #2:List) #10:List V --> #9:List W --> h(#3:List, #4:List) Unifier 113 A --> #1:List B --> #2:List C --> b #10:List #12:List H --> #3:List G --> #4:List X --> #5:List Y --> #6:List Z --> #11:List h(#7:List, i(#8:List)) #9:List I --> #5:List #6:List a #11:List J --> #7:List K --> #8:List L --> #9:List U --> h(#1:List, #2:List, #2:List) V --> #10:List W --> #12:List h(#3:List, #4:List) Unifier 114 A --> #1:List B --> #2:List C --> b #10:List #11:List H --> #3:List G --> #4:List X --> #5:List Y --> #6:List Z --> h(#7:List, i(#8:List)) #9:List I --> #5:List #6:List a J --> #7:List K --> #8:List L --> #9:List U --> h(#1:List, #2:List, #2:List) V --> #10:List W --> #11:List h(#3:List, #4:List) Unifier 115 A --> #1:List B --> #2:List C --> b #9:List #12:List H --> #3:List G --> #4:List X --> #5:List Y --> #10:List h(#7:List, i(#8:List)) #11:List Z --> #6:List I --> #5:List #10:List J --> #7:List K --> #8:List L --> #11:List a #6:List U --> h(#1:List, #2:List, #2:List) V --> #9:List W --> #12:List h(#3:List, #4:List) Unifier 116 A --> #1:List B --> #2:List C --> b #9:List #11:List H --> #3:List G --> #4:List X --> #5:List Y --> #10:List h(#7:List, i(#8:List)) Z --> #6:List I --> #5:List #10:List J --> #7:List K --> #8:List L --> a #6:List U --> h(#1:List, #2:List, #2:List) V --> #9:List W --> #11:List h(#3:List, #4:List) Unifier 117 A --> #1:List B --> #2:List C --> b #10:List #12:List H --> #3:List G --> #4:List X --> #7:List h(#8:List, i(#9:List)) #11:List Y --> #5:List Z --> #6:List I --> #7:List J --> #8:List K --> #9:List L --> #11:List #5:List a #6:List U --> h(#1:List, #2:List, #2:List) V --> #10:List W --> #12:List h(#3:List, #4:List) Unifier 118 A --> #1:List B --> #2:List C --> b #10:List #11:List H --> #3:List G --> #4:List X --> #7:List h(#8:List, i(#9:List)) Y --> #5:List Z --> #6:List I --> #7:List J --> #8:List K --> #9:List L --> #5:List a #6:List U --> h(#1:List, #2:List, #2:List) V --> #10:List W --> #11:List h(#3:List, #4:List) Unifier 119 A --> #1:List B --> #2:List C --> b #9:List #11:List H --> #3:List G --> #4:List X --> #5:List Y --> h(#7:List, i(#8:List)) #10:List Z --> #6:List I --> #5:List J --> #7:List K --> #8:List L --> #10:List a #6:List U --> h(#1:List, #2:List, #2:List) V --> #9:List W --> #11:List h(#3:List, #4:List) Unifier 120 A --> #1:List B --> #2:List C --> b #9:List #10:List H --> #3:List G --> #4:List X --> #5:List Y --> h(#7:List, i(#8:List)) Z --> #6:List I --> #5:List J --> #7:List K --> #8:List L --> a #6:List U --> h(#1:List, #2:List, #2:List) V --> #9:List W --> #10:List h(#3:List, #4:List) Unifier 121 A --> #1:List B --> #2:List C --> b #10:List H --> #3:List G --> #4:List X --> #5:List Y --> #6:List Z --> #11:List h(#7:List, i(#8:List)) #9:List I --> #5:List #6:List a #11:List J --> #7:List K --> #8:List L --> #9:List U --> h(#1:List, #2:List, #2:List) V --> #10:List W --> h(#3:List, #4:List) Unifier 122 A --> #1:List B --> #2:List C --> b #10:List H --> #3:List G --> #4:List X --> #5:List Y --> #6:List Z --> h(#7:List, i(#8:List)) #9:List I --> #5:List #6:List a J --> #7:List K --> #8:List L --> #9:List U --> h(#1:List, #2:List, #2:List) V --> #10:List W --> h(#3:List, #4:List) Unifier 123 A --> #1:List B --> #2:List C --> b #9:List H --> #3:List G --> #4:List X --> #5:List Y --> #10:List h(#7:List, i(#8:List)) #11:List Z --> #6:List I --> #5:List #10:List J --> #7:List K --> #8:List L --> #11:List a #6:List U --> h(#1:List, #2:List, #2:List) V --> #9:List W --> h(#3:List, #4:List) Unifier 124 A --> #1:List B --> #2:List C --> b #9:List H --> #3:List G --> #4:List X --> #5:List Y --> #10:List h(#7:List, i(#8:List)) Z --> #6:List I --> #5:List #10:List J --> #7:List K --> #8:List L --> a #6:List U --> h(#1:List, #2:List, #2:List) V --> #9:List W --> h(#3:List, #4:List) Unifier 125 A --> #1:List B --> #2:List C --> b #10:List H --> #3:List G --> #4:List X --> #7:List h(#8:List, i(#9:List)) #11:List Y --> #5:List Z --> #6:List I --> #7:List J --> #8:List K --> #9:List L --> #11:List #5:List a #6:List U --> h(#1:List, #2:List, #2:List) V --> #10:List W --> h(#3:List, #4:List) Unifier 126 A --> #1:List B --> #2:List C --> b #10:List H --> #3:List G --> #4:List X --> #7:List h(#8:List, i(#9:List)) Y --> #5:List Z --> #6:List I --> #7:List J --> #8:List K --> #9:List L --> #5:List a #6:List U --> h(#1:List, #2:List, #2:List) V --> #10:List W --> h(#3:List, #4:List) Unifier 127 A --> #1:List B --> #2:List C --> b #9:List H --> #3:List G --> #4:List X --> #5:List Y --> h(#7:List, i(#8:List)) #10:List Z --> #6:List I --> #5:List J --> #7:List K --> #8:List L --> #10:List a #6:List U --> h(#1:List, #2:List, #2:List) V --> #9:List W --> h(#3:List, #4:List) Unifier 128 A --> #1:List B --> #2:List C --> b #9:List H --> #3:List G --> #4:List X --> #5:List Y --> h(#7:List, i(#8:List)) Z --> #6:List I --> #5:List J --> #7:List K --> #8:List L --> a #6:List U --> h(#1:List, #2:List, #2:List) V --> #9:List W --> h(#3:List, #4:List) ========================================== unify in A-UNIF : h(A, A) =? h(f(B, C), f(I, J)) . Unifier 1 A --> f(#2:List, #3:List, #1:List) B --> f(#2:List, #3:List) C --> #1:List I --> #2:List J --> f(#3:List, #1:List) Unifier 2 A --> f(#1:List, #3:List, #2:List) B --> #1:List C --> f(#3:List, #2:List) I --> f(#1:List, #3:List) J --> #2:List Unifier 3 A --> f(#1:List, #2:List) B --> #1:List C --> #2:List I --> #1:List J --> #2:List ========================================== unify in A-UNIF : h(A, A, A) =? h(f(B, C), f(I, J), f(X, Y)) . Unifier 1 A --> f(#2:List, #3:List, #4:List, #1:List) B --> f(#2:List, #3:List, #4:List) C --> #1:List I --> f(#2:List, #3:List) J --> f(#4:List, #1:List) X --> #2:List Y --> f(#3:List, #4:List, #1:List) Unifier 2 A --> f(#2:List, #3:List, #4:List, #1:List) B --> f(#2:List, #3:List) C --> f(#4:List, #1:List) I --> f(#2:List, #3:List, #4:List) J --> #1:List X --> #2:List Y --> f(#3:List, #4:List, #1:List) Unifier 3 A --> f(#2:List, #3:List, #1:List) B --> f(#2:List, #3:List) C --> #1:List I --> f(#2:List, #3:List) J --> #1:List X --> #2:List Y --> f(#3:List, #1:List) Unifier 4 A --> f(#1:List, #3:List, #4:List, #2:List) B --> #1:List C --> f(#3:List, #4:List, #2:List) I --> f(#1:List, #3:List, #4:List) J --> #2:List X --> f(#1:List, #3:List) Y --> f(#4:List, #2:List) Unifier 5 A --> f(#2:List, #3:List, #1:List) B --> #2:List C --> f(#3:List, #1:List) I --> f(#2:List, #3:List) J --> #1:List X --> #2:List Y --> f(#3:List, #1:List) Unifier 6 A --> f(#2:List, #3:List, #4:List, #1:List) B --> f(#2:List, #3:List, #4:List) C --> #1:List I --> #2:List J --> f(#3:List, #4:List, #1:List) X --> f(#2:List, #3:List) Y --> f(#4:List, #1:List) Unifier 7 A --> f(#1:List, #3:List, #4:List, #2:List) B --> f(#1:List, #3:List) C --> f(#4:List, #2:List) I --> #1:List J --> f(#3:List, #4:List, #2:List) X --> f(#1:List, #3:List, #4:List) Y --> #2:List Unifier 8 A --> f(#1:List, #3:List, #2:List) B --> f(#1:List, #3:List) C --> #2:List I --> #1:List J --> f(#3:List, #2:List) X --> f(#1:List, #3:List) Y --> #2:List Unifier 9 A --> f(#1:List, #3:List, #4:List, #2:List) B --> #1:List C --> f(#3:List, #4:List, #2:List) I --> f(#1:List, #3:List) J --> f(#4:List, #2:List) X --> f(#1:List, #3:List, #4:List) Y --> #2:List Unifier 10 A --> f(#1:List, #3:List, #2:List) B --> #1:List C --> f(#3:List, #2:List) I --> #1:List J --> f(#3:List, #2:List) X --> f(#1:List, #3:List) Y --> #2:List Unifier 11 A --> f(#2:List, #3:List, #1:List) B --> f(#2:List, #3:List) C --> #1:List I --> #2:List J --> f(#3:List, #1:List) X --> #2:List Y --> f(#3:List, #1:List) Unifier 12 A --> f(#1:List, #3:List, #2:List) B --> #1:List C --> f(#3:List, #2:List) I --> f(#1:List, #3:List) J --> #2:List X --> f(#1:List, #3:List) Y --> #2:List Unifier 13 A --> f(#1:List, #2:List) B --> #1:List C --> #2:List I --> #1:List J --> #2:List X --> #1:List Y --> #2:List ========================================== unify in A-UNIF : h(f(a, b), f(a, b), f(a, b)) =? h(f(B, C), f(I, J), f(X, Y)) . Unifier 1 B --> a C --> b I --> a J --> b X --> a Y --> b ========================================== unify in A-UNIF : A E B F C E D =? W F X E Y F Z . Unifier 1 A --> #6:List #3:Elt #7:List #1:Elt #8:List #3:Elt #9:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #4:List D --> #5:List W --> #6:List X --> #7:List Y --> #8:List Z --> #9:List #1:Elt #2:List #3:Elt #4:List #1:Elt #5:List Unifier 2 A --> #6:List #3:Elt #7:List #1:Elt #8:List #3:Elt E --> #1:Elt B --> #2:List F --> #3:Elt C --> #4:List D --> #5:List W --> #6:List X --> #7:List Y --> #8:List Z --> #1:Elt #2:List #3:Elt #4:List #1:Elt #5:List Unifier 3 A --> #5:List #2:Elt #6:List #1:Elt #7:List E --> #1:Elt B --> #8:List #2:Elt #9:List F --> #2:Elt C --> #3:List D --> #4:List W --> #5:List X --> #6:List Y --> #7:List #1:Elt #8:List Z --> #9:List #2:Elt #3:List #1:Elt #4:List Unifier 4 A --> #5:List #2:Elt #6:List #1:Elt #7:List E --> #1:Elt B --> #8:List #2:Elt F --> #2:Elt C --> #3:List D --> #4:List W --> #5:List X --> #6:List Y --> #7:List #1:Elt #8:List Z --> #2:Elt #3:List #1:Elt #4:List Unifier 5 A --> #5:List #3:Elt #6:List #1:Elt #7:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #8:List #3:Elt #9:List D --> #4:List W --> #5:List X --> #6:List Y --> #7:List #1:Elt #2:List #3:Elt #8:List Z --> #9:List #1:Elt #4:List Unifier 6 A --> #5:List #3:Elt #6:List #1:Elt #7:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #8:List #3:Elt D --> #4:List W --> #5:List X --> #6:List Y --> #7:List #1:Elt #2:List #3:Elt #8:List Z --> #1:Elt #4:List Unifier 7 A --> #5:List #3:Elt #6:List #1:Elt #8:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #4:List D --> #9:List #3:Elt #7:List W --> #5:List X --> #6:List Y --> #8:List #1:Elt #2:List #3:Elt #4:List #1:Elt #9:List Z --> #7:List Unifier 8 A --> #5:List #3:Elt #6:List #1:Elt #8:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #4:List D --> #3:Elt #7:List W --> #5:List X --> #6:List Y --> #8:List #1:Elt #2:List #3:Elt #4:List #1:Elt Z --> #7:List Unifier 9 A --> #5:List #1:Elt #6:List #1:Elt #7:List E --> #1:Elt B --> #2:List F --> #1:Elt C --> #3:List D --> #4:List W --> #5:List X --> #6:List Y --> #7:List #1:Elt #2:List #1:Elt #3:List Z --> #4:List Unifier 10 A --> #5:List #3:Elt #6:List #1:Elt #7:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #3:Elt #8:List D --> #4:List W --> #5:List X --> #6:List Y --> #7:List #1:Elt #2:List #3:Elt Z --> #8:List #1:Elt #4:List Unifier 11 A --> #5:List #3:Elt #6:List #1:Elt #7:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #3:Elt D --> #4:List W --> #5:List X --> #6:List Y --> #7:List #1:Elt #2:List #3:Elt Z --> #1:Elt #4:List Unifier 12 A --> #6:List #3:Elt #7:List #1:Elt #8:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #4:List D --> #5:List W --> #6:List X --> #7:List Y --> #8:List #1:Elt #2:List Z --> #4:List #1:Elt #5:List Unifier 13 A --> #5:List #2:Elt #6:List #1:Elt #7:List E --> #1:Elt B --> #2:Elt #8:List F --> #2:Elt C --> #3:List D --> #4:List W --> #5:List X --> #6:List Y --> #7:List #1:Elt Z --> #8:List #2:Elt #3:List #1:Elt #4:List Unifier 14 A --> #5:List #2:Elt #6:List #1:Elt #7:List E --> #1:Elt B --> #2:Elt F --> #2:Elt C --> #3:List D --> #4:List W --> #5:List X --> #6:List Y --> #7:List #1:Elt Z --> #2:Elt #3:List #1:Elt #4:List Unifier 15 A --> #5:List #1:Elt #6:List #1:Elt #7:List E --> #1:Elt B --> #2:List F --> #1:Elt C --> #3:List D --> #4:List W --> #5:List X --> #6:List Y --> #7:List Z --> #2:List #1:Elt #3:List #1:Elt #4:List Unifier 16 A --> #5:List #2:Elt #6:List #1:Elt E --> #1:Elt B --> #7:List #2:Elt #8:List F --> #2:Elt C --> #3:List D --> #4:List W --> #5:List X --> #6:List Y --> #1:Elt #7:List Z --> #8:List #2:Elt #3:List #1:Elt #4:List Unifier 17 A --> #5:List #2:Elt #6:List #1:Elt E --> #1:Elt B --> #7:List #2:Elt F --> #2:Elt C --> #3:List D --> #4:List W --> #5:List X --> #6:List Y --> #1:Elt #7:List Z --> #2:Elt #3:List #1:Elt #4:List Unifier 18 A --> #5:List #3:Elt #6:List #1:Elt E --> #1:Elt B --> #2:List F --> #3:Elt C --> #7:List #3:Elt #8:List D --> #4:List W --> #5:List X --> #6:List Y --> #1:Elt #2:List #3:Elt #7:List Z --> #8:List #1:Elt #4:List Unifier 19 A --> #5:List #3:Elt #6:List #1:Elt E --> #1:Elt B --> #2:List F --> #3:Elt C --> #7:List #3:Elt D --> #4:List W --> #5:List X --> #6:List Y --> #1:Elt #2:List #3:Elt #7:List Z --> #1:Elt #4:List Unifier 20 A --> #5:List #3:Elt #6:List #1:Elt E --> #1:Elt B --> #2:List F --> #3:Elt C --> #4:List D --> #8:List #3:Elt #7:List W --> #5:List X --> #6:List Y --> #1:Elt #2:List #3:Elt #4:List #1:Elt #8:List Z --> #7:List Unifier 21 A --> #5:List #3:Elt #6:List #1:Elt E --> #1:Elt B --> #2:List F --> #3:Elt C --> #4:List D --> #3:Elt #7:List W --> #5:List X --> #6:List Y --> #1:Elt #2:List #3:Elt #4:List #1:Elt Z --> #7:List Unifier 22 A --> #5:List #1:Elt #6:List #1:Elt E --> #1:Elt B --> #2:List F --> #1:Elt C --> #3:List D --> #4:List W --> #5:List X --> #6:List Y --> #1:Elt #2:List #1:Elt #3:List Z --> #4:List Unifier 23 A --> #5:List #3:Elt #6:List #1:Elt E --> #1:Elt B --> #2:List F --> #3:Elt C --> #3:Elt #7:List D --> #4:List W --> #5:List X --> #6:List Y --> #1:Elt #2:List #3:Elt Z --> #7:List #1:Elt #4:List Unifier 24 A --> #5:List #3:Elt #6:List #1:Elt E --> #1:Elt B --> #2:List F --> #3:Elt C --> #3:Elt D --> #4:List W --> #5:List X --> #6:List Y --> #1:Elt #2:List #3:Elt Z --> #1:Elt #4:List Unifier 25 A --> #6:List #3:Elt #7:List #1:Elt E --> #1:Elt B --> #2:List F --> #3:Elt C --> #4:List D --> #5:List W --> #6:List X --> #7:List Y --> #1:Elt #2:List Z --> #4:List #1:Elt #5:List Unifier 26 A --> #5:List #2:Elt #6:List #1:Elt E --> #1:Elt B --> #2:Elt #7:List F --> #2:Elt C --> #3:List D --> #4:List W --> #5:List X --> #6:List Y --> #1:Elt Z --> #7:List #2:Elt #3:List #1:Elt #4:List Unifier 27 A --> #5:List #2:Elt #6:List #1:Elt E --> #1:Elt B --> #2:Elt F --> #2:Elt C --> #3:List D --> #4:List W --> #5:List X --> #6:List Y --> #1:Elt Z --> #2:Elt #3:List #1:Elt #4:List Unifier 28 A --> #5:List #2:Elt #7:List E --> #1:Elt B --> #8:List #1:Elt #6:List #2:Elt #9:List F --> #2:Elt C --> #3:List D --> #4:List W --> #5:List X --> #7:List #1:Elt #8:List Y --> #6:List Z --> #9:List #2:Elt #3:List #1:Elt #4:List Unifier 29 A --> #5:List #2:Elt #7:List E --> #1:Elt B --> #8:List #1:Elt #6:List #2:Elt F --> #2:Elt C --> #3:List D --> #4:List W --> #5:List X --> #7:List #1:Elt #8:List Y --> #6:List Z --> #2:Elt #3:List #1:Elt #4:List Unifier 30 A --> #4:List #2:Elt #5:List E --> #1:Elt B --> #6:List #1:Elt #7:List F --> #2:Elt C --> #8:List #2:Elt #9:List D --> #3:List W --> #4:List X --> #5:List #1:Elt #6:List Y --> #7:List #2:Elt #8:List Z --> #9:List #1:Elt #3:List Unifier 31 A --> #4:List #2:Elt #5:List E --> #1:Elt B --> #6:List #1:Elt #7:List F --> #2:Elt C --> #8:List #2:Elt D --> #3:List W --> #4:List X --> #5:List #1:Elt #6:List Y --> #7:List #2:Elt #8:List Z --> #1:Elt #3:List Unifier 32 A --> #4:List #2:Elt #6:List E --> #1:Elt B --> #7:List #1:Elt #8:List F --> #2:Elt C --> #3:List D --> #9:List #2:Elt #5:List W --> #4:List X --> #6:List #1:Elt #7:List Y --> #8:List #2:Elt #3:List #1:Elt #9:List Z --> #5:List Unifier 33 A --> #4:List #2:Elt #6:List E --> #1:Elt B --> #7:List #1:Elt #8:List F --> #2:Elt C --> #3:List D --> #2:Elt #5:List W --> #4:List X --> #6:List #1:Elt #7:List Y --> #8:List #2:Elt #3:List #1:Elt Z --> #5:List Unifier 34 A --> #4:List #1:Elt #5:List E --> #1:Elt B --> #6:List #1:Elt #7:List F --> #1:Elt C --> #2:List D --> #3:List W --> #4:List X --> #5:List #1:Elt #6:List Y --> #7:List #1:Elt #2:List Z --> #3:List Unifier 35 A --> #4:List #2:Elt #5:List E --> #1:Elt B --> #6:List #1:Elt #7:List F --> #2:Elt C --> #2:Elt #8:List D --> #3:List W --> #4:List X --> #5:List #1:Elt #6:List Y --> #7:List #2:Elt Z --> #8:List #1:Elt #3:List Unifier 36 A --> #4:List #2:Elt #5:List E --> #1:Elt B --> #6:List #1:Elt #7:List F --> #2:Elt C --> #2:Elt D --> #3:List W --> #4:List X --> #5:List #1:Elt #6:List Y --> #7:List #2:Elt Z --> #1:Elt #3:List Unifier 37 A --> #5:List #2:Elt #7:List E --> #1:Elt B --> #8:List #1:Elt #6:List F --> #2:Elt C --> #3:List D --> #4:List W --> #5:List X --> #7:List #1:Elt #8:List Y --> #6:List Z --> #3:List #1:Elt #4:List Unifier 38 A --> #4:List #2:Elt #5:List E --> #1:Elt B --> #6:List #1:Elt F --> #2:Elt C --> #7:List #2:Elt #8:List D --> #3:List W --> #4:List X --> #5:List #1:Elt #6:List Y --> #2:Elt #7:List Z --> #8:List #1:Elt #3:List Unifier 39 A --> #4:List #2:Elt #5:List E --> #1:Elt B --> #6:List #1:Elt F --> #2:Elt C --> #7:List #2:Elt D --> #3:List W --> #4:List X --> #5:List #1:Elt #6:List Y --> #2:Elt #7:List Z --> #1:Elt #3:List Unifier 40 A --> #4:List #2:Elt #6:List E --> #1:Elt B --> #7:List #1:Elt F --> #2:Elt C --> #3:List D --> #8:List #2:Elt #5:List W --> #4:List X --> #6:List #1:Elt #7:List Y --> #2:Elt #3:List #1:Elt #8:List Z --> #5:List Unifier 41 A --> #4:List #2:Elt #6:List E --> #1:Elt B --> #7:List #1:Elt F --> #2:Elt C --> #3:List D --> #2:Elt #5:List W --> #4:List X --> #6:List #1:Elt #7:List Y --> #2:Elt #3:List #1:Elt Z --> #5:List Unifier 42 A --> #4:List #1:Elt #5:List E --> #1:Elt B --> #6:List #1:Elt F --> #1:Elt C --> #2:List D --> #3:List W --> #4:List X --> #5:List #1:Elt #6:List Y --> #1:Elt #2:List Z --> #3:List Unifier 43 A --> #4:List #2:Elt #5:List E --> #1:Elt B --> #6:List #1:Elt F --> #2:Elt C --> #2:Elt #7:List D --> #3:List W --> #4:List X --> #5:List #1:Elt #6:List Y --> #2:Elt Z --> #7:List #1:Elt #3:List Unifier 44 A --> #4:List #2:Elt #5:List E --> #1:Elt B --> #6:List #1:Elt F --> #2:Elt C --> #2:Elt D --> #3:List W --> #4:List X --> #5:List #1:Elt #6:List Y --> #2:Elt Z --> #1:Elt #3:List Unifier 45 A --> #5:List #3:Elt #7:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #8:List #1:Elt #6:List #3:Elt #9:List D --> #4:List W --> #5:List X --> #7:List #1:Elt #2:List #3:Elt #8:List Y --> #6:List Z --> #9:List #1:Elt #4:List Unifier 46 A --> #5:List #3:Elt #7:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #8:List #1:Elt #6:List #3:Elt D --> #4:List W --> #5:List X --> #7:List #1:Elt #2:List #3:Elt #8:List Y --> #6:List Z --> #1:Elt #4:List Unifier 47 A --> #4:List #3:Elt #6:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #7:List #1:Elt #8:List D --> #9:List #3:Elt #5:List W --> #4:List X --> #6:List #1:Elt #2:List #3:Elt #7:List Y --> #8:List #1:Elt #9:List Z --> #5:List Unifier 48 A --> #4:List #3:Elt #6:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #7:List #1:Elt #8:List D --> #3:Elt #5:List W --> #4:List X --> #6:List #1:Elt #2:List #3:Elt #7:List Y --> #8:List #1:Elt Z --> #5:List Unifier 49 A --> #4:List #1:Elt #6:List E --> #1:Elt B --> #2:List F --> #1:Elt C --> #7:List #1:Elt #5:List D --> #3:List W --> #4:List X --> #6:List #1:Elt #2:List #1:Elt #7:List Y --> #5:List Z --> #3:List Unifier 50 A --> #4:List #3:Elt #6:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #7:List #1:Elt D --> #8:List #3:Elt #5:List W --> #4:List X --> #6:List #1:Elt #2:List #3:Elt #7:List Y --> #1:Elt #8:List Z --> #5:List Unifier 51 A --> #4:List #3:Elt #6:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #7:List #1:Elt D --> #3:Elt #5:List W --> #4:List X --> #6:List #1:Elt #2:List #3:Elt #7:List Y --> #1:Elt Z --> #5:List Unifier 52 A --> #5:List #3:Elt #8:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #4:List D --> #9:List #1:Elt #6:List #3:Elt #7:List W --> #5:List X --> #8:List #1:Elt #2:List #3:Elt #4:List #1:Elt #9:List Y --> #6:List Z --> #7:List Unifier 53 A --> #5:List #3:Elt #8:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #4:List D --> #1:Elt #6:List #3:Elt #7:List W --> #5:List X --> #8:List #1:Elt #2:List #3:Elt #4:List #1:Elt Y --> #6:List Z --> #7:List Unifier 54 A --> #5:List #3:Elt #8:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #4:List D --> #6:List #3:Elt #7:List W --> #5:List X --> #8:List #1:Elt #2:List #3:Elt #4:List Y --> #6:List Z --> #7:List Unifier 55 A --> #5:List #3:Elt #7:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #1:Elt #6:List #3:Elt #8:List D --> #4:List W --> #5:List X --> #7:List #1:Elt #2:List #3:Elt Y --> #6:List Z --> #8:List #1:Elt #4:List Unifier 56 A --> #5:List #3:Elt #7:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #1:Elt #6:List #3:Elt D --> #4:List W --> #5:List X --> #7:List #1:Elt #2:List #3:Elt Y --> #6:List Z --> #1:Elt #4:List Unifier 57 A --> #4:List #3:Elt #6:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #1:Elt #7:List D --> #8:List #3:Elt #5:List W --> #4:List X --> #6:List #1:Elt #2:List #3:Elt Y --> #7:List #1:Elt #8:List Z --> #5:List Unifier 58 A --> #4:List #3:Elt #6:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #1:Elt #7:List D --> #3:Elt #5:List W --> #4:List X --> #6:List #1:Elt #2:List #3:Elt Y --> #7:List #1:Elt Z --> #5:List Unifier 59 A --> #4:List #1:Elt #6:List E --> #1:Elt B --> #2:List F --> #1:Elt C --> #1:Elt #5:List D --> #3:List W --> #4:List X --> #6:List #1:Elt #2:List #1:Elt Y --> #5:List Z --> #3:List Unifier 60 A --> #4:List #3:Elt #6:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #1:Elt D --> #7:List #3:Elt #5:List W --> #4:List X --> #6:List #1:Elt #2:List #3:Elt Y --> #1:Elt #7:List Z --> #5:List Unifier 61 A --> #4:List #3:Elt #6:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #1:Elt D --> #3:Elt #5:List W --> #4:List X --> #6:List #1:Elt #2:List #3:Elt Y --> #1:Elt Z --> #5:List Unifier 62 A --> #4:List #1:Elt #6:List E --> #1:Elt B --> #2:List F --> #1:Elt C --> #5:List #1:Elt #7:List D --> #3:List W --> #4:List X --> #6:List #1:Elt #2:List Y --> #5:List Z --> #7:List #1:Elt #3:List Unifier 63 A --> #4:List #1:Elt #6:List E --> #1:Elt B --> #2:List F --> #1:Elt C --> #5:List #1:Elt D --> #3:List W --> #4:List X --> #6:List #1:Elt #2:List Y --> #5:List Z --> #1:Elt #3:List Unifier 64 A --> #4:List #1:Elt #6:List E --> #1:Elt B --> #2:List F --> #1:Elt C --> #3:List D --> #7:List #1:Elt #5:List W --> #4:List X --> #6:List #1:Elt #2:List Y --> #3:List #1:Elt #7:List Z --> #5:List Unifier 65 A --> #4:List #1:Elt #6:List E --> #1:Elt B --> #2:List F --> #1:Elt C --> #3:List D --> #1:Elt #5:List W --> #4:List X --> #6:List #1:Elt #2:List Y --> #3:List #1:Elt Z --> #5:List Unifier 66 A --> #5:List #1:Elt #6:List E --> #1:Elt B --> #2:List F --> #1:Elt C --> #3:List D --> #4:List W --> #5:List X --> #6:List #1:Elt #2:List Y --> #3:List Z --> #4:List Unifier 67 A --> #5:List #2:Elt #7:List E --> #1:Elt B --> #1:Elt #6:List #2:Elt #8:List F --> #2:Elt C --> #3:List D --> #4:List W --> #5:List X --> #7:List #1:Elt Y --> #6:List Z --> #8:List #2:Elt #3:List #1:Elt #4:List Unifier 68 A --> #5:List #2:Elt #7:List E --> #1:Elt B --> #1:Elt #6:List #2:Elt F --> #2:Elt C --> #3:List D --> #4:List W --> #5:List X --> #7:List #1:Elt Y --> #6:List Z --> #2:Elt #3:List #1:Elt #4:List Unifier 69 A --> #4:List #2:Elt #5:List E --> #1:Elt B --> #1:Elt #6:List F --> #2:Elt C --> #7:List #2:Elt #8:List D --> #3:List W --> #4:List X --> #5:List #1:Elt Y --> #6:List #2:Elt #7:List Z --> #8:List #1:Elt #3:List Unifier 70 A --> #4:List #2:Elt #5:List E --> #1:Elt B --> #1:Elt #6:List F --> #2:Elt C --> #7:List #2:Elt D --> #3:List W --> #4:List X --> #5:List #1:Elt Y --> #6:List #2:Elt #7:List Z --> #1:Elt #3:List Unifier 71 A --> #4:List #2:Elt #6:List E --> #1:Elt B --> #1:Elt #7:List F --> #2:Elt C --> #3:List D --> #8:List #2:Elt #5:List W --> #4:List X --> #6:List #1:Elt Y --> #7:List #2:Elt #3:List #1:Elt #8:List Z --> #5:List Unifier 72 A --> #4:List #2:Elt #6:List E --> #1:Elt B --> #1:Elt #7:List F --> #2:Elt C --> #3:List D --> #2:Elt #5:List W --> #4:List X --> #6:List #1:Elt Y --> #7:List #2:Elt #3:List #1:Elt Z --> #5:List Unifier 73 A --> #4:List #1:Elt #5:List E --> #1:Elt B --> #1:Elt #6:List F --> #1:Elt C --> #2:List D --> #3:List W --> #4:List X --> #5:List #1:Elt Y --> #6:List #1:Elt #2:List Z --> #3:List Unifier 74 A --> #4:List #2:Elt #5:List E --> #1:Elt B --> #1:Elt #6:List F --> #2:Elt C --> #2:Elt #7:List D --> #3:List W --> #4:List X --> #5:List #1:Elt Y --> #6:List #2:Elt Z --> #7:List #1:Elt #3:List Unifier 75 A --> #4:List #2:Elt #5:List E --> #1:Elt B --> #1:Elt #6:List F --> #2:Elt C --> #2:Elt D --> #3:List W --> #4:List X --> #5:List #1:Elt Y --> #6:List #2:Elt Z --> #1:Elt #3:List Unifier 76 A --> #5:List #2:Elt #7:List E --> #1:Elt B --> #1:Elt #6:List F --> #2:Elt C --> #3:List D --> #4:List W --> #5:List X --> #7:List #1:Elt Y --> #6:List Z --> #3:List #1:Elt #4:List Unifier 77 A --> #4:List #2:Elt #5:List E --> #1:Elt B --> #1:Elt F --> #2:Elt C --> #6:List #2:Elt #7:List D --> #3:List W --> #4:List X --> #5:List #1:Elt Y --> #2:Elt #6:List Z --> #7:List #1:Elt #3:List Unifier 78 A --> #4:List #2:Elt #5:List E --> #1:Elt B --> #1:Elt F --> #2:Elt C --> #6:List #2:Elt D --> #3:List W --> #4:List X --> #5:List #1:Elt Y --> #2:Elt #6:List Z --> #1:Elt #3:List Unifier 79 A --> #4:List #2:Elt #6:List E --> #1:Elt B --> #1:Elt F --> #2:Elt C --> #3:List D --> #7:List #2:Elt #5:List W --> #4:List X --> #6:List #1:Elt Y --> #2:Elt #3:List #1:Elt #7:List Z --> #5:List Unifier 80 A --> #4:List #2:Elt #6:List E --> #1:Elt B --> #1:Elt F --> #2:Elt C --> #3:List D --> #2:Elt #5:List W --> #4:List X --> #6:List #1:Elt Y --> #2:Elt #3:List #1:Elt Z --> #5:List Unifier 81 A --> #4:List #1:Elt #5:List E --> #1:Elt B --> #1:Elt F --> #1:Elt C --> #2:List D --> #3:List W --> #4:List X --> #5:List #1:Elt Y --> #1:Elt #2:List Z --> #3:List Unifier 82 A --> #4:List #2:Elt #5:List E --> #1:Elt B --> #1:Elt F --> #2:Elt C --> #2:Elt #6:List D --> #3:List W --> #4:List X --> #5:List #1:Elt Y --> #2:Elt Z --> #6:List #1:Elt #3:List Unifier 83 A --> #4:List #2:Elt #5:List E --> #1:Elt B --> #1:Elt F --> #2:Elt C --> #2:Elt D --> #3:List W --> #4:List X --> #5:List #1:Elt Y --> #2:Elt Z --> #1:Elt #3:List Unifier 84 A --> #5:List #2:Elt #6:List E --> #1:Elt B --> #7:List #2:Elt #8:List F --> #2:Elt C --> #3:List D --> #4:List W --> #5:List X --> #6:List Y --> #7:List Z --> #8:List #2:Elt #3:List #1:Elt #4:List Unifier 85 A --> #5:List #2:Elt #6:List E --> #1:Elt B --> #7:List #2:Elt F --> #2:Elt C --> #3:List D --> #4:List W --> #5:List X --> #6:List Y --> #7:List Z --> #2:Elt #3:List #1:Elt #4:List Unifier 86 A --> #5:List #3:Elt #6:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #7:List #3:Elt #8:List D --> #4:List W --> #5:List X --> #6:List Y --> #2:List #3:Elt #7:List Z --> #8:List #1:Elt #4:List Unifier 87 A --> #5:List #3:Elt #6:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #7:List #3:Elt D --> #4:List W --> #5:List X --> #6:List Y --> #2:List #3:Elt #7:List Z --> #1:Elt #4:List Unifier 88 A --> #5:List #3:Elt #6:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #4:List D --> #8:List #3:Elt #7:List W --> #5:List X --> #6:List Y --> #2:List #3:Elt #4:List #1:Elt #8:List Z --> #7:List Unifier 89 A --> #5:List #3:Elt #6:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #4:List D --> #3:Elt #7:List W --> #5:List X --> #6:List Y --> #2:List #3:Elt #4:List #1:Elt Z --> #7:List Unifier 90 A --> #5:List #1:Elt #6:List E --> #1:Elt B --> #2:List F --> #1:Elt C --> #3:List D --> #4:List W --> #5:List X --> #6:List Y --> #2:List #1:Elt #3:List Z --> #4:List Unifier 91 A --> #5:List #3:Elt #6:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #3:Elt #7:List D --> #4:List W --> #5:List X --> #6:List Y --> #2:List #3:Elt Z --> #7:List #1:Elt #4:List Unifier 92 A --> #5:List #3:Elt #6:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #3:Elt D --> #4:List W --> #5:List X --> #6:List Y --> #2:List #3:Elt Z --> #1:Elt #4:List Unifier 93 A --> #6:List #3:Elt #7:List E --> #1:Elt B --> #2:List F --> #3:Elt C --> #4:List D --> #5:List W --> #6:List X --> #7:List Y --> #2:List Z --> #4:List #1:Elt #5:List Unifier 94 A --> #5:List #2:Elt E --> #1:Elt B --> #7:List #1:Elt #6:List #2:Elt #8:List F --> #2:Elt C --> #3:List D --> #4:List W --> #5:List X --> #1:Elt #7:List Y --> #6:List Z --> #8:List #2:Elt #3:List #1:Elt #4:List Unifier 95 A --> #5:List #2:Elt E --> #1:Elt B --> #7:List #1:Elt #6:List #2:Elt F --> #2:Elt C --> #3:List D --> #4:List W --> #5:List X --> #1:Elt #7:List Y --> #6:List Z --> #2:Elt #3:List #1:Elt #4:List Unifier 96 A --> #4:List #2:Elt E --> #1:Elt B --> #5:List #1:Elt #6:List F --> #2:Elt C --> #7:List #2:Elt #8:List D --> #3:List W --> #4:List X --> #1:Elt #5:List Y --> #6:List #2:Elt #7:List Z --> #8:List #1:Elt #3:List Unifier 97 A --> #4:List #2:Elt E --> #1:Elt B --> #5:List #1:Elt #6:List F --> #2:Elt C --> #7:List #2:Elt D --> #3:List W --> #4:List X --> #1:Elt #5:List Y --> #6:List #2:Elt #7:List Z --> #1:Elt #3:List Unifier 98 A --> #4:List #2:Elt E --> #1:Elt B --> #6:List #1:Elt #7:List F --> #2:Elt C --> #3:List D --> #8:List #2:Elt #5:List W --> #4:List X --> #1:Elt #6:List Y --> #7:List #2:Elt #3:List #1:Elt #8:List Z --> #5:List Unifier 99 A --> #4:List #2:Elt E --> #1:Elt B --> #6:List #1:Elt #7:List F --> #2:Elt C --> #3:List D --> #2:Elt #5:List W --> #4:List X --> #1:Elt #6:List Y --> #7:List #2:Elt #3:List #1:Elt Z --> #5:List Unifier 100 A --> #4:List #1:Elt E --> #1:Elt B --> #5:List #1:Elt #6:List F --> #1:Elt C --> #2:List D --> #3:List W --> #4:List X --> #1:Elt #5:List Y --> #6:List #1:Elt #2:List Z --> #3:List Unifier 101 A --> #4:List #2:Elt E --> #1:Elt B --> #5:List #1:Elt #6:List F --> #2:Elt C --> #2:Elt #7:List D --> #3:List W --> #4:List X --> #1:Elt #5:List Y --> #6:List #2:Elt Z --> #7:List #1:Elt #3:List Unifier 102 A --> #4:List #2:Elt E --> #1:Elt B --> #5:List #1:Elt #6:List F --> #2:Elt C --> #2:Elt D --> #3:List W --> #4:List X --> #1:Elt #5:List Y --> #6:List #2:Elt Z --> #1:Elt #3:List Unifier 103 A --> #5:List #2:Elt E --> #1:Elt B --> #7:List #1:Elt #6:List F --> #2:Elt C --> #3:List D --> #4:List W --> #5:List X --> #1:Elt #7:List Y --> #6:List Z --> #3:List #1:Elt #4:List Unifier 104 A --> #4:List #2:Elt E --> #1:Elt B --> #5:List #1:Elt F --> #2:Elt C --> #6:List #2:Elt #7:List D --> #3:List W --> #4:List X --> #1:Elt #5:List Y --> #2:Elt #6:List Z --> #7:List #1:Elt #3:List Unifier 105 A --> #4:List #2:Elt E --> #1:Elt B --> #5:List #1:Elt F --> #2:Elt C --> #6:List #2:Elt D --> #3:List W --> #4:List X --> #1:Elt #5:List Y --> #2:Elt #6:List Z --> #1:Elt #3:List Unifier 106 A --> #4:List #2:Elt E --> #1:Elt B --> #6:List #1:Elt F --> #2:Elt C --> #3:List D --> #7:List #2:Elt #5:List W --> #4:List X --> #1:Elt #6:List Y --> #2:Elt #3:List #1:Elt #7:List Z --> #5:List Unifier 107 A --> #4:List #2:Elt E --> #1:Elt B --> #6:List #1:Elt F --> #2:Elt C --> #3:List D --> #2:Elt #5:List W --> #4:List X --> #1:Elt #6:List Y --> #2:Elt #3:List #1:Elt Z --> #5:List Unifier 108 A --> #4:List #1:Elt E --> #1:Elt B --> #5:List #1:Elt F --> #1:Elt C --> #2:List D --> #3:List W --> #4:List X --> #1:Elt #5:List Y --> #1:Elt #2:List Z --> #3:List Unifier 109 A --> #4:List #2:Elt E --> #1:Elt B --> #5:List #1:Elt F --> #2:Elt C --> #2:Elt #6:List D --> #3:List W --> #4:List X --> #1:Elt #5:List Y --> #2:Elt Z --> #6:List #1:Elt #3:List Unifier 110 A --> #4:List #2:Elt E --> #1:Elt B --> #5:List #1:Elt F --> #2:Elt C --> #2:Elt D --> #3:List W --> #4:List X --> #1:Elt #5:List Y --> #2:Elt Z --> #1:Elt #3:List Unifier 111 A --> #5:List #3:Elt E --> #1:Elt B --> #2:List F --> #3:Elt C --> #7:List #1:Elt #6:List #3:Elt #8:List D --> #4:List W --> #5:List X --> #1:Elt #2:List #3:Elt #7:List Y --> #6:List Z --> #8:List #1:Elt #4:List Unifier 112 A --> #5:List #3:Elt E --> #1:Elt B --> #2:List F --> #3:Elt C --> #7:List #1:Elt #6:List #3:Elt D --> #4:List W --> #5:List X --> #1:Elt #2:List #3:Elt #7:List Y --> #6:List Z --> #1:Elt #4:List Unifier 113 A --> #4:List #3:Elt E --> #1:Elt B --> #2:List F --> #3:Elt C --> #6:List #1:Elt #7:List D --> #8:List #3:Elt #5:List W --> #4:List X --> #1:Elt #2:List #3:Elt #6:List Y --> #7:List #1:Elt #8:List Z --> #5:List Unifier 114 A --> #4:List #3:Elt E --> #1:Elt B --> #2:List F --> #3:Elt C --> #6:List #1:Elt #7:List D --> #3:Elt #5:List W --> #4:List X --> #1:Elt #2:List #3:Elt #6:List Y --> #7:List #1:Elt Z --> #5:List Unifier 115 A --> #4:List #1:Elt E --> #1:Elt B --> #2:List F --> #1:Elt C --> #6:List #1:Elt #5:List D --> #3:List W --> #4:List X --> #1:Elt #2:List #1:Elt #6:List Y --> #5:List Z --> #3:List Unifier 116 A --> #4:List #3:Elt E --> #1:Elt B --> #2:List F --> #3:Elt C --> #6:List #1:Elt D --> #7:List #3:Elt #5:List W --> #4:List X --> #1:Elt #2:List #3:Elt #6:List Y --> #1:Elt #7:List Z --> #5:List Unifier 117 A --> #4:List #3:Elt E --> #1:Elt B --> #2:List F --> #3:Elt C --> #6:List #1:Elt D --> #3:Elt #5:List W --> #4:List X --> #1:Elt #2:List #3:Elt #6:List Y --> #1:Elt Z --> #5:List Unifier 118 A --> #5:List #3:Elt E --> #1:Elt B --> #2:List F --> #3:Elt C --> #4:List D --> #8:List #1:Elt #6:List #3:Elt #7:List W --> #5:List X --> #1:Elt #2:List #3:Elt #4:List #1:Elt #8:List Y --> #6:List Z --> #7:List Unifier 119 A --> #5:List #3:Elt E --> #1:Elt B --> #2:List F --> #3:Elt C --> #4:List D --> #1:Elt #6:List #3:Elt #7:List W --> #5:List X --> #1:Elt #2:List #3:Elt #4:List #1:Elt Y --> #6:List Z --> #7:List Unifier 120 A --> #5:List #3:Elt E --> #1:Elt B --> #2:List F --> #3:Elt C --> #4:List D --> #6:List #3:Elt #7:List W --> #5:List X --> #1:Elt #2:List #3:Elt #4:List Y --> #6:List Z --> #7:List Unifier 121 A --> #5:List #3:Elt E --> #1:Elt B --> #2:List F --> #3:Elt C --> #1:Elt #6:List #3:Elt #7:List D --> #4:List W --> #5:List X --> #1:Elt #2:List #3:Elt Y --> #6:List Z --> #7:List #1:Elt #4:List Unifier 122 A --> #5:List #3:Elt E --> #1:Elt B --> #2:List F --> #3:Elt C --> #1:Elt #6:List #3:Elt D --> #4:List W --> #5:List X --> #1:Elt #2:List #3:Elt Y --> #6:List Z --> #1:Elt #4:List Unifier 123 A --> #4:List #3:Elt E --> #1:Elt B --> #2:List F --> #3:Elt C --> #1:Elt #6:List D --> #7:List #3:Elt #5:List W --> #4:List X --> #1:Elt #2:List #3:Elt Y --> #6:List #1:Elt #7:List Z --> #5:List Unifier 124 A --> #4:List #3:Elt E --> #1:Elt B --> #2:List F --> #3:Elt C --> #1:Elt #6:List D --> #3:Elt #5:List W --> #4:List X --> #1:Elt #2:List #3:Elt Y --> #6:List #1:Elt Z --> #5:List Unifier 125 A --> #4:List #1:Elt E --> #1:Elt B --> #2:List F --> #1:Elt C --> #1:Elt #5:List D --> #3:List W --> #4:List X --> #1:Elt #2:List #1:Elt Y --> #5:List Z --> #3:List Unifier 126 A --> #4:List #3:Elt E --> #1:Elt B --> #2:List F --> #3:Elt C --> #1:Elt D --> #6:List #3:Elt #5:List W --> #4:List X --> #1:Elt #2:List #3:Elt Y --> #1:Elt #6:List Z --> #5:List Unifier 127 A --> #4:List #3:Elt E --> #1:Elt B --> #2:List F --> #3:Elt C --> #1:Elt D --> #3:Elt #5:List W --> #4:List X --> #1:Elt #2:List #3:Elt Y --> #1:Elt Z --> #5:List Unifier 128 A --> #4:List #1:Elt E --> #1:Elt B --> #2:List F --> #1:Elt C --> #5:List #1:Elt #6:List D --> #3:List W --> #4:List X --> #1:Elt #2:List Y --> #5:List Z --> #6:List #1:Elt #3:List Unifier 129 A --> #4:List #1:Elt E --> #1:Elt B --> #2:List F --> #1:Elt C --> #5:List #1:Elt D --> #3:List W --> #4:List X --> #1:Elt #2:List Y --> #5:List Z --> #1:Elt #3:List Unifier 130 A --> #4:List #1:Elt E --> #1:Elt B --> #2:List F --> #1:Elt C --> #3:List D --> #6:List #1:Elt #5:List W --> #4:List X --> #1:Elt #2:List Y --> #3:List #1:Elt #6:List Z --> #5:List Unifier 131 A --> #4:List #1:Elt E --> #1:Elt B --> #2:List F --> #1:Elt C --> #3:List D --> #1:Elt #5:List W --> #4:List X --> #1:Elt #2:List Y --> #3:List #1:Elt Z --> #5:List Unifier 132 A --> #5:List #1:Elt E --> #1:Elt B --> #2:List F --> #1:Elt C --> #3:List D --> #4:List W --> #5:List X --> #1:Elt #2:List Y --> #3:List Z --> #4:List Unifier 133 A --> #5:List #2:Elt E --> #1:Elt B --> #1:Elt #6:List #2:Elt #7:List F --> #2:Elt C --> #3:List D --> #4:List W --> #5:List X --> #1:Elt Y --> #6:List Z --> #7:List #2:Elt #3:List #1:Elt #4:List Unifier 134 A --> #5:List #2:Elt E --> #1:Elt B --> #1:Elt #6:List #2:Elt F --> #2:Elt C --> #3:List D --> #4:List W --> #5:List X --> #1:Elt Y --> #6:List Z --> #2:Elt #3:List #1:Elt #4:List Unifier 135 A --> #4:List #2:Elt E --> #1:Elt B --> #1:Elt #5:List F --> #2:Elt C --> #6:List #2:Elt #7:List D --> #3:List W --> #4:List X --> #1:Elt Y --> #5:List #2:Elt #6:List Z --> #7:List #1:Elt #3:List Unifier 136 A --> #4:List #2:Elt E --> #1:Elt B --> #1:Elt #5:List F --> #2:Elt C --> #6:List #2:Elt D --> #3:List W --> #4:List X --> #1:Elt Y --> #5:List #2:Elt #6:List Z --> #1:Elt #3:List Unifier 137 A --> #4:List #2:Elt E --> #1:Elt B --> #1:Elt #6:List F --> #2:Elt C --> #3:List D --> #7:List #2:Elt #5:List W --> #4:List X --> #1:Elt Y --> #6:List #2:Elt #3:List #1:Elt #7:List Z --> #5:List Unifier 138 A --> #4:List #2:Elt E --> #1:Elt B --> #1:Elt #6:List F --> #2:Elt C --> #3:List D --> #2:Elt #5:List W --> #4:List X --> #1:Elt Y --> #6:List #2:Elt #3:List #1:Elt Z --> #5:List Unifier 139 A --> #4:List #1:Elt E --> #1:Elt B --> #1:Elt #5:List F --> #1:Elt C --> #2:List D --> #3:List W --> #4:List X --> #1:Elt Y --> #5:List #1:Elt #2:List Z --> #3:List Unifier 140 A --> #4:List #2:Elt E --> #1:Elt B --> #1:Elt #5:List F --> #2:Elt C --> #2:Elt #6:List D --> #3:List W --> #4:List X --> #1:Elt Y --> #5:List #2:Elt Z --> #6:List #1:Elt #3:List Unifier 141 A --> #4:List #2:Elt E --> #1:Elt B --> #1:Elt #5:List F --> #2:Elt C --> #2:Elt D --> #3:List W --> #4:List X --> #1:Elt Y --> #5:List #2:Elt Z --> #1:Elt #3:List Unifier 142 A --> #5:List #2:Elt E --> #1:Elt B --> #1:Elt #6:List F --> #2:Elt C --> #3:List D --> #4:List W --> #5:List X --> #1:Elt Y --> #6:List Z --> #3:List #1:Elt #4:List Unifier 143 A --> #4:List #2:Elt E --> #1:Elt B --> #1:Elt F --> #2:Elt C --> #5:List #2:Elt #6:List D --> #3:List W --> #4:List X --> #1:Elt Y --> #2:Elt #5:List Z --> #6:List #1:Elt #3:List Unifier 144 A --> #4:List #2:Elt E --> #1:Elt B --> #1:Elt F --> #2:Elt C --> #5:List #2:Elt D --> #3:List W --> #4:List X --> #1:Elt Y --> #2:Elt #5:List Z --> #1:Elt #3:List Unifier 145 A --> #4:List #2:Elt E --> #1:Elt B --> #1:Elt F --> #2:Elt C --> #3:List D --> #6:List #2:Elt #5:List W --> #4:List X --> #1:Elt Y --> #2:Elt #3:List #1:Elt #6:List Z --> #5:List Unifier 146 A --> #4:List #2:Elt E --> #1:Elt B --> #1:Elt F --> #2:Elt C --> #3:List D --> #2:Elt #5:List W --> #4:List X --> #1:Elt Y --> #2:Elt #3:List #1:Elt Z --> #5:List Unifier 147 A --> #4:List #1:Elt E --> #1:Elt B --> #1:Elt F --> #1:Elt C --> #2:List D --> #3:List W --> #4:List X --> #1:Elt Y --> #1:Elt #2:List Z --> #3:List Unifier 148 A --> #4:List #2:Elt E --> #1:Elt B --> #1:Elt F --> #2:Elt C --> #2:Elt #5:List D --> #3:List W --> #4:List X --> #1:Elt Y --> #2:Elt Z --> #5:List #1:Elt #3:List Unifier 149 A --> #4:List #2:Elt E --> #1:Elt B --> #1:Elt F --> #2:Elt C --> #2:Elt D --> #3:List W --> #4:List X --> #1:Elt Y --> #2:Elt Z --> #1:Elt #3:List Unifier 150 A --> #1:List E --> #2:Elt B --> #8:List #3:Elt #6:List #2:Elt #7:List #3:Elt #9:List F --> #3:Elt C --> #4:List D --> #5:List W --> #1:List #2:Elt #8:List X --> #6:List Y --> #7:List Z --> #9:List #3:Elt #4:List #2:Elt #5:List Unifier 151 A --> #1:List E --> #2:Elt B --> #8:List #3:Elt #6:List #2:Elt #7:List #3:Elt F --> #3:Elt C --> #4:List D --> #5:List W --> #1:List #2:Elt #8:List X --> #6:List Y --> #7:List Z --> #3:Elt #4:List #2:Elt #5:List Unifier 152 A --> #1:List E --> #2:Elt B --> #6:List #3:Elt #5:List #2:Elt #7:List F --> #3:Elt C --> #8:List #3:Elt #9:List D --> #4:List W --> #1:List #2:Elt #6:List X --> #5:List Y --> #7:List #3:Elt #8:List Z --> #9:List #2:Elt #4:List Unifier 153 A --> #1:List E --> #2:Elt B --> #6:List #3:Elt #5:List #2:Elt #7:List F --> #3:Elt C --> #8:List #3:Elt D --> #4:List W --> #1:List #2:Elt #6:List X --> #5:List Y --> #7:List #3:Elt #8:List Z --> #2:Elt #4:List Unifier 154 A --> #1:List E --> #2:Elt B --> #7:List #3:Elt #5:List #2:Elt #8:List F --> #3:Elt C --> #4:List D --> #9:List #3:Elt #6:List W --> #1:List #2:Elt #7:List X --> #5:List Y --> #8:List #3:Elt #4:List #2:Elt #9:List Z --> #6:List Unifier 155 A --> #1:List E --> #2:Elt B --> #7:List #3:Elt #5:List #2:Elt #8:List F --> #3:Elt C --> #4:List D --> #3:Elt #6:List W --> #1:List #2:Elt #7:List X --> #5:List Y --> #8:List #3:Elt #4:List #2:Elt Z --> #6:List Unifier 156 A --> #1:List E --> #2:Elt B --> #6:List #2:Elt #5:List #2:Elt #7:List F --> #2:Elt C --> #3:List D --> #4:List W --> #1:List #2:Elt #6:List X --> #5:List Y --> #7:List #2:Elt #3:List Z --> #4:List Unifier 157 A --> #1:List E --> #2:Elt B --> #6:List #3:Elt #5:List #2:Elt #7:List F --> #3:Elt C --> #3:Elt #8:List D --> #4:List W --> #1:List #2:Elt #6:List X --> #5:List Y --> #7:List #3:Elt Z --> #8:List #2:Elt #4:List Unifier 158 A --> #1:List E --> #2:Elt B --> #6:List #3:Elt #5:List #2:Elt #7:List F --> #3:Elt C --> #3:Elt D --> #4:List W --> #1:List #2:Elt #6:List X --> #5:List Y --> #7:List #3:Elt Z --> #2:Elt #4:List Unifier 159 A --> #1:List E --> #2:Elt B --> #8:List #3:Elt #6:List #2:Elt #7:List F --> #3:Elt C --> #4:List D --> #5:List W --> #1:List #2:Elt #8:List X --> #6:List Y --> #7:List Z --> #4:List #2:Elt #5:List Unifier 160 A --> #1:List E --> #2:Elt B --> #6:List #3:Elt #5:List #2:Elt F --> #3:Elt C --> #7:List #3:Elt #8:List D --> #4:List W --> #1:List #2:Elt #6:List X --> #5:List Y --> #3:Elt #7:List Z --> #8:List #2:Elt #4:List Unifier 161 A --> #1:List E --> #2:Elt B --> #6:List #3:Elt #5:List #2:Elt F --> #3:Elt C --> #7:List #3:Elt D --> #4:List W --> #1:List #2:Elt #6:List X --> #5:List Y --> #3:Elt #7:List Z --> #2:Elt #4:List Unifier 162 A --> #1:List E --> #2:Elt B --> #7:List #3:Elt #5:List #2:Elt F --> #3:Elt C --> #4:List D --> #8:List #3:Elt #6:List W --> #1:List #2:Elt #7:List X --> #5:List Y --> #3:Elt #4:List #2:Elt #8:List Z --> #6:List Unifier 163 A --> #1:List E --> #2:Elt B --> #7:List #3:Elt #5:List #2:Elt F --> #3:Elt C --> #4:List D --> #3:Elt #6:List W --> #1:List #2:Elt #7:List X --> #5:List Y --> #3:Elt #4:List #2:Elt Z --> #6:List Unifier 164 A --> #1:List E --> #2:Elt B --> #6:List #2:Elt #5:List #2:Elt F --> #2:Elt C --> #3:List D --> #4:List W --> #1:List #2:Elt #6:List X --> #5:List Y --> #2:Elt #3:List Z --> #4:List Unifier 165 A --> #1:List E --> #2:Elt B --> #6:List #3:Elt #5:List #2:Elt F --> #3:Elt C --> #3:Elt #7:List D --> #4:List W --> #1:List #2:Elt #6:List X --> #5:List Y --> #3:Elt Z --> #7:List #2:Elt #4:List Unifier 166 A --> #1:List E --> #2:Elt B --> #6:List #3:Elt #5:List #2:Elt F --> #3:Elt C --> #3:Elt D --> #4:List W --> #1:List #2:Elt #6:List X --> #5:List Y --> #3:Elt Z --> #2:Elt #4:List Unifier 167 A --> #1:List E --> #2:Elt B --> #6:List #3:Elt #7:List F --> #3:Elt C --> #8:List #2:Elt #5:List #3:Elt #9:List D --> #4:List W --> #1:List #2:Elt #6:List X --> #7:List #3:Elt #8:List Y --> #5:List Z --> #9:List #2:Elt #4:List Unifier 168 A --> #1:List E --> #2:Elt B --> #6:List #3:Elt #7:List F --> #3:Elt C --> #8:List #2:Elt #5:List #3:Elt D --> #4:List W --> #1:List #2:Elt #6:List X --> #7:List #3:Elt #8:List Y --> #5:List Z --> #2:Elt #4:List Unifier 169 A --> #1:List E --> #2:Elt B --> #5:List #3:Elt #6:List F --> #3:Elt C --> #7:List #2:Elt #8:List D --> #9:List #3:Elt #4:List W --> #1:List #2:Elt #5:List X --> #6:List #3:Elt #7:List Y --> #8:List #2:Elt #9:List Z --> #4:List Unifier 170 A --> #1:List E --> #2:Elt B --> #5:List #3:Elt #6:List F --> #3:Elt C --> #7:List #2:Elt #8:List D --> #3:Elt #4:List W --> #1:List #2:Elt #5:List X --> #6:List #3:Elt #7:List Y --> #8:List #2:Elt Z --> #4:List Unifier 171 A --> #1:List E --> #2:Elt B --> #5:List #2:Elt #6:List F --> #2:Elt C --> #7:List #2:Elt #4:List D --> #3:List W --> #1:List #2:Elt #5:List X --> #6:List #2:Elt #7:List Y --> #4:List Z --> #3:List Unifier 172 A --> #1:List E --> #2:Elt B --> #5:List #3:Elt #6:List F --> #3:Elt C --> #7:List #2:Elt D --> #8:List #3:Elt #4:List W --> #1:List #2:Elt #5:List X --> #6:List #3:Elt #7:List Y --> #2:Elt #8:List Z --> #4:List Unifier 173 A --> #1:List E --> #2:Elt B --> #5:List #3:Elt #6:List F --> #3:Elt C --> #7:List #2:Elt D --> #3:Elt #4:List W --> #1:List #2:Elt #5:List X --> #6:List #3:Elt #7:List Y --> #2:Elt Z --> #4:List Unifier 174 A --> #1:List E --> #2:Elt B --> #7:List #3:Elt #8:List F --> #3:Elt C --> #4:List D --> #9:List #2:Elt #5:List #3:Elt #6:List W --> #1:List #2:Elt #7:List X --> #8:List #3:Elt #4:List #2:Elt #9:List Y --> #5:List Z --> #6:List Unifier 175 A --> #1:List E --> #2:Elt B --> #7:List #3:Elt #8:List F --> #3:Elt C --> #4:List D --> #2:Elt #5:List #3:Elt #6:List W --> #1:List #2:Elt #7:List X --> #8:List #3:Elt #4:List #2:Elt Y --> #5:List Z --> #6:List Unifier 176 A --> #1:List E --> #2:Elt B --> #7:List #3:Elt #8:List F --> #3:Elt C --> #4:List D --> #5:List #3:Elt #6:List W --> #1:List #2:Elt #7:List X --> #8:List #3:Elt #4:List Y --> #5:List Z --> #6:List Unifier 177 A --> #1:List E --> #2:Elt B --> #6:List #3:Elt #7:List F --> #3:Elt C --> #2:Elt #5:List #3:Elt #8:List D --> #4:List W --> #1:List #2:Elt #6:List X --> #7:List #3:Elt Y --> #5:List Z --> #8:List #2:Elt #4:List Unifier 178 A --> #1:List E --> #2:Elt B --> #6:List #3:Elt #7:List F --> #3:Elt C --> #2:Elt #5:List #3:Elt D --> #4:List W --> #1:List #2:Elt #6:List X --> #7:List #3:Elt Y --> #5:List Z --> #2:Elt #4:List Unifier 179 A --> #1:List E --> #2:Elt B --> #5:List #3:Elt #6:List F --> #3:Elt C --> #2:Elt #7:List D --> #8:List #3:Elt #4:List W --> #1:List #2:Elt #5:List X --> #6:List #3:Elt Y --> #7:List #2:Elt #8:List Z --> #4:List Unifier 180 A --> #1:List E --> #2:Elt B --> #5:List #3:Elt #6:List F --> #3:Elt C --> #2:Elt #7:List D --> #3:Elt #4:List W --> #1:List #2:Elt #5:List X --> #6:List #3:Elt Y --> #7:List #2:Elt Z --> #4:List Unifier 181 A --> #1:List E --> #2:Elt B --> #5:List #2:Elt #6:List F --> #2:Elt C --> #2:Elt #4:List D --> #3:List W --> #1:List #2:Elt #5:List X --> #6:List #2:Elt Y --> #4:List Z --> #3:List Unifier 182 A --> #1:List E --> #2:Elt B --> #5:List #3:Elt #6:List F --> #3:Elt C --> #2:Elt D --> #7:List #3:Elt #4:List W --> #1:List #2:Elt #5:List X --> #6:List #3:Elt Y --> #2:Elt #7:List Z --> #4:List Unifier 183 A --> #1:List E --> #2:Elt B --> #5:List #3:Elt #6:List F --> #3:Elt C --> #2:Elt D --> #3:Elt #4:List W --> #1:List #2:Elt #5:List X --> #6:List #3:Elt Y --> #2:Elt Z --> #4:List Unifier 184 A --> #1:List E --> #2:Elt B --> #6:List #2:Elt #4:List F --> #2:Elt C --> #5:List #2:Elt #7:List D --> #3:List W --> #1:List #2:Elt #6:List X --> #4:List Y --> #5:List Z --> #7:List #2:Elt #3:List Unifier 185 A --> #1:List E --> #2:Elt B --> #6:List #2:Elt #4:List F --> #2:Elt C --> #5:List #2:Elt D --> #3:List W --> #1:List #2:Elt #6:List X --> #4:List Y --> #5:List Z --> #2:Elt #3:List Unifier 186 A --> #1:List E --> #2:Elt B --> #6:List #2:Elt #4:List F --> #2:Elt C --> #3:List D --> #7:List #2:Elt #5:List W --> #1:List #2:Elt #6:List X --> #4:List Y --> #3:List #2:Elt #7:List Z --> #5:List Unifier 187 A --> #1:List E --> #2:Elt B --> #6:List #2:Elt #4:List F --> #2:Elt C --> #3:List D --> #2:Elt #5:List W --> #1:List #2:Elt #6:List X --> #4:List Y --> #3:List #2:Elt Z --> #5:List Unifier 188 A --> #1:List E --> #2:Elt B --> #6:List #2:Elt #5:List F --> #2:Elt C --> #3:List D --> #4:List W --> #1:List #2:Elt #6:List X --> #5:List Y --> #3:List Z --> #4:List Unifier 189 A --> #1:List E --> #2:Elt B --> #6:List #3:Elt F --> #3:Elt C --> #7:List #2:Elt #5:List #3:Elt #8:List D --> #4:List W --> #1:List #2:Elt #6:List X --> #3:Elt #7:List Y --> #5:List Z --> #8:List #2:Elt #4:List Unifier 190 A --> #1:List E --> #2:Elt B --> #6:List #3:Elt F --> #3:Elt C --> #7:List #2:Elt #5:List #3:Elt D --> #4:List W --> #1:List #2:Elt #6:List X --> #3:Elt #7:List Y --> #5:List Z --> #2:Elt #4:List Unifier 191 A --> #1:List E --> #2:Elt B --> #5:List #3:Elt F --> #3:Elt C --> #6:List #2:Elt #7:List D --> #8:List #3:Elt #4:List W --> #1:List #2:Elt #5:List X --> #3:Elt #6:List Y --> #7:List #2:Elt #8:List Z --> #4:List Unifier 192 A --> #1:List E --> #2:Elt B --> #5:List #3:Elt F --> #3:Elt C --> #6:List #2:Elt #7:List D --> #3:Elt #4:List W --> #1:List #2:Elt #5:List X --> #3:Elt #6:List Y --> #7:List #2:Elt Z --> #4:List Unifier 193 A --> #1:List E --> #2:Elt B --> #5:List #2:Elt F --> #2:Elt C --> #6:List #2:Elt #4:List D --> #3:List W --> #1:List #2:Elt #5:List X --> #2:Elt #6:List Y --> #4:List Z --> #3:List Unifier 194 A --> #1:List E --> #2:Elt B --> #5:List #3:Elt F --> #3:Elt C --> #6:List #2:Elt D --> #7:List #3:Elt #4:List W --> #1:List #2:Elt #5:List X --> #3:Elt #6:List Y --> #2:Elt #7:List Z --> #4:List Unifier 195 A --> #1:List E --> #2:Elt B --> #5:List #3:Elt F --> #3:Elt C --> #6:List #2:Elt D --> #3:Elt #4:List W --> #1:List #2:Elt #5:List X --> #3:Elt #6:List Y --> #2:Elt Z --> #4:List Unifier 196 A --> #1:List E --> #2:Elt B --> #7:List #3:Elt F --> #3:Elt C --> #4:List D --> #8:List #2:Elt #5:List #3:Elt #6:List W --> #1:List #2:Elt #7:List X --> #3:Elt #4:List #2:Elt #8:List Y --> #5:List Z --> #6:List Unifier 197 A --> #1:List E --> #2:Elt B --> #7:List #3:Elt F --> #3:Elt C --> #4:List D --> #2:Elt #5:List #3:Elt #6:List W --> #1:List #2:Elt #7:List X --> #3:Elt #4:List #2:Elt Y --> #5:List Z --> #6:List Unifier 198 A --> #1:List E --> #2:Elt B --> #7:List #3:Elt F --> #3:Elt C --> #4:List D --> #5:List #3:Elt #6:List W --> #1:List #2:Elt #7:List X --> #3:Elt #4:List Y --> #5:List Z --> #6:List Unifier 199 A --> #1:List E --> #2:Elt B --> #6:List #3:Elt F --> #3:Elt C --> #2:Elt #5:List #3:Elt #7:List D --> #4:List W --> #1:List #2:Elt #6:List X --> #3:Elt Y --> #5:List Z --> #7:List #2:Elt #4:List Unifier 200 A --> #1:List E --> #2:Elt B --> #6:List #3:Elt F --> #3:Elt C --> #2:Elt #5:List #3:Elt D --> #4:List W --> #1:List #2:Elt #6:List X --> #3:Elt Y --> #5:List Z --> #2:Elt #4:List Unifier 201 A --> #1:List E --> #2:Elt B --> #5:List #3:Elt F --> #3:Elt C --> #2:Elt #6:List D --> #7:List #3:Elt #4:List W --> #1:List #2:Elt #5:List X --> #3:Elt Y --> #6:List #2:Elt #7:List Z --> #4:List Unifier 202 A --> #1:List E --> #2:Elt B --> #5:List #3:Elt F --> #3:Elt C --> #2:Elt #6:List D --> #3:Elt #4:List W --> #1:List #2:Elt #5:List X --> #3:Elt Y --> #6:List #2:Elt Z --> #4:List Unifier 203 A --> #1:List E --> #2:Elt B --> #5:List #2:Elt F --> #2:Elt C --> #2:Elt #4:List D --> #3:List W --> #1:List #2:Elt #5:List X --> #2:Elt Y --> #4:List Z --> #3:List Unifier 204 A --> #1:List E --> #2:Elt B --> #5:List #3:Elt F --> #3:Elt C --> #2:Elt D --> #6:List #3:Elt #4:List W --> #1:List #2:Elt #5:List X --> #3:Elt Y --> #2:Elt #6:List Z --> #4:List Unifier 205 A --> #1:List E --> #2:Elt B --> #5:List #3:Elt F --> #3:Elt C --> #2:Elt D --> #3:Elt #4:List W --> #1:List #2:Elt #5:List X --> #3:Elt Y --> #2:Elt Z --> #4:List Unifier 206 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #8:List #4:Elt #6:List #2:Elt #7:List #4:Elt #9:List D --> #5:List W --> #1:List #2:Elt #3:List #4:Elt #8:List X --> #6:List Y --> #7:List Z --> #9:List #2:Elt #5:List Unifier 207 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #8:List #4:Elt #6:List #2:Elt #7:List #4:Elt D --> #5:List W --> #1:List #2:Elt #3:List #4:Elt #8:List X --> #6:List Y --> #7:List Z --> #2:Elt #5:List Unifier 208 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #7:List #4:Elt #5:List #2:Elt #8:List D --> #9:List #4:Elt #6:List W --> #1:List #2:Elt #3:List #4:Elt #7:List X --> #5:List Y --> #8:List #2:Elt #9:List Z --> #6:List Unifier 209 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #7:List #4:Elt #5:List #2:Elt #8:List D --> #4:Elt #6:List W --> #1:List #2:Elt #3:List #4:Elt #7:List X --> #5:List Y --> #8:List #2:Elt Z --> #6:List Unifier 210 A --> #1:List E --> #2:Elt B --> #3:List F --> #2:Elt C --> #7:List #2:Elt #5:List #2:Elt #6:List D --> #4:List W --> #1:List #2:Elt #3:List #2:Elt #7:List X --> #5:List Y --> #6:List Z --> #4:List Unifier 211 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #7:List #4:Elt #5:List #2:Elt D --> #8:List #4:Elt #6:List W --> #1:List #2:Elt #3:List #4:Elt #7:List X --> #5:List Y --> #2:Elt #8:List Z --> #6:List Unifier 212 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #7:List #4:Elt #5:List #2:Elt D --> #4:Elt #6:List W --> #1:List #2:Elt #3:List #4:Elt #7:List X --> #5:List Y --> #2:Elt Z --> #6:List Unifier 213 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #7:List #4:Elt #8:List D --> #9:List #2:Elt #5:List #4:Elt #6:List W --> #1:List #2:Elt #3:List #4:Elt #7:List X --> #8:List #2:Elt #9:List Y --> #5:List Z --> #6:List Unifier 214 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #7:List #4:Elt #8:List D --> #2:Elt #5:List #4:Elt #6:List W --> #1:List #2:Elt #3:List #4:Elt #7:List X --> #8:List #2:Elt Y --> #5:List Z --> #6:List Unifier 215 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #8:List #4:Elt #5:List D --> #6:List #4:Elt #7:List W --> #1:List #2:Elt #3:List #4:Elt #8:List X --> #5:List Y --> #6:List Z --> #7:List Unifier 216 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #7:List #4:Elt D --> #8:List #2:Elt #5:List #4:Elt #6:List W --> #1:List #2:Elt #3:List #4:Elt #7:List X --> #2:Elt #8:List Y --> #5:List Z --> #6:List Unifier 217 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #7:List #4:Elt D --> #2:Elt #5:List #4:Elt #6:List W --> #1:List #2:Elt #3:List #4:Elt #7:List X --> #2:Elt Y --> #5:List Z --> #6:List Unifier 218 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #5:List D --> #9:List #4:Elt #6:List #2:Elt #7:List #4:Elt #8:List W --> #1:List #2:Elt #3:List #4:Elt #5:List #2:Elt #9:List X --> #6:List Y --> #7:List Z --> #8:List Unifier 219 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #5:List D --> #4:Elt #6:List #2:Elt #7:List #4:Elt #8:List W --> #1:List #2:Elt #3:List #4:Elt #5:List #2:Elt X --> #6:List Y --> #7:List Z --> #8:List Unifier 220 A --> #1:List E --> #2:Elt B --> #3:List F --> #2:Elt C --> #4:List D --> #5:List #2:Elt #6:List #2:Elt #7:List W --> #1:List #2:Elt #3:List #2:Elt #4:List X --> #5:List Y --> #6:List Z --> #7:List Unifier 221 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #4:Elt #6:List #2:Elt #7:List #4:Elt #8:List D --> #5:List W --> #1:List #2:Elt #3:List #4:Elt X --> #6:List Y --> #7:List Z --> #8:List #2:Elt #5:List Unifier 222 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #4:Elt #6:List #2:Elt #7:List #4:Elt D --> #5:List W --> #1:List #2:Elt #3:List #4:Elt X --> #6:List Y --> #7:List Z --> #2:Elt #5:List Unifier 223 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #4:Elt #5:List #2:Elt #7:List D --> #8:List #4:Elt #6:List W --> #1:List #2:Elt #3:List #4:Elt X --> #5:List Y --> #7:List #2:Elt #8:List Z --> #6:List Unifier 224 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #4:Elt #5:List #2:Elt #7:List D --> #4:Elt #6:List W --> #1:List #2:Elt #3:List #4:Elt X --> #5:List Y --> #7:List #2:Elt Z --> #6:List Unifier 225 A --> #1:List E --> #2:Elt B --> #3:List F --> #2:Elt C --> #2:Elt #5:List #2:Elt #6:List D --> #4:List W --> #1:List #2:Elt #3:List #2:Elt X --> #5:List Y --> #6:List Z --> #4:List Unifier 226 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #4:Elt #5:List #2:Elt D --> #7:List #4:Elt #6:List W --> #1:List #2:Elt #3:List #4:Elt X --> #5:List Y --> #2:Elt #7:List Z --> #6:List Unifier 227 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #4:Elt #5:List #2:Elt D --> #4:Elt #6:List W --> #1:List #2:Elt #3:List #4:Elt X --> #5:List Y --> #2:Elt Z --> #6:List Unifier 228 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #4:Elt #7:List D --> #8:List #2:Elt #5:List #4:Elt #6:List W --> #1:List #2:Elt #3:List #4:Elt X --> #7:List #2:Elt #8:List Y --> #5:List Z --> #6:List Unifier 229 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #4:Elt #7:List D --> #2:Elt #5:List #4:Elt #6:List W --> #1:List #2:Elt #3:List #4:Elt X --> #7:List #2:Elt Y --> #5:List Z --> #6:List Unifier 230 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #4:Elt #5:List D --> #6:List #4:Elt #7:List W --> #1:List #2:Elt #3:List #4:Elt X --> #5:List Y --> #6:List Z --> #7:List Unifier 231 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #4:Elt D --> #7:List #2:Elt #5:List #4:Elt #6:List W --> #1:List #2:Elt #3:List #4:Elt X --> #2:Elt #7:List Y --> #5:List Z --> #6:List Unifier 232 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #4:Elt D --> #2:Elt #5:List #4:Elt #6:List W --> #1:List #2:Elt #3:List #4:Elt X --> #2:Elt Y --> #5:List Z --> #6:List Unifier 233 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #6:List #2:Elt #7:List #4:Elt #8:List D --> #5:List W --> #1:List #2:Elt #3:List X --> #6:List Y --> #7:List Z --> #8:List #2:Elt #5:List Unifier 234 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #6:List #2:Elt #7:List #4:Elt D --> #5:List W --> #1:List #2:Elt #3:List X --> #6:List Y --> #7:List Z --> #2:Elt #5:List Unifier 235 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #5:List #2:Elt #7:List D --> #8:List #4:Elt #6:List W --> #1:List #2:Elt #3:List X --> #5:List Y --> #7:List #2:Elt #8:List Z --> #6:List Unifier 236 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #5:List #2:Elt #7:List D --> #4:Elt #6:List W --> #1:List #2:Elt #3:List X --> #5:List Y --> #7:List #2:Elt Z --> #6:List Unifier 237 A --> #1:List E --> #2:Elt B --> #3:List F --> #2:Elt C --> #5:List #2:Elt #6:List D --> #4:List W --> #1:List #2:Elt #3:List X --> #5:List Y --> #6:List Z --> #4:List Unifier 238 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #5:List #2:Elt D --> #7:List #4:Elt #6:List W --> #1:List #2:Elt #3:List X --> #5:List Y --> #2:Elt #7:List Z --> #6:List Unifier 239 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #5:List #2:Elt D --> #4:Elt #6:List W --> #1:List #2:Elt #3:List X --> #5:List Y --> #2:Elt Z --> #6:List Unifier 240 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #5:List D --> #8:List #2:Elt #6:List #4:Elt #7:List W --> #1:List #2:Elt #3:List X --> #5:List #2:Elt #8:List Y --> #6:List Z --> #7:List Unifier 241 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #5:List D --> #2:Elt #6:List #4:Elt #7:List W --> #1:List #2:Elt #3:List X --> #5:List #2:Elt Y --> #6:List Z --> #7:List Unifier 242 A --> #1:List E --> #2:Elt B --> #3:List F --> #4:Elt C --> #5:List D --> #6:List #4:Elt #7:List W --> #1:List #2:Elt #3:List X --> #5:List Y --> #6:List Z --> #7:List Unifier 243 A --> #1:List E --> #2:Elt B --> #3:Elt #6:List #2:Elt #7:List #3:Elt #8:List F --> #3:Elt C --> #4:List D --> #5:List W --> #1:List #2:Elt X --> #6:List Y --> #7:List Z --> #8:List #3:Elt #4:List #2:Elt #5:List Unifier 244 A --> #1:List E --> #2:Elt B --> #3:Elt #6:List #2:Elt #7:List #3:Elt F --> #3:Elt C --> #4:List D --> #5:List W --> #1:List #2:Elt X --> #6:List Y --> #7:List Z --> #3:Elt #4:List #2:Elt #5:List Unifier 245 A --> #1:List E --> #2:Elt B --> #3:Elt #5:List #2:Elt #6:List F --> #3:Elt C --> #7:List #3:Elt #8:List D --> #4:List W --> #1:List #2:Elt X --> #5:List Y --> #6:List #3:Elt #7:List Z --> #8:List #2:Elt #4:List Unifier 246 A --> #1:List E --> #2:Elt B --> #3:Elt #5:List #2:Elt #6:List F --> #3:Elt C --> #7:List #3:Elt D --> #4:List W --> #1:List #2:Elt X --> #5:List Y --> #6:List #3:Elt #7:List Z --> #2:Elt #4:List Unifier 247 A --> #1:List E --> #2:Elt B --> #3:Elt #5:List #2:Elt #7:List F --> #3:Elt C --> #4:List D --> #8:List #3:Elt #6:List W --> #1:List #2:Elt X --> #5:List Y --> #7:List #3:Elt #4:List #2:Elt #8:List Z --> #6:List Unifier 248 A --> #1:List E --> #2:Elt B --> #3:Elt #5:List #2:Elt #7:List F --> #3:Elt C --> #4:List D --> #3:Elt #6:List W --> #1:List #2:Elt X --> #5:List Y --> #7:List #3:Elt #4:List #2:Elt Z --> #6:List Unifier 249 A --> #1:List E --> #2:Elt B --> #2:Elt #5:List #2:Elt #6:List F --> #2:Elt C --> #3:List D --> #4:List W --> #1:List #2:Elt X --> #5:List Y --> #6:List #2:Elt #3:List Z --> #4:List Unifier 250 A --> #1:List E --> #2:Elt B --> #3:Elt #5:List #2:Elt #6:List F --> #3:Elt C --> #3:Elt #7:List D --> #4:List W --> #1:List #2:Elt X --> #5:List Y --> #6:List #3:Elt Z --> #7:List #2:Elt #4:List Unifier 251 A --> #1:List E --> #2:Elt B --> #3:Elt #5:List #2:Elt #6:List F --> #3:Elt C --> #3:Elt D --> #4:List W --> #1:List #2:Elt X --> #5:List Y --> #6:List #3:Elt Z --> #2:Elt #4:List Unifier 252 A --> #1:List E --> #2:Elt B --> #3:Elt #6:List #2:Elt #7:List F --> #3:Elt C --> #4:List D --> #5:List W --> #1:List #2:Elt X --> #6:List Y --> #7:List Z --> #4:List #2:Elt #5:List Unifier 253 A --> #1:List E --> #2:Elt B --> #3:Elt #5:List #2:Elt F --> #3:Elt C --> #6:List #3:Elt #7:List D --> #4:List W --> #1:List #2:Elt X --> #5:List Y --> #3:Elt #6:List Z --> #7:List #2:Elt #4:List Unifier 254 A --> #1:List E --> #2:Elt B --> #3:Elt #5:List #2:Elt F --> #3:Elt C --> #6:List #3:Elt D --> #4:List W --> #1:List #2:Elt X --> #5:List Y --> #3:Elt #6:List Z --> #2:Elt #4:List Unifier 255 A --> #1:List E --> #2:Elt B --> #3:Elt #5:List #2:Elt F --> #3:Elt C --> #4:List D --> #7:List #3:Elt #6:List W --> #1:List #2:Elt X --> #5:List Y --> #3:Elt #4:List #2:Elt #7:List Z --> #6:List Unifier 256 A --> #1:List E --> #2:Elt B --> #3:Elt #5:List #2:Elt F --> #3:Elt C --> #4:List D --> #3:Elt #6:List W --> #1:List #2:Elt X --> #5:List Y --> #3:Elt #4:List #2:Elt Z --> #6:List Unifier 257 A --> #1:List E --> #2:Elt B --> #2:Elt #5:List #2:Elt F --> #2:Elt C --> #3:List D --> #4:List W --> #1:List #2:Elt X --> #5:List Y --> #2:Elt #3:List Z --> #4:List Unifier 258 A --> #1:List E --> #2:Elt B --> #3:Elt #5:List #2:Elt F --> #3:Elt C --> #3:Elt #6:List D --> #4:List W --> #1:List #2:Elt X --> #5:List Y --> #3:Elt Z --> #6:List #2:Elt #4:List Unifier 259 A --> #1:List E --> #2:Elt B --> #3:Elt #5:List #2:Elt F --> #3:Elt C --> #3:Elt D --> #4:List W --> #1:List #2:Elt X --> #5:List Y --> #3:Elt Z --> #2:Elt #4:List Unifier 260 A --> #1:List E --> #2:Elt B --> #3:Elt #6:List F --> #3:Elt C --> #7:List #2:Elt #5:List #3:Elt #8:List D --> #4:List W --> #1:List #2:Elt X --> #6:List #3:Elt #7:List Y --> #5:List Z --> #8:List #2:Elt #4:List Unifier 261 A --> #1:List E --> #2:Elt B --> #3:Elt #6:List F --> #3:Elt C --> #7:List #2:Elt #5:List #3:Elt D --> #4:List W --> #1:List #2:Elt X --> #6:List #3:Elt #7:List Y --> #5:List Z --> #2:Elt #4:List Unifier 262 A --> #1:List E --> #2:Elt B --> #3:Elt #5:List F --> #3:Elt C --> #6:List #2:Elt #7:List D --> #8:List #3:Elt #4:List W --> #1:List #2:Elt X --> #5:List #3:Elt #6:List Y --> #7:List #2:Elt #8:List Z --> #4:List Unifier 263 A --> #1:List E --> #2:Elt B --> #3:Elt #5:List F --> #3:Elt C --> #6:List #2:Elt #7:List D --> #3:Elt #4:List W --> #1:List #2:Elt X --> #5:List #3:Elt #6:List Y --> #7:List #2:Elt Z --> #4:List Unifier 264 A --> #1:List E --> #2:Elt B --> #2:Elt #5:List F --> #2:Elt C --> #6:List #2:Elt #4:List D --> #3:List W --> #1:List #2:Elt X --> #5:List #2:Elt #6:List Y --> #4:List Z --> #3:List Unifier 265 A --> #1:List E --> #2:Elt B --> #3:Elt #5:List F --> #3:Elt C --> #6:List #2:Elt D --> #7:List #3:Elt #4:List W --> #1:List #2:Elt X --> #5:List #3:Elt #6:List Y --> #2:Elt #7:List Z --> #4:List Unifier 266 A --> #1:List E --> #2:Elt B --> #3:Elt #5:List F --> #3:Elt C --> #6:List #2:Elt D --> #3:Elt #4:List W --> #1:List #2:Elt X --> #5:List #3:Elt #6:List Y --> #2:Elt Z --> #4:List Unifier 267 A --> #1:List E --> #2:Elt B --> #3:Elt #7:List F --> #3:Elt C --> #4:List D --> #8:List #2:Elt #5:List #3:Elt #6:List W --> #1:List #2:Elt X --> #7:List #3:Elt #4:List #2:Elt #8:List Y --> #5:List Z --> #6:List Unifier 268 A --> #1:List E --> #2:Elt B --> #3:Elt #7:List F --> #3:Elt C --> #4:List D --> #2:Elt #5:List #3:Elt #6:List W --> #1:List #2:Elt X --> #7:List #3:Elt #4:List #2:Elt Y --> #5:List Z --> #6:List Unifier 269 A --> #1:List E --> #2:Elt B --> #3:Elt #7:List F --> #3:Elt C --> #4:List D --> #5:List #3:Elt #6:List W --> #1:List #2:Elt X --> #7:List #3:Elt #4:List Y --> #5:List Z --> #6:List Unifier 270 A --> #1:List E --> #2:Elt B --> #3:Elt #6:List F --> #3:Elt C --> #2:Elt #5:List #3:Elt #7:List D --> #4:List W --> #1:List #2:Elt X --> #6:List #3:Elt Y --> #5:List Z --> #7:List #2:Elt #4:List Unifier 271 A --> #1:List E --> #2:Elt B --> #3:Elt #6:List F --> #3:Elt C --> #2:Elt #5:List #3:Elt D --> #4:List W --> #1:List #2:Elt X --> #6:List #3:Elt Y --> #5:List Z --> #2:Elt #4:List Unifier 272 A --> #1:List E --> #2:Elt B --> #3:Elt #5:List F --> #3:Elt C --> #2:Elt #6:List D --> #7:List #3:Elt #4:List W --> #1:List #2:Elt X --> #5:List #3:Elt Y --> #6:List #2:Elt #7:List Z --> #4:List Unifier 273 A --> #1:List E --> #2:Elt B --> #3:Elt #5:List F --> #3:Elt C --> #2:Elt #6:List D --> #3:Elt #4:List W --> #1:List #2:Elt X --> #5:List #3:Elt Y --> #6:List #2:Elt Z --> #4:List Unifier 274 A --> #1:List E --> #2:Elt B --> #2:Elt #5:List F --> #2:Elt C --> #2:Elt #4:List D --> #3:List W --> #1:List #2:Elt X --> #5:List #2:Elt Y --> #4:List Z --> #3:List Unifier 275 A --> #1:List E --> #2:Elt B --> #3:Elt #5:List F --> #3:Elt C --> #2:Elt D --> #6:List #3:Elt #4:List W --> #1:List #2:Elt X --> #5:List #3:Elt Y --> #2:Elt #6:List Z --> #4:List Unifier 276 A --> #1:List E --> #2:Elt B --> #3:Elt #5:List F --> #3:Elt C --> #2:Elt D --> #3:Elt #4:List W --> #1:List #2:Elt X --> #5:List #3:Elt Y --> #2:Elt Z --> #4:List Unifier 277 A --> #1:List E --> #2:Elt B --> #2:Elt #4:List F --> #2:Elt C --> #5:List #2:Elt #6:List D --> #3:List W --> #1:List #2:Elt X --> #4:List Y --> #5:List Z --> #6:List #2:Elt #3:List Unifier 278 A --> #1:List E --> #2:Elt B --> #2:Elt #4:List F --> #2:Elt C --> #5:List #2:Elt D --> #3:List W --> #1:List #2:Elt X --> #4:List Y --> #5:List Z --> #2:Elt #3:List Unifier 279 A --> #1:List E --> #2:Elt B --> #2:Elt #4:List F --> #2:Elt C --> #3:List D --> #6:List #2:Elt #5:List W --> #1:List #2:Elt X --> #4:List Y --> #3:List #2:Elt #6:List Z --> #5:List Unifier 280 A --> #1:List E --> #2:Elt B --> #2:Elt #4:List F --> #2:Elt C --> #3:List D --> #2:Elt #5:List W --> #1:List #2:Elt X --> #4:List Y --> #3:List #2:Elt Z --> #5:List Unifier 281 A --> #1:List E --> #2:Elt B --> #2:Elt #5:List F --> #2:Elt C --> #3:List D --> #4:List W --> #1:List #2:Elt X --> #5:List Y --> #3:List Z --> #4:List Unifier 282 A --> #1:List E --> #2:Elt B --> #3:Elt F --> #3:Elt C --> #6:List #2:Elt #5:List #3:Elt #7:List D --> #4:List W --> #1:List #2:Elt X --> #3:Elt #6:List Y --> #5:List Z --> #7:List #2:Elt #4:List Unifier 283 A --> #1:List E --> #2:Elt B --> #3:Elt F --> #3:Elt C --> #6:List #2:Elt #5:List #3:Elt D --> #4:List W --> #1:List #2:Elt X --> #3:Elt #6:List Y --> #5:List Z --> #2:Elt #4:List Unifier 284 A --> #1:List E --> #2:Elt B --> #3:Elt F --> #3:Elt C --> #5:List #2:Elt #6:List D --> #7:List #3:Elt #4:List W --> #1:List #2:Elt X --> #3:Elt #5:List Y --> #6:List #2:Elt #7:List Z --> #4:List Unifier 285 A --> #1:List E --> #2:Elt B --> #3:Elt F --> #3:Elt C --> #5:List #2:Elt #6:List D --> #3:Elt #4:List W --> #1:List #2:Elt X --> #3:Elt #5:List Y --> #6:List #2:Elt Z --> #4:List Unifier 286 A --> #1:List E --> #2:Elt B --> #2:Elt F --> #2:Elt C --> #5:List #2:Elt #4:List D --> #3:List W --> #1:List #2:Elt X --> #2:Elt #5:List Y --> #4:List Z --> #3:List Unifier 287 A --> #1:List E --> #2:Elt B --> #3:Elt F --> #3:Elt C --> #5:List #2:Elt D --> #6:List #3:Elt #4:List W --> #1:List #2:Elt X --> #3:Elt #5:List Y --> #2:Elt #6:List Z --> #4:List Unifier 288 A --> #1:List E --> #2:Elt B --> #3:Elt F --> #3:Elt C --> #5:List #2:Elt D --> #3:Elt #4:List W --> #1:List #2:Elt X --> #3:Elt #5:List Y --> #2:Elt Z --> #4:List Unifier 289 A --> #1:List E --> #2:Elt B --> #3:Elt F --> #3:Elt C --> #4:List D --> #7:List #2:Elt #5:List #3:Elt #6:List W --> #1:List #2:Elt X --> #3:Elt #4:List #2:Elt #7:List Y --> #5:List Z --> #6:List Unifier 290 A --> #1:List E --> #2:Elt B --> #3:Elt F --> #3:Elt C --> #4:List D --> #2:Elt #5:List #3:Elt #6:List W --> #1:List #2:Elt X --> #3:Elt #4:List #2:Elt Y --> #5:List Z --> #6:List Unifier 291 A --> #1:List E --> #2:Elt B --> #3:Elt F --> #3:Elt C --> #4:List D --> #5:List #3:Elt #6:List W --> #1:List #2:Elt X --> #3:Elt #4:List Y --> #5:List Z --> #6:List Unifier 292 A --> #1:List E --> #2:Elt B --> #3:Elt F --> #3:Elt C --> #2:Elt #5:List #3:Elt #6:List D --> #4:List W --> #1:List #2:Elt X --> #3:Elt Y --> #5:List Z --> #6:List #2:Elt #4:List Unifier 293 A --> #1:List E --> #2:Elt B --> #3:Elt F --> #3:Elt C --> #2:Elt #5:List #3:Elt D --> #4:List W --> #1:List #2:Elt X --> #3:Elt Y --> #5:List Z --> #2:Elt #4:List Unifier 294 A --> #1:List E --> #2:Elt B --> #3:Elt F --> #3:Elt C --> #2:Elt #5:List D --> #6:List #3:Elt #4:List W --> #1:List #2:Elt X --> #3:Elt Y --> #5:List #2:Elt #6:List Z --> #4:List Unifier 295 A --> #1:List E --> #2:Elt B --> #3:Elt F --> #3:Elt C --> #2:Elt #5:List D --> #3:Elt #4:List W --> #1:List #2:Elt X --> #3:Elt Y --> #5:List #2:Elt Z --> #4:List Unifier 296 A --> #1:List E --> #2:Elt B --> #2:Elt F --> #2:Elt C --> #2:Elt #4:List D --> #3:List W --> #1:List #2:Elt X --> #2:Elt Y --> #4:List Z --> #3:List Unifier 297 A --> #1:List E --> #2:Elt B --> #3:Elt F --> #3:Elt C --> #2:Elt D --> #5:List #3:Elt #4:List W --> #1:List #2:Elt X --> #3:Elt Y --> #2:Elt #5:List Z --> #4:List Unifier 298 A --> #1:List E --> #2:Elt B --> #3:Elt F --> #3:Elt C --> #2:Elt D --> #3:Elt #4:List W --> #1:List #2:Elt X --> #3:Elt Y --> #2:Elt Z --> #4:List Unifier 299 A --> #1:List E --> #2:Elt B --> #5:List #2:Elt #6:List #2:Elt #7:List F --> #2:Elt C --> #3:List D --> #4:List W --> #1:List X --> #5:List Y --> #6:List Z --> #7:List #2:Elt #3:List #2:Elt #4:List Unifier 300 A --> #1:List E --> #2:Elt B --> #5:List #2:Elt #6:List #2:Elt F --> #2:Elt C --> #3:List D --> #4:List W --> #1:List X --> #5:List Y --> #6:List Z --> #2:Elt #3:List #2:Elt #4:List Unifier 301 A --> #1:List E --> #2:Elt B --> #4:List #2:Elt #5:List F --> #2:Elt C --> #6:List #2:Elt #7:List D --> #3:List W --> #1:List X --> #4:List Y --> #5:List #2:Elt #6:List Z --> #7:List #2:Elt #3:List Unifier 302 A --> #1:List E --> #2:Elt B --> #4:List #2:Elt #5:List F --> #2:Elt C --> #6:List #2:Elt D --> #3:List W --> #1:List X --> #4:List Y --> #5:List #2:Elt #6:List Z --> #2:Elt #3:List Unifier 303 A --> #1:List E --> #2:Elt B --> #4:List #2:Elt #6:List F --> #2:Elt C --> #3:List D --> #7:List #2:Elt #5:List W --> #1:List X --> #4:List Y --> #6:List #2:Elt #3:List #2:Elt #7:List Z --> #5:List Unifier 304 A --> #1:List E --> #2:Elt B --> #4:List #2:Elt #6:List F --> #2:Elt C --> #3:List D --> #2:Elt #5:List W --> #1:List X --> #4:List Y --> #6:List #2:Elt #3:List #2:Elt Z --> #5:List Unifier 305 A --> #1:List E --> #2:Elt B --> #5:List #2:Elt #6:List F --> #2:Elt C --> #3:List D --> #4:List W --> #1:List X --> #5:List Y --> #6:List #2:Elt #3:List Z --> #4:List Unifier 306 A --> #1:List E --> #2:Elt B --> #4:List #2:Elt #5:List F --> #2:Elt C --> #2:Elt #6:List D --> #3:List W --> #1:List X --> #4:List Y --> #5:List #2:Elt Z --> #6:List #2:Elt #3:List Unifier 307 A --> #1:List E --> #2:Elt B --> #4:List #2:Elt #5:List F --> #2:Elt C --> #2:Elt D --> #3:List W --> #1:List X --> #4:List Y --> #5:List #2:Elt Z --> #2:Elt #3:List Unifier 308 A --> #1:List E --> #2:Elt B --> #5:List #2:Elt #6:List F --> #2:Elt C --> #3:List D --> #4:List W --> #1:List X --> #5:List Y --> #6:List Z --> #3:List #2:Elt #4:List Unifier 309 A --> #1:List E --> #2:Elt B --> #4:List #2:Elt F --> #2:Elt C --> #5:List #2:Elt #6:List D --> #3:List W --> #1:List X --> #4:List Y --> #2:Elt #5:List Z --> #6:List #2:Elt #3:List Unifier 310 A --> #1:List E --> #2:Elt B --> #4:List #2:Elt F --> #2:Elt C --> #5:List #2:Elt D --> #3:List W --> #1:List X --> #4:List Y --> #2:Elt #5:List Z --> #2:Elt #3:List Unifier 311 A --> #1:List E --> #2:Elt B --> #4:List #2:Elt F --> #2:Elt C --> #3:List D --> #6:List #2:Elt #5:List W --> #1:List X --> #4:List Y --> #2:Elt #3:List #2:Elt #6:List Z --> #5:List Unifier 312 A --> #1:List E --> #2:Elt B --> #4:List #2:Elt F --> #2:Elt C --> #3:List D --> #2:Elt #5:List W --> #1:List X --> #4:List Y --> #2:Elt #3:List #2:Elt Z --> #5:List Unifier 313 A --> #1:List E --> #2:Elt B --> #5:List #2:Elt F --> #2:Elt C --> #3:List D --> #4:List W --> #1:List X --> #5:List Y --> #2:Elt #3:List Z --> #4:List Unifier 314 A --> #1:List E --> #2:Elt B --> #4:List #2:Elt F --> #2:Elt C --> #2:Elt #5:List D --> #3:List W --> #1:List X --> #4:List Y --> #2:Elt Z --> #5:List #2:Elt #3:List Unifier 315 A --> #1:List E --> #2:Elt B --> #4:List #2:Elt F --> #2:Elt C --> #2:Elt D --> #3:List W --> #1:List X --> #4:List Y --> #2:Elt Z --> #2:Elt #3:List Unifier 316 A --> #1:List E --> #2:Elt B --> #3:List F --> #2:Elt C --> #6:List #2:Elt #5:List #2:Elt #7:List D --> #4:List W --> #1:List X --> #3:List #2:Elt #6:List Y --> #5:List Z --> #7:List #2:Elt #4:List Unifier 317 A --> #1:List E --> #2:Elt B --> #3:List F --> #2:Elt C --> #6:List #2:Elt #5:List #2:Elt D --> #4:List W --> #1:List X --> #3:List #2:Elt #6:List Y --> #5:List Z --> #2:Elt #4:List Unifier 318 A --> #1:List E --> #2:Elt B --> #3:List F --> #2:Elt C --> #5:List #2:Elt #6:List D --> #7:List #2:Elt #4:List W --> #1:List X --> #3:List #2:Elt #5:List Y --> #6:List #2:Elt #7:List Z --> #4:List Unifier 319 A --> #1:List E --> #2:Elt B --> #3:List F --> #2:Elt C --> #5:List #2:Elt #6:List D --> #2:Elt #4:List W --> #1:List X --> #3:List #2:Elt #5:List Y --> #6:List #2:Elt Z --> #4:List Unifier 320 A --> #1:List E --> #2:Elt B --> #3:List F --> #2:Elt C --> #6:List #2:Elt #5:List D --> #4:List W --> #1:List X --> #3:List #2:Elt #6:List Y --> #5:List Z --> #4:List Unifier 321 A --> #1:List E --> #2:Elt B --> #3:List F --> #2:Elt C --> #5:List #2:Elt D --> #6:List #2:Elt #4:List W --> #1:List X --> #3:List #2:Elt #5:List Y --> #2:Elt #6:List Z --> #4:List Unifier 322 A --> #1:List E --> #2:Elt B --> #3:List F --> #2:Elt C --> #5:List #2:Elt D --> #2:Elt #4:List W --> #1:List X --> #3:List #2:Elt #5:List Y --> #2:Elt Z --> #4:List Unifier 323 A --> #1:List E --> #2:Elt B --> #3:List F --> #2:Elt C --> #4:List D --> #7:List #2:Elt #5:List #2:Elt #6:List W --> #1:List X --> #3:List #2:Elt #4:List #2:Elt #7:List Y --> #5:List Z --> #6:List Unifier 324 A --> #1:List E --> #2:Elt B --> #3:List F --> #2:Elt C --> #4:List D --> #2:Elt #5:List #2:Elt #6:List W --> #1:List X --> #3:List #2:Elt #4:List #2:Elt Y --> #5:List Z --> #6:List Unifier 325 A --> #1:List E --> #2:Elt B --> #3:List F --> #2:Elt C --> #4:List D --> #5:List #2:Elt #6:List W --> #1:List X --> #3:List #2:Elt #4:List Y --> #5:List Z --> #6:List Unifier 326 A --> #1:List E --> #2:Elt B --> #3:List F --> #2:Elt C --> #2:Elt #5:List #2:Elt #6:List D --> #4:List W --> #1:List X --> #3:List #2:Elt Y --> #5:List Z --> #6:List #2:Elt #4:List Unifier 327 A --> #1:List E --> #2:Elt B --> #3:List F --> #2:Elt C --> #2:Elt #5:List #2:Elt D --> #4:List W --> #1:List X --> #3:List #2:Elt Y --> #5:List Z --> #2:Elt #4:List Unifier 328 A --> #1:List E --> #2:Elt B --> #3:List F --> #2:Elt C --> #2:Elt #5:List D --> #6:List #2:Elt #4:List W --> #1:List X --> #3:List #2:Elt Y --> #5:List #2:Elt #6:List Z --> #4:List Unifier 329 A --> #1:List E --> #2:Elt B --> #3:List F --> #2:Elt C --> #2:Elt #5:List D --> #2:Elt #4:List W --> #1:List X --> #3:List #2:Elt Y --> #5:List #2:Elt Z --> #4:List Unifier 330 A --> #1:List E --> #2:Elt B --> #3:List F --> #2:Elt C --> #2:Elt #5:List D --> #4:List W --> #1:List X --> #3:List #2:Elt Y --> #5:List Z --> #4:List Unifier 331 A --> #1:List E --> #2:Elt B --> #3:List F --> #2:Elt C --> #2:Elt D --> #5:List #2:Elt #4:List W --> #1:List X --> #3:List #2:Elt Y --> #2:Elt #5:List Z --> #4:List Unifier 332 A --> #1:List E --> #2:Elt B --> #3:List F --> #2:Elt C --> #2:Elt D --> #2:Elt #4:List W --> #1:List X --> #3:List #2:Elt Y --> #2:Elt Z --> #4:List Unifier 333 A --> #1:List E --> #2:Elt B --> #3:List F --> #2:Elt C --> #5:List #2:Elt #6:List D --> #4:List W --> #1:List X --> #3:List Y --> #5:List Z --> #6:List #2:Elt #4:List Unifier 334 A --> #1:List E --> #2:Elt B --> #3:List F --> #2:Elt C --> #5:List #2:Elt D --> #4:List W --> #1:List X --> #3:List Y --> #5:List Z --> #2:Elt #4:List Unifier 335 A --> #1:List E --> #2:Elt B --> #3:List F --> #2:Elt C --> #4:List D --> #6:List #2:Elt #5:List W --> #1:List X --> #3:List Y --> #4:List #2:Elt #6:List Z --> #5:List Unifier 336 A --> #1:List E --> #2:Elt B --> #3:List F --> #2:Elt C --> #4:List D --> #2:Elt #5:List W --> #1:List X --> #3:List Y --> #4:List #2:Elt Z --> #5:List Unifier 337 A --> #1:List E --> #2:Elt B --> #3:List F --> #2:Elt C --> #4:List D --> #5:List W --> #1:List X --> #3:List Y --> #4:List Z --> #5:List ========================================== unify in A-UNIF : A =? h(B, C) /\ X A Y =? U h(C, D) V E A W . Unifier 1 A --> h(#1:List, #2:List) B --> #1:List C --> #2:List X --> #4:List h(#2:List, #5:List) #6:List #7:Elt h(#1:List, #2:List) #8:List Y --> #3:List U --> #4:List D --> #5:List V --> #6:List E --> #7:Elt W --> #8:List h(#1:List, #2:List) #3:List Unifier 2 A --> h(#1:List, #2:List) B --> #1:List C --> #2:List X --> #4:List h(#2:List, #5:List) #6:List #7:Elt h(#1:List, #2:List) Y --> #3:List U --> #4:List D --> #5:List V --> #6:List E --> #7:Elt W --> h(#1:List, #2:List) #3:List Unifier 3 A --> h(#1:List, #2:List) B --> #1:List C --> #2:List X --> #4:List h(#2:List, #5:List) #6:List #7:Elt Y --> #3:List U --> #4:List D --> #5:List V --> #6:List E --> #7:Elt W --> #3:List Unifier 4 A --> h(#1:List, #2:List) B --> #1:List C --> #2:List X --> #3:List h(#2:List, #4:List) #7:List Y --> #8:List #5:Elt h(#1:List, #2:List) #6:List U --> #3:List D --> #4:List V --> #7:List h(#1:List, #2:List) #8:List E --> #5:Elt W --> #6:List Unifier 5 A --> h(#1:List, #2:List) B --> #1:List C --> #2:List X --> #3:List h(#2:List, #4:List) #7:List Y --> #5:Elt h(#1:List, #2:List) #6:List U --> #3:List D --> #4:List V --> #7:List h(#1:List, #2:List) E --> #5:Elt W --> #6:List Unifier 6 A --> h(#1:List, #2:List) B --> #1:List C --> #2:List X --> #3:List h(#2:List, #4:List) Y --> #7:List #5:Elt h(#1:List, #2:List) #6:List U --> #3:List D --> #4:List V --> h(#1:List, #2:List) #7:List E --> #5:Elt W --> #6:List Unifier 7 A --> h(#1:List, #2:List) B --> #1:List C --> #2:List X --> #3:List h(#2:List, #4:List) Y --> #5:Elt h(#1:List, #2:List) #6:List U --> #3:List D --> #4:List V --> h(#1:List, #2:List) E --> #5:Elt W --> #6:List Unifier 8 A --> h(#1:List, #2:List) B --> #1:List C --> #2:List X --> #3:List Y --> #8:List h(#2:List, #4:List) #5:List #6:Elt h(#1:List, #2:List) #7:List U --> #3:List h(#1:List, #2:List) #8:List D --> #4:List V --> #5:List E --> #6:Elt W --> #7:List Unifier 9 A --> h(#1:List, #2:List) B --> #1:List C --> #2:List X --> #3:List Y --> h(#2:List, #4:List) #5:List #6:Elt h(#1:List, #2:List) #7:List U --> #3:List h(#1:List, #2:List) D --> #4:List V --> #5:List E --> #6:Elt W --> #7:List Unifier 10 A --> h(#1:List, #2:List) B --> #1:List C --> #2:List X --> #3:List Y --> #4:List #5:Elt h(#1:List, #2:List) #6:List U --> #3:List D --> #1:List V --> #4:List E --> #5:Elt W --> #6:List ========================================== unify in A-UNIF : X A Y =? U h(C, D) V E A W /\ A =? h(B, C) . Unifier 1 X --> #2:List h(#3:List, #4:List) #5:List #6:Elt h(#3:List, #7:List) #8:List A --> h(#3:List, #7:List) Y --> #1:List U --> #2:List C --> #3:List D --> #4:List V --> #5:List E --> #6:Elt W --> #8:List h(#3:List, #7:List) #1:List B --> #7:List Unifier 2 X --> #2:List h(#3:List, #4:List) #5:List #6:Elt h(#3:List, #7:List) A --> h(#3:List, #7:List) Y --> #1:List U --> #2:List C --> #3:List D --> #4:List V --> #5:List E --> #6:Elt W --> h(#3:List, #7:List) #1:List B --> #7:List Unifier 3 X --> #2:List h(#3:List, #4:List) #5:List #6:Elt A --> h(#3:List, #7:List) Y --> #1:List U --> #2:List C --> #3:List D --> #4:List V --> #5:List E --> #6:Elt W --> #1:List B --> #7:List Unifier 4 X --> #1:List h(#2:List, #3:List) #7:List A --> h(#2:List, #6:List) Y --> #8:List #4:Elt h(#2:List, #6:List) #5:List U --> #1:List C --> #2:List D --> #3:List V --> #7:List h(#2:List, #6:List) #8:List E --> #4:Elt W --> #5:List B --> #6:List Unifier 5 X --> #1:List h(#2:List, #3:List) #7:List A --> h(#2:List, #6:List) Y --> #4:Elt h(#2:List, #6:List) #5:List U --> #1:List C --> #2:List D --> #3:List V --> #7:List h(#2:List, #6:List) E --> #4:Elt W --> #5:List B --> #6:List Unifier 6 X --> #1:List h(#2:List, #3:List) A --> h(#2:List, #6:List) Y --> #7:List #4:Elt h(#2:List, #6:List) #5:List U --> #1:List C --> #2:List D --> #3:List V --> h(#2:List, #6:List) #7:List E --> #4:Elt W --> #5:List B --> #6:List Unifier 7 X --> #1:List h(#2:List, #3:List) A --> h(#2:List, #6:List) Y --> #4:Elt h(#2:List, #6:List) #5:List U --> #1:List C --> #2:List D --> #3:List V --> h(#2:List, #6:List) E --> #4:Elt W --> #5:List B --> #6:List Unifier 8 X --> #1:List A --> h(#2:List, #7:List) Y --> #8:List h(#2:List, #3:List) #4:List #5:Elt h(#2:List, #7:List) #6:List U --> #1:List h(#2:List, #7:List) #8:List C --> #2:List D --> #3:List V --> #4:List E --> #5:Elt W --> #6:List B --> #7:List Unifier 9 X --> #1:List A --> h(#2:List, #7:List) Y --> h(#2:List, #3:List) #4:List #5:Elt h(#2:List, #7:List) #6:List U --> #1:List h(#2:List, #7:List) C --> #2:List D --> #3:List V --> #4:List E --> #5:Elt W --> #6:List B --> #7:List Unifier 10 X --> #1:List A --> h(#2:List, #6:List) Y --> #3:List #4:Elt h(#2:List, #6:List) #5:List U --> #1:List C --> #2:List D --> #6:List V --> #3:List E --> #4:Elt W --> #5:List B --> #6:List ========================================== unify in A-UNIF : A =? h(B, C) /\ X A Y =? U h(C, D) V E A W . Unifier 1 A --> h(#1:List, #2:List) B --> #1:List C --> #2:List X --> #4:List h(#2:List, #5:List) #6:List #7:Elt h(#1:List, #2:List) #8:List Y --> #3:List U --> #4:List D --> #5:List V --> #6:List E --> #7:Elt W --> #8:List h(#1:List, #2:List) #3:List Unifier 2 A --> h(#1:List, #2:List) B --> #1:List C --> #2:List X --> #4:List h(#2:List, #5:List) #6:List #7:Elt h(#1:List, #2:List) Y --> #3:List U --> #4:List D --> #5:List V --> #6:List E --> #7:Elt W --> h(#1:List, #2:List) #3:List Unifier 3 A --> h(#1:List, #2:List) B --> #1:List C --> #2:List X --> #4:List h(#2:List, #5:List) #6:List #7:Elt Y --> #3:List U --> #4:List D --> #5:List V --> #6:List E --> #7:Elt W --> #3:List Unifier 4 A --> h(#1:List, #2:List) B --> #1:List C --> #2:List X --> #3:List h(#2:List, #4:List) #7:List Y --> #8:List #5:Elt h(#1:List, #2:List) #6:List U --> #3:List D --> #4:List V --> #7:List h(#1:List, #2:List) #8:List E --> #5:Elt W --> #6:List Unifier 5 A --> h(#1:List, #2:List) B --> #1:List C --> #2:List X --> #3:List h(#2:List, #4:List) #7:List Y --> #5:Elt h(#1:List, #2:List) #6:List U --> #3:List D --> #4:List V --> #7:List h(#1:List, #2:List) E --> #5:Elt W --> #6:List Unifier 6 A --> h(#1:List, #2:List) B --> #1:List C --> #2:List X --> #3:List h(#2:List, #4:List) Y --> #7:List #5:Elt h(#1:List, #2:List) #6:List U --> #3:List D --> #4:List V --> h(#1:List, #2:List) #7:List E --> #5:Elt W --> #6:List Unifier 7 A --> h(#1:List, #2:List) B --> #1:List C --> #2:List X --> #3:List h(#2:List, #4:List) Y --> #5:Elt h(#1:List, #2:List) #6:List U --> #3:List D --> #4:List V --> h(#1:List, #2:List) E --> #5:Elt W --> #6:List Unifier 8 A --> h(#1:List, #2:List) B --> #1:List C --> #2:List X --> #3:List Y --> #8:List h(#2:List, #4:List) #5:List #6:Elt h(#1:List, #2:List) #7:List U --> #3:List h(#1:List, #2:List) #8:List D --> #4:List V --> #5:List E --> #6:Elt W --> #7:List Unifier 9 A --> h(#1:List, #2:List) B --> #1:List C --> #2:List X --> #3:List Y --> h(#2:List, #4:List) #5:List #6:Elt h(#1:List, #2:List) #7:List U --> #3:List h(#1:List, #2:List) D --> #4:List V --> #5:List E --> #6:Elt W --> #7:List Unifier 10 A --> h(#1:List, #2:List) B --> #1:List C --> #2:List X --> #3:List Y --> #4:List #5:Elt h(#1:List, #2:List) #6:List U --> #3:List D --> #1:List V --> #4:List E --> #5:Elt W --> #6:List ========================================== unify in A-UNIF : j(A, f(B, E, C), f(D, E, j(G, H), I)) =? j(U, f(V, W), f(X, j(Y, Z), S)) . Unifier 1 A --> j(f(#6:List, #7:List), f(#8:List, 1, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, 1, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 2 A --> j(f(#6:List, #7:List), f(#8:List, #9:List, #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, 1, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 3 A --> j(f(#6:List, #7:List), f(#8:List, #9:List, #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, 1, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 4 A --> j(f(#6:List, #7:List), f(#8:List, j(#9:List, #10:List), #11:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, 1, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 5 A --> j(f(#7:List, #8:List), f(#9:List, 1, #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, #5:List, #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> 1 S --> #10:List Unifier 6 A --> j(f(#7:List, #8:List), f(#9:List, #10:List, #11:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, #5:List, #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> 1 S --> #11:List Unifier 7 A --> j(f(#7:List, #8:List), f(#9:List, #10:List, #11:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, #5:List, #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> #10:List S --> #11:List Unifier 8 A --> j(f(#7:List, #8:List), f(#9:List, j(#10:List, #11:List), #12:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, #5:List, #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> #11:List S --> #12:List Unifier 9 A --> j(f(#7:List, #8:List), f(#9:List, 1, #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, #5:List, #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> 1 S --> #10:List Unifier 10 A --> j(f(#7:List, #8:List), f(#9:List, #10:List, #11:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, #5:List, #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> 1 S --> #11:List Unifier 11 A --> j(f(#7:List, #8:List), f(#9:List, #10:List, #11:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, #5:List, #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> #10:List S --> #11:List Unifier 12 A --> j(f(#7:List, #8:List), f(#9:List, j(#10:List, #11:List), #12:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, #5:List, #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> #11:List S --> #12:List Unifier 13 A --> j(f(#8:List, #9:List), f(#10:List, 1, #11:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List)) V --> #8:List W --> #9:List X --> #10:List Z --> 1 Y --> 1 S --> #11:List Unifier 14 A --> j(f(#8:List, #9:List), f(#10:List, #11:List, #12:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List)) V --> #8:List W --> #9:List X --> #10:List Z --> #11:List Y --> 1 S --> #12:List Unifier 15 A --> j(f(#8:List, #9:List), f(#10:List, #11:List, #12:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List)) V --> #8:List W --> #9:List X --> #10:List Z --> 1 Y --> #11:List S --> #12:List Unifier 16 A --> j(f(#8:List, #9:List), f(#10:List, j(#11:List, #12:List), #13:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List)) V --> #8:List W --> #9:List X --> #10:List Z --> #11:List Y --> #12:List S --> #13:List Unifier 17 A --> j(f(#6:List, #7:List), f(#8:List, 1, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, 1, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 18 A --> j(f(#6:List, #7:List), f(#8:List, #9:List, #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, 1, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 19 A --> j(f(#6:List, #7:List), f(#8:List, #9:List, #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, 1, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 20 A --> j(f(#6:List, #7:List), f(#8:List, j(#9:List, #10:List), #11:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, 1, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 21 A --> j(f(#7:List, #8:List), f(#9:List, 1, #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, #5:List, #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> 1 S --> #10:List Unifier 22 A --> j(f(#7:List, #8:List), f(#9:List, #10:List, #11:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, #5:List, #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> 1 S --> #11:List Unifier 23 A --> j(f(#7:List, #8:List), f(#9:List, #10:List, #11:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, #5:List, #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> #10:List S --> #11:List Unifier 24 A --> j(f(#7:List, #8:List), f(#9:List, j(#10:List, #11:List), #12:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, #5:List, #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> #11:List S --> #12:List Unifier 25 A --> j(f(#7:List, #8:List), f(#9:List, 1, #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, #5:List, #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> 1 S --> #10:List Unifier 26 A --> j(f(#7:List, #8:List), f(#9:List, #10:List, #11:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, #5:List, #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> 1 S --> #11:List Unifier 27 A --> j(f(#7:List, #8:List), f(#9:List, #10:List, #11:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, #5:List, #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> #10:List S --> #11:List Unifier 28 A --> j(f(#7:List, #8:List), f(#9:List, j(#10:List, #11:List), #12:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, #5:List, #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> #11:List S --> #12:List Unifier 29 A --> j(f(#8:List, #9:List), f(#10:List, 1, #11:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List)) V --> #8:List W --> #9:List X --> #10:List Z --> 1 Y --> 1 S --> #11:List Unifier 30 A --> j(f(#8:List, #9:List), f(#10:List, #11:List, #12:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List)) V --> #8:List W --> #9:List X --> #10:List Z --> #11:List Y --> 1 S --> #12:List Unifier 31 A --> j(f(#8:List, #9:List), f(#10:List, #11:List, #12:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List)) V --> #8:List W --> #9:List X --> #10:List Z --> 1 Y --> #11:List S --> #12:List Unifier 32 A --> j(f(#8:List, #9:List), f(#10:List, j(#11:List, #12:List), #13:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List)) V --> #8:List W --> #9:List X --> #10:List Z --> #11:List Y --> #12:List S --> #13:List Unifier 33 A --> j(#10:List, f(#6:List, #7:List), f(#8:List, 1, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, 1, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 34 A --> j(#11:List, f(#6:List, #7:List), f(#8:List, #9:List, #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#11:List, f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, 1, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 35 A --> j(#11:List, f(#6:List, #7:List), f(#8:List, #9:List, #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#11:List, f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, 1, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 36 A --> j(#12:List, f(#6:List, #7:List), f(#8:List, j(#9:List, #10:List), #11:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#12:List, f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, 1, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 37 A --> j(#11:List, f(#7:List, #8:List), f(#9:List, 1, #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#11:List, f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, #5:List, #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> 1 S --> #10:List Unifier 38 A --> j(#12:List, f(#7:List, #8:List), f(#9:List, #10:List, #11:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#12:List, f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, #5:List, #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> 1 S --> #11:List Unifier 39 A --> j(#12:List, f(#7:List, #8:List), f(#9:List, #10:List, #11:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#12:List, f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, #5:List, #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> #10:List S --> #11:List Unifier 40 A --> j(#13:List, f(#7:List, #8:List), f(#9:List, j(#10:List, #11:List), #12:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#13:List, f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, #5:List, #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> #11:List S --> #12:List Unifier 41 A --> j(#11:List, f(#7:List, #8:List), f(#9:List, 1, #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#11:List, f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, #5:List, #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> 1 S --> #10:List Unifier 42 A --> j(#12:List, f(#7:List, #8:List), f(#9:List, #10:List, #11:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#12:List, f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, #5:List, #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> 1 S --> #11:List Unifier 43 A --> j(#12:List, f(#7:List, #8:List), f(#9:List, #10:List, #11:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#12:List, f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, #5:List, #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> #10:List S --> #11:List Unifier 44 A --> j(#13:List, f(#7:List, #8:List), f(#9:List, j(#10:List, #11:List), #12:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#13:List, f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, #5:List, #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> #11:List S --> #12:List Unifier 45 A --> j(#12:List, f(#8:List, #9:List), f(#10:List, 1, #11:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#12:List, f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List)) V --> #8:List W --> #9:List X --> #10:List Z --> 1 Y --> 1 S --> #11:List Unifier 46 A --> j(#13:List, f(#8:List, #9:List), f(#10:List, #11:List, #12:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#13:List, f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List)) V --> #8:List W --> #9:List X --> #10:List Z --> #11:List Y --> 1 S --> #12:List Unifier 47 A --> j(#13:List, f(#8:List, #9:List), f(#10:List, #11:List, #12:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#13:List, f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List)) V --> #8:List W --> #9:List X --> #10:List Z --> 1 Y --> #11:List S --> #12:List Unifier 48 A --> j(#14:List, f(#8:List, #9:List), f(#10:List, j(#11:List, #12:List), #13:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#14:List, f(#1:List, #2:Elt, #3:List), f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List)) V --> #8:List W --> #9:List X --> #10:List Z --> #11:List Y --> #12:List S --> #13:List Unifier 49 A --> f(#6:List, 1, #7:List) B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #2:Elt, 1, #4:List) V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 50 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #2:Elt, 1, #4:List) V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 51 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #2:Elt, 1, #4:List) V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 52 A --> f(#6:List, j(#7:List, #8:List), #9:List) B --> #1:List E --> #2:Elt C --> f(#10:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #2:Elt, 1, #4:List) V --> f(#1:List, #2:Elt, #10:List) W --> #5:List X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 53 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 54 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 55 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 56 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> f(#11:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> f(#1:List, #2:Elt, #11:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 57 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 58 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 59 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 60 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> f(#11:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> f(#1:List, #2:Elt, #11:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 61 A --> f(#8:List, 1, #9:List) B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List) V --> f(#1:List, #2:Elt, #10:List) W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 62 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> f(#11:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List) V --> f(#1:List, #2:Elt, #11:List) W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 63 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> f(#11:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List) V --> f(#1:List, #2:Elt, #11:List) W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 64 A --> f(#8:List, j(#9:List, #10:List), #11:List) B --> #1:List E --> #2:Elt C --> f(#12:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List) V --> f(#1:List, #2:Elt, #12:List) W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 65 A --> f(#6:List, 1, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#4:List, #2:Elt, 1, #5:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 66 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#4:List, #2:Elt, 1, #5:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 67 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#4:List, #2:Elt, 1, #5:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 68 A --> f(#6:List, j(#7:List, #8:List), #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#4:List, #2:Elt, 1, #5:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 69 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 70 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 71 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 72 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 73 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 74 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 75 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 76 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 77 A --> f(#8:List, 1, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 78 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 79 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 80 A --> f(#8:List, j(#9:List, #10:List), #11:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 81 A --> f(#6:List, 1, #7:List) B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #1:Elt, 1, #4:List) V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 82 A --> f(#6:List, #7:List, #8:List) B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #1:Elt, 1, #4:List) V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 83 A --> f(#6:List, #7:List, #8:List) B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #1:Elt, 1, #4:List) V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 84 A --> f(#6:List, j(#7:List, #8:List), #9:List) B --> f(#5:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #1:Elt, 1, #4:List) V --> #5:List W --> f(#10:List, #1:Elt, #2:List) X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 85 A --> f(#7:List, 1, #8:List) B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 86 A --> f(#7:List, #8:List, #9:List) B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 87 A --> f(#7:List, #8:List, #9:List) B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 88 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> f(#6:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> f(#11:List, #1:Elt, #2:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 89 A --> f(#7:List, 1, #8:List) B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 90 A --> f(#7:List, #8:List, #9:List) B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 91 A --> f(#7:List, #8:List, #9:List) B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 92 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> f(#6:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> f(#11:List, #1:Elt, #2:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 93 A --> f(#8:List, 1, #9:List) B --> f(#7:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> f(#10:List, #1:Elt, #2:List) X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 94 A --> f(#8:List, #9:List, #10:List) B --> f(#7:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> f(#11:List, #1:Elt, #2:List) X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 95 A --> f(#8:List, #9:List, #10:List) B --> f(#7:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> f(#11:List, #1:Elt, #2:List) X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 96 A --> f(#8:List, j(#9:List, #10:List), #11:List) B --> f(#7:List, #12:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> f(#12:List, #1:Elt, #2:List) X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 97 A --> f(#6:List, 1, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#4:List, #2:Elt, 1, #5:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 98 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#4:List, #2:Elt, 1, #5:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 99 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#4:List, #2:Elt, 1, #5:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 100 A --> f(#6:List, j(#7:List, #8:List), #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#4:List, #2:Elt, 1, #5:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 101 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 102 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 103 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 104 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 105 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 106 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 107 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 108 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 109 A --> f(#8:List, 1, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 110 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 111 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 112 A --> f(#8:List, j(#9:List, #10:List), #11:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 113 A --> f(#6:List, 1, #7:List) B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #2:Elt, 1, #4:List) V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 114 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #2:Elt, 1, #4:List) V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 115 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #2:Elt, 1, #4:List) V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 116 A --> f(#6:List, j(#7:List, #8:List), #9:List) B --> #1:List E --> #2:Elt C --> f(#10:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #2:Elt, 1, #4:List) V --> f(#1:List, #2:Elt, #10:List) W --> #5:List X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 117 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 118 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 119 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 120 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> f(#11:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> f(#1:List, #2:Elt, #11:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 121 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 122 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 123 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 124 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> f(#11:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> f(#1:List, #2:Elt, #11:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 125 A --> f(#8:List, 1, #9:List) B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List) V --> f(#1:List, #2:Elt, #10:List) W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 126 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> f(#11:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List) V --> f(#1:List, #2:Elt, #11:List) W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 127 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> f(#11:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List) V --> f(#1:List, #2:Elt, #11:List) W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 128 A --> f(#8:List, j(#9:List, #10:List), #11:List) B --> #1:List E --> #2:Elt C --> f(#12:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List) V --> f(#1:List, #2:Elt, #12:List) W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 129 A --> j(#8:List, f(#6:List, 1, #7:List)) B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> j(#8:List, f(#3:List, #2:Elt, 1, #4:List)) V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 130 A --> j(#9:List, f(#6:List, #7:List, #8:List)) B --> #1:List E --> #2:Elt C --> f(#10:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> j(#9:List, f(#3:List, #2:Elt, 1, #4:List)) V --> f(#1:List, #2:Elt, #10:List) W --> #5:List X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 131 A --> j(#9:List, f(#6:List, #7:List, #8:List)) B --> #1:List E --> #2:Elt C --> f(#10:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> j(#9:List, f(#3:List, #2:Elt, 1, #4:List)) V --> f(#1:List, #2:Elt, #10:List) W --> #5:List X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 132 A --> j(#10:List, f(#6:List, j(#7:List, #8:List), #9:List)) B --> #1:List E --> #2:Elt C --> f(#11:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> j(#10:List, f(#3:List, #2:Elt, 1, #4:List)) V --> f(#1:List, #2:Elt, #11:List) W --> #5:List X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 133 A --> j(#9:List, f(#7:List, 1, #8:List)) B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> j(#9:List, f(#3:List, #2:Elt, #4:List, #5:List)) V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 134 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> f(#11:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> j(#10:List, f(#3:List, #2:Elt, #4:List, #5:List)) V --> f(#1:List, #2:Elt, #11:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 135 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> f(#11:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> j(#10:List, f(#3:List, #2:Elt, #4:List, #5:List)) V --> f(#1:List, #2:Elt, #11:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 136 A --> j(#11:List, f(#7:List, j(#8:List, #9:List), #10:List)) B --> #1:List E --> #2:Elt C --> f(#12:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> j(#11:List, f(#3:List, #2:Elt, #4:List, #5:List)) V --> f(#1:List, #2:Elt, #12:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 137 A --> j(#9:List, f(#7:List, 1, #8:List)) B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> j(#9:List, f(#3:List, #2:Elt, #4:List, #5:List)) V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 138 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> f(#11:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> j(#10:List, f(#3:List, #2:Elt, #4:List, #5:List)) V --> f(#1:List, #2:Elt, #11:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 139 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> f(#11:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> j(#10:List, f(#3:List, #2:Elt, #4:List, #5:List)) V --> f(#1:List, #2:Elt, #11:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 140 A --> j(#11:List, f(#7:List, j(#8:List, #9:List), #10:List)) B --> #1:List E --> #2:Elt C --> f(#12:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> j(#11:List, f(#3:List, #2:Elt, #4:List, #5:List)) V --> f(#1:List, #2:Elt, #12:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 141 A --> j(#10:List, f(#8:List, 1, #9:List)) B --> #1:List E --> #2:Elt C --> f(#11:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> j(#10:List, f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List)) V --> f(#1:List, #2:Elt, #11:List) W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 142 A --> j(#11:List, f(#8:List, #9:List, #10:List)) B --> #1:List E --> #2:Elt C --> f(#12:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> j(#11:List, f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List)) V --> f(#1:List, #2:Elt, #12:List) W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 143 A --> j(#11:List, f(#8:List, #9:List, #10:List)) B --> #1:List E --> #2:Elt C --> f(#12:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> j(#11:List, f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List)) V --> f(#1:List, #2:Elt, #12:List) W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 144 A --> j(#12:List, f(#8:List, j(#9:List, #10:List), #11:List)) B --> #1:List E --> #2:Elt C --> f(#13:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> j(#12:List, f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List)) V --> f(#1:List, #2:Elt, #13:List) W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 145 A --> f(#6:List, 1, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#4:List, #2:Elt, 1, #5:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 146 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#4:List, #2:Elt, 1, #5:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 147 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#4:List, #2:Elt, 1, #5:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 148 A --> f(#6:List, j(#7:List, #8:List), #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#4:List, #2:Elt, 1, #5:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 149 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 150 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 151 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 152 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 153 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 154 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 155 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 156 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 157 A --> f(#8:List, 1, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 158 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 159 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 160 A --> f(#8:List, j(#9:List, #10:List), #11:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List) V --> f(#1:List, #2:Elt) W --> #3:List X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 161 A --> j(#8:List, f(#6:List, 1, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#8:List, f(#4:List, #2:Elt, 1, #5:List)) V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 162 A --> j(#9:List, f(#6:List, #7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#9:List, f(#4:List, #2:Elt, 1, #5:List)) V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 163 A --> j(#9:List, f(#6:List, #7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#9:List, f(#4:List, #2:Elt, 1, #5:List)) V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 164 A --> j(#10:List, f(#6:List, j(#7:List, #8:List), #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#10:List, f(#4:List, #2:Elt, 1, #5:List)) V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 165 A --> j(#9:List, f(#7:List, 1, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#9:List, f(#4:List, #2:Elt, #5:List, #6:List)) V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 166 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#10:List, f(#4:List, #2:Elt, #5:List, #6:List)) V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 167 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#10:List, f(#4:List, #2:Elt, #5:List, #6:List)) V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 168 A --> j(#11:List, f(#7:List, j(#8:List, #9:List), #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#11:List, f(#4:List, #2:Elt, #5:List, #6:List)) V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 169 A --> j(#9:List, f(#7:List, 1, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#9:List, f(#4:List, #2:Elt, #5:List, #6:List)) V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 170 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#10:List, f(#4:List, #2:Elt, #5:List, #6:List)) V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 171 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#10:List, f(#4:List, #2:Elt, #5:List, #6:List)) V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 172 A --> j(#11:List, f(#7:List, j(#8:List, #9:List), #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#11:List, f(#4:List, #2:Elt, #5:List, #6:List)) V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 173 A --> j(#10:List, f(#8:List, 1, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#10:List, f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List)) V --> f(#1:List, #2:Elt) W --> #3:List X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 174 A --> j(#11:List, f(#8:List, #9:List, #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#11:List, f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List)) V --> f(#1:List, #2:Elt) W --> #3:List X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 175 A --> j(#11:List, f(#8:List, #9:List, #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#11:List, f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List)) V --> f(#1:List, #2:Elt) W --> #3:List X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 176 A --> j(#12:List, f(#8:List, j(#9:List, #10:List), #11:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#12:List, f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List)) V --> f(#1:List, #2:Elt) W --> #3:List X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 177 A --> f(#6:List, 1, #7:List) B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #1:Elt, 1, #4:List) V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 178 A --> f(#6:List, #7:List, #8:List) B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #1:Elt, 1, #4:List) V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 179 A --> f(#6:List, #7:List, #8:List) B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #1:Elt, 1, #4:List) V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 180 A --> f(#6:List, j(#7:List, #8:List), #9:List) B --> f(#5:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #1:Elt, 1, #4:List) V --> #5:List W --> f(#10:List, #1:Elt, #2:List) X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 181 A --> f(#7:List, 1, #8:List) B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 182 A --> f(#7:List, #8:List, #9:List) B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 183 A --> f(#7:List, #8:List, #9:List) B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 184 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> f(#6:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> f(#11:List, #1:Elt, #2:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 185 A --> f(#7:List, 1, #8:List) B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 186 A --> f(#7:List, #8:List, #9:List) B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 187 A --> f(#7:List, #8:List, #9:List) B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 188 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> f(#6:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> f(#11:List, #1:Elt, #2:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 189 A --> f(#8:List, 1, #9:List) B --> f(#7:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> f(#10:List, #1:Elt, #2:List) X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 190 A --> f(#8:List, #9:List, #10:List) B --> f(#7:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> f(#11:List, #1:Elt, #2:List) X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 191 A --> f(#8:List, #9:List, #10:List) B --> f(#7:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> f(#11:List, #1:Elt, #2:List) X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 192 A --> f(#8:List, j(#9:List, #10:List), #11:List) B --> f(#7:List, #12:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> f(#12:List, #1:Elt, #2:List) X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 193 A --> j(#8:List, f(#6:List, 1, #7:List)) B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> j(#8:List, f(#3:List, #1:Elt, 1, #4:List)) V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 194 A --> j(#9:List, f(#6:List, #7:List, #8:List)) B --> f(#5:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> j(#9:List, f(#3:List, #1:Elt, 1, #4:List)) V --> #5:List W --> f(#10:List, #1:Elt, #2:List) X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 195 A --> j(#9:List, f(#6:List, #7:List, #8:List)) B --> f(#5:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> j(#9:List, f(#3:List, #1:Elt, 1, #4:List)) V --> #5:List W --> f(#10:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 196 A --> j(#10:List, f(#6:List, j(#7:List, #8:List), #9:List)) B --> f(#5:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> j(#10:List, f(#3:List, #1:Elt, 1, #4:List)) V --> #5:List W --> f(#11:List, #1:Elt, #2:List) X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 197 A --> j(#9:List, f(#7:List, 1, #8:List)) B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> j(#9:List, f(#3:List, #1:Elt, #4:List, #5:List)) V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 198 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> f(#6:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> j(#10:List, f(#3:List, #1:Elt, #4:List, #5:List)) V --> #6:List W --> f(#11:List, #1:Elt, #2:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 199 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> f(#6:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> j(#10:List, f(#3:List, #1:Elt, #4:List, #5:List)) V --> #6:List W --> f(#11:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 200 A --> j(#11:List, f(#7:List, j(#8:List, #9:List), #10:List)) B --> f(#6:List, #12:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> j(#11:List, f(#3:List, #1:Elt, #4:List, #5:List)) V --> #6:List W --> f(#12:List, #1:Elt, #2:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 201 A --> j(#9:List, f(#7:List, 1, #8:List)) B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> j(#9:List, f(#3:List, #1:Elt, #4:List, #5:List)) V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 202 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> f(#6:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> j(#10:List, f(#3:List, #1:Elt, #4:List, #5:List)) V --> #6:List W --> f(#11:List, #1:Elt, #2:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 203 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> f(#6:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> j(#10:List, f(#3:List, #1:Elt, #4:List, #5:List)) V --> #6:List W --> f(#11:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 204 A --> j(#11:List, f(#7:List, j(#8:List, #9:List), #10:List)) B --> f(#6:List, #12:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> j(#11:List, f(#3:List, #1:Elt, #4:List, #5:List)) V --> #6:List W --> f(#12:List, #1:Elt, #2:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 205 A --> j(#10:List, f(#8:List, 1, #9:List)) B --> f(#7:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> j(#10:List, f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List)) V --> #7:List W --> f(#11:List, #1:Elt, #2:List) X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 206 A --> j(#11:List, f(#8:List, #9:List, #10:List)) B --> f(#7:List, #12:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> j(#11:List, f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List)) V --> #7:List W --> f(#12:List, #1:Elt, #2:List) X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 207 A --> j(#11:List, f(#8:List, #9:List, #10:List)) B --> f(#7:List, #12:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> j(#11:List, f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List)) V --> #7:List W --> f(#12:List, #1:Elt, #2:List) X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 208 A --> j(#12:List, f(#8:List, j(#9:List, #10:List), #11:List)) B --> f(#7:List, #13:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> j(#12:List, f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List)) V --> #7:List W --> f(#13:List, #1:Elt, #2:List) X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 209 A --> f(#6:List, 1, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#4:List, #2:Elt, 1, #5:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 210 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#4:List, #2:Elt, 1, #5:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 211 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#4:List, #2:Elt, 1, #5:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 212 A --> f(#6:List, j(#7:List, #8:List), #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#4:List, #2:Elt, 1, #5:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 213 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 214 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 215 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 216 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 217 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 218 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 219 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 220 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 221 A --> f(#8:List, 1, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 222 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 223 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 224 A --> f(#8:List, j(#9:List, #10:List), #11:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List) V --> #1:List W --> f(#2:Elt, #3:List) X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 225 A --> j(#8:List, f(#6:List, 1, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#8:List, f(#4:List, #2:Elt, 1, #5:List)) V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 226 A --> j(#9:List, f(#6:List, #7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#9:List, f(#4:List, #2:Elt, 1, #5:List)) V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 227 A --> j(#9:List, f(#6:List, #7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#9:List, f(#4:List, #2:Elt, 1, #5:List)) V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 228 A --> j(#10:List, f(#6:List, j(#7:List, #8:List), #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#10:List, f(#4:List, #2:Elt, 1, #5:List)) V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 229 A --> j(#9:List, f(#7:List, 1, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#9:List, f(#4:List, #2:Elt, #5:List, #6:List)) V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 230 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#10:List, f(#4:List, #2:Elt, #5:List, #6:List)) V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 231 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#10:List, f(#4:List, #2:Elt, #5:List, #6:List)) V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 232 A --> j(#11:List, f(#7:List, j(#8:List, #9:List), #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#11:List, f(#4:List, #2:Elt, #5:List, #6:List)) V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 233 A --> j(#9:List, f(#7:List, 1, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#9:List, f(#4:List, #2:Elt, #5:List, #6:List)) V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 234 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#10:List, f(#4:List, #2:Elt, #5:List, #6:List)) V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 235 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#10:List, f(#4:List, #2:Elt, #5:List, #6:List)) V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 236 A --> j(#11:List, f(#7:List, j(#8:List, #9:List), #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#11:List, f(#4:List, #2:Elt, #5:List, #6:List)) V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 237 A --> j(#10:List, f(#8:List, 1, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#10:List, f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List)) V --> #1:List W --> f(#2:Elt, #3:List) X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 238 A --> j(#11:List, f(#8:List, #9:List, #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#11:List, f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List)) V --> #1:List W --> f(#2:Elt, #3:List) X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 239 A --> j(#11:List, f(#8:List, #9:List, #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#11:List, f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List)) V --> #1:List W --> f(#2:Elt, #3:List) X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 240 A --> j(#12:List, f(#8:List, j(#9:List, #10:List), #11:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#12:List, f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List)) V --> #1:List W --> f(#2:Elt, #3:List) X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 241 A --> f(#6:List, 1, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#8:List, #5:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, 1, #8:List) W --> #5:List X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 242 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#9:List, #5:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, 1, #9:List) W --> #5:List X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 243 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#9:List, #5:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, 1, #9:List) W --> #5:List X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 244 A --> f(#6:List, j(#7:List, #8:List), #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#10:List, #5:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, 1, #10:List) W --> #5:List X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 245 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#9:List, #6:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List, #9:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 246 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#10:List, #6:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List, #10:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 247 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#10:List, #6:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List, #10:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 248 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#11:List, #6:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List, #11:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 249 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#9:List, #6:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List, #9:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 250 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#10:List, #6:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List, #10:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 251 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#10:List, #6:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List, #10:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 252 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#11:List, #6:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List, #11:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 253 A --> f(#8:List, 1, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#10:List, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, j(#5:List, #6:List), #10:List) W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 254 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#11:List, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, j(#5:List, #6:List), #11:List) W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 255 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#11:List, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, j(#5:List, #6:List), #11:List) W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 256 A --> f(#8:List, j(#9:List, #10:List), #11:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#12:List, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, j(#5:List, #6:List), #12:List) W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 257 A --> f(#6:List, 1, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, #9:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #8:List) W --> f(#9:List, #5:List) X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 258 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#9:List, #10:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #9:List) W --> f(#10:List, #5:List) X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 259 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#9:List, #10:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #9:List) W --> f(#10:List, #5:List) X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 260 A --> f(#6:List, j(#7:List, #8:List), #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#10:List, #11:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #10:List) W --> f(#11:List, #5:List) X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 261 A --> f(#6:List, 1, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, #9:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #8:List) W --> f(#9:List, #5:List) X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 262 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#9:List, #10:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #9:List) W --> f(#10:List, #5:List) X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 263 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#9:List, #10:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #9:List) W --> f(#10:List, #5:List) X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 264 A --> f(#6:List, j(#7:List, #8:List), #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#10:List, #11:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #10:List) W --> f(#11:List, #5:List) X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 265 A --> f(#6:List, 1, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, 1) W --> #5:List X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 266 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, 1) W --> #5:List X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 267 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, 1) W --> #5:List X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 268 A --> f(#6:List, j(#7:List, #8:List), #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, 1) W --> #5:List X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 269 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 270 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 271 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 272 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 273 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 274 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 275 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 276 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 277 A --> f(#8:List, 1, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, j(#5:List, #6:List)) W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 278 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, j(#5:List, #6:List)) W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 279 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, j(#5:List, #6:List)) W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 280 A --> f(#8:List, j(#9:List, #10:List), #11:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, j(#5:List, #6:List)) W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 281 A --> f(#6:List, 1, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(1, #5:List) X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 282 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(1, #5:List) X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 283 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(1, #5:List) X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 284 A --> f(#6:List, j(#7:List, #8:List), #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(1, #5:List) X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 285 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 286 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 287 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 288 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 289 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 290 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 291 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 292 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 293 A --> f(#8:List, 1, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(j(#5:List, #6:List), #7:List) X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 294 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(j(#5:List, #6:List), #7:List) X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 295 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(j(#5:List, #6:List), #7:List) X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 296 A --> f(#8:List, j(#9:List, #10:List), #11:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(j(#5:List, #6:List), #7:List) X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 297 A --> f(#6:List, 1, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #8:List) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> f(#8:List, #2:Elt, 1, #4:List) X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 298 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #9:List) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> f(#9:List, #2:Elt, 1, #4:List) X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 299 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #9:List) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> f(#9:List, #2:Elt, 1, #4:List) X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 300 A --> f(#6:List, j(#7:List, #8:List), #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #10:List) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> f(#10:List, #2:Elt, 1, #4:List) X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 301 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #9:List) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> f(#9:List, #2:Elt, #4:List, #5:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 302 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #10:List) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> f(#10:List, #2:Elt, #4:List, #5:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 303 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #10:List) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> f(#10:List, #2:Elt, #4:List, #5:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 304 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #11:List) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> f(#11:List, #2:Elt, #4:List, #5:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 305 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #9:List) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> f(#9:List, #2:Elt, #4:List, #5:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 306 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #10:List) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> f(#10:List, #2:Elt, #4:List, #5:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 307 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #10:List) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> f(#10:List, #2:Elt, #4:List, #5:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 308 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #11:List) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> f(#11:List, #2:Elt, #4:List, #5:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 309 A --> f(#8:List, 1, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #10:List) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> f(#10:List, #2:Elt, j(#4:List, #5:List), #6:List) X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 310 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #11:List) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> f(#11:List, #2:Elt, j(#4:List, #5:List), #6:List) X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 311 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #11:List) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> f(#11:List, #2:Elt, j(#4:List, #5:List), #6:List) X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 312 A --> f(#8:List, j(#9:List, #10:List), #11:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #12:List) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> f(#12:List, #2:Elt, j(#4:List, #5:List), #6:List) X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 313 A --> f(#6:List, 1, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, 1, #5:List) X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 314 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, 1, #5:List) X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 315 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, 1, #5:List) X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 316 A --> f(#6:List, j(#7:List, #8:List), #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, 1, #5:List) X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 317 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 318 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 319 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 320 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 321 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 322 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 323 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 324 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 325 A --> f(#8:List, 1, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, j(#5:List, #6:List), #7:List) X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 326 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, j(#5:List, #6:List), #7:List) X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 327 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, j(#5:List, #6:List), #7:List) X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 328 A --> f(#8:List, j(#9:List, #10:List), #11:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, j(#5:List, #6:List), #7:List) X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 329 A --> f(#6:List, 1, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#8:List, #5:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, 1, #8:List) W --> #5:List X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 330 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#9:List, #5:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, 1, #9:List) W --> #5:List X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 331 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#9:List, #5:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, 1, #9:List) W --> #5:List X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 332 A --> f(#6:List, j(#7:List, #8:List), #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#10:List, #5:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, 1, #10:List) W --> #5:List X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 333 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#9:List, #6:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List, #9:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 334 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#10:List, #6:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List, #10:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 335 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#10:List, #6:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List, #10:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 336 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#11:List, #6:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List, #11:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 337 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#9:List, #6:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List, #9:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 338 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#10:List, #6:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List, #10:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 339 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#10:List, #6:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List, #10:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 340 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#11:List, #6:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List, #11:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 341 A --> f(#8:List, 1, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#10:List, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, j(#5:List, #6:List), #10:List) W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 342 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#11:List, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, j(#5:List, #6:List), #11:List) W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 343 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#11:List, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, j(#5:List, #6:List), #11:List) W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 344 A --> f(#8:List, j(#9:List, #10:List), #11:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#12:List, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, j(#5:List, #6:List), #12:List) W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 345 A --> j(#8:List, f(#6:List, 1, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#9:List, #5:List) U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, 1, #9:List) W --> #5:List X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 346 A --> j(#9:List, f(#6:List, #7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#10:List, #5:List) U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, 1, #10:List) W --> #5:List X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 347 A --> j(#9:List, f(#6:List, #7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#10:List, #5:List) U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, 1, #10:List) W --> #5:List X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 348 A --> j(#10:List, f(#6:List, j(#7:List, #8:List), #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#11:List, #5:List) U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, 1, #11:List) W --> #5:List X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 349 A --> j(#9:List, f(#7:List, 1, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#10:List, #6:List) U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, #5:List, #10:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 350 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#11:List, #6:List) U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, #5:List, #11:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 351 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#11:List, #6:List) U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, #5:List, #11:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 352 A --> j(#11:List, f(#7:List, j(#8:List, #9:List), #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#12:List, #6:List) U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, #5:List, #12:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 353 A --> j(#9:List, f(#7:List, 1, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#10:List, #6:List) U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, #5:List, #10:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 354 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#11:List, #6:List) U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, #5:List, #11:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 355 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#11:List, #6:List) U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, #5:List, #11:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 356 A --> j(#11:List, f(#7:List, j(#8:List, #9:List), #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#12:List, #6:List) U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, #5:List, #12:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 357 A --> j(#10:List, f(#8:List, 1, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#11:List, #7:List) U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, j(#5:List, #6:List), #11:List) W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 358 A --> j(#11:List, f(#8:List, #9:List, #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#12:List, #7:List) U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, j(#5:List, #6:List), #12:List) W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 359 A --> j(#11:List, f(#8:List, #9:List, #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#12:List, #7:List) U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, j(#5:List, #6:List), #12:List) W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 360 A --> j(#12:List, f(#8:List, j(#9:List, #10:List), #11:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#13:List, #7:List) U --> j(#12:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, j(#5:List, #6:List), #13:List) W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 361 A --> f(#6:List, 1, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, #9:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #8:List) W --> f(#9:List, #5:List) X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 362 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#9:List, #10:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #9:List) W --> f(#10:List, #5:List) X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 363 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#9:List, #10:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #9:List) W --> f(#10:List, #5:List) X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 364 A --> f(#6:List, j(#7:List, #8:List), #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#10:List, #11:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #10:List) W --> f(#11:List, #5:List) X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 365 A --> j(#8:List, f(#6:List, 1, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#9:List, #10:List) G --> 1 I --> #5:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, #9:List) W --> f(#10:List, #5:List) X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 366 A --> j(#9:List, f(#6:List, #7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#10:List, #11:List) G --> 1 I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, #10:List) W --> f(#11:List, #5:List) X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 367 A --> j(#9:List, f(#6:List, #7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#10:List, #11:List) G --> 1 I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, #10:List) W --> f(#11:List, #5:List) X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 368 A --> j(#10:List, f(#6:List, j(#7:List, #8:List), #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#11:List, #12:List) G --> 1 I --> #5:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, #11:List) W --> f(#12:List, #5:List) X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 369 A --> f(#6:List, 1, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, #9:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #8:List) W --> f(#9:List, #5:List) X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 370 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#9:List, #10:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #9:List) W --> f(#10:List, #5:List) X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 371 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#9:List, #10:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #9:List) W --> f(#10:List, #5:List) X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 372 A --> f(#6:List, j(#7:List, #8:List), #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#10:List, #11:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #10:List) W --> f(#11:List, #5:List) X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 373 A --> j(#8:List, f(#6:List, 1, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#9:List, #10:List) I --> #5:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, #9:List) W --> f(#10:List, #5:List) X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 374 A --> j(#9:List, f(#6:List, #7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#10:List, #11:List) I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, #10:List) W --> f(#11:List, #5:List) X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 375 A --> j(#9:List, f(#6:List, #7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#10:List, #11:List) I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, #10:List) W --> f(#11:List, #5:List) X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 376 A --> j(#10:List, f(#6:List, j(#7:List, #8:List), #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#11:List, #12:List) I --> #5:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, #11:List) W --> f(#12:List, #5:List) X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 377 A --> f(#6:List, 1, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, 1) W --> #5:List X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 378 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, 1) W --> #5:List X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 379 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, 1) W --> #5:List X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 380 A --> f(#6:List, j(#7:List, #8:List), #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, 1) W --> #5:List X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 381 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 382 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 383 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 384 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 385 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 386 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 387 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 388 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 389 A --> f(#8:List, 1, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, j(#5:List, #6:List)) W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 390 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, j(#5:List, #6:List)) W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 391 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, j(#5:List, #6:List)) W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 392 A --> f(#8:List, j(#9:List, #10:List), #11:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt, j(#5:List, #6:List)) W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 393 A --> j(#8:List, f(#6:List, 1, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, 1) W --> #5:List X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 394 A --> j(#9:List, f(#6:List, #7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, 1) W --> #5:List X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 395 A --> j(#9:List, f(#6:List, #7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, 1) W --> #5:List X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 396 A --> j(#10:List, f(#6:List, j(#7:List, #8:List), #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, 1) W --> #5:List X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 397 A --> j(#9:List, f(#7:List, 1, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 398 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 399 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 400 A --> j(#11:List, f(#7:List, j(#8:List, #9:List), #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 401 A --> j(#9:List, f(#7:List, 1, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 402 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 403 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 404 A --> j(#11:List, f(#7:List, j(#8:List, #9:List), #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 405 A --> j(#10:List, f(#8:List, 1, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, j(#5:List, #6:List)) W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 406 A --> j(#11:List, f(#8:List, #9:List, #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, j(#5:List, #6:List)) W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 407 A --> j(#11:List, f(#8:List, #9:List, #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, j(#5:List, #6:List)) W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 408 A --> j(#12:List, f(#8:List, j(#9:List, #10:List), #11:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#12:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt, j(#5:List, #6:List)) W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 409 A --> f(#6:List, 1, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(1, #5:List) X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 410 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(1, #5:List) X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 411 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(1, #5:List) X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 412 A --> f(#6:List, j(#7:List, #8:List), #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(1, #5:List) X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 413 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 414 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 415 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 416 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 417 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 418 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 419 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 420 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 421 A --> f(#8:List, 1, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(j(#5:List, #6:List), #7:List) X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 422 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(j(#5:List, #6:List), #7:List) X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 423 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(j(#5:List, #6:List), #7:List) X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 424 A --> f(#8:List, j(#9:List, #10:List), #11:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> f(#4:List, #2:Elt) W --> f(j(#5:List, #6:List), #7:List) X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 425 A --> j(#8:List, f(#6:List, 1, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt) W --> f(1, #5:List) X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 426 A --> j(#9:List, f(#6:List, #7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt) W --> f(1, #5:List) X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 427 A --> j(#9:List, f(#6:List, #7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt) W --> f(1, #5:List) X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 428 A --> j(#10:List, f(#6:List, j(#7:List, #8:List), #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt) W --> f(1, #5:List) X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 429 A --> j(#9:List, f(#7:List, 1, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 430 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 431 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 432 A --> j(#11:List, f(#7:List, j(#8:List, #9:List), #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 433 A --> j(#9:List, f(#7:List, 1, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 434 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 435 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 436 A --> j(#11:List, f(#7:List, j(#8:List, #9:List), #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 437 A --> j(#10:List, f(#8:List, 1, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt) W --> f(j(#5:List, #6:List), #7:List) X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 438 A --> j(#11:List, f(#8:List, #9:List, #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt) W --> f(j(#5:List, #6:List), #7:List) X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 439 A --> j(#11:List, f(#8:List, #9:List, #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt) W --> f(j(#5:List, #6:List), #7:List) X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 440 A --> j(#12:List, f(#8:List, j(#9:List, #10:List), #11:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#12:List, f(#1:List, #2:Elt, #3:List)) V --> f(#4:List, #2:Elt) W --> f(j(#5:List, #6:List), #7:List) X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 441 A --> f(#6:List, 1, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #8:List) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> f(#8:List, #2:Elt, 1, #4:List) X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 442 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #9:List) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> f(#9:List, #2:Elt, 1, #4:List) X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 443 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #9:List) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> f(#9:List, #2:Elt, 1, #4:List) X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 444 A --> f(#6:List, j(#7:List, #8:List), #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #10:List) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> f(#10:List, #2:Elt, 1, #4:List) X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 445 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #9:List) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> f(#9:List, #2:Elt, #4:List, #5:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 446 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #10:List) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> f(#10:List, #2:Elt, #4:List, #5:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 447 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #10:List) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> f(#10:List, #2:Elt, #4:List, #5:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 448 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #11:List) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> f(#11:List, #2:Elt, #4:List, #5:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 449 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #9:List) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> f(#9:List, #2:Elt, #4:List, #5:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 450 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #10:List) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> f(#10:List, #2:Elt, #4:List, #5:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 451 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #10:List) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> f(#10:List, #2:Elt, #4:List, #5:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 452 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #11:List) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> f(#11:List, #2:Elt, #4:List, #5:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 453 A --> f(#8:List, 1, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #10:List) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> f(#10:List, #2:Elt, j(#4:List, #5:List), #6:List) X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 454 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #11:List) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> f(#11:List, #2:Elt, j(#4:List, #5:List), #6:List) X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 455 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #11:List) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> f(#11:List, #2:Elt, j(#4:List, #5:List), #6:List) X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 456 A --> f(#8:List, j(#9:List, #10:List), #11:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #12:List) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> f(#12:List, #2:Elt, j(#4:List, #5:List), #6:List) X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 457 A --> j(#8:List, f(#6:List, 1, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #9:List) H --> 1 G --> 1 I --> #4:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> f(#9:List, #2:Elt, 1, #4:List) X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 458 A --> j(#9:List, f(#6:List, #7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #10:List) H --> 1 G --> 1 I --> #4:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> f(#10:List, #2:Elt, 1, #4:List) X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 459 A --> j(#9:List, f(#6:List, #7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #10:List) H --> 1 G --> 1 I --> #4:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> f(#10:List, #2:Elt, 1, #4:List) X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 460 A --> j(#10:List, f(#6:List, j(#7:List, #8:List), #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #11:List) H --> 1 G --> 1 I --> #4:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> f(#11:List, #2:Elt, 1, #4:List) X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 461 A --> j(#9:List, f(#7:List, 1, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #10:List) H --> #4:List G --> 1 I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> f(#10:List, #2:Elt, #4:List, #5:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 462 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #11:List) H --> #4:List G --> 1 I --> #5:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> f(#11:List, #2:Elt, #4:List, #5:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 463 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #11:List) H --> #4:List G --> 1 I --> #5:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> f(#11:List, #2:Elt, #4:List, #5:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 464 A --> j(#11:List, f(#7:List, j(#8:List, #9:List), #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #12:List) H --> #4:List G --> 1 I --> #5:List U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> f(#12:List, #2:Elt, #4:List, #5:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 465 A --> j(#9:List, f(#7:List, 1, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #10:List) H --> 1 G --> #4:List I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> f(#10:List, #2:Elt, #4:List, #5:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 466 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #11:List) H --> 1 G --> #4:List I --> #5:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> f(#11:List, #2:Elt, #4:List, #5:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 467 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #11:List) H --> 1 G --> #4:List I --> #5:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> f(#11:List, #2:Elt, #4:List, #5:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 468 A --> j(#11:List, f(#7:List, j(#8:List, #9:List), #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #12:List) H --> 1 G --> #4:List I --> #5:List U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> f(#12:List, #2:Elt, #4:List, #5:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 469 A --> j(#10:List, f(#8:List, 1, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #11:List) H --> #4:List G --> #5:List I --> #6:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> f(#11:List, #2:Elt, j(#4:List, #5:List), #6:List) X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 470 A --> j(#11:List, f(#8:List, #9:List, #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #12:List) H --> #4:List G --> #5:List I --> #6:List U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> f(#12:List, #2:Elt, j(#4:List, #5:List), #6:List) X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 471 A --> j(#11:List, f(#8:List, #9:List, #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #12:List) H --> #4:List G --> #5:List I --> #6:List U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> f(#12:List, #2:Elt, j(#4:List, #5:List), #6:List) X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 472 A --> j(#12:List, f(#8:List, j(#9:List, #10:List), #11:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #13:List) H --> #4:List G --> #5:List I --> #6:List U --> j(#12:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> f(#13:List, #2:Elt, j(#4:List, #5:List), #6:List) X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 473 A --> f(#6:List, 1, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, 1, #5:List) X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 474 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, 1, #5:List) X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 475 A --> f(#6:List, #7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, 1, #5:List) X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 476 A --> f(#6:List, j(#7:List, #8:List), #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, 1, #5:List) X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 477 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 478 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 479 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 480 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 481 A --> f(#7:List, 1, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 482 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 483 A --> f(#7:List, #8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 484 A --> f(#7:List, j(#8:List, #9:List), #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 485 A --> f(#8:List, 1, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, j(#5:List, #6:List), #7:List) X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 486 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, j(#5:List, #6:List), #7:List) X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 487 A --> f(#8:List, #9:List, #10:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, j(#5:List, #6:List), #7:List) X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 488 A --> f(#8:List, j(#9:List, #10:List), #11:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> f(#2:Elt, j(#5:List, #6:List), #7:List) X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 489 A --> j(#8:List, f(#6:List, 1, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #4:List W --> f(#2:Elt, 1, #5:List) X --> #6:List Z --> 1 Y --> 1 S --> #7:List Unifier 490 A --> j(#9:List, f(#6:List, #7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #4:List W --> f(#2:Elt, 1, #5:List) X --> #6:List Z --> #7:List Y --> 1 S --> #8:List Unifier 491 A --> j(#9:List, f(#6:List, #7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #4:List W --> f(#2:Elt, 1, #5:List) X --> #6:List Z --> 1 Y --> #7:List S --> #8:List Unifier 492 A --> j(#10:List, f(#6:List, j(#7:List, #8:List), #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #4:List W --> f(#2:Elt, 1, #5:List) X --> #6:List Z --> #7:List Y --> #8:List S --> #9:List Unifier 493 A --> j(#9:List, f(#7:List, 1, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 494 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 495 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 496 A --> j(#11:List, f(#7:List, j(#8:List, #9:List), #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 497 A --> j(#9:List, f(#7:List, 1, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #7:List Z --> 1 Y --> 1 S --> #8:List Unifier 498 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #7:List Z --> #8:List Y --> 1 S --> #9:List Unifier 499 A --> j(#10:List, f(#7:List, #8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #7:List Z --> 1 Y --> #8:List S --> #9:List Unifier 500 A --> j(#11:List, f(#7:List, j(#8:List, #9:List), #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #7:List Z --> #8:List Y --> #9:List S --> #10:List Unifier 501 A --> j(#10:List, f(#8:List, 1, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #4:List W --> f(#2:Elt, j(#5:List, #6:List), #7:List) X --> #8:List Z --> 1 Y --> 1 S --> #9:List Unifier 502 A --> j(#11:List, f(#8:List, #9:List, #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> #4:List W --> f(#2:Elt, j(#5:List, #6:List), #7:List) X --> #8:List Z --> #9:List Y --> 1 S --> #10:List Unifier 503 A --> j(#11:List, f(#8:List, #9:List, #10:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> #4:List W --> f(#2:Elt, j(#5:List, #6:List), #7:List) X --> #8:List Z --> 1 Y --> #9:List S --> #10:List Unifier 504 A --> j(#12:List, f(#8:List, j(#9:List, #10:List), #11:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#12:List, f(#1:List, #2:Elt, #3:List)) V --> #4:List W --> f(#2:Elt, j(#5:List, #6:List), #7:List) X --> #8:List Z --> #9:List Y --> #10:List S --> #11:List Unifier 505 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> f(#8:List, 1, #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #2:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> 1 S --> #7:List Unifier 506 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List, #8:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #2:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> f(#1:List, #2:Elt, #9:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 507 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List, #8:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #2:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 508 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> f(#10:List, j(#7:List, #8:List), #9:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #2:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> f(#1:List, #2:Elt, #10:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 509 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#9:List, 1, #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> 1 S --> #8:List Unifier 510 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#10:List, #8:List, #9:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt, #10:List) Z --> #8:List Y --> 1 S --> #9:List Unifier 511 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#10:List, #8:List, #9:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt, #10:List) Z --> 1 Y --> #8:List S --> #9:List Unifier 512 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#11:List, j(#8:List, #9:List), #10:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt, #11:List) Z --> #8:List Y --> #9:List S --> #10:List Unifier 513 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#9:List, 1, #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> 1 S --> #8:List Unifier 514 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#10:List, #8:List, #9:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt, #10:List) Z --> #8:List Y --> 1 S --> #9:List Unifier 515 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#10:List, #8:List, #9:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt, #10:List) Z --> 1 Y --> #8:List S --> #9:List Unifier 516 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#11:List, j(#8:List, #9:List), #10:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt, #11:List) Z --> #8:List Y --> #9:List S --> #10:List Unifier 517 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> f(#10:List, 1, #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> f(#1:List, #2:Elt, #10:List) Z --> 1 Y --> 1 S --> #9:List Unifier 518 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> f(#11:List, #9:List, #10:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> f(#1:List, #2:Elt, #11:List) Z --> #9:List Y --> 1 S --> #10:List Unifier 519 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> f(#11:List, #9:List, #10:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> f(#1:List, #2:Elt, #11:List) Z --> 1 Y --> #9:List S --> #10:List Unifier 520 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> f(#12:List, j(#9:List, #10:List), #11:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> f(#1:List, #2:Elt, #12:List) Z --> #9:List Y --> #10:List S --> #11:List Unifier 521 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> f(1, #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #2:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #7:List Unifier 522 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #2:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> f(#1:List, #2:Elt) Z --> #7:List Y --> 1 S --> #8:List Unifier 523 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #2:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> #7:List S --> #8:List Unifier 524 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> f(j(#7:List, #8:List), #9:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #2:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> f(#1:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #9:List Unifier 525 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(1, #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #8:List Unifier 526 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#8:List, #9:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt) Z --> #8:List Y --> 1 S --> #9:List Unifier 527 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#8:List, #9:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> #8:List S --> #9:List Unifier 528 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(j(#8:List, #9:List), #10:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt) Z --> #8:List Y --> #9:List S --> #10:List Unifier 529 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(1, #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #8:List Unifier 530 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#8:List, #9:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt) Z --> #8:List Y --> 1 S --> #9:List Unifier 531 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#8:List, #9:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> #8:List S --> #9:List Unifier 532 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(j(#8:List, #9:List), #10:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt) Z --> #8:List Y --> #9:List S --> #10:List Unifier 533 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> f(1, #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #9:List Unifier 534 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> f(#9:List, #10:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> f(#1:List, #2:Elt) Z --> #9:List Y --> 1 S --> #10:List Unifier 535 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> f(#9:List, #10:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> #9:List S --> #10:List Unifier 536 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> f(j(#9:List, #10:List), #11:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> f(#1:List, #2:Elt) Z --> #9:List Y --> #10:List S --> #11:List Unifier 537 A --> f(#4:List, #5:List) B --> f(#6:List, #8:List) E --> #1:Elt C --> f(#9:List, #7:List) D --> #2:List H --> 1 G --> 1 I --> #3:List U --> f(#2:List, #1:Elt, 1, #3:List) V --> #4:List W --> #5:List X --> #6:List Z --> f(#8:List, #1:Elt, #9:List) Y --> 1 S --> #7:List Unifier 538 A --> f(#5:List, #6:List) B --> f(#7:List, #9:List) E --> #1:Elt C --> f(#10:List, #8:List) D --> #2:List H --> #3:List G --> 1 I --> #4:List U --> f(#2:List, #1:Elt, #3:List, #4:List) V --> #5:List W --> #6:List X --> #7:List Z --> f(#9:List, #1:Elt, #10:List) Y --> 1 S --> #8:List Unifier 539 A --> f(#5:List, #6:List) B --> f(#7:List, #9:List) E --> #1:Elt C --> f(#10:List, #8:List) D --> #2:List H --> 1 G --> #3:List I --> #4:List U --> f(#2:List, #1:Elt, #3:List, #4:List) V --> #5:List W --> #6:List X --> #7:List Z --> f(#9:List, #1:Elt, #10:List) Y --> 1 S --> #8:List Unifier 540 A --> f(#6:List, #7:List) B --> f(#8:List, #10:List) E --> #1:Elt C --> f(#11:List, #9:List) D --> #2:List H --> #3:List G --> #4:List I --> #5:List U --> f(#2:List, #1:Elt, j(#3:List, #4:List), #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> f(#10:List, #1:Elt, #11:List) Y --> 1 S --> #9:List Unifier 541 A --> f(#4:List, #5:List) B --> f(#6:List, #8:List) E --> #1:Elt C --> f(#9:List, #7:List) D --> #2:List H --> 1 G --> 1 I --> #3:List U --> f(#2:List, #1:Elt, 1, #3:List) V --> #4:List W --> #5:List X --> #6:List Z --> 1 Y --> f(#8:List, #1:Elt, #9:List) S --> #7:List Unifier 542 A --> f(#5:List, #6:List) B --> f(#7:List, #9:List) E --> #1:Elt C --> f(#10:List, #8:List) D --> #2:List H --> #3:List G --> 1 I --> #4:List U --> f(#2:List, #1:Elt, #3:List, #4:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> f(#9:List, #1:Elt, #10:List) S --> #8:List Unifier 543 A --> f(#5:List, #6:List) B --> f(#7:List, #9:List) E --> #1:Elt C --> f(#10:List, #8:List) D --> #2:List H --> 1 G --> #3:List I --> #4:List U --> f(#2:List, #1:Elt, #3:List, #4:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> f(#9:List, #1:Elt, #10:List) S --> #8:List Unifier 544 A --> f(#6:List, #7:List) B --> f(#8:List, #10:List) E --> #1:Elt C --> f(#11:List, #9:List) D --> #2:List H --> #3:List G --> #4:List I --> #5:List U --> f(#2:List, #1:Elt, j(#3:List, #4:List), #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> f(#10:List, #1:Elt, #11:List) S --> #9:List Unifier 545 A --> f(#5:List, #6:List) B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #1:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> #7:List Z --> f(#8:List, #1:Elt) Y --> 1 S --> #2:List Unifier 546 A --> f(#6:List, #7:List) B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> f(#9:List, #1:Elt) Y --> 1 S --> #2:List Unifier 547 A --> f(#6:List, #7:List) B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> f(#9:List, #1:Elt) Y --> 1 S --> #2:List Unifier 548 A --> f(#7:List, #8:List) B --> f(#9:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> #9:List Z --> f(#10:List, #1:Elt) Y --> 1 S --> #2:List Unifier 549 A --> f(#5:List, #6:List) B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #1:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> f(#8:List, #1:Elt) S --> #2:List Unifier 550 A --> f(#6:List, #7:List) B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> f(#9:List, #1:Elt) S --> #2:List Unifier 551 A --> f(#6:List, #7:List) B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> f(#9:List, #1:Elt) S --> #2:List Unifier 552 A --> f(#7:List, #8:List) B --> f(#9:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> f(#10:List, #1:Elt) S --> #2:List Unifier 553 A --> f(#5:List, #6:List) B --> f(#7:List, 1, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #1:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 554 A --> f(#5:List, #6:List) B --> f(#7:List, #8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #1:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 555 A --> f(#5:List, #6:List) B --> f(#7:List, #8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #1:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#9:List, #1:Elt, #2:List) Unifier 556 A --> f(#5:List, #6:List) B --> f(#7:List, j(#8:List, #9:List), #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #1:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#10:List, #1:Elt, #2:List) Unifier 557 A --> f(#6:List, #7:List) B --> f(#8:List, 1, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 558 A --> f(#6:List, #7:List) B --> f(#8:List, #9:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#10:List, #1:Elt, #2:List) Unifier 559 A --> f(#6:List, #7:List) B --> f(#8:List, #9:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#10:List, #1:Elt, #2:List) Unifier 560 A --> f(#6:List, #7:List) B --> f(#8:List, j(#9:List, #10:List), #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#11:List, #1:Elt, #2:List) Unifier 561 A --> f(#6:List, #7:List) B --> f(#8:List, 1, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 562 A --> f(#6:List, #7:List) B --> f(#8:List, #9:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#10:List, #1:Elt, #2:List) Unifier 563 A --> f(#6:List, #7:List) B --> f(#8:List, #9:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#10:List, #1:Elt, #2:List) Unifier 564 A --> f(#6:List, #7:List) B --> f(#8:List, j(#9:List, #10:List), #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#11:List, #1:Elt, #2:List) Unifier 565 A --> f(#7:List, #8:List) B --> f(#9:List, 1, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> 1 S --> f(#10:List, #1:Elt, #2:List) Unifier 566 A --> f(#7:List, #8:List) B --> f(#9:List, #10:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> 1 S --> f(#11:List, #1:Elt, #2:List) Unifier 567 A --> f(#7:List, #8:List) B --> f(#9:List, #10:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> #10:List S --> f(#11:List, #1:Elt, #2:List) Unifier 568 A --> f(#7:List, #8:List) B --> f(#9:List, j(#10:List, #11:List), #12:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> #11:List S --> f(#12:List, #1:Elt, #2:List) Unifier 569 A --> f(#5:List, #6:List) B --> f(#7:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #1:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 570 A --> f(#5:List, #6:List) B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #1:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 571 A --> f(#5:List, #6:List) B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #1:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 572 A --> f(#5:List, #6:List) B --> f(#7:List, j(#8:List, #9:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #1:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 573 A --> f(#6:List, #7:List) B --> f(#8:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 574 A --> f(#6:List, #7:List) B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 575 A --> f(#6:List, #7:List) B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 576 A --> f(#6:List, #7:List) B --> f(#8:List, j(#9:List, #10:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#1:Elt, #2:List) Unifier 577 A --> f(#6:List, #7:List) B --> f(#8:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 578 A --> f(#6:List, #7:List) B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 579 A --> f(#6:List, #7:List) B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 580 A --> f(#6:List, #7:List) B --> f(#8:List, j(#9:List, #10:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#1:Elt, #2:List) Unifier 581 A --> f(#7:List, #8:List) B --> f(#9:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 582 A --> f(#7:List, #8:List) B --> f(#9:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 583 A --> f(#7:List, #8:List) B --> f(#9:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> #10:List S --> f(#1:Elt, #2:List) Unifier 584 A --> f(#7:List, #8:List) B --> f(#9:List, j(#10:List, #11:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> #11:List S --> f(#1:Elt, #2:List) Unifier 585 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #2:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> #1:List Z --> f(#2:Elt, #8:List) Y --> 1 S --> #7:List Unifier 586 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#9:List, #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #1:List Z --> f(#2:Elt, #9:List) Y --> 1 S --> #8:List Unifier 587 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#9:List, #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #1:List Z --> f(#2:Elt, #9:List) Y --> 1 S --> #8:List Unifier 588 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> f(#10:List, #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> #1:List Z --> f(#2:Elt, #10:List) Y --> 1 S --> #9:List Unifier 589 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #2:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> #1:List Z --> 1 Y --> f(#2:Elt, #8:List) S --> #7:List Unifier 590 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#9:List, #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #1:List Z --> 1 Y --> f(#2:Elt, #9:List) S --> #8:List Unifier 591 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#9:List, #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #1:List Z --> 1 Y --> f(#2:Elt, #9:List) S --> #8:List Unifier 592 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> f(#10:List, #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> #1:List Z --> 1 Y --> f(#2:Elt, #10:List) S --> #9:List Unifier 593 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#4:List, #2:Elt, 1, #5:List) V --> #6:List W --> #7:List X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 594 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> #7:List W --> #8:List X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 595 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> #7:List W --> #8:List X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 596 A --> f(#8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List) V --> #8:List W --> #9:List X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 597 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#4:List, #2:Elt, 1, #5:List) V --> #6:List W --> #7:List X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 598 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> #7:List W --> #8:List X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 599 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> #7:List W --> #8:List X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 600 A --> f(#8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List) V --> #8:List W --> #9:List X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 601 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> f(#8:List, 1, #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #2:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> 1 S --> #7:List Unifier 602 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List, #8:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #2:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> f(#1:List, #2:Elt, #9:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 603 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List, #8:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #2:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 604 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> f(#10:List, j(#7:List, #8:List), #9:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #2:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> f(#1:List, #2:Elt, #10:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 605 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#9:List, 1, #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> 1 S --> #8:List Unifier 606 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#10:List, #8:List, #9:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt, #10:List) Z --> #8:List Y --> 1 S --> #9:List Unifier 607 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#10:List, #8:List, #9:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt, #10:List) Z --> 1 Y --> #8:List S --> #9:List Unifier 608 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#11:List, j(#8:List, #9:List), #10:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt, #11:List) Z --> #8:List Y --> #9:List S --> #10:List Unifier 609 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#9:List, 1, #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> 1 S --> #8:List Unifier 610 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#10:List, #8:List, #9:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt, #10:List) Z --> #8:List Y --> 1 S --> #9:List Unifier 611 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#10:List, #8:List, #9:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt, #10:List) Z --> 1 Y --> #8:List S --> #9:List Unifier 612 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#11:List, j(#8:List, #9:List), #10:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt, #11:List) Z --> #8:List Y --> #9:List S --> #10:List Unifier 613 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> f(#10:List, 1, #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> f(#1:List, #2:Elt, #10:List) Z --> 1 Y --> 1 S --> #9:List Unifier 614 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> f(#11:List, #9:List, #10:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> f(#1:List, #2:Elt, #11:List) Z --> #9:List Y --> 1 S --> #10:List Unifier 615 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> f(#11:List, #9:List, #10:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> f(#1:List, #2:Elt, #11:List) Z --> 1 Y --> #9:List S --> #10:List Unifier 616 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> f(#12:List, j(#9:List, #10:List), #11:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> f(#1:List, #2:Elt, #12:List) Z --> #9:List Y --> #10:List S --> #11:List Unifier 617 A --> j(#8:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> f(#9:List, 1, #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> j(#8:List, f(#3:List, #2:Elt, 1, #4:List)) V --> #5:List W --> #6:List X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> 1 S --> #7:List Unifier 618 A --> j(#9:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List, #8:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> j(#9:List, f(#3:List, #2:Elt, 1, #4:List)) V --> #5:List W --> #6:List X --> f(#1:List, #2:Elt, #10:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 619 A --> j(#9:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List, #8:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> j(#9:List, f(#3:List, #2:Elt, 1, #4:List)) V --> #5:List W --> #6:List X --> f(#1:List, #2:Elt, #10:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 620 A --> j(#10:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> f(#11:List, j(#7:List, #8:List), #9:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> j(#10:List, f(#3:List, #2:Elt, 1, #4:List)) V --> #5:List W --> #6:List X --> f(#1:List, #2:Elt, #11:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 621 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> f(#10:List, 1, #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> j(#9:List, f(#3:List, #2:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt, #10:List) Z --> 1 Y --> 1 S --> #8:List Unifier 622 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> f(#11:List, #8:List, #9:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> j(#10:List, f(#3:List, #2:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt, #11:List) Z --> #8:List Y --> 1 S --> #9:List Unifier 623 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> f(#11:List, #8:List, #9:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> j(#10:List, f(#3:List, #2:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt, #11:List) Z --> 1 Y --> #8:List S --> #9:List Unifier 624 A --> j(#11:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> f(#12:List, j(#8:List, #9:List), #10:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> j(#11:List, f(#3:List, #2:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt, #12:List) Z --> #8:List Y --> #9:List S --> #10:List Unifier 625 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> f(#10:List, 1, #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> j(#9:List, f(#3:List, #2:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt, #10:List) Z --> 1 Y --> 1 S --> #8:List Unifier 626 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> f(#11:List, #8:List, #9:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> j(#10:List, f(#3:List, #2:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt, #11:List) Z --> #8:List Y --> 1 S --> #9:List Unifier 627 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> f(#11:List, #8:List, #9:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> j(#10:List, f(#3:List, #2:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt, #11:List) Z --> 1 Y --> #8:List S --> #9:List Unifier 628 A --> j(#11:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> f(#12:List, j(#8:List, #9:List), #10:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> j(#11:List, f(#3:List, #2:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt, #12:List) Z --> #8:List Y --> #9:List S --> #10:List Unifier 629 A --> j(#10:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> f(#11:List, 1, #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> j(#10:List, f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List)) V --> #7:List W --> #8:List X --> f(#1:List, #2:Elt, #11:List) Z --> 1 Y --> 1 S --> #9:List Unifier 630 A --> j(#11:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> f(#12:List, #9:List, #10:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> j(#11:List, f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List)) V --> #7:List W --> #8:List X --> f(#1:List, #2:Elt, #12:List) Z --> #9:List Y --> 1 S --> #10:List Unifier 631 A --> j(#11:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> f(#12:List, #9:List, #10:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> j(#11:List, f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List)) V --> #7:List W --> #8:List X --> f(#1:List, #2:Elt, #12:List) Z --> 1 Y --> #9:List S --> #10:List Unifier 632 A --> j(#12:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> f(#13:List, j(#9:List, #10:List), #11:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> j(#12:List, f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List)) V --> #7:List W --> #8:List X --> f(#1:List, #2:Elt, #13:List) Z --> #9:List Y --> #10:List S --> #11:List Unifier 633 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> f(1, #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #2:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #7:List Unifier 634 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #2:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> f(#1:List, #2:Elt) Z --> #7:List Y --> 1 S --> #8:List Unifier 635 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #2:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> #7:List S --> #8:List Unifier 636 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> f(j(#7:List, #8:List), #9:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #2:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> f(#1:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #9:List Unifier 637 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(1, #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #8:List Unifier 638 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#8:List, #9:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt) Z --> #8:List Y --> 1 S --> #9:List Unifier 639 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#8:List, #9:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> #8:List S --> #9:List Unifier 640 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(j(#8:List, #9:List), #10:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt) Z --> #8:List Y --> #9:List S --> #10:List Unifier 641 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(1, #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #8:List Unifier 642 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#8:List, #9:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt) Z --> #8:List Y --> 1 S --> #9:List Unifier 643 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#8:List, #9:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> #8:List S --> #9:List Unifier 644 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(j(#8:List, #9:List), #10:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt) Z --> #8:List Y --> #9:List S --> #10:List Unifier 645 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> f(1, #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #9:List Unifier 646 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> f(#9:List, #10:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> f(#1:List, #2:Elt) Z --> #9:List Y --> 1 S --> #10:List Unifier 647 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> f(#9:List, #10:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> #9:List S --> #10:List Unifier 648 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> f(j(#9:List, #10:List), #11:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> f(#1:List, #2:Elt) Z --> #9:List Y --> #10:List S --> #11:List Unifier 649 A --> j(#8:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> f(1, #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> j(#8:List, f(#3:List, #2:Elt, 1, #4:List)) V --> #5:List W --> #6:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #7:List Unifier 650 A --> j(#9:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> j(#9:List, f(#3:List, #2:Elt, 1, #4:List)) V --> #5:List W --> #6:List X --> f(#1:List, #2:Elt) Z --> #7:List Y --> 1 S --> #8:List Unifier 651 A --> j(#9:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> j(#9:List, f(#3:List, #2:Elt, 1, #4:List)) V --> #5:List W --> #6:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> #7:List S --> #8:List Unifier 652 A --> j(#10:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> f(j(#7:List, #8:List), #9:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> j(#10:List, f(#3:List, #2:Elt, 1, #4:List)) V --> #5:List W --> #6:List X --> f(#1:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #9:List Unifier 653 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> f(1, #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> j(#9:List, f(#3:List, #2:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #8:List Unifier 654 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> f(#8:List, #9:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> j(#10:List, f(#3:List, #2:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt) Z --> #8:List Y --> 1 S --> #9:List Unifier 655 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> f(#8:List, #9:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> j(#10:List, f(#3:List, #2:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> #8:List S --> #9:List Unifier 656 A --> j(#11:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> f(j(#8:List, #9:List), #10:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> j(#11:List, f(#3:List, #2:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt) Z --> #8:List Y --> #9:List S --> #10:List Unifier 657 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> f(1, #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> j(#9:List, f(#3:List, #2:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #8:List Unifier 658 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> f(#8:List, #9:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> j(#10:List, f(#3:List, #2:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt) Z --> #8:List Y --> 1 S --> #9:List Unifier 659 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> f(#8:List, #9:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> j(#10:List, f(#3:List, #2:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> #8:List S --> #9:List Unifier 660 A --> j(#11:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> f(j(#8:List, #9:List), #10:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> j(#11:List, f(#3:List, #2:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> f(#1:List, #2:Elt) Z --> #8:List Y --> #9:List S --> #10:List Unifier 661 A --> j(#10:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> f(1, #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> j(#10:List, f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List)) V --> #7:List W --> #8:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #9:List Unifier 662 A --> j(#11:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> f(#9:List, #10:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> j(#11:List, f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List)) V --> #7:List W --> #8:List X --> f(#1:List, #2:Elt) Z --> #9:List Y --> 1 S --> #10:List Unifier 663 A --> j(#11:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> f(#9:List, #10:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> j(#11:List, f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List)) V --> #7:List W --> #8:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> #9:List S --> #10:List Unifier 664 A --> j(#12:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> f(j(#9:List, #10:List), #11:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> j(#12:List, f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List)) V --> #7:List W --> #8:List X --> f(#1:List, #2:Elt) Z --> #9:List Y --> #10:List S --> #11:List Unifier 665 A --> f(#4:List, #5:List) B --> f(#6:List, #8:List) E --> #1:Elt C --> f(#9:List, #7:List) D --> #2:List H --> 1 G --> 1 I --> #3:List U --> f(#2:List, #1:Elt, 1, #3:List) V --> #4:List W --> #5:List X --> #6:List Z --> f(#8:List, #1:Elt, #9:List) Y --> 1 S --> #7:List Unifier 666 A --> f(#5:List, #6:List) B --> f(#7:List, #9:List) E --> #1:Elt C --> f(#10:List, #8:List) D --> #2:List H --> #3:List G --> 1 I --> #4:List U --> f(#2:List, #1:Elt, #3:List, #4:List) V --> #5:List W --> #6:List X --> #7:List Z --> f(#9:List, #1:Elt, #10:List) Y --> 1 S --> #8:List Unifier 667 A --> f(#5:List, #6:List) B --> f(#7:List, #9:List) E --> #1:Elt C --> f(#10:List, #8:List) D --> #2:List H --> 1 G --> #3:List I --> #4:List U --> f(#2:List, #1:Elt, #3:List, #4:List) V --> #5:List W --> #6:List X --> #7:List Z --> f(#9:List, #1:Elt, #10:List) Y --> 1 S --> #8:List Unifier 668 A --> f(#6:List, #7:List) B --> f(#8:List, #10:List) E --> #1:Elt C --> f(#11:List, #9:List) D --> #2:List H --> #3:List G --> #4:List I --> #5:List U --> f(#2:List, #1:Elt, j(#3:List, #4:List), #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> f(#10:List, #1:Elt, #11:List) Y --> 1 S --> #9:List Unifier 669 A --> j(#8:List, f(#4:List, #5:List)) B --> f(#6:List, #9:List) E --> #1:Elt C --> f(#10:List, #7:List) D --> #2:List H --> 1 G --> 1 I --> #3:List U --> j(#8:List, f(#2:List, #1:Elt, 1, #3:List)) V --> #4:List W --> #5:List X --> #6:List Z --> f(#9:List, #1:Elt, #10:List) Y --> 1 S --> #7:List Unifier 670 A --> j(#9:List, f(#5:List, #6:List)) B --> f(#7:List, #10:List) E --> #1:Elt C --> f(#11:List, #8:List) D --> #2:List H --> #3:List G --> 1 I --> #4:List U --> j(#9:List, f(#2:List, #1:Elt, #3:List, #4:List)) V --> #5:List W --> #6:List X --> #7:List Z --> f(#10:List, #1:Elt, #11:List) Y --> 1 S --> #8:List Unifier 671 A --> j(#9:List, f(#5:List, #6:List)) B --> f(#7:List, #10:List) E --> #1:Elt C --> f(#11:List, #8:List) D --> #2:List H --> 1 G --> #3:List I --> #4:List U --> j(#9:List, f(#2:List, #1:Elt, #3:List, #4:List)) V --> #5:List W --> #6:List X --> #7:List Z --> f(#10:List, #1:Elt, #11:List) Y --> 1 S --> #8:List Unifier 672 A --> j(#10:List, f(#6:List, #7:List)) B --> f(#8:List, #11:List) E --> #1:Elt C --> f(#12:List, #9:List) D --> #2:List H --> #3:List G --> #4:List I --> #5:List U --> j(#10:List, f(#2:List, #1:Elt, j(#3:List, #4:List), #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> f(#11:List, #1:Elt, #12:List) Y --> 1 S --> #9:List Unifier 673 A --> f(#4:List, #5:List) B --> f(#6:List, #8:List) E --> #1:Elt C --> f(#9:List, #7:List) D --> #2:List H --> 1 G --> 1 I --> #3:List U --> f(#2:List, #1:Elt, 1, #3:List) V --> #4:List W --> #5:List X --> #6:List Z --> 1 Y --> f(#8:List, #1:Elt, #9:List) S --> #7:List Unifier 674 A --> f(#5:List, #6:List) B --> f(#7:List, #9:List) E --> #1:Elt C --> f(#10:List, #8:List) D --> #2:List H --> #3:List G --> 1 I --> #4:List U --> f(#2:List, #1:Elt, #3:List, #4:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> f(#9:List, #1:Elt, #10:List) S --> #8:List Unifier 675 A --> f(#5:List, #6:List) B --> f(#7:List, #9:List) E --> #1:Elt C --> f(#10:List, #8:List) D --> #2:List H --> 1 G --> #3:List I --> #4:List U --> f(#2:List, #1:Elt, #3:List, #4:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> f(#9:List, #1:Elt, #10:List) S --> #8:List Unifier 676 A --> f(#6:List, #7:List) B --> f(#8:List, #10:List) E --> #1:Elt C --> f(#11:List, #9:List) D --> #2:List H --> #3:List G --> #4:List I --> #5:List U --> f(#2:List, #1:Elt, j(#3:List, #4:List), #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> f(#10:List, #1:Elt, #11:List) S --> #9:List Unifier 677 A --> j(#8:List, f(#4:List, #5:List)) B --> f(#6:List, #9:List) E --> #1:Elt C --> f(#10:List, #7:List) D --> #2:List H --> 1 G --> 1 I --> #3:List U --> j(#8:List, f(#2:List, #1:Elt, 1, #3:List)) V --> #4:List W --> #5:List X --> #6:List Z --> 1 Y --> f(#9:List, #1:Elt, #10:List) S --> #7:List Unifier 678 A --> j(#9:List, f(#5:List, #6:List)) B --> f(#7:List, #10:List) E --> #1:Elt C --> f(#11:List, #8:List) D --> #2:List H --> #3:List G --> 1 I --> #4:List U --> j(#9:List, f(#2:List, #1:Elt, #3:List, #4:List)) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> f(#10:List, #1:Elt, #11:List) S --> #8:List Unifier 679 A --> j(#9:List, f(#5:List, #6:List)) B --> f(#7:List, #10:List) E --> #1:Elt C --> f(#11:List, #8:List) D --> #2:List H --> 1 G --> #3:List I --> #4:List U --> j(#9:List, f(#2:List, #1:Elt, #3:List, #4:List)) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> f(#10:List, #1:Elt, #11:List) S --> #8:List Unifier 680 A --> j(#10:List, f(#6:List, #7:List)) B --> f(#8:List, #11:List) E --> #1:Elt C --> f(#12:List, #9:List) D --> #2:List H --> #3:List G --> #4:List I --> #5:List U --> j(#10:List, f(#2:List, #1:Elt, j(#3:List, #4:List), #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> f(#11:List, #1:Elt, #12:List) S --> #9:List Unifier 681 A --> f(#5:List, #6:List) B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #1:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> #7:List Z --> f(#8:List, #1:Elt) Y --> 1 S --> #2:List Unifier 682 A --> f(#6:List, #7:List) B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> f(#9:List, #1:Elt) Y --> 1 S --> #2:List Unifier 683 A --> f(#6:List, #7:List) B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> f(#9:List, #1:Elt) Y --> 1 S --> #2:List Unifier 684 A --> f(#7:List, #8:List) B --> f(#9:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> #9:List Z --> f(#10:List, #1:Elt) Y --> 1 S --> #2:List Unifier 685 A --> j(#8:List, f(#5:List, #6:List)) B --> f(#7:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> j(#8:List, f(#3:List, #1:Elt, 1, #4:List)) V --> #5:List W --> #6:List X --> #7:List Z --> f(#9:List, #1:Elt) Y --> 1 S --> #2:List Unifier 686 A --> j(#9:List, f(#6:List, #7:List)) B --> f(#8:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> j(#9:List, f(#3:List, #1:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> f(#10:List, #1:Elt) Y --> 1 S --> #2:List Unifier 687 A --> j(#9:List, f(#6:List, #7:List)) B --> f(#8:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> j(#9:List, f(#3:List, #1:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> f(#10:List, #1:Elt) Y --> 1 S --> #2:List Unifier 688 A --> j(#10:List, f(#7:List, #8:List)) B --> f(#9:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> j(#10:List, f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> f(#11:List, #1:Elt) Y --> 1 S --> #2:List Unifier 689 A --> f(#5:List, #6:List) B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #1:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> f(#8:List, #1:Elt) S --> #2:List Unifier 690 A --> f(#6:List, #7:List) B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> f(#9:List, #1:Elt) S --> #2:List Unifier 691 A --> f(#6:List, #7:List) B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> f(#9:List, #1:Elt) S --> #2:List Unifier 692 A --> f(#7:List, #8:List) B --> f(#9:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> f(#10:List, #1:Elt) S --> #2:List Unifier 693 A --> j(#8:List, f(#5:List, #6:List)) B --> f(#7:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> j(#8:List, f(#3:List, #1:Elt, 1, #4:List)) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> f(#9:List, #1:Elt) S --> #2:List Unifier 694 A --> j(#9:List, f(#6:List, #7:List)) B --> f(#8:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> j(#9:List, f(#3:List, #1:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> f(#10:List, #1:Elt) S --> #2:List Unifier 695 A --> j(#9:List, f(#6:List, #7:List)) B --> f(#8:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> j(#9:List, f(#3:List, #1:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> f(#10:List, #1:Elt) S --> #2:List Unifier 696 A --> j(#10:List, f(#7:List, #8:List)) B --> f(#9:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> j(#10:List, f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> f(#11:List, #1:Elt) S --> #2:List Unifier 697 A --> f(#5:List, #6:List) B --> f(#7:List, 1, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #1:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 698 A --> f(#5:List, #6:List) B --> f(#7:List, #8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #1:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 699 A --> f(#5:List, #6:List) B --> f(#7:List, #8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #1:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#9:List, #1:Elt, #2:List) Unifier 700 A --> f(#5:List, #6:List) B --> f(#7:List, j(#8:List, #9:List), #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #1:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#10:List, #1:Elt, #2:List) Unifier 701 A --> f(#6:List, #7:List) B --> f(#8:List, 1, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 702 A --> f(#6:List, #7:List) B --> f(#8:List, #9:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#10:List, #1:Elt, #2:List) Unifier 703 A --> f(#6:List, #7:List) B --> f(#8:List, #9:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#10:List, #1:Elt, #2:List) Unifier 704 A --> f(#6:List, #7:List) B --> f(#8:List, j(#9:List, #10:List), #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#11:List, #1:Elt, #2:List) Unifier 705 A --> f(#6:List, #7:List) B --> f(#8:List, 1, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 706 A --> f(#6:List, #7:List) B --> f(#8:List, #9:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#10:List, #1:Elt, #2:List) Unifier 707 A --> f(#6:List, #7:List) B --> f(#8:List, #9:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#10:List, #1:Elt, #2:List) Unifier 708 A --> f(#6:List, #7:List) B --> f(#8:List, j(#9:List, #10:List), #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#11:List, #1:Elt, #2:List) Unifier 709 A --> f(#7:List, #8:List) B --> f(#9:List, 1, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> 1 S --> f(#10:List, #1:Elt, #2:List) Unifier 710 A --> f(#7:List, #8:List) B --> f(#9:List, #10:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> 1 S --> f(#11:List, #1:Elt, #2:List) Unifier 711 A --> f(#7:List, #8:List) B --> f(#9:List, #10:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> #10:List S --> f(#11:List, #1:Elt, #2:List) Unifier 712 A --> f(#7:List, #8:List) B --> f(#9:List, j(#10:List, #11:List), #12:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> #11:List S --> f(#12:List, #1:Elt, #2:List) Unifier 713 A --> j(#8:List, f(#5:List, #6:List)) B --> f(#7:List, 1, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> j(#8:List, f(#3:List, #1:Elt, 1, #4:List)) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 714 A --> j(#9:List, f(#5:List, #6:List)) B --> f(#7:List, #8:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> j(#9:List, f(#3:List, #1:Elt, 1, #4:List)) V --> #5:List W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#10:List, #1:Elt, #2:List) Unifier 715 A --> j(#9:List, f(#5:List, #6:List)) B --> f(#7:List, #8:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> j(#9:List, f(#3:List, #1:Elt, 1, #4:List)) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#10:List, #1:Elt, #2:List) Unifier 716 A --> j(#10:List, f(#5:List, #6:List)) B --> f(#7:List, j(#8:List, #9:List), #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> j(#10:List, f(#3:List, #1:Elt, 1, #4:List)) V --> #5:List W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#11:List, #1:Elt, #2:List) Unifier 717 A --> j(#9:List, f(#6:List, #7:List)) B --> f(#8:List, 1, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> j(#9:List, f(#3:List, #1:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> f(#10:List, #1:Elt, #2:List) Unifier 718 A --> j(#10:List, f(#6:List, #7:List)) B --> f(#8:List, #9:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> j(#10:List, f(#3:List, #1:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#11:List, #1:Elt, #2:List) Unifier 719 A --> j(#10:List, f(#6:List, #7:List)) B --> f(#8:List, #9:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> j(#10:List, f(#3:List, #1:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#11:List, #1:Elt, #2:List) Unifier 720 A --> j(#11:List, f(#6:List, #7:List)) B --> f(#8:List, j(#9:List, #10:List), #12:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> j(#11:List, f(#3:List, #1:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#12:List, #1:Elt, #2:List) Unifier 721 A --> j(#9:List, f(#6:List, #7:List)) B --> f(#8:List, 1, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> j(#9:List, f(#3:List, #1:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> f(#10:List, #1:Elt, #2:List) Unifier 722 A --> j(#10:List, f(#6:List, #7:List)) B --> f(#8:List, #9:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> j(#10:List, f(#3:List, #1:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#11:List, #1:Elt, #2:List) Unifier 723 A --> j(#10:List, f(#6:List, #7:List)) B --> f(#8:List, #9:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> j(#10:List, f(#3:List, #1:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#11:List, #1:Elt, #2:List) Unifier 724 A --> j(#11:List, f(#6:List, #7:List)) B --> f(#8:List, j(#9:List, #10:List), #12:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> j(#11:List, f(#3:List, #1:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#12:List, #1:Elt, #2:List) Unifier 725 A --> j(#10:List, f(#7:List, #8:List)) B --> f(#9:List, 1, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> j(#10:List, f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> 1 S --> f(#11:List, #1:Elt, #2:List) Unifier 726 A --> j(#11:List, f(#7:List, #8:List)) B --> f(#9:List, #10:List, #12:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> j(#11:List, f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> 1 S --> f(#12:List, #1:Elt, #2:List) Unifier 727 A --> j(#11:List, f(#7:List, #8:List)) B --> f(#9:List, #10:List, #12:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> j(#11:List, f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> #10:List S --> f(#12:List, #1:Elt, #2:List) Unifier 728 A --> j(#12:List, f(#7:List, #8:List)) B --> f(#9:List, j(#10:List, #11:List), #13:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> j(#12:List, f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> #11:List S --> f(#13:List, #1:Elt, #2:List) Unifier 729 A --> f(#5:List, #6:List) B --> f(#7:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #1:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 730 A --> f(#5:List, #6:List) B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #1:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 731 A --> f(#5:List, #6:List) B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #1:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 732 A --> f(#5:List, #6:List) B --> f(#7:List, j(#8:List, #9:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #1:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 733 A --> f(#6:List, #7:List) B --> f(#8:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 734 A --> f(#6:List, #7:List) B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 735 A --> f(#6:List, #7:List) B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 736 A --> f(#6:List, #7:List) B --> f(#8:List, j(#9:List, #10:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#1:Elt, #2:List) Unifier 737 A --> f(#6:List, #7:List) B --> f(#8:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 738 A --> f(#6:List, #7:List) B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 739 A --> f(#6:List, #7:List) B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 740 A --> f(#6:List, #7:List) B --> f(#8:List, j(#9:List, #10:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #1:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#1:Elt, #2:List) Unifier 741 A --> f(#7:List, #8:List) B --> f(#9:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 742 A --> f(#7:List, #8:List) B --> f(#9:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 743 A --> f(#7:List, #8:List) B --> f(#9:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> #10:List S --> f(#1:Elt, #2:List) Unifier 744 A --> f(#7:List, #8:List) B --> f(#9:List, j(#10:List, #11:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> #11:List S --> f(#1:Elt, #2:List) Unifier 745 A --> j(#8:List, f(#5:List, #6:List)) B --> f(#7:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> j(#8:List, f(#3:List, #1:Elt, 1, #4:List)) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 746 A --> j(#9:List, f(#5:List, #6:List)) B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> j(#9:List, f(#3:List, #1:Elt, 1, #4:List)) V --> #5:List W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 747 A --> j(#9:List, f(#5:List, #6:List)) B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> j(#9:List, f(#3:List, #1:Elt, 1, #4:List)) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 748 A --> j(#10:List, f(#5:List, #6:List)) B --> f(#7:List, j(#8:List, #9:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> j(#10:List, f(#3:List, #1:Elt, 1, #4:List)) V --> #5:List W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 749 A --> j(#9:List, f(#6:List, #7:List)) B --> f(#8:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> j(#9:List, f(#3:List, #1:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 750 A --> j(#10:List, f(#6:List, #7:List)) B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> j(#10:List, f(#3:List, #1:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 751 A --> j(#10:List, f(#6:List, #7:List)) B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> j(#10:List, f(#3:List, #1:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 752 A --> j(#11:List, f(#6:List, #7:List)) B --> f(#8:List, j(#9:List, #10:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> j(#11:List, f(#3:List, #1:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#1:Elt, #2:List) Unifier 753 A --> j(#9:List, f(#6:List, #7:List)) B --> f(#8:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> j(#9:List, f(#3:List, #1:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 754 A --> j(#10:List, f(#6:List, #7:List)) B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> j(#10:List, f(#3:List, #1:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 755 A --> j(#10:List, f(#6:List, #7:List)) B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> j(#10:List, f(#3:List, #1:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 756 A --> j(#11:List, f(#6:List, #7:List)) B --> f(#8:List, j(#9:List, #10:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> j(#11:List, f(#3:List, #1:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#1:Elt, #2:List) Unifier 757 A --> j(#10:List, f(#7:List, #8:List)) B --> f(#9:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> j(#10:List, f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 758 A --> j(#11:List, f(#7:List, #8:List)) B --> f(#9:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> j(#11:List, f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 759 A --> j(#11:List, f(#7:List, #8:List)) B --> f(#9:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> j(#11:List, f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> #10:List S --> f(#1:Elt, #2:List) Unifier 760 A --> j(#12:List, f(#7:List, #8:List)) B --> f(#9:List, j(#10:List, #11:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> j(#12:List, f(#3:List, #1:Elt, j(#4:List, #5:List), #6:List)) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> #11:List S --> f(#1:Elt, #2:List) Unifier 761 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #2:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> #1:List Z --> f(#2:Elt, #8:List) Y --> 1 S --> #7:List Unifier 762 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#9:List, #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #1:List Z --> f(#2:Elt, #9:List) Y --> 1 S --> #8:List Unifier 763 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#9:List, #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #1:List Z --> f(#2:Elt, #9:List) Y --> 1 S --> #8:List Unifier 764 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> f(#10:List, #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> #1:List Z --> f(#2:Elt, #10:List) Y --> 1 S --> #9:List Unifier 765 A --> j(#8:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> j(#8:List, f(#3:List, #2:Elt, 1, #4:List)) V --> #5:List W --> #6:List X --> #1:List Z --> f(#2:Elt, #9:List) Y --> 1 S --> #7:List Unifier 766 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> f(#10:List, #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> j(#9:List, f(#3:List, #2:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> #1:List Z --> f(#2:Elt, #10:List) Y --> 1 S --> #8:List Unifier 767 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> f(#10:List, #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> j(#9:List, f(#3:List, #2:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> #1:List Z --> f(#2:Elt, #10:List) Y --> 1 S --> #8:List Unifier 768 A --> j(#10:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> f(#11:List, #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> j(#10:List, f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List)) V --> #7:List W --> #8:List X --> #1:List Z --> f(#2:Elt, #11:List) Y --> 1 S --> #9:List Unifier 769 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> f(#3:List, #2:Elt, 1, #4:List) V --> #5:List W --> #6:List X --> #1:List Z --> 1 Y --> f(#2:Elt, #8:List) S --> #7:List Unifier 770 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#9:List, #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #1:List Z --> 1 Y --> f(#2:Elt, #9:List) S --> #8:List Unifier 771 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> f(#9:List, #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> f(#3:List, #2:Elt, #4:List, #5:List) V --> #6:List W --> #7:List X --> #1:List Z --> 1 Y --> f(#2:Elt, #9:List) S --> #8:List Unifier 772 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> f(#10:List, #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List) V --> #7:List W --> #8:List X --> #1:List Z --> 1 Y --> f(#2:Elt, #10:List) S --> #9:List Unifier 773 A --> j(#8:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> j(#8:List, f(#3:List, #2:Elt, 1, #4:List)) V --> #5:List W --> #6:List X --> #1:List Z --> 1 Y --> f(#2:Elt, #9:List) S --> #7:List Unifier 774 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> f(#10:List, #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> j(#9:List, f(#3:List, #2:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> #1:List Z --> 1 Y --> f(#2:Elt, #10:List) S --> #8:List Unifier 775 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> f(#10:List, #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> j(#9:List, f(#3:List, #2:Elt, #4:List, #5:List)) V --> #6:List W --> #7:List X --> #1:List Z --> 1 Y --> f(#2:Elt, #10:List) S --> #8:List Unifier 776 A --> j(#10:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> f(#11:List, #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> j(#10:List, f(#3:List, #2:Elt, j(#4:List, #5:List), #6:List)) V --> #7:List W --> #8:List X --> #1:List Z --> 1 Y --> f(#2:Elt, #11:List) S --> #9:List Unifier 777 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#4:List, #2:Elt, 1, #5:List) V --> #6:List W --> #7:List X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 778 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> #7:List W --> #8:List X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 779 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> #7:List W --> #8:List X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 780 A --> f(#8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List) V --> #8:List W --> #9:List X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 781 A --> j(#8:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#8:List, f(#4:List, #2:Elt, 1, #5:List)) V --> #6:List W --> #7:List X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 782 A --> j(#9:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#9:List, f(#4:List, #2:Elt, #5:List, #6:List)) V --> #7:List W --> #8:List X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 783 A --> j(#9:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#9:List, f(#4:List, #2:Elt, #5:List, #6:List)) V --> #7:List W --> #8:List X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 784 A --> j(#10:List, f(#8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#10:List, f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List)) V --> #8:List W --> #9:List X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 785 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#4:List, #2:Elt, 1, #5:List) V --> #6:List W --> #7:List X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 786 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> #7:List W --> #8:List X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 787 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#4:List, #2:Elt, #5:List, #6:List) V --> #7:List W --> #8:List X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 788 A --> f(#8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List) V --> #8:List W --> #9:List X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 789 A --> j(#8:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#8:List, f(#4:List, #2:Elt, 1, #5:List)) V --> #6:List W --> #7:List X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 790 A --> j(#9:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#9:List, f(#4:List, #2:Elt, #5:List, #6:List)) V --> #7:List W --> #8:List X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 791 A --> j(#9:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#9:List, f(#4:List, #2:Elt, #5:List, #6:List)) V --> #7:List W --> #8:List X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 792 A --> j(#10:List, f(#8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#10:List, f(#4:List, #2:Elt, j(#5:List, #6:List), #7:List)) V --> #8:List W --> #9:List X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 793 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, 1, #5:List) D --> #3:List H --> 1 G --> 1 I --> f(#6:List, #4:List) U --> 1 V --> f(#3:List, #2:Elt, 1, #6:List) W --> #4:List X --> f(#1:List, #2:Elt, #7:List) Z --> 1 Y --> 1 S --> #5:List Unifier 794 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> f(#7:List, #4:List) U --> 1 V --> f(#3:List, #2:Elt, 1, #7:List) W --> #4:List X --> f(#1:List, #2:Elt, #8:List) Z --> #5:List Y --> 1 S --> #6:List Unifier 795 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> f(#7:List, #4:List) U --> 1 V --> f(#3:List, #2:Elt, 1, #7:List) W --> #4:List X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> #5:List S --> #6:List Unifier 796 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, j(#5:List, #6:List), #7:List) D --> #3:List H --> 1 G --> 1 I --> f(#8:List, #4:List) U --> 1 V --> f(#3:List, #2:Elt, 1, #8:List) W --> #4:List X --> f(#1:List, #2:Elt, #9:List) Z --> #5:List Y --> #6:List S --> #7:List Unifier 797 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, 1, #6:List) D --> #3:List H --> #4:List G --> 1 I --> f(#7:List, #5:List) U --> 1 V --> f(#3:List, #2:Elt, #4:List, #7:List) W --> #5:List X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> 1 S --> #6:List Unifier 798 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List, #7:List) D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, #5:List) U --> 1 V --> f(#3:List, #2:Elt, #4:List, #8:List) W --> #5:List X --> f(#1:List, #2:Elt, #9:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 799 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List, #7:List) D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, #5:List) U --> 1 V --> f(#3:List, #2:Elt, #4:List, #8:List) W --> #5:List X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 800 A --> 1 B --> #1:List E --> #2:Elt C --> f(#10:List, j(#6:List, #7:List), #8:List) D --> #3:List H --> #4:List G --> 1 I --> f(#9:List, #5:List) U --> 1 V --> f(#3:List, #2:Elt, #4:List, #9:List) W --> #5:List X --> f(#1:List, #2:Elt, #10:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 801 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, 1, #6:List) D --> #3:List H --> 1 G --> #4:List I --> f(#7:List, #5:List) U --> 1 V --> f(#3:List, #2:Elt, #4:List, #7:List) W --> #5:List X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> 1 S --> #6:List Unifier 802 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List, #7:List) D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, #5:List) U --> 1 V --> f(#3:List, #2:Elt, #4:List, #8:List) W --> #5:List X --> f(#1:List, #2:Elt, #9:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 803 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List, #7:List) D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, #5:List) U --> 1 V --> f(#3:List, #2:Elt, #4:List, #8:List) W --> #5:List X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 804 A --> 1 B --> #1:List E --> #2:Elt C --> f(#10:List, j(#6:List, #7:List), #8:List) D --> #3:List H --> 1 G --> #4:List I --> f(#9:List, #5:List) U --> 1 V --> f(#3:List, #2:Elt, #4:List, #9:List) W --> #5:List X --> f(#1:List, #2:Elt, #10:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 805 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, 1, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#8:List, #6:List) U --> 1 V --> f(#3:List, #2:Elt, j(#4:List, #5:List), #8:List) W --> #6:List X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> 1 S --> #7:List Unifier 806 A --> 1 B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, #6:List) U --> 1 V --> f(#3:List, #2:Elt, j(#4:List, #5:List), #9:List) W --> #6:List X --> f(#1:List, #2:Elt, #10:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 807 A --> 1 B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, #6:List) U --> 1 V --> f(#3:List, #2:Elt, j(#4:List, #5:List), #9:List) W --> #6:List X --> f(#1:List, #2:Elt, #10:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 808 A --> 1 B --> #1:List E --> #2:Elt C --> f(#11:List, j(#7:List, #8:List), #9:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#10:List, #6:List) U --> 1 V --> f(#3:List, #2:Elt, j(#4:List, #5:List), #10:List) W --> #6:List X --> f(#1:List, #2:Elt, #11:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 809 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, 1, #5:List) D --> #3:List H --> f(#6:List, #7:List) G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, #6:List) W --> f(#7:List, #4:List) X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> 1 S --> #5:List Unifier 810 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List, #6:List) D --> #3:List H --> f(#7:List, #8:List) G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, #7:List) W --> f(#8:List, #4:List) X --> f(#1:List, #2:Elt, #9:List) Z --> #5:List Y --> 1 S --> #6:List Unifier 811 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List, #6:List) D --> #3:List H --> f(#7:List, #8:List) G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, #7:List) W --> f(#8:List, #4:List) X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> #5:List S --> #6:List Unifier 812 A --> 1 B --> #1:List E --> #2:Elt C --> f(#10:List, j(#5:List, #6:List), #7:List) D --> #3:List H --> f(#8:List, #9:List) G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, #8:List) W --> f(#9:List, #4:List) X --> f(#1:List, #2:Elt, #10:List) Z --> #5:List Y --> #6:List S --> #7:List Unifier 813 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, 1, #5:List) D --> #3:List H --> 1 G --> f(#6:List, #7:List) I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, #6:List) W --> f(#7:List, #4:List) X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> 1 S --> #5:List Unifier 814 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List, #6:List) D --> #3:List H --> 1 G --> f(#7:List, #8:List) I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, #7:List) W --> f(#8:List, #4:List) X --> f(#1:List, #2:Elt, #9:List) Z --> #5:List Y --> 1 S --> #6:List Unifier 815 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List, #6:List) D --> #3:List H --> 1 G --> f(#7:List, #8:List) I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, #7:List) W --> f(#8:List, #4:List) X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> #5:List S --> #6:List Unifier 816 A --> 1 B --> #1:List E --> #2:Elt C --> f(#10:List, j(#5:List, #6:List), #7:List) D --> #3:List H --> 1 G --> f(#8:List, #9:List) I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, #8:List) W --> f(#9:List, #4:List) X --> f(#1:List, #2:Elt, #10:List) Z --> #5:List Y --> #6:List S --> #7:List Unifier 817 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, 1, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, 1) W --> #4:List X --> f(#1:List, #2:Elt, #6:List) Z --> 1 Y --> 1 S --> #5:List Unifier 818 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #5:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, 1) W --> #4:List X --> f(#1:List, #2:Elt, #7:List) Z --> #5:List Y --> 1 S --> #6:List Unifier 819 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #5:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, 1) W --> #4:List X --> f(#1:List, #2:Elt, #7:List) Z --> 1 Y --> #5:List S --> #6:List Unifier 820 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, j(#5:List, #6:List), #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, 1) W --> #4:List X --> f(#1:List, #2:Elt, #8:List) Z --> #5:List Y --> #6:List S --> #7:List Unifier 821 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, 1, #6:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt, #7:List) Z --> 1 Y --> 1 S --> #6:List Unifier 822 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List, #7:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt, #8:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 823 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List, #7:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 824 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, j(#6:List, #7:List), #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt, #9:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 825 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, 1, #6:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt, #7:List) Z --> 1 Y --> 1 S --> #6:List Unifier 826 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List, #7:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt, #8:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 827 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List, #7:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 828 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, j(#6:List, #7:List), #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt, #9:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 829 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, 1, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #2:Elt, j(#4:List, #5:List)) W --> #6:List X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> 1 S --> #7:List Unifier 830 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #2:Elt, j(#4:List, #5:List)) W --> #6:List X --> f(#1:List, #2:Elt, #9:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 831 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #2:Elt, j(#4:List, #5:List)) W --> #6:List X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 832 A --> 1 B --> #1:List E --> #2:Elt C --> f(#10:List, j(#7:List, #8:List), #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #2:Elt, j(#4:List, #5:List)) W --> #6:List X --> f(#1:List, #2:Elt, #10:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 833 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, 1, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(1, #4:List) X --> f(#1:List, #2:Elt, #6:List) Z --> 1 Y --> 1 S --> #5:List Unifier 834 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #5:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(1, #4:List) X --> f(#1:List, #2:Elt, #7:List) Z --> #5:List Y --> 1 S --> #6:List Unifier 835 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #5:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(1, #4:List) X --> f(#1:List, #2:Elt, #7:List) Z --> 1 Y --> #5:List S --> #6:List Unifier 836 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, j(#5:List, #6:List), #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(1, #4:List) X --> f(#1:List, #2:Elt, #8:List) Z --> #5:List Y --> #6:List S --> #7:List Unifier 837 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, 1, #6:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt, #7:List) Z --> 1 Y --> 1 S --> #6:List Unifier 838 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List, #7:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt, #8:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 839 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List, #7:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 840 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, j(#6:List, #7:List), #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt, #9:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 841 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, 1, #6:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt, #7:List) Z --> 1 Y --> 1 S --> #6:List Unifier 842 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List, #7:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt, #8:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 843 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List, #7:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 844 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, j(#6:List, #7:List), #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt, #9:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 845 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, 1, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> 1 S --> #7:List Unifier 846 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt, #9:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 847 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 848 A --> 1 B --> #1:List E --> #2:Elt C --> f(#10:List, j(#7:List, #8:List), #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt, #10:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 849 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, 1, #5:List) D --> f(#4:List, #6:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#6:List, #2:Elt, 1, #3:List) X --> f(#1:List, #2:Elt, #7:List) Z --> 1 Y --> 1 S --> #5:List Unifier 850 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List, #6:List) D --> f(#4:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#7:List, #2:Elt, 1, #3:List) X --> f(#1:List, #2:Elt, #8:List) Z --> #5:List Y --> 1 S --> #6:List Unifier 851 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List, #6:List) D --> f(#4:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#7:List, #2:Elt, 1, #3:List) X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> #5:List S --> #6:List Unifier 852 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, j(#5:List, #6:List), #7:List) D --> f(#4:List, #8:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#8:List, #2:Elt, 1, #3:List) X --> f(#1:List, #2:Elt, #9:List) Z --> #5:List Y --> #6:List S --> #7:List Unifier 853 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, 1, #6:List) D --> f(#5:List, #7:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#7:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> 1 S --> #6:List Unifier 854 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List, #7:List) D --> f(#5:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt, #9:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 855 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List, #7:List) D --> f(#5:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 856 A --> 1 B --> #1:List E --> #2:Elt C --> f(#10:List, j(#6:List, #7:List), #8:List) D --> f(#5:List, #9:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#9:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt, #10:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 857 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, 1, #6:List) D --> f(#5:List, #7:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#7:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> 1 S --> #6:List Unifier 858 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List, #7:List) D --> f(#5:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt, #9:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 859 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List, #7:List) D --> f(#5:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 860 A --> 1 B --> #1:List E --> #2:Elt C --> f(#10:List, j(#6:List, #7:List), #8:List) D --> f(#5:List, #9:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#9:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt, #10:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 861 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, 1, #7:List) D --> f(#6:List, #8:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#8:List, #2:Elt, j(#3:List, #4:List), #5:List) X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> 1 S --> #7:List Unifier 862 A --> 1 B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List, #8:List) D --> f(#6:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#9:List, #2:Elt, j(#3:List, #4:List), #5:List) X --> f(#1:List, #2:Elt, #10:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 863 A --> 1 B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List, #8:List) D --> f(#6:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#9:List, #2:Elt, j(#3:List, #4:List), #5:List) X --> f(#1:List, #2:Elt, #10:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 864 A --> 1 B --> #1:List E --> #2:Elt C --> f(#11:List, j(#7:List, #8:List), #9:List) D --> f(#6:List, #10:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#10:List, #2:Elt, j(#3:List, #4:List), #5:List) X --> f(#1:List, #2:Elt, #11:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 865 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, 1, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> #3:List W --> f(#2:Elt, 1, #4:List) X --> f(#1:List, #2:Elt, #6:List) Z --> 1 Y --> 1 S --> #5:List Unifier 866 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #5:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> #3:List W --> f(#2:Elt, 1, #4:List) X --> f(#1:List, #2:Elt, #7:List) Z --> #5:List Y --> 1 S --> #6:List Unifier 867 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #5:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> #3:List W --> f(#2:Elt, 1, #4:List) X --> f(#1:List, #2:Elt, #7:List) Z --> 1 Y --> #5:List S --> #6:List Unifier 868 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, j(#5:List, #6:List), #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> #3:List W --> f(#2:Elt, 1, #4:List) X --> f(#1:List, #2:Elt, #8:List) Z --> #5:List Y --> #6:List S --> #7:List Unifier 869 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, 1, #6:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt, #7:List) Z --> 1 Y --> 1 S --> #6:List Unifier 870 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List, #7:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt, #8:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 871 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List, #7:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 872 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, j(#6:List, #7:List), #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt, #9:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 873 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, 1, #6:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt, #7:List) Z --> 1 Y --> 1 S --> #6:List Unifier 874 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List, #7:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt, #8:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 875 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List, #7:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 876 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, j(#6:List, #7:List), #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt, #9:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 877 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, 1, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #3:List W --> f(#2:Elt, j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> 1 S --> #7:List Unifier 878 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #3:List W --> f(#2:Elt, j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt, #9:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 879 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #3:List W --> f(#2:Elt, j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 880 A --> 1 B --> #1:List E --> #2:Elt C --> f(#10:List, j(#7:List, #8:List), #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #3:List W --> f(#2:Elt, j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt, #10:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 881 A --> 1 B --> #1:List E --> #2:Elt C --> f(1, #5:List) D --> #3:List H --> 1 G --> 1 I --> f(#6:List, #4:List) U --> 1 V --> f(#3:List, #2:Elt, 1, #6:List) W --> #4:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #5:List Unifier 882 A --> 1 B --> #1:List E --> #2:Elt C --> f(#5:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> f(#7:List, #4:List) U --> 1 V --> f(#3:List, #2:Elt, 1, #7:List) W --> #4:List X --> f(#1:List, #2:Elt) Z --> #5:List Y --> 1 S --> #6:List Unifier 883 A --> 1 B --> #1:List E --> #2:Elt C --> f(#5:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> f(#7:List, #4:List) U --> 1 V --> f(#3:List, #2:Elt, 1, #7:List) W --> #4:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> #5:List S --> #6:List Unifier 884 A --> 1 B --> #1:List E --> #2:Elt C --> f(j(#5:List, #6:List), #7:List) D --> #3:List H --> 1 G --> 1 I --> f(#8:List, #4:List) U --> 1 V --> f(#3:List, #2:Elt, 1, #8:List) W --> #4:List X --> f(#1:List, #2:Elt) Z --> #5:List Y --> #6:List S --> #7:List Unifier 885 A --> 1 B --> #1:List E --> #2:Elt C --> f(1, #6:List) D --> #3:List H --> #4:List G --> 1 I --> f(#7:List, #5:List) U --> 1 V --> f(#3:List, #2:Elt, #4:List, #7:List) W --> #5:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #6:List Unifier 886 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, #5:List) U --> 1 V --> f(#3:List, #2:Elt, #4:List, #8:List) W --> #5:List X --> f(#1:List, #2:Elt) Z --> #6:List Y --> 1 S --> #7:List Unifier 887 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, #5:List) U --> 1 V --> f(#3:List, #2:Elt, #4:List, #8:List) W --> #5:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> #6:List S --> #7:List Unifier 888 A --> 1 B --> #1:List E --> #2:Elt C --> f(j(#6:List, #7:List), #8:List) D --> #3:List H --> #4:List G --> 1 I --> f(#9:List, #5:List) U --> 1 V --> f(#3:List, #2:Elt, #4:List, #9:List) W --> #5:List X --> f(#1:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #8:List Unifier 889 A --> 1 B --> #1:List E --> #2:Elt C --> f(1, #6:List) D --> #3:List H --> 1 G --> #4:List I --> f(#7:List, #5:List) U --> 1 V --> f(#3:List, #2:Elt, #4:List, #7:List) W --> #5:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #6:List Unifier 890 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, #5:List) U --> 1 V --> f(#3:List, #2:Elt, #4:List, #8:List) W --> #5:List X --> f(#1:List, #2:Elt) Z --> #6:List Y --> 1 S --> #7:List Unifier 891 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, #5:List) U --> 1 V --> f(#3:List, #2:Elt, #4:List, #8:List) W --> #5:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> #6:List S --> #7:List Unifier 892 A --> 1 B --> #1:List E --> #2:Elt C --> f(j(#6:List, #7:List), #8:List) D --> #3:List H --> 1 G --> #4:List I --> f(#9:List, #5:List) U --> 1 V --> f(#3:List, #2:Elt, #4:List, #9:List) W --> #5:List X --> f(#1:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #8:List Unifier 893 A --> 1 B --> #1:List E --> #2:Elt C --> f(1, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#8:List, #6:List) U --> 1 V --> f(#3:List, #2:Elt, j(#4:List, #5:List), #8:List) W --> #6:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #7:List Unifier 894 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, #6:List) U --> 1 V --> f(#3:List, #2:Elt, j(#4:List, #5:List), #9:List) W --> #6:List X --> f(#1:List, #2:Elt) Z --> #7:List Y --> 1 S --> #8:List Unifier 895 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, #6:List) U --> 1 V --> f(#3:List, #2:Elt, j(#4:List, #5:List), #9:List) W --> #6:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> #7:List S --> #8:List Unifier 896 A --> 1 B --> #1:List E --> #2:Elt C --> f(j(#7:List, #8:List), #9:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#10:List, #6:List) U --> 1 V --> f(#3:List, #2:Elt, j(#4:List, #5:List), #10:List) W --> #6:List X --> f(#1:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #9:List Unifier 897 A --> 1 B --> #1:List E --> #2:Elt C --> f(1, #5:List) D --> #3:List H --> f(#6:List, #7:List) G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, #6:List) W --> f(#7:List, #4:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #5:List Unifier 898 A --> 1 B --> #1:List E --> #2:Elt C --> f(#5:List, #6:List) D --> #3:List H --> f(#7:List, #8:List) G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, #7:List) W --> f(#8:List, #4:List) X --> f(#1:List, #2:Elt) Z --> #5:List Y --> 1 S --> #6:List Unifier 899 A --> 1 B --> #1:List E --> #2:Elt C --> f(#5:List, #6:List) D --> #3:List H --> f(#7:List, #8:List) G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, #7:List) W --> f(#8:List, #4:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> #5:List S --> #6:List Unifier 900 A --> 1 B --> #1:List E --> #2:Elt C --> f(j(#5:List, #6:List), #7:List) D --> #3:List H --> f(#8:List, #9:List) G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, #8:List) W --> f(#9:List, #4:List) X --> f(#1:List, #2:Elt) Z --> #5:List Y --> #6:List S --> #7:List Unifier 901 A --> 1 B --> #1:List E --> #2:Elt C --> f(1, #5:List) D --> #3:List H --> 1 G --> f(#6:List, #7:List) I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, #6:List) W --> f(#7:List, #4:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #5:List Unifier 902 A --> 1 B --> #1:List E --> #2:Elt C --> f(#5:List, #6:List) D --> #3:List H --> 1 G --> f(#7:List, #8:List) I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, #7:List) W --> f(#8:List, #4:List) X --> f(#1:List, #2:Elt) Z --> #5:List Y --> 1 S --> #6:List Unifier 903 A --> 1 B --> #1:List E --> #2:Elt C --> f(#5:List, #6:List) D --> #3:List H --> 1 G --> f(#7:List, #8:List) I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, #7:List) W --> f(#8:List, #4:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> #5:List S --> #6:List Unifier 904 A --> 1 B --> #1:List E --> #2:Elt C --> f(j(#5:List, #6:List), #7:List) D --> #3:List H --> 1 G --> f(#8:List, #9:List) I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, #8:List) W --> f(#9:List, #4:List) X --> f(#1:List, #2:Elt) Z --> #5:List Y --> #6:List S --> #7:List Unifier 905 A --> 1 B --> #1:List E --> #2:Elt C --> f(1, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, 1) W --> #4:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #5:List Unifier 906 A --> 1 B --> #1:List E --> #2:Elt C --> f(#5:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, 1) W --> #4:List X --> f(#1:List, #2:Elt) Z --> #5:List Y --> 1 S --> #6:List Unifier 907 A --> 1 B --> #1:List E --> #2:Elt C --> f(#5:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, 1) W --> #4:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> #5:List S --> #6:List Unifier 908 A --> 1 B --> #1:List E --> #2:Elt C --> f(j(#5:List, #6:List), #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, 1) W --> #4:List X --> f(#1:List, #2:Elt) Z --> #5:List Y --> #6:List S --> #7:List Unifier 909 A --> 1 B --> #1:List E --> #2:Elt C --> f(1, #6:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #6:List Unifier 910 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt) Z --> #6:List Y --> 1 S --> #7:List Unifier 911 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> #6:List S --> #7:List Unifier 912 A --> 1 B --> #1:List E --> #2:Elt C --> f(j(#6:List, #7:List), #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #8:List Unifier 913 A --> 1 B --> #1:List E --> #2:Elt C --> f(1, #6:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #6:List Unifier 914 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt) Z --> #6:List Y --> 1 S --> #7:List Unifier 915 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> #6:List S --> #7:List Unifier 916 A --> 1 B --> #1:List E --> #2:Elt C --> f(j(#6:List, #7:List), #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #8:List Unifier 917 A --> 1 B --> #1:List E --> #2:Elt C --> f(1, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #2:Elt, j(#4:List, #5:List)) W --> #6:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #7:List Unifier 918 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #2:Elt, j(#4:List, #5:List)) W --> #6:List X --> f(#1:List, #2:Elt) Z --> #7:List Y --> 1 S --> #8:List Unifier 919 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #2:Elt, j(#4:List, #5:List)) W --> #6:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> #7:List S --> #8:List Unifier 920 A --> 1 B --> #1:List E --> #2:Elt C --> f(j(#7:List, #8:List), #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #2:Elt, j(#4:List, #5:List)) W --> #6:List X --> f(#1:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #9:List Unifier 921 A --> 1 B --> #1:List E --> #2:Elt C --> f(1, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(1, #4:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #5:List Unifier 922 A --> 1 B --> #1:List E --> #2:Elt C --> f(#5:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(1, #4:List) X --> f(#1:List, #2:Elt) Z --> #5:List Y --> 1 S --> #6:List Unifier 923 A --> 1 B --> #1:List E --> #2:Elt C --> f(#5:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(1, #4:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> #5:List S --> #6:List Unifier 924 A --> 1 B --> #1:List E --> #2:Elt C --> f(j(#5:List, #6:List), #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(1, #4:List) X --> f(#1:List, #2:Elt) Z --> #5:List Y --> #6:List S --> #7:List Unifier 925 A --> 1 B --> #1:List E --> #2:Elt C --> f(1, #6:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #6:List Unifier 926 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> #6:List Y --> 1 S --> #7:List Unifier 927 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> #6:List S --> #7:List Unifier 928 A --> 1 B --> #1:List E --> #2:Elt C --> f(j(#6:List, #7:List), #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #8:List Unifier 929 A --> 1 B --> #1:List E --> #2:Elt C --> f(1, #6:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #6:List Unifier 930 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> #6:List Y --> 1 S --> #7:List Unifier 931 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> #6:List S --> #7:List Unifier 932 A --> 1 B --> #1:List E --> #2:Elt C --> f(j(#6:List, #7:List), #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #8:List Unifier 933 A --> 1 B --> #1:List E --> #2:Elt C --> f(1, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #7:List Unifier 934 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt) Z --> #7:List Y --> 1 S --> #8:List Unifier 935 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> #7:List S --> #8:List Unifier 936 A --> 1 B --> #1:List E --> #2:Elt C --> f(j(#7:List, #8:List), #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #9:List Unifier 937 A --> 1 B --> #1:List E --> #2:Elt C --> f(1, #5:List) D --> f(#4:List, #6:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#6:List, #2:Elt, 1, #3:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #5:List Unifier 938 A --> 1 B --> #1:List E --> #2:Elt C --> f(#5:List, #6:List) D --> f(#4:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#7:List, #2:Elt, 1, #3:List) X --> f(#1:List, #2:Elt) Z --> #5:List Y --> 1 S --> #6:List Unifier 939 A --> 1 B --> #1:List E --> #2:Elt C --> f(#5:List, #6:List) D --> f(#4:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#7:List, #2:Elt, 1, #3:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> #5:List S --> #6:List Unifier 940 A --> 1 B --> #1:List E --> #2:Elt C --> f(j(#5:List, #6:List), #7:List) D --> f(#4:List, #8:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#8:List, #2:Elt, 1, #3:List) X --> f(#1:List, #2:Elt) Z --> #5:List Y --> #6:List S --> #7:List Unifier 941 A --> 1 B --> #1:List E --> #2:Elt C --> f(1, #6:List) D --> f(#5:List, #7:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#7:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #6:List Unifier 942 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> f(#5:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt) Z --> #6:List Y --> 1 S --> #7:List Unifier 943 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> f(#5:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> #6:List S --> #7:List Unifier 944 A --> 1 B --> #1:List E --> #2:Elt C --> f(j(#6:List, #7:List), #8:List) D --> f(#5:List, #9:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#9:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #8:List Unifier 945 A --> 1 B --> #1:List E --> #2:Elt C --> f(1, #6:List) D --> f(#5:List, #7:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#7:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #6:List Unifier 946 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> f(#5:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt) Z --> #6:List Y --> 1 S --> #7:List Unifier 947 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> f(#5:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> #6:List S --> #7:List Unifier 948 A --> 1 B --> #1:List E --> #2:Elt C --> f(j(#6:List, #7:List), #8:List) D --> f(#5:List, #9:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#9:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #8:List Unifier 949 A --> 1 B --> #1:List E --> #2:Elt C --> f(1, #7:List) D --> f(#6:List, #8:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#8:List, #2:Elt, j(#3:List, #4:List), #5:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #7:List Unifier 950 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> f(#6:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#9:List, #2:Elt, j(#3:List, #4:List), #5:List) X --> f(#1:List, #2:Elt) Z --> #7:List Y --> 1 S --> #8:List Unifier 951 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> f(#6:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#9:List, #2:Elt, j(#3:List, #4:List), #5:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> #7:List S --> #8:List Unifier 952 A --> 1 B --> #1:List E --> #2:Elt C --> f(j(#7:List, #8:List), #9:List) D --> f(#6:List, #10:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#10:List, #2:Elt, j(#3:List, #4:List), #5:List) X --> f(#1:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #9:List Unifier 953 A --> 1 B --> #1:List E --> #2:Elt C --> f(1, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> #3:List W --> f(#2:Elt, 1, #4:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #5:List Unifier 954 A --> 1 B --> #1:List E --> #2:Elt C --> f(#5:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> #3:List W --> f(#2:Elt, 1, #4:List) X --> f(#1:List, #2:Elt) Z --> #5:List Y --> 1 S --> #6:List Unifier 955 A --> 1 B --> #1:List E --> #2:Elt C --> f(#5:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> #3:List W --> f(#2:Elt, 1, #4:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> #5:List S --> #6:List Unifier 956 A --> 1 B --> #1:List E --> #2:Elt C --> f(j(#5:List, #6:List), #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> #3:List W --> f(#2:Elt, 1, #4:List) X --> f(#1:List, #2:Elt) Z --> #5:List Y --> #6:List S --> #7:List Unifier 957 A --> 1 B --> #1:List E --> #2:Elt C --> f(1, #6:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #6:List Unifier 958 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> #6:List Y --> 1 S --> #7:List Unifier 959 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> #6:List S --> #7:List Unifier 960 A --> 1 B --> #1:List E --> #2:Elt C --> f(j(#6:List, #7:List), #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #8:List Unifier 961 A --> 1 B --> #1:List E --> #2:Elt C --> f(1, #6:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #6:List Unifier 962 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> #6:List Y --> 1 S --> #7:List Unifier 963 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> #6:List S --> #7:List Unifier 964 A --> 1 B --> #1:List E --> #2:Elt C --> f(j(#6:List, #7:List), #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #8:List Unifier 965 A --> 1 B --> #1:List E --> #2:Elt C --> f(1, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #3:List W --> f(#2:Elt, j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #7:List Unifier 966 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #3:List W --> f(#2:Elt, j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt) Z --> #7:List Y --> 1 S --> #8:List Unifier 967 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #3:List W --> f(#2:Elt, j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> #7:List S --> #8:List Unifier 968 A --> 1 B --> #1:List E --> #2:Elt C --> f(j(#7:List, #8:List), #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #3:List W --> f(#2:Elt, j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #9:List Unifier 969 A --> 1 B --> f(#4:List, #7:List) E --> #1:Elt C --> f(#8:List, #5:List) D --> #2:List H --> 1 G --> 1 I --> f(#6:List, #3:List) U --> 1 V --> f(#2:List, #1:Elt, 1, #6:List) W --> #3:List X --> #4:List Z --> f(#7:List, #1:Elt, #8:List) Y --> 1 S --> #5:List Unifier 970 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> f(#9:List, #6:List) D --> #2:List H --> #3:List G --> 1 I --> f(#7:List, #4:List) U --> 1 V --> f(#2:List, #1:Elt, #3:List, #7:List) W --> #4:List X --> #5:List Z --> f(#8:List, #1:Elt, #9:List) Y --> 1 S --> #6:List Unifier 971 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> f(#9:List, #6:List) D --> #2:List H --> 1 G --> #3:List I --> f(#7:List, #4:List) U --> 1 V --> f(#2:List, #1:Elt, #3:List, #7:List) W --> #4:List X --> #5:List Z --> f(#8:List, #1:Elt, #9:List) Y --> 1 S --> #6:List Unifier 972 A --> 1 B --> f(#6:List, #9:List) E --> #1:Elt C --> f(#10:List, #7:List) D --> #2:List H --> #3:List G --> #4:List I --> f(#8:List, #5:List) U --> 1 V --> f(#2:List, #1:Elt, j(#3:List, #4:List), #8:List) W --> #5:List X --> #6:List Z --> f(#9:List, #1:Elt, #10:List) Y --> 1 S --> #7:List Unifier 973 A --> 1 B --> f(#4:List, #7:List) E --> #1:Elt C --> f(#8:List, #5:List) D --> #2:List H --> 1 G --> 1 I --> f(#6:List, #3:List) U --> 1 V --> f(#2:List, #1:Elt, 1, #6:List) W --> #3:List X --> #4:List Z --> 1 Y --> f(#7:List, #1:Elt, #8:List) S --> #5:List Unifier 974 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> f(#9:List, #6:List) D --> #2:List H --> #3:List G --> 1 I --> f(#7:List, #4:List) U --> 1 V --> f(#2:List, #1:Elt, #3:List, #7:List) W --> #4:List X --> #5:List Z --> 1 Y --> f(#8:List, #1:Elt, #9:List) S --> #6:List Unifier 975 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> f(#9:List, #6:List) D --> #2:List H --> 1 G --> #3:List I --> f(#7:List, #4:List) U --> 1 V --> f(#2:List, #1:Elt, #3:List, #7:List) W --> #4:List X --> #5:List Z --> 1 Y --> f(#8:List, #1:Elt, #9:List) S --> #6:List Unifier 976 A --> 1 B --> f(#6:List, #9:List) E --> #1:Elt C --> f(#10:List, #7:List) D --> #2:List H --> #3:List G --> #4:List I --> f(#8:List, #5:List) U --> 1 V --> f(#2:List, #1:Elt, j(#3:List, #4:List), #8:List) W --> #5:List X --> #6:List Z --> 1 Y --> f(#9:List, #1:Elt, #10:List) S --> #7:List Unifier 977 A --> 1 B --> f(#4:List, #8:List) E --> #1:Elt C --> f(#9:List, #5:List) D --> #2:List H --> f(#6:List, #7:List) G --> 1 I --> #3:List U --> 1 V --> f(#2:List, #1:Elt, #6:List) W --> f(#7:List, #3:List) X --> #4:List Z --> f(#8:List, #1:Elt, #9:List) Y --> 1 S --> #5:List Unifier 978 A --> 1 B --> f(#4:List, #8:List) E --> #1:Elt C --> f(#9:List, #5:List) D --> #2:List H --> f(#6:List, #7:List) G --> 1 I --> #3:List U --> 1 V --> f(#2:List, #1:Elt, #6:List) W --> f(#7:List, #3:List) X --> #4:List Z --> 1 Y --> f(#8:List, #1:Elt, #9:List) S --> #5:List Unifier 979 A --> 1 B --> f(#4:List, #8:List) E --> #1:Elt C --> f(#9:List, #5:List) D --> #2:List H --> 1 G --> f(#6:List, #7:List) I --> #3:List U --> 1 V --> f(#2:List, #1:Elt, #6:List) W --> f(#7:List, #3:List) X --> #4:List Z --> f(#8:List, #1:Elt, #9:List) Y --> 1 S --> #5:List Unifier 980 A --> 1 B --> f(#4:List, #8:List) E --> #1:Elt C --> f(#9:List, #5:List) D --> #2:List H --> 1 G --> f(#6:List, #7:List) I --> #3:List U --> 1 V --> f(#2:List, #1:Elt, #6:List) W --> f(#7:List, #3:List) X --> #4:List Z --> 1 Y --> f(#8:List, #1:Elt, #9:List) S --> #5:List Unifier 981 A --> 1 B --> f(#4:List, #6:List) E --> #1:Elt C --> f(#7:List, #5:List) D --> #2:List H --> 1 G --> 1 I --> #3:List U --> 1 V --> f(#2:List, #1:Elt, 1) W --> #3:List X --> #4:List Z --> f(#6:List, #1:Elt, #7:List) Y --> 1 S --> #5:List Unifier 982 A --> 1 B --> f(#5:List, #7:List) E --> #1:Elt C --> f(#8:List, #6:List) D --> #2:List H --> #3:List G --> 1 I --> #4:List U --> 1 V --> f(#2:List, #1:Elt, #3:List) W --> #4:List X --> #5:List Z --> f(#7:List, #1:Elt, #8:List) Y --> 1 S --> #6:List Unifier 983 A --> 1 B --> f(#5:List, #7:List) E --> #1:Elt C --> f(#8:List, #6:List) D --> #2:List H --> 1 G --> #3:List I --> #4:List U --> 1 V --> f(#2:List, #1:Elt, #3:List) W --> #4:List X --> #5:List Z --> f(#7:List, #1:Elt, #8:List) Y --> 1 S --> #6:List Unifier 984 A --> 1 B --> f(#6:List, #8:List) E --> #1:Elt C --> f(#9:List, #7:List) D --> #2:List H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> f(#2:List, #1:Elt, j(#3:List, #4:List)) W --> #5:List X --> #6:List Z --> f(#8:List, #1:Elt, #9:List) Y --> 1 S --> #7:List Unifier 985 A --> 1 B --> f(#4:List, #6:List) E --> #1:Elt C --> f(#7:List, #5:List) D --> #2:List H --> 1 G --> 1 I --> #3:List U --> 1 V --> f(#2:List, #1:Elt, 1) W --> #3:List X --> #4:List Z --> 1 Y --> f(#6:List, #1:Elt, #7:List) S --> #5:List Unifier 986 A --> 1 B --> f(#5:List, #7:List) E --> #1:Elt C --> f(#8:List, #6:List) D --> #2:List H --> #3:List G --> 1 I --> #4:List U --> 1 V --> f(#2:List, #1:Elt, #3:List) W --> #4:List X --> #5:List Z --> 1 Y --> f(#7:List, #1:Elt, #8:List) S --> #6:List Unifier 987 A --> 1 B --> f(#5:List, #7:List) E --> #1:Elt C --> f(#8:List, #6:List) D --> #2:List H --> 1 G --> #3:List I --> #4:List U --> 1 V --> f(#2:List, #1:Elt, #3:List) W --> #4:List X --> #5:List Z --> 1 Y --> f(#7:List, #1:Elt, #8:List) S --> #6:List Unifier 988 A --> 1 B --> f(#6:List, #8:List) E --> #1:Elt C --> f(#9:List, #7:List) D --> #2:List H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> f(#2:List, #1:Elt, j(#3:List, #4:List)) W --> #5:List X --> #6:List Z --> 1 Y --> f(#8:List, #1:Elt, #9:List) S --> #7:List Unifier 989 A --> 1 B --> f(#4:List, #6:List) E --> #1:Elt C --> f(#7:List, #5:List) D --> #2:List H --> 1 G --> 1 I --> #3:List U --> 1 V --> f(#2:List, #1:Elt) W --> f(1, #3:List) X --> #4:List Z --> f(#6:List, #1:Elt, #7:List) Y --> 1 S --> #5:List Unifier 990 A --> 1 B --> f(#5:List, #7:List) E --> #1:Elt C --> f(#8:List, #6:List) D --> #2:List H --> #3:List G --> 1 I --> #4:List U --> 1 V --> f(#2:List, #1:Elt) W --> f(#3:List, #4:List) X --> #5:List Z --> f(#7:List, #1:Elt, #8:List) Y --> 1 S --> #6:List Unifier 991 A --> 1 B --> f(#5:List, #7:List) E --> #1:Elt C --> f(#8:List, #6:List) D --> #2:List H --> 1 G --> #3:List I --> #4:List U --> 1 V --> f(#2:List, #1:Elt) W --> f(#3:List, #4:List) X --> #5:List Z --> f(#7:List, #1:Elt, #8:List) Y --> 1 S --> #6:List Unifier 992 A --> 1 B --> f(#6:List, #8:List) E --> #1:Elt C --> f(#9:List, #7:List) D --> #2:List H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> f(#2:List, #1:Elt) W --> f(j(#3:List, #4:List), #5:List) X --> #6:List Z --> f(#8:List, #1:Elt, #9:List) Y --> 1 S --> #7:List Unifier 993 A --> 1 B --> f(#4:List, #6:List) E --> #1:Elt C --> f(#7:List, #5:List) D --> #2:List H --> 1 G --> 1 I --> #3:List U --> 1 V --> f(#2:List, #1:Elt) W --> f(1, #3:List) X --> #4:List Z --> 1 Y --> f(#6:List, #1:Elt, #7:List) S --> #5:List Unifier 994 A --> 1 B --> f(#5:List, #7:List) E --> #1:Elt C --> f(#8:List, #6:List) D --> #2:List H --> #3:List G --> 1 I --> #4:List U --> 1 V --> f(#2:List, #1:Elt) W --> f(#3:List, #4:List) X --> #5:List Z --> 1 Y --> f(#7:List, #1:Elt, #8:List) S --> #6:List Unifier 995 A --> 1 B --> f(#5:List, #7:List) E --> #1:Elt C --> f(#8:List, #6:List) D --> #2:List H --> 1 G --> #3:List I --> #4:List U --> 1 V --> f(#2:List, #1:Elt) W --> f(#3:List, #4:List) X --> #5:List Z --> 1 Y --> f(#7:List, #1:Elt, #8:List) S --> #6:List Unifier 996 A --> 1 B --> f(#6:List, #8:List) E --> #1:Elt C --> f(#9:List, #7:List) D --> #2:List H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> f(#2:List, #1:Elt) W --> f(j(#3:List, #4:List), #5:List) X --> #6:List Z --> 1 Y --> f(#8:List, #1:Elt, #9:List) S --> #7:List Unifier 997 A --> 1 B --> f(#4:List, #7:List) E --> #1:Elt C --> f(#8:List, #5:List) D --> f(#3:List, #6:List) H --> 1 G --> 1 I --> #2:List U --> 1 V --> #3:List W --> f(#6:List, #1:Elt, 1, #2:List) X --> #4:List Z --> f(#7:List, #1:Elt, #8:List) Y --> 1 S --> #5:List Unifier 998 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> f(#9:List, #6:List) D --> f(#4:List, #7:List) H --> #2:List G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#7:List, #1:Elt, #2:List, #3:List) X --> #5:List Z --> f(#8:List, #1:Elt, #9:List) Y --> 1 S --> #6:List Unifier 999 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> f(#9:List, #6:List) D --> f(#4:List, #7:List) H --> 1 G --> #2:List I --> #3:List U --> 1 V --> #4:List W --> f(#7:List, #1:Elt, #2:List, #3:List) X --> #5:List Z --> f(#8:List, #1:Elt, #9:List) Y --> 1 S --> #6:List Unifier 1000 A --> 1 B --> f(#6:List, #9:List) E --> #1:Elt C --> f(#10:List, #7:List) D --> f(#5:List, #8:List) H --> #2:List G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, j(#2:List, #3:List), #4:List) X --> #6:List Z --> f(#9:List, #1:Elt, #10:List) Y --> 1 S --> #7:List Unifier 1001 A --> 1 B --> f(#4:List, #7:List) E --> #1:Elt C --> f(#8:List, #5:List) D --> f(#3:List, #6:List) H --> 1 G --> 1 I --> #2:List U --> 1 V --> #3:List W --> f(#6:List, #1:Elt, 1, #2:List) X --> #4:List Z --> 1 Y --> f(#7:List, #1:Elt, #8:List) S --> #5:List Unifier 1002 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> f(#9:List, #6:List) D --> f(#4:List, #7:List) H --> #2:List G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#7:List, #1:Elt, #2:List, #3:List) X --> #5:List Z --> 1 Y --> f(#8:List, #1:Elt, #9:List) S --> #6:List Unifier 1003 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> f(#9:List, #6:List) D --> f(#4:List, #7:List) H --> 1 G --> #2:List I --> #3:List U --> 1 V --> #4:List W --> f(#7:List, #1:Elt, #2:List, #3:List) X --> #5:List Z --> 1 Y --> f(#8:List, #1:Elt, #9:List) S --> #6:List Unifier 1004 A --> 1 B --> f(#6:List, #9:List) E --> #1:Elt C --> f(#10:List, #7:List) D --> f(#5:List, #8:List) H --> #2:List G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, j(#2:List, #3:List), #4:List) X --> #6:List Z --> 1 Y --> f(#9:List, #1:Elt, #10:List) S --> #7:List Unifier 1005 A --> 1 B --> f(#4:List, #6:List) E --> #1:Elt C --> f(#7:List, #5:List) D --> #2:List H --> 1 G --> 1 I --> #3:List U --> 1 V --> #2:List W --> f(#1:Elt, 1, #3:List) X --> #4:List Z --> f(#6:List, #1:Elt, #7:List) Y --> 1 S --> #5:List Unifier 1006 A --> 1 B --> f(#5:List, #7:List) E --> #1:Elt C --> f(#8:List, #6:List) D --> #2:List H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #2:List W --> f(#1:Elt, #3:List, #4:List) X --> #5:List Z --> f(#7:List, #1:Elt, #8:List) Y --> 1 S --> #6:List Unifier 1007 A --> 1 B --> f(#5:List, #7:List) E --> #1:Elt C --> f(#8:List, #6:List) D --> #2:List H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #2:List W --> f(#1:Elt, #3:List, #4:List) X --> #5:List Z --> f(#7:List, #1:Elt, #8:List) Y --> 1 S --> #6:List Unifier 1008 A --> 1 B --> f(#6:List, #8:List) E --> #1:Elt C --> f(#9:List, #7:List) D --> #2:List H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #2:List W --> f(#1:Elt, j(#3:List, #4:List), #5:List) X --> #6:List Z --> f(#8:List, #1:Elt, #9:List) Y --> 1 S --> #7:List Unifier 1009 A --> 1 B --> f(#4:List, #6:List) E --> #1:Elt C --> f(#7:List, #5:List) D --> #2:List H --> 1 G --> 1 I --> #3:List U --> 1 V --> #2:List W --> f(#1:Elt, 1, #3:List) X --> #4:List Z --> 1 Y --> f(#6:List, #1:Elt, #7:List) S --> #5:List Unifier 1010 A --> 1 B --> f(#5:List, #7:List) E --> #1:Elt C --> f(#8:List, #6:List) D --> #2:List H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #2:List W --> f(#1:Elt, #3:List, #4:List) X --> #5:List Z --> 1 Y --> f(#7:List, #1:Elt, #8:List) S --> #6:List Unifier 1011 A --> 1 B --> f(#5:List, #7:List) E --> #1:Elt C --> f(#8:List, #6:List) D --> #2:List H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #2:List W --> f(#1:Elt, #3:List, #4:List) X --> #5:List Z --> 1 Y --> f(#7:List, #1:Elt, #8:List) S --> #6:List Unifier 1012 A --> 1 B --> f(#6:List, #8:List) E --> #1:Elt C --> f(#9:List, #7:List) D --> #2:List H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #2:List W --> f(#1:Elt, j(#3:List, #4:List), #5:List) X --> #6:List Z --> 1 Y --> f(#8:List, #1:Elt, #9:List) S --> #7:List Unifier 1013 A --> 1 B --> f(#5:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#6:List, #4:List) U --> 1 V --> f(#3:List, #1:Elt, 1, #6:List) W --> #4:List X --> #5:List Z --> f(#7:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1014 A --> 1 B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#7:List, #5:List) U --> 1 V --> f(#3:List, #1:Elt, #4:List, #7:List) W --> #5:List X --> #6:List Z --> f(#8:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1015 A --> 1 B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#7:List, #5:List) U --> 1 V --> f(#3:List, #1:Elt, #4:List, #7:List) W --> #5:List X --> #6:List Z --> f(#8:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1016 A --> 1 B --> f(#7:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#8:List, #6:List) U --> 1 V --> f(#3:List, #1:Elt, j(#4:List, #5:List), #8:List) W --> #6:List X --> #7:List Z --> f(#9:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1017 A --> 1 B --> f(#5:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#6:List, #4:List) U --> 1 V --> f(#3:List, #1:Elt, 1, #6:List) W --> #4:List X --> #5:List Z --> 1 Y --> f(#7:List, #1:Elt) S --> #2:List Unifier 1018 A --> 1 B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#7:List, #5:List) U --> 1 V --> f(#3:List, #1:Elt, #4:List, #7:List) W --> #5:List X --> #6:List Z --> 1 Y --> f(#8:List, #1:Elt) S --> #2:List Unifier 1019 A --> 1 B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#7:List, #5:List) U --> 1 V --> f(#3:List, #1:Elt, #4:List, #7:List) W --> #5:List X --> #6:List Z --> 1 Y --> f(#8:List, #1:Elt) S --> #2:List Unifier 1020 A --> 1 B --> f(#7:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#8:List, #6:List) U --> 1 V --> f(#3:List, #1:Elt, j(#4:List, #5:List), #8:List) W --> #6:List X --> #7:List Z --> 1 Y --> f(#9:List, #1:Elt) S --> #2:List Unifier 1021 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#6:List, #7:List) G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, #6:List) W --> f(#7:List, #4:List) X --> #5:List Z --> f(#8:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1022 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#6:List, #7:List) G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, #6:List) W --> f(#7:List, #4:List) X --> #5:List Z --> 1 Y --> f(#8:List, #1:Elt) S --> #2:List Unifier 1023 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#6:List, #7:List) I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, #6:List) W --> f(#7:List, #4:List) X --> #5:List Z --> f(#8:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1024 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#6:List, #7:List) I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, #6:List) W --> f(#7:List, #4:List) X --> #5:List Z --> 1 Y --> f(#8:List, #1:Elt) S --> #2:List Unifier 1025 A --> 1 B --> f(#5:List, #6:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, 1) W --> #4:List X --> #5:List Z --> f(#6:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1026 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #6:List Z --> f(#7:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1027 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #6:List Z --> f(#7:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1028 A --> 1 B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #1:Elt, j(#4:List, #5:List)) W --> #6:List X --> #7:List Z --> f(#8:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1029 A --> 1 B --> f(#5:List, #6:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, 1) W --> #4:List X --> #5:List Z --> 1 Y --> f(#6:List, #1:Elt) S --> #2:List Unifier 1030 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #6:List Z --> 1 Y --> f(#7:List, #1:Elt) S --> #2:List Unifier 1031 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #6:List Z --> 1 Y --> f(#7:List, #1:Elt) S --> #2:List Unifier 1032 A --> 1 B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #1:Elt, j(#4:List, #5:List)) W --> #6:List X --> #7:List Z --> 1 Y --> f(#8:List, #1:Elt) S --> #2:List Unifier 1033 A --> 1 B --> f(#5:List, #6:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(1, #4:List) X --> #5:List Z --> f(#6:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1034 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #6:List Z --> f(#7:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1035 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #6:List Z --> f(#7:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1036 A --> 1 B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> #7:List Z --> f(#8:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1037 A --> 1 B --> f(#5:List, #6:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(1, #4:List) X --> #5:List Z --> 1 Y --> f(#6:List, #1:Elt) S --> #2:List Unifier 1038 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #6:List Z --> 1 Y --> f(#7:List, #1:Elt) S --> #2:List Unifier 1039 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #6:List Z --> 1 Y --> f(#7:List, #1:Elt) S --> #2:List Unifier 1040 A --> 1 B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> #7:List Z --> 1 Y --> f(#8:List, #1:Elt) S --> #2:List Unifier 1041 A --> 1 B --> f(#5:List, #7:List) E --> #1:Elt C --> #2:List D --> f(#4:List, #6:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#6:List, #1:Elt, 1, #3:List) X --> #5:List Z --> f(#7:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1042 A --> 1 B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #7:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#7:List, #1:Elt, #3:List, #4:List) X --> #6:List Z --> f(#8:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1043 A --> 1 B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #7:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#7:List, #1:Elt, #3:List, #4:List) X --> #6:List Z --> f(#8:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1044 A --> 1 B --> f(#7:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #8:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#8:List, #1:Elt, j(#3:List, #4:List), #5:List) X --> #7:List Z --> f(#9:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1045 A --> 1 B --> f(#5:List, #7:List) E --> #1:Elt C --> #2:List D --> f(#4:List, #6:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#6:List, #1:Elt, 1, #3:List) X --> #5:List Z --> 1 Y --> f(#7:List, #1:Elt) S --> #2:List Unifier 1046 A --> 1 B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #7:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#7:List, #1:Elt, #3:List, #4:List) X --> #6:List Z --> 1 Y --> f(#8:List, #1:Elt) S --> #2:List Unifier 1047 A --> 1 B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #7:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#7:List, #1:Elt, #3:List, #4:List) X --> #6:List Z --> 1 Y --> f(#8:List, #1:Elt) S --> #2:List Unifier 1048 A --> 1 B --> f(#7:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #8:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#8:List, #1:Elt, j(#3:List, #4:List), #5:List) X --> #7:List Z --> 1 Y --> f(#9:List, #1:Elt) S --> #2:List Unifier 1049 A --> 1 B --> f(#5:List, #6:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> #3:List W --> f(#1:Elt, 1, #4:List) X --> #5:List Z --> f(#6:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1050 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #6:List Z --> f(#7:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1051 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #6:List Z --> f(#7:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1052 A --> 1 B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #3:List W --> f(#1:Elt, j(#4:List, #5:List), #6:List) X --> #7:List Z --> f(#8:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1053 A --> 1 B --> f(#5:List, #6:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> #3:List W --> f(#1:Elt, 1, #4:List) X --> #5:List Z --> 1 Y --> f(#6:List, #1:Elt) S --> #2:List Unifier 1054 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #6:List Z --> 1 Y --> f(#7:List, #1:Elt) S --> #2:List Unifier 1055 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #6:List Z --> 1 Y --> f(#7:List, #1:Elt) S --> #2:List Unifier 1056 A --> 1 B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #3:List W --> f(#1:Elt, j(#4:List, #5:List), #6:List) X --> #7:List Z --> 1 Y --> f(#8:List, #1:Elt) S --> #2:List Unifier 1057 A --> 1 B --> f(#5:List, 1, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#6:List, #4:List) U --> 1 V --> f(#3:List, #1:Elt, 1, #6:List) W --> #4:List X --> #5:List Z --> 1 Y --> 1 S --> f(#7:List, #1:Elt, #2:List) Unifier 1058 A --> 1 B --> f(#5:List, #6:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#7:List, #4:List) U --> 1 V --> f(#3:List, #1:Elt, 1, #7:List) W --> #4:List X --> #5:List Z --> #6:List Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 1059 A --> 1 B --> f(#5:List, #6:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#7:List, #4:List) U --> 1 V --> f(#3:List, #1:Elt, 1, #7:List) W --> #4:List X --> #5:List Z --> 1 Y --> #6:List S --> f(#8:List, #1:Elt, #2:List) Unifier 1060 A --> 1 B --> f(#5:List, j(#6:List, #7:List), #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#8:List, #4:List) U --> 1 V --> f(#3:List, #1:Elt, 1, #8:List) W --> #4:List X --> #5:List Z --> #6:List Y --> #7:List S --> f(#9:List, #1:Elt, #2:List) Unifier 1061 A --> 1 B --> f(#6:List, 1, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#7:List, #5:List) U --> 1 V --> f(#3:List, #1:Elt, #4:List, #7:List) W --> #5:List X --> #6:List Z --> 1 Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 1062 A --> 1 B --> f(#6:List, #7:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, #5:List) U --> 1 V --> f(#3:List, #1:Elt, #4:List, #8:List) W --> #5:List X --> #6:List Z --> #7:List Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 1063 A --> 1 B --> f(#6:List, #7:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, #5:List) U --> 1 V --> f(#3:List, #1:Elt, #4:List, #8:List) W --> #5:List X --> #6:List Z --> 1 Y --> #7:List S --> f(#9:List, #1:Elt, #2:List) Unifier 1064 A --> 1 B --> f(#6:List, j(#7:List, #8:List), #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#9:List, #5:List) U --> 1 V --> f(#3:List, #1:Elt, #4:List, #9:List) W --> #5:List X --> #6:List Z --> #7:List Y --> #8:List S --> f(#10:List, #1:Elt, #2:List) Unifier 1065 A --> 1 B --> f(#6:List, 1, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#7:List, #5:List) U --> 1 V --> f(#3:List, #1:Elt, #4:List, #7:List) W --> #5:List X --> #6:List Z --> 1 Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 1066 A --> 1 B --> f(#6:List, #7:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, #5:List) U --> 1 V --> f(#3:List, #1:Elt, #4:List, #8:List) W --> #5:List X --> #6:List Z --> #7:List Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 1067 A --> 1 B --> f(#6:List, #7:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, #5:List) U --> 1 V --> f(#3:List, #1:Elt, #4:List, #8:List) W --> #5:List X --> #6:List Z --> 1 Y --> #7:List S --> f(#9:List, #1:Elt, #2:List) Unifier 1068 A --> 1 B --> f(#6:List, j(#7:List, #8:List), #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#9:List, #5:List) U --> 1 V --> f(#3:List, #1:Elt, #4:List, #9:List) W --> #5:List X --> #6:List Z --> #7:List Y --> #8:List S --> f(#10:List, #1:Elt, #2:List) Unifier 1069 A --> 1 B --> f(#7:List, 1, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#8:List, #6:List) U --> 1 V --> f(#3:List, #1:Elt, j(#4:List, #5:List), #8:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 1070 A --> 1 B --> f(#7:List, #8:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, #6:List) U --> 1 V --> f(#3:List, #1:Elt, j(#4:List, #5:List), #9:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#10:List, #1:Elt, #2:List) Unifier 1071 A --> 1 B --> f(#7:List, #8:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, #6:List) U --> 1 V --> f(#3:List, #1:Elt, j(#4:List, #5:List), #9:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#10:List, #1:Elt, #2:List) Unifier 1072 A --> 1 B --> f(#7:List, j(#8:List, #9:List), #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#10:List, #6:List) U --> 1 V --> f(#3:List, #1:Elt, j(#4:List, #5:List), #10:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#11:List, #1:Elt, #2:List) Unifier 1073 A --> 1 B --> f(#5:List, 1, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#6:List, #7:List) G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, #6:List) W --> f(#7:List, #4:List) X --> #5:List Z --> 1 Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 1074 A --> 1 B --> f(#5:List, #6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#7:List, #8:List) G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, #7:List) W --> f(#8:List, #4:List) X --> #5:List Z --> #6:List Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 1075 A --> 1 B --> f(#5:List, #6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#7:List, #8:List) G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, #7:List) W --> f(#8:List, #4:List) X --> #5:List Z --> 1 Y --> #6:List S --> f(#9:List, #1:Elt, #2:List) Unifier 1076 A --> 1 B --> f(#5:List, j(#6:List, #7:List), #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#8:List, #9:List) G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, #8:List) W --> f(#9:List, #4:List) X --> #5:List Z --> #6:List Y --> #7:List S --> f(#10:List, #1:Elt, #2:List) Unifier 1077 A --> 1 B --> f(#5:List, 1, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#6:List, #7:List) I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, #6:List) W --> f(#7:List, #4:List) X --> #5:List Z --> 1 Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 1078 A --> 1 B --> f(#5:List, #6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#7:List, #8:List) I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, #7:List) W --> f(#8:List, #4:List) X --> #5:List Z --> #6:List Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 1079 A --> 1 B --> f(#5:List, #6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#7:List, #8:List) I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, #7:List) W --> f(#8:List, #4:List) X --> #5:List Z --> 1 Y --> #6:List S --> f(#9:List, #1:Elt, #2:List) Unifier 1080 A --> 1 B --> f(#5:List, j(#6:List, #7:List), #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#8:List, #9:List) I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, #8:List) W --> f(#9:List, #4:List) X --> #5:List Z --> #6:List Y --> #7:List S --> f(#10:List, #1:Elt, #2:List) Unifier 1081 A --> 1 B --> f(#5:List, 1, #6:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, 1) W --> #4:List X --> #5:List Z --> 1 Y --> 1 S --> f(#6:List, #1:Elt, #2:List) Unifier 1082 A --> 1 B --> f(#5:List, #6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, 1) W --> #4:List X --> #5:List Z --> #6:List Y --> 1 S --> f(#7:List, #1:Elt, #2:List) Unifier 1083 A --> 1 B --> f(#5:List, #6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, 1) W --> #4:List X --> #5:List Z --> 1 Y --> #6:List S --> f(#7:List, #1:Elt, #2:List) Unifier 1084 A --> 1 B --> f(#5:List, j(#6:List, #7:List), #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, 1) W --> #4:List X --> #5:List Z --> #6:List Y --> #7:List S --> f(#8:List, #1:Elt, #2:List) Unifier 1085 A --> 1 B --> f(#6:List, 1, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #6:List Z --> 1 Y --> 1 S --> f(#7:List, #1:Elt, #2:List) Unifier 1086 A --> 1 B --> f(#6:List, #7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #6:List Z --> #7:List Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 1087 A --> 1 B --> f(#6:List, #7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #6:List Z --> 1 Y --> #7:List S --> f(#8:List, #1:Elt, #2:List) Unifier 1088 A --> 1 B --> f(#6:List, j(#7:List, #8:List), #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #6:List Z --> #7:List Y --> #8:List S --> f(#9:List, #1:Elt, #2:List) Unifier 1089 A --> 1 B --> f(#6:List, 1, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #6:List Z --> 1 Y --> 1 S --> f(#7:List, #1:Elt, #2:List) Unifier 1090 A --> 1 B --> f(#6:List, #7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #6:List Z --> #7:List Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 1091 A --> 1 B --> f(#6:List, #7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #6:List Z --> 1 Y --> #7:List S --> f(#8:List, #1:Elt, #2:List) Unifier 1092 A --> 1 B --> f(#6:List, j(#7:List, #8:List), #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #6:List Z --> #7:List Y --> #8:List S --> f(#9:List, #1:Elt, #2:List) Unifier 1093 A --> 1 B --> f(#7:List, 1, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #1:Elt, j(#4:List, #5:List)) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 1094 A --> 1 B --> f(#7:List, #8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #1:Elt, j(#4:List, #5:List)) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 1095 A --> 1 B --> f(#7:List, #8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #1:Elt, j(#4:List, #5:List)) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#9:List, #1:Elt, #2:List) Unifier 1096 A --> 1 B --> f(#7:List, j(#8:List, #9:List), #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #1:Elt, j(#4:List, #5:List)) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#10:List, #1:Elt, #2:List) Unifier 1097 A --> 1 B --> f(#5:List, 1, #6:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(1, #4:List) X --> #5:List Z --> 1 Y --> 1 S --> f(#6:List, #1:Elt, #2:List) Unifier 1098 A --> 1 B --> f(#5:List, #6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(1, #4:List) X --> #5:List Z --> #6:List Y --> 1 S --> f(#7:List, #1:Elt, #2:List) Unifier 1099 A --> 1 B --> f(#5:List, #6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(1, #4:List) X --> #5:List Z --> 1 Y --> #6:List S --> f(#7:List, #1:Elt, #2:List) Unifier 1100 A --> 1 B --> f(#5:List, j(#6:List, #7:List), #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(1, #4:List) X --> #5:List Z --> #6:List Y --> #7:List S --> f(#8:List, #1:Elt, #2:List) Unifier 1101 A --> 1 B --> f(#6:List, 1, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#7:List, #1:Elt, #2:List) Unifier 1102 A --> 1 B --> f(#6:List, #7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 1103 A --> 1 B --> f(#6:List, #7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#8:List, #1:Elt, #2:List) Unifier 1104 A --> 1 B --> f(#6:List, j(#7:List, #8:List), #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#9:List, #1:Elt, #2:List) Unifier 1105 A --> 1 B --> f(#6:List, 1, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#7:List, #1:Elt, #2:List) Unifier 1106 A --> 1 B --> f(#6:List, #7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 1107 A --> 1 B --> f(#6:List, #7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#8:List, #1:Elt, #2:List) Unifier 1108 A --> 1 B --> f(#6:List, j(#7:List, #8:List), #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#9:List, #1:Elt, #2:List) Unifier 1109 A --> 1 B --> f(#7:List, 1, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 1110 A --> 1 B --> f(#7:List, #8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 1111 A --> 1 B --> f(#7:List, #8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#9:List, #1:Elt, #2:List) Unifier 1112 A --> 1 B --> f(#7:List, j(#8:List, #9:List), #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#10:List, #1:Elt, #2:List) Unifier 1113 A --> 1 B --> f(#5:List, 1, #7:List) E --> #1:Elt C --> #2:List D --> f(#4:List, #6:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#6:List, #1:Elt, 1, #3:List) X --> #5:List Z --> 1 Y --> 1 S --> f(#7:List, #1:Elt, #2:List) Unifier 1114 A --> 1 B --> f(#5:List, #6:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#4:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#7:List, #1:Elt, 1, #3:List) X --> #5:List Z --> #6:List Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 1115 A --> 1 B --> f(#5:List, #6:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#4:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#7:List, #1:Elt, 1, #3:List) X --> #5:List Z --> 1 Y --> #6:List S --> f(#8:List, #1:Elt, #2:List) Unifier 1116 A --> 1 B --> f(#5:List, j(#6:List, #7:List), #9:List) E --> #1:Elt C --> #2:List D --> f(#4:List, #8:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#8:List, #1:Elt, 1, #3:List) X --> #5:List Z --> #6:List Y --> #7:List S --> f(#9:List, #1:Elt, #2:List) Unifier 1117 A --> 1 B --> f(#6:List, 1, #8:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #7:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#7:List, #1:Elt, #3:List, #4:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 1118 A --> 1 B --> f(#6:List, #7:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #3:List, #4:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 1119 A --> 1 B --> f(#6:List, #7:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #3:List, #4:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#9:List, #1:Elt, #2:List) Unifier 1120 A --> 1 B --> f(#6:List, j(#7:List, #8:List), #10:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #9:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#9:List, #1:Elt, #3:List, #4:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#10:List, #1:Elt, #2:List) Unifier 1121 A --> 1 B --> f(#6:List, 1, #8:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #7:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#7:List, #1:Elt, #3:List, #4:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 1122 A --> 1 B --> f(#6:List, #7:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #3:List, #4:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 1123 A --> 1 B --> f(#6:List, #7:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #3:List, #4:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#9:List, #1:Elt, #2:List) Unifier 1124 A --> 1 B --> f(#6:List, j(#7:List, #8:List), #10:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #9:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#9:List, #1:Elt, #3:List, #4:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#10:List, #1:Elt, #2:List) Unifier 1125 A --> 1 B --> f(#7:List, 1, #9:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #8:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#8:List, #1:Elt, j(#3:List, #4:List), #5:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 1126 A --> 1 B --> f(#7:List, #8:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#9:List, #1:Elt, j(#3:List, #4:List), #5:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#10:List, #1:Elt, #2:List) Unifier 1127 A --> 1 B --> f(#7:List, #8:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#9:List, #1:Elt, j(#3:List, #4:List), #5:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#10:List, #1:Elt, #2:List) Unifier 1128 A --> 1 B --> f(#7:List, j(#8:List, #9:List), #11:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #10:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#10:List, #1:Elt, j(#3:List, #4:List), #5:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#11:List, #1:Elt, #2:List) Unifier 1129 A --> 1 B --> f(#5:List, 1, #6:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> #3:List W --> f(#1:Elt, 1, #4:List) X --> #5:List Z --> 1 Y --> 1 S --> f(#6:List, #1:Elt, #2:List) Unifier 1130 A --> 1 B --> f(#5:List, #6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> #3:List W --> f(#1:Elt, 1, #4:List) X --> #5:List Z --> #6:List Y --> 1 S --> f(#7:List, #1:Elt, #2:List) Unifier 1131 A --> 1 B --> f(#5:List, #6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> #3:List W --> f(#1:Elt, 1, #4:List) X --> #5:List Z --> 1 Y --> #6:List S --> f(#7:List, #1:Elt, #2:List) Unifier 1132 A --> 1 B --> f(#5:List, j(#6:List, #7:List), #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> #3:List W --> f(#1:Elt, 1, #4:List) X --> #5:List Z --> #6:List Y --> #7:List S --> f(#8:List, #1:Elt, #2:List) Unifier 1133 A --> 1 B --> f(#6:List, 1, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#7:List, #1:Elt, #2:List) Unifier 1134 A --> 1 B --> f(#6:List, #7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 1135 A --> 1 B --> f(#6:List, #7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#8:List, #1:Elt, #2:List) Unifier 1136 A --> 1 B --> f(#6:List, j(#7:List, #8:List), #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#9:List, #1:Elt, #2:List) Unifier 1137 A --> 1 B --> f(#6:List, 1, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#7:List, #1:Elt, #2:List) Unifier 1138 A --> 1 B --> f(#6:List, #7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 1139 A --> 1 B --> f(#6:List, #7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#8:List, #1:Elt, #2:List) Unifier 1140 A --> 1 B --> f(#6:List, j(#7:List, #8:List), #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#9:List, #1:Elt, #2:List) Unifier 1141 A --> 1 B --> f(#7:List, 1, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #3:List W --> f(#1:Elt, j(#4:List, #5:List), #6:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 1142 A --> 1 B --> f(#7:List, #8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #3:List W --> f(#1:Elt, j(#4:List, #5:List), #6:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 1143 A --> 1 B --> f(#7:List, #8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #3:List W --> f(#1:Elt, j(#4:List, #5:List), #6:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#9:List, #1:Elt, #2:List) Unifier 1144 A --> 1 B --> f(#7:List, j(#8:List, #9:List), #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #3:List W --> f(#1:Elt, j(#4:List, #5:List), #6:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#10:List, #1:Elt, #2:List) Unifier 1145 A --> 1 B --> f(#5:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#6:List, #4:List) U --> 1 V --> f(#3:List, #1:Elt, 1, #6:List) W --> #4:List X --> #5:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1146 A --> 1 B --> f(#5:List, #6:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#7:List, #4:List) U --> 1 V --> f(#3:List, #1:Elt, 1, #7:List) W --> #4:List X --> #5:List Z --> #6:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1147 A --> 1 B --> f(#5:List, #6:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#7:List, #4:List) U --> 1 V --> f(#3:List, #1:Elt, 1, #7:List) W --> #4:List X --> #5:List Z --> 1 Y --> #6:List S --> f(#1:Elt, #2:List) Unifier 1148 A --> 1 B --> f(#5:List, j(#6:List, #7:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#8:List, #4:List) U --> 1 V --> f(#3:List, #1:Elt, 1, #8:List) W --> #4:List X --> #5:List Z --> #6:List Y --> #7:List S --> f(#1:Elt, #2:List) Unifier 1149 A --> 1 B --> f(#6:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#7:List, #5:List) U --> 1 V --> f(#3:List, #1:Elt, #4:List, #7:List) W --> #5:List X --> #6:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1150 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, #5:List) U --> 1 V --> f(#3:List, #1:Elt, #4:List, #8:List) W --> #5:List X --> #6:List Z --> #7:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1151 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, #5:List) U --> 1 V --> f(#3:List, #1:Elt, #4:List, #8:List) W --> #5:List X --> #6:List Z --> 1 Y --> #7:List S --> f(#1:Elt, #2:List) Unifier 1152 A --> 1 B --> f(#6:List, j(#7:List, #8:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#9:List, #5:List) U --> 1 V --> f(#3:List, #1:Elt, #4:List, #9:List) W --> #5:List X --> #6:List Z --> #7:List Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1153 A --> 1 B --> f(#6:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#7:List, #5:List) U --> 1 V --> f(#3:List, #1:Elt, #4:List, #7:List) W --> #5:List X --> #6:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1154 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, #5:List) U --> 1 V --> f(#3:List, #1:Elt, #4:List, #8:List) W --> #5:List X --> #6:List Z --> #7:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1155 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, #5:List) U --> 1 V --> f(#3:List, #1:Elt, #4:List, #8:List) W --> #5:List X --> #6:List Z --> 1 Y --> #7:List S --> f(#1:Elt, #2:List) Unifier 1156 A --> 1 B --> f(#6:List, j(#7:List, #8:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#9:List, #5:List) U --> 1 V --> f(#3:List, #1:Elt, #4:List, #9:List) W --> #5:List X --> #6:List Z --> #7:List Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1157 A --> 1 B --> f(#7:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#8:List, #6:List) U --> 1 V --> f(#3:List, #1:Elt, j(#4:List, #5:List), #8:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1158 A --> 1 B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, #6:List) U --> 1 V --> f(#3:List, #1:Elt, j(#4:List, #5:List), #9:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1159 A --> 1 B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, #6:List) U --> 1 V --> f(#3:List, #1:Elt, j(#4:List, #5:List), #9:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1160 A --> 1 B --> f(#7:List, j(#8:List, #9:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#10:List, #6:List) U --> 1 V --> f(#3:List, #1:Elt, j(#4:List, #5:List), #10:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 1161 A --> 1 B --> f(#5:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#6:List, #7:List) G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, #6:List) W --> f(#7:List, #4:List) X --> #5:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1162 A --> 1 B --> f(#5:List, #6:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#7:List, #8:List) G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, #7:List) W --> f(#8:List, #4:List) X --> #5:List Z --> #6:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1163 A --> 1 B --> f(#5:List, #6:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#7:List, #8:List) G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, #7:List) W --> f(#8:List, #4:List) X --> #5:List Z --> 1 Y --> #6:List S --> f(#1:Elt, #2:List) Unifier 1164 A --> 1 B --> f(#5:List, j(#6:List, #7:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#8:List, #9:List) G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, #8:List) W --> f(#9:List, #4:List) X --> #5:List Z --> #6:List Y --> #7:List S --> f(#1:Elt, #2:List) Unifier 1165 A --> 1 B --> f(#5:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#6:List, #7:List) I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, #6:List) W --> f(#7:List, #4:List) X --> #5:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1166 A --> 1 B --> f(#5:List, #6:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#7:List, #8:List) I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, #7:List) W --> f(#8:List, #4:List) X --> #5:List Z --> #6:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1167 A --> 1 B --> f(#5:List, #6:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#7:List, #8:List) I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, #7:List) W --> f(#8:List, #4:List) X --> #5:List Z --> 1 Y --> #6:List S --> f(#1:Elt, #2:List) Unifier 1168 A --> 1 B --> f(#5:List, j(#6:List, #7:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#8:List, #9:List) I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, #8:List) W --> f(#9:List, #4:List) X --> #5:List Z --> #6:List Y --> #7:List S --> f(#1:Elt, #2:List) Unifier 1169 A --> 1 B --> f(#5:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, 1) W --> #4:List X --> #5:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1170 A --> 1 B --> f(#5:List, #6:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, 1) W --> #4:List X --> #5:List Z --> #6:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1171 A --> 1 B --> f(#5:List, #6:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, 1) W --> #4:List X --> #5:List Z --> 1 Y --> #6:List S --> f(#1:Elt, #2:List) Unifier 1172 A --> 1 B --> f(#5:List, j(#6:List, #7:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt, 1) W --> #4:List X --> #5:List Z --> #6:List Y --> #7:List S --> f(#1:Elt, #2:List) Unifier 1173 A --> 1 B --> f(#6:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #6:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1174 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #6:List Z --> #7:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1175 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #6:List Z --> 1 Y --> #7:List S --> f(#1:Elt, #2:List) Unifier 1176 A --> 1 B --> f(#6:List, j(#7:List, #8:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #6:List Z --> #7:List Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1177 A --> 1 B --> f(#6:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #6:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1178 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #6:List Z --> #7:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1179 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #6:List Z --> 1 Y --> #7:List S --> f(#1:Elt, #2:List) Unifier 1180 A --> 1 B --> f(#6:List, j(#7:List, #8:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #6:List Z --> #7:List Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1181 A --> 1 B --> f(#7:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #1:Elt, j(#4:List, #5:List)) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1182 A --> 1 B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #1:Elt, j(#4:List, #5:List)) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1183 A --> 1 B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #1:Elt, j(#4:List, #5:List)) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1184 A --> 1 B --> f(#7:List, j(#8:List, #9:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #1:Elt, j(#4:List, #5:List)) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 1185 A --> 1 B --> f(#5:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(1, #4:List) X --> #5:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1186 A --> 1 B --> f(#5:List, #6:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(1, #4:List) X --> #5:List Z --> #6:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1187 A --> 1 B --> f(#5:List, #6:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(1, #4:List) X --> #5:List Z --> 1 Y --> #6:List S --> f(#1:Elt, #2:List) Unifier 1188 A --> 1 B --> f(#5:List, j(#6:List, #7:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(1, #4:List) X --> #5:List Z --> #6:List Y --> #7:List S --> f(#1:Elt, #2:List) Unifier 1189 A --> 1 B --> f(#6:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1190 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1191 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#1:Elt, #2:List) Unifier 1192 A --> 1 B --> f(#6:List, j(#7:List, #8:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1193 A --> 1 B --> f(#6:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1194 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1195 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#1:Elt, #2:List) Unifier 1196 A --> 1 B --> f(#6:List, j(#7:List, #8:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1197 A --> 1 B --> f(#7:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1198 A --> 1 B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1199 A --> 1 B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1200 A --> 1 B --> f(#7:List, j(#8:List, #9:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #1:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 1201 A --> 1 B --> f(#5:List, 1) E --> #1:Elt C --> #2:List D --> f(#4:List, #6:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#6:List, #1:Elt, 1, #3:List) X --> #5:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1202 A --> 1 B --> f(#5:List, #6:List) E --> #1:Elt C --> #2:List D --> f(#4:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#7:List, #1:Elt, 1, #3:List) X --> #5:List Z --> #6:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1203 A --> 1 B --> f(#5:List, #6:List) E --> #1:Elt C --> #2:List D --> f(#4:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#7:List, #1:Elt, 1, #3:List) X --> #5:List Z --> 1 Y --> #6:List S --> f(#1:Elt, #2:List) Unifier 1204 A --> 1 B --> f(#5:List, j(#6:List, #7:List)) E --> #1:Elt C --> #2:List D --> f(#4:List, #8:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#8:List, #1:Elt, 1, #3:List) X --> #5:List Z --> #6:List Y --> #7:List S --> f(#1:Elt, #2:List) Unifier 1205 A --> 1 B --> f(#6:List, 1) E --> #1:Elt C --> #2:List D --> f(#5:List, #7:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#7:List, #1:Elt, #3:List, #4:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1206 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #3:List, #4:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1207 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #3:List, #4:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#1:Elt, #2:List) Unifier 1208 A --> 1 B --> f(#6:List, j(#7:List, #8:List)) E --> #1:Elt C --> #2:List D --> f(#5:List, #9:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#9:List, #1:Elt, #3:List, #4:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1209 A --> 1 B --> f(#6:List, 1) E --> #1:Elt C --> #2:List D --> f(#5:List, #7:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#7:List, #1:Elt, #3:List, #4:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1210 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #3:List, #4:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1211 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #3:List, #4:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#1:Elt, #2:List) Unifier 1212 A --> 1 B --> f(#6:List, j(#7:List, #8:List)) E --> #1:Elt C --> #2:List D --> f(#5:List, #9:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#9:List, #1:Elt, #3:List, #4:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1213 A --> 1 B --> f(#7:List, 1) E --> #1:Elt C --> #2:List D --> f(#6:List, #8:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#8:List, #1:Elt, j(#3:List, #4:List), #5:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1214 A --> 1 B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#9:List, #1:Elt, j(#3:List, #4:List), #5:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1215 A --> 1 B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#9:List, #1:Elt, j(#3:List, #4:List), #5:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1216 A --> 1 B --> f(#7:List, j(#8:List, #9:List)) E --> #1:Elt C --> #2:List D --> f(#6:List, #10:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#10:List, #1:Elt, j(#3:List, #4:List), #5:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 1217 A --> 1 B --> f(#5:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> #3:List W --> f(#1:Elt, 1, #4:List) X --> #5:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1218 A --> 1 B --> f(#5:List, #6:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> #3:List W --> f(#1:Elt, 1, #4:List) X --> #5:List Z --> #6:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1219 A --> 1 B --> f(#5:List, #6:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> #3:List W --> f(#1:Elt, 1, #4:List) X --> #5:List Z --> 1 Y --> #6:List S --> f(#1:Elt, #2:List) Unifier 1220 A --> 1 B --> f(#5:List, j(#6:List, #7:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> #3:List W --> f(#1:Elt, 1, #4:List) X --> #5:List Z --> #6:List Y --> #7:List S --> f(#1:Elt, #2:List) Unifier 1221 A --> 1 B --> f(#6:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1222 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1223 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#1:Elt, #2:List) Unifier 1224 A --> 1 B --> f(#6:List, j(#7:List, #8:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1225 A --> 1 B --> f(#6:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1226 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1227 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#1:Elt, #2:List) Unifier 1228 A --> 1 B --> f(#6:List, j(#7:List, #8:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1229 A --> 1 B --> f(#7:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #3:List W --> f(#1:Elt, j(#4:List, #5:List), #6:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1230 A --> 1 B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #3:List W --> f(#1:Elt, j(#4:List, #5:List), #6:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1231 A --> 1 B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #3:List W --> f(#1:Elt, j(#4:List, #5:List), #6:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1232 A --> 1 B --> f(#7:List, j(#8:List, #9:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #3:List W --> f(#1:Elt, j(#4:List, #5:List), #6:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 1233 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> f(#6:List, #4:List) U --> 1 V --> f(#3:List, #2:Elt, 1, #6:List) W --> #4:List X --> #1:List Z --> f(#2:Elt, #7:List) Y --> 1 S --> #5:List Unifier 1234 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> f(#7:List, #5:List) U --> 1 V --> f(#3:List, #2:Elt, #4:List, #7:List) W --> #5:List X --> #1:List Z --> f(#2:Elt, #8:List) Y --> 1 S --> #6:List Unifier 1235 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> f(#7:List, #5:List) U --> 1 V --> f(#3:List, #2:Elt, #4:List, #7:List) W --> #5:List X --> #1:List Z --> f(#2:Elt, #8:List) Y --> 1 S --> #6:List Unifier 1236 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#8:List, #6:List) U --> 1 V --> f(#3:List, #2:Elt, j(#4:List, #5:List), #8:List) W --> #6:List X --> #1:List Z --> f(#2:Elt, #9:List) Y --> 1 S --> #7:List Unifier 1237 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> f(#6:List, #4:List) U --> 1 V --> f(#3:List, #2:Elt, 1, #6:List) W --> #4:List X --> #1:List Z --> 1 Y --> f(#2:Elt, #7:List) S --> #5:List Unifier 1238 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> f(#7:List, #5:List) U --> 1 V --> f(#3:List, #2:Elt, #4:List, #7:List) W --> #5:List X --> #1:List Z --> 1 Y --> f(#2:Elt, #8:List) S --> #6:List Unifier 1239 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> f(#7:List, #5:List) U --> 1 V --> f(#3:List, #2:Elt, #4:List, #7:List) W --> #5:List X --> #1:List Z --> 1 Y --> f(#2:Elt, #8:List) S --> #6:List Unifier 1240 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#8:List, #6:List) U --> 1 V --> f(#3:List, #2:Elt, j(#4:List, #5:List), #8:List) W --> #6:List X --> #1:List Z --> 1 Y --> f(#2:Elt, #9:List) S --> #7:List Unifier 1241 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> f(#6:List, #7:List) G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, #6:List) W --> f(#7:List, #4:List) X --> #1:List Z --> f(#2:Elt, #8:List) Y --> 1 S --> #5:List Unifier 1242 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> f(#6:List, #7:List) G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, #6:List) W --> f(#7:List, #4:List) X --> #1:List Z --> 1 Y --> f(#2:Elt, #8:List) S --> #5:List Unifier 1243 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> 1 G --> f(#6:List, #7:List) I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, #6:List) W --> f(#7:List, #4:List) X --> #1:List Z --> f(#2:Elt, #8:List) Y --> 1 S --> #5:List Unifier 1244 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> 1 G --> f(#6:List, #7:List) I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, #6:List) W --> f(#7:List, #4:List) X --> #1:List Z --> 1 Y --> f(#2:Elt, #8:List) S --> #5:List Unifier 1245 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, 1) W --> #4:List X --> #1:List Z --> f(#2:Elt, #6:List) Y --> 1 S --> #5:List Unifier 1246 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> #1:List Z --> f(#2:Elt, #7:List) Y --> 1 S --> #6:List Unifier 1247 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> #1:List Z --> f(#2:Elt, #7:List) Y --> 1 S --> #6:List Unifier 1248 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #2:Elt, j(#4:List, #5:List)) W --> #6:List X --> #1:List Z --> f(#2:Elt, #8:List) Y --> 1 S --> #7:List Unifier 1249 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt, 1) W --> #4:List X --> #1:List Z --> 1 Y --> f(#2:Elt, #6:List) S --> #5:List Unifier 1250 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> #1:List Z --> 1 Y --> f(#2:Elt, #7:List) S --> #6:List Unifier 1251 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> #1:List Z --> 1 Y --> f(#2:Elt, #7:List) S --> #6:List Unifier 1252 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #2:Elt, j(#4:List, #5:List)) W --> #6:List X --> #1:List Z --> 1 Y --> f(#2:Elt, #8:List) S --> #7:List Unifier 1253 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(1, #4:List) X --> #1:List Z --> f(#2:Elt, #6:List) Y --> 1 S --> #5:List Unifier 1254 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> #1:List Z --> f(#2:Elt, #7:List) Y --> 1 S --> #6:List Unifier 1255 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> #1:List Z --> f(#2:Elt, #7:List) Y --> 1 S --> #6:List Unifier 1256 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> #1:List Z --> f(#2:Elt, #8:List) Y --> 1 S --> #7:List Unifier 1257 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(1, #4:List) X --> #1:List Z --> 1 Y --> f(#2:Elt, #6:List) S --> #5:List Unifier 1258 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> #1:List Z --> 1 Y --> f(#2:Elt, #7:List) S --> #6:List Unifier 1259 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> #1:List Z --> 1 Y --> f(#2:Elt, #7:List) S --> #6:List Unifier 1260 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#3:List, #2:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> #1:List Z --> 1 Y --> f(#2:Elt, #8:List) S --> #7:List Unifier 1261 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #5:List) D --> f(#4:List, #6:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#6:List, #2:Elt, 1, #3:List) X --> #1:List Z --> f(#2:Elt, #7:List) Y --> 1 S --> #5:List Unifier 1262 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> f(#5:List, #7:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#7:List, #2:Elt, #3:List, #4:List) X --> #1:List Z --> f(#2:Elt, #8:List) Y --> 1 S --> #6:List Unifier 1263 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> f(#5:List, #7:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#7:List, #2:Elt, #3:List, #4:List) X --> #1:List Z --> f(#2:Elt, #8:List) Y --> 1 S --> #6:List Unifier 1264 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List) D --> f(#6:List, #8:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#8:List, #2:Elt, j(#3:List, #4:List), #5:List) X --> #1:List Z --> f(#2:Elt, #9:List) Y --> 1 S --> #7:List Unifier 1265 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #5:List) D --> f(#4:List, #6:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#6:List, #2:Elt, 1, #3:List) X --> #1:List Z --> 1 Y --> f(#2:Elt, #7:List) S --> #5:List Unifier 1266 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> f(#5:List, #7:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#7:List, #2:Elt, #3:List, #4:List) X --> #1:List Z --> 1 Y --> f(#2:Elt, #8:List) S --> #6:List Unifier 1267 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> f(#5:List, #7:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#7:List, #2:Elt, #3:List, #4:List) X --> #1:List Z --> 1 Y --> f(#2:Elt, #8:List) S --> #6:List Unifier 1268 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List) D --> f(#6:List, #8:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#8:List, #2:Elt, j(#3:List, #4:List), #5:List) X --> #1:List Z --> 1 Y --> f(#2:Elt, #9:List) S --> #7:List Unifier 1269 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> #3:List W --> f(#2:Elt, 1, #4:List) X --> #1:List Z --> f(#2:Elt, #6:List) Y --> 1 S --> #5:List Unifier 1270 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> #1:List Z --> f(#2:Elt, #7:List) Y --> 1 S --> #6:List Unifier 1271 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> #1:List Z --> f(#2:Elt, #7:List) Y --> 1 S --> #6:List Unifier 1272 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #3:List W --> f(#2:Elt, j(#4:List, #5:List), #6:List) X --> #1:List Z --> f(#2:Elt, #8:List) Y --> 1 S --> #7:List Unifier 1273 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> #3:List W --> f(#2:Elt, 1, #4:List) X --> #1:List Z --> 1 Y --> f(#2:Elt, #6:List) S --> #5:List Unifier 1274 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> #1:List Z --> 1 Y --> f(#2:Elt, #7:List) S --> #6:List Unifier 1275 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> #1:List Z --> 1 Y --> f(#2:Elt, #7:List) S --> #6:List Unifier 1276 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #3:List W --> f(#2:Elt, j(#4:List, #5:List), #6:List) X --> #1:List Z --> 1 Y --> f(#2:Elt, #8:List) S --> #7:List Unifier 1277 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#6:List, #5:List) U --> 1 V --> f(#4:List, #2:Elt, 1, #6:List) W --> #5:List X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1278 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#7:List, #6:List) U --> 1 V --> f(#4:List, #2:Elt, #5:List, #7:List) W --> #6:List X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1279 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#7:List, #6:List) U --> 1 V --> f(#4:List, #2:Elt, #5:List, #7:List) W --> #6:List X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1280 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#8:List, #7:List) U --> 1 V --> f(#4:List, #2:Elt, j(#5:List, #6:List), #8:List) W --> #7:List X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1281 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#6:List, #5:List) U --> 1 V --> f(#4:List, #2:Elt, 1, #6:List) W --> #5:List X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1282 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#7:List, #6:List) U --> 1 V --> f(#4:List, #2:Elt, #5:List, #7:List) W --> #6:List X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1283 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#7:List, #6:List) U --> 1 V --> f(#4:List, #2:Elt, #5:List, #7:List) W --> #6:List X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1284 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#8:List, #7:List) U --> 1 V --> f(#4:List, #2:Elt, j(#5:List, #6:List), #8:List) W --> #7:List X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1285 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#6:List, #7:List) G --> 1 I --> #5:List U --> 1 V --> f(#4:List, #2:Elt, #6:List) W --> f(#7:List, #5:List) X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1286 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#6:List, #7:List) G --> 1 I --> #5:List U --> 1 V --> f(#4:List, #2:Elt, #6:List) W --> f(#7:List, #5:List) X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1287 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#6:List, #7:List) I --> #5:List U --> 1 V --> f(#4:List, #2:Elt, #6:List) W --> f(#7:List, #5:List) X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1288 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#6:List, #7:List) I --> #5:List U --> 1 V --> f(#4:List, #2:Elt, #6:List) W --> f(#7:List, #5:List) X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1289 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> 1 V --> f(#4:List, #2:Elt, 1) W --> #5:List X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1290 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> 1 V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1291 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> 1 V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1292 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> 1 V --> f(#4:List, #2:Elt, j(#5:List, #6:List)) W --> #7:List X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1293 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> 1 V --> f(#4:List, #2:Elt, 1) W --> #5:List X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1294 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> 1 V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1295 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> 1 V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1296 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> 1 V --> f(#4:List, #2:Elt, j(#5:List, #6:List)) W --> #7:List X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1297 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> 1 V --> f(#4:List, #2:Elt) W --> f(1, #5:List) X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1298 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> 1 V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1299 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> 1 V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1300 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> 1 V --> f(#4:List, #2:Elt) W --> f(j(#5:List, #6:List), #7:List) X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1301 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> 1 V --> f(#4:List, #2:Elt) W --> f(1, #5:List) X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1302 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> 1 V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1303 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> 1 V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1304 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> 1 V --> f(#4:List, #2:Elt) W --> f(j(#5:List, #6:List), #7:List) X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1305 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #6:List) H --> 1 G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#6:List, #2:Elt, 1, #4:List) X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1306 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #6:List W --> f(#7:List, #2:Elt, #4:List, #5:List) X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1307 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#7:List, #2:Elt, #4:List, #5:List) X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1308 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #7:List W --> f(#8:List, #2:Elt, j(#4:List, #5:List), #6:List) X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1309 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #6:List) H --> 1 G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#6:List, #2:Elt, 1, #4:List) X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1310 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #6:List W --> f(#7:List, #2:Elt, #4:List, #5:List) X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1311 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#7:List, #2:Elt, #4:List, #5:List) X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1312 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #7:List W --> f(#8:List, #2:Elt, j(#4:List, #5:List), #6:List) X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1313 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> 1 V --> #4:List W --> f(#2:Elt, 1, #5:List) X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1314 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> 1 V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1315 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> 1 V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1316 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> 1 V --> #4:List W --> f(#2:Elt, j(#5:List, #6:List), #7:List) X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1317 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> 1 V --> #4:List W --> f(#2:Elt, 1, #5:List) X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1318 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> 1 V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1319 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> 1 V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1320 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> 1 V --> #4:List W --> f(#2:Elt, j(#5:List, #6:List), #7:List) X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1321 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#8:List, 1, #6:List) D --> #3:List H --> 1 G --> 1 I --> f(#7:List, #5:List) U --> #4:List V --> f(#3:List, #2:Elt, 1, #7:List) W --> #5:List X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> 1 S --> #6:List Unifier 1322 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List, #7:List) D --> #3:List H --> 1 G --> 1 I --> f(#8:List, #5:List) U --> #4:List V --> f(#3:List, #2:Elt, 1, #8:List) W --> #5:List X --> f(#1:List, #2:Elt, #9:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 1323 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List, #7:List) D --> #3:List H --> 1 G --> 1 I --> f(#8:List, #5:List) U --> #4:List V --> f(#3:List, #2:Elt, 1, #8:List) W --> #5:List X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 1324 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#10:List, j(#6:List, #7:List), #8:List) D --> #3:List H --> 1 G --> 1 I --> f(#9:List, #5:List) U --> #4:List V --> f(#3:List, #2:Elt, 1, #9:List) W --> #5:List X --> f(#1:List, #2:Elt, #10:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 1325 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, 1, #7:List) D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, #6:List) U --> #5:List V --> f(#3:List, #2:Elt, #4:List, #8:List) W --> #6:List X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> 1 S --> #7:List Unifier 1326 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List, #8:List) D --> #3:List H --> #4:List G --> 1 I --> f(#9:List, #6:List) U --> #5:List V --> f(#3:List, #2:Elt, #4:List, #9:List) W --> #6:List X --> f(#1:List, #2:Elt, #10:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 1327 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List, #8:List) D --> #3:List H --> #4:List G --> 1 I --> f(#9:List, #6:List) U --> #5:List V --> f(#3:List, #2:Elt, #4:List, #9:List) W --> #6:List X --> f(#1:List, #2:Elt, #10:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 1328 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#11:List, j(#7:List, #8:List), #9:List) D --> #3:List H --> #4:List G --> 1 I --> f(#10:List, #6:List) U --> #5:List V --> f(#3:List, #2:Elt, #4:List, #10:List) W --> #6:List X --> f(#1:List, #2:Elt, #11:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 1329 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, 1, #7:List) D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, #6:List) U --> #5:List V --> f(#3:List, #2:Elt, #4:List, #8:List) W --> #6:List X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> 1 S --> #7:List Unifier 1330 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List, #8:List) D --> #3:List H --> 1 G --> #4:List I --> f(#9:List, #6:List) U --> #5:List V --> f(#3:List, #2:Elt, #4:List, #9:List) W --> #6:List X --> f(#1:List, #2:Elt, #10:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 1331 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List, #8:List) D --> #3:List H --> 1 G --> #4:List I --> f(#9:List, #6:List) U --> #5:List V --> f(#3:List, #2:Elt, #4:List, #9:List) W --> #6:List X --> f(#1:List, #2:Elt, #10:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 1332 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#11:List, j(#7:List, #8:List), #9:List) D --> #3:List H --> 1 G --> #4:List I --> f(#10:List, #6:List) U --> #5:List V --> f(#3:List, #2:Elt, #4:List, #10:List) W --> #6:List X --> f(#1:List, #2:Elt, #11:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 1333 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#10:List, 1, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, #7:List) U --> #6:List V --> f(#3:List, #2:Elt, j(#4:List, #5:List), #9:List) W --> #7:List X --> f(#1:List, #2:Elt, #10:List) Z --> 1 Y --> 1 S --> #8:List Unifier 1334 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#11:List, #8:List, #9:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#10:List, #7:List) U --> #6:List V --> f(#3:List, #2:Elt, j(#4:List, #5:List), #10:List) W --> #7:List X --> f(#1:List, #2:Elt, #11:List) Z --> #8:List Y --> 1 S --> #9:List Unifier 1335 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#11:List, #8:List, #9:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#10:List, #7:List) U --> #6:List V --> f(#3:List, #2:Elt, j(#4:List, #5:List), #10:List) W --> #7:List X --> f(#1:List, #2:Elt, #11:List) Z --> 1 Y --> #8:List S --> #9:List Unifier 1336 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#12:List, j(#8:List, #9:List), #10:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#11:List, #7:List) U --> #6:List V --> f(#3:List, #2:Elt, j(#4:List, #5:List), #11:List) W --> #7:List X --> f(#1:List, #2:Elt, #12:List) Z --> #8:List Y --> #9:List S --> #10:List Unifier 1337 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, 1, #6:List) D --> #3:List H --> f(#7:List, #8:List) G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, #7:List) W --> f(#8:List, #4:List) X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> 1 S --> #6:List Unifier 1338 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List, #7:List) D --> #3:List H --> f(#8:List, #9:List) G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, #8:List) W --> f(#9:List, #4:List) X --> f(#1:List, #2:Elt, #10:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 1339 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List, #7:List) D --> #3:List H --> f(#8:List, #9:List) G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, #8:List) W --> f(#9:List, #4:List) X --> f(#1:List, #2:Elt, #10:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 1340 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#11:List, j(#6:List, #7:List), #8:List) D --> #3:List H --> f(#9:List, #10:List) G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, #9:List) W --> f(#10:List, #4:List) X --> f(#1:List, #2:Elt, #11:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 1341 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, 1, #6:List) D --> #3:List H --> 1 G --> f(#7:List, #8:List) I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, #7:List) W --> f(#8:List, #4:List) X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> 1 S --> #6:List Unifier 1342 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List, #7:List) D --> #3:List H --> 1 G --> f(#8:List, #9:List) I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, #8:List) W --> f(#9:List, #4:List) X --> f(#1:List, #2:Elt, #10:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 1343 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List, #7:List) D --> #3:List H --> 1 G --> f(#8:List, #9:List) I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, #8:List) W --> f(#9:List, #4:List) X --> f(#1:List, #2:Elt, #10:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 1344 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#11:List, j(#6:List, #7:List), #8:List) D --> #3:List H --> 1 G --> f(#9:List, #10:List) I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, #9:List) W --> f(#10:List, #4:List) X --> f(#1:List, #2:Elt, #11:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 1345 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#7:List, 1, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, 1) W --> #4:List X --> f(#1:List, #2:Elt, #7:List) Z --> 1 Y --> 1 S --> #6:List Unifier 1346 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List, #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, 1) W --> #4:List X --> f(#1:List, #2:Elt, #8:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 1347 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List, #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, 1) W --> #4:List X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 1348 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, j(#6:List, #7:List), #8:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, 1) W --> #4:List X --> f(#1:List, #2:Elt, #9:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 1349 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, 1, #7:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> 1 S --> #7:List Unifier 1350 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List, #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt, #9:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 1351 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List, #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 1352 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#10:List, j(#7:List, #8:List), #9:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt, #10:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 1353 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, 1, #7:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> 1 S --> #7:List Unifier 1354 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List, #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt, #9:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 1355 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List, #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 1356 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#10:List, j(#7:List, #8:List), #9:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt, #10:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 1357 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#9:List, 1, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #2:Elt, j(#4:List, #5:List)) W --> #6:List X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> 1 S --> #8:List Unifier 1358 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#10:List, #8:List, #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #2:Elt, j(#4:List, #5:List)) W --> #6:List X --> f(#1:List, #2:Elt, #10:List) Z --> #8:List Y --> 1 S --> #9:List Unifier 1359 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#10:List, #8:List, #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #2:Elt, j(#4:List, #5:List)) W --> #6:List X --> f(#1:List, #2:Elt, #10:List) Z --> 1 Y --> #8:List S --> #9:List Unifier 1360 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#11:List, j(#8:List, #9:List), #10:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #2:Elt, j(#4:List, #5:List)) W --> #6:List X --> f(#1:List, #2:Elt, #11:List) Z --> #8:List Y --> #9:List S --> #10:List Unifier 1361 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#7:List, 1, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt) W --> f(1, #4:List) X --> f(#1:List, #2:Elt, #7:List) Z --> 1 Y --> 1 S --> #6:List Unifier 1362 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List, #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt) W --> f(1, #4:List) X --> f(#1:List, #2:Elt, #8:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 1363 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List, #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt) W --> f(1, #4:List) X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 1364 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, j(#6:List, #7:List), #8:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt) W --> f(1, #4:List) X --> f(#1:List, #2:Elt, #9:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 1365 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, 1, #7:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> 1 S --> #7:List Unifier 1366 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List, #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt, #9:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 1367 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List, #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 1368 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#10:List, j(#7:List, #8:List), #9:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt, #10:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 1369 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, 1, #7:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> 1 S --> #7:List Unifier 1370 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List, #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt, #9:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 1371 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List, #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 1372 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#10:List, j(#7:List, #8:List), #9:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt, #10:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 1373 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#9:List, 1, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #2:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> 1 S --> #8:List Unifier 1374 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#10:List, #8:List, #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #2:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt, #10:List) Z --> #8:List Y --> 1 S --> #9:List Unifier 1375 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#10:List, #8:List, #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #2:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt, #10:List) Z --> 1 Y --> #8:List S --> #9:List Unifier 1376 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#11:List, j(#8:List, #9:List), #10:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #2:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt, #11:List) Z --> #8:List Y --> #9:List S --> #10:List Unifier 1377 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#8:List, 1, #6:List) D --> f(#5:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#7:List, #2:Elt, 1, #3:List) X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> 1 S --> #6:List Unifier 1378 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List, #7:List) D --> f(#5:List, #8:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#8:List, #2:Elt, 1, #3:List) X --> f(#1:List, #2:Elt, #9:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 1379 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List, #7:List) D --> f(#5:List, #8:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#8:List, #2:Elt, 1, #3:List) X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 1380 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#10:List, j(#6:List, #7:List), #8:List) D --> f(#5:List, #9:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#9:List, #2:Elt, 1, #3:List) X --> f(#1:List, #2:Elt, #10:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 1381 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, 1, #7:List) D --> f(#6:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#8:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> 1 S --> #7:List Unifier 1382 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List, #8:List) D --> f(#6:List, #9:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt, #10:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 1383 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List, #8:List) D --> f(#6:List, #9:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt, #10:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 1384 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#11:List, j(#7:List, #8:List), #9:List) D --> f(#6:List, #10:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#10:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt, #11:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 1385 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, 1, #7:List) D --> f(#6:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#8:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> 1 S --> #7:List Unifier 1386 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List, #8:List) D --> f(#6:List, #9:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt, #10:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 1387 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List, #8:List) D --> f(#6:List, #9:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt, #10:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 1388 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#11:List, j(#7:List, #8:List), #9:List) D --> f(#6:List, #10:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#10:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt, #11:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 1389 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#10:List, 1, #8:List) D --> f(#7:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#9:List, #2:Elt, j(#3:List, #4:List), #5:List) X --> f(#1:List, #2:Elt, #10:List) Z --> 1 Y --> 1 S --> #8:List Unifier 1390 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#11:List, #8:List, #9:List) D --> f(#7:List, #10:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#10:List, #2:Elt, j(#3:List, #4:List), #5:List) X --> f(#1:List, #2:Elt, #11:List) Z --> #8:List Y --> 1 S --> #9:List Unifier 1391 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#11:List, #8:List, #9:List) D --> f(#7:List, #10:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#10:List, #2:Elt, j(#3:List, #4:List), #5:List) X --> f(#1:List, #2:Elt, #11:List) Z --> 1 Y --> #8:List S --> #9:List Unifier 1392 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#12:List, j(#8:List, #9:List), #10:List) D --> f(#7:List, #11:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#11:List, #2:Elt, j(#3:List, #4:List), #5:List) X --> f(#1:List, #2:Elt, #12:List) Z --> #8:List Y --> #9:List S --> #10:List Unifier 1393 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#7:List, 1, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #3:List W --> f(#2:Elt, 1, #4:List) X --> f(#1:List, #2:Elt, #7:List) Z --> 1 Y --> 1 S --> #6:List Unifier 1394 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List, #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #3:List W --> f(#2:Elt, 1, #4:List) X --> f(#1:List, #2:Elt, #8:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 1395 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List, #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #3:List W --> f(#2:Elt, 1, #4:List) X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 1396 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, j(#6:List, #7:List), #8:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #3:List W --> f(#2:Elt, 1, #4:List) X --> f(#1:List, #2:Elt, #9:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 1397 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, 1, #7:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> 1 S --> #7:List Unifier 1398 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List, #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt, #9:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 1399 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List, #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 1400 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#10:List, j(#7:List, #8:List), #9:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt, #10:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 1401 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, 1, #7:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt, #8:List) Z --> 1 Y --> 1 S --> #7:List Unifier 1402 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List, #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt, #9:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 1403 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List, #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 1404 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#10:List, j(#7:List, #8:List), #9:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt, #10:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 1405 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#9:List, 1, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #3:List W --> f(#2:Elt, j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt, #9:List) Z --> 1 Y --> 1 S --> #8:List Unifier 1406 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#10:List, #8:List, #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #3:List W --> f(#2:Elt, j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt, #10:List) Z --> #8:List Y --> 1 S --> #9:List Unifier 1407 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#10:List, #8:List, #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #3:List W --> f(#2:Elt, j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt, #10:List) Z --> 1 Y --> #8:List S --> #9:List Unifier 1408 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#11:List, j(#8:List, #9:List), #10:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #3:List W --> f(#2:Elt, j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt, #11:List) Z --> #8:List Y --> #9:List S --> #10:List Unifier 1409 A --> #4:List B --> #1:List E --> #2:Elt C --> f(1, #6:List) D --> #3:List H --> 1 G --> 1 I --> f(#7:List, #5:List) U --> #4:List V --> f(#3:List, #2:Elt, 1, #7:List) W --> #5:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #6:List Unifier 1410 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> #3:List H --> 1 G --> 1 I --> f(#8:List, #5:List) U --> #4:List V --> f(#3:List, #2:Elt, 1, #8:List) W --> #5:List X --> f(#1:List, #2:Elt) Z --> #6:List Y --> 1 S --> #7:List Unifier 1411 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> #3:List H --> 1 G --> 1 I --> f(#8:List, #5:List) U --> #4:List V --> f(#3:List, #2:Elt, 1, #8:List) W --> #5:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> #6:List S --> #7:List Unifier 1412 A --> #4:List B --> #1:List E --> #2:Elt C --> f(j(#6:List, #7:List), #8:List) D --> #3:List H --> 1 G --> 1 I --> f(#9:List, #5:List) U --> #4:List V --> f(#3:List, #2:Elt, 1, #9:List) W --> #5:List X --> f(#1:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #8:List Unifier 1413 A --> #5:List B --> #1:List E --> #2:Elt C --> f(1, #7:List) D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, #6:List) U --> #5:List V --> f(#3:List, #2:Elt, #4:List, #8:List) W --> #6:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #7:List Unifier 1414 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> #4:List G --> 1 I --> f(#9:List, #6:List) U --> #5:List V --> f(#3:List, #2:Elt, #4:List, #9:List) W --> #6:List X --> f(#1:List, #2:Elt) Z --> #7:List Y --> 1 S --> #8:List Unifier 1415 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> #4:List G --> 1 I --> f(#9:List, #6:List) U --> #5:List V --> f(#3:List, #2:Elt, #4:List, #9:List) W --> #6:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> #7:List S --> #8:List Unifier 1416 A --> #5:List B --> #1:List E --> #2:Elt C --> f(j(#7:List, #8:List), #9:List) D --> #3:List H --> #4:List G --> 1 I --> f(#10:List, #6:List) U --> #5:List V --> f(#3:List, #2:Elt, #4:List, #10:List) W --> #6:List X --> f(#1:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #9:List Unifier 1417 A --> #5:List B --> #1:List E --> #2:Elt C --> f(1, #7:List) D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, #6:List) U --> #5:List V --> f(#3:List, #2:Elt, #4:List, #8:List) W --> #6:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #7:List Unifier 1418 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> 1 G --> #4:List I --> f(#9:List, #6:List) U --> #5:List V --> f(#3:List, #2:Elt, #4:List, #9:List) W --> #6:List X --> f(#1:List, #2:Elt) Z --> #7:List Y --> 1 S --> #8:List Unifier 1419 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> 1 G --> #4:List I --> f(#9:List, #6:List) U --> #5:List V --> f(#3:List, #2:Elt, #4:List, #9:List) W --> #6:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> #7:List S --> #8:List Unifier 1420 A --> #5:List B --> #1:List E --> #2:Elt C --> f(j(#7:List, #8:List), #9:List) D --> #3:List H --> 1 G --> #4:List I --> f(#10:List, #6:List) U --> #5:List V --> f(#3:List, #2:Elt, #4:List, #10:List) W --> #6:List X --> f(#1:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #9:List Unifier 1421 A --> #6:List B --> #1:List E --> #2:Elt C --> f(1, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, #7:List) U --> #6:List V --> f(#3:List, #2:Elt, j(#4:List, #5:List), #9:List) W --> #7:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #8:List Unifier 1422 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, #9:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#10:List, #7:List) U --> #6:List V --> f(#3:List, #2:Elt, j(#4:List, #5:List), #10:List) W --> #7:List X --> f(#1:List, #2:Elt) Z --> #8:List Y --> 1 S --> #9:List Unifier 1423 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, #9:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#10:List, #7:List) U --> #6:List V --> f(#3:List, #2:Elt, j(#4:List, #5:List), #10:List) W --> #7:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> #8:List S --> #9:List Unifier 1424 A --> #6:List B --> #1:List E --> #2:Elt C --> f(j(#8:List, #9:List), #10:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#11:List, #7:List) U --> #6:List V --> f(#3:List, #2:Elt, j(#4:List, #5:List), #11:List) W --> #7:List X --> f(#1:List, #2:Elt) Z --> #8:List Y --> #9:List S --> #10:List Unifier 1425 A --> #5:List B --> #1:List E --> #2:Elt C --> f(1, #6:List) D --> #3:List H --> f(#7:List, #8:List) G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, #7:List) W --> f(#8:List, #4:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #6:List Unifier 1426 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> #3:List H --> f(#8:List, #9:List) G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, #8:List) W --> f(#9:List, #4:List) X --> f(#1:List, #2:Elt) Z --> #6:List Y --> 1 S --> #7:List Unifier 1427 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> #3:List H --> f(#8:List, #9:List) G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, #8:List) W --> f(#9:List, #4:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> #6:List S --> #7:List Unifier 1428 A --> #5:List B --> #1:List E --> #2:Elt C --> f(j(#6:List, #7:List), #8:List) D --> #3:List H --> f(#9:List, #10:List) G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, #9:List) W --> f(#10:List, #4:List) X --> f(#1:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #8:List Unifier 1429 A --> #5:List B --> #1:List E --> #2:Elt C --> f(1, #6:List) D --> #3:List H --> 1 G --> f(#7:List, #8:List) I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, #7:List) W --> f(#8:List, #4:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #6:List Unifier 1430 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> #3:List H --> 1 G --> f(#8:List, #9:List) I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, #8:List) W --> f(#9:List, #4:List) X --> f(#1:List, #2:Elt) Z --> #6:List Y --> 1 S --> #7:List Unifier 1431 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> #3:List H --> 1 G --> f(#8:List, #9:List) I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, #8:List) W --> f(#9:List, #4:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> #6:List S --> #7:List Unifier 1432 A --> #5:List B --> #1:List E --> #2:Elt C --> f(j(#6:List, #7:List), #8:List) D --> #3:List H --> 1 G --> f(#9:List, #10:List) I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, #9:List) W --> f(#10:List, #4:List) X --> f(#1:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #8:List Unifier 1433 A --> #5:List B --> #1:List E --> #2:Elt C --> f(1, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, 1) W --> #4:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #6:List Unifier 1434 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, 1) W --> #4:List X --> f(#1:List, #2:Elt) Z --> #6:List Y --> 1 S --> #7:List Unifier 1435 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, 1) W --> #4:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> #6:List S --> #7:List Unifier 1436 A --> #5:List B --> #1:List E --> #2:Elt C --> f(j(#6:List, #7:List), #8:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, 1) W --> #4:List X --> f(#1:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #8:List Unifier 1437 A --> #6:List B --> #1:List E --> #2:Elt C --> f(1, #7:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #7:List Unifier 1438 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt) Z --> #7:List Y --> 1 S --> #8:List Unifier 1439 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> #7:List S --> #8:List Unifier 1440 A --> #6:List B --> #1:List E --> #2:Elt C --> f(j(#7:List, #8:List), #9:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #9:List Unifier 1441 A --> #6:List B --> #1:List E --> #2:Elt C --> f(1, #7:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #7:List Unifier 1442 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt) Z --> #7:List Y --> 1 S --> #8:List Unifier 1443 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> #7:List S --> #8:List Unifier 1444 A --> #6:List B --> #1:List E --> #2:Elt C --> f(j(#7:List, #8:List), #9:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> f(#1:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #9:List Unifier 1445 A --> #7:List B --> #1:List E --> #2:Elt C --> f(1, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #2:Elt, j(#4:List, #5:List)) W --> #6:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #8:List Unifier 1446 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#8:List, #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #2:Elt, j(#4:List, #5:List)) W --> #6:List X --> f(#1:List, #2:Elt) Z --> #8:List Y --> 1 S --> #9:List Unifier 1447 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#8:List, #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #2:Elt, j(#4:List, #5:List)) W --> #6:List X --> f(#1:List, #2:Elt) Z --> 1 Y --> #8:List S --> #9:List Unifier 1448 A --> #7:List B --> #1:List E --> #2:Elt C --> f(j(#8:List, #9:List), #10:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #2:Elt, j(#4:List, #5:List)) W --> #6:List X --> f(#1:List, #2:Elt) Z --> #8:List Y --> #9:List S --> #10:List Unifier 1449 A --> #5:List B --> #1:List E --> #2:Elt C --> f(1, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt) W --> f(1, #4:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #6:List Unifier 1450 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt) W --> f(1, #4:List) X --> f(#1:List, #2:Elt) Z --> #6:List Y --> 1 S --> #7:List Unifier 1451 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt) W --> f(1, #4:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> #6:List S --> #7:List Unifier 1452 A --> #5:List B --> #1:List E --> #2:Elt C --> f(j(#6:List, #7:List), #8:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt) W --> f(1, #4:List) X --> f(#1:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #8:List Unifier 1453 A --> #6:List B --> #1:List E --> #2:Elt C --> f(1, #7:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #7:List Unifier 1454 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> #7:List Y --> 1 S --> #8:List Unifier 1455 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> #7:List S --> #8:List Unifier 1456 A --> #6:List B --> #1:List E --> #2:Elt C --> f(j(#7:List, #8:List), #9:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #9:List Unifier 1457 A --> #6:List B --> #1:List E --> #2:Elt C --> f(1, #7:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #7:List Unifier 1458 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> #7:List Y --> 1 S --> #8:List Unifier 1459 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> #7:List S --> #8:List Unifier 1460 A --> #6:List B --> #1:List E --> #2:Elt C --> f(j(#7:List, #8:List), #9:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #9:List Unifier 1461 A --> #7:List B --> #1:List E --> #2:Elt C --> f(1, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #2:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #8:List Unifier 1462 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#8:List, #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #2:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt) Z --> #8:List Y --> 1 S --> #9:List Unifier 1463 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#8:List, #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #2:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> #8:List S --> #9:List Unifier 1464 A --> #7:List B --> #1:List E --> #2:Elt C --> f(j(#8:List, #9:List), #10:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #2:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt) Z --> #8:List Y --> #9:List S --> #10:List Unifier 1465 A --> #4:List B --> #1:List E --> #2:Elt C --> f(1, #6:List) D --> f(#5:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#7:List, #2:Elt, 1, #3:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #6:List Unifier 1466 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> f(#5:List, #8:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#8:List, #2:Elt, 1, #3:List) X --> f(#1:List, #2:Elt) Z --> #6:List Y --> 1 S --> #7:List Unifier 1467 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> f(#5:List, #8:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#8:List, #2:Elt, 1, #3:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> #6:List S --> #7:List Unifier 1468 A --> #4:List B --> #1:List E --> #2:Elt C --> f(j(#6:List, #7:List), #8:List) D --> f(#5:List, #9:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#9:List, #2:Elt, 1, #3:List) X --> f(#1:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #8:List Unifier 1469 A --> #5:List B --> #1:List E --> #2:Elt C --> f(1, #7:List) D --> f(#6:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#8:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #7:List Unifier 1470 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> f(#6:List, #9:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt) Z --> #7:List Y --> 1 S --> #8:List Unifier 1471 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> f(#6:List, #9:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> #7:List S --> #8:List Unifier 1472 A --> #5:List B --> #1:List E --> #2:Elt C --> f(j(#7:List, #8:List), #9:List) D --> f(#6:List, #10:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#10:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #9:List Unifier 1473 A --> #5:List B --> #1:List E --> #2:Elt C --> f(1, #7:List) D --> f(#6:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#8:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #7:List Unifier 1474 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> f(#6:List, #9:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt) Z --> #7:List Y --> 1 S --> #8:List Unifier 1475 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> f(#6:List, #9:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> #7:List S --> #8:List Unifier 1476 A --> #5:List B --> #1:List E --> #2:Elt C --> f(j(#7:List, #8:List), #9:List) D --> f(#6:List, #10:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#10:List, #2:Elt, #3:List, #4:List) X --> f(#1:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #9:List Unifier 1477 A --> #6:List B --> #1:List E --> #2:Elt C --> f(1, #8:List) D --> f(#7:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#9:List, #2:Elt, j(#3:List, #4:List), #5:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #8:List Unifier 1478 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, #9:List) D --> f(#7:List, #10:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#10:List, #2:Elt, j(#3:List, #4:List), #5:List) X --> f(#1:List, #2:Elt) Z --> #8:List Y --> 1 S --> #9:List Unifier 1479 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, #9:List) D --> f(#7:List, #10:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#10:List, #2:Elt, j(#3:List, #4:List), #5:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> #8:List S --> #9:List Unifier 1480 A --> #6:List B --> #1:List E --> #2:Elt C --> f(j(#8:List, #9:List), #10:List) D --> f(#7:List, #11:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#11:List, #2:Elt, j(#3:List, #4:List), #5:List) X --> f(#1:List, #2:Elt) Z --> #8:List Y --> #9:List S --> #10:List Unifier 1481 A --> #5:List B --> #1:List E --> #2:Elt C --> f(1, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #3:List W --> f(#2:Elt, 1, #4:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #6:List Unifier 1482 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #3:List W --> f(#2:Elt, 1, #4:List) X --> f(#1:List, #2:Elt) Z --> #6:List Y --> 1 S --> #7:List Unifier 1483 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#6:List, #7:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #3:List W --> f(#2:Elt, 1, #4:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> #6:List S --> #7:List Unifier 1484 A --> #5:List B --> #1:List E --> #2:Elt C --> f(j(#6:List, #7:List), #8:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #3:List W --> f(#2:Elt, 1, #4:List) X --> f(#1:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #8:List Unifier 1485 A --> #6:List B --> #1:List E --> #2:Elt C --> f(1, #7:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #7:List Unifier 1486 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> #7:List Y --> 1 S --> #8:List Unifier 1487 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> #7:List S --> #8:List Unifier 1488 A --> #6:List B --> #1:List E --> #2:Elt C --> f(j(#7:List, #8:List), #9:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #9:List Unifier 1489 A --> #6:List B --> #1:List E --> #2:Elt C --> f(1, #7:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #7:List Unifier 1490 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> #7:List Y --> 1 S --> #8:List Unifier 1491 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#7:List, #8:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> #7:List S --> #8:List Unifier 1492 A --> #6:List B --> #1:List E --> #2:Elt C --> f(j(#7:List, #8:List), #9:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> f(#1:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #9:List Unifier 1493 A --> #7:List B --> #1:List E --> #2:Elt C --> f(1, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #3:List W --> f(#2:Elt, j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> 1 S --> #8:List Unifier 1494 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#8:List, #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #3:List W --> f(#2:Elt, j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt) Z --> #8:List Y --> 1 S --> #9:List Unifier 1495 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#8:List, #9:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #3:List W --> f(#2:Elt, j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt) Z --> 1 Y --> #8:List S --> #9:List Unifier 1496 A --> #7:List B --> #1:List E --> #2:Elt C --> f(j(#8:List, #9:List), #10:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #3:List W --> f(#2:Elt, j(#4:List, #5:List), #6:List) X --> f(#1:List, #2:Elt) Z --> #8:List Y --> #9:List S --> #10:List Unifier 1497 A --> #3:List B --> f(#5:List, #8:List) E --> #1:Elt C --> f(#9:List, #6:List) D --> #2:List H --> 1 G --> 1 I --> f(#7:List, #4:List) U --> #3:List V --> f(#2:List, #1:Elt, 1, #7:List) W --> #4:List X --> #5:List Z --> f(#8:List, #1:Elt, #9:List) Y --> 1 S --> #6:List Unifier 1498 A --> #4:List B --> f(#6:List, #9:List) E --> #1:Elt C --> f(#10:List, #7:List) D --> #2:List H --> #3:List G --> 1 I --> f(#8:List, #5:List) U --> #4:List V --> f(#2:List, #1:Elt, #3:List, #8:List) W --> #5:List X --> #6:List Z --> f(#9:List, #1:Elt, #10:List) Y --> 1 S --> #7:List Unifier 1499 A --> #4:List B --> f(#6:List, #9:List) E --> #1:Elt C --> f(#10:List, #7:List) D --> #2:List H --> 1 G --> #3:List I --> f(#8:List, #5:List) U --> #4:List V --> f(#2:List, #1:Elt, #3:List, #8:List) W --> #5:List X --> #6:List Z --> f(#9:List, #1:Elt, #10:List) Y --> 1 S --> #7:List Unifier 1500 A --> #5:List B --> f(#7:List, #10:List) E --> #1:Elt C --> f(#11:List, #8:List) D --> #2:List H --> #3:List G --> #4:List I --> f(#9:List, #6:List) U --> #5:List V --> f(#2:List, #1:Elt, j(#3:List, #4:List), #9:List) W --> #6:List X --> #7:List Z --> f(#10:List, #1:Elt, #11:List) Y --> 1 S --> #8:List Unifier 1501 A --> #3:List B --> f(#5:List, #8:List) E --> #1:Elt C --> f(#9:List, #6:List) D --> #2:List H --> 1 G --> 1 I --> f(#7:List, #4:List) U --> #3:List V --> f(#2:List, #1:Elt, 1, #7:List) W --> #4:List X --> #5:List Z --> 1 Y --> f(#8:List, #1:Elt, #9:List) S --> #6:List Unifier 1502 A --> #4:List B --> f(#6:List, #9:List) E --> #1:Elt C --> f(#10:List, #7:List) D --> #2:List H --> #3:List G --> 1 I --> f(#8:List, #5:List) U --> #4:List V --> f(#2:List, #1:Elt, #3:List, #8:List) W --> #5:List X --> #6:List Z --> 1 Y --> f(#9:List, #1:Elt, #10:List) S --> #7:List Unifier 1503 A --> #4:List B --> f(#6:List, #9:List) E --> #1:Elt C --> f(#10:List, #7:List) D --> #2:List H --> 1 G --> #3:List I --> f(#8:List, #5:List) U --> #4:List V --> f(#2:List, #1:Elt, #3:List, #8:List) W --> #5:List X --> #6:List Z --> 1 Y --> f(#9:List, #1:Elt, #10:List) S --> #7:List Unifier 1504 A --> #5:List B --> f(#7:List, #10:List) E --> #1:Elt C --> f(#11:List, #8:List) D --> #2:List H --> #3:List G --> #4:List I --> f(#9:List, #6:List) U --> #5:List V --> f(#2:List, #1:Elt, j(#3:List, #4:List), #9:List) W --> #6:List X --> #7:List Z --> 1 Y --> f(#10:List, #1:Elt, #11:List) S --> #8:List Unifier 1505 A --> #4:List B --> f(#5:List, #9:List) E --> #1:Elt C --> f(#10:List, #6:List) D --> #2:List H --> f(#7:List, #8:List) G --> 1 I --> #3:List U --> #4:List V --> f(#2:List, #1:Elt, #7:List) W --> f(#8:List, #3:List) X --> #5:List Z --> f(#9:List, #1:Elt, #10:List) Y --> 1 S --> #6:List Unifier 1506 A --> #4:List B --> f(#5:List, #9:List) E --> #1:Elt C --> f(#10:List, #6:List) D --> #2:List H --> f(#7:List, #8:List) G --> 1 I --> #3:List U --> #4:List V --> f(#2:List, #1:Elt, #7:List) W --> f(#8:List, #3:List) X --> #5:List Z --> 1 Y --> f(#9:List, #1:Elt, #10:List) S --> #6:List Unifier 1507 A --> #4:List B --> f(#5:List, #9:List) E --> #1:Elt C --> f(#10:List, #6:List) D --> #2:List H --> 1 G --> f(#7:List, #8:List) I --> #3:List U --> #4:List V --> f(#2:List, #1:Elt, #7:List) W --> f(#8:List, #3:List) X --> #5:List Z --> f(#9:List, #1:Elt, #10:List) Y --> 1 S --> #6:List Unifier 1508 A --> #4:List B --> f(#5:List, #9:List) E --> #1:Elt C --> f(#10:List, #6:List) D --> #2:List H --> 1 G --> f(#7:List, #8:List) I --> #3:List U --> #4:List V --> f(#2:List, #1:Elt, #7:List) W --> f(#8:List, #3:List) X --> #5:List Z --> 1 Y --> f(#9:List, #1:Elt, #10:List) S --> #6:List Unifier 1509 A --> #4:List B --> f(#5:List, #7:List) E --> #1:Elt C --> f(#8:List, #6:List) D --> #2:List H --> 1 G --> 1 I --> #3:List U --> #4:List V --> f(#2:List, #1:Elt, 1) W --> #3:List X --> #5:List Z --> f(#7:List, #1:Elt, #8:List) Y --> 1 S --> #6:List Unifier 1510 A --> #5:List B --> f(#6:List, #8:List) E --> #1:Elt C --> f(#9:List, #7:List) D --> #2:List H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> f(#2:List, #1:Elt, #3:List) W --> #4:List X --> #6:List Z --> f(#8:List, #1:Elt, #9:List) Y --> 1 S --> #7:List Unifier 1511 A --> #5:List B --> f(#6:List, #8:List) E --> #1:Elt C --> f(#9:List, #7:List) D --> #2:List H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> f(#2:List, #1:Elt, #3:List) W --> #4:List X --> #6:List Z --> f(#8:List, #1:Elt, #9:List) Y --> 1 S --> #7:List Unifier 1512 A --> #6:List B --> f(#7:List, #9:List) E --> #1:Elt C --> f(#10:List, #8:List) D --> #2:List H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> f(#2:List, #1:Elt, j(#3:List, #4:List)) W --> #5:List X --> #7:List Z --> f(#9:List, #1:Elt, #10:List) Y --> 1 S --> #8:List Unifier 1513 A --> #4:List B --> f(#5:List, #7:List) E --> #1:Elt C --> f(#8:List, #6:List) D --> #2:List H --> 1 G --> 1 I --> #3:List U --> #4:List V --> f(#2:List, #1:Elt, 1) W --> #3:List X --> #5:List Z --> 1 Y --> f(#7:List, #1:Elt, #8:List) S --> #6:List Unifier 1514 A --> #5:List B --> f(#6:List, #8:List) E --> #1:Elt C --> f(#9:List, #7:List) D --> #2:List H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> f(#2:List, #1:Elt, #3:List) W --> #4:List X --> #6:List Z --> 1 Y --> f(#8:List, #1:Elt, #9:List) S --> #7:List Unifier 1515 A --> #5:List B --> f(#6:List, #8:List) E --> #1:Elt C --> f(#9:List, #7:List) D --> #2:List H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> f(#2:List, #1:Elt, #3:List) W --> #4:List X --> #6:List Z --> 1 Y --> f(#8:List, #1:Elt, #9:List) S --> #7:List Unifier 1516 A --> #6:List B --> f(#7:List, #9:List) E --> #1:Elt C --> f(#10:List, #8:List) D --> #2:List H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> f(#2:List, #1:Elt, j(#3:List, #4:List)) W --> #5:List X --> #7:List Z --> 1 Y --> f(#9:List, #1:Elt, #10:List) S --> #8:List Unifier 1517 A --> #4:List B --> f(#5:List, #7:List) E --> #1:Elt C --> f(#8:List, #6:List) D --> #2:List H --> 1 G --> 1 I --> #3:List U --> #4:List V --> f(#2:List, #1:Elt) W --> f(1, #3:List) X --> #5:List Z --> f(#7:List, #1:Elt, #8:List) Y --> 1 S --> #6:List Unifier 1518 A --> #5:List B --> f(#6:List, #8:List) E --> #1:Elt C --> f(#9:List, #7:List) D --> #2:List H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> f(#2:List, #1:Elt) W --> f(#3:List, #4:List) X --> #6:List Z --> f(#8:List, #1:Elt, #9:List) Y --> 1 S --> #7:List Unifier 1519 A --> #5:List B --> f(#6:List, #8:List) E --> #1:Elt C --> f(#9:List, #7:List) D --> #2:List H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> f(#2:List, #1:Elt) W --> f(#3:List, #4:List) X --> #6:List Z --> f(#8:List, #1:Elt, #9:List) Y --> 1 S --> #7:List Unifier 1520 A --> #6:List B --> f(#7:List, #9:List) E --> #1:Elt C --> f(#10:List, #8:List) D --> #2:List H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> f(#2:List, #1:Elt) W --> f(j(#3:List, #4:List), #5:List) X --> #7:List Z --> f(#9:List, #1:Elt, #10:List) Y --> 1 S --> #8:List Unifier 1521 A --> #4:List B --> f(#5:List, #7:List) E --> #1:Elt C --> f(#8:List, #6:List) D --> #2:List H --> 1 G --> 1 I --> #3:List U --> #4:List V --> f(#2:List, #1:Elt) W --> f(1, #3:List) X --> #5:List Z --> 1 Y --> f(#7:List, #1:Elt, #8:List) S --> #6:List Unifier 1522 A --> #5:List B --> f(#6:List, #8:List) E --> #1:Elt C --> f(#9:List, #7:List) D --> #2:List H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> f(#2:List, #1:Elt) W --> f(#3:List, #4:List) X --> #6:List Z --> 1 Y --> f(#8:List, #1:Elt, #9:List) S --> #7:List Unifier 1523 A --> #5:List B --> f(#6:List, #8:List) E --> #1:Elt C --> f(#9:List, #7:List) D --> #2:List H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> f(#2:List, #1:Elt) W --> f(#3:List, #4:List) X --> #6:List Z --> 1 Y --> f(#8:List, #1:Elt, #9:List) S --> #7:List Unifier 1524 A --> #6:List B --> f(#7:List, #9:List) E --> #1:Elt C --> f(#10:List, #8:List) D --> #2:List H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> f(#2:List, #1:Elt) W --> f(j(#3:List, #4:List), #5:List) X --> #7:List Z --> 1 Y --> f(#9:List, #1:Elt, #10:List) S --> #8:List Unifier 1525 A --> #3:List B --> f(#5:List, #8:List) E --> #1:Elt C --> f(#9:List, #6:List) D --> f(#4:List, #7:List) H --> 1 G --> 1 I --> #2:List U --> #3:List V --> #4:List W --> f(#7:List, #1:Elt, 1, #2:List) X --> #5:List Z --> f(#8:List, #1:Elt, #9:List) Y --> 1 S --> #6:List Unifier 1526 A --> #4:List B --> f(#6:List, #9:List) E --> #1:Elt C --> f(#10:List, #7:List) D --> f(#5:List, #8:List) H --> #2:List G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#8:List, #1:Elt, #2:List, #3:List) X --> #6:List Z --> f(#9:List, #1:Elt, #10:List) Y --> 1 S --> #7:List Unifier 1527 A --> #4:List B --> f(#6:List, #9:List) E --> #1:Elt C --> f(#10:List, #7:List) D --> f(#5:List, #8:List) H --> 1 G --> #2:List I --> #3:List U --> #4:List V --> #5:List W --> f(#8:List, #1:Elt, #2:List, #3:List) X --> #6:List Z --> f(#9:List, #1:Elt, #10:List) Y --> 1 S --> #7:List Unifier 1528 A --> #5:List B --> f(#7:List, #10:List) E --> #1:Elt C --> f(#11:List, #8:List) D --> f(#6:List, #9:List) H --> #2:List G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, j(#2:List, #3:List), #4:List) X --> #7:List Z --> f(#10:List, #1:Elt, #11:List) Y --> 1 S --> #8:List Unifier 1529 A --> #3:List B --> f(#5:List, #8:List) E --> #1:Elt C --> f(#9:List, #6:List) D --> f(#4:List, #7:List) H --> 1 G --> 1 I --> #2:List U --> #3:List V --> #4:List W --> f(#7:List, #1:Elt, 1, #2:List) X --> #5:List Z --> 1 Y --> f(#8:List, #1:Elt, #9:List) S --> #6:List Unifier 1530 A --> #4:List B --> f(#6:List, #9:List) E --> #1:Elt C --> f(#10:List, #7:List) D --> f(#5:List, #8:List) H --> #2:List G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#8:List, #1:Elt, #2:List, #3:List) X --> #6:List Z --> 1 Y --> f(#9:List, #1:Elt, #10:List) S --> #7:List Unifier 1531 A --> #4:List B --> f(#6:List, #9:List) E --> #1:Elt C --> f(#10:List, #7:List) D --> f(#5:List, #8:List) H --> 1 G --> #2:List I --> #3:List U --> #4:List V --> #5:List W --> f(#8:List, #1:Elt, #2:List, #3:List) X --> #6:List Z --> 1 Y --> f(#9:List, #1:Elt, #10:List) S --> #7:List Unifier 1532 A --> #5:List B --> f(#7:List, #10:List) E --> #1:Elt C --> f(#11:List, #8:List) D --> f(#6:List, #9:List) H --> #2:List G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, j(#2:List, #3:List), #4:List) X --> #7:List Z --> 1 Y --> f(#10:List, #1:Elt, #11:List) S --> #8:List Unifier 1533 A --> #4:List B --> f(#5:List, #7:List) E --> #1:Elt C --> f(#8:List, #6:List) D --> #2:List H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #2:List W --> f(#1:Elt, 1, #3:List) X --> #5:List Z --> f(#7:List, #1:Elt, #8:List) Y --> 1 S --> #6:List Unifier 1534 A --> #5:List B --> f(#6:List, #8:List) E --> #1:Elt C --> f(#9:List, #7:List) D --> #2:List H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #2:List W --> f(#1:Elt, #3:List, #4:List) X --> #6:List Z --> f(#8:List, #1:Elt, #9:List) Y --> 1 S --> #7:List Unifier 1535 A --> #5:List B --> f(#6:List, #8:List) E --> #1:Elt C --> f(#9:List, #7:List) D --> #2:List H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #2:List W --> f(#1:Elt, #3:List, #4:List) X --> #6:List Z --> f(#8:List, #1:Elt, #9:List) Y --> 1 S --> #7:List Unifier 1536 A --> #6:List B --> f(#7:List, #9:List) E --> #1:Elt C --> f(#10:List, #8:List) D --> #2:List H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #2:List W --> f(#1:Elt, j(#3:List, #4:List), #5:List) X --> #7:List Z --> f(#9:List, #1:Elt, #10:List) Y --> 1 S --> #8:List Unifier 1537 A --> #4:List B --> f(#5:List, #7:List) E --> #1:Elt C --> f(#8:List, #6:List) D --> #2:List H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #2:List W --> f(#1:Elt, 1, #3:List) X --> #5:List Z --> 1 Y --> f(#7:List, #1:Elt, #8:List) S --> #6:List Unifier 1538 A --> #5:List B --> f(#6:List, #8:List) E --> #1:Elt C --> f(#9:List, #7:List) D --> #2:List H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #2:List W --> f(#1:Elt, #3:List, #4:List) X --> #6:List Z --> 1 Y --> f(#8:List, #1:Elt, #9:List) S --> #7:List Unifier 1539 A --> #5:List B --> f(#6:List, #8:List) E --> #1:Elt C --> f(#9:List, #7:List) D --> #2:List H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #2:List W --> f(#1:Elt, #3:List, #4:List) X --> #6:List Z --> 1 Y --> f(#8:List, #1:Elt, #9:List) S --> #7:List Unifier 1540 A --> #6:List B --> f(#7:List, #9:List) E --> #1:Elt C --> f(#10:List, #8:List) D --> #2:List H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #2:List W --> f(#1:Elt, j(#3:List, #4:List), #5:List) X --> #7:List Z --> 1 Y --> f(#9:List, #1:Elt, #10:List) S --> #8:List Unifier 1541 A --> #4:List B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#7:List, #5:List) U --> #4:List V --> f(#3:List, #1:Elt, 1, #7:List) W --> #5:List X --> #6:List Z --> f(#8:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1542 A --> #5:List B --> f(#7:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, #6:List) U --> #5:List V --> f(#3:List, #1:Elt, #4:List, #8:List) W --> #6:List X --> #7:List Z --> f(#9:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1543 A --> #5:List B --> f(#7:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, #6:List) U --> #5:List V --> f(#3:List, #1:Elt, #4:List, #8:List) W --> #6:List X --> #7:List Z --> f(#9:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1544 A --> #6:List B --> f(#8:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, #7:List) U --> #6:List V --> f(#3:List, #1:Elt, j(#4:List, #5:List), #9:List) W --> #7:List X --> #8:List Z --> f(#10:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1545 A --> #4:List B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#7:List, #5:List) U --> #4:List V --> f(#3:List, #1:Elt, 1, #7:List) W --> #5:List X --> #6:List Z --> 1 Y --> f(#8:List, #1:Elt) S --> #2:List Unifier 1546 A --> #5:List B --> f(#7:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, #6:List) U --> #5:List V --> f(#3:List, #1:Elt, #4:List, #8:List) W --> #6:List X --> #7:List Z --> 1 Y --> f(#9:List, #1:Elt) S --> #2:List Unifier 1547 A --> #5:List B --> f(#7:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, #6:List) U --> #5:List V --> f(#3:List, #1:Elt, #4:List, #8:List) W --> #6:List X --> #7:List Z --> 1 Y --> f(#9:List, #1:Elt) S --> #2:List Unifier 1548 A --> #6:List B --> f(#8:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, #7:List) U --> #6:List V --> f(#3:List, #1:Elt, j(#4:List, #5:List), #9:List) W --> #7:List X --> #8:List Z --> 1 Y --> f(#10:List, #1:Elt) S --> #2:List Unifier 1549 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#7:List, #8:List) G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, #7:List) W --> f(#8:List, #4:List) X --> #6:List Z --> f(#9:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1550 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#7:List, #8:List) G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, #7:List) W --> f(#8:List, #4:List) X --> #6:List Z --> 1 Y --> f(#9:List, #1:Elt) S --> #2:List Unifier 1551 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#7:List, #8:List) I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, #7:List) W --> f(#8:List, #4:List) X --> #6:List Z --> f(#9:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1552 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#7:List, #8:List) I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, #7:List) W --> f(#8:List, #4:List) X --> #6:List Z --> 1 Y --> f(#9:List, #1:Elt) S --> #2:List Unifier 1553 A --> #5:List B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, 1) W --> #4:List X --> #6:List Z --> f(#7:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1554 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #7:List Z --> f(#8:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1555 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #7:List Z --> f(#8:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1556 A --> #7:List B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #1:Elt, j(#4:List, #5:List)) W --> #6:List X --> #8:List Z --> f(#9:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1557 A --> #5:List B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, 1) W --> #4:List X --> #6:List Z --> 1 Y --> f(#7:List, #1:Elt) S --> #2:List Unifier 1558 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #7:List Z --> 1 Y --> f(#8:List, #1:Elt) S --> #2:List Unifier 1559 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #7:List Z --> 1 Y --> f(#8:List, #1:Elt) S --> #2:List Unifier 1560 A --> #7:List B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #1:Elt, j(#4:List, #5:List)) W --> #6:List X --> #8:List Z --> 1 Y --> f(#9:List, #1:Elt) S --> #2:List Unifier 1561 A --> #5:List B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt) W --> f(1, #4:List) X --> #6:List Z --> f(#7:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1562 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #7:List Z --> f(#8:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1563 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #7:List Z --> f(#8:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1564 A --> #7:List B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #1:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> #8:List Z --> f(#9:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1565 A --> #5:List B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt) W --> f(1, #4:List) X --> #6:List Z --> 1 Y --> f(#7:List, #1:Elt) S --> #2:List Unifier 1566 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #7:List Z --> 1 Y --> f(#8:List, #1:Elt) S --> #2:List Unifier 1567 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #7:List Z --> 1 Y --> f(#8:List, #1:Elt) S --> #2:List Unifier 1568 A --> #7:List B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #1:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> #8:List Z --> 1 Y --> f(#9:List, #1:Elt) S --> #2:List Unifier 1569 A --> #4:List B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#7:List, #1:Elt, 1, #3:List) X --> #6:List Z --> f(#8:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1570 A --> #5:List B --> f(#7:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#8:List, #1:Elt, #3:List, #4:List) X --> #7:List Z --> f(#9:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1571 A --> #5:List B --> f(#7:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#8:List, #1:Elt, #3:List, #4:List) X --> #7:List Z --> f(#9:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1572 A --> #6:List B --> f(#8:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#9:List, #1:Elt, j(#3:List, #4:List), #5:List) X --> #8:List Z --> f(#10:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1573 A --> #4:List B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#7:List, #1:Elt, 1, #3:List) X --> #6:List Z --> 1 Y --> f(#8:List, #1:Elt) S --> #2:List Unifier 1574 A --> #5:List B --> f(#7:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#8:List, #1:Elt, #3:List, #4:List) X --> #7:List Z --> 1 Y --> f(#9:List, #1:Elt) S --> #2:List Unifier 1575 A --> #5:List B --> f(#7:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#8:List, #1:Elt, #3:List, #4:List) X --> #7:List Z --> 1 Y --> f(#9:List, #1:Elt) S --> #2:List Unifier 1576 A --> #6:List B --> f(#8:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#9:List, #1:Elt, j(#3:List, #4:List), #5:List) X --> #8:List Z --> 1 Y --> f(#10:List, #1:Elt) S --> #2:List Unifier 1577 A --> #5:List B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #3:List W --> f(#1:Elt, 1, #4:List) X --> #6:List Z --> f(#7:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1578 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #7:List Z --> f(#8:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1579 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #7:List Z --> f(#8:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1580 A --> #7:List B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #3:List W --> f(#1:Elt, j(#4:List, #5:List), #6:List) X --> #8:List Z --> f(#9:List, #1:Elt) Y --> 1 S --> #2:List Unifier 1581 A --> #5:List B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #3:List W --> f(#1:Elt, 1, #4:List) X --> #6:List Z --> 1 Y --> f(#7:List, #1:Elt) S --> #2:List Unifier 1582 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #7:List Z --> 1 Y --> f(#8:List, #1:Elt) S --> #2:List Unifier 1583 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #7:List Z --> 1 Y --> f(#8:List, #1:Elt) S --> #2:List Unifier 1584 A --> #7:List B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #3:List W --> f(#1:Elt, j(#4:List, #5:List), #6:List) X --> #8:List Z --> 1 Y --> f(#9:List, #1:Elt) S --> #2:List Unifier 1585 A --> #4:List B --> f(#6:List, 1, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#7:List, #5:List) U --> #4:List V --> f(#3:List, #1:Elt, 1, #7:List) W --> #5:List X --> #6:List Z --> 1 Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 1586 A --> #4:List B --> f(#6:List, #7:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#8:List, #5:List) U --> #4:List V --> f(#3:List, #1:Elt, 1, #8:List) W --> #5:List X --> #6:List Z --> #7:List Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 1587 A --> #4:List B --> f(#6:List, #7:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#8:List, #5:List) U --> #4:List V --> f(#3:List, #1:Elt, 1, #8:List) W --> #5:List X --> #6:List Z --> 1 Y --> #7:List S --> f(#9:List, #1:Elt, #2:List) Unifier 1588 A --> #4:List B --> f(#6:List, j(#7:List, #8:List), #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#9:List, #5:List) U --> #4:List V --> f(#3:List, #1:Elt, 1, #9:List) W --> #5:List X --> #6:List Z --> #7:List Y --> #8:List S --> f(#10:List, #1:Elt, #2:List) Unifier 1589 A --> #5:List B --> f(#7:List, 1, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, #6:List) U --> #5:List V --> f(#3:List, #1:Elt, #4:List, #8:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 1590 A --> #5:List B --> f(#7:List, #8:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#9:List, #6:List) U --> #5:List V --> f(#3:List, #1:Elt, #4:List, #9:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#10:List, #1:Elt, #2:List) Unifier 1591 A --> #5:List B --> f(#7:List, #8:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#9:List, #6:List) U --> #5:List V --> f(#3:List, #1:Elt, #4:List, #9:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#10:List, #1:Elt, #2:List) Unifier 1592 A --> #5:List B --> f(#7:List, j(#8:List, #9:List), #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#10:List, #6:List) U --> #5:List V --> f(#3:List, #1:Elt, #4:List, #10:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#11:List, #1:Elt, #2:List) Unifier 1593 A --> #5:List B --> f(#7:List, 1, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, #6:List) U --> #5:List V --> f(#3:List, #1:Elt, #4:List, #8:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 1594 A --> #5:List B --> f(#7:List, #8:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#9:List, #6:List) U --> #5:List V --> f(#3:List, #1:Elt, #4:List, #9:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#10:List, #1:Elt, #2:List) Unifier 1595 A --> #5:List B --> f(#7:List, #8:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#9:List, #6:List) U --> #5:List V --> f(#3:List, #1:Elt, #4:List, #9:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#10:List, #1:Elt, #2:List) Unifier 1596 A --> #5:List B --> f(#7:List, j(#8:List, #9:List), #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#10:List, #6:List) U --> #5:List V --> f(#3:List, #1:Elt, #4:List, #10:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#11:List, #1:Elt, #2:List) Unifier 1597 A --> #6:List B --> f(#8:List, 1, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, #7:List) U --> #6:List V --> f(#3:List, #1:Elt, j(#4:List, #5:List), #9:List) W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> f(#10:List, #1:Elt, #2:List) Unifier 1598 A --> #6:List B --> f(#8:List, #9:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#10:List, #7:List) U --> #6:List V --> f(#3:List, #1:Elt, j(#4:List, #5:List), #10:List) W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#11:List, #1:Elt, #2:List) Unifier 1599 A --> #6:List B --> f(#8:List, #9:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#10:List, #7:List) U --> #6:List V --> f(#3:List, #1:Elt, j(#4:List, #5:List), #10:List) W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#11:List, #1:Elt, #2:List) Unifier 1600 A --> #6:List B --> f(#8:List, j(#9:List, #10:List), #12:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#11:List, #7:List) U --> #6:List V --> f(#3:List, #1:Elt, j(#4:List, #5:List), #11:List) W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#12:List, #1:Elt, #2:List) Unifier 1601 A --> #5:List B --> f(#6:List, 1, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#7:List, #8:List) G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, #7:List) W --> f(#8:List, #4:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 1602 A --> #5:List B --> f(#6:List, #7:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#8:List, #9:List) G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, #8:List) W --> f(#9:List, #4:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#10:List, #1:Elt, #2:List) Unifier 1603 A --> #5:List B --> f(#6:List, #7:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#8:List, #9:List) G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, #8:List) W --> f(#9:List, #4:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#10:List, #1:Elt, #2:List) Unifier 1604 A --> #5:List B --> f(#6:List, j(#7:List, #8:List), #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#9:List, #10:List) G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, #9:List) W --> f(#10:List, #4:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#11:List, #1:Elt, #2:List) Unifier 1605 A --> #5:List B --> f(#6:List, 1, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#7:List, #8:List) I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, #7:List) W --> f(#8:List, #4:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 1606 A --> #5:List B --> f(#6:List, #7:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#8:List, #9:List) I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, #8:List) W --> f(#9:List, #4:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#10:List, #1:Elt, #2:List) Unifier 1607 A --> #5:List B --> f(#6:List, #7:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#8:List, #9:List) I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, #8:List) W --> f(#9:List, #4:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#10:List, #1:Elt, #2:List) Unifier 1608 A --> #5:List B --> f(#6:List, j(#7:List, #8:List), #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#9:List, #10:List) I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, #9:List) W --> f(#10:List, #4:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#11:List, #1:Elt, #2:List) Unifier 1609 A --> #5:List B --> f(#6:List, 1, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, 1) W --> #4:List X --> #6:List Z --> 1 Y --> 1 S --> f(#7:List, #1:Elt, #2:List) Unifier 1610 A --> #5:List B --> f(#6:List, #7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, 1) W --> #4:List X --> #6:List Z --> #7:List Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 1611 A --> #5:List B --> f(#6:List, #7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, 1) W --> #4:List X --> #6:List Z --> 1 Y --> #7:List S --> f(#8:List, #1:Elt, #2:List) Unifier 1612 A --> #5:List B --> f(#6:List, j(#7:List, #8:List), #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, 1) W --> #4:List X --> #6:List Z --> #7:List Y --> #8:List S --> f(#9:List, #1:Elt, #2:List) Unifier 1613 A --> #6:List B --> f(#7:List, 1, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #7:List Z --> 1 Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 1614 A --> #6:List B --> f(#7:List, #8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 1615 A --> #6:List B --> f(#7:List, #8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#9:List, #1:Elt, #2:List) Unifier 1616 A --> #6:List B --> f(#7:List, j(#8:List, #9:List), #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#10:List, #1:Elt, #2:List) Unifier 1617 A --> #6:List B --> f(#7:List, 1, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #7:List Z --> 1 Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 1618 A --> #6:List B --> f(#7:List, #8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 1619 A --> #6:List B --> f(#7:List, #8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#9:List, #1:Elt, #2:List) Unifier 1620 A --> #6:List B --> f(#7:List, j(#8:List, #9:List), #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#10:List, #1:Elt, #2:List) Unifier 1621 A --> #7:List B --> f(#8:List, 1, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #1:Elt, j(#4:List, #5:List)) W --> #6:List X --> #8:List Z --> 1 Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 1622 A --> #7:List B --> f(#8:List, #9:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #1:Elt, j(#4:List, #5:List)) W --> #6:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#10:List, #1:Elt, #2:List) Unifier 1623 A --> #7:List B --> f(#8:List, #9:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #1:Elt, j(#4:List, #5:List)) W --> #6:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#10:List, #1:Elt, #2:List) Unifier 1624 A --> #7:List B --> f(#8:List, j(#9:List, #10:List), #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #1:Elt, j(#4:List, #5:List)) W --> #6:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#11:List, #1:Elt, #2:List) Unifier 1625 A --> #5:List B --> f(#6:List, 1, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt) W --> f(1, #4:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#7:List, #1:Elt, #2:List) Unifier 1626 A --> #5:List B --> f(#6:List, #7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt) W --> f(1, #4:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 1627 A --> #5:List B --> f(#6:List, #7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt) W --> f(1, #4:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#8:List, #1:Elt, #2:List) Unifier 1628 A --> #5:List B --> f(#6:List, j(#7:List, #8:List), #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt) W --> f(1, #4:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#9:List, #1:Elt, #2:List) Unifier 1629 A --> #6:List B --> f(#7:List, 1, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 1630 A --> #6:List B --> f(#7:List, #8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 1631 A --> #6:List B --> f(#7:List, #8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#9:List, #1:Elt, #2:List) Unifier 1632 A --> #6:List B --> f(#7:List, j(#8:List, #9:List), #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#10:List, #1:Elt, #2:List) Unifier 1633 A --> #6:List B --> f(#7:List, 1, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 1634 A --> #6:List B --> f(#7:List, #8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 1635 A --> #6:List B --> f(#7:List, #8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#9:List, #1:Elt, #2:List) Unifier 1636 A --> #6:List B --> f(#7:List, j(#8:List, #9:List), #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#10:List, #1:Elt, #2:List) Unifier 1637 A --> #7:List B --> f(#8:List, 1, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #1:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> #8:List Z --> 1 Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 1638 A --> #7:List B --> f(#8:List, #9:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #1:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> #8:List Z --> #9:List Y --> 1 S --> f(#10:List, #1:Elt, #2:List) Unifier 1639 A --> #7:List B --> f(#8:List, #9:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #1:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> #8:List Z --> 1 Y --> #9:List S --> f(#10:List, #1:Elt, #2:List) Unifier 1640 A --> #7:List B --> f(#8:List, j(#9:List, #10:List), #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #1:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> #8:List Z --> #9:List Y --> #10:List S --> f(#11:List, #1:Elt, #2:List) Unifier 1641 A --> #4:List B --> f(#6:List, 1, #8:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#7:List, #1:Elt, 1, #3:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 1642 A --> #4:List B --> f(#6:List, #7:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #8:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#8:List, #1:Elt, 1, #3:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 1643 A --> #4:List B --> f(#6:List, #7:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #8:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#8:List, #1:Elt, 1, #3:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#9:List, #1:Elt, #2:List) Unifier 1644 A --> #4:List B --> f(#6:List, j(#7:List, #8:List), #10:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #9:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#9:List, #1:Elt, 1, #3:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#10:List, #1:Elt, #2:List) Unifier 1645 A --> #5:List B --> f(#7:List, 1, #9:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#8:List, #1:Elt, #3:List, #4:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 1646 A --> #5:List B --> f(#7:List, #8:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #9:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #3:List, #4:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#10:List, #1:Elt, #2:List) Unifier 1647 A --> #5:List B --> f(#7:List, #8:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #9:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #3:List, #4:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#10:List, #1:Elt, #2:List) Unifier 1648 A --> #5:List B --> f(#7:List, j(#8:List, #9:List), #11:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #10:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#10:List, #1:Elt, #3:List, #4:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#11:List, #1:Elt, #2:List) Unifier 1649 A --> #5:List B --> f(#7:List, 1, #9:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#8:List, #1:Elt, #3:List, #4:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 1650 A --> #5:List B --> f(#7:List, #8:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #9:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #3:List, #4:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#10:List, #1:Elt, #2:List) Unifier 1651 A --> #5:List B --> f(#7:List, #8:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #9:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #3:List, #4:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#10:List, #1:Elt, #2:List) Unifier 1652 A --> #5:List B --> f(#7:List, j(#8:List, #9:List), #11:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #10:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#10:List, #1:Elt, #3:List, #4:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#11:List, #1:Elt, #2:List) Unifier 1653 A --> #6:List B --> f(#8:List, 1, #10:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#9:List, #1:Elt, j(#3:List, #4:List), #5:List) X --> #8:List Z --> 1 Y --> 1 S --> f(#10:List, #1:Elt, #2:List) Unifier 1654 A --> #6:List B --> f(#8:List, #9:List, #11:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #10:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#10:List, #1:Elt, j(#3:List, #4:List), #5:List) X --> #8:List Z --> #9:List Y --> 1 S --> f(#11:List, #1:Elt, #2:List) Unifier 1655 A --> #6:List B --> f(#8:List, #9:List, #11:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #10:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#10:List, #1:Elt, j(#3:List, #4:List), #5:List) X --> #8:List Z --> 1 Y --> #9:List S --> f(#11:List, #1:Elt, #2:List) Unifier 1656 A --> #6:List B --> f(#8:List, j(#9:List, #10:List), #12:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #11:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#11:List, #1:Elt, j(#3:List, #4:List), #5:List) X --> #8:List Z --> #9:List Y --> #10:List S --> f(#12:List, #1:Elt, #2:List) Unifier 1657 A --> #5:List B --> f(#6:List, 1, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #3:List W --> f(#1:Elt, 1, #4:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#7:List, #1:Elt, #2:List) Unifier 1658 A --> #5:List B --> f(#6:List, #7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #3:List W --> f(#1:Elt, 1, #4:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 1659 A --> #5:List B --> f(#6:List, #7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #3:List W --> f(#1:Elt, 1, #4:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#8:List, #1:Elt, #2:List) Unifier 1660 A --> #5:List B --> f(#6:List, j(#7:List, #8:List), #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #3:List W --> f(#1:Elt, 1, #4:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#9:List, #1:Elt, #2:List) Unifier 1661 A --> #6:List B --> f(#7:List, 1, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 1662 A --> #6:List B --> f(#7:List, #8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 1663 A --> #6:List B --> f(#7:List, #8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#9:List, #1:Elt, #2:List) Unifier 1664 A --> #6:List B --> f(#7:List, j(#8:List, #9:List), #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#10:List, #1:Elt, #2:List) Unifier 1665 A --> #6:List B --> f(#7:List, 1, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#8:List, #1:Elt, #2:List) Unifier 1666 A --> #6:List B --> f(#7:List, #8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 1667 A --> #6:List B --> f(#7:List, #8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#9:List, #1:Elt, #2:List) Unifier 1668 A --> #6:List B --> f(#7:List, j(#8:List, #9:List), #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#10:List, #1:Elt, #2:List) Unifier 1669 A --> #7:List B --> f(#8:List, 1, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #3:List W --> f(#1:Elt, j(#4:List, #5:List), #6:List) X --> #8:List Z --> 1 Y --> 1 S --> f(#9:List, #1:Elt, #2:List) Unifier 1670 A --> #7:List B --> f(#8:List, #9:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #3:List W --> f(#1:Elt, j(#4:List, #5:List), #6:List) X --> #8:List Z --> #9:List Y --> 1 S --> f(#10:List, #1:Elt, #2:List) Unifier 1671 A --> #7:List B --> f(#8:List, #9:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #3:List W --> f(#1:Elt, j(#4:List, #5:List), #6:List) X --> #8:List Z --> 1 Y --> #9:List S --> f(#10:List, #1:Elt, #2:List) Unifier 1672 A --> #7:List B --> f(#8:List, j(#9:List, #10:List), #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #3:List W --> f(#1:Elt, j(#4:List, #5:List), #6:List) X --> #8:List Z --> #9:List Y --> #10:List S --> f(#11:List, #1:Elt, #2:List) Unifier 1673 A --> #4:List B --> f(#6:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#7:List, #5:List) U --> #4:List V --> f(#3:List, #1:Elt, 1, #7:List) W --> #5:List X --> #6:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1674 A --> #4:List B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#8:List, #5:List) U --> #4:List V --> f(#3:List, #1:Elt, 1, #8:List) W --> #5:List X --> #6:List Z --> #7:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1675 A --> #4:List B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#8:List, #5:List) U --> #4:List V --> f(#3:List, #1:Elt, 1, #8:List) W --> #5:List X --> #6:List Z --> 1 Y --> #7:List S --> f(#1:Elt, #2:List) Unifier 1676 A --> #4:List B --> f(#6:List, j(#7:List, #8:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#9:List, #5:List) U --> #4:List V --> f(#3:List, #1:Elt, 1, #9:List) W --> #5:List X --> #6:List Z --> #7:List Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1677 A --> #5:List B --> f(#7:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, #6:List) U --> #5:List V --> f(#3:List, #1:Elt, #4:List, #8:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1678 A --> #5:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#9:List, #6:List) U --> #5:List V --> f(#3:List, #1:Elt, #4:List, #9:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1679 A --> #5:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#9:List, #6:List) U --> #5:List V --> f(#3:List, #1:Elt, #4:List, #9:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1680 A --> #5:List B --> f(#7:List, j(#8:List, #9:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#10:List, #6:List) U --> #5:List V --> f(#3:List, #1:Elt, #4:List, #10:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 1681 A --> #5:List B --> f(#7:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, #6:List) U --> #5:List V --> f(#3:List, #1:Elt, #4:List, #8:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1682 A --> #5:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#9:List, #6:List) U --> #5:List V --> f(#3:List, #1:Elt, #4:List, #9:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1683 A --> #5:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#9:List, #6:List) U --> #5:List V --> f(#3:List, #1:Elt, #4:List, #9:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1684 A --> #5:List B --> f(#7:List, j(#8:List, #9:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#10:List, #6:List) U --> #5:List V --> f(#3:List, #1:Elt, #4:List, #10:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 1685 A --> #6:List B --> f(#8:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, #7:List) U --> #6:List V --> f(#3:List, #1:Elt, j(#4:List, #5:List), #9:List) W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1686 A --> #6:List B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#10:List, #7:List) U --> #6:List V --> f(#3:List, #1:Elt, j(#4:List, #5:List), #10:List) W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1687 A --> #6:List B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#10:List, #7:List) U --> #6:List V --> f(#3:List, #1:Elt, j(#4:List, #5:List), #10:List) W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 1688 A --> #6:List B --> f(#8:List, j(#9:List, #10:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#11:List, #7:List) U --> #6:List V --> f(#3:List, #1:Elt, j(#4:List, #5:List), #11:List) W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#1:Elt, #2:List) Unifier 1689 A --> #5:List B --> f(#6:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#7:List, #8:List) G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, #7:List) W --> f(#8:List, #4:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1690 A --> #5:List B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#8:List, #9:List) G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, #8:List) W --> f(#9:List, #4:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1691 A --> #5:List B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#8:List, #9:List) G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, #8:List) W --> f(#9:List, #4:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#1:Elt, #2:List) Unifier 1692 A --> #5:List B --> f(#6:List, j(#7:List, #8:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#9:List, #10:List) G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, #9:List) W --> f(#10:List, #4:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1693 A --> #5:List B --> f(#6:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#7:List, #8:List) I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, #7:List) W --> f(#8:List, #4:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1694 A --> #5:List B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#8:List, #9:List) I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, #8:List) W --> f(#9:List, #4:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1695 A --> #5:List B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#8:List, #9:List) I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, #8:List) W --> f(#9:List, #4:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#1:Elt, #2:List) Unifier 1696 A --> #5:List B --> f(#6:List, j(#7:List, #8:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#9:List, #10:List) I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, #9:List) W --> f(#10:List, #4:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1697 A --> #5:List B --> f(#6:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, 1) W --> #4:List X --> #6:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1698 A --> #5:List B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, 1) W --> #4:List X --> #6:List Z --> #7:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1699 A --> #5:List B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, 1) W --> #4:List X --> #6:List Z --> 1 Y --> #7:List S --> f(#1:Elt, #2:List) Unifier 1700 A --> #5:List B --> f(#6:List, j(#7:List, #8:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt, 1) W --> #4:List X --> #6:List Z --> #7:List Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1701 A --> #6:List B --> f(#7:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #7:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1702 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1703 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1704 A --> #6:List B --> f(#7:List, j(#8:List, #9:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 1705 A --> #6:List B --> f(#7:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #7:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1706 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1707 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1708 A --> #6:List B --> f(#7:List, j(#8:List, #9:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt, #4:List) W --> #5:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 1709 A --> #7:List B --> f(#8:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #1:Elt, j(#4:List, #5:List)) W --> #6:List X --> #8:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1710 A --> #7:List B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #1:Elt, j(#4:List, #5:List)) W --> #6:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1711 A --> #7:List B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #1:Elt, j(#4:List, #5:List)) W --> #6:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 1712 A --> #7:List B --> f(#8:List, j(#9:List, #10:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #1:Elt, j(#4:List, #5:List)) W --> #6:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#1:Elt, #2:List) Unifier 1713 A --> #5:List B --> f(#6:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt) W --> f(1, #4:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1714 A --> #5:List B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt) W --> f(1, #4:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1715 A --> #5:List B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt) W --> f(1, #4:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#1:Elt, #2:List) Unifier 1716 A --> #5:List B --> f(#6:List, j(#7:List, #8:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #1:Elt) W --> f(1, #4:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1717 A --> #6:List B --> f(#7:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1718 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1719 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1720 A --> #6:List B --> f(#7:List, j(#8:List, #9:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 1721 A --> #6:List B --> f(#7:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1722 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1723 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1724 A --> #6:List B --> f(#7:List, j(#8:List, #9:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #1:Elt) W --> f(#4:List, #5:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 1725 A --> #7:List B --> f(#8:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #1:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> #8:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1726 A --> #7:List B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #1:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> #8:List Z --> #9:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1727 A --> #7:List B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #1:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> #8:List Z --> 1 Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 1728 A --> #7:List B --> f(#8:List, j(#9:List, #10:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #1:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> #8:List Z --> #9:List Y --> #10:List S --> f(#1:Elt, #2:List) Unifier 1729 A --> #4:List B --> f(#6:List, 1) E --> #1:Elt C --> #2:List D --> f(#5:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#7:List, #1:Elt, 1, #3:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1730 A --> #4:List B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #8:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#8:List, #1:Elt, 1, #3:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1731 A --> #4:List B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #8:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#8:List, #1:Elt, 1, #3:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#1:Elt, #2:List) Unifier 1732 A --> #4:List B --> f(#6:List, j(#7:List, #8:List)) E --> #1:Elt C --> #2:List D --> f(#5:List, #9:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#9:List, #1:Elt, 1, #3:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1733 A --> #5:List B --> f(#7:List, 1) E --> #1:Elt C --> #2:List D --> f(#6:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#8:List, #1:Elt, #3:List, #4:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1734 A --> #5:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #9:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #3:List, #4:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1735 A --> #5:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #9:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #3:List, #4:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1736 A --> #5:List B --> f(#7:List, j(#8:List, #9:List)) E --> #1:Elt C --> #2:List D --> f(#6:List, #10:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#10:List, #1:Elt, #3:List, #4:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 1737 A --> #5:List B --> f(#7:List, 1) E --> #1:Elt C --> #2:List D --> f(#6:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#8:List, #1:Elt, #3:List, #4:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1738 A --> #5:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #9:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #3:List, #4:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1739 A --> #5:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #9:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #3:List, #4:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1740 A --> #5:List B --> f(#7:List, j(#8:List, #9:List)) E --> #1:Elt C --> #2:List D --> f(#6:List, #10:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#10:List, #1:Elt, #3:List, #4:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 1741 A --> #6:List B --> f(#8:List, 1) E --> #1:Elt C --> #2:List D --> f(#7:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#9:List, #1:Elt, j(#3:List, #4:List), #5:List) X --> #8:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1742 A --> #6:List B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #10:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#10:List, #1:Elt, j(#3:List, #4:List), #5:List) X --> #8:List Z --> #9:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1743 A --> #6:List B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #10:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#10:List, #1:Elt, j(#3:List, #4:List), #5:List) X --> #8:List Z --> 1 Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 1744 A --> #6:List B --> f(#8:List, j(#9:List, #10:List)) E --> #1:Elt C --> #2:List D --> f(#7:List, #11:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#11:List, #1:Elt, j(#3:List, #4:List), #5:List) X --> #8:List Z --> #9:List Y --> #10:List S --> f(#1:Elt, #2:List) Unifier 1745 A --> #5:List B --> f(#6:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #3:List W --> f(#1:Elt, 1, #4:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1746 A --> #5:List B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #3:List W --> f(#1:Elt, 1, #4:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1747 A --> #5:List B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #3:List W --> f(#1:Elt, 1, #4:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#1:Elt, #2:List) Unifier 1748 A --> #5:List B --> f(#6:List, j(#7:List, #8:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #3:List W --> f(#1:Elt, 1, #4:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1749 A --> #6:List B --> f(#7:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1750 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1751 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1752 A --> #6:List B --> f(#7:List, j(#8:List, #9:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 1753 A --> #6:List B --> f(#7:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1754 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1755 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#1:Elt, #2:List) Unifier 1756 A --> #6:List B --> f(#7:List, j(#8:List, #9:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #3:List W --> f(#1:Elt, #4:List, #5:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 1757 A --> #7:List B --> f(#8:List, 1) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #3:List W --> f(#1:Elt, j(#4:List, #5:List), #6:List) X --> #8:List Z --> 1 Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1758 A --> #7:List B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #3:List W --> f(#1:Elt, j(#4:List, #5:List), #6:List) X --> #8:List Z --> #9:List Y --> 1 S --> f(#1:Elt, #2:List) Unifier 1759 A --> #7:List B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #3:List W --> f(#1:Elt, j(#4:List, #5:List), #6:List) X --> #8:List Z --> 1 Y --> #9:List S --> f(#1:Elt, #2:List) Unifier 1760 A --> #7:List B --> f(#8:List, j(#9:List, #10:List)) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #3:List W --> f(#1:Elt, j(#4:List, #5:List), #6:List) X --> #8:List Z --> #9:List Y --> #10:List S --> f(#1:Elt, #2:List) Unifier 1761 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> f(#7:List, #5:List) U --> #4:List V --> f(#3:List, #2:Elt, 1, #7:List) W --> #5:List X --> #1:List Z --> f(#2:Elt, #8:List) Y --> 1 S --> #6:List Unifier 1762 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List) D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, #6:List) U --> #5:List V --> f(#3:List, #2:Elt, #4:List, #8:List) W --> #6:List X --> #1:List Z --> f(#2:Elt, #9:List) Y --> 1 S --> #7:List Unifier 1763 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List) D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, #6:List) U --> #5:List V --> f(#3:List, #2:Elt, #4:List, #8:List) W --> #6:List X --> #1:List Z --> f(#2:Elt, #9:List) Y --> 1 S --> #7:List Unifier 1764 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#10:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, #7:List) U --> #6:List V --> f(#3:List, #2:Elt, j(#4:List, #5:List), #9:List) W --> #7:List X --> #1:List Z --> f(#2:Elt, #10:List) Y --> 1 S --> #8:List Unifier 1765 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> f(#7:List, #5:List) U --> #4:List V --> f(#3:List, #2:Elt, 1, #7:List) W --> #5:List X --> #1:List Z --> 1 Y --> f(#2:Elt, #8:List) S --> #6:List Unifier 1766 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List) D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, #6:List) U --> #5:List V --> f(#3:List, #2:Elt, #4:List, #8:List) W --> #6:List X --> #1:List Z --> 1 Y --> f(#2:Elt, #9:List) S --> #7:List Unifier 1767 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List) D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, #6:List) U --> #5:List V --> f(#3:List, #2:Elt, #4:List, #8:List) W --> #6:List X --> #1:List Z --> 1 Y --> f(#2:Elt, #9:List) S --> #7:List Unifier 1768 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#10:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, #7:List) U --> #6:List V --> f(#3:List, #2:Elt, j(#4:List, #5:List), #9:List) W --> #7:List X --> #1:List Z --> 1 Y --> f(#2:Elt, #10:List) S --> #8:List Unifier 1769 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> f(#7:List, #8:List) G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, #7:List) W --> f(#8:List, #4:List) X --> #1:List Z --> f(#2:Elt, #9:List) Y --> 1 S --> #6:List Unifier 1770 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> f(#7:List, #8:List) G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, #7:List) W --> f(#8:List, #4:List) X --> #1:List Z --> 1 Y --> f(#2:Elt, #9:List) S --> #6:List Unifier 1771 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> 1 G --> f(#7:List, #8:List) I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, #7:List) W --> f(#8:List, #4:List) X --> #1:List Z --> f(#2:Elt, #9:List) Y --> 1 S --> #6:List Unifier 1772 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> 1 G --> f(#7:List, #8:List) I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, #7:List) W --> f(#8:List, #4:List) X --> #1:List Z --> 1 Y --> f(#2:Elt, #9:List) S --> #6:List Unifier 1773 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, 1) W --> #4:List X --> #1:List Z --> f(#2:Elt, #7:List) Y --> 1 S --> #6:List Unifier 1774 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> #1:List Z --> f(#2:Elt, #8:List) Y --> 1 S --> #7:List Unifier 1775 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> #1:List Z --> f(#2:Elt, #8:List) Y --> 1 S --> #7:List Unifier 1776 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#9:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #2:Elt, j(#4:List, #5:List)) W --> #6:List X --> #1:List Z --> f(#2:Elt, #9:List) Y --> 1 S --> #8:List Unifier 1777 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt, 1) W --> #4:List X --> #1:List Z --> 1 Y --> f(#2:Elt, #7:List) S --> #6:List Unifier 1778 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> #1:List Z --> 1 Y --> f(#2:Elt, #8:List) S --> #7:List Unifier 1779 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt, #4:List) W --> #5:List X --> #1:List Z --> 1 Y --> f(#2:Elt, #8:List) S --> #7:List Unifier 1780 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#9:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #2:Elt, j(#4:List, #5:List)) W --> #6:List X --> #1:List Z --> 1 Y --> f(#2:Elt, #9:List) S --> #8:List Unifier 1781 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt) W --> f(1, #4:List) X --> #1:List Z --> f(#2:Elt, #7:List) Y --> 1 S --> #6:List Unifier 1782 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> #1:List Z --> f(#2:Elt, #8:List) Y --> 1 S --> #7:List Unifier 1783 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> #1:List Z --> f(#2:Elt, #8:List) Y --> 1 S --> #7:List Unifier 1784 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#9:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #2:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> #1:List Z --> f(#2:Elt, #9:List) Y --> 1 S --> #8:List Unifier 1785 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#3:List, #2:Elt) W --> f(1, #4:List) X --> #1:List Z --> 1 Y --> f(#2:Elt, #7:List) S --> #6:List Unifier 1786 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> #1:List Z --> 1 Y --> f(#2:Elt, #8:List) S --> #7:List Unifier 1787 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#3:List, #2:Elt) W --> f(#4:List, #5:List) X --> #1:List Z --> 1 Y --> f(#2:Elt, #8:List) S --> #7:List Unifier 1788 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#9:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#3:List, #2:Elt) W --> f(j(#4:List, #5:List), #6:List) X --> #1:List Z --> 1 Y --> f(#2:Elt, #9:List) S --> #8:List Unifier 1789 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> f(#5:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#7:List, #2:Elt, 1, #3:List) X --> #1:List Z --> f(#2:Elt, #8:List) Y --> 1 S --> #6:List Unifier 1790 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List) D --> f(#6:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#8:List, #2:Elt, #3:List, #4:List) X --> #1:List Z --> f(#2:Elt, #9:List) Y --> 1 S --> #7:List Unifier 1791 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List) D --> f(#6:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#8:List, #2:Elt, #3:List, #4:List) X --> #1:List Z --> f(#2:Elt, #9:List) Y --> 1 S --> #7:List Unifier 1792 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#10:List, #8:List) D --> f(#7:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#9:List, #2:Elt, j(#3:List, #4:List), #5:List) X --> #1:List Z --> f(#2:Elt, #10:List) Y --> 1 S --> #8:List Unifier 1793 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> f(#5:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#7:List, #2:Elt, 1, #3:List) X --> #1:List Z --> 1 Y --> f(#2:Elt, #8:List) S --> #6:List Unifier 1794 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List) D --> f(#6:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#8:List, #2:Elt, #3:List, #4:List) X --> #1:List Z --> 1 Y --> f(#2:Elt, #9:List) S --> #7:List Unifier 1795 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List) D --> f(#6:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#8:List, #2:Elt, #3:List, #4:List) X --> #1:List Z --> 1 Y --> f(#2:Elt, #9:List) S --> #7:List Unifier 1796 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#10:List, #8:List) D --> f(#7:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#9:List, #2:Elt, j(#3:List, #4:List), #5:List) X --> #1:List Z --> 1 Y --> f(#2:Elt, #10:List) S --> #8:List Unifier 1797 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #3:List W --> f(#2:Elt, 1, #4:List) X --> #1:List Z --> f(#2:Elt, #7:List) Y --> 1 S --> #6:List Unifier 1798 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> #1:List Z --> f(#2:Elt, #8:List) Y --> 1 S --> #7:List Unifier 1799 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> #1:List Z --> f(#2:Elt, #8:List) Y --> 1 S --> #7:List Unifier 1800 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#9:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #3:List W --> f(#2:Elt, j(#4:List, #5:List), #6:List) X --> #1:List Z --> f(#2:Elt, #9:List) Y --> 1 S --> #8:List Unifier 1801 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #3:List W --> f(#2:Elt, 1, #4:List) X --> #1:List Z --> 1 Y --> f(#2:Elt, #7:List) S --> #6:List Unifier 1802 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> #1:List Z --> 1 Y --> f(#2:Elt, #8:List) S --> #7:List Unifier 1803 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #3:List W --> f(#2:Elt, #4:List, #5:List) X --> #1:List Z --> 1 Y --> f(#2:Elt, #8:List) S --> #7:List Unifier 1804 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#9:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #3:List W --> f(#2:Elt, j(#4:List, #5:List), #6:List) X --> #1:List Z --> 1 Y --> f(#2:Elt, #9:List) S --> #8:List Unifier 1805 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#7:List, #6:List) U --> #5:List V --> f(#4:List, #2:Elt, 1, #7:List) W --> #6:List X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1806 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#8:List, #7:List) U --> #6:List V --> f(#4:List, #2:Elt, #5:List, #8:List) W --> #7:List X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1807 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#8:List, #7:List) U --> #6:List V --> f(#4:List, #2:Elt, #5:List, #8:List) W --> #7:List X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1808 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#9:List, #8:List) U --> #7:List V --> f(#4:List, #2:Elt, j(#5:List, #6:List), #9:List) W --> #8:List X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1809 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#7:List, #6:List) U --> #5:List V --> f(#4:List, #2:Elt, 1, #7:List) W --> #6:List X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1810 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#8:List, #7:List) U --> #6:List V --> f(#4:List, #2:Elt, #5:List, #8:List) W --> #7:List X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1811 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#8:List, #7:List) U --> #6:List V --> f(#4:List, #2:Elt, #5:List, #8:List) W --> #7:List X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1812 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#9:List, #8:List) U --> #7:List V --> f(#4:List, #2:Elt, j(#5:List, #6:List), #9:List) W --> #8:List X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1813 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#7:List, #8:List) G --> 1 I --> #5:List U --> #6:List V --> f(#4:List, #2:Elt, #7:List) W --> f(#8:List, #5:List) X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1814 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#7:List, #8:List) G --> 1 I --> #5:List U --> #6:List V --> f(#4:List, #2:Elt, #7:List) W --> f(#8:List, #5:List) X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1815 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#7:List, #8:List) I --> #5:List U --> #6:List V --> f(#4:List, #2:Elt, #7:List) W --> f(#8:List, #5:List) X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1816 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#7:List, #8:List) I --> #5:List U --> #6:List V --> f(#4:List, #2:Elt, #7:List) W --> f(#8:List, #5:List) X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1817 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> #6:List V --> f(#4:List, #2:Elt, 1) W --> #5:List X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1818 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> #7:List V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1819 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> #7:List V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1820 A --> #8:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> #8:List V --> f(#4:List, #2:Elt, j(#5:List, #6:List)) W --> #7:List X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1821 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> #6:List V --> f(#4:List, #2:Elt, 1) W --> #5:List X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1822 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> #7:List V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1823 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> #7:List V --> f(#4:List, #2:Elt, #5:List) W --> #6:List X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1824 A --> #8:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> #8:List V --> f(#4:List, #2:Elt, j(#5:List, #6:List)) W --> #7:List X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1825 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> #6:List V --> f(#4:List, #2:Elt) W --> f(1, #5:List) X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1826 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> #7:List V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1827 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> #7:List V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1828 A --> #8:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> #8:List V --> f(#4:List, #2:Elt) W --> f(j(#5:List, #6:List), #7:List) X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1829 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> #6:List V --> f(#4:List, #2:Elt) W --> f(1, #5:List) X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1830 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> #7:List V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1831 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> #7:List V --> f(#4:List, #2:Elt) W --> f(#5:List, #6:List) X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1832 A --> #8:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> #8:List V --> f(#4:List, #2:Elt) W --> f(j(#5:List, #6:List), #7:List) X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1833 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#7:List, #2:Elt, 1, #4:List) X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1834 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #7:List W --> f(#8:List, #2:Elt, #4:List, #5:List) X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1835 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#8:List, #2:Elt, #4:List, #5:List) X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1836 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #8:List W --> f(#9:List, #2:Elt, j(#4:List, #5:List), #6:List) X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1837 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#7:List, #2:Elt, 1, #4:List) X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1838 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #7:List W --> f(#8:List, #2:Elt, #4:List, #5:List) X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1839 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#8:List, #2:Elt, #4:List, #5:List) X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1840 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #8:List W --> f(#9:List, #2:Elt, j(#4:List, #5:List), #6:List) X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1841 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> #6:List V --> #4:List W --> f(#2:Elt, 1, #5:List) X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1842 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> #7:List V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1843 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> #7:List V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1844 A --> #8:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> #8:List V --> #4:List W --> f(#2:Elt, j(#5:List, #6:List), #7:List) X --> #1:List Z --> #2:Elt Y --> 1 S --> #3:List Unifier 1845 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> #6:List V --> #4:List W --> f(#2:Elt, 1, #5:List) X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1846 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> #7:List V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1847 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> #7:List V --> #4:List W --> f(#2:Elt, #5:List, #6:List) X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1848 A --> #8:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> #8:List V --> #4:List W --> f(#2:Elt, j(#5:List, #6:List), #7:List) X --> #1:List Z --> 1 Y --> #2:Elt S --> #3:List Unifier 1849 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#8:List, 1, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, 1, #8:List) Z --> 1 Y --> 1 S --> #7:List Unifier 1850 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#9:List, #7:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, 1, #9:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 1851 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#9:List, #7:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, 1, #9:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 1852 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#10:List, j(#7:List, #8:List), #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, 1, #10:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 1853 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#9:List, 1, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List, #9:List) Z --> 1 Y --> 1 S --> #8:List Unifier 1854 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#10:List, #8:List, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List, #10:List) Z --> #8:List Y --> 1 S --> #9:List Unifier 1855 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#10:List, #8:List, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List, #10:List) Z --> 1 Y --> #8:List S --> #9:List Unifier 1856 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#11:List, j(#8:List, #9:List), #10:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List, #11:List) Z --> #8:List Y --> #9:List S --> #10:List Unifier 1857 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#9:List, 1, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List, #9:List) Z --> 1 Y --> 1 S --> #8:List Unifier 1858 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#10:List, #8:List, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List, #10:List) Z --> #8:List Y --> 1 S --> #9:List Unifier 1859 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#10:List, #8:List, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List, #10:List) Z --> 1 Y --> #8:List S --> #9:List Unifier 1860 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#11:List, j(#8:List, #9:List), #10:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List, #11:List) Z --> #8:List Y --> #9:List S --> #10:List Unifier 1861 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#10:List, 1, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List), #10:List) Z --> 1 Y --> 1 S --> #9:List Unifier 1862 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#11:List, #9:List, #10:List) U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List), #11:List) Z --> #9:List Y --> 1 S --> #10:List Unifier 1863 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#11:List, #9:List, #10:List) U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List), #11:List) Z --> 1 Y --> #9:List S --> #10:List Unifier 1864 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#12:List, j(#9:List, #10:List), #11:List) U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List), #12:List) Z --> #9:List Y --> #10:List S --> #11:List Unifier 1865 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, #9:List) G --> 1 I --> f(#10:List, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, #8:List) Z --> f(#9:List, #10:List) Y --> 1 S --> #7:List Unifier 1866 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, #9:List) G --> 1 I --> f(#10:List, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, #8:List) Z --> 1 Y --> f(#9:List, #10:List) S --> #7:List Unifier 1867 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, #9:List) I --> f(#10:List, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, #8:List) Z --> f(#9:List, #10:List) Y --> 1 S --> #7:List Unifier 1868 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, #9:List) I --> f(#10:List, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, #8:List) Z --> 1 Y --> f(#9:List, #10:List) S --> #7:List Unifier 1869 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, 1, #9:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #8:List) Z --> 1 Y --> 1 S --> f(#9:List, #5:List) Unifier 1870 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#9:List, #8:List, #10:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #9:List) Z --> #8:List Y --> 1 S --> f(#10:List, #5:List) Unifier 1871 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#9:List, #8:List, #10:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #9:List) Z --> 1 Y --> #8:List S --> f(#10:List, #5:List) Unifier 1872 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#10:List, j(#8:List, #9:List), #11:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #10:List) Z --> #8:List Y --> #9:List S --> f(#11:List, #5:List) Unifier 1873 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, 1, #9:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #8:List) Z --> 1 Y --> 1 S --> f(#9:List, #5:List) Unifier 1874 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#9:List, #8:List, #10:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #9:List) Z --> #8:List Y --> 1 S --> f(#10:List, #5:List) Unifier 1875 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#9:List, #8:List, #10:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #9:List) Z --> 1 Y --> #8:List S --> f(#10:List, #5:List) Unifier 1876 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#10:List, j(#8:List, #9:List), #11:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #10:List) Z --> #8:List Y --> #9:List S --> f(#11:List, #5:List) Unifier 1877 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, 1) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #8:List) Z --> 1 Y --> 1 S --> #5:List Unifier 1878 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#9:List, #8:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #9:List) Z --> #8:List Y --> 1 S --> #5:List Unifier 1879 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#9:List, #8:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #9:List) Z --> 1 Y --> #8:List S --> #5:List Unifier 1880 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#10:List, j(#8:List, #9:List)) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #10:List) Z --> #8:List Y --> #9:List S --> #5:List Unifier 1881 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, 1) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #8:List) Z --> 1 Y --> 1 S --> #5:List Unifier 1882 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#9:List, #8:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #9:List) Z --> #8:List Y --> 1 S --> #5:List Unifier 1883 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#9:List, #8:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #9:List) Z --> 1 Y --> #8:List S --> #5:List Unifier 1884 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#10:List, j(#8:List, #9:List)) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #10:List) Z --> #8:List Y --> #9:List S --> #5:List Unifier 1885 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(1, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, 1) Z --> 1 Y --> 1 S --> #7:List Unifier 1886 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#7:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, 1) Z --> #7:List Y --> 1 S --> #8:List Unifier 1887 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#7:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, 1) Z --> 1 Y --> #7:List S --> #8:List Unifier 1888 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(j(#7:List, #8:List), #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, 1) Z --> #7:List Y --> #8:List S --> #9:List Unifier 1889 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(1, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List) Z --> 1 Y --> 1 S --> #8:List Unifier 1890 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#8:List, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List) Z --> #8:List Y --> 1 S --> #9:List Unifier 1891 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#8:List, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List) Z --> 1 Y --> #8:List S --> #9:List Unifier 1892 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(j(#8:List, #9:List), #10:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List) Z --> #8:List Y --> #9:List S --> #10:List Unifier 1893 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(1, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List) Z --> 1 Y --> 1 S --> #8:List Unifier 1894 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#8:List, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List) Z --> #8:List Y --> 1 S --> #9:List Unifier 1895 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#8:List, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List) Z --> 1 Y --> #8:List S --> #9:List Unifier 1896 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(j(#8:List, #9:List), #10:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List) Z --> #8:List Y --> #9:List S --> #10:List Unifier 1897 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(1, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List)) Z --> 1 Y --> 1 S --> #9:List Unifier 1898 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#9:List, #10:List) U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List)) Z --> #9:List Y --> 1 S --> #10:List Unifier 1899 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#9:List, #10:List) U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List)) Z --> 1 Y --> #9:List S --> #10:List Unifier 1900 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(j(#9:List, #10:List), #11:List) U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List)) Z --> #9:List Y --> #10:List S --> #11:List Unifier 1901 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#8:List, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt) Z --> f(1, #8:List) Y --> 1 S --> #7:List Unifier 1902 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#9:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> f(#5:List, #9:List) Y --> 1 S --> #8:List Unifier 1903 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#9:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> f(#5:List, #9:List) Y --> 1 S --> #8:List Unifier 1904 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#10:List, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt) Z --> f(j(#5:List, #6:List), #10:List) Y --> 1 S --> #9:List Unifier 1905 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#8:List, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> f(1, #8:List) S --> #7:List Unifier 1906 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#9:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> f(#5:List, #9:List) S --> #8:List Unifier 1907 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#9:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> f(#5:List, #9:List) S --> #8:List Unifier 1908 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#10:List, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> f(j(#5:List, #6:List), #10:List) S --> #9:List Unifier 1909 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(1, #8:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> 1 S --> f(#8:List, #5:List) Unifier 1910 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, #9:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> 1 S --> f(#9:List, #5:List) Unifier 1911 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, #9:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> #8:List S --> f(#9:List, #5:List) Unifier 1912 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(j(#8:List, #9:List), #10:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> #9:List S --> f(#10:List, #5:List) Unifier 1913 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(1, #8:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> 1 S --> f(#8:List, #5:List) Unifier 1914 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, #9:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> 1 S --> f(#9:List, #5:List) Unifier 1915 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, #9:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> #8:List S --> f(#9:List, #5:List) Unifier 1916 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(j(#8:List, #9:List), #10:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> #9:List S --> f(#10:List, #5:List) Unifier 1917 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> 1 S --> #5:List Unifier 1918 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #8:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> 1 S --> #5:List Unifier 1919 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #8:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> 1 S --> #5:List Unifier 1920 A --> f(#8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> #8:List W --> #9:List X --> f(#4:List, #2:Elt) Z --> j(#5:List, #6:List) Y --> 1 S --> #7:List Unifier 1921 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #8:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> #8:List S --> #5:List Unifier 1922 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> j(#8:List, #9:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> #9:List S --> #5:List Unifier 1923 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #9:List G --> #8:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> #9:List S --> #5:List Unifier 1924 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> j(#9:List, #10:List) G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt) Z --> j(#5:List, #10:List) Y --> #9:List S --> #6:List Unifier 1925 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #8:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> #8:List S --> #5:List Unifier 1926 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #8:List G --> #9:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> #9:List S --> #5:List Unifier 1927 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> j(#8:List, #9:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> #9:List S --> #5:List Unifier 1928 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> j(#9:List, #10:List) I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt) Z --> j(#5:List, #10:List) Y --> #9:List S --> #6:List Unifier 1929 A --> f(#8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> #8:List W --> #9:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> j(#5:List, #6:List) S --> #7:List Unifier 1930 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> j(#9:List, #10:List) G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt) Z --> #9:List Y --> j(#5:List, #10:List) S --> #6:List Unifier 1931 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> j(#9:List, #10:List) I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt) Z --> #9:List Y --> j(#5:List, #10:List) S --> #6:List Unifier 1932 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> j(#8:List, #10:List) G --> j(#9:List, #11:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> j(#8:List, #9:List) Y --> j(#10:List, #11:List) S --> #5:List Unifier 1933 A --> f(#4:List, #5:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #8:List) H --> 1 G --> 1 I --> f(#9:List, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> #5:List X --> #6:List Z --> f(#8:List, #2:Elt, 1, #9:List) Y --> 1 S --> #7:List Unifier 1934 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #9:List) H --> #4:List G --> 1 I --> f(#10:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> f(#9:List, #2:Elt, #4:List, #10:List) Y --> 1 S --> #8:List Unifier 1935 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #9:List) H --> 1 G --> #4:List I --> f(#10:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> f(#9:List, #2:Elt, #4:List, #10:List) Y --> 1 S --> #8:List Unifier 1936 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #10:List) H --> #4:List G --> #5:List I --> f(#11:List, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> f(#10:List, #2:Elt, j(#4:List, #5:List), #11:List) Y --> 1 S --> #9:List Unifier 1937 A --> f(#4:List, #5:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #8:List) H --> 1 G --> 1 I --> f(#9:List, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> #5:List X --> #6:List Z --> 1 Y --> f(#8:List, #2:Elt, 1, #9:List) S --> #7:List Unifier 1938 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #9:List) H --> #4:List G --> 1 I --> f(#10:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> f(#9:List, #2:Elt, #4:List, #10:List) S --> #8:List Unifier 1939 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #9:List) H --> 1 G --> #4:List I --> f(#10:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> f(#9:List, #2:Elt, #4:List, #10:List) S --> #8:List Unifier 1940 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #10:List) H --> #4:List G --> #5:List I --> f(#11:List, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> f(#10:List, #2:Elt, j(#4:List, #5:List), #11:List) S --> #9:List Unifier 1941 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> f(#9:List, #10:List) G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> f(#8:List, #2:Elt, #9:List) Y --> 1 S --> f(#10:List, #4:List) Unifier 1942 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> f(#9:List, #10:List) G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> f(#8:List, #2:Elt, #9:List) S --> f(#10:List, #4:List) Unifier 1943 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> f(#9:List, #10:List) I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> f(#8:List, #2:Elt, #9:List) Y --> 1 S --> f(#10:List, #4:List) Unifier 1944 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> f(#9:List, #10:List) I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> f(#8:List, #2:Elt, #9:List) S --> f(#10:List, #4:List) Unifier 1945 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> f(#8:List, #2:Elt, 1) Y --> 1 S --> #4:List Unifier 1946 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> f(#9:List, #2:Elt, #4:List) Y --> 1 S --> #5:List Unifier 1947 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> f(#9:List, #2:Elt, #4:List) Y --> 1 S --> #5:List Unifier 1948 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, #10:List) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #9:List Z --> f(#10:List, #2:Elt, j(#4:List, #5:List)) Y --> 1 S --> #6:List Unifier 1949 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> f(#8:List, #2:Elt, 1) S --> #4:List Unifier 1950 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> f(#9:List, #2:Elt, #4:List) S --> #5:List Unifier 1951 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> f(#9:List, #2:Elt, #4:List) S --> #5:List Unifier 1952 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, #10:List) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> f(#10:List, #2:Elt, j(#4:List, #5:List)) S --> #6:List Unifier 1953 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> f(#8:List, #2:Elt) Y --> 1 S --> f(1, #4:List) Unifier 1954 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> f(#9:List, #2:Elt) Y --> 1 S --> f(#4:List, #5:List) Unifier 1955 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> f(#9:List, #2:Elt) Y --> 1 S --> f(#4:List, #5:List) Unifier 1956 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, #10:List) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #9:List Z --> f(#10:List, #2:Elt) Y --> 1 S --> f(j(#4:List, #5:List), #6:List) Unifier 1957 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> f(#8:List, #2:Elt) S --> f(1, #4:List) Unifier 1958 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> f(#9:List, #2:Elt) S --> f(#4:List, #5:List) Unifier 1959 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> f(#9:List, #2:Elt) S --> f(#4:List, #5:List) Unifier 1960 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, #10:List) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> f(#10:List, #2:Elt) S --> f(j(#4:List, #5:List), #6:List) Unifier 1961 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, 1, #8:List) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> f(#8:List, #2:Elt, 1, #4:List) Unifier 1962 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List, #9:List) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#9:List, #2:Elt, 1, #4:List) Unifier 1963 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List, #9:List) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#9:List, #2:Elt, 1, #4:List) Unifier 1964 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, j(#8:List, #9:List), #10:List) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#10:List, #2:Elt, 1, #4:List) Unifier 1965 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, 1, #9:List) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> f(#9:List, #2:Elt, #4:List, #5:List) Unifier 1966 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List, #10:List) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#10:List, #2:Elt, #4:List, #5:List) Unifier 1967 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List, #10:List) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#10:List, #2:Elt, #4:List, #5:List) Unifier 1968 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, j(#9:List, #10:List), #11:List) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#11:List, #2:Elt, #4:List, #5:List) Unifier 1969 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, 1, #9:List) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> f(#9:List, #2:Elt, #4:List, #5:List) Unifier 1970 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List, #10:List) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#10:List, #2:Elt, #4:List, #5:List) Unifier 1971 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List, #10:List) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#10:List, #2:Elt, #4:List, #5:List) Unifier 1972 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, j(#9:List, #10:List), #11:List) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#11:List, #2:Elt, #4:List, #5:List) Unifier 1973 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, 1, #10:List) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> 1 S --> f(#10:List, #2:Elt, j(#4:List, #5:List), #6:List) Unifier 1974 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, #10:List, #11:List) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> 1 S --> f(#11:List, #2:Elt, j(#4:List, #5:List), #6:List) Unifier 1975 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, #10:List, #11:List) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> #10:List S --> f(#11:List, #2:Elt, j(#4:List, #5:List), #6:List) Unifier 1976 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, j(#10:List, #11:List), #12:List) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> #11:List S --> f(#12:List, #2:Elt, j(#4:List, #5:List), #6:List) Unifier 1977 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, 1) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> f(#2:Elt, 1, #4:List) Unifier 1978 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#2:Elt, 1, #4:List) Unifier 1979 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#2:Elt, 1, #4:List) Unifier 1980 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, j(#8:List, #9:List)) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#2:Elt, 1, #4:List) Unifier 1981 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, 1) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> f(#2:Elt, #4:List, #5:List) Unifier 1982 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#2:Elt, #4:List, #5:List) Unifier 1983 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#2:Elt, #4:List, #5:List) Unifier 1984 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, j(#9:List, #10:List)) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#2:Elt, #4:List, #5:List) Unifier 1985 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, 1) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> f(#2:Elt, #4:List, #5:List) Unifier 1986 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#2:Elt, #4:List, #5:List) Unifier 1987 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#2:Elt, #4:List, #5:List) Unifier 1988 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, j(#9:List, #10:List)) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#2:Elt, #4:List, #5:List) Unifier 1989 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, 1) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> 1 S --> f(#2:Elt, j(#4:List, #5:List), #6:List) Unifier 1990 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, #10:List) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> 1 S --> f(#2:Elt, j(#4:List, #5:List), #6:List) Unifier 1991 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, #10:List) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> #10:List S --> f(#2:Elt, j(#4:List, #5:List), #6:List) Unifier 1992 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, j(#10:List, #11:List)) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> #11:List S --> f(#2:Elt, j(#4:List, #5:List), #6:List) Unifier 1993 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#8:List, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #4:List Z --> f(#2:Elt, 1, #8:List) Y --> 1 S --> #7:List Unifier 1994 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#9:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #4:List Z --> f(#2:Elt, #5:List, #9:List) Y --> 1 S --> #8:List Unifier 1995 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#9:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #4:List Z --> f(#2:Elt, #5:List, #9:List) Y --> 1 S --> #8:List Unifier 1996 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#10:List, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #4:List Z --> f(#2:Elt, j(#5:List, #6:List), #10:List) Y --> 1 S --> #9:List Unifier 1997 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#8:List, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #4:List Z --> 1 Y --> f(#2:Elt, 1, #8:List) S --> #7:List Unifier 1998 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#9:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #5:List, #9:List) S --> #8:List Unifier 1999 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#9:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #5:List, #9:List) S --> #8:List Unifier 2000 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#10:List, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #4:List Z --> 1 Y --> f(#2:Elt, j(#5:List, #6:List), #10:List) S --> #9:List Unifier 2001 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, #9:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #4:List Z --> f(#2:Elt, #8:List) Y --> 1 S --> f(#9:List, #5:List) Unifier 2002 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, #9:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #8:List) S --> f(#9:List, #5:List) Unifier 2003 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, #9:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #4:List Z --> f(#2:Elt, #8:List) Y --> 1 S --> f(#9:List, #5:List) Unifier 2004 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, #9:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #8:List) S --> f(#9:List, #5:List) Unifier 2005 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #4:List Z --> f(#2:Elt, 1) Y --> 1 S --> #5:List Unifier 2006 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #4:List Z --> f(#2:Elt, #5:List) Y --> 1 S --> #6:List Unifier 2007 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #4:List Z --> f(#2:Elt, #5:List) Y --> 1 S --> #6:List Unifier 2008 A --> f(#8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> #8:List W --> #9:List X --> #4:List Z --> f(#2:Elt, j(#5:List, #6:List)) Y --> 1 S --> #7:List Unifier 2009 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #4:List Z --> 1 Y --> f(#2:Elt, 1) S --> #5:List Unifier 2010 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #5:List) S --> #6:List Unifier 2011 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #5:List) S --> #6:List Unifier 2012 A --> f(#8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> #8:List W --> #9:List X --> #4:List Z --> 1 Y --> f(#2:Elt, j(#5:List, #6:List)) S --> #7:List Unifier 2013 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #4:List Z --> #2:Elt Y --> 1 S --> f(1, #5:List) Unifier 2014 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #4:List Z --> #2:Elt Y --> 1 S --> f(#5:List, #6:List) Unifier 2015 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #4:List Z --> #2:Elt Y --> 1 S --> f(#5:List, #6:List) Unifier 2016 A --> f(#8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> #8:List W --> #9:List X --> #4:List Z --> #2:Elt Y --> 1 S --> f(j(#5:List, #6:List), #7:List) Unifier 2017 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #4:List Z --> 1 Y --> #2:Elt S --> f(1, #5:List) Unifier 2018 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #4:List Z --> 1 Y --> #2:Elt S --> f(#5:List, #6:List) Unifier 2019 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #4:List Z --> 1 Y --> #2:Elt S --> f(#5:List, #6:List) Unifier 2020 A --> f(#8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> #8:List W --> #9:List X --> #4:List Z --> 1 Y --> #2:Elt S --> f(j(#5:List, #6:List), #7:List) Unifier 2021 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#8:List, 1, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, 1, #8:List) Z --> 1 Y --> 1 S --> #7:List Unifier 2022 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#9:List, #7:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, 1, #9:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 2023 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#9:List, #7:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, 1, #9:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 2024 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#10:List, j(#7:List, #8:List), #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, 1, #10:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 2025 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#9:List, 1, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List, #9:List) Z --> 1 Y --> 1 S --> #8:List Unifier 2026 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#10:List, #8:List, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List, #10:List) Z --> #8:List Y --> 1 S --> #9:List Unifier 2027 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#10:List, #8:List, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List, #10:List) Z --> 1 Y --> #8:List S --> #9:List Unifier 2028 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#11:List, j(#8:List, #9:List), #10:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List, #11:List) Z --> #8:List Y --> #9:List S --> #10:List Unifier 2029 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#9:List, 1, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List, #9:List) Z --> 1 Y --> 1 S --> #8:List Unifier 2030 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#10:List, #8:List, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List, #10:List) Z --> #8:List Y --> 1 S --> #9:List Unifier 2031 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#10:List, #8:List, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List, #10:List) Z --> 1 Y --> #8:List S --> #9:List Unifier 2032 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#11:List, j(#8:List, #9:List), #10:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List, #11:List) Z --> #8:List Y --> #9:List S --> #10:List Unifier 2033 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#10:List, 1, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List), #10:List) Z --> 1 Y --> 1 S --> #9:List Unifier 2034 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#11:List, #9:List, #10:List) U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List), #11:List) Z --> #9:List Y --> 1 S --> #10:List Unifier 2035 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#11:List, #9:List, #10:List) U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List), #11:List) Z --> 1 Y --> #9:List S --> #10:List Unifier 2036 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#12:List, j(#9:List, #10:List), #11:List) U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List), #12:List) Z --> #9:List Y --> #10:List S --> #11:List Unifier 2037 A --> j(#8:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#9:List, 1, #7:List) U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, 1, #9:List) Z --> 1 Y --> 1 S --> #7:List Unifier 2038 A --> j(#9:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#10:List, #7:List, #8:List) U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, 1, #10:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 2039 A --> j(#9:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#10:List, #7:List, #8:List) U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, 1, #10:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 2040 A --> j(#10:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#11:List, j(#7:List, #8:List), #9:List) U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, 1, #11:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 2041 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#10:List, 1, #8:List) U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List, #10:List) Z --> 1 Y --> 1 S --> #8:List Unifier 2042 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#11:List, #8:List, #9:List) U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List, #11:List) Z --> #8:List Y --> 1 S --> #9:List Unifier 2043 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#11:List, #8:List, #9:List) U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List, #11:List) Z --> 1 Y --> #8:List S --> #9:List Unifier 2044 A --> j(#11:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#12:List, j(#8:List, #9:List), #10:List) U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List, #12:List) Z --> #8:List Y --> #9:List S --> #10:List Unifier 2045 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#10:List, 1, #8:List) U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List, #10:List) Z --> 1 Y --> 1 S --> #8:List Unifier 2046 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#11:List, #8:List, #9:List) U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List, #11:List) Z --> #8:List Y --> 1 S --> #9:List Unifier 2047 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#11:List, #8:List, #9:List) U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List, #11:List) Z --> 1 Y --> #8:List S --> #9:List Unifier 2048 A --> j(#11:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#12:List, j(#8:List, #9:List), #10:List) U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List, #12:List) Z --> #8:List Y --> #9:List S --> #10:List Unifier 2049 A --> j(#10:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#11:List, 1, #9:List) U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List), #11:List) Z --> 1 Y --> 1 S --> #9:List Unifier 2050 A --> j(#11:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#12:List, #9:List, #10:List) U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List), #12:List) Z --> #9:List Y --> 1 S --> #10:List Unifier 2051 A --> j(#11:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#12:List, #9:List, #10:List) U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List), #12:List) Z --> 1 Y --> #9:List S --> #10:List Unifier 2052 A --> j(#12:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#13:List, j(#9:List, #10:List), #11:List) U --> j(#12:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List), #13:List) Z --> #9:List Y --> #10:List S --> #11:List Unifier 2053 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, #9:List) G --> 1 I --> f(#10:List, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, #8:List) Z --> f(#9:List, #10:List) Y --> 1 S --> #7:List Unifier 2054 A --> j(#8:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#9:List, #10:List) G --> 1 I --> f(#11:List, #7:List) U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, #9:List) Z --> f(#10:List, #11:List) Y --> 1 S --> #7:List Unifier 2055 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, #9:List) G --> 1 I --> f(#10:List, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, #8:List) Z --> 1 Y --> f(#9:List, #10:List) S --> #7:List Unifier 2056 A --> j(#8:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#9:List, #10:List) G --> 1 I --> f(#11:List, #7:List) U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, #9:List) Z --> 1 Y --> f(#10:List, #11:List) S --> #7:List Unifier 2057 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, #9:List) I --> f(#10:List, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, #8:List) Z --> f(#9:List, #10:List) Y --> 1 S --> #7:List Unifier 2058 A --> j(#8:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#9:List, #10:List) I --> f(#11:List, #7:List) U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, #9:List) Z --> f(#10:List, #11:List) Y --> 1 S --> #7:List Unifier 2059 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, #9:List) I --> f(#10:List, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, #8:List) Z --> 1 Y --> f(#9:List, #10:List) S --> #7:List Unifier 2060 A --> j(#8:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#9:List, #10:List) I --> f(#11:List, #7:List) U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, #9:List) Z --> 1 Y --> f(#10:List, #11:List) S --> #7:List Unifier 2061 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, 1, #9:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #8:List) Z --> 1 Y --> 1 S --> f(#9:List, #5:List) Unifier 2062 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#9:List, #8:List, #10:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #9:List) Z --> #8:List Y --> 1 S --> f(#10:List, #5:List) Unifier 2063 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#9:List, #8:List, #10:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #9:List) Z --> 1 Y --> #8:List S --> f(#10:List, #5:List) Unifier 2064 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#10:List, j(#8:List, #9:List), #11:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #10:List) Z --> #8:List Y --> #9:List S --> f(#11:List, #5:List) Unifier 2065 A --> j(#8:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#9:List, 1, #10:List) G --> 1 I --> #5:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #9:List) Z --> 1 Y --> 1 S --> f(#10:List, #5:List) Unifier 2066 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#10:List, #8:List, #11:List) G --> 1 I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #10:List) Z --> #8:List Y --> 1 S --> f(#11:List, #5:List) Unifier 2067 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#10:List, #8:List, #11:List) G --> 1 I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #10:List) Z --> 1 Y --> #8:List S --> f(#11:List, #5:List) Unifier 2068 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#11:List, j(#8:List, #9:List), #12:List) G --> 1 I --> #5:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #11:List) Z --> #8:List Y --> #9:List S --> f(#12:List, #5:List) Unifier 2069 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, 1, #9:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #8:List) Z --> 1 Y --> 1 S --> f(#9:List, #5:List) Unifier 2070 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#9:List, #8:List, #10:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #9:List) Z --> #8:List Y --> 1 S --> f(#10:List, #5:List) Unifier 2071 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#9:List, #8:List, #10:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #9:List) Z --> 1 Y --> #8:List S --> f(#10:List, #5:List) Unifier 2072 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#10:List, j(#8:List, #9:List), #11:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #10:List) Z --> #8:List Y --> #9:List S --> f(#11:List, #5:List) Unifier 2073 A --> j(#8:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#9:List, 1, #10:List) I --> #5:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #9:List) Z --> 1 Y --> 1 S --> f(#10:List, #5:List) Unifier 2074 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#10:List, #8:List, #11:List) I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #10:List) Z --> #8:List Y --> 1 S --> f(#11:List, #5:List) Unifier 2075 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#10:List, #8:List, #11:List) I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #10:List) Z --> 1 Y --> #8:List S --> f(#11:List, #5:List) Unifier 2076 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#11:List, j(#8:List, #9:List), #12:List) I --> #5:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #11:List) Z --> #8:List Y --> #9:List S --> f(#12:List, #5:List) Unifier 2077 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, 1) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #8:List) Z --> 1 Y --> 1 S --> #5:List Unifier 2078 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#9:List, #8:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #9:List) Z --> #8:List Y --> 1 S --> #5:List Unifier 2079 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#9:List, #8:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #9:List) Z --> 1 Y --> #8:List S --> #5:List Unifier 2080 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#10:List, j(#8:List, #9:List)) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #10:List) Z --> #8:List Y --> #9:List S --> #5:List Unifier 2081 A --> j(#8:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#9:List, 1) G --> 1 I --> #5:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #9:List) Z --> 1 Y --> 1 S --> #5:List Unifier 2082 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#10:List, #8:List) G --> 1 I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #10:List) Z --> #8:List Y --> 1 S --> #5:List Unifier 2083 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#10:List, #8:List) G --> 1 I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #10:List) Z --> 1 Y --> #8:List S --> #5:List Unifier 2084 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#11:List, j(#8:List, #9:List)) G --> 1 I --> #5:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #11:List) Z --> #8:List Y --> #9:List S --> #5:List Unifier 2085 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, 1) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #8:List) Z --> 1 Y --> 1 S --> #5:List Unifier 2086 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#9:List, #8:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #9:List) Z --> #8:List Y --> 1 S --> #5:List Unifier 2087 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#9:List, #8:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #9:List) Z --> 1 Y --> #8:List S --> #5:List Unifier 2088 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#10:List, j(#8:List, #9:List)) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #10:List) Z --> #8:List Y --> #9:List S --> #5:List Unifier 2089 A --> j(#8:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#9:List, 1) I --> #5:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #9:List) Z --> 1 Y --> 1 S --> #5:List Unifier 2090 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#10:List, #8:List) I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #10:List) Z --> #8:List Y --> 1 S --> #5:List Unifier 2091 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#10:List, #8:List) I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #10:List) Z --> 1 Y --> #8:List S --> #5:List Unifier 2092 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#11:List, j(#8:List, #9:List)) I --> #5:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #11:List) Z --> #8:List Y --> #9:List S --> #5:List Unifier 2093 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(1, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, 1) Z --> 1 Y --> 1 S --> #7:List Unifier 2094 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#7:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, 1) Z --> #7:List Y --> 1 S --> #8:List Unifier 2095 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#7:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, 1) Z --> 1 Y --> #7:List S --> #8:List Unifier 2096 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(j(#7:List, #8:List), #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, 1) Z --> #7:List Y --> #8:List S --> #9:List Unifier 2097 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(1, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List) Z --> 1 Y --> 1 S --> #8:List Unifier 2098 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#8:List, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List) Z --> #8:List Y --> 1 S --> #9:List Unifier 2099 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#8:List, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List) Z --> 1 Y --> #8:List S --> #9:List Unifier 2100 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(j(#8:List, #9:List), #10:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List) Z --> #8:List Y --> #9:List S --> #10:List Unifier 2101 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(1, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List) Z --> 1 Y --> 1 S --> #8:List Unifier 2102 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#8:List, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List) Z --> #8:List Y --> 1 S --> #9:List Unifier 2103 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#8:List, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List) Z --> 1 Y --> #8:List S --> #9:List Unifier 2104 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(j(#8:List, #9:List), #10:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List) Z --> #8:List Y --> #9:List S --> #10:List Unifier 2105 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(1, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List)) Z --> 1 Y --> 1 S --> #9:List Unifier 2106 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#9:List, #10:List) U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List)) Z --> #9:List Y --> 1 S --> #10:List Unifier 2107 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#9:List, #10:List) U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List)) Z --> 1 Y --> #9:List S --> #10:List Unifier 2108 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(j(#9:List, #10:List), #11:List) U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List)) Z --> #9:List Y --> #10:List S --> #11:List Unifier 2109 A --> j(#8:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(1, #7:List) U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, 1) Z --> 1 Y --> 1 S --> #7:List Unifier 2110 A --> j(#9:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#7:List, #8:List) U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, 1) Z --> #7:List Y --> 1 S --> #8:List Unifier 2111 A --> j(#9:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#7:List, #8:List) U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, 1) Z --> 1 Y --> #7:List S --> #8:List Unifier 2112 A --> j(#10:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(j(#7:List, #8:List), #9:List) U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt, 1) Z --> #7:List Y --> #8:List S --> #9:List Unifier 2113 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(1, #8:List) U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List) Z --> 1 Y --> 1 S --> #8:List Unifier 2114 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#8:List, #9:List) U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List) Z --> #8:List Y --> 1 S --> #9:List Unifier 2115 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#8:List, #9:List) U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List) Z --> 1 Y --> #8:List S --> #9:List Unifier 2116 A --> j(#11:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(j(#8:List, #9:List), #10:List) U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List) Z --> #8:List Y --> #9:List S --> #10:List Unifier 2117 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(1, #8:List) U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List) Z --> 1 Y --> 1 S --> #8:List Unifier 2118 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#8:List, #9:List) U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List) Z --> #8:List Y --> 1 S --> #9:List Unifier 2119 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#8:List, #9:List) U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List) Z --> 1 Y --> #8:List S --> #9:List Unifier 2120 A --> j(#11:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(j(#8:List, #9:List), #10:List) U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt, #5:List) Z --> #8:List Y --> #9:List S --> #10:List Unifier 2121 A --> j(#10:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(1, #9:List) U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List)) Z --> 1 Y --> 1 S --> #9:List Unifier 2122 A --> j(#11:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#9:List, #10:List) U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List)) Z --> #9:List Y --> 1 S --> #10:List Unifier 2123 A --> j(#11:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#9:List, #10:List) U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List)) Z --> 1 Y --> #9:List S --> #10:List Unifier 2124 A --> j(#12:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(j(#9:List, #10:List), #11:List) U --> j(#12:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List)) Z --> #9:List Y --> #10:List S --> #11:List Unifier 2125 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#8:List, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt) Z --> f(1, #8:List) Y --> 1 S --> #7:List Unifier 2126 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#9:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> f(#5:List, #9:List) Y --> 1 S --> #8:List Unifier 2127 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#9:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> f(#5:List, #9:List) Y --> 1 S --> #8:List Unifier 2128 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#10:List, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt) Z --> f(j(#5:List, #6:List), #10:List) Y --> 1 S --> #9:List Unifier 2129 A --> j(#8:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#9:List, #7:List) U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt) Z --> f(1, #9:List) Y --> 1 S --> #7:List Unifier 2130 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#10:List, #8:List) U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> f(#5:List, #10:List) Y --> 1 S --> #8:List Unifier 2131 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#10:List, #8:List) U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> f(#5:List, #10:List) Y --> 1 S --> #8:List Unifier 2132 A --> j(#10:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#11:List, #9:List) U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt) Z --> f(j(#5:List, #6:List), #11:List) Y --> 1 S --> #9:List Unifier 2133 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#8:List, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> f(1, #8:List) S --> #7:List Unifier 2134 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#9:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> f(#5:List, #9:List) S --> #8:List Unifier 2135 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#9:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> f(#5:List, #9:List) S --> #8:List Unifier 2136 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#10:List, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> f(j(#5:List, #6:List), #10:List) S --> #9:List Unifier 2137 A --> j(#8:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#9:List, #7:List) U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> f(1, #9:List) S --> #7:List Unifier 2138 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#10:List, #8:List) U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> f(#5:List, #10:List) S --> #8:List Unifier 2139 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#10:List, #8:List) U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> f(#5:List, #10:List) S --> #8:List Unifier 2140 A --> j(#10:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#11:List, #9:List) U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> f(j(#5:List, #6:List), #11:List) S --> #9:List Unifier 2141 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(1, #8:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> 1 S --> f(#8:List, #5:List) Unifier 2142 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, #9:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> 1 S --> f(#9:List, #5:List) Unifier 2143 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, #9:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> #8:List S --> f(#9:List, #5:List) Unifier 2144 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(j(#8:List, #9:List), #10:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> #9:List S --> f(#10:List, #5:List) Unifier 2145 A --> j(#8:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(1, #9:List) G --> 1 I --> #5:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> 1 S --> f(#9:List, #5:List) Unifier 2146 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, #10:List) G --> 1 I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> 1 S --> f(#10:List, #5:List) Unifier 2147 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, #10:List) G --> 1 I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> #8:List S --> f(#10:List, #5:List) Unifier 2148 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(j(#8:List, #9:List), #11:List) G --> 1 I --> #5:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> #9:List S --> f(#11:List, #5:List) Unifier 2149 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(1, #8:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> 1 S --> f(#8:List, #5:List) Unifier 2150 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, #9:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> 1 S --> f(#9:List, #5:List) Unifier 2151 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, #9:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> #8:List S --> f(#9:List, #5:List) Unifier 2152 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(j(#8:List, #9:List), #10:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> #9:List S --> f(#10:List, #5:List) Unifier 2153 A --> j(#8:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(1, #9:List) I --> #5:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> 1 S --> f(#9:List, #5:List) Unifier 2154 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, #10:List) I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> 1 S --> f(#10:List, #5:List) Unifier 2155 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, #10:List) I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> #8:List S --> f(#10:List, #5:List) Unifier 2156 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(j(#8:List, #9:List), #11:List) I --> #5:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> #9:List S --> f(#11:List, #5:List) Unifier 2157 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> 1 S --> #5:List Unifier 2158 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #8:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> 1 S --> #5:List Unifier 2159 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #8:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> 1 S --> #5:List Unifier 2160 A --> f(#8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> #8:List W --> #9:List X --> f(#4:List, #2:Elt) Z --> j(#5:List, #6:List) Y --> 1 S --> #7:List Unifier 2161 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #8:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> #8:List S --> #5:List Unifier 2162 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> j(#8:List, #9:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> #9:List S --> #5:List Unifier 2163 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #9:List G --> #8:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> #9:List S --> #5:List Unifier 2164 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> j(#9:List, #10:List) G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt) Z --> j(#5:List, #10:List) Y --> #9:List S --> #6:List Unifier 2165 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #8:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> #8:List S --> #5:List Unifier 2166 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #8:List G --> #9:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> #9:List S --> #5:List Unifier 2167 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> j(#8:List, #9:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> #9:List S --> #5:List Unifier 2168 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> j(#9:List, #10:List) I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt) Z --> j(#5:List, #10:List) Y --> #9:List S --> #6:List Unifier 2169 A --> f(#8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> #8:List W --> #9:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> j(#5:List, #6:List) S --> #7:List Unifier 2170 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> j(#9:List, #10:List) G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt) Z --> #9:List Y --> j(#5:List, #10:List) S --> #6:List Unifier 2171 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> j(#9:List, #10:List) I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt) Z --> #9:List Y --> j(#5:List, #10:List) S --> #6:List Unifier 2172 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> j(#8:List, #10:List) G --> j(#9:List, #11:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> j(#8:List, #9:List) Y --> j(#10:List, #11:List) S --> #5:List Unifier 2173 A --> j(#8:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> 1 S --> #5:List Unifier 2174 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #8:List G --> 1 I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> 1 S --> #5:List Unifier 2175 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #8:List I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> 1 S --> #5:List Unifier 2176 A --> j(#10:List, f(#8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #8:List W --> #9:List X --> f(#4:List, #2:Elt) Z --> j(#5:List, #6:List) Y --> 1 S --> #7:List Unifier 2177 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #8:List G --> 1 I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> #8:List S --> #5:List Unifier 2178 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> j(#8:List, #9:List) G --> 1 I --> #5:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> #9:List S --> #5:List Unifier 2179 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #9:List G --> #8:List I --> #5:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> #9:List S --> #5:List Unifier 2180 A --> j(#10:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> j(#9:List, #11:List) G --> #5:List I --> #6:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt) Z --> j(#5:List, #11:List) Y --> #9:List S --> #6:List Unifier 2181 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #8:List I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> #8:List S --> #5:List Unifier 2182 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #8:List G --> #9:List I --> #5:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> #9:List S --> #5:List Unifier 2183 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> j(#8:List, #9:List) I --> #5:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> #9:List S --> #5:List Unifier 2184 A --> j(#10:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> j(#9:List, #11:List) I --> #6:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt) Z --> j(#5:List, #11:List) Y --> #9:List S --> #6:List Unifier 2185 A --> j(#10:List, f(#8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #8:List W --> #9:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> j(#5:List, #6:List) S --> #7:List Unifier 2186 A --> j(#10:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> j(#9:List, #11:List) G --> #5:List I --> #6:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt) Z --> #9:List Y --> j(#5:List, #11:List) S --> #6:List Unifier 2187 A --> j(#10:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> j(#9:List, #11:List) I --> #6:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> f(#4:List, #2:Elt) Z --> #9:List Y --> j(#5:List, #11:List) S --> #6:List Unifier 2188 A --> j(#8:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> j(#9:List, #11:List) G --> j(#10:List, #12:List) I --> #5:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> f(#4:List, #2:Elt) Z --> j(#9:List, #10:List) Y --> j(#11:List, #12:List) S --> #5:List Unifier 2189 A --> f(#4:List, #5:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #8:List) H --> 1 G --> 1 I --> f(#9:List, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> #5:List X --> #6:List Z --> f(#8:List, #2:Elt, 1, #9:List) Y --> 1 S --> #7:List Unifier 2190 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #9:List) H --> #4:List G --> 1 I --> f(#10:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> f(#9:List, #2:Elt, #4:List, #10:List) Y --> 1 S --> #8:List Unifier 2191 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #9:List) H --> 1 G --> #4:List I --> f(#10:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> f(#9:List, #2:Elt, #4:List, #10:List) Y --> 1 S --> #8:List Unifier 2192 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #10:List) H --> #4:List G --> #5:List I --> f(#11:List, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> f(#10:List, #2:Elt, j(#4:List, #5:List), #11:List) Y --> 1 S --> #9:List Unifier 2193 A --> j(#8:List, f(#4:List, #5:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #9:List) H --> 1 G --> 1 I --> f(#10:List, #7:List) U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #4:List W --> #5:List X --> #6:List Z --> f(#9:List, #2:Elt, 1, #10:List) Y --> 1 S --> #7:List Unifier 2194 A --> j(#9:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #10:List) H --> #4:List G --> 1 I --> f(#11:List, #8:List) U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> #7:List Z --> f(#10:List, #2:Elt, #4:List, #11:List) Y --> 1 S --> #8:List Unifier 2195 A --> j(#9:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #10:List) H --> 1 G --> #4:List I --> f(#11:List, #8:List) U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> #7:List Z --> f(#10:List, #2:Elt, #4:List, #11:List) Y --> 1 S --> #8:List Unifier 2196 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #11:List) H --> #4:List G --> #5:List I --> f(#12:List, #9:List) U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #8:List Z --> f(#11:List, #2:Elt, j(#4:List, #5:List), #12:List) Y --> 1 S --> #9:List Unifier 2197 A --> f(#4:List, #5:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #8:List) H --> 1 G --> 1 I --> f(#9:List, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> #4:List W --> #5:List X --> #6:List Z --> 1 Y --> f(#8:List, #2:Elt, 1, #9:List) S --> #7:List Unifier 2198 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #9:List) H --> #4:List G --> 1 I --> f(#10:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> f(#9:List, #2:Elt, #4:List, #10:List) S --> #8:List Unifier 2199 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #9:List) H --> 1 G --> #4:List I --> f(#10:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> f(#9:List, #2:Elt, #4:List, #10:List) S --> #8:List Unifier 2200 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #10:List) H --> #4:List G --> #5:List I --> f(#11:List, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> f(#10:List, #2:Elt, j(#4:List, #5:List), #11:List) S --> #9:List Unifier 2201 A --> j(#8:List, f(#4:List, #5:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #9:List) H --> 1 G --> 1 I --> f(#10:List, #7:List) U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #4:List W --> #5:List X --> #6:List Z --> 1 Y --> f(#9:List, #2:Elt, 1, #10:List) S --> #7:List Unifier 2202 A --> j(#9:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #10:List) H --> #4:List G --> 1 I --> f(#11:List, #8:List) U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> f(#10:List, #2:Elt, #4:List, #11:List) S --> #8:List Unifier 2203 A --> j(#9:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #10:List) H --> 1 G --> #4:List I --> f(#11:List, #8:List) U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> f(#10:List, #2:Elt, #4:List, #11:List) S --> #8:List Unifier 2204 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #11:List) H --> #4:List G --> #5:List I --> f(#12:List, #9:List) U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> f(#11:List, #2:Elt, j(#4:List, #5:List), #12:List) S --> #9:List Unifier 2205 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> f(#9:List, #10:List) G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> f(#8:List, #2:Elt, #9:List) Y --> 1 S --> f(#10:List, #4:List) Unifier 2206 A --> j(#8:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #9:List) H --> f(#10:List, #11:List) G --> 1 I --> #4:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> #7:List Z --> f(#9:List, #2:Elt, #10:List) Y --> 1 S --> f(#11:List, #4:List) Unifier 2207 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> f(#9:List, #10:List) G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> f(#8:List, #2:Elt, #9:List) S --> f(#10:List, #4:List) Unifier 2208 A --> j(#8:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #9:List) H --> f(#10:List, #11:List) G --> 1 I --> #4:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> f(#9:List, #2:Elt, #10:List) S --> f(#11:List, #4:List) Unifier 2209 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> f(#9:List, #10:List) I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> f(#8:List, #2:Elt, #9:List) Y --> 1 S --> f(#10:List, #4:List) Unifier 2210 A --> j(#8:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #9:List) H --> 1 G --> f(#10:List, #11:List) I --> #4:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> #7:List Z --> f(#9:List, #2:Elt, #10:List) Y --> 1 S --> f(#11:List, #4:List) Unifier 2211 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> f(#9:List, #10:List) I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> f(#8:List, #2:Elt, #9:List) S --> f(#10:List, #4:List) Unifier 2212 A --> j(#8:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #9:List) H --> 1 G --> f(#10:List, #11:List) I --> #4:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> f(#9:List, #2:Elt, #10:List) S --> f(#11:List, #4:List) Unifier 2213 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> f(#8:List, #2:Elt, 1) Y --> 1 S --> #4:List Unifier 2214 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> f(#9:List, #2:Elt, #4:List) Y --> 1 S --> #5:List Unifier 2215 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> f(#9:List, #2:Elt, #4:List) Y --> 1 S --> #5:List Unifier 2216 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, #10:List) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #9:List Z --> f(#10:List, #2:Elt, j(#4:List, #5:List)) Y --> 1 S --> #6:List Unifier 2217 A --> j(#8:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #9:List) H --> 1 G --> 1 I --> #4:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> #7:List Z --> f(#9:List, #2:Elt, 1) Y --> 1 S --> #4:List Unifier 2218 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #10:List) H --> #4:List G --> 1 I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #8:List Z --> f(#10:List, #2:Elt, #4:List) Y --> 1 S --> #5:List Unifier 2219 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #10:List) H --> 1 G --> #4:List I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #8:List Z --> f(#10:List, #2:Elt, #4:List) Y --> 1 S --> #5:List Unifier 2220 A --> j(#10:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, #11:List) H --> #4:List G --> #5:List I --> #6:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> #9:List Z --> f(#11:List, #2:Elt, j(#4:List, #5:List)) Y --> 1 S --> #6:List Unifier 2221 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> f(#8:List, #2:Elt, 1) S --> #4:List Unifier 2222 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> f(#9:List, #2:Elt, #4:List) S --> #5:List Unifier 2223 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> f(#9:List, #2:Elt, #4:List) S --> #5:List Unifier 2224 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, #10:List) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> f(#10:List, #2:Elt, j(#4:List, #5:List)) S --> #6:List Unifier 2225 A --> j(#8:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #9:List) H --> 1 G --> 1 I --> #4:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> f(#9:List, #2:Elt, 1) S --> #4:List Unifier 2226 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #10:List) H --> #4:List G --> 1 I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> f(#10:List, #2:Elt, #4:List) S --> #5:List Unifier 2227 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #10:List) H --> 1 G --> #4:List I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> f(#10:List, #2:Elt, #4:List) S --> #5:List Unifier 2228 A --> j(#10:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, #11:List) H --> #4:List G --> #5:List I --> #6:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> f(#11:List, #2:Elt, j(#4:List, #5:List)) S --> #6:List Unifier 2229 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> f(#8:List, #2:Elt) Y --> 1 S --> f(1, #4:List) Unifier 2230 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> f(#9:List, #2:Elt) Y --> 1 S --> f(#4:List, #5:List) Unifier 2231 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> f(#9:List, #2:Elt) Y --> 1 S --> f(#4:List, #5:List) Unifier 2232 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, #10:List) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #9:List Z --> f(#10:List, #2:Elt) Y --> 1 S --> f(j(#4:List, #5:List), #6:List) Unifier 2233 A --> j(#8:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #9:List) H --> 1 G --> 1 I --> #4:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> #7:List Z --> f(#9:List, #2:Elt) Y --> 1 S --> f(1, #4:List) Unifier 2234 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #10:List) H --> #4:List G --> 1 I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #8:List Z --> f(#10:List, #2:Elt) Y --> 1 S --> f(#4:List, #5:List) Unifier 2235 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #10:List) H --> 1 G --> #4:List I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #8:List Z --> f(#10:List, #2:Elt) Y --> 1 S --> f(#4:List, #5:List) Unifier 2236 A --> j(#10:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, #11:List) H --> #4:List G --> #5:List I --> #6:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> #9:List Z --> f(#11:List, #2:Elt) Y --> 1 S --> f(j(#4:List, #5:List), #6:List) Unifier 2237 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> f(#8:List, #2:Elt) S --> f(1, #4:List) Unifier 2238 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> f(#9:List, #2:Elt) S --> f(#4:List, #5:List) Unifier 2239 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> f(#9:List, #2:Elt) S --> f(#4:List, #5:List) Unifier 2240 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, #10:List) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> f(#10:List, #2:Elt) S --> f(j(#4:List, #5:List), #6:List) Unifier 2241 A --> j(#8:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #9:List) H --> 1 G --> 1 I --> #4:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> f(#9:List, #2:Elt) S --> f(1, #4:List) Unifier 2242 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #10:List) H --> #4:List G --> 1 I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> f(#10:List, #2:Elt) S --> f(#4:List, #5:List) Unifier 2243 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #10:List) H --> 1 G --> #4:List I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> f(#10:List, #2:Elt) S --> f(#4:List, #5:List) Unifier 2244 A --> j(#10:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, #11:List) H --> #4:List G --> #5:List I --> #6:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> f(#11:List, #2:Elt) S --> f(j(#4:List, #5:List), #6:List) Unifier 2245 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, 1, #8:List) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> f(#8:List, #2:Elt, 1, #4:List) Unifier 2246 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List, #9:List) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#9:List, #2:Elt, 1, #4:List) Unifier 2247 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List, #9:List) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#9:List, #2:Elt, 1, #4:List) Unifier 2248 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, j(#8:List, #9:List), #10:List) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#10:List, #2:Elt, 1, #4:List) Unifier 2249 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, 1, #9:List) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> f(#9:List, #2:Elt, #4:List, #5:List) Unifier 2250 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List, #10:List) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#10:List, #2:Elt, #4:List, #5:List) Unifier 2251 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List, #10:List) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#10:List, #2:Elt, #4:List, #5:List) Unifier 2252 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, j(#9:List, #10:List), #11:List) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#11:List, #2:Elt, #4:List, #5:List) Unifier 2253 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, 1, #9:List) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> f(#9:List, #2:Elt, #4:List, #5:List) Unifier 2254 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List, #10:List) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#10:List, #2:Elt, #4:List, #5:List) Unifier 2255 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List, #10:List) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#10:List, #2:Elt, #4:List, #5:List) Unifier 2256 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, j(#9:List, #10:List), #11:List) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#11:List, #2:Elt, #4:List, #5:List) Unifier 2257 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, 1, #10:List) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> 1 S --> f(#10:List, #2:Elt, j(#4:List, #5:List), #6:List) Unifier 2258 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, #10:List, #11:List) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> 1 S --> f(#11:List, #2:Elt, j(#4:List, #5:List), #6:List) Unifier 2259 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, #10:List, #11:List) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> #10:List S --> f(#11:List, #2:Elt, j(#4:List, #5:List), #6:List) Unifier 2260 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, j(#10:List, #11:List), #12:List) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> #11:List S --> f(#12:List, #2:Elt, j(#4:List, #5:List), #6:List) Unifier 2261 A --> j(#8:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, 1, #9:List) H --> 1 G --> 1 I --> #4:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> f(#9:List, #2:Elt, 1, #4:List) Unifier 2262 A --> j(#9:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List, #10:List) H --> 1 G --> 1 I --> #4:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#10:List, #2:Elt, 1, #4:List) Unifier 2263 A --> j(#9:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List, #10:List) H --> 1 G --> 1 I --> #4:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#10:List, #2:Elt, 1, #4:List) Unifier 2264 A --> j(#10:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, j(#8:List, #9:List), #11:List) H --> 1 G --> 1 I --> #4:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#11:List, #2:Elt, 1, #4:List) Unifier 2265 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, 1, #10:List) H --> #4:List G --> 1 I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> f(#10:List, #2:Elt, #4:List, #5:List) Unifier 2266 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List, #11:List) H --> #4:List G --> 1 I --> #5:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#11:List, #2:Elt, #4:List, #5:List) Unifier 2267 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List, #11:List) H --> #4:List G --> 1 I --> #5:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#11:List, #2:Elt, #4:List, #5:List) Unifier 2268 A --> j(#11:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, j(#9:List, #10:List), #12:List) H --> #4:List G --> 1 I --> #5:List U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#12:List, #2:Elt, #4:List, #5:List) Unifier 2269 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, 1, #10:List) H --> 1 G --> #4:List I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> f(#10:List, #2:Elt, #4:List, #5:List) Unifier 2270 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List, #11:List) H --> 1 G --> #4:List I --> #5:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#11:List, #2:Elt, #4:List, #5:List) Unifier 2271 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List, #11:List) H --> 1 G --> #4:List I --> #5:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#11:List, #2:Elt, #4:List, #5:List) Unifier 2272 A --> j(#11:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, j(#9:List, #10:List), #12:List) H --> 1 G --> #4:List I --> #5:List U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#12:List, #2:Elt, #4:List, #5:List) Unifier 2273 A --> j(#10:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, 1, #11:List) H --> #4:List G --> #5:List I --> #6:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> 1 S --> f(#11:List, #2:Elt, j(#4:List, #5:List), #6:List) Unifier 2274 A --> j(#11:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, #10:List, #12:List) H --> #4:List G --> #5:List I --> #6:List U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> 1 S --> f(#12:List, #2:Elt, j(#4:List, #5:List), #6:List) Unifier 2275 A --> j(#11:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, #10:List, #12:List) H --> #4:List G --> #5:List I --> #6:List U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> #10:List S --> f(#12:List, #2:Elt, j(#4:List, #5:List), #6:List) Unifier 2276 A --> j(#12:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, j(#10:List, #11:List), #13:List) H --> #4:List G --> #5:List I --> #6:List U --> j(#12:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> #11:List S --> f(#13:List, #2:Elt, j(#4:List, #5:List), #6:List) Unifier 2277 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, 1) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> f(#2:Elt, 1, #4:List) Unifier 2278 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#2:Elt, 1, #4:List) Unifier 2279 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#2:Elt, 1, #4:List) Unifier 2280 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, j(#8:List, #9:List)) H --> 1 G --> 1 I --> #4:List U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#2:Elt, 1, #4:List) Unifier 2281 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, 1) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> f(#2:Elt, #4:List, #5:List) Unifier 2282 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#2:Elt, #4:List, #5:List) Unifier 2283 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#2:Elt, #4:List, #5:List) Unifier 2284 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, j(#9:List, #10:List)) H --> #4:List G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#2:Elt, #4:List, #5:List) Unifier 2285 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, 1) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> f(#2:Elt, #4:List, #5:List) Unifier 2286 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#2:Elt, #4:List, #5:List) Unifier 2287 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#2:Elt, #4:List, #5:List) Unifier 2288 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, j(#9:List, #10:List)) H --> 1 G --> #4:List I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#2:Elt, #4:List, #5:List) Unifier 2289 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, 1) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> 1 S --> f(#2:Elt, j(#4:List, #5:List), #6:List) Unifier 2290 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, #10:List) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> 1 S --> f(#2:Elt, j(#4:List, #5:List), #6:List) Unifier 2291 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, #10:List) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> #10:List S --> f(#2:Elt, j(#4:List, #5:List), #6:List) Unifier 2292 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, j(#10:List, #11:List)) H --> #4:List G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> #11:List S --> f(#2:Elt, j(#4:List, #5:List), #6:List) Unifier 2293 A --> j(#8:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, 1) H --> 1 G --> 1 I --> #4:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> f(#2:Elt, 1, #4:List) Unifier 2294 A --> j(#9:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> 1 I --> #4:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#2:Elt, 1, #4:List) Unifier 2295 A --> j(#9:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> 1 I --> #4:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#2:Elt, 1, #4:List) Unifier 2296 A --> j(#10:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, j(#8:List, #9:List)) H --> 1 G --> 1 I --> #4:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#2:Elt, 1, #4:List) Unifier 2297 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, 1) H --> #4:List G --> 1 I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> f(#2:Elt, #4:List, #5:List) Unifier 2298 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> #4:List G --> 1 I --> #5:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#2:Elt, #4:List, #5:List) Unifier 2299 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> #4:List G --> 1 I --> #5:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#2:Elt, #4:List, #5:List) Unifier 2300 A --> j(#11:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, j(#9:List, #10:List)) H --> #4:List G --> 1 I --> #5:List U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#2:Elt, #4:List, #5:List) Unifier 2301 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, 1) H --> 1 G --> #4:List I --> #5:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> f(#2:Elt, #4:List, #5:List) Unifier 2302 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> 1 G --> #4:List I --> #5:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#2:Elt, #4:List, #5:List) Unifier 2303 A --> j(#10:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> 1 G --> #4:List I --> #5:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#2:Elt, #4:List, #5:List) Unifier 2304 A --> j(#11:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, j(#9:List, #10:List)) H --> 1 G --> #4:List I --> #5:List U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#2:Elt, #4:List, #5:List) Unifier 2305 A --> j(#10:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, 1) H --> #4:List G --> #5:List I --> #6:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> 1 S --> f(#2:Elt, j(#4:List, #5:List), #6:List) Unifier 2306 A --> j(#11:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, #10:List) H --> #4:List G --> #5:List I --> #6:List U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> 1 S --> f(#2:Elt, j(#4:List, #5:List), #6:List) Unifier 2307 A --> j(#11:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, #10:List) H --> #4:List G --> #5:List I --> #6:List U --> j(#11:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> #9:List Z --> 1 Y --> #10:List S --> f(#2:Elt, j(#4:List, #5:List), #6:List) Unifier 2308 A --> j(#12:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> f(#9:List, j(#10:List, #11:List)) H --> #4:List G --> #5:List I --> #6:List U --> j(#12:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> #9:List Z --> #10:List Y --> #11:List S --> f(#2:Elt, j(#4:List, #5:List), #6:List) Unifier 2309 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#8:List, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #4:List Z --> f(#2:Elt, 1, #8:List) Y --> 1 S --> #7:List Unifier 2310 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#9:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #4:List Z --> f(#2:Elt, #5:List, #9:List) Y --> 1 S --> #8:List Unifier 2311 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#9:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #4:List Z --> f(#2:Elt, #5:List, #9:List) Y --> 1 S --> #8:List Unifier 2312 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#10:List, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #4:List Z --> f(#2:Elt, j(#5:List, #6:List), #10:List) Y --> 1 S --> #9:List Unifier 2313 A --> j(#8:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#9:List, #7:List) U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> #4:List Z --> f(#2:Elt, 1, #9:List) Y --> 1 S --> #7:List Unifier 2314 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#10:List, #8:List) U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #4:List Z --> f(#2:Elt, #5:List, #10:List) Y --> 1 S --> #8:List Unifier 2315 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#10:List, #8:List) U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #4:List Z --> f(#2:Elt, #5:List, #10:List) Y --> 1 S --> #8:List Unifier 2316 A --> j(#10:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#11:List, #9:List) U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> #4:List Z --> f(#2:Elt, j(#5:List, #6:List), #11:List) Y --> 1 S --> #9:List Unifier 2317 A --> f(#5:List, #6:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#8:List, #7:List) U --> f(#1:List, #2:Elt, #3:List) V --> #5:List W --> #6:List X --> #4:List Z --> 1 Y --> f(#2:Elt, 1, #8:List) S --> #7:List Unifier 2318 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#9:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #5:List, #9:List) S --> #8:List Unifier 2319 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#9:List, #8:List) U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #5:List, #9:List) S --> #8:List Unifier 2320 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#10:List, #9:List) U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #4:List Z --> 1 Y --> f(#2:Elt, j(#5:List, #6:List), #10:List) S --> #9:List Unifier 2321 A --> j(#8:List, f(#5:List, #6:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#9:List, #7:List) U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #5:List W --> #6:List X --> #4:List Z --> 1 Y --> f(#2:Elt, 1, #9:List) S --> #7:List Unifier 2322 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#10:List, #8:List) U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #5:List, #10:List) S --> #8:List Unifier 2323 A --> j(#9:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#10:List, #8:List) U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #5:List, #10:List) S --> #8:List Unifier 2324 A --> j(#10:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#11:List, #9:List) U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> #4:List Z --> 1 Y --> f(#2:Elt, j(#5:List, #6:List), #11:List) S --> #9:List Unifier 2325 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, #9:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #4:List Z --> f(#2:Elt, #8:List) Y --> 1 S --> f(#9:List, #5:List) Unifier 2326 A --> j(#8:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#9:List, #10:List) G --> 1 I --> #5:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #4:List Z --> f(#2:Elt, #9:List) Y --> 1 S --> f(#10:List, #5:List) Unifier 2327 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, #9:List) G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #8:List) S --> f(#9:List, #5:List) Unifier 2328 A --> j(#8:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#9:List, #10:List) G --> 1 I --> #5:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #9:List) S --> f(#10:List, #5:List) Unifier 2329 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, #9:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #4:List Z --> f(#2:Elt, #8:List) Y --> 1 S --> f(#9:List, #5:List) Unifier 2330 A --> j(#8:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#9:List, #10:List) I --> #5:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #4:List Z --> f(#2:Elt, #9:List) Y --> 1 S --> f(#10:List, #5:List) Unifier 2331 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, #9:List) I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #8:List) S --> f(#9:List, #5:List) Unifier 2332 A --> j(#8:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#9:List, #10:List) I --> #5:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #9:List) S --> f(#10:List, #5:List) Unifier 2333 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #4:List Z --> f(#2:Elt, 1) Y --> 1 S --> #5:List Unifier 2334 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #4:List Z --> f(#2:Elt, #5:List) Y --> 1 S --> #6:List Unifier 2335 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #4:List Z --> f(#2:Elt, #5:List) Y --> 1 S --> #6:List Unifier 2336 A --> f(#8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> #8:List W --> #9:List X --> #4:List Z --> f(#2:Elt, j(#5:List, #6:List)) Y --> 1 S --> #7:List Unifier 2337 A --> j(#8:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #4:List Z --> f(#2:Elt, 1) Y --> 1 S --> #5:List Unifier 2338 A --> j(#9:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> #4:List Z --> f(#2:Elt, #5:List) Y --> 1 S --> #6:List Unifier 2339 A --> j(#9:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> #4:List Z --> f(#2:Elt, #5:List) Y --> 1 S --> #6:List Unifier 2340 A --> j(#10:List, f(#8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #8:List W --> #9:List X --> #4:List Z --> f(#2:Elt, j(#5:List, #6:List)) Y --> 1 S --> #7:List Unifier 2341 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #4:List Z --> 1 Y --> f(#2:Elt, 1) S --> #5:List Unifier 2342 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #5:List) S --> #6:List Unifier 2343 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #5:List) S --> #6:List Unifier 2344 A --> f(#8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> #8:List W --> #9:List X --> #4:List Z --> 1 Y --> f(#2:Elt, j(#5:List, #6:List)) S --> #7:List Unifier 2345 A --> j(#8:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #4:List Z --> 1 Y --> f(#2:Elt, 1) S --> #5:List Unifier 2346 A --> j(#9:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #5:List) S --> #6:List Unifier 2347 A --> j(#9:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #5:List) S --> #6:List Unifier 2348 A --> j(#10:List, f(#8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #8:List W --> #9:List X --> #4:List Z --> 1 Y --> f(#2:Elt, j(#5:List, #6:List)) S --> #7:List Unifier 2349 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #4:List Z --> #2:Elt Y --> 1 S --> f(1, #5:List) Unifier 2350 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #4:List Z --> #2:Elt Y --> 1 S --> f(#5:List, #6:List) Unifier 2351 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #4:List Z --> #2:Elt Y --> 1 S --> f(#5:List, #6:List) Unifier 2352 A --> f(#8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> #8:List W --> #9:List X --> #4:List Z --> #2:Elt Y --> 1 S --> f(j(#5:List, #6:List), #7:List) Unifier 2353 A --> j(#8:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #4:List Z --> #2:Elt Y --> 1 S --> f(1, #5:List) Unifier 2354 A --> j(#9:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> #4:List Z --> #2:Elt Y --> 1 S --> f(#5:List, #6:List) Unifier 2355 A --> j(#9:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> #4:List Z --> #2:Elt Y --> 1 S --> f(#5:List, #6:List) Unifier 2356 A --> j(#10:List, f(#8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #8:List W --> #9:List X --> #4:List Z --> #2:Elt Y --> 1 S --> f(j(#5:List, #6:List), #7:List) Unifier 2357 A --> f(#6:List, #7:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> f(#1:List, #2:Elt, #3:List) V --> #6:List W --> #7:List X --> #4:List Z --> 1 Y --> #2:Elt S --> f(1, #5:List) Unifier 2358 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #4:List Z --> 1 Y --> #2:Elt S --> f(#5:List, #6:List) Unifier 2359 A --> f(#7:List, #8:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> f(#1:List, #2:Elt, #3:List) V --> #7:List W --> #8:List X --> #4:List Z --> 1 Y --> #2:Elt S --> f(#5:List, #6:List) Unifier 2360 A --> f(#8:List, #9:List) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> f(#1:List, #2:Elt, #3:List) V --> #8:List W --> #9:List X --> #4:List Z --> 1 Y --> #2:Elt S --> f(j(#5:List, #6:List), #7:List) Unifier 2361 A --> j(#8:List, f(#6:List, #7:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> j(#8:List, f(#1:List, #2:Elt, #3:List)) V --> #6:List W --> #7:List X --> #4:List Z --> 1 Y --> #2:Elt S --> f(1, #5:List) Unifier 2362 A --> j(#9:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> #4:List Z --> 1 Y --> #2:Elt S --> f(#5:List, #6:List) Unifier 2363 A --> j(#9:List, f(#7:List, #8:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> j(#9:List, f(#1:List, #2:Elt, #3:List)) V --> #7:List W --> #8:List X --> #4:List Z --> 1 Y --> #2:Elt S --> f(#5:List, #6:List) Unifier 2364 A --> j(#10:List, f(#8:List, #9:List)) B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> j(#10:List, f(#1:List, #2:Elt, #3:List)) V --> #8:List W --> #9:List X --> #4:List Z --> 1 Y --> #2:Elt S --> f(j(#5:List, #6:List), #7:List) Unifier 2365 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #4:List) D --> #3:List H --> 1 G --> 1 I --> f(#6:List, 1, #5:List) U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #4:List X --> f(#3:List, #2:Elt, 1, #6:List) Z --> 1 Y --> 1 S --> #5:List Unifier 2366 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #4:List) D --> #3:List H --> 1 G --> 1 I --> f(#7:List, #5:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #4:List X --> f(#3:List, #2:Elt, 1, #7:List) Z --> #5:List Y --> 1 S --> #6:List Unifier 2367 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #4:List) D --> #3:List H --> 1 G --> 1 I --> f(#7:List, #5:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #4:List X --> f(#3:List, #2:Elt, 1, #7:List) Z --> 1 Y --> #5:List S --> #6:List Unifier 2368 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #4:List) D --> #3:List H --> 1 G --> 1 I --> f(#8:List, j(#5:List, #6:List), #7:List) U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #4:List X --> f(#3:List, #2:Elt, 1, #8:List) Z --> #5:List Y --> #6:List S --> #7:List Unifier 2369 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> #4:List G --> 1 I --> f(#7:List, 1, #6:List) U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt, #4:List, #7:List) Z --> 1 Y --> 1 S --> #6:List Unifier 2370 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, #6:List, #7:List) U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> f(#3:List, #2:Elt, #4:List, #8:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 2371 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, #6:List, #7:List) U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> f(#3:List, #2:Elt, #4:List, #8:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 2372 A --> 1 B --> #1:List E --> #2:Elt C --> f(#10:List, #5:List) D --> #3:List H --> #4:List G --> 1 I --> f(#9:List, j(#6:List, #7:List), #8:List) U --> 1 V --> f(#1:List, #2:Elt, #10:List) W --> #5:List X --> f(#3:List, #2:Elt, #4:List, #9:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 2373 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> 1 G --> #4:List I --> f(#7:List, 1, #6:List) U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt, #4:List, #7:List) Z --> 1 Y --> 1 S --> #6:List Unifier 2374 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, #6:List, #7:List) U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> f(#3:List, #2:Elt, #4:List, #8:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 2375 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, #6:List, #7:List) U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> f(#3:List, #2:Elt, #4:List, #8:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 2376 A --> 1 B --> #1:List E --> #2:Elt C --> f(#10:List, #5:List) D --> #3:List H --> 1 G --> #4:List I --> f(#9:List, j(#6:List, #7:List), #8:List) U --> 1 V --> f(#1:List, #2:Elt, #10:List) W --> #5:List X --> f(#3:List, #2:Elt, #4:List, #9:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 2377 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#8:List, 1, #7:List) U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt, j(#4:List, #5:List), #8:List) Z --> 1 Y --> 1 S --> #7:List Unifier 2378 A --> 1 B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, #7:List, #8:List) U --> 1 V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> f(#3:List, #2:Elt, j(#4:List, #5:List), #9:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 2379 A --> 1 B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, #7:List, #8:List) U --> 1 V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> f(#3:List, #2:Elt, j(#4:List, #5:List), #9:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 2380 A --> 1 B --> #1:List E --> #2:Elt C --> f(#11:List, #6:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#10:List, j(#7:List, #8:List), #9:List) U --> 1 V --> f(#1:List, #2:Elt, #11:List) W --> #6:List X --> f(#3:List, #2:Elt, j(#4:List, #5:List), #10:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 2381 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#6:List, 1, #5:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, 1, #6:List) Z --> 1 Y --> 1 S --> #5:List Unifier 2382 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#7:List, #5:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, 1, #7:List) Z --> #5:List Y --> 1 S --> #6:List Unifier 2383 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#7:List, #5:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, 1, #7:List) Z --> 1 Y --> #5:List S --> #6:List Unifier 2384 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#8:List, j(#5:List, #6:List), #7:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, 1, #8:List) Z --> #5:List Y --> #6:List S --> #7:List Unifier 2385 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#7:List, 1, #6:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List, #7:List) Z --> 1 Y --> 1 S --> #6:List Unifier 2386 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#8:List, #6:List, #7:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List, #8:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 2387 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#8:List, #6:List, #7:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List, #8:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 2388 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#9:List, j(#6:List, #7:List), #8:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List, #9:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 2389 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#7:List, 1, #6:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List, #7:List) Z --> 1 Y --> 1 S --> #6:List Unifier 2390 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#8:List, #6:List, #7:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List, #8:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 2391 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#8:List, #6:List, #7:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List, #8:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 2392 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#9:List, j(#6:List, #7:List), #8:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List, #9:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 2393 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#8:List, 1, #7:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List), #8:List) Z --> 1 Y --> 1 S --> #7:List Unifier 2394 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#9:List, #7:List, #8:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List), #9:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 2395 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#9:List, #7:List, #8:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List), #9:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 2396 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#10:List, j(#7:List, #8:List), #9:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List), #10:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 2397 A --> 1 B --> f(#4:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#6:List, 1, #5:List) U --> 1 V --> #4:List W --> f(#7:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, 1, #6:List) Z --> 1 Y --> 1 S --> #5:List Unifier 2398 A --> 1 B --> f(#4:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#7:List, #5:List, #6:List) U --> 1 V --> #4:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, 1, #7:List) Z --> #5:List Y --> 1 S --> #6:List Unifier 2399 A --> 1 B --> f(#4:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#7:List, #5:List, #6:List) U --> 1 V --> #4:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, 1, #7:List) Z --> 1 Y --> #5:List S --> #6:List Unifier 2400 A --> 1 B --> f(#4:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#8:List, j(#5:List, #6:List), #7:List) U --> 1 V --> #4:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, 1, #8:List) Z --> #5:List Y --> #6:List S --> #7:List Unifier 2401 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#7:List, 1, #6:List) U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List, #7:List) Z --> 1 Y --> 1 S --> #6:List Unifier 2402 A --> 1 B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, #6:List, #7:List) U --> 1 V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List, #8:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 2403 A --> 1 B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, #6:List, #7:List) U --> 1 V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List, #8:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 2404 A --> 1 B --> f(#5:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#9:List, j(#6:List, #7:List), #8:List) U --> 1 V --> #5:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List, #9:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 2405 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#7:List, 1, #6:List) U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List, #7:List) Z --> 1 Y --> 1 S --> #6:List Unifier 2406 A --> 1 B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, #6:List, #7:List) U --> 1 V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List, #8:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 2407 A --> 1 B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, #6:List, #7:List) U --> 1 V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List, #8:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 2408 A --> 1 B --> f(#5:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#9:List, j(#6:List, #7:List), #8:List) U --> 1 V --> #5:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List, #9:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 2409 A --> 1 B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#8:List, 1, #7:List) U --> 1 V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, j(#4:List, #5:List), #8:List) Z --> 1 Y --> 1 S --> #7:List Unifier 2410 A --> 1 B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, #7:List, #8:List) U --> 1 V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, j(#4:List, #5:List), #9:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 2411 A --> 1 B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, #7:List, #8:List) U --> 1 V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, j(#4:List, #5:List), #9:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 2412 A --> 1 B --> f(#6:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#10:List, j(#7:List, #8:List), #9:List) U --> 1 V --> #6:List W --> f(#11:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, j(#4:List, #5:List), #10:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 2413 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#6:List, 1, #5:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, 1, #6:List) Z --> 1 Y --> 1 S --> #5:List Unifier 2414 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#7:List, #5:List, #6:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, 1, #7:List) Z --> #5:List Y --> 1 S --> #6:List Unifier 2415 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#7:List, #5:List, #6:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, 1, #7:List) Z --> 1 Y --> #5:List S --> #6:List Unifier 2416 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#8:List, j(#5:List, #6:List), #7:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, 1, #8:List) Z --> #5:List Y --> #6:List S --> #7:List Unifier 2417 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#7:List, 1, #6:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List, #7:List) Z --> 1 Y --> 1 S --> #6:List Unifier 2418 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#8:List, #6:List, #7:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List, #8:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 2419 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#8:List, #6:List, #7:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List, #8:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 2420 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#9:List, j(#6:List, #7:List), #8:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List, #9:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 2421 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#7:List, 1, #6:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List, #7:List) Z --> 1 Y --> 1 S --> #6:List Unifier 2422 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#8:List, #6:List, #7:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List, #8:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 2423 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#8:List, #6:List, #7:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List, #8:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 2424 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#9:List, j(#6:List, #7:List), #8:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List, #9:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 2425 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#8:List, 1, #7:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, j(#5:List, #6:List), #8:List) Z --> 1 Y --> 1 S --> #7:List Unifier 2426 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#9:List, #7:List, #8:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, j(#5:List, #6:List), #9:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 2427 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#9:List, #7:List, #8:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, j(#5:List, #6:List), #9:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 2428 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#10:List, j(#7:List, #8:List), #9:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, j(#5:List, #6:List), #10:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 2429 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #4:List) D --> #3:List H --> f(#6:List, #7:List) G --> 1 I --> f(#8:List, #5:List) U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #4:List X --> f(#3:List, #2:Elt, #6:List) Z --> f(#7:List, #8:List) Y --> 1 S --> #5:List Unifier 2430 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #4:List) D --> #3:List H --> f(#6:List, #7:List) G --> 1 I --> f(#8:List, #5:List) U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #4:List X --> f(#3:List, #2:Elt, #6:List) Z --> 1 Y --> f(#7:List, #8:List) S --> #5:List Unifier 2431 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #4:List) D --> #3:List H --> 1 G --> f(#6:List, #7:List) I --> f(#8:List, #5:List) U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #4:List X --> f(#3:List, #2:Elt, #6:List) Z --> f(#7:List, #8:List) Y --> 1 S --> #5:List Unifier 2432 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #4:List) D --> #3:List H --> 1 G --> f(#6:List, #7:List) I --> f(#8:List, #5:List) U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #4:List X --> f(#3:List, #2:Elt, #6:List) Z --> 1 Y --> f(#7:List, #8:List) S --> #5:List Unifier 2433 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#6:List, #7:List) G --> 1 I --> f(#8:List, #5:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #6:List) Z --> f(#7:List, #8:List) Y --> 1 S --> #5:List Unifier 2434 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#6:List, #7:List) G --> 1 I --> f(#8:List, #5:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #6:List) Z --> 1 Y --> f(#7:List, #8:List) S --> #5:List Unifier 2435 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#6:List, #7:List) I --> f(#8:List, #5:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #6:List) Z --> f(#7:List, #8:List) Y --> 1 S --> #5:List Unifier 2436 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#6:List, #7:List) I --> f(#8:List, #5:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #6:List) Z --> 1 Y --> f(#7:List, #8:List) S --> #5:List Unifier 2437 A --> 1 B --> f(#4:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#6:List, #7:List) G --> 1 I --> f(#8:List, #5:List) U --> 1 V --> #4:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #6:List) Z --> f(#7:List, #8:List) Y --> 1 S --> #5:List Unifier 2438 A --> 1 B --> f(#4:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#6:List, #7:List) G --> 1 I --> f(#8:List, #5:List) U --> 1 V --> #4:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #6:List) Z --> 1 Y --> f(#7:List, #8:List) S --> #5:List Unifier 2439 A --> 1 B --> f(#4:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#6:List, #7:List) I --> f(#8:List, #5:List) U --> 1 V --> #4:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #6:List) Z --> f(#7:List, #8:List) Y --> 1 S --> #5:List Unifier 2440 A --> 1 B --> f(#4:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#6:List, #7:List) I --> f(#8:List, #5:List) U --> 1 V --> #4:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #6:List) Z --> 1 Y --> f(#7:List, #8:List) S --> #5:List Unifier 2441 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#6:List, #7:List) G --> 1 I --> f(#8:List, #5:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #6:List) Z --> f(#7:List, #8:List) Y --> 1 S --> #5:List Unifier 2442 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#6:List, #7:List) G --> 1 I --> f(#8:List, #5:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #6:List) Z --> 1 Y --> f(#7:List, #8:List) S --> #5:List Unifier 2443 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#6:List, #7:List) I --> f(#8:List, #5:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #6:List) Z --> f(#7:List, #8:List) Y --> 1 S --> #5:List Unifier 2444 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#6:List, #7:List) I --> f(#8:List, #5:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #6:List) Z --> 1 Y --> f(#7:List, #8:List) S --> #5:List Unifier 2445 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> f(#6:List, 1, #7:List) G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt, #6:List) Z --> 1 Y --> 1 S --> f(#7:List, #4:List) Unifier 2446 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> #3:List H --> f(#7:List, #6:List, #8:List) G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> f(#3:List, #2:Elt, #7:List) Z --> #6:List Y --> 1 S --> f(#8:List, #4:List) Unifier 2447 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> #3:List H --> f(#7:List, #6:List, #8:List) G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> f(#3:List, #2:Elt, #7:List) Z --> 1 Y --> #6:List S --> f(#8:List, #4:List) Unifier 2448 A --> 1 B --> #1:List E --> #2:Elt C --> f(#10:List, #5:List) D --> #3:List H --> f(#8:List, j(#6:List, #7:List), #9:List) G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #10:List) W --> #5:List X --> f(#3:List, #2:Elt, #8:List) Z --> #6:List Y --> #7:List S --> f(#9:List, #4:List) Unifier 2449 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> 1 G --> f(#6:List, 1, #7:List) I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt, #6:List) Z --> 1 Y --> 1 S --> f(#7:List, #4:List) Unifier 2450 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> #3:List H --> 1 G --> f(#7:List, #6:List, #8:List) I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> f(#3:List, #2:Elt, #7:List) Z --> #6:List Y --> 1 S --> f(#8:List, #4:List) Unifier 2451 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> #3:List H --> 1 G --> f(#7:List, #6:List, #8:List) I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> f(#3:List, #2:Elt, #7:List) Z --> 1 Y --> #6:List S --> f(#8:List, #4:List) Unifier 2452 A --> 1 B --> #1:List E --> #2:Elt C --> f(#10:List, #5:List) D --> #3:List H --> 1 G --> f(#8:List, j(#6:List, #7:List), #9:List) I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #10:List) W --> #5:List X --> f(#3:List, #2:Elt, #8:List) Z --> #6:List Y --> #7:List S --> f(#9:List, #4:List) Unifier 2453 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#6:List, 1, #7:List) G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #6:List) Z --> 1 Y --> 1 S --> f(#7:List, #5:List) Unifier 2454 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#7:List, #6:List, #8:List) G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #7:List) Z --> #6:List Y --> 1 S --> f(#8:List, #5:List) Unifier 2455 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#7:List, #6:List, #8:List) G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #7:List) Z --> 1 Y --> #6:List S --> f(#8:List, #5:List) Unifier 2456 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, j(#6:List, #7:List), #9:List) G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #8:List) Z --> #6:List Y --> #7:List S --> f(#9:List, #5:List) Unifier 2457 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#6:List, 1, #7:List) I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #6:List) Z --> 1 Y --> 1 S --> f(#7:List, #5:List) Unifier 2458 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#7:List, #6:List, #8:List) I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #7:List) Z --> #6:List Y --> 1 S --> f(#8:List, #5:List) Unifier 2459 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#7:List, #6:List, #8:List) I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #7:List) Z --> 1 Y --> #6:List S --> f(#8:List, #5:List) Unifier 2460 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, j(#6:List, #7:List), #9:List) I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #8:List) Z --> #6:List Y --> #7:List S --> f(#9:List, #5:List) Unifier 2461 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#6:List, 1, #7:List) G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #6:List) Z --> 1 Y --> 1 S --> f(#7:List, #4:List) Unifier 2462 A --> 1 B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#7:List, #6:List, #8:List) G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #7:List) Z --> #6:List Y --> 1 S --> f(#8:List, #4:List) Unifier 2463 A --> 1 B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#7:List, #6:List, #8:List) G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #7:List) Z --> 1 Y --> #6:List S --> f(#8:List, #4:List) Unifier 2464 A --> 1 B --> f(#5:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#8:List, j(#6:List, #7:List), #9:List) G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #8:List) Z --> #6:List Y --> #7:List S --> f(#9:List, #4:List) Unifier 2465 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#6:List, 1, #7:List) I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #6:List) Z --> 1 Y --> 1 S --> f(#7:List, #4:List) Unifier 2466 A --> 1 B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#7:List, #6:List, #8:List) I --> #4:List U --> 1 V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #7:List) Z --> #6:List Y --> 1 S --> f(#8:List, #4:List) Unifier 2467 A --> 1 B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#7:List, #6:List, #8:List) I --> #4:List U --> 1 V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #7:List) Z --> 1 Y --> #6:List S --> f(#8:List, #4:List) Unifier 2468 A --> 1 B --> f(#5:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#8:List, j(#6:List, #7:List), #9:List) I --> #4:List U --> 1 V --> #5:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #8:List) Z --> #6:List Y --> #7:List S --> f(#9:List, #4:List) Unifier 2469 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#6:List, 1, #7:List) G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #6:List) Z --> 1 Y --> 1 S --> f(#7:List, #5:List) Unifier 2470 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#7:List, #6:List, #8:List) G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #7:List) Z --> #6:List Y --> 1 S --> f(#8:List, #5:List) Unifier 2471 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#7:List, #6:List, #8:List) G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #7:List) Z --> 1 Y --> #6:List S --> f(#8:List, #5:List) Unifier 2472 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, j(#6:List, #7:List), #9:List) G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #8:List) Z --> #6:List Y --> #7:List S --> f(#9:List, #5:List) Unifier 2473 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#6:List, 1, #7:List) I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #6:List) Z --> 1 Y --> 1 S --> f(#7:List, #5:List) Unifier 2474 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#7:List, #6:List, #8:List) I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #7:List) Z --> #6:List Y --> 1 S --> f(#8:List, #5:List) Unifier 2475 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#7:List, #6:List, #8:List) I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #7:List) Z --> 1 Y --> #6:List S --> f(#8:List, #5:List) Unifier 2476 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, j(#6:List, #7:List), #9:List) I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #8:List) Z --> #6:List Y --> #7:List S --> f(#9:List, #5:List) Unifier 2477 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #5:List) D --> #3:List H --> f(#6:List, 1) G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #5:List X --> f(#3:List, #2:Elt, #6:List) Z --> 1 Y --> 1 S --> #4:List Unifier 2478 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> f(#7:List, #6:List) G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt, #7:List) Z --> #6:List Y --> 1 S --> #4:List Unifier 2479 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> f(#7:List, #6:List) G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt, #7:List) Z --> 1 Y --> #6:List S --> #4:List Unifier 2480 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> #3:List H --> f(#8:List, j(#6:List, #7:List)) G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> f(#3:List, #2:Elt, #8:List) Z --> #6:List Y --> #7:List S --> #4:List Unifier 2481 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #5:List) D --> #3:List H --> 1 G --> f(#6:List, 1) I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #5:List X --> f(#3:List, #2:Elt, #6:List) Z --> 1 Y --> 1 S --> #4:List Unifier 2482 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> 1 G --> f(#7:List, #6:List) I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt, #7:List) Z --> #6:List Y --> 1 S --> #4:List Unifier 2483 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> 1 G --> f(#7:List, #6:List) I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt, #7:List) Z --> 1 Y --> #6:List S --> #4:List Unifier 2484 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> #3:List H --> 1 G --> f(#8:List, j(#6:List, #7:List)) I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> f(#3:List, #2:Elt, #8:List) Z --> #6:List Y --> #7:List S --> #4:List Unifier 2485 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#6:List, 1) G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #6:List) Z --> 1 Y --> 1 S --> #5:List Unifier 2486 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#7:List, #6:List) G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #7:List) Z --> #6:List Y --> 1 S --> #5:List Unifier 2487 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#7:List, #6:List) G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #7:List) Z --> 1 Y --> #6:List S --> #5:List Unifier 2488 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, j(#6:List, #7:List)) G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #8:List) Z --> #6:List Y --> #7:List S --> #5:List Unifier 2489 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#6:List, 1) I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #6:List) Z --> 1 Y --> 1 S --> #5:List Unifier 2490 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#7:List, #6:List) I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #7:List) Z --> #6:List Y --> 1 S --> #5:List Unifier 2491 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#7:List, #6:List) I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #7:List) Z --> 1 Y --> #6:List S --> #5:List Unifier 2492 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, j(#6:List, #7:List)) I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #8:List) Z --> #6:List Y --> #7:List S --> #5:List Unifier 2493 A --> 1 B --> f(#5:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#6:List, 1) G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#7:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #6:List) Z --> 1 Y --> 1 S --> #4:List Unifier 2494 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#7:List, #6:List) G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #7:List) Z --> #6:List Y --> 1 S --> #4:List Unifier 2495 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#7:List, #6:List) G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #7:List) Z --> 1 Y --> #6:List S --> #4:List Unifier 2496 A --> 1 B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#8:List, j(#6:List, #7:List)) G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #8:List) Z --> #6:List Y --> #7:List S --> #4:List Unifier 2497 A --> 1 B --> f(#5:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#6:List, 1) I --> #4:List U --> 1 V --> #5:List W --> f(#7:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #6:List) Z --> 1 Y --> 1 S --> #4:List Unifier 2498 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#7:List, #6:List) I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #7:List) Z --> #6:List Y --> 1 S --> #4:List Unifier 2499 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#7:List, #6:List) I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #7:List) Z --> 1 Y --> #6:List S --> #4:List Unifier 2500 A --> 1 B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#8:List, j(#6:List, #7:List)) I --> #4:List U --> 1 V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #8:List) Z --> #6:List Y --> #7:List S --> #4:List Unifier 2501 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#6:List, 1) G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #6:List) Z --> 1 Y --> 1 S --> #5:List Unifier 2502 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#7:List, #6:List) G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #7:List) Z --> #6:List Y --> 1 S --> #5:List Unifier 2503 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#7:List, #6:List) G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #7:List) Z --> 1 Y --> #6:List S --> #5:List Unifier 2504 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, j(#6:List, #7:List)) G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #8:List) Z --> #6:List Y --> #7:List S --> #5:List Unifier 2505 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#6:List, 1) I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #6:List) Z --> 1 Y --> 1 S --> #5:List Unifier 2506 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#7:List, #6:List) I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #7:List) Z --> #6:List Y --> 1 S --> #5:List Unifier 2507 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#7:List, #6:List) I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #7:List) Z --> 1 Y --> #6:List S --> #5:List Unifier 2508 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, j(#6:List, #7:List)) I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #8:List) Z --> #6:List Y --> #7:List S --> #5:List Unifier 2509 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #4:List) D --> #3:List H --> 1 G --> 1 I --> f(1, #5:List) U --> 1 V --> f(#1:List, #2:Elt, #6:List) W --> #4:List X --> f(#3:List, #2:Elt, 1) Z --> 1 Y --> 1 S --> #5:List Unifier 2510 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #4:List) D --> #3:List H --> 1 G --> 1 I --> f(#5:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #4:List X --> f(#3:List, #2:Elt, 1) Z --> #5:List Y --> 1 S --> #6:List Unifier 2511 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #4:List) D --> #3:List H --> 1 G --> 1 I --> f(#5:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #4:List X --> f(#3:List, #2:Elt, 1) Z --> 1 Y --> #5:List S --> #6:List Unifier 2512 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #4:List) D --> #3:List H --> 1 G --> 1 I --> f(j(#5:List, #6:List), #7:List) U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #4:List X --> f(#3:List, #2:Elt, 1) Z --> #5:List Y --> #6:List S --> #7:List Unifier 2513 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #5:List) D --> #3:List H --> #4:List G --> 1 I --> f(1, #6:List) U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #5:List X --> f(#3:List, #2:Elt, #4:List) Z --> 1 Y --> 1 S --> #6:List Unifier 2514 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> #4:List G --> 1 I --> f(#6:List, #7:List) U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt, #4:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 2515 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> #4:List G --> 1 I --> f(#6:List, #7:List) U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt, #4:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 2516 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> #3:List H --> #4:List G --> 1 I --> f(j(#6:List, #7:List), #8:List) U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> f(#3:List, #2:Elt, #4:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 2517 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #5:List) D --> #3:List H --> 1 G --> #4:List I --> f(1, #6:List) U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #5:List X --> f(#3:List, #2:Elt, #4:List) Z --> 1 Y --> 1 S --> #6:List Unifier 2518 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> 1 G --> #4:List I --> f(#6:List, #7:List) U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt, #4:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 2519 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> 1 G --> #4:List I --> f(#6:List, #7:List) U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt, #4:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 2520 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> #3:List H --> 1 G --> #4:List I --> f(j(#6:List, #7:List), #8:List) U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> f(#3:List, #2:Elt, #4:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 2521 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> #3:List H --> #4:List G --> #5:List I --> f(1, #7:List) U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #6:List X --> f(#3:List, #2:Elt, j(#4:List, #5:List)) Z --> 1 Y --> 1 S --> #7:List Unifier 2522 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#7:List, #8:List) U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt, j(#4:List, #5:List)) Z --> #7:List Y --> 1 S --> #8:List Unifier 2523 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#7:List, #8:List) U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt, j(#4:List, #5:List)) Z --> 1 Y --> #7:List S --> #8:List Unifier 2524 A --> 1 B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> #3:List H --> #4:List G --> #5:List I --> f(j(#7:List, #8:List), #9:List) U --> 1 V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> f(#3:List, #2:Elt, j(#4:List, #5:List)) Z --> #7:List Y --> #8:List S --> #9:List Unifier 2525 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(1, #5:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, 1) Z --> 1 Y --> 1 S --> #5:List Unifier 2526 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#5:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, 1) Z --> #5:List Y --> 1 S --> #6:List Unifier 2527 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#5:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, 1) Z --> 1 Y --> #5:List S --> #6:List Unifier 2528 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(j(#5:List, #6:List), #7:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, 1) Z --> #5:List Y --> #6:List S --> #7:List Unifier 2529 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(1, #6:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List) Z --> 1 Y --> 1 S --> #6:List Unifier 2530 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#6:List, #7:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 2531 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#6:List, #7:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 2532 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(j(#6:List, #7:List), #8:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 2533 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(1, #6:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List) Z --> 1 Y --> 1 S --> #6:List Unifier 2534 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#6:List, #7:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 2535 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#6:List, #7:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 2536 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(j(#6:List, #7:List), #8:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 2537 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(1, #7:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List)) Z --> 1 Y --> 1 S --> #7:List Unifier 2538 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#7:List, #8:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List)) Z --> #7:List Y --> 1 S --> #8:List Unifier 2539 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#7:List, #8:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List)) Z --> 1 Y --> #7:List S --> #8:List Unifier 2540 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(j(#7:List, #8:List), #9:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List)) Z --> #7:List Y --> #8:List S --> #9:List Unifier 2541 A --> 1 B --> f(#4:List, #6:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(1, #5:List) U --> 1 V --> #4:List W --> f(#6:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, 1) Z --> 1 Y --> 1 S --> #5:List Unifier 2542 A --> 1 B --> f(#4:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#5:List, #6:List) U --> 1 V --> #4:List W --> f(#7:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, 1) Z --> #5:List Y --> 1 S --> #6:List Unifier 2543 A --> 1 B --> f(#4:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#5:List, #6:List) U --> 1 V --> #4:List W --> f(#7:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, 1) Z --> 1 Y --> #5:List S --> #6:List Unifier 2544 A --> 1 B --> f(#4:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(j(#5:List, #6:List), #7:List) U --> 1 V --> #4:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, 1) Z --> #5:List Y --> #6:List S --> #7:List Unifier 2545 A --> 1 B --> f(#5:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(1, #6:List) U --> 1 V --> #5:List W --> f(#7:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List) Z --> 1 Y --> 1 S --> #6:List Unifier 2546 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#6:List, #7:List) U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 2547 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#6:List, #7:List) U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 2548 A --> 1 B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(j(#6:List, #7:List), #8:List) U --> 1 V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 2549 A --> 1 B --> f(#5:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(1, #6:List) U --> 1 V --> #5:List W --> f(#7:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List) Z --> 1 Y --> 1 S --> #6:List Unifier 2550 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#6:List, #7:List) U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 2551 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#6:List, #7:List) U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 2552 A --> 1 B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(j(#6:List, #7:List), #8:List) U --> 1 V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 2553 A --> 1 B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(1, #7:List) U --> 1 V --> #6:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, j(#4:List, #5:List)) Z --> 1 Y --> 1 S --> #7:List Unifier 2554 A --> 1 B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#7:List, #8:List) U --> 1 V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, j(#4:List, #5:List)) Z --> #7:List Y --> 1 S --> #8:List Unifier 2555 A --> 1 B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#7:List, #8:List) U --> 1 V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, j(#4:List, #5:List)) Z --> 1 Y --> #7:List S --> #8:List Unifier 2556 A --> 1 B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(j(#7:List, #8:List), #9:List) U --> 1 V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, j(#4:List, #5:List)) Z --> #7:List Y --> #8:List S --> #9:List Unifier 2557 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(1, #5:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, 1) Z --> 1 Y --> 1 S --> #5:List Unifier 2558 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#5:List, #6:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, 1) Z --> #5:List Y --> 1 S --> #6:List Unifier 2559 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#5:List, #6:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, 1) Z --> 1 Y --> #5:List S --> #6:List Unifier 2560 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(j(#5:List, #6:List), #7:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, 1) Z --> #5:List Y --> #6:List S --> #7:List Unifier 2561 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(1, #6:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List) Z --> 1 Y --> 1 S --> #6:List Unifier 2562 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#6:List, #7:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 2563 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#6:List, #7:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 2564 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(j(#6:List, #7:List), #8:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 2565 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(1, #6:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List) Z --> 1 Y --> 1 S --> #6:List Unifier 2566 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#6:List, #7:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 2567 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#6:List, #7:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 2568 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(j(#6:List, #7:List), #8:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 2569 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(1, #7:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, j(#5:List, #6:List)) Z --> 1 Y --> 1 S --> #7:List Unifier 2570 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#7:List, #8:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, j(#5:List, #6:List)) Z --> #7:List Y --> 1 S --> #8:List Unifier 2571 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#7:List, #8:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, j(#5:List, #6:List)) Z --> 1 Y --> #7:List S --> #8:List Unifier 2572 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(j(#7:List, #8:List), #9:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, j(#5:List, #6:List)) Z --> #7:List Y --> #8:List S --> #9:List Unifier 2573 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #4:List) D --> #3:List H --> 1 G --> 1 I --> f(#6:List, #5:List) U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #4:List X --> f(#3:List, #2:Elt) Z --> f(1, #6:List) Y --> 1 S --> #5:List Unifier 2574 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> #4:List G --> 1 I --> f(#7:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt) Z --> f(#4:List, #7:List) Y --> 1 S --> #6:List Unifier 2575 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> 1 G --> #4:List I --> f(#7:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt) Z --> f(#4:List, #7:List) Y --> 1 S --> #6:List Unifier 2576 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#8:List, #7:List) U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt) Z --> f(j(#4:List, #5:List), #8:List) Y --> 1 S --> #7:List Unifier 2577 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #4:List) D --> #3:List H --> 1 G --> 1 I --> f(#6:List, #5:List) U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #4:List X --> f(#3:List, #2:Elt) Z --> 1 Y --> f(1, #6:List) S --> #5:List Unifier 2578 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> #4:List G --> 1 I --> f(#7:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt) Z --> 1 Y --> f(#4:List, #7:List) S --> #6:List Unifier 2579 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> 1 G --> #4:List I --> f(#7:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt) Z --> 1 Y --> f(#4:List, #7:List) S --> #6:List Unifier 2580 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#8:List, #7:List) U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt) Z --> 1 Y --> f(j(#4:List, #5:List), #8:List) S --> #7:List Unifier 2581 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#6:List, #5:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> f(1, #6:List) Y --> 1 S --> #5:List Unifier 2582 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#7:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> f(#5:List, #7:List) Y --> 1 S --> #6:List Unifier 2583 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#7:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> f(#5:List, #7:List) Y --> 1 S --> #6:List Unifier 2584 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#8:List, #7:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> f(j(#5:List, #6:List), #8:List) Y --> 1 S --> #7:List Unifier 2585 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#6:List, #5:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> f(1, #6:List) S --> #5:List Unifier 2586 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#7:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> f(#5:List, #7:List) S --> #6:List Unifier 2587 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#7:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> f(#5:List, #7:List) S --> #6:List Unifier 2588 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#8:List, #7:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> f(j(#5:List, #6:List), #8:List) S --> #7:List Unifier 2589 A --> 1 B --> f(#4:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#6:List, #5:List) U --> 1 V --> #4:List W --> f(#7:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> f(1, #6:List) Y --> 1 S --> #5:List Unifier 2590 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#7:List, #6:List) U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> f(#4:List, #7:List) Y --> 1 S --> #6:List Unifier 2591 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#7:List, #6:List) U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> f(#4:List, #7:List) Y --> 1 S --> #6:List Unifier 2592 A --> 1 B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#8:List, #7:List) U --> 1 V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> f(j(#4:List, #5:List), #8:List) Y --> 1 S --> #7:List Unifier 2593 A --> 1 B --> f(#4:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#6:List, #5:List) U --> 1 V --> #4:List W --> f(#7:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> 1 Y --> f(1, #6:List) S --> #5:List Unifier 2594 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#7:List, #6:List) U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> 1 Y --> f(#4:List, #7:List) S --> #6:List Unifier 2595 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#7:List, #6:List) U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> 1 Y --> f(#4:List, #7:List) S --> #6:List Unifier 2596 A --> 1 B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#8:List, #7:List) U --> 1 V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> 1 Y --> f(j(#4:List, #5:List), #8:List) S --> #7:List Unifier 2597 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#6:List, #5:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> f(1, #6:List) Y --> 1 S --> #5:List Unifier 2598 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#7:List, #6:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> f(#5:List, #7:List) Y --> 1 S --> #6:List Unifier 2599 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#7:List, #6:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> f(#5:List, #7:List) Y --> 1 S --> #6:List Unifier 2600 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#8:List, #7:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> f(j(#5:List, #6:List), #8:List) Y --> 1 S --> #7:List Unifier 2601 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#6:List, #5:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> 1 Y --> f(1, #6:List) S --> #5:List Unifier 2602 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#7:List, #6:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> 1 Y --> f(#5:List, #7:List) S --> #6:List Unifier 2603 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#7:List, #6:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> 1 Y --> f(#5:List, #7:List) S --> #6:List Unifier 2604 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#8:List, #7:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> 1 Y --> f(j(#5:List, #6:List), #8:List) S --> #7:List Unifier 2605 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #5:List) D --> #3:List H --> f(1, #6:List) G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #5:List X --> f(#3:List, #2:Elt) Z --> 1 Y --> 1 S --> f(#6:List, #4:List) Unifier 2606 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> f(#6:List, #7:List) G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt) Z --> #6:List Y --> 1 S --> f(#7:List, #4:List) Unifier 2607 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> f(#6:List, #7:List) G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt) Z --> 1 Y --> #6:List S --> f(#7:List, #4:List) Unifier 2608 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> #3:List H --> f(j(#6:List, #7:List), #8:List) G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> f(#3:List, #2:Elt) Z --> #6:List Y --> #7:List S --> f(#8:List, #4:List) Unifier 2609 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #5:List) D --> #3:List H --> 1 G --> f(1, #6:List) I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #5:List X --> f(#3:List, #2:Elt) Z --> 1 Y --> 1 S --> f(#6:List, #4:List) Unifier 2610 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> 1 G --> f(#6:List, #7:List) I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt) Z --> #6:List Y --> 1 S --> f(#7:List, #4:List) Unifier 2611 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> 1 G --> f(#6:List, #7:List) I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt) Z --> 1 Y --> #6:List S --> f(#7:List, #4:List) Unifier 2612 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> #3:List H --> 1 G --> f(j(#6:List, #7:List), #8:List) I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> f(#3:List, #2:Elt) Z --> #6:List Y --> #7:List S --> f(#8:List, #4:List) Unifier 2613 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(1, #6:List) G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> 1 S --> f(#6:List, #5:List) Unifier 2614 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#6:List, #7:List) G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> #6:List Y --> 1 S --> f(#7:List, #5:List) Unifier 2615 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#6:List, #7:List) G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> #6:List S --> f(#7:List, #5:List) Unifier 2616 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(j(#6:List, #7:List), #8:List) G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> #6:List Y --> #7:List S --> f(#8:List, #5:List) Unifier 2617 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(1, #6:List) I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> 1 S --> f(#6:List, #5:List) Unifier 2618 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#6:List, #7:List) I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> #6:List Y --> 1 S --> f(#7:List, #5:List) Unifier 2619 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#6:List, #7:List) I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> #6:List S --> f(#7:List, #5:List) Unifier 2620 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(j(#6:List, #7:List), #8:List) I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> #6:List Y --> #7:List S --> f(#8:List, #5:List) Unifier 2621 A --> 1 B --> f(#5:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(1, #6:List) G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#7:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> 1 Y --> 1 S --> f(#6:List, #4:List) Unifier 2622 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#6:List, #7:List) G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> #6:List Y --> 1 S --> f(#7:List, #4:List) Unifier 2623 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#6:List, #7:List) G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> 1 Y --> #6:List S --> f(#7:List, #4:List) Unifier 2624 A --> 1 B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(j(#6:List, #7:List), #8:List) G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> #6:List Y --> #7:List S --> f(#8:List, #4:List) Unifier 2625 A --> 1 B --> f(#5:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(1, #6:List) I --> #4:List U --> 1 V --> #5:List W --> f(#7:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> 1 Y --> 1 S --> f(#6:List, #4:List) Unifier 2626 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#6:List, #7:List) I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> #6:List Y --> 1 S --> f(#7:List, #4:List) Unifier 2627 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#6:List, #7:List) I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> 1 Y --> #6:List S --> f(#7:List, #4:List) Unifier 2628 A --> 1 B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(j(#6:List, #7:List), #8:List) I --> #4:List U --> 1 V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> #6:List Y --> #7:List S --> f(#8:List, #4:List) Unifier 2629 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(1, #6:List) G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> 1 Y --> 1 S --> f(#6:List, #5:List) Unifier 2630 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#6:List, #7:List) G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> #6:List Y --> 1 S --> f(#7:List, #5:List) Unifier 2631 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#6:List, #7:List) G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> 1 Y --> #6:List S --> f(#7:List, #5:List) Unifier 2632 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(j(#6:List, #7:List), #8:List) G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> #6:List Y --> #7:List S --> f(#8:List, #5:List) Unifier 2633 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(1, #6:List) I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> 1 Y --> 1 S --> f(#6:List, #5:List) Unifier 2634 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#6:List, #7:List) I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> #6:List Y --> 1 S --> f(#7:List, #5:List) Unifier 2635 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#6:List, #7:List) I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> 1 Y --> #6:List S --> f(#7:List, #5:List) Unifier 2636 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(j(#6:List, #7:List), #8:List) I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> #6:List Y --> #7:List S --> f(#8:List, #5:List) Unifier 2637 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #6:List) W --> #5:List X --> f(#3:List, #2:Elt) Z --> 1 Y --> 1 S --> #4:List Unifier 2638 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #5:List) D --> #3:List H --> #6:List G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #5:List X --> f(#3:List, #2:Elt) Z --> #6:List Y --> 1 S --> #4:List Unifier 2639 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #5:List) D --> #3:List H --> 1 G --> #6:List I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #5:List X --> f(#3:List, #2:Elt) Z --> #6:List Y --> 1 S --> #4:List Unifier 2640 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #7:List X --> f(#3:List, #2:Elt) Z --> j(#4:List, #5:List) Y --> 1 S --> #6:List Unifier 2641 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #5:List) D --> #3:List H --> #6:List G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #5:List X --> f(#3:List, #2:Elt) Z --> 1 Y --> #6:List S --> #4:List Unifier 2642 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> j(#6:List, #7:List) G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #4:List Unifier 2643 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> #7:List G --> #6:List I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #4:List Unifier 2644 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> #3:List H --> j(#7:List, #9:List) G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #6:List X --> f(#3:List, #2:Elt) Z --> j(#4:List, #9:List) Y --> #7:List S --> #5:List Unifier 2645 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #5:List) D --> #3:List H --> 1 G --> #6:List I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #5:List X --> f(#3:List, #2:Elt) Z --> 1 Y --> #6:List S --> #4:List Unifier 2646 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> #6:List G --> #7:List I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #4:List Unifier 2647 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> 1 G --> j(#6:List, #7:List) I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #4:List Unifier 2648 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> #3:List H --> #4:List G --> j(#7:List, #9:List) I --> #5:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #6:List X --> f(#3:List, #2:Elt) Z --> j(#4:List, #9:List) Y --> #7:List S --> #5:List Unifier 2649 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #7:List X --> f(#3:List, #2:Elt) Z --> 1 Y --> j(#4:List, #5:List) S --> #6:List Unifier 2650 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> #3:List H --> j(#7:List, #9:List) G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #6:List X --> f(#3:List, #2:Elt) Z --> #7:List Y --> j(#4:List, #9:List) S --> #5:List Unifier 2651 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> #3:List H --> #4:List G --> j(#7:List, #9:List) I --> #5:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #6:List X --> f(#3:List, #2:Elt) Z --> #7:List Y --> j(#4:List, #9:List) S --> #5:List Unifier 2652 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #5:List) D --> #3:List H --> j(#7:List, #9:List) G --> j(#8:List, #10:List) I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #6:List) W --> #5:List X --> f(#3:List, #2:Elt) Z --> j(#7:List, #8:List) Y --> j(#9:List, #10:List) S --> #4:List Unifier 2653 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> 1 S --> #5:List Unifier 2654 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #6:List G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> #6:List Y --> 1 S --> #5:List Unifier 2655 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #6:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> #6:List Y --> 1 S --> #5:List Unifier 2656 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> j(#5:List, #6:List) Y --> 1 S --> #7:List Unifier 2657 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #6:List G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> #6:List S --> #5:List Unifier 2658 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> j(#6:List, #7:List) G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #5:List Unifier 2659 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #7:List G --> #6:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #5:List Unifier 2660 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> j(#7:List, #8:List) G --> #5:List I --> #6:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> j(#5:List, #8:List) Y --> #7:List S --> #6:List Unifier 2661 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #6:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> #6:List S --> #5:List Unifier 2662 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #6:List G --> #7:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #5:List Unifier 2663 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> j(#6:List, #7:List) I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #5:List Unifier 2664 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> j(#7:List, #8:List) I --> #6:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> j(#5:List, #8:List) Y --> #7:List S --> #6:List Unifier 2665 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> j(#5:List, #6:List) S --> #7:List Unifier 2666 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> j(#7:List, #8:List) G --> #5:List I --> #6:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> #7:List Y --> j(#5:List, #8:List) S --> #6:List Unifier 2667 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> j(#7:List, #8:List) I --> #6:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> #7:List Y --> j(#5:List, #8:List) S --> #6:List Unifier 2668 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> j(#6:List, #8:List) G --> j(#7:List, #9:List) I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> j(#6:List, #7:List) Y --> j(#8:List, #9:List) S --> #5:List Unifier 2669 A --> 1 B --> f(#5:List, #6:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#6:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> 1 Y --> 1 S --> #4:List Unifier 2670 A --> 1 B --> f(#5:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #6:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#7:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> #6:List Y --> 1 S --> #4:List Unifier 2671 A --> 1 B --> f(#5:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #6:List I --> #4:List U --> 1 V --> #5:List W --> f(#7:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> #6:List Y --> 1 S --> #4:List Unifier 2672 A --> 1 B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #7:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> j(#4:List, #5:List) Y --> 1 S --> #6:List Unifier 2673 A --> 1 B --> f(#5:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #6:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#7:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> 1 Y --> #6:List S --> #4:List Unifier 2674 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> j(#6:List, #7:List) G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> #6:List Y --> #7:List S --> #4:List Unifier 2675 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #7:List G --> #6:List I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> #6:List Y --> #7:List S --> #4:List Unifier 2676 A --> 1 B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> j(#7:List, #9:List) G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> j(#4:List, #9:List) Y --> #7:List S --> #5:List Unifier 2677 A --> 1 B --> f(#5:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #6:List I --> #4:List U --> 1 V --> #5:List W --> f(#7:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> 1 Y --> #6:List S --> #4:List Unifier 2678 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #6:List G --> #7:List I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> #6:List Y --> #7:List S --> #4:List Unifier 2679 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> j(#6:List, #7:List) I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> #6:List Y --> #7:List S --> #4:List Unifier 2680 A --> 1 B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> j(#7:List, #9:List) I --> #5:List U --> 1 V --> #6:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> j(#4:List, #9:List) Y --> #7:List S --> #5:List Unifier 2681 A --> 1 B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #7:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> 1 Y --> j(#4:List, #5:List) S --> #6:List Unifier 2682 A --> 1 B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> j(#7:List, #9:List) G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> #7:List Y --> j(#4:List, #9:List) S --> #5:List Unifier 2683 A --> 1 B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> j(#7:List, #9:List) I --> #5:List U --> 1 V --> #6:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> #7:List Y --> j(#4:List, #9:List) S --> #5:List Unifier 2684 A --> 1 B --> f(#5:List, #6:List) E --> #1:Elt C --> #2:List D --> #3:List H --> j(#7:List, #9:List) G --> j(#8:List, #10:List) I --> #4:List U --> 1 V --> #5:List W --> f(#6:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> j(#7:List, #8:List) Y --> j(#9:List, #10:List) S --> #4:List Unifier 2685 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> 1 Y --> 1 S --> #5:List Unifier 2686 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #6:List G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> #6:List Y --> 1 S --> #5:List Unifier 2687 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #6:List I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> #6:List Y --> 1 S --> #5:List Unifier 2688 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> j(#5:List, #6:List) Y --> 1 S --> #7:List Unifier 2689 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #6:List G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> 1 Y --> #6:List S --> #5:List Unifier 2690 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> j(#6:List, #7:List) G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #5:List Unifier 2691 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #7:List G --> #6:List I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #5:List Unifier 2692 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> j(#7:List, #8:List) G --> #5:List I --> #6:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> j(#5:List, #8:List) Y --> #7:List S --> #6:List Unifier 2693 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #6:List I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> 1 Y --> #6:List S --> #5:List Unifier 2694 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #6:List G --> #7:List I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #5:List Unifier 2695 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> j(#6:List, #7:List) I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> #6:List Y --> #7:List S --> #5:List Unifier 2696 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> j(#7:List, #8:List) I --> #6:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> j(#5:List, #8:List) Y --> #7:List S --> #6:List Unifier 2697 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> 1 Y --> j(#5:List, #6:List) S --> #7:List Unifier 2698 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> j(#7:List, #8:List) G --> #5:List I --> #6:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> #7:List Y --> j(#5:List, #8:List) S --> #6:List Unifier 2699 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> j(#7:List, #8:List) I --> #6:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> #7:List Y --> j(#5:List, #8:List) S --> #6:List Unifier 2700 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> j(#6:List, #8:List) G --> j(#7:List, #9:List) I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> j(#6:List, #7:List) Y --> j(#8:List, #9:List) S --> #5:List Unifier 2701 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #3:List) D --> f(#4:List, #6:List) H --> 1 G --> 1 I --> f(#7:List, #5:List) U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #3:List X --> #4:List Z --> f(#6:List, #2:Elt, 1, #7:List) Y --> 1 S --> #5:List Unifier 2702 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #4:List) D --> f(#5:List, #7:List) H --> #3:List G --> 1 I --> f(#8:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #4:List X --> #5:List Z --> f(#7:List, #2:Elt, #3:List, #8:List) Y --> 1 S --> #6:List Unifier 2703 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #4:List) D --> f(#5:List, #7:List) H --> 1 G --> #3:List I --> f(#8:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #4:List X --> #5:List Z --> f(#7:List, #2:Elt, #3:List, #8:List) Y --> 1 S --> #6:List Unifier 2704 A --> 1 B --> #1:List E --> #2:Elt C --> f(#10:List, #5:List) D --> f(#6:List, #8:List) H --> #3:List G --> #4:List I --> f(#9:List, #7:List) U --> 1 V --> f(#1:List, #2:Elt, #10:List) W --> #5:List X --> #6:List Z --> f(#8:List, #2:Elt, j(#3:List, #4:List), #9:List) Y --> 1 S --> #7:List Unifier 2705 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #3:List) D --> f(#4:List, #6:List) H --> 1 G --> 1 I --> f(#7:List, #5:List) U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #3:List X --> #4:List Z --> 1 Y --> f(#6:List, #2:Elt, 1, #7:List) S --> #5:List Unifier 2706 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #4:List) D --> f(#5:List, #7:List) H --> #3:List G --> 1 I --> f(#8:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #4:List X --> #5:List Z --> 1 Y --> f(#7:List, #2:Elt, #3:List, #8:List) S --> #6:List Unifier 2707 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #4:List) D --> f(#5:List, #7:List) H --> 1 G --> #3:List I --> f(#8:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #4:List X --> #5:List Z --> 1 Y --> f(#7:List, #2:Elt, #3:List, #8:List) S --> #6:List Unifier 2708 A --> 1 B --> #1:List E --> #2:Elt C --> f(#10:List, #5:List) D --> f(#6:List, #8:List) H --> #3:List G --> #4:List I --> f(#9:List, #7:List) U --> 1 V --> f(#1:List, #2:Elt, #10:List) W --> #5:List X --> #6:List Z --> 1 Y --> f(#8:List, #2:Elt, j(#3:List, #4:List), #9:List) S --> #7:List Unifier 2709 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#4:List, #6:List) H --> 1 G --> 1 I --> f(#7:List, #5:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> f(#6:List, #2:Elt, 1, #7:List) Y --> 1 S --> #5:List Unifier 2710 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #7:List) H --> #4:List G --> 1 I --> f(#8:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #5:List Z --> f(#7:List, #2:Elt, #4:List, #8:List) Y --> 1 S --> #6:List Unifier 2711 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #7:List) H --> 1 G --> #4:List I --> f(#8:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #5:List Z --> f(#7:List, #2:Elt, #4:List, #8:List) Y --> 1 S --> #6:List Unifier 2712 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #8:List) H --> #4:List G --> #5:List I --> f(#9:List, #7:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> f(#8:List, #2:Elt, j(#4:List, #5:List), #9:List) Y --> 1 S --> #7:List Unifier 2713 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#4:List, #6:List) H --> 1 G --> 1 I --> f(#7:List, #5:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> f(#6:List, #2:Elt, 1, #7:List) S --> #5:List Unifier 2714 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #7:List) H --> #4:List G --> 1 I --> f(#8:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #5:List Z --> 1 Y --> f(#7:List, #2:Elt, #4:List, #8:List) S --> #6:List Unifier 2715 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #7:List) H --> 1 G --> #4:List I --> f(#8:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #5:List Z --> 1 Y --> f(#7:List, #2:Elt, #4:List, #8:List) S --> #6:List Unifier 2716 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #8:List) H --> #4:List G --> #5:List I --> f(#9:List, #7:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> f(#8:List, #2:Elt, j(#4:List, #5:List), #9:List) S --> #7:List Unifier 2717 A --> 1 B --> f(#3:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#4:List, #6:List) H --> 1 G --> 1 I --> f(#7:List, #5:List) U --> 1 V --> #3:List W --> f(#8:List, #1:Elt, #2:List) X --> #4:List Z --> f(#6:List, #1:Elt, 1, #7:List) Y --> 1 S --> #5:List Unifier 2718 A --> 1 B --> f(#4:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #7:List) H --> #3:List G --> 1 I --> f(#8:List, #6:List) U --> 1 V --> #4:List W --> f(#9:List, #1:Elt, #2:List) X --> #5:List Z --> f(#7:List, #1:Elt, #3:List, #8:List) Y --> 1 S --> #6:List Unifier 2719 A --> 1 B --> f(#4:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #7:List) H --> 1 G --> #3:List I --> f(#8:List, #6:List) U --> 1 V --> #4:List W --> f(#9:List, #1:Elt, #2:List) X --> #5:List Z --> f(#7:List, #1:Elt, #3:List, #8:List) Y --> 1 S --> #6:List Unifier 2720 A --> 1 B --> f(#5:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #8:List) H --> #3:List G --> #4:List I --> f(#9:List, #7:List) U --> 1 V --> #5:List W --> f(#10:List, #1:Elt, #2:List) X --> #6:List Z --> f(#8:List, #1:Elt, j(#3:List, #4:List), #9:List) Y --> 1 S --> #7:List Unifier 2721 A --> 1 B --> f(#3:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#4:List, #6:List) H --> 1 G --> 1 I --> f(#7:List, #5:List) U --> 1 V --> #3:List W --> f(#8:List, #1:Elt, #2:List) X --> #4:List Z --> 1 Y --> f(#6:List, #1:Elt, 1, #7:List) S --> #5:List Unifier 2722 A --> 1 B --> f(#4:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #7:List) H --> #3:List G --> 1 I --> f(#8:List, #6:List) U --> 1 V --> #4:List W --> f(#9:List, #1:Elt, #2:List) X --> #5:List Z --> 1 Y --> f(#7:List, #1:Elt, #3:List, #8:List) S --> #6:List Unifier 2723 A --> 1 B --> f(#4:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #7:List) H --> 1 G --> #3:List I --> f(#8:List, #6:List) U --> 1 V --> #4:List W --> f(#9:List, #1:Elt, #2:List) X --> #5:List Z --> 1 Y --> f(#7:List, #1:Elt, #3:List, #8:List) S --> #6:List Unifier 2724 A --> 1 B --> f(#5:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #8:List) H --> #3:List G --> #4:List I --> f(#9:List, #7:List) U --> 1 V --> #5:List W --> f(#10:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> f(#8:List, #1:Elt, j(#3:List, #4:List), #9:List) S --> #7:List Unifier 2725 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#4:List, #6:List) H --> 1 G --> 1 I --> f(#7:List, #5:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> f(#6:List, #2:Elt, 1, #7:List) Y --> 1 S --> #5:List Unifier 2726 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #7:List) H --> #4:List G --> 1 I --> f(#8:List, #6:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #5:List Z --> f(#7:List, #2:Elt, #4:List, #8:List) Y --> 1 S --> #6:List Unifier 2727 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #7:List) H --> 1 G --> #4:List I --> f(#8:List, #6:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #5:List Z --> f(#7:List, #2:Elt, #4:List, #8:List) Y --> 1 S --> #6:List Unifier 2728 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #8:List) H --> #4:List G --> #5:List I --> f(#9:List, #7:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> f(#8:List, #2:Elt, j(#4:List, #5:List), #9:List) Y --> 1 S --> #7:List Unifier 2729 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#4:List, #6:List) H --> 1 G --> 1 I --> f(#7:List, #5:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> f(#6:List, #2:Elt, 1, #7:List) S --> #5:List Unifier 2730 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #7:List) H --> #4:List G --> 1 I --> f(#8:List, #6:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #5:List Z --> 1 Y --> f(#7:List, #2:Elt, #4:List, #8:List) S --> #6:List Unifier 2731 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #7:List) H --> 1 G --> #4:List I --> f(#8:List, #6:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #5:List Z --> 1 Y --> f(#7:List, #2:Elt, #4:List, #8:List) S --> #6:List Unifier 2732 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #8:List) H --> #4:List G --> #5:List I --> f(#9:List, #7:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> f(#8:List, #2:Elt, j(#4:List, #5:List), #9:List) S --> #7:List Unifier 2733 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #4:List) D --> f(#5:List, #6:List) H --> f(#7:List, #8:List) G --> 1 I --> #3:List U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #4:List X --> #5:List Z --> f(#6:List, #2:Elt, #7:List) Y --> 1 S --> f(#8:List, #3:List) Unifier 2734 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #4:List) D --> f(#5:List, #6:List) H --> f(#7:List, #8:List) G --> 1 I --> #3:List U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #4:List X --> #5:List Z --> 1 Y --> f(#6:List, #2:Elt, #7:List) S --> f(#8:List, #3:List) Unifier 2735 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #4:List) D --> f(#5:List, #6:List) H --> 1 G --> f(#7:List, #8:List) I --> #3:List U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #4:List X --> #5:List Z --> f(#6:List, #2:Elt, #7:List) Y --> 1 S --> f(#8:List, #3:List) Unifier 2736 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #4:List) D --> f(#5:List, #6:List) H --> 1 G --> f(#7:List, #8:List) I --> #3:List U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #4:List X --> #5:List Z --> 1 Y --> f(#6:List, #2:Elt, #7:List) S --> f(#8:List, #3:List) Unifier 2737 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #6:List) H --> f(#7:List, #8:List) G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #5:List Z --> f(#6:List, #2:Elt, #7:List) Y --> 1 S --> f(#8:List, #4:List) Unifier 2738 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #6:List) H --> f(#7:List, #8:List) G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #5:List Z --> 1 Y --> f(#6:List, #2:Elt, #7:List) S --> f(#8:List, #4:List) Unifier 2739 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #6:List) H --> 1 G --> f(#7:List, #8:List) I --> #4:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #5:List Z --> f(#6:List, #2:Elt, #7:List) Y --> 1 S --> f(#8:List, #4:List) Unifier 2740 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #6:List) H --> 1 G --> f(#7:List, #8:List) I --> #4:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #5:List Z --> 1 Y --> f(#6:List, #2:Elt, #7:List) S --> f(#8:List, #4:List) Unifier 2741 A --> 1 B --> f(#4:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #6:List) H --> f(#7:List, #8:List) G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#9:List, #1:Elt, #2:List) X --> #5:List Z --> f(#6:List, #1:Elt, #7:List) Y --> 1 S --> f(#8:List, #3:List) Unifier 2742 A --> 1 B --> f(#4:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #6:List) H --> f(#7:List, #8:List) G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#9:List, #1:Elt, #2:List) X --> #5:List Z --> 1 Y --> f(#6:List, #1:Elt, #7:List) S --> f(#8:List, #3:List) Unifier 2743 A --> 1 B --> f(#4:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #6:List) H --> 1 G --> f(#7:List, #8:List) I --> #3:List U --> 1 V --> #4:List W --> f(#9:List, #1:Elt, #2:List) X --> #5:List Z --> f(#6:List, #1:Elt, #7:List) Y --> 1 S --> f(#8:List, #3:List) Unifier 2744 A --> 1 B --> f(#4:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #6:List) H --> 1 G --> f(#7:List, #8:List) I --> #3:List U --> 1 V --> #4:List W --> f(#9:List, #1:Elt, #2:List) X --> #5:List Z --> 1 Y --> f(#6:List, #1:Elt, #7:List) S --> f(#8:List, #3:List) Unifier 2745 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #6:List) H --> f(#7:List, #8:List) G --> 1 I --> #4:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #5:List Z --> f(#6:List, #2:Elt, #7:List) Y --> 1 S --> f(#8:List, #4:List) Unifier 2746 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #6:List) H --> f(#7:List, #8:List) G --> 1 I --> #4:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #5:List Z --> 1 Y --> f(#6:List, #2:Elt, #7:List) S --> f(#8:List, #4:List) Unifier 2747 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #6:List) H --> 1 G --> f(#7:List, #8:List) I --> #4:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #5:List Z --> f(#6:List, #2:Elt, #7:List) Y --> 1 S --> f(#8:List, #4:List) Unifier 2748 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #6:List) H --> 1 G --> f(#7:List, #8:List) I --> #4:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #5:List Z --> 1 Y --> f(#6:List, #2:Elt, #7:List) S --> f(#8:List, #4:List) Unifier 2749 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #4:List) D --> f(#5:List, #6:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #4:List X --> #5:List Z --> f(#6:List, #2:Elt, 1) Y --> 1 S --> #3:List Unifier 2750 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> f(#6:List, #7:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #6:List Z --> f(#7:List, #2:Elt, #3:List) Y --> 1 S --> #4:List Unifier 2751 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> f(#6:List, #7:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #6:List Z --> f(#7:List, #2:Elt, #3:List) Y --> 1 S --> #4:List Unifier 2752 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> f(#7:List, #8:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #7:List Z --> f(#8:List, #2:Elt, j(#3:List, #4:List)) Y --> 1 S --> #5:List Unifier 2753 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #4:List) D --> f(#5:List, #6:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #4:List X --> #5:List Z --> 1 Y --> f(#6:List, #2:Elt, 1) S --> #3:List Unifier 2754 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> f(#6:List, #7:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #6:List Z --> 1 Y --> f(#7:List, #2:Elt, #3:List) S --> #4:List Unifier 2755 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> f(#6:List, #7:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #6:List Z --> 1 Y --> f(#7:List, #2:Elt, #3:List) S --> #4:List Unifier 2756 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> f(#7:List, #8:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #7:List Z --> 1 Y --> f(#8:List, #2:Elt, j(#3:List, #4:List)) S --> #5:List Unifier 2757 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #6:List) H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #5:List Z --> f(#6:List, #2:Elt, 1) Y --> 1 S --> #4:List Unifier 2758 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> f(#7:List, #2:Elt, #4:List) Y --> 1 S --> #5:List Unifier 2759 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> f(#7:List, #2:Elt, #4:List) Y --> 1 S --> #5:List Unifier 2760 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> f(#8:List, #2:Elt, j(#4:List, #5:List)) Y --> 1 S --> #6:List Unifier 2761 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #6:List) H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #5:List Z --> 1 Y --> f(#6:List, #2:Elt, 1) S --> #4:List Unifier 2762 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> f(#7:List, #2:Elt, #4:List) S --> #5:List Unifier 2763 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> f(#7:List, #2:Elt, #4:List) S --> #5:List Unifier 2764 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> f(#8:List, #2:Elt, j(#4:List, #5:List)) S --> #6:List Unifier 2765 A --> 1 B --> f(#4:List, #7:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #6:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#7:List, #1:Elt, #2:List) X --> #5:List Z --> f(#6:List, #1:Elt, 1) Y --> 1 S --> #3:List Unifier 2766 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #7:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #6:List Z --> f(#7:List, #1:Elt, #3:List) Y --> 1 S --> #4:List Unifier 2767 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #7:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #6:List Z --> f(#7:List, #1:Elt, #3:List) Y --> 1 S --> #4:List Unifier 2768 A --> 1 B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #8:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #7:List Z --> f(#8:List, #1:Elt, j(#3:List, #4:List)) Y --> 1 S --> #5:List Unifier 2769 A --> 1 B --> f(#4:List, #7:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #6:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#7:List, #1:Elt, #2:List) X --> #5:List Z --> 1 Y --> f(#6:List, #1:Elt, 1) S --> #3:List Unifier 2770 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #7:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> f(#7:List, #1:Elt, #3:List) S --> #4:List Unifier 2771 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #7:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> f(#7:List, #1:Elt, #3:List) S --> #4:List Unifier 2772 A --> 1 B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #8:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> f(#8:List, #1:Elt, j(#3:List, #4:List)) S --> #5:List Unifier 2773 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #6:List) H --> 1 G --> 1 I --> #4:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #5:List Z --> f(#6:List, #2:Elt, 1) Y --> 1 S --> #4:List Unifier 2774 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> f(#7:List, #2:Elt, #4:List) Y --> 1 S --> #5:List Unifier 2775 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> f(#7:List, #2:Elt, #4:List) Y --> 1 S --> #5:List Unifier 2776 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> f(#8:List, #2:Elt, j(#4:List, #5:List)) Y --> 1 S --> #6:List Unifier 2777 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #6:List) H --> 1 G --> 1 I --> #4:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #5:List Z --> 1 Y --> f(#6:List, #2:Elt, 1) S --> #4:List Unifier 2778 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> f(#7:List, #2:Elt, #4:List) S --> #5:List Unifier 2779 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> f(#7:List, #2:Elt, #4:List) S --> #5:List Unifier 2780 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> f(#8:List, #2:Elt, j(#4:List, #5:List)) S --> #6:List Unifier 2781 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #4:List) D --> f(#5:List, #6:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #4:List X --> #5:List Z --> f(#6:List, #2:Elt) Y --> 1 S --> f(1, #3:List) Unifier 2782 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> f(#6:List, #7:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #6:List Z --> f(#7:List, #2:Elt) Y --> 1 S --> f(#3:List, #4:List) Unifier 2783 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> f(#6:List, #7:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #6:List Z --> f(#7:List, #2:Elt) Y --> 1 S --> f(#3:List, #4:List) Unifier 2784 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> f(#7:List, #8:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #7:List Z --> f(#8:List, #2:Elt) Y --> 1 S --> f(j(#3:List, #4:List), #5:List) Unifier 2785 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #4:List) D --> f(#5:List, #6:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #4:List X --> #5:List Z --> 1 Y --> f(#6:List, #2:Elt) S --> f(1, #3:List) Unifier 2786 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> f(#6:List, #7:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #6:List Z --> 1 Y --> f(#7:List, #2:Elt) S --> f(#3:List, #4:List) Unifier 2787 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> f(#6:List, #7:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #6:List Z --> 1 Y --> f(#7:List, #2:Elt) S --> f(#3:List, #4:List) Unifier 2788 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> f(#7:List, #8:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #7:List Z --> 1 Y --> f(#8:List, #2:Elt) S --> f(j(#3:List, #4:List), #5:List) Unifier 2789 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #6:List) H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #5:List Z --> f(#6:List, #2:Elt) Y --> 1 S --> f(1, #4:List) Unifier 2790 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> f(#7:List, #2:Elt) Y --> 1 S --> f(#4:List, #5:List) Unifier 2791 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> f(#7:List, #2:Elt) Y --> 1 S --> f(#4:List, #5:List) Unifier 2792 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> f(#8:List, #2:Elt) Y --> 1 S --> f(j(#4:List, #5:List), #6:List) Unifier 2793 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #6:List) H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #5:List Z --> 1 Y --> f(#6:List, #2:Elt) S --> f(1, #4:List) Unifier 2794 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> f(#7:List, #2:Elt) S --> f(#4:List, #5:List) Unifier 2795 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> f(#7:List, #2:Elt) S --> f(#4:List, #5:List) Unifier 2796 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> f(#8:List, #2:Elt) S --> f(j(#4:List, #5:List), #6:List) Unifier 2797 A --> 1 B --> f(#4:List, #7:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #6:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#7:List, #1:Elt, #2:List) X --> #5:List Z --> f(#6:List, #1:Elt) Y --> 1 S --> f(1, #3:List) Unifier 2798 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #7:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #6:List Z --> f(#7:List, #1:Elt) Y --> 1 S --> f(#3:List, #4:List) Unifier 2799 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #7:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #6:List Z --> f(#7:List, #1:Elt) Y --> 1 S --> f(#3:List, #4:List) Unifier 2800 A --> 1 B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #8:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #7:List Z --> f(#8:List, #1:Elt) Y --> 1 S --> f(j(#3:List, #4:List), #5:List) Unifier 2801 A --> 1 B --> f(#4:List, #7:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #6:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#7:List, #1:Elt, #2:List) X --> #5:List Z --> 1 Y --> f(#6:List, #1:Elt) S --> f(1, #3:List) Unifier 2802 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #7:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> f(#7:List, #1:Elt) S --> f(#3:List, #4:List) Unifier 2803 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #7:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> f(#7:List, #1:Elt) S --> f(#3:List, #4:List) Unifier 2804 A --> 1 B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #8:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> f(#8:List, #1:Elt) S --> f(j(#3:List, #4:List), #5:List) Unifier 2805 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #6:List) H --> 1 G --> 1 I --> #4:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #5:List Z --> f(#6:List, #2:Elt) Y --> 1 S --> f(1, #4:List) Unifier 2806 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> f(#7:List, #2:Elt) Y --> 1 S --> f(#4:List, #5:List) Unifier 2807 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> f(#7:List, #2:Elt) Y --> 1 S --> f(#4:List, #5:List) Unifier 2808 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> f(#8:List, #2:Elt) Y --> 1 S --> f(j(#4:List, #5:List), #6:List) Unifier 2809 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #6:List) H --> 1 G --> 1 I --> #4:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #5:List Z --> 1 Y --> f(#6:List, #2:Elt) S --> f(1, #4:List) Unifier 2810 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> f(#7:List, #2:Elt) S --> f(#4:List, #5:List) Unifier 2811 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> f(#7:List, #2:Elt) S --> f(#4:List, #5:List) Unifier 2812 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> f(#8:List, #2:Elt) S --> f(j(#4:List, #5:List), #6:List) Unifier 2813 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #4:List) D --> f(#5:List, 1, #6:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #4:List X --> #5:List Z --> 1 Y --> 1 S --> f(#6:List, #2:Elt, 1, #3:List) Unifier 2814 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #4:List) D --> f(#5:List, #6:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #4:List X --> #5:List Z --> #6:List Y --> 1 S --> f(#7:List, #2:Elt, 1, #3:List) Unifier 2815 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #4:List) D --> f(#5:List, #6:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #4:List X --> #5:List Z --> 1 Y --> #6:List S --> f(#7:List, #2:Elt, 1, #3:List) Unifier 2816 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #4:List) D --> f(#5:List, j(#6:List, #7:List), #8:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #4:List X --> #5:List Z --> #6:List Y --> #7:List S --> f(#8:List, #2:Elt, 1, #3:List) Unifier 2817 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> f(#6:List, 1, #7:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #6:List Z --> 1 Y --> 1 S --> f(#7:List, #2:Elt, #3:List, #4:List) Unifier 2818 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> f(#6:List, #7:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> #6:List Z --> #7:List Y --> 1 S --> f(#8:List, #2:Elt, #3:List, #4:List) Unifier 2819 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> f(#6:List, #7:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> #6:List Z --> 1 Y --> #7:List S --> f(#8:List, #2:Elt, #3:List, #4:List) Unifier 2820 A --> 1 B --> #1:List E --> #2:Elt C --> f(#10:List, #5:List) D --> f(#6:List, j(#7:List, #8:List), #9:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #10:List) W --> #5:List X --> #6:List Z --> #7:List Y --> #8:List S --> f(#9:List, #2:Elt, #3:List, #4:List) Unifier 2821 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> f(#6:List, 1, #7:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #6:List Z --> 1 Y --> 1 S --> f(#7:List, #2:Elt, #3:List, #4:List) Unifier 2822 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> f(#6:List, #7:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> #6:List Z --> #7:List Y --> 1 S --> f(#8:List, #2:Elt, #3:List, #4:List) Unifier 2823 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> f(#6:List, #7:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> #6:List Z --> 1 Y --> #7:List S --> f(#8:List, #2:Elt, #3:List, #4:List) Unifier 2824 A --> 1 B --> #1:List E --> #2:Elt C --> f(#10:List, #5:List) D --> f(#6:List, j(#7:List, #8:List), #9:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #10:List) W --> #5:List X --> #6:List Z --> #7:List Y --> #8:List S --> f(#9:List, #2:Elt, #3:List, #4:List) Unifier 2825 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> f(#7:List, 1, #8:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> f(#8:List, #2:Elt, j(#3:List, #4:List), #5:List) Unifier 2826 A --> 1 B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> f(#7:List, #8:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#9:List, #2:Elt, j(#3:List, #4:List), #5:List) Unifier 2827 A --> 1 B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> f(#7:List, #8:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#9:List, #2:Elt, j(#3:List, #4:List), #5:List) Unifier 2828 A --> 1 B --> #1:List E --> #2:Elt C --> f(#11:List, #6:List) D --> f(#7:List, j(#8:List, #9:List), #10:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt, #11:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#10:List, #2:Elt, j(#3:List, #4:List), #5:List) Unifier 2829 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, 1, #6:List) H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #5:List Z --> 1 Y --> 1 S --> f(#6:List, #2:Elt, 1, #4:List) Unifier 2830 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #6:List, #7:List) H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #5:List Z --> #6:List Y --> 1 S --> f(#7:List, #2:Elt, 1, #4:List) Unifier 2831 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #6:List, #7:List) H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #5:List Z --> 1 Y --> #6:List S --> f(#7:List, #2:Elt, 1, #4:List) Unifier 2832 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, j(#6:List, #7:List), #8:List) H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #5:List Z --> #6:List Y --> #7:List S --> f(#8:List, #2:Elt, 1, #4:List) Unifier 2833 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, 1, #7:List) H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> 1 S --> f(#7:List, #2:Elt, #4:List, #5:List) Unifier 2834 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List, #8:List) H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> #7:List Y --> 1 S --> f(#8:List, #2:Elt, #4:List, #5:List) Unifier 2835 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List, #8:List) H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> #7:List S --> f(#8:List, #2:Elt, #4:List, #5:List) Unifier 2836 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, j(#7:List, #8:List), #9:List) H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> #7:List Y --> #8:List S --> f(#9:List, #2:Elt, #4:List, #5:List) Unifier 2837 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, 1, #7:List) H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> 1 S --> f(#7:List, #2:Elt, #4:List, #5:List) Unifier 2838 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List, #8:List) H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> #7:List Y --> 1 S --> f(#8:List, #2:Elt, #4:List, #5:List) Unifier 2839 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List, #8:List) H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> #7:List S --> f(#8:List, #2:Elt, #4:List, #5:List) Unifier 2840 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, j(#7:List, #8:List), #9:List) H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> #7:List Y --> #8:List S --> f(#9:List, #2:Elt, #4:List, #5:List) Unifier 2841 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, 1, #8:List) H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> 1 S --> f(#8:List, #2:Elt, j(#4:List, #5:List), #6:List) Unifier 2842 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List, #9:List) H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#9:List, #2:Elt, j(#4:List, #5:List), #6:List) Unifier 2843 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List, #9:List) H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#9:List, #2:Elt, j(#4:List, #5:List), #6:List) Unifier 2844 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, j(#8:List, #9:List), #10:List) H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#10:List, #2:Elt, j(#4:List, #5:List), #6:List) Unifier 2845 A --> 1 B --> f(#4:List, #7:List) E --> #1:Elt C --> #2:List D --> f(#5:List, 1, #6:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#7:List, #1:Elt, #2:List) X --> #5:List Z --> 1 Y --> 1 S --> f(#6:List, #1:Elt, 1, #3:List) Unifier 2846 A --> 1 B --> f(#4:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #6:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#8:List, #1:Elt, #2:List) X --> #5:List Z --> #6:List Y --> 1 S --> f(#7:List, #1:Elt, 1, #3:List) Unifier 2847 A --> 1 B --> f(#4:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #6:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#8:List, #1:Elt, #2:List) X --> #5:List Z --> 1 Y --> #6:List S --> f(#7:List, #1:Elt, 1, #3:List) Unifier 2848 A --> 1 B --> f(#4:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#5:List, j(#6:List, #7:List), #8:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#9:List, #1:Elt, #2:List) X --> #5:List Z --> #6:List Y --> #7:List S --> f(#8:List, #1:Elt, 1, #3:List) Unifier 2849 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#6:List, 1, #7:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#7:List, #1:Elt, #3:List, #4:List) Unifier 2850 A --> 1 B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #7:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#8:List, #1:Elt, #3:List, #4:List) Unifier 2851 A --> 1 B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #7:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#8:List, #1:Elt, #3:List, #4:List) Unifier 2852 A --> 1 B --> f(#5:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#6:List, j(#7:List, #8:List), #9:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#10:List, #1:Elt, #2:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#9:List, #1:Elt, #3:List, #4:List) Unifier 2853 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#6:List, 1, #7:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#7:List, #1:Elt, #3:List, #4:List) Unifier 2854 A --> 1 B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #7:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#8:List, #1:Elt, #3:List, #4:List) Unifier 2855 A --> 1 B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #7:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#8:List, #1:Elt, #3:List, #4:List) Unifier 2856 A --> 1 B --> f(#5:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#6:List, j(#7:List, #8:List), #9:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#10:List, #1:Elt, #2:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#9:List, #1:Elt, #3:List, #4:List) Unifier 2857 A --> 1 B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#7:List, 1, #8:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#8:List, #1:Elt, j(#3:List, #4:List), #5:List) Unifier 2858 A --> 1 B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #8:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#9:List, #1:Elt, j(#3:List, #4:List), #5:List) Unifier 2859 A --> 1 B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #8:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#9:List, #1:Elt, j(#3:List, #4:List), #5:List) Unifier 2860 A --> 1 B --> f(#6:List, #11:List) E --> #1:Elt C --> #2:List D --> f(#7:List, j(#8:List, #9:List), #10:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#11:List, #1:Elt, #2:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#10:List, #1:Elt, j(#3:List, #4:List), #5:List) Unifier 2861 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, 1, #6:List) H --> 1 G --> 1 I --> #4:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #5:List Z --> 1 Y --> 1 S --> f(#6:List, #2:Elt, 1, #4:List) Unifier 2862 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #6:List, #7:List) H --> 1 G --> 1 I --> #4:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #5:List Z --> #6:List Y --> 1 S --> f(#7:List, #2:Elt, 1, #4:List) Unifier 2863 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #6:List, #7:List) H --> 1 G --> 1 I --> #4:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #5:List Z --> 1 Y --> #6:List S --> f(#7:List, #2:Elt, 1, #4:List) Unifier 2864 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, j(#6:List, #7:List), #8:List) H --> 1 G --> 1 I --> #4:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #5:List Z --> #6:List Y --> #7:List S --> f(#8:List, #2:Elt, 1, #4:List) Unifier 2865 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, 1, #7:List) H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#7:List, #2:Elt, #4:List, #5:List) Unifier 2866 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List, #8:List) H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#8:List, #2:Elt, #4:List, #5:List) Unifier 2867 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List, #8:List) H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#8:List, #2:Elt, #4:List, #5:List) Unifier 2868 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, j(#7:List, #8:List), #9:List) H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#9:List, #2:Elt, #4:List, #5:List) Unifier 2869 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, 1, #7:List) H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#7:List, #2:Elt, #4:List, #5:List) Unifier 2870 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List, #8:List) H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#8:List, #2:Elt, #4:List, #5:List) Unifier 2871 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List, #8:List) H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#8:List, #2:Elt, #4:List, #5:List) Unifier 2872 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, j(#7:List, #8:List), #9:List) H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#9:List, #2:Elt, #4:List, #5:List) Unifier 2873 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, 1, #8:List) H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#8:List, #2:Elt, j(#4:List, #5:List), #6:List) Unifier 2874 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List, #9:List) H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#9:List, #2:Elt, j(#4:List, #5:List), #6:List) Unifier 2875 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List, #9:List) H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#9:List, #2:Elt, j(#4:List, #5:List), #6:List) Unifier 2876 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, j(#8:List, #9:List), #10:List) H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#10:List, #2:Elt, j(#4:List, #5:List), #6:List) Unifier 2877 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #4:List) D --> f(#5:List, 1) H --> 1 G --> 1 I --> #3:List U --> 1 V --> f(#1:List, #2:Elt, #6:List) W --> #4:List X --> #5:List Z --> 1 Y --> 1 S --> f(#2:Elt, 1, #3:List) Unifier 2878 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #4:List) D --> f(#5:List, #6:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #4:List X --> #5:List Z --> #6:List Y --> 1 S --> f(#2:Elt, 1, #3:List) Unifier 2879 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #4:List) D --> f(#5:List, #6:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #4:List X --> #5:List Z --> 1 Y --> #6:List S --> f(#2:Elt, 1, #3:List) Unifier 2880 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #4:List) D --> f(#5:List, j(#6:List, #7:List)) H --> 1 G --> 1 I --> #3:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #4:List X --> #5:List Z --> #6:List Y --> #7:List S --> f(#2:Elt, 1, #3:List) Unifier 2881 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #5:List) D --> f(#6:List, 1) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #5:List X --> #6:List Z --> 1 Y --> 1 S --> f(#2:Elt, #3:List, #4:List) Unifier 2882 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> f(#6:List, #7:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #6:List Z --> #7:List Y --> 1 S --> f(#2:Elt, #3:List, #4:List) Unifier 2883 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> f(#6:List, #7:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #6:List Z --> 1 Y --> #7:List S --> f(#2:Elt, #3:List, #4:List) Unifier 2884 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> f(#6:List, j(#7:List, #8:List)) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> #6:List Z --> #7:List Y --> #8:List S --> f(#2:Elt, #3:List, #4:List) Unifier 2885 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #5:List) D --> f(#6:List, 1) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #5:List X --> #6:List Z --> 1 Y --> 1 S --> f(#2:Elt, #3:List, #4:List) Unifier 2886 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> f(#6:List, #7:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #6:List Z --> #7:List Y --> 1 S --> f(#2:Elt, #3:List, #4:List) Unifier 2887 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> f(#6:List, #7:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #6:List Z --> 1 Y --> #7:List S --> f(#2:Elt, #3:List, #4:List) Unifier 2888 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> f(#6:List, j(#7:List, #8:List)) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> #6:List Z --> #7:List Y --> #8:List S --> f(#2:Elt, #3:List, #4:List) Unifier 2889 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> f(#7:List, 1) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> f(#2:Elt, j(#3:List, #4:List), #5:List) Unifier 2890 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> f(#7:List, #8:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#2:Elt, j(#3:List, #4:List), #5:List) Unifier 2891 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> f(#7:List, #8:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#2:Elt, j(#3:List, #4:List), #5:List) Unifier 2892 A --> 1 B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> f(#7:List, j(#8:List, #9:List)) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#2:Elt, j(#3:List, #4:List), #5:List) Unifier 2893 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, 1) H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #5:List Z --> 1 Y --> 1 S --> f(#2:Elt, 1, #4:List) Unifier 2894 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #6:List) H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #5:List Z --> #6:List Y --> 1 S --> f(#2:Elt, 1, #4:List) Unifier 2895 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #6:List) H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #5:List Z --> 1 Y --> #6:List S --> f(#2:Elt, 1, #4:List) Unifier 2896 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, j(#6:List, #7:List)) H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #5:List Z --> #6:List Y --> #7:List S --> f(#2:Elt, 1, #4:List) Unifier 2897 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, 1) H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> 1 S --> f(#2:Elt, #4:List, #5:List) Unifier 2898 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> #7:List Y --> 1 S --> f(#2:Elt, #4:List, #5:List) Unifier 2899 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> #7:List S --> f(#2:Elt, #4:List, #5:List) Unifier 2900 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, j(#7:List, #8:List)) H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> #7:List Y --> #8:List S --> f(#2:Elt, #4:List, #5:List) Unifier 2901 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, 1) H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> 1 S --> f(#2:Elt, #4:List, #5:List) Unifier 2902 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> #7:List Y --> 1 S --> f(#2:Elt, #4:List, #5:List) Unifier 2903 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> #7:List S --> f(#2:Elt, #4:List, #5:List) Unifier 2904 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, j(#7:List, #8:List)) H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> #7:List Y --> #8:List S --> f(#2:Elt, #4:List, #5:List) Unifier 2905 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, 1) H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> 1 S --> f(#2:Elt, j(#4:List, #5:List), #6:List) Unifier 2906 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#2:Elt, j(#4:List, #5:List), #6:List) Unifier 2907 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#2:Elt, j(#4:List, #5:List), #6:List) Unifier 2908 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, j(#8:List, #9:List)) H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#2:Elt, j(#4:List, #5:List), #6:List) Unifier 2909 A --> 1 B --> f(#4:List, #6:List) E --> #1:Elt C --> #2:List D --> f(#5:List, 1) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#6:List, #1:Elt, #2:List) X --> #5:List Z --> 1 Y --> 1 S --> f(#1:Elt, 1, #3:List) Unifier 2910 A --> 1 B --> f(#4:List, #7:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #6:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#7:List, #1:Elt, #2:List) X --> #5:List Z --> #6:List Y --> 1 S --> f(#1:Elt, 1, #3:List) Unifier 2911 A --> 1 B --> f(#4:List, #7:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #6:List) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#7:List, #1:Elt, #2:List) X --> #5:List Z --> 1 Y --> #6:List S --> f(#1:Elt, 1, #3:List) Unifier 2912 A --> 1 B --> f(#4:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#5:List, j(#6:List, #7:List)) H --> 1 G --> 1 I --> #3:List U --> 1 V --> #4:List W --> f(#8:List, #1:Elt, #2:List) X --> #5:List Z --> #6:List Y --> #7:List S --> f(#1:Elt, 1, #3:List) Unifier 2913 A --> 1 B --> f(#5:List, #7:List) E --> #1:Elt C --> #2:List D --> f(#6:List, 1) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#7:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#1:Elt, #3:List, #4:List) Unifier 2914 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #7:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#1:Elt, #3:List, #4:List) Unifier 2915 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #7:List) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#1:Elt, #3:List, #4:List) Unifier 2916 A --> 1 B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#6:List, j(#7:List, #8:List)) H --> #3:List G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#1:Elt, #3:List, #4:List) Unifier 2917 A --> 1 B --> f(#5:List, #7:List) E --> #1:Elt C --> #2:List D --> f(#6:List, 1) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#7:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#1:Elt, #3:List, #4:List) Unifier 2918 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #7:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#1:Elt, #3:List, #4:List) Unifier 2919 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #7:List) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#1:Elt, #3:List, #4:List) Unifier 2920 A --> 1 B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#6:List, j(#7:List, #8:List)) H --> 1 G --> #3:List I --> #4:List U --> 1 V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#1:Elt, #3:List, #4:List) Unifier 2921 A --> 1 B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#7:List, 1) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#8:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#1:Elt, j(#3:List, #4:List), #5:List) Unifier 2922 A --> 1 B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #8:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#1:Elt, j(#3:List, #4:List), #5:List) Unifier 2923 A --> 1 B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #8:List) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#1:Elt, j(#3:List, #4:List), #5:List) Unifier 2924 A --> 1 B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#7:List, j(#8:List, #9:List)) H --> #3:List G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#1:Elt, j(#3:List, #4:List), #5:List) Unifier 2925 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, 1) H --> 1 G --> 1 I --> #4:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #5:List Z --> 1 Y --> 1 S --> f(#2:Elt, 1, #4:List) Unifier 2926 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #6:List) H --> 1 G --> 1 I --> #4:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #5:List Z --> #6:List Y --> 1 S --> f(#2:Elt, 1, #4:List) Unifier 2927 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #6:List) H --> 1 G --> 1 I --> #4:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #5:List Z --> 1 Y --> #6:List S --> f(#2:Elt, 1, #4:List) Unifier 2928 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, j(#6:List, #7:List)) H --> 1 G --> 1 I --> #4:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #5:List Z --> #6:List Y --> #7:List S --> f(#2:Elt, 1, #4:List) Unifier 2929 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, 1) H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#2:Elt, #4:List, #5:List) Unifier 2930 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#2:Elt, #4:List, #5:List) Unifier 2931 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#2:Elt, #4:List, #5:List) Unifier 2932 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, j(#7:List, #8:List)) H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#2:Elt, #4:List, #5:List) Unifier 2933 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, 1) H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#2:Elt, #4:List, #5:List) Unifier 2934 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#2:Elt, #4:List, #5:List) Unifier 2935 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#2:Elt, #4:List, #5:List) Unifier 2936 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, j(#7:List, #8:List)) H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#2:Elt, #4:List, #5:List) Unifier 2937 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, 1) H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#2:Elt, j(#4:List, #5:List), #6:List) Unifier 2938 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#2:Elt, j(#4:List, #5:List), #6:List) Unifier 2939 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#2:Elt, j(#4:List, #5:List), #6:List) Unifier 2940 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, j(#8:List, #9:List)) H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#2:Elt, j(#4:List, #5:List), #6:List) Unifier 2941 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #4:List) D --> #3:List H --> 1 G --> 1 I --> f(#6:List, #5:List) U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #4:List X --> #3:List Z --> f(#2:Elt, 1, #6:List) Y --> 1 S --> #5:List Unifier 2942 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> #4:List G --> 1 I --> f(#7:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #3:List Z --> f(#2:Elt, #4:List, #7:List) Y --> 1 S --> #6:List Unifier 2943 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> 1 G --> #4:List I --> f(#7:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #3:List Z --> f(#2:Elt, #4:List, #7:List) Y --> 1 S --> #6:List Unifier 2944 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#8:List, #7:List) U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #3:List Z --> f(#2:Elt, j(#4:List, #5:List), #8:List) Y --> 1 S --> #7:List Unifier 2945 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #4:List) D --> #3:List H --> 1 G --> 1 I --> f(#6:List, #5:List) U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #4:List X --> #3:List Z --> 1 Y --> f(#2:Elt, 1, #6:List) S --> #5:List Unifier 2946 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> #4:List G --> 1 I --> f(#7:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #3:List Z --> 1 Y --> f(#2:Elt, #4:List, #7:List) S --> #6:List Unifier 2947 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> 1 G --> #4:List I --> f(#7:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #3:List Z --> 1 Y --> f(#2:Elt, #4:List, #7:List) S --> #6:List Unifier 2948 A --> 1 B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#8:List, #7:List) U --> 1 V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #3:List Z --> 1 Y --> f(#2:Elt, j(#4:List, #5:List), #8:List) S --> #7:List Unifier 2949 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#6:List, #5:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> f(#2:Elt, 1, #6:List) Y --> 1 S --> #5:List Unifier 2950 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#7:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> f(#2:Elt, #5:List, #7:List) Y --> 1 S --> #6:List Unifier 2951 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#7:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> f(#2:Elt, #5:List, #7:List) Y --> 1 S --> #6:List Unifier 2952 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#8:List, #7:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> f(#2:Elt, j(#5:List, #6:List), #8:List) Y --> 1 S --> #7:List Unifier 2953 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#6:List, #5:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> f(#2:Elt, 1, #6:List) S --> #5:List Unifier 2954 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#7:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #5:List, #7:List) S --> #6:List Unifier 2955 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#7:List, #6:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #5:List, #7:List) S --> #6:List Unifier 2956 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#8:List, #7:List) U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> f(#2:Elt, j(#5:List, #6:List), #8:List) S --> #7:List Unifier 2957 A --> 1 B --> f(#4:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#6:List, #5:List) U --> 1 V --> #4:List W --> f(#7:List, #1:Elt, #2:List) X --> #3:List Z --> f(#1:Elt, 1, #6:List) Y --> 1 S --> #5:List Unifier 2958 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#7:List, #6:List) U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #3:List Z --> f(#1:Elt, #4:List, #7:List) Y --> 1 S --> #6:List Unifier 2959 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#7:List, #6:List) U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #3:List Z --> f(#1:Elt, #4:List, #7:List) Y --> 1 S --> #6:List Unifier 2960 A --> 1 B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#8:List, #7:List) U --> 1 V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #3:List Z --> f(#1:Elt, j(#4:List, #5:List), #8:List) Y --> 1 S --> #7:List Unifier 2961 A --> 1 B --> f(#4:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#6:List, #5:List) U --> 1 V --> #4:List W --> f(#7:List, #1:Elt, #2:List) X --> #3:List Z --> 1 Y --> f(#1:Elt, 1, #6:List) S --> #5:List Unifier 2962 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#7:List, #6:List) U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #3:List Z --> 1 Y --> f(#1:Elt, #4:List, #7:List) S --> #6:List Unifier 2963 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#7:List, #6:List) U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #3:List Z --> 1 Y --> f(#1:Elt, #4:List, #7:List) S --> #6:List Unifier 2964 A --> 1 B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#8:List, #7:List) U --> 1 V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #3:List Z --> 1 Y --> f(#1:Elt, j(#4:List, #5:List), #8:List) S --> #7:List Unifier 2965 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#6:List, #5:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> f(#2:Elt, 1, #6:List) Y --> 1 S --> #5:List Unifier 2966 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#7:List, #6:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> f(#2:Elt, #5:List, #7:List) Y --> 1 S --> #6:List Unifier 2967 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#7:List, #6:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> f(#2:Elt, #5:List, #7:List) Y --> 1 S --> #6:List Unifier 2968 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#8:List, #7:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> f(#2:Elt, j(#5:List, #6:List), #8:List) Y --> 1 S --> #7:List Unifier 2969 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#6:List, #5:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> f(#2:Elt, 1, #6:List) S --> #5:List Unifier 2970 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#7:List, #6:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> f(#2:Elt, #5:List, #7:List) S --> #6:List Unifier 2971 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#7:List, #6:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> f(#2:Elt, #5:List, #7:List) S --> #6:List Unifier 2972 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#8:List, #7:List) U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> f(#2:Elt, j(#5:List, #6:List), #8:List) S --> #7:List Unifier 2973 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> f(#6:List, #7:List) G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #3:List Z --> f(#2:Elt, #6:List) Y --> 1 S --> f(#7:List, #4:List) Unifier 2974 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> f(#6:List, #7:List) G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #3:List Z --> 1 Y --> f(#2:Elt, #6:List) S --> f(#7:List, #4:List) Unifier 2975 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> 1 G --> f(#6:List, #7:List) I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #3:List Z --> f(#2:Elt, #6:List) Y --> 1 S --> f(#7:List, #4:List) Unifier 2976 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> 1 G --> f(#6:List, #7:List) I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #3:List Z --> 1 Y --> f(#2:Elt, #6:List) S --> f(#7:List, #4:List) Unifier 2977 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#6:List, #7:List) G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> f(#2:Elt, #6:List) Y --> 1 S --> f(#7:List, #5:List) Unifier 2978 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#6:List, #7:List) G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #6:List) S --> f(#7:List, #5:List) Unifier 2979 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#6:List, #7:List) I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> f(#2:Elt, #6:List) Y --> 1 S --> f(#7:List, #5:List) Unifier 2980 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#6:List, #7:List) I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #6:List) S --> f(#7:List, #5:List) Unifier 2981 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#6:List, #7:List) G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #3:List Z --> f(#1:Elt, #6:List) Y --> 1 S --> f(#7:List, #4:List) Unifier 2982 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#6:List, #7:List) G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #3:List Z --> 1 Y --> f(#1:Elt, #6:List) S --> f(#7:List, #4:List) Unifier 2983 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#6:List, #7:List) I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #3:List Z --> f(#1:Elt, #6:List) Y --> 1 S --> f(#7:List, #4:List) Unifier 2984 A --> 1 B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#6:List, #7:List) I --> #4:List U --> 1 V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #3:List Z --> 1 Y --> f(#1:Elt, #6:List) S --> f(#7:List, #4:List) Unifier 2985 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#6:List, #7:List) G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> f(#2:Elt, #6:List) Y --> 1 S --> f(#7:List, #5:List) Unifier 2986 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#6:List, #7:List) G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> f(#2:Elt, #6:List) S --> f(#7:List, #5:List) Unifier 2987 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#6:List, #7:List) I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> f(#2:Elt, #6:List) Y --> 1 S --> f(#7:List, #5:List) Unifier 2988 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#6:List, #7:List) I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> f(#2:Elt, #6:List) S --> f(#7:List, #5:List) Unifier 2989 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #6:List) W --> #5:List X --> #3:List Z --> f(#2:Elt, 1) Y --> 1 S --> #4:List Unifier 2990 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #6:List X --> #3:List Z --> f(#2:Elt, #4:List) Y --> 1 S --> #5:List Unifier 2991 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #6:List X --> #3:List Z --> f(#2:Elt, #4:List) Y --> 1 S --> #5:List Unifier 2992 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #7:List X --> #3:List Z --> f(#2:Elt, j(#4:List, #5:List)) Y --> 1 S --> #6:List Unifier 2993 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #6:List) W --> #5:List X --> #3:List Z --> 1 Y --> f(#2:Elt, 1) S --> #4:List Unifier 2994 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #6:List X --> #3:List Z --> 1 Y --> f(#2:Elt, #4:List) S --> #5:List Unifier 2995 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #6:List X --> #3:List Z --> 1 Y --> f(#2:Elt, #4:List) S --> #5:List Unifier 2996 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #7:List X --> #3:List Z --> 1 Y --> f(#2:Elt, j(#4:List, #5:List)) S --> #6:List Unifier 2997 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> f(#2:Elt, 1) Y --> 1 S --> #5:List Unifier 2998 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> f(#2:Elt, #5:List) Y --> 1 S --> #6:List Unifier 2999 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> f(#2:Elt, #5:List) Y --> 1 S --> #6:List Unifier 3000 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> f(#2:Elt, j(#5:List, #6:List)) Y --> 1 S --> #7:List Unifier 3001 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> f(#2:Elt, 1) S --> #5:List Unifier 3002 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #5:List) S --> #6:List Unifier 3003 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #5:List) S --> #6:List Unifier 3004 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> f(#2:Elt, j(#5:List, #6:List)) S --> #7:List Unifier 3005 A --> 1 B --> f(#5:List, #6:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#6:List, #1:Elt, #2:List) X --> #3:List Z --> f(#1:Elt, 1) Y --> 1 S --> #4:List Unifier 3006 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #6:List W --> f(#7:List, #1:Elt, #2:List) X --> #3:List Z --> f(#1:Elt, #4:List) Y --> 1 S --> #5:List Unifier 3007 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#7:List, #1:Elt, #2:List) X --> #3:List Z --> f(#1:Elt, #4:List) Y --> 1 S --> #5:List Unifier 3008 A --> 1 B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #7:List W --> f(#8:List, #1:Elt, #2:List) X --> #3:List Z --> f(#1:Elt, j(#4:List, #5:List)) Y --> 1 S --> #6:List Unifier 3009 A --> 1 B --> f(#5:List, #6:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#6:List, #1:Elt, #2:List) X --> #3:List Z --> 1 Y --> f(#1:Elt, 1) S --> #4:List Unifier 3010 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #6:List W --> f(#7:List, #1:Elt, #2:List) X --> #3:List Z --> 1 Y --> f(#1:Elt, #4:List) S --> #5:List Unifier 3011 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#7:List, #1:Elt, #2:List) X --> #3:List Z --> 1 Y --> f(#1:Elt, #4:List) S --> #5:List Unifier 3012 A --> 1 B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #7:List W --> f(#8:List, #1:Elt, #2:List) X --> #3:List Z --> 1 Y --> f(#1:Elt, j(#4:List, #5:List)) S --> #6:List Unifier 3013 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> f(#2:Elt, 1) Y --> 1 S --> #5:List Unifier 3014 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> f(#2:Elt, #5:List) Y --> 1 S --> #6:List Unifier 3015 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> f(#2:Elt, #5:List) Y --> 1 S --> #6:List Unifier 3016 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> f(#2:Elt, j(#5:List, #6:List)) Y --> 1 S --> #7:List Unifier 3017 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> f(#2:Elt, 1) S --> #5:List Unifier 3018 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> f(#2:Elt, #5:List) S --> #6:List Unifier 3019 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> f(#2:Elt, #5:List) S --> #6:List Unifier 3020 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> f(#2:Elt, j(#5:List, #6:List)) S --> #7:List Unifier 3021 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #6:List) W --> #5:List X --> #3:List Z --> #2:Elt Y --> 1 S --> f(1, #4:List) Unifier 3022 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #6:List X --> #3:List Z --> #2:Elt Y --> 1 S --> f(#4:List, #5:List) Unifier 3023 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #6:List X --> #3:List Z --> #2:Elt Y --> 1 S --> f(#4:List, #5:List) Unifier 3024 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #7:List X --> #3:List Z --> #2:Elt Y --> 1 S --> f(j(#4:List, #5:List), #6:List) Unifier 3025 A --> 1 B --> #1:List E --> #2:Elt C --> f(#6:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> f(#1:List, #2:Elt, #6:List) W --> #5:List X --> #3:List Z --> 1 Y --> #2:Elt S --> f(1, #4:List) Unifier 3026 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #6:List X --> #3:List Z --> 1 Y --> #2:Elt S --> f(#4:List, #5:List) Unifier 3027 A --> 1 B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> f(#1:List, #2:Elt, #7:List) W --> #6:List X --> #3:List Z --> 1 Y --> #2:Elt S --> f(#4:List, #5:List) Unifier 3028 A --> 1 B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> f(#1:List, #2:Elt, #8:List) W --> #7:List X --> #3:List Z --> 1 Y --> #2:Elt S --> f(j(#4:List, #5:List), #6:List) Unifier 3029 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> #2:Elt Y --> 1 S --> f(1, #5:List) Unifier 3030 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> #2:Elt Y --> 1 S --> f(#5:List, #6:List) Unifier 3031 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> #2:Elt Y --> 1 S --> f(#5:List, #6:List) Unifier 3032 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> #2:Elt Y --> 1 S --> f(j(#5:List, #6:List), #7:List) Unifier 3033 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> #2:Elt S --> f(1, #5:List) Unifier 3034 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> #2:Elt S --> f(#5:List, #6:List) Unifier 3035 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> #2:Elt S --> f(#5:List, #6:List) Unifier 3036 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> 1 V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> #2:Elt S --> f(j(#5:List, #6:List), #7:List) Unifier 3037 A --> 1 B --> f(#5:List, #6:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#6:List, #1:Elt, #2:List) X --> #3:List Z --> #1:Elt Y --> 1 S --> f(1, #4:List) Unifier 3038 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #6:List W --> f(#7:List, #1:Elt, #2:List) X --> #3:List Z --> #1:Elt Y --> 1 S --> f(#4:List, #5:List) Unifier 3039 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#7:List, #1:Elt, #2:List) X --> #3:List Z --> #1:Elt Y --> 1 S --> f(#4:List, #5:List) Unifier 3040 A --> 1 B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #7:List W --> f(#8:List, #1:Elt, #2:List) X --> #3:List Z --> #1:Elt Y --> 1 S --> f(j(#4:List, #5:List), #6:List) Unifier 3041 A --> 1 B --> f(#5:List, #6:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> 1 V --> #5:List W --> f(#6:List, #1:Elt, #2:List) X --> #3:List Z --> 1 Y --> #1:Elt S --> f(1, #4:List) Unifier 3042 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> 1 V --> #6:List W --> f(#7:List, #1:Elt, #2:List) X --> #3:List Z --> 1 Y --> #1:Elt S --> f(#4:List, #5:List) Unifier 3043 A --> 1 B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> 1 V --> #6:List W --> f(#7:List, #1:Elt, #2:List) X --> #3:List Z --> 1 Y --> #1:Elt S --> f(#4:List, #5:List) Unifier 3044 A --> 1 B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> 1 V --> #7:List W --> f(#8:List, #1:Elt, #2:List) X --> #3:List Z --> 1 Y --> #1:Elt S --> f(j(#4:List, #5:List), #6:List) Unifier 3045 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> #2:Elt Y --> 1 S --> f(1, #5:List) Unifier 3046 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> #2:Elt Y --> 1 S --> f(#5:List, #6:List) Unifier 3047 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> #2:Elt Y --> 1 S --> f(#5:List, #6:List) Unifier 3048 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> #2:Elt Y --> 1 S --> f(j(#5:List, #6:List), #7:List) Unifier 3049 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> #2:Elt S --> f(1, #5:List) Unifier 3050 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> #2:Elt S --> f(#5:List, #6:List) Unifier 3051 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> #2:Elt S --> f(#5:List, #6:List) Unifier 3052 A --> 1 B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> 1 V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> #2:Elt S --> f(j(#5:List, #6:List), #7:List) Unifier 3053 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> f(#7:List, 1, #6:List) U --> #4:List V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt, 1, #7:List) Z --> 1 Y --> 1 S --> #6:List Unifier 3054 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> f(#8:List, #6:List, #7:List) U --> #4:List V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> f(#3:List, #2:Elt, 1, #8:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 3055 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> f(#8:List, #6:List, #7:List) U --> #4:List V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> f(#3:List, #2:Elt, 1, #8:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 3056 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#10:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> f(#9:List, j(#6:List, #7:List), #8:List) U --> #4:List V --> f(#1:List, #2:Elt, #10:List) W --> #5:List X --> f(#3:List, #2:Elt, 1, #9:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 3057 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, 1, #7:List) U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt, #4:List, #8:List) Z --> 1 Y --> 1 S --> #7:List Unifier 3058 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> f(#9:List, #7:List, #8:List) U --> #5:List V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> f(#3:List, #2:Elt, #4:List, #9:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 3059 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> f(#9:List, #7:List, #8:List) U --> #5:List V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> f(#3:List, #2:Elt, #4:List, #9:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 3060 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#11:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> f(#10:List, j(#7:List, #8:List), #9:List) U --> #5:List V --> f(#1:List, #2:Elt, #11:List) W --> #6:List X --> f(#3:List, #2:Elt, #4:List, #10:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 3061 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, 1, #7:List) U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt, #4:List, #8:List) Z --> 1 Y --> 1 S --> #7:List Unifier 3062 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> f(#9:List, #7:List, #8:List) U --> #5:List V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> f(#3:List, #2:Elt, #4:List, #9:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 3063 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> f(#9:List, #7:List, #8:List) U --> #5:List V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> f(#3:List, #2:Elt, #4:List, #9:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 3064 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#11:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> f(#10:List, j(#7:List, #8:List), #9:List) U --> #5:List V --> f(#1:List, #2:Elt, #11:List) W --> #6:List X --> f(#3:List, #2:Elt, #4:List, #10:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 3065 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, 1, #8:List) U --> #6:List V --> f(#1:List, #2:Elt, #10:List) W --> #7:List X --> f(#3:List, #2:Elt, j(#4:List, #5:List), #9:List) Z --> 1 Y --> 1 S --> #8:List Unifier 3066 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#11:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#10:List, #8:List, #9:List) U --> #6:List V --> f(#1:List, #2:Elt, #11:List) W --> #7:List X --> f(#3:List, #2:Elt, j(#4:List, #5:List), #10:List) Z --> #8:List Y --> 1 S --> #9:List Unifier 3067 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#11:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#10:List, #8:List, #9:List) U --> #6:List V --> f(#1:List, #2:Elt, #11:List) W --> #7:List X --> f(#3:List, #2:Elt, j(#4:List, #5:List), #10:List) Z --> 1 Y --> #8:List S --> #9:List Unifier 3068 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#12:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#11:List, j(#8:List, #9:List), #10:List) U --> #6:List V --> f(#1:List, #2:Elt, #12:List) W --> #7:List X --> f(#3:List, #2:Elt, j(#4:List, #5:List), #11:List) Z --> #8:List Y --> #9:List S --> #10:List Unifier 3069 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#7:List, 1, #6:List) U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, 1, #7:List) Z --> 1 Y --> 1 S --> #6:List Unifier 3070 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#8:List, #6:List, #7:List) U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, 1, #8:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 3071 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#8:List, #6:List, #7:List) U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, 1, #8:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 3072 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#9:List, j(#6:List, #7:List), #8:List) U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, 1, #9:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 3073 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#8:List, 1, #7:List) U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List, #8:List) Z --> 1 Y --> 1 S --> #7:List Unifier 3074 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#9:List, #7:List, #8:List) U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List, #9:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 3075 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#9:List, #7:List, #8:List) U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List, #9:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 3076 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#10:List, j(#7:List, #8:List), #9:List) U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List, #10:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 3077 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#8:List, 1, #7:List) U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List, #8:List) Z --> 1 Y --> 1 S --> #7:List Unifier 3078 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#9:List, #7:List, #8:List) U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List, #9:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 3079 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#9:List, #7:List, #8:List) U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List, #9:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 3080 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#10:List, j(#7:List, #8:List), #9:List) U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List, #10:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 3081 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#9:List, 1, #8:List) U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List), #9:List) Z --> 1 Y --> 1 S --> #8:List Unifier 3082 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#10:List, #8:List, #9:List) U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List), #10:List) Z --> #8:List Y --> 1 S --> #9:List Unifier 3083 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#10:List, #8:List, #9:List) U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List), #10:List) Z --> 1 Y --> #8:List S --> #9:List Unifier 3084 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#11:List, j(#8:List, #9:List), #10:List) U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List), #11:List) Z --> #8:List Y --> #9:List S --> #10:List Unifier 3085 A --> #4:List B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#7:List, 1, #6:List) U --> #4:List V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, 1, #7:List) Z --> 1 Y --> 1 S --> #6:List Unifier 3086 A --> #4:List B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#8:List, #6:List, #7:List) U --> #4:List V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, 1, #8:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 3087 A --> #4:List B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#8:List, #6:List, #7:List) U --> #4:List V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, 1, #8:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 3088 A --> #4:List B --> f(#5:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#9:List, j(#6:List, #7:List), #8:List) U --> #4:List V --> #5:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, 1, #9:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 3089 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, 1, #7:List) U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List, #8:List) Z --> 1 Y --> 1 S --> #7:List Unifier 3090 A --> #5:List B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#9:List, #7:List, #8:List) U --> #5:List V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List, #9:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 3091 A --> #5:List B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#9:List, #7:List, #8:List) U --> #5:List V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List, #9:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 3092 A --> #5:List B --> f(#6:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#10:List, j(#7:List, #8:List), #9:List) U --> #5:List V --> #6:List W --> f(#11:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List, #10:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 3093 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, 1, #7:List) U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List, #8:List) Z --> 1 Y --> 1 S --> #7:List Unifier 3094 A --> #5:List B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#9:List, #7:List, #8:List) U --> #5:List V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List, #9:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 3095 A --> #5:List B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#9:List, #7:List, #8:List) U --> #5:List V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List, #9:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 3096 A --> #5:List B --> f(#6:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#10:List, j(#7:List, #8:List), #9:List) U --> #5:List V --> #6:List W --> f(#11:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List, #10:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 3097 A --> #6:List B --> f(#7:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, 1, #8:List) U --> #6:List V --> #7:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, j(#4:List, #5:List), #9:List) Z --> 1 Y --> 1 S --> #8:List Unifier 3098 A --> #6:List B --> f(#7:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#10:List, #8:List, #9:List) U --> #6:List V --> #7:List W --> f(#11:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, j(#4:List, #5:List), #10:List) Z --> #8:List Y --> 1 S --> #9:List Unifier 3099 A --> #6:List B --> f(#7:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#10:List, #8:List, #9:List) U --> #6:List V --> #7:List W --> f(#11:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, j(#4:List, #5:List), #10:List) Z --> 1 Y --> #8:List S --> #9:List Unifier 3100 A --> #6:List B --> f(#7:List, #12:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#11:List, j(#8:List, #9:List), #10:List) U --> #6:List V --> #7:List W --> f(#12:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, j(#4:List, #5:List), #11:List) Z --> #8:List Y --> #9:List S --> #10:List Unifier 3101 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#7:List, 1, #6:List) U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, 1, #7:List) Z --> 1 Y --> 1 S --> #6:List Unifier 3102 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#8:List, #6:List, #7:List) U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, 1, #8:List) Z --> #6:List Y --> 1 S --> #7:List Unifier 3103 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#8:List, #6:List, #7:List) U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, 1, #8:List) Z --> 1 Y --> #6:List S --> #7:List Unifier 3104 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#9:List, j(#6:List, #7:List), #8:List) U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, 1, #9:List) Z --> #6:List Y --> #7:List S --> #8:List Unifier 3105 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#8:List, 1, #7:List) U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List, #8:List) Z --> 1 Y --> 1 S --> #7:List Unifier 3106 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#9:List, #7:List, #8:List) U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List, #9:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 3107 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#9:List, #7:List, #8:List) U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List, #9:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 3108 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#10:List, j(#7:List, #8:List), #9:List) U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List, #10:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 3109 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#8:List, 1, #7:List) U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List, #8:List) Z --> 1 Y --> 1 S --> #7:List Unifier 3110 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#9:List, #7:List, #8:List) U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List, #9:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 3111 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#9:List, #7:List, #8:List) U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List, #9:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 3112 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#10:List, j(#7:List, #8:List), #9:List) U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List, #10:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 3113 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#9:List, 1, #8:List) U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, j(#5:List, #6:List), #9:List) Z --> 1 Y --> 1 S --> #8:List Unifier 3114 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#10:List, #8:List, #9:List) U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, j(#5:List, #6:List), #10:List) Z --> #8:List Y --> 1 S --> #9:List Unifier 3115 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#10:List, #8:List, #9:List) U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, j(#5:List, #6:List), #10:List) Z --> 1 Y --> #8:List S --> #9:List Unifier 3116 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#11:List, j(#8:List, #9:List), #10:List) U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, j(#5:List, #6:List), #11:List) Z --> #8:List Y --> #9:List S --> #10:List Unifier 3117 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#10:List, #5:List) D --> #3:List H --> f(#7:List, #8:List) G --> 1 I --> f(#9:List, #6:List) U --> #4:List V --> f(#1:List, #2:Elt, #10:List) W --> #5:List X --> f(#3:List, #2:Elt, #7:List) Z --> f(#8:List, #9:List) Y --> 1 S --> #6:List Unifier 3118 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#10:List, #5:List) D --> #3:List H --> f(#7:List, #8:List) G --> 1 I --> f(#9:List, #6:List) U --> #4:List V --> f(#1:List, #2:Elt, #10:List) W --> #5:List X --> f(#3:List, #2:Elt, #7:List) Z --> 1 Y --> f(#8:List, #9:List) S --> #6:List Unifier 3119 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#10:List, #5:List) D --> #3:List H --> 1 G --> f(#7:List, #8:List) I --> f(#9:List, #6:List) U --> #4:List V --> f(#1:List, #2:Elt, #10:List) W --> #5:List X --> f(#3:List, #2:Elt, #7:List) Z --> f(#8:List, #9:List) Y --> 1 S --> #6:List Unifier 3120 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#10:List, #5:List) D --> #3:List H --> 1 G --> f(#7:List, #8:List) I --> f(#9:List, #6:List) U --> #4:List V --> f(#1:List, #2:Elt, #10:List) W --> #5:List X --> f(#3:List, #2:Elt, #7:List) Z --> 1 Y --> f(#8:List, #9:List) S --> #6:List Unifier 3121 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#7:List, #8:List) G --> 1 I --> f(#9:List, #6:List) U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #7:List) Z --> f(#8:List, #9:List) Y --> 1 S --> #6:List Unifier 3122 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#7:List, #8:List) G --> 1 I --> f(#9:List, #6:List) U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #7:List) Z --> 1 Y --> f(#8:List, #9:List) S --> #6:List Unifier 3123 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#7:List, #8:List) I --> f(#9:List, #6:List) U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #7:List) Z --> f(#8:List, #9:List) Y --> 1 S --> #6:List Unifier 3124 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#7:List, #8:List) I --> f(#9:List, #6:List) U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #7:List) Z --> 1 Y --> f(#8:List, #9:List) S --> #6:List Unifier 3125 A --> #4:List B --> f(#5:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#7:List, #8:List) G --> 1 I --> f(#9:List, #6:List) U --> #4:List V --> #5:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #7:List) Z --> f(#8:List, #9:List) Y --> 1 S --> #6:List Unifier 3126 A --> #4:List B --> f(#5:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#7:List, #8:List) G --> 1 I --> f(#9:List, #6:List) U --> #4:List V --> #5:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #7:List) Z --> 1 Y --> f(#8:List, #9:List) S --> #6:List Unifier 3127 A --> #4:List B --> f(#5:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#7:List, #8:List) I --> f(#9:List, #6:List) U --> #4:List V --> #5:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #7:List) Z --> f(#8:List, #9:List) Y --> 1 S --> #6:List Unifier 3128 A --> #4:List B --> f(#5:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#7:List, #8:List) I --> f(#9:List, #6:List) U --> #4:List V --> #5:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #7:List) Z --> 1 Y --> f(#8:List, #9:List) S --> #6:List Unifier 3129 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#7:List, #8:List) G --> 1 I --> f(#9:List, #6:List) U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #7:List) Z --> f(#8:List, #9:List) Y --> 1 S --> #6:List Unifier 3130 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#7:List, #8:List) G --> 1 I --> f(#9:List, #6:List) U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #7:List) Z --> 1 Y --> f(#8:List, #9:List) S --> #6:List Unifier 3131 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#7:List, #8:List) I --> f(#9:List, #6:List) U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #7:List) Z --> f(#8:List, #9:List) Y --> 1 S --> #6:List Unifier 3132 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#7:List, #8:List) I --> f(#9:List, #6:List) U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #7:List) Z --> 1 Y --> f(#8:List, #9:List) S --> #6:List Unifier 3133 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> f(#7:List, 1, #8:List) G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt, #7:List) Z --> 1 Y --> 1 S --> f(#8:List, #4:List) Unifier 3134 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> #3:List H --> f(#8:List, #7:List, #9:List) G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> f(#3:List, #2:Elt, #8:List) Z --> #7:List Y --> 1 S --> f(#9:List, #4:List) Unifier 3135 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> #3:List H --> f(#8:List, #7:List, #9:List) G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> f(#3:List, #2:Elt, #8:List) Z --> 1 Y --> #7:List S --> f(#9:List, #4:List) Unifier 3136 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#11:List, #6:List) D --> #3:List H --> f(#9:List, j(#7:List, #8:List), #10:List) G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #11:List) W --> #6:List X --> f(#3:List, #2:Elt, #9:List) Z --> #7:List Y --> #8:List S --> f(#10:List, #4:List) Unifier 3137 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> 1 G --> f(#7:List, 1, #8:List) I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt, #7:List) Z --> 1 Y --> 1 S --> f(#8:List, #4:List) Unifier 3138 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> #3:List H --> 1 G --> f(#8:List, #7:List, #9:List) I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> f(#3:List, #2:Elt, #8:List) Z --> #7:List Y --> 1 S --> f(#9:List, #4:List) Unifier 3139 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> #3:List H --> 1 G --> f(#8:List, #7:List, #9:List) I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> f(#3:List, #2:Elt, #8:List) Z --> 1 Y --> #7:List S --> f(#9:List, #4:List) Unifier 3140 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#11:List, #6:List) D --> #3:List H --> 1 G --> f(#9:List, j(#7:List, #8:List), #10:List) I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #11:List) W --> #6:List X --> f(#3:List, #2:Elt, #9:List) Z --> #7:List Y --> #8:List S --> f(#10:List, #4:List) Unifier 3141 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#7:List, 1, #8:List) G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #7:List) Z --> 1 Y --> 1 S --> f(#8:List, #5:List) Unifier 3142 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, #7:List, #9:List) G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #8:List) Z --> #7:List Y --> 1 S --> f(#9:List, #5:List) Unifier 3143 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, #7:List, #9:List) G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #8:List) Z --> 1 Y --> #7:List S --> f(#9:List, #5:List) Unifier 3144 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#9:List, j(#7:List, #8:List), #10:List) G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #9:List) Z --> #7:List Y --> #8:List S --> f(#10:List, #5:List) Unifier 3145 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#7:List, 1, #8:List) I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #7:List) Z --> 1 Y --> 1 S --> f(#8:List, #5:List) Unifier 3146 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, #7:List, #9:List) I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #8:List) Z --> #7:List Y --> 1 S --> f(#9:List, #5:List) Unifier 3147 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, #7:List, #9:List) I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #8:List) Z --> 1 Y --> #7:List S --> f(#9:List, #5:List) Unifier 3148 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#9:List, j(#7:List, #8:List), #10:List) I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #9:List) Z --> #7:List Y --> #8:List S --> f(#10:List, #5:List) Unifier 3149 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#7:List, 1, #8:List) G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #7:List) Z --> 1 Y --> 1 S --> f(#8:List, #4:List) Unifier 3150 A --> #5:List B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#8:List, #7:List, #9:List) G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #8:List) Z --> #7:List Y --> 1 S --> f(#9:List, #4:List) Unifier 3151 A --> #5:List B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#8:List, #7:List, #9:List) G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #8:List) Z --> 1 Y --> #7:List S --> f(#9:List, #4:List) Unifier 3152 A --> #5:List B --> f(#6:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#9:List, j(#7:List, #8:List), #10:List) G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#11:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #9:List) Z --> #7:List Y --> #8:List S --> f(#10:List, #4:List) Unifier 3153 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#7:List, 1, #8:List) I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #7:List) Z --> 1 Y --> 1 S --> f(#8:List, #4:List) Unifier 3154 A --> #5:List B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#8:List, #7:List, #9:List) I --> #4:List U --> #5:List V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #8:List) Z --> #7:List Y --> 1 S --> f(#9:List, #4:List) Unifier 3155 A --> #5:List B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#8:List, #7:List, #9:List) I --> #4:List U --> #5:List V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #8:List) Z --> 1 Y --> #7:List S --> f(#9:List, #4:List) Unifier 3156 A --> #5:List B --> f(#6:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#9:List, j(#7:List, #8:List), #10:List) I --> #4:List U --> #5:List V --> #6:List W --> f(#11:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #9:List) Z --> #7:List Y --> #8:List S --> f(#10:List, #4:List) Unifier 3157 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#7:List, 1, #8:List) G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #7:List) Z --> 1 Y --> 1 S --> f(#8:List, #5:List) Unifier 3158 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, #7:List, #9:List) G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #8:List) Z --> #7:List Y --> 1 S --> f(#9:List, #5:List) Unifier 3159 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, #7:List, #9:List) G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #8:List) Z --> 1 Y --> #7:List S --> f(#9:List, #5:List) Unifier 3160 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#9:List, j(#7:List, #8:List), #10:List) G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #9:List) Z --> #7:List Y --> #8:List S --> f(#10:List, #5:List) Unifier 3161 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#7:List, 1, #8:List) I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #7:List) Z --> 1 Y --> 1 S --> f(#8:List, #5:List) Unifier 3162 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, #7:List, #9:List) I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #8:List) Z --> #7:List Y --> 1 S --> f(#9:List, #5:List) Unifier 3163 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, #7:List, #9:List) I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #8:List) Z --> 1 Y --> #7:List S --> f(#9:List, #5:List) Unifier 3164 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#9:List, j(#7:List, #8:List), #10:List) I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #9:List) Z --> #7:List Y --> #8:List S --> f(#10:List, #5:List) Unifier 3165 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> #3:List H --> f(#7:List, 1) G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #8:List) W --> #6:List X --> f(#3:List, #2:Elt, #7:List) Z --> 1 Y --> 1 S --> #4:List Unifier 3166 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> f(#8:List, #7:List) G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt, #8:List) Z --> #7:List Y --> 1 S --> #4:List Unifier 3167 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> f(#8:List, #7:List) G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt, #8:List) Z --> 1 Y --> #7:List S --> #4:List Unifier 3168 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> #3:List H --> f(#9:List, j(#7:List, #8:List)) G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> f(#3:List, #2:Elt, #9:List) Z --> #7:List Y --> #8:List S --> #4:List Unifier 3169 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> #3:List H --> 1 G --> f(#7:List, 1) I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #8:List) W --> #6:List X --> f(#3:List, #2:Elt, #7:List) Z --> 1 Y --> 1 S --> #4:List Unifier 3170 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> 1 G --> f(#8:List, #7:List) I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt, #8:List) Z --> #7:List Y --> 1 S --> #4:List Unifier 3171 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> 1 G --> f(#8:List, #7:List) I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt, #8:List) Z --> 1 Y --> #7:List S --> #4:List Unifier 3172 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> #3:List H --> 1 G --> f(#9:List, j(#7:List, #8:List)) I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> f(#3:List, #2:Elt, #9:List) Z --> #7:List Y --> #8:List S --> #4:List Unifier 3173 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#7:List, 1) G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #7:List) Z --> 1 Y --> 1 S --> #5:List Unifier 3174 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, #7:List) G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #8:List) Z --> #7:List Y --> 1 S --> #5:List Unifier 3175 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, #7:List) G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #8:List) Z --> 1 Y --> #7:List S --> #5:List Unifier 3176 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#9:List, j(#7:List, #8:List)) G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #9:List) Z --> #7:List Y --> #8:List S --> #5:List Unifier 3177 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#7:List, 1) I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #7:List) Z --> 1 Y --> 1 S --> #5:List Unifier 3178 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, #7:List) I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #8:List) Z --> #7:List Y --> 1 S --> #5:List Unifier 3179 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, #7:List) I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #8:List) Z --> 1 Y --> #7:List S --> #5:List Unifier 3180 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#9:List, j(#7:List, #8:List)) I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #9:List) Z --> #7:List Y --> #8:List S --> #5:List Unifier 3181 A --> #5:List B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#7:List, 1) G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #7:List) Z --> 1 Y --> 1 S --> #4:List Unifier 3182 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#8:List, #7:List) G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #8:List) Z --> #7:List Y --> 1 S --> #4:List Unifier 3183 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#8:List, #7:List) G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #8:List) Z --> 1 Y --> #7:List S --> #4:List Unifier 3184 A --> #5:List B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#9:List, j(#7:List, #8:List)) G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #9:List) Z --> #7:List Y --> #8:List S --> #4:List Unifier 3185 A --> #5:List B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#7:List, 1) I --> #4:List U --> #5:List V --> #6:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #7:List) Z --> 1 Y --> 1 S --> #4:List Unifier 3186 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#8:List, #7:List) I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #8:List) Z --> #7:List Y --> 1 S --> #4:List Unifier 3187 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#8:List, #7:List) I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #8:List) Z --> 1 Y --> #7:List S --> #4:List Unifier 3188 A --> #5:List B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#9:List, j(#7:List, #8:List)) I --> #4:List U --> #5:List V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #9:List) Z --> #7:List Y --> #8:List S --> #4:List Unifier 3189 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#7:List, 1) G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #7:List) Z --> 1 Y --> 1 S --> #5:List Unifier 3190 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, #7:List) G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #8:List) Z --> #7:List Y --> 1 S --> #5:List Unifier 3191 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#8:List, #7:List) G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #8:List) Z --> 1 Y --> #7:List S --> #5:List Unifier 3192 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#9:List, j(#7:List, #8:List)) G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #9:List) Z --> #7:List Y --> #8:List S --> #5:List Unifier 3193 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#7:List, 1) I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #7:List) Z --> 1 Y --> 1 S --> #5:List Unifier 3194 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, #7:List) I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #8:List) Z --> #7:List Y --> 1 S --> #5:List Unifier 3195 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#8:List, #7:List) I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #8:List) Z --> 1 Y --> #7:List S --> #5:List Unifier 3196 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#9:List, j(#7:List, #8:List)) I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #9:List) Z --> #7:List Y --> #8:List S --> #5:List Unifier 3197 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#7:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> f(1, #6:List) U --> #4:List V --> f(#1:List, #2:Elt, #7:List) W --> #5:List X --> f(#3:List, #2:Elt, 1) Z --> 1 Y --> 1 S --> #6:List Unifier 3198 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> f(#6:List, #7:List) U --> #4:List V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt, 1) Z --> #6:List Y --> 1 S --> #7:List Unifier 3199 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> f(#6:List, #7:List) U --> #4:List V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt, 1) Z --> 1 Y --> #6:List S --> #7:List Unifier 3200 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> f(j(#6:List, #7:List), #8:List) U --> #4:List V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> f(#3:List, #2:Elt, 1) Z --> #6:List Y --> #7:List S --> #8:List Unifier 3201 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> f(1, #7:List) U --> #5:List V --> f(#1:List, #2:Elt, #8:List) W --> #6:List X --> f(#3:List, #2:Elt, #4:List) Z --> 1 Y --> 1 S --> #7:List Unifier 3202 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> f(#7:List, #8:List) U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt, #4:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 3203 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> f(#7:List, #8:List) U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt, #4:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 3204 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> f(j(#7:List, #8:List), #9:List) U --> #5:List V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> f(#3:List, #2:Elt, #4:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 3205 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> f(1, #7:List) U --> #5:List V --> f(#1:List, #2:Elt, #8:List) W --> #6:List X --> f(#3:List, #2:Elt, #4:List) Z --> 1 Y --> 1 S --> #7:List Unifier 3206 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> f(#7:List, #8:List) U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt, #4:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 3207 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> f(#7:List, #8:List) U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt, #4:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 3208 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> f(j(#7:List, #8:List), #9:List) U --> #5:List V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> f(#3:List, #2:Elt, #4:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 3209 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> f(1, #8:List) U --> #6:List V --> f(#1:List, #2:Elt, #9:List) W --> #7:List X --> f(#3:List, #2:Elt, j(#4:List, #5:List)) Z --> 1 Y --> 1 S --> #8:List Unifier 3210 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#8:List, #9:List) U --> #6:List V --> f(#1:List, #2:Elt, #10:List) W --> #7:List X --> f(#3:List, #2:Elt, j(#4:List, #5:List)) Z --> #8:List Y --> 1 S --> #9:List Unifier 3211 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#8:List, #9:List) U --> #6:List V --> f(#1:List, #2:Elt, #10:List) W --> #7:List X --> f(#3:List, #2:Elt, j(#4:List, #5:List)) Z --> 1 Y --> #8:List S --> #9:List Unifier 3212 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#11:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> f(j(#8:List, #9:List), #10:List) U --> #6:List V --> f(#1:List, #2:Elt, #11:List) W --> #7:List X --> f(#3:List, #2:Elt, j(#4:List, #5:List)) Z --> #8:List Y --> #9:List S --> #10:List Unifier 3213 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(1, #6:List) U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, 1) Z --> 1 Y --> 1 S --> #6:List Unifier 3214 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#6:List, #7:List) U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, 1) Z --> #6:List Y --> 1 S --> #7:List Unifier 3215 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#6:List, #7:List) U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, 1) Z --> 1 Y --> #6:List S --> #7:List Unifier 3216 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(j(#6:List, #7:List), #8:List) U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, 1) Z --> #6:List Y --> #7:List S --> #8:List Unifier 3217 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(1, #7:List) U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List) Z --> 1 Y --> 1 S --> #7:List Unifier 3218 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#7:List, #8:List) U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 3219 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#7:List, #8:List) U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 3220 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(j(#7:List, #8:List), #9:List) U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 3221 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(1, #7:List) U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List) Z --> 1 Y --> 1 S --> #7:List Unifier 3222 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#7:List, #8:List) U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 3223 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#7:List, #8:List) U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 3224 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(j(#7:List, #8:List), #9:List) U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, #5:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 3225 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(1, #8:List) U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List)) Z --> 1 Y --> 1 S --> #8:List Unifier 3226 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#8:List, #9:List) U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List)) Z --> #8:List Y --> 1 S --> #9:List Unifier 3227 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#8:List, #9:List) U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List)) Z --> 1 Y --> #8:List S --> #9:List Unifier 3228 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(j(#8:List, #9:List), #10:List) U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt, j(#5:List, #6:List)) Z --> #8:List Y --> #9:List S --> #10:List Unifier 3229 A --> #4:List B --> f(#5:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(1, #6:List) U --> #4:List V --> #5:List W --> f(#7:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, 1) Z --> 1 Y --> 1 S --> #6:List Unifier 3230 A --> #4:List B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#6:List, #7:List) U --> #4:List V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, 1) Z --> #6:List Y --> 1 S --> #7:List Unifier 3231 A --> #4:List B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#6:List, #7:List) U --> #4:List V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, 1) Z --> 1 Y --> #6:List S --> #7:List Unifier 3232 A --> #4:List B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(j(#6:List, #7:List), #8:List) U --> #4:List V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, 1) Z --> #6:List Y --> #7:List S --> #8:List Unifier 3233 A --> #5:List B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(1, #7:List) U --> #5:List V --> #6:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List) Z --> 1 Y --> 1 S --> #7:List Unifier 3234 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#7:List, #8:List) U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 3235 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#7:List, #8:List) U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 3236 A --> #5:List B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(j(#7:List, #8:List), #9:List) U --> #5:List V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 3237 A --> #5:List B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(1, #7:List) U --> #5:List V --> #6:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List) Z --> 1 Y --> 1 S --> #7:List Unifier 3238 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#7:List, #8:List) U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 3239 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#7:List, #8:List) U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 3240 A --> #5:List B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(j(#7:List, #8:List), #9:List) U --> #5:List V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, #4:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 3241 A --> #6:List B --> f(#7:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(1, #8:List) U --> #6:List V --> #7:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, j(#4:List, #5:List)) Z --> 1 Y --> 1 S --> #8:List Unifier 3242 A --> #6:List B --> f(#7:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#8:List, #9:List) U --> #6:List V --> #7:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, j(#4:List, #5:List)) Z --> #8:List Y --> 1 S --> #9:List Unifier 3243 A --> #6:List B --> f(#7:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#8:List, #9:List) U --> #6:List V --> #7:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, j(#4:List, #5:List)) Z --> 1 Y --> #8:List S --> #9:List Unifier 3244 A --> #6:List B --> f(#7:List, #11:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(j(#8:List, #9:List), #10:List) U --> #6:List V --> #7:List W --> f(#11:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt, j(#4:List, #5:List)) Z --> #8:List Y --> #9:List S --> #10:List Unifier 3245 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(1, #6:List) U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, 1) Z --> 1 Y --> 1 S --> #6:List Unifier 3246 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#6:List, #7:List) U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, 1) Z --> #6:List Y --> 1 S --> #7:List Unifier 3247 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#6:List, #7:List) U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, 1) Z --> 1 Y --> #6:List S --> #7:List Unifier 3248 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(j(#6:List, #7:List), #8:List) U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, 1) Z --> #6:List Y --> #7:List S --> #8:List Unifier 3249 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(1, #7:List) U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List) Z --> 1 Y --> 1 S --> #7:List Unifier 3250 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#7:List, #8:List) U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 3251 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#7:List, #8:List) U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 3252 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(j(#7:List, #8:List), #9:List) U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 3253 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(1, #7:List) U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List) Z --> 1 Y --> 1 S --> #7:List Unifier 3254 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#7:List, #8:List) U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List) Z --> #7:List Y --> 1 S --> #8:List Unifier 3255 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#7:List, #8:List) U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List) Z --> 1 Y --> #7:List S --> #8:List Unifier 3256 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(j(#7:List, #8:List), #9:List) U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, #5:List) Z --> #7:List Y --> #8:List S --> #9:List Unifier 3257 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(1, #8:List) U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, j(#5:List, #6:List)) Z --> 1 Y --> 1 S --> #8:List Unifier 3258 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#8:List, #9:List) U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, j(#5:List, #6:List)) Z --> #8:List Y --> 1 S --> #9:List Unifier 3259 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#8:List, #9:List) U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, j(#5:List, #6:List)) Z --> 1 Y --> #8:List S --> #9:List Unifier 3260 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(j(#8:List, #9:List), #10:List) U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt, j(#5:List, #6:List)) Z --> #8:List Y --> #9:List S --> #10:List Unifier 3261 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> f(#7:List, #6:List) U --> #4:List V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt) Z --> f(1, #7:List) Y --> 1 S --> #6:List Unifier 3262 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, #7:List) U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt) Z --> f(#4:List, #8:List) Y --> 1 S --> #7:List Unifier 3263 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, #7:List) U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt) Z --> f(#4:List, #8:List) Y --> 1 S --> #7:List Unifier 3264 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, #8:List) U --> #6:List V --> f(#1:List, #2:Elt, #10:List) W --> #7:List X --> f(#3:List, #2:Elt) Z --> f(j(#4:List, #5:List), #9:List) Y --> 1 S --> #8:List Unifier 3265 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> f(#7:List, #6:List) U --> #4:List V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> f(#3:List, #2:Elt) Z --> 1 Y --> f(1, #7:List) S --> #6:List Unifier 3266 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, #7:List) U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt) Z --> 1 Y --> f(#4:List, #8:List) S --> #7:List Unifier 3267 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, #7:List) U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt) Z --> 1 Y --> f(#4:List, #8:List) S --> #7:List Unifier 3268 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, #8:List) U --> #6:List V --> f(#1:List, #2:Elt, #10:List) W --> #7:List X --> f(#3:List, #2:Elt) Z --> 1 Y --> f(j(#4:List, #5:List), #9:List) S --> #8:List Unifier 3269 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#7:List, #6:List) U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> f(1, #7:List) Y --> 1 S --> #6:List Unifier 3270 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#8:List, #7:List) U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> f(#5:List, #8:List) Y --> 1 S --> #7:List Unifier 3271 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#8:List, #7:List) U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> f(#5:List, #8:List) Y --> 1 S --> #7:List Unifier 3272 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#9:List, #8:List) U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> f(j(#5:List, #6:List), #9:List) Y --> 1 S --> #8:List Unifier 3273 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#7:List, #6:List) U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> f(1, #7:List) S --> #6:List Unifier 3274 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#8:List, #7:List) U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> f(#5:List, #8:List) S --> #7:List Unifier 3275 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#8:List, #7:List) U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> f(#5:List, #8:List) S --> #7:List Unifier 3276 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#9:List, #8:List) U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> f(j(#5:List, #6:List), #9:List) S --> #8:List Unifier 3277 A --> #4:List B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#7:List, #6:List) U --> #4:List V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> f(1, #7:List) Y --> 1 S --> #6:List Unifier 3278 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, #7:List) U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> f(#4:List, #8:List) Y --> 1 S --> #7:List Unifier 3279 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, #7:List) U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> f(#4:List, #8:List) Y --> 1 S --> #7:List Unifier 3280 A --> #6:List B --> f(#7:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, #8:List) U --> #6:List V --> #7:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> f(j(#4:List, #5:List), #9:List) Y --> 1 S --> #8:List Unifier 3281 A --> #4:List B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#7:List, #6:List) U --> #4:List V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> 1 Y --> f(1, #7:List) S --> #6:List Unifier 3282 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, #7:List) U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> 1 Y --> f(#4:List, #8:List) S --> #7:List Unifier 3283 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, #7:List) U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> 1 Y --> f(#4:List, #8:List) S --> #7:List Unifier 3284 A --> #6:List B --> f(#7:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, #8:List) U --> #6:List V --> #7:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> 1 Y --> f(j(#4:List, #5:List), #9:List) S --> #8:List Unifier 3285 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#7:List, #6:List) U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> f(1, #7:List) Y --> 1 S --> #6:List Unifier 3286 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#8:List, #7:List) U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> f(#5:List, #8:List) Y --> 1 S --> #7:List Unifier 3287 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#8:List, #7:List) U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> f(#5:List, #8:List) Y --> 1 S --> #7:List Unifier 3288 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#9:List, #8:List) U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> f(j(#5:List, #6:List), #9:List) Y --> 1 S --> #8:List Unifier 3289 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#7:List, #6:List) U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> 1 Y --> f(1, #7:List) S --> #6:List Unifier 3290 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#8:List, #7:List) U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> 1 Y --> f(#5:List, #8:List) S --> #7:List Unifier 3291 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#8:List, #7:List) U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> 1 Y --> f(#5:List, #8:List) S --> #7:List Unifier 3292 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#9:List, #8:List) U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> 1 Y --> f(j(#5:List, #6:List), #9:List) S --> #8:List Unifier 3293 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> #3:List H --> f(1, #7:List) G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #8:List) W --> #6:List X --> f(#3:List, #2:Elt) Z --> 1 Y --> 1 S --> f(#7:List, #4:List) Unifier 3294 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> f(#7:List, #8:List) G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt) Z --> #7:List Y --> 1 S --> f(#8:List, #4:List) Unifier 3295 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> f(#7:List, #8:List) G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt) Z --> 1 Y --> #7:List S --> f(#8:List, #4:List) Unifier 3296 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> #3:List H --> f(j(#7:List, #8:List), #9:List) G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> f(#3:List, #2:Elt) Z --> #7:List Y --> #8:List S --> f(#9:List, #4:List) Unifier 3297 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> #3:List H --> 1 G --> f(1, #7:List) I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #8:List) W --> #6:List X --> f(#3:List, #2:Elt) Z --> 1 Y --> 1 S --> f(#7:List, #4:List) Unifier 3298 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> 1 G --> f(#7:List, #8:List) I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt) Z --> #7:List Y --> 1 S --> f(#8:List, #4:List) Unifier 3299 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> 1 G --> f(#7:List, #8:List) I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt) Z --> 1 Y --> #7:List S --> f(#8:List, #4:List) Unifier 3300 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> #3:List H --> 1 G --> f(j(#7:List, #8:List), #9:List) I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> f(#3:List, #2:Elt) Z --> #7:List Y --> #8:List S --> f(#9:List, #4:List) Unifier 3301 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(1, #7:List) G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> 1 S --> f(#7:List, #5:List) Unifier 3302 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#7:List, #8:List) G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> #7:List Y --> 1 S --> f(#8:List, #5:List) Unifier 3303 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#7:List, #8:List) G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> #7:List S --> f(#8:List, #5:List) Unifier 3304 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(j(#7:List, #8:List), #9:List) G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> #7:List Y --> #8:List S --> f(#9:List, #5:List) Unifier 3305 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(1, #7:List) I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> 1 S --> f(#7:List, #5:List) Unifier 3306 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#7:List, #8:List) I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> #7:List Y --> 1 S --> f(#8:List, #5:List) Unifier 3307 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#7:List, #8:List) I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> #7:List S --> f(#8:List, #5:List) Unifier 3308 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(j(#7:List, #8:List), #9:List) I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> #7:List Y --> #8:List S --> f(#9:List, #5:List) Unifier 3309 A --> #5:List B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(1, #7:List) G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> 1 Y --> 1 S --> f(#7:List, #4:List) Unifier 3310 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#7:List, #8:List) G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> #7:List Y --> 1 S --> f(#8:List, #4:List) Unifier 3311 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#7:List, #8:List) G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> 1 Y --> #7:List S --> f(#8:List, #4:List) Unifier 3312 A --> #5:List B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(j(#7:List, #8:List), #9:List) G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> #7:List Y --> #8:List S --> f(#9:List, #4:List) Unifier 3313 A --> #5:List B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(1, #7:List) I --> #4:List U --> #5:List V --> #6:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> 1 Y --> 1 S --> f(#7:List, #4:List) Unifier 3314 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#7:List, #8:List) I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> #7:List Y --> 1 S --> f(#8:List, #4:List) Unifier 3315 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#7:List, #8:List) I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> 1 Y --> #7:List S --> f(#8:List, #4:List) Unifier 3316 A --> #5:List B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(j(#7:List, #8:List), #9:List) I --> #4:List U --> #5:List V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> #7:List Y --> #8:List S --> f(#9:List, #4:List) Unifier 3317 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(1, #7:List) G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> 1 Y --> 1 S --> f(#7:List, #5:List) Unifier 3318 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#7:List, #8:List) G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> #7:List Y --> 1 S --> f(#8:List, #5:List) Unifier 3319 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#7:List, #8:List) G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> 1 Y --> #7:List S --> f(#8:List, #5:List) Unifier 3320 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(j(#7:List, #8:List), #9:List) G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> #7:List Y --> #8:List S --> f(#9:List, #5:List) Unifier 3321 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(1, #7:List) I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> 1 Y --> 1 S --> f(#7:List, #5:List) Unifier 3322 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#7:List, #8:List) I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> #7:List Y --> 1 S --> f(#8:List, #5:List) Unifier 3323 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#7:List, #8:List) I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> 1 Y --> #7:List S --> f(#8:List, #5:List) Unifier 3324 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(j(#7:List, #8:List), #9:List) I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> #7:List Y --> #8:List S --> f(#9:List, #5:List) Unifier 3325 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #7:List) W --> #6:List X --> f(#3:List, #2:Elt) Z --> 1 Y --> 1 S --> #4:List Unifier 3326 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> #3:List H --> #7:List G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #8:List) W --> #6:List X --> f(#3:List, #2:Elt) Z --> #7:List Y --> 1 S --> #4:List Unifier 3327 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> #3:List H --> 1 G --> #7:List I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #8:List) W --> #6:List X --> f(#3:List, #2:Elt) Z --> #7:List Y --> 1 S --> #4:List Unifier 3328 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#9:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt, #9:List) W --> #8:List X --> f(#3:List, #2:Elt) Z --> j(#4:List, #5:List) Y --> 1 S --> #6:List Unifier 3329 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> #3:List H --> #7:List G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #8:List) W --> #6:List X --> f(#3:List, #2:Elt) Z --> 1 Y --> #7:List S --> #4:List Unifier 3330 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> j(#7:List, #8:List) G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #4:List Unifier 3331 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> #8:List G --> #7:List I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #4:List Unifier 3332 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List) D --> #3:List H --> j(#8:List, #10:List) G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt, #9:List) W --> #7:List X --> f(#3:List, #2:Elt) Z --> j(#4:List, #10:List) Y --> #8:List S --> #5:List Unifier 3333 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> #3:List H --> 1 G --> #7:List I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #8:List) W --> #6:List X --> f(#3:List, #2:Elt) Z --> 1 Y --> #7:List S --> #4:List Unifier 3334 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> #7:List G --> #8:List I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #4:List Unifier 3335 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> 1 G --> j(#7:List, #8:List) I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> f(#3:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #4:List Unifier 3336 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List) D --> #3:List H --> #4:List G --> j(#8:List, #10:List) I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt, #9:List) W --> #7:List X --> f(#3:List, #2:Elt) Z --> j(#4:List, #10:List) Y --> #8:List S --> #5:List Unifier 3337 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#9:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt, #9:List) W --> #8:List X --> f(#3:List, #2:Elt) Z --> 1 Y --> j(#4:List, #5:List) S --> #6:List Unifier 3338 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List) D --> #3:List H --> j(#8:List, #10:List) G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt, #9:List) W --> #7:List X --> f(#3:List, #2:Elt) Z --> #8:List Y --> j(#4:List, #10:List) S --> #5:List Unifier 3339 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List) D --> #3:List H --> #4:List G --> j(#8:List, #10:List) I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt, #9:List) W --> #7:List X --> f(#3:List, #2:Elt) Z --> #8:List Y --> j(#4:List, #10:List) S --> #5:List Unifier 3340 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> j(#8:List, #10:List) G --> j(#9:List, #11:List) I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #7:List) W --> #6:List X --> f(#3:List, #2:Elt) Z --> j(#8:List, #9:List) Y --> j(#10:List, #11:List) S --> #4:List Unifier 3341 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> 1 S --> #5:List Unifier 3342 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #7:List G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> #7:List Y --> 1 S --> #5:List Unifier 3343 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #7:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> #7:List Y --> 1 S --> #5:List Unifier 3344 A --> #8:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> #8:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> j(#5:List, #6:List) Y --> 1 S --> #7:List Unifier 3345 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #7:List G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> #7:List S --> #5:List Unifier 3346 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> j(#7:List, #8:List) G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #5:List Unifier 3347 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #8:List G --> #7:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #5:List Unifier 3348 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> j(#8:List, #9:List) G --> #5:List I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> j(#5:List, #9:List) Y --> #8:List S --> #6:List Unifier 3349 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #7:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> #7:List S --> #5:List Unifier 3350 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #7:List G --> #8:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #5:List Unifier 3351 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> j(#7:List, #8:List) I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #5:List Unifier 3352 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> j(#8:List, #9:List) I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> j(#5:List, #9:List) Y --> #8:List S --> #6:List Unifier 3353 A --> #8:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> #8:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> 1 Y --> j(#5:List, #6:List) S --> #7:List Unifier 3354 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> j(#8:List, #9:List) G --> #5:List I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> j(#5:List, #9:List) S --> #6:List Unifier 3355 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> j(#8:List, #9:List) I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> #8:List Y --> j(#5:List, #9:List) S --> #6:List Unifier 3356 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> j(#7:List, #9:List) G --> j(#8:List, #10:List) I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> f(#4:List, #2:Elt) Z --> j(#7:List, #8:List) Y --> j(#9:List, #10:List) S --> #5:List Unifier 3357 A --> #5:List B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#7:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> 1 Y --> 1 S --> #4:List Unifier 3358 A --> #5:List B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #7:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> #7:List Y --> 1 S --> #4:List Unifier 3359 A --> #5:List B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #7:List I --> #4:List U --> #5:List V --> #6:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> #7:List Y --> 1 S --> #4:List Unifier 3360 A --> #7:List B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #8:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> j(#4:List, #5:List) Y --> 1 S --> #6:List Unifier 3361 A --> #5:List B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #7:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> 1 Y --> #7:List S --> #4:List Unifier 3362 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> j(#7:List, #8:List) G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> #7:List Y --> #8:List S --> #4:List Unifier 3363 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #8:List G --> #7:List I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> #7:List Y --> #8:List S --> #4:List Unifier 3364 A --> #6:List B --> f(#7:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> j(#8:List, #10:List) G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> j(#4:List, #10:List) Y --> #8:List S --> #5:List Unifier 3365 A --> #5:List B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #7:List I --> #4:List U --> #5:List V --> #6:List W --> f(#8:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> 1 Y --> #7:List S --> #4:List Unifier 3366 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #7:List G --> #8:List I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> #7:List Y --> #8:List S --> #4:List Unifier 3367 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> j(#7:List, #8:List) I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> #7:List Y --> #8:List S --> #4:List Unifier 3368 A --> #6:List B --> f(#7:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> j(#8:List, #10:List) I --> #5:List U --> #6:List V --> #7:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> j(#4:List, #10:List) Y --> #8:List S --> #5:List Unifier 3369 A --> #7:List B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #8:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> 1 Y --> j(#4:List, #5:List) S --> #6:List Unifier 3370 A --> #6:List B --> f(#7:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> j(#8:List, #10:List) G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> #8:List Y --> j(#4:List, #10:List) S --> #5:List Unifier 3371 A --> #6:List B --> f(#7:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> j(#8:List, #10:List) I --> #5:List U --> #6:List V --> #7:List W --> f(#9:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> #8:List Y --> j(#4:List, #10:List) S --> #5:List Unifier 3372 A --> #5:List B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> j(#8:List, #10:List) G --> j(#9:List, #11:List) I --> #4:List U --> #5:List V --> #6:List W --> f(#7:List, #1:Elt, #2:List) X --> f(#3:List, #1:Elt) Z --> j(#8:List, #9:List) Y --> j(#10:List, #11:List) S --> #4:List Unifier 3373 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> 1 Y --> 1 S --> #5:List Unifier 3374 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #7:List G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> #7:List Y --> 1 S --> #5:List Unifier 3375 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #7:List I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> #7:List Y --> 1 S --> #5:List Unifier 3376 A --> #8:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> #8:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> j(#5:List, #6:List) Y --> 1 S --> #7:List Unifier 3377 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #7:List G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> 1 Y --> #7:List S --> #5:List Unifier 3378 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> j(#7:List, #8:List) G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #5:List Unifier 3379 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #8:List G --> #7:List I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #5:List Unifier 3380 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> j(#8:List, #9:List) G --> #5:List I --> #6:List U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> j(#5:List, #9:List) Y --> #8:List S --> #6:List Unifier 3381 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #7:List I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> 1 Y --> #7:List S --> #5:List Unifier 3382 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #7:List G --> #8:List I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #5:List Unifier 3383 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> j(#7:List, #8:List) I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> #7:List Y --> #8:List S --> #5:List Unifier 3384 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> j(#8:List, #9:List) I --> #6:List U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> j(#5:List, #9:List) Y --> #8:List S --> #6:List Unifier 3385 A --> #8:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> #8:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> 1 Y --> j(#5:List, #6:List) S --> #7:List Unifier 3386 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> j(#8:List, #9:List) G --> #5:List I --> #6:List U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> #8:List Y --> j(#5:List, #9:List) S --> #6:List Unifier 3387 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> j(#8:List, #9:List) I --> #6:List U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> #8:List Y --> j(#5:List, #9:List) S --> #6:List Unifier 3388 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> j(#7:List, #9:List) G --> j(#8:List, #10:List) I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> f(#4:List, #2:Elt) Z --> j(#7:List, #8:List) Y --> j(#9:List, #10:List) S --> #5:List Unifier 3389 A --> #3:List B --> #1:List E --> #2:Elt C --> f(#9:List, #4:List) D --> f(#5:List, #7:List) H --> 1 G --> 1 I --> f(#8:List, #6:List) U --> #3:List V --> f(#1:List, #2:Elt, #9:List) W --> #4:List X --> #5:List Z --> f(#7:List, #2:Elt, 1, #8:List) Y --> 1 S --> #6:List Unifier 3390 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#10:List, #5:List) D --> f(#6:List, #8:List) H --> #3:List G --> 1 I --> f(#9:List, #7:List) U --> #4:List V --> f(#1:List, #2:Elt, #10:List) W --> #5:List X --> #6:List Z --> f(#8:List, #2:Elt, #3:List, #9:List) Y --> 1 S --> #7:List Unifier 3391 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#10:List, #5:List) D --> f(#6:List, #8:List) H --> 1 G --> #3:List I --> f(#9:List, #7:List) U --> #4:List V --> f(#1:List, #2:Elt, #10:List) W --> #5:List X --> #6:List Z --> f(#8:List, #2:Elt, #3:List, #9:List) Y --> 1 S --> #7:List Unifier 3392 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#11:List, #6:List) D --> f(#7:List, #9:List) H --> #3:List G --> #4:List I --> f(#10:List, #8:List) U --> #5:List V --> f(#1:List, #2:Elt, #11:List) W --> #6:List X --> #7:List Z --> f(#9:List, #2:Elt, j(#3:List, #4:List), #10:List) Y --> 1 S --> #8:List Unifier 3393 A --> #3:List B --> #1:List E --> #2:Elt C --> f(#9:List, #4:List) D --> f(#5:List, #7:List) H --> 1 G --> 1 I --> f(#8:List, #6:List) U --> #3:List V --> f(#1:List, #2:Elt, #9:List) W --> #4:List X --> #5:List Z --> 1 Y --> f(#7:List, #2:Elt, 1, #8:List) S --> #6:List Unifier 3394 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#10:List, #5:List) D --> f(#6:List, #8:List) H --> #3:List G --> 1 I --> f(#9:List, #7:List) U --> #4:List V --> f(#1:List, #2:Elt, #10:List) W --> #5:List X --> #6:List Z --> 1 Y --> f(#8:List, #2:Elt, #3:List, #9:List) S --> #7:List Unifier 3395 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#10:List, #5:List) D --> f(#6:List, #8:List) H --> 1 G --> #3:List I --> f(#9:List, #7:List) U --> #4:List V --> f(#1:List, #2:Elt, #10:List) W --> #5:List X --> #6:List Z --> 1 Y --> f(#8:List, #2:Elt, #3:List, #9:List) S --> #7:List Unifier 3396 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#11:List, #6:List) D --> f(#7:List, #9:List) H --> #3:List G --> #4:List I --> f(#10:List, #8:List) U --> #5:List V --> f(#1:List, #2:Elt, #11:List) W --> #6:List X --> #7:List Z --> 1 Y --> f(#9:List, #2:Elt, j(#3:List, #4:List), #10:List) S --> #8:List Unifier 3397 A --> #4:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #7:List) H --> 1 G --> 1 I --> f(#8:List, #6:List) U --> #4:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #5:List Z --> f(#7:List, #2:Elt, 1, #8:List) Y --> 1 S --> #6:List Unifier 3398 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #8:List) H --> #4:List G --> 1 I --> f(#9:List, #7:List) U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> f(#8:List, #2:Elt, #4:List, #9:List) Y --> 1 S --> #7:List Unifier 3399 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #8:List) H --> 1 G --> #4:List I --> f(#9:List, #7:List) U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> f(#8:List, #2:Elt, #4:List, #9:List) Y --> 1 S --> #7:List Unifier 3400 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #9:List) H --> #4:List G --> #5:List I --> f(#10:List, #8:List) U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> f(#9:List, #2:Elt, j(#4:List, #5:List), #10:List) Y --> 1 S --> #8:List Unifier 3401 A --> #4:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #7:List) H --> 1 G --> 1 I --> f(#8:List, #6:List) U --> #4:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #5:List Z --> 1 Y --> f(#7:List, #2:Elt, 1, #8:List) S --> #6:List Unifier 3402 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #8:List) H --> #4:List G --> 1 I --> f(#9:List, #7:List) U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> f(#8:List, #2:Elt, #4:List, #9:List) S --> #7:List Unifier 3403 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #8:List) H --> 1 G --> #4:List I --> f(#9:List, #7:List) U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> f(#8:List, #2:Elt, #4:List, #9:List) S --> #7:List Unifier 3404 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #9:List) H --> #4:List G --> #5:List I --> f(#10:List, #8:List) U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> f(#9:List, #2:Elt, j(#4:List, #5:List), #10:List) S --> #8:List Unifier 3405 A --> #3:List B --> f(#4:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #7:List) H --> 1 G --> 1 I --> f(#8:List, #6:List) U --> #3:List V --> #4:List W --> f(#9:List, #1:Elt, #2:List) X --> #5:List Z --> f(#7:List, #1:Elt, 1, #8:List) Y --> 1 S --> #6:List Unifier 3406 A --> #4:List B --> f(#5:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #8:List) H --> #3:List G --> 1 I --> f(#9:List, #7:List) U --> #4:List V --> #5:List W --> f(#10:List, #1:Elt, #2:List) X --> #6:List Z --> f(#8:List, #1:Elt, #3:List, #9:List) Y --> 1 S --> #7:List Unifier 3407 A --> #4:List B --> f(#5:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #8:List) H --> 1 G --> #3:List I --> f(#9:List, #7:List) U --> #4:List V --> #5:List W --> f(#10:List, #1:Elt, #2:List) X --> #6:List Z --> f(#8:List, #1:Elt, #3:List, #9:List) Y --> 1 S --> #7:List Unifier 3408 A --> #5:List B --> f(#6:List, #11:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #9:List) H --> #3:List G --> #4:List I --> f(#10:List, #8:List) U --> #5:List V --> #6:List W --> f(#11:List, #1:Elt, #2:List) X --> #7:List Z --> f(#9:List, #1:Elt, j(#3:List, #4:List), #10:List) Y --> 1 S --> #8:List Unifier 3409 A --> #3:List B --> f(#4:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#5:List, #7:List) H --> 1 G --> 1 I --> f(#8:List, #6:List) U --> #3:List V --> #4:List W --> f(#9:List, #1:Elt, #2:List) X --> #5:List Z --> 1 Y --> f(#7:List, #1:Elt, 1, #8:List) S --> #6:List Unifier 3410 A --> #4:List B --> f(#5:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #8:List) H --> #3:List G --> 1 I --> f(#9:List, #7:List) U --> #4:List V --> #5:List W --> f(#10:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> f(#8:List, #1:Elt, #3:List, #9:List) S --> #7:List Unifier 3411 A --> #4:List B --> f(#5:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #8:List) H --> 1 G --> #3:List I --> f(#9:List, #7:List) U --> #4:List V --> #5:List W --> f(#10:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> f(#8:List, #1:Elt, #3:List, #9:List) S --> #7:List Unifier 3412 A --> #5:List B --> f(#6:List, #11:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #9:List) H --> #3:List G --> #4:List I --> f(#10:List, #8:List) U --> #5:List V --> #6:List W --> f(#11:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> f(#9:List, #1:Elt, j(#3:List, #4:List), #10:List) S --> #8:List Unifier 3413 A --> #4:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #7:List) H --> 1 G --> 1 I --> f(#8:List, #6:List) U --> #4:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #5:List Z --> f(#7:List, #2:Elt, 1, #8:List) Y --> 1 S --> #6:List Unifier 3414 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #8:List) H --> #4:List G --> 1 I --> f(#9:List, #7:List) U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> f(#8:List, #2:Elt, #4:List, #9:List) Y --> 1 S --> #7:List Unifier 3415 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #8:List) H --> 1 G --> #4:List I --> f(#9:List, #7:List) U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> f(#8:List, #2:Elt, #4:List, #9:List) Y --> 1 S --> #7:List Unifier 3416 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #9:List) H --> #4:List G --> #5:List I --> f(#10:List, #8:List) U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> f(#9:List, #2:Elt, j(#4:List, #5:List), #10:List) Y --> 1 S --> #8:List Unifier 3417 A --> #4:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#5:List, #7:List) H --> 1 G --> 1 I --> f(#8:List, #6:List) U --> #4:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #5:List Z --> 1 Y --> f(#7:List, #2:Elt, 1, #8:List) S --> #6:List Unifier 3418 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #8:List) H --> #4:List G --> 1 I --> f(#9:List, #7:List) U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> f(#8:List, #2:Elt, #4:List, #9:List) S --> #7:List Unifier 3419 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #8:List) H --> 1 G --> #4:List I --> f(#9:List, #7:List) U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> f(#8:List, #2:Elt, #4:List, #9:List) S --> #7:List Unifier 3420 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #9:List) H --> #4:List G --> #5:List I --> f(#10:List, #8:List) U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> f(#9:List, #2:Elt, j(#4:List, #5:List), #10:List) S --> #8:List Unifier 3421 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#10:List, #5:List) D --> f(#6:List, #7:List) H --> f(#8:List, #9:List) G --> 1 I --> #3:List U --> #4:List V --> f(#1:List, #2:Elt, #10:List) W --> #5:List X --> #6:List Z --> f(#7:List, #2:Elt, #8:List) Y --> 1 S --> f(#9:List, #3:List) Unifier 3422 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#10:List, #5:List) D --> f(#6:List, #7:List) H --> f(#8:List, #9:List) G --> 1 I --> #3:List U --> #4:List V --> f(#1:List, #2:Elt, #10:List) W --> #5:List X --> #6:List Z --> 1 Y --> f(#7:List, #2:Elt, #8:List) S --> f(#9:List, #3:List) Unifier 3423 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#10:List, #5:List) D --> f(#6:List, #7:List) H --> 1 G --> f(#8:List, #9:List) I --> #3:List U --> #4:List V --> f(#1:List, #2:Elt, #10:List) W --> #5:List X --> #6:List Z --> f(#7:List, #2:Elt, #8:List) Y --> 1 S --> f(#9:List, #3:List) Unifier 3424 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#10:List, #5:List) D --> f(#6:List, #7:List) H --> 1 G --> f(#8:List, #9:List) I --> #3:List U --> #4:List V --> f(#1:List, #2:Elt, #10:List) W --> #5:List X --> #6:List Z --> 1 Y --> f(#7:List, #2:Elt, #8:List) S --> f(#9:List, #3:List) Unifier 3425 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> f(#8:List, #9:List) G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> f(#7:List, #2:Elt, #8:List) Y --> 1 S --> f(#9:List, #4:List) Unifier 3426 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> f(#8:List, #9:List) G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> f(#7:List, #2:Elt, #8:List) S --> f(#9:List, #4:List) Unifier 3427 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> f(#8:List, #9:List) I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> f(#7:List, #2:Elt, #8:List) Y --> 1 S --> f(#9:List, #4:List) Unifier 3428 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> f(#8:List, #9:List) I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> f(#7:List, #2:Elt, #8:List) S --> f(#9:List, #4:List) Unifier 3429 A --> #4:List B --> f(#5:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #7:List) H --> f(#8:List, #9:List) G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#10:List, #1:Elt, #2:List) X --> #6:List Z --> f(#7:List, #1:Elt, #8:List) Y --> 1 S --> f(#9:List, #3:List) Unifier 3430 A --> #4:List B --> f(#5:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #7:List) H --> f(#8:List, #9:List) G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#10:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> f(#7:List, #1:Elt, #8:List) S --> f(#9:List, #3:List) Unifier 3431 A --> #4:List B --> f(#5:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #7:List) H --> 1 G --> f(#8:List, #9:List) I --> #3:List U --> #4:List V --> #5:List W --> f(#10:List, #1:Elt, #2:List) X --> #6:List Z --> f(#7:List, #1:Elt, #8:List) Y --> 1 S --> f(#9:List, #3:List) Unifier 3432 A --> #4:List B --> f(#5:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #7:List) H --> 1 G --> f(#8:List, #9:List) I --> #3:List U --> #4:List V --> #5:List W --> f(#10:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> f(#7:List, #1:Elt, #8:List) S --> f(#9:List, #3:List) Unifier 3433 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> f(#8:List, #9:List) G --> 1 I --> #4:List U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> f(#7:List, #2:Elt, #8:List) Y --> 1 S --> f(#9:List, #4:List) Unifier 3434 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> f(#8:List, #9:List) G --> 1 I --> #4:List U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> f(#7:List, #2:Elt, #8:List) S --> f(#9:List, #4:List) Unifier 3435 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> f(#8:List, #9:List) I --> #4:List U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> f(#7:List, #2:Elt, #8:List) Y --> 1 S --> f(#9:List, #4:List) Unifier 3436 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> f(#8:List, #9:List) I --> #4:List U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> f(#7:List, #2:Elt, #8:List) S --> f(#9:List, #4:List) Unifier 3437 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> f(#6:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #6:List Z --> f(#7:List, #2:Elt, 1) Y --> 1 S --> #3:List Unifier 3438 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> f(#7:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #7:List Z --> f(#8:List, #2:Elt, #3:List) Y --> 1 S --> #4:List Unifier 3439 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> f(#7:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #7:List Z --> f(#8:List, #2:Elt, #3:List) Y --> 1 S --> #4:List Unifier 3440 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List) D --> f(#8:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt, #10:List) W --> #7:List X --> #8:List Z --> f(#9:List, #2:Elt, j(#3:List, #4:List)) Y --> 1 S --> #5:List Unifier 3441 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> f(#6:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #6:List Z --> 1 Y --> f(#7:List, #2:Elt, 1) S --> #3:List Unifier 3442 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> f(#7:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #7:List Z --> 1 Y --> f(#8:List, #2:Elt, #3:List) S --> #4:List Unifier 3443 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> f(#7:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #7:List Z --> 1 Y --> f(#8:List, #2:Elt, #3:List) S --> #4:List Unifier 3444 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List) D --> f(#8:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt, #10:List) W --> #7:List X --> #8:List Z --> 1 Y --> f(#9:List, #2:Elt, j(#3:List, #4:List)) S --> #5:List Unifier 3445 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> f(#7:List, #2:Elt, 1) Y --> 1 S --> #4:List Unifier 3446 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> f(#8:List, #2:Elt, #4:List) Y --> 1 S --> #5:List Unifier 3447 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> f(#8:List, #2:Elt, #4:List) Y --> 1 S --> #5:List Unifier 3448 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #8:List Z --> f(#9:List, #2:Elt, j(#4:List, #5:List)) Y --> 1 S --> #6:List Unifier 3449 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> f(#7:List, #2:Elt, 1) S --> #4:List Unifier 3450 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> f(#8:List, #2:Elt, #4:List) S --> #5:List Unifier 3451 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> f(#8:List, #2:Elt, #4:List) S --> #5:List Unifier 3452 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #8:List Z --> 1 Y --> f(#9:List, #2:Elt, j(#4:List, #5:List)) S --> #6:List Unifier 3453 A --> #4:List B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #6:List Z --> f(#7:List, #1:Elt, 1) Y --> 1 S --> #3:List Unifier 3454 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #7:List Z --> f(#8:List, #1:Elt, #3:List) Y --> 1 S --> #4:List Unifier 3455 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #7:List Z --> f(#8:List, #1:Elt, #3:List) Y --> 1 S --> #4:List Unifier 3456 A --> #6:List B --> f(#7:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#8:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#10:List, #1:Elt, #2:List) X --> #8:List Z --> f(#9:List, #1:Elt, j(#3:List, #4:List)) Y --> 1 S --> #5:List Unifier 3457 A --> #4:List B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> f(#7:List, #1:Elt, 1) S --> #3:List Unifier 3458 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> f(#8:List, #1:Elt, #3:List) S --> #4:List Unifier 3459 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> f(#8:List, #1:Elt, #3:List) S --> #4:List Unifier 3460 A --> #6:List B --> f(#7:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#8:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#10:List, #1:Elt, #2:List) X --> #8:List Z --> 1 Y --> f(#9:List, #1:Elt, j(#3:List, #4:List)) S --> #5:List Unifier 3461 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> f(#7:List, #2:Elt, 1) Y --> 1 S --> #4:List Unifier 3462 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> f(#8:List, #2:Elt, #4:List) Y --> 1 S --> #5:List Unifier 3463 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> f(#8:List, #2:Elt, #4:List) Y --> 1 S --> #5:List Unifier 3464 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #8:List Z --> f(#9:List, #2:Elt, j(#4:List, #5:List)) Y --> 1 S --> #6:List Unifier 3465 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> f(#7:List, #2:Elt, 1) S --> #4:List Unifier 3466 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> f(#8:List, #2:Elt, #4:List) S --> #5:List Unifier 3467 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> f(#8:List, #2:Elt, #4:List) S --> #5:List Unifier 3468 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #8:List Z --> 1 Y --> f(#9:List, #2:Elt, j(#4:List, #5:List)) S --> #6:List Unifier 3469 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> f(#6:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #6:List Z --> f(#7:List, #2:Elt) Y --> 1 S --> f(1, #3:List) Unifier 3470 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> f(#7:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #7:List Z --> f(#8:List, #2:Elt) Y --> 1 S --> f(#3:List, #4:List) Unifier 3471 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> f(#7:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #7:List Z --> f(#8:List, #2:Elt) Y --> 1 S --> f(#3:List, #4:List) Unifier 3472 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List) D --> f(#8:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt, #10:List) W --> #7:List X --> #8:List Z --> f(#9:List, #2:Elt) Y --> 1 S --> f(j(#3:List, #4:List), #5:List) Unifier 3473 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> f(#6:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #6:List Z --> 1 Y --> f(#7:List, #2:Elt) S --> f(1, #3:List) Unifier 3474 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> f(#7:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #7:List Z --> 1 Y --> f(#8:List, #2:Elt) S --> f(#3:List, #4:List) Unifier 3475 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> f(#7:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #7:List Z --> 1 Y --> f(#8:List, #2:Elt) S --> f(#3:List, #4:List) Unifier 3476 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List) D --> f(#8:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt, #10:List) W --> #7:List X --> #8:List Z --> 1 Y --> f(#9:List, #2:Elt) S --> f(j(#3:List, #4:List), #5:List) Unifier 3477 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> f(#7:List, #2:Elt) Y --> 1 S --> f(1, #4:List) Unifier 3478 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> f(#8:List, #2:Elt) Y --> 1 S --> f(#4:List, #5:List) Unifier 3479 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> f(#8:List, #2:Elt) Y --> 1 S --> f(#4:List, #5:List) Unifier 3480 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #8:List Z --> f(#9:List, #2:Elt) Y --> 1 S --> f(j(#4:List, #5:List), #6:List) Unifier 3481 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> f(#7:List, #2:Elt) S --> f(1, #4:List) Unifier 3482 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> f(#8:List, #2:Elt) S --> f(#4:List, #5:List) Unifier 3483 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> f(#8:List, #2:Elt) S --> f(#4:List, #5:List) Unifier 3484 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #8:List Z --> 1 Y --> f(#9:List, #2:Elt) S --> f(j(#4:List, #5:List), #6:List) Unifier 3485 A --> #4:List B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #6:List Z --> f(#7:List, #1:Elt) Y --> 1 S --> f(1, #3:List) Unifier 3486 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #7:List Z --> f(#8:List, #1:Elt) Y --> 1 S --> f(#3:List, #4:List) Unifier 3487 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #7:List Z --> f(#8:List, #1:Elt) Y --> 1 S --> f(#3:List, #4:List) Unifier 3488 A --> #6:List B --> f(#7:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#8:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#10:List, #1:Elt, #2:List) X --> #8:List Z --> f(#9:List, #1:Elt) Y --> 1 S --> f(j(#3:List, #4:List), #5:List) Unifier 3489 A --> #4:List B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> f(#7:List, #1:Elt) S --> f(1, #3:List) Unifier 3490 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> f(#8:List, #1:Elt) S --> f(#3:List, #4:List) Unifier 3491 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> f(#8:List, #1:Elt) S --> f(#3:List, #4:List) Unifier 3492 A --> #6:List B --> f(#7:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#8:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#10:List, #1:Elt, #2:List) X --> #8:List Z --> 1 Y --> f(#9:List, #1:Elt) S --> f(j(#3:List, #4:List), #5:List) Unifier 3493 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> f(#7:List, #2:Elt) Y --> 1 S --> f(1, #4:List) Unifier 3494 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> f(#8:List, #2:Elt) Y --> 1 S --> f(#4:List, #5:List) Unifier 3495 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> f(#8:List, #2:Elt) Y --> 1 S --> f(#4:List, #5:List) Unifier 3496 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #8:List Z --> f(#9:List, #2:Elt) Y --> 1 S --> f(j(#4:List, #5:List), #6:List) Unifier 3497 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> f(#7:List, #2:Elt) S --> f(1, #4:List) Unifier 3498 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> f(#8:List, #2:Elt) S --> f(#4:List, #5:List) Unifier 3499 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> f(#8:List, #2:Elt) S --> f(#4:List, #5:List) Unifier 3500 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #8:List Z --> 1 Y --> f(#9:List, #2:Elt) S --> f(j(#4:List, #5:List), #6:List) Unifier 3501 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> f(#6:List, 1, #7:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #6:List Z --> 1 Y --> 1 S --> f(#7:List, #2:Elt, 1, #3:List) Unifier 3502 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> f(#6:List, #7:List, #8:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> #6:List Z --> #7:List Y --> 1 S --> f(#8:List, #2:Elt, 1, #3:List) Unifier 3503 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> f(#6:List, #7:List, #8:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> #6:List Z --> 1 Y --> #7:List S --> f(#8:List, #2:Elt, 1, #3:List) Unifier 3504 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#10:List, #5:List) D --> f(#6:List, j(#7:List, #8:List), #9:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> f(#1:List, #2:Elt, #10:List) W --> #5:List X --> #6:List Z --> #7:List Y --> #8:List S --> f(#9:List, #2:Elt, 1, #3:List) Unifier 3505 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> f(#7:List, 1, #8:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> f(#8:List, #2:Elt, #3:List, #4:List) Unifier 3506 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> f(#7:List, #8:List, #9:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#9:List, #2:Elt, #3:List, #4:List) Unifier 3507 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> f(#7:List, #8:List, #9:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#9:List, #2:Elt, #3:List, #4:List) Unifier 3508 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#11:List, #6:List) D --> f(#7:List, j(#8:List, #9:List), #10:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #11:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#10:List, #2:Elt, #3:List, #4:List) Unifier 3509 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> f(#7:List, 1, #8:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> f(#8:List, #2:Elt, #3:List, #4:List) Unifier 3510 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> f(#7:List, #8:List, #9:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#9:List, #2:Elt, #3:List, #4:List) Unifier 3511 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> f(#7:List, #8:List, #9:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#9:List, #2:Elt, #3:List, #4:List) Unifier 3512 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#11:List, #6:List) D --> f(#7:List, j(#8:List, #9:List), #10:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #11:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#10:List, #2:Elt, #3:List, #4:List) Unifier 3513 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List) D --> f(#8:List, 1, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt, #10:List) W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> f(#9:List, #2:Elt, j(#3:List, #4:List), #5:List) Unifier 3514 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#11:List, #7:List) D --> f(#8:List, #9:List, #10:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt, #11:List) W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#10:List, #2:Elt, j(#3:List, #4:List), #5:List) Unifier 3515 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#11:List, #7:List) D --> f(#8:List, #9:List, #10:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt, #11:List) W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#10:List, #2:Elt, j(#3:List, #4:List), #5:List) Unifier 3516 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#12:List, #7:List) D --> f(#8:List, j(#9:List, #10:List), #11:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt, #12:List) W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#11:List, #2:Elt, j(#3:List, #4:List), #5:List) Unifier 3517 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, 1, #7:List) H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> 1 S --> f(#7:List, #2:Elt, 1, #4:List) Unifier 3518 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List, #8:List) H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> #7:List Y --> 1 S --> f(#8:List, #2:Elt, 1, #4:List) Unifier 3519 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List, #8:List) H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> #7:List S --> f(#8:List, #2:Elt, 1, #4:List) Unifier 3520 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, j(#7:List, #8:List), #9:List) H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> #7:List Y --> #8:List S --> f(#9:List, #2:Elt, 1, #4:List) Unifier 3521 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, 1, #8:List) H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> 1 S --> f(#8:List, #2:Elt, #4:List, #5:List) Unifier 3522 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List, #9:List) H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#9:List, #2:Elt, #4:List, #5:List) Unifier 3523 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List, #9:List) H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#9:List, #2:Elt, #4:List, #5:List) Unifier 3524 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, j(#8:List, #9:List), #10:List) H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#10:List, #2:Elt, #4:List, #5:List) Unifier 3525 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, 1, #8:List) H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> 1 S --> f(#8:List, #2:Elt, #4:List, #5:List) Unifier 3526 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List, #9:List) H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#9:List, #2:Elt, #4:List, #5:List) Unifier 3527 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List, #9:List) H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#9:List, #2:Elt, #4:List, #5:List) Unifier 3528 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, j(#8:List, #9:List), #10:List) H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#10:List, #2:Elt, #4:List, #5:List) Unifier 3529 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, 1, #9:List) H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #8:List Z --> 1 Y --> 1 S --> f(#9:List, #2:Elt, j(#4:List, #5:List), #6:List) Unifier 3530 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List, #10:List) H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#10:List, #2:Elt, j(#4:List, #5:List), #6:List) Unifier 3531 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List, #10:List) H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#10:List, #2:Elt, j(#4:List, #5:List), #6:List) Unifier 3532 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, j(#9:List, #10:List), #11:List) H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#11:List, #2:Elt, j(#4:List, #5:List), #6:List) Unifier 3533 A --> #4:List B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#6:List, 1, #7:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#7:List, #1:Elt, 1, #3:List) Unifier 3534 A --> #4:List B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #7:List, #8:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#8:List, #1:Elt, 1, #3:List) Unifier 3535 A --> #4:List B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #7:List, #8:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#8:List, #1:Elt, 1, #3:List) Unifier 3536 A --> #4:List B --> f(#5:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#6:List, j(#7:List, #8:List), #9:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#10:List, #1:Elt, #2:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#9:List, #1:Elt, 1, #3:List) Unifier 3537 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#7:List, 1, #8:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#8:List, #1:Elt, #3:List, #4:List) Unifier 3538 A --> #5:List B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #8:List, #9:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#9:List, #1:Elt, #3:List, #4:List) Unifier 3539 A --> #5:List B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #8:List, #9:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#9:List, #1:Elt, #3:List, #4:List) Unifier 3540 A --> #5:List B --> f(#6:List, #11:List) E --> #1:Elt C --> #2:List D --> f(#7:List, j(#8:List, #9:List), #10:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#11:List, #1:Elt, #2:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#10:List, #1:Elt, #3:List, #4:List) Unifier 3541 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#7:List, 1, #8:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#8:List, #1:Elt, #3:List, #4:List) Unifier 3542 A --> #5:List B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #8:List, #9:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#9:List, #1:Elt, #3:List, #4:List) Unifier 3543 A --> #5:List B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #8:List, #9:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#9:List, #1:Elt, #3:List, #4:List) Unifier 3544 A --> #5:List B --> f(#6:List, #11:List) E --> #1:Elt C --> #2:List D --> f(#7:List, j(#8:List, #9:List), #10:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#11:List, #1:Elt, #2:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#10:List, #1:Elt, #3:List, #4:List) Unifier 3545 A --> #6:List B --> f(#7:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#8:List, 1, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#10:List, #1:Elt, #2:List) X --> #8:List Z --> 1 Y --> 1 S --> f(#9:List, #1:Elt, j(#3:List, #4:List), #5:List) Unifier 3546 A --> #6:List B --> f(#7:List, #11:List) E --> #1:Elt C --> #2:List D --> f(#8:List, #9:List, #10:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#11:List, #1:Elt, #2:List) X --> #8:List Z --> #9:List Y --> 1 S --> f(#10:List, #1:Elt, j(#3:List, #4:List), #5:List) Unifier 3547 A --> #6:List B --> f(#7:List, #11:List) E --> #1:Elt C --> #2:List D --> f(#8:List, #9:List, #10:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#11:List, #1:Elt, #2:List) X --> #8:List Z --> 1 Y --> #9:List S --> f(#10:List, #1:Elt, j(#3:List, #4:List), #5:List) Unifier 3548 A --> #6:List B --> f(#7:List, #12:List) E --> #1:Elt C --> #2:List D --> f(#8:List, j(#9:List, #10:List), #11:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#12:List, #1:Elt, #2:List) X --> #8:List Z --> #9:List Y --> #10:List S --> f(#11:List, #1:Elt, j(#3:List, #4:List), #5:List) Unifier 3549 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, 1, #7:List) H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#7:List, #2:Elt, 1, #4:List) Unifier 3550 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List, #8:List) H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#8:List, #2:Elt, 1, #4:List) Unifier 3551 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List, #8:List) H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#8:List, #2:Elt, 1, #4:List) Unifier 3552 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, j(#7:List, #8:List), #9:List) H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#9:List, #2:Elt, 1, #4:List) Unifier 3553 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, 1, #8:List) H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#8:List, #2:Elt, #4:List, #5:List) Unifier 3554 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List, #9:List) H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#9:List, #2:Elt, #4:List, #5:List) Unifier 3555 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List, #9:List) H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#9:List, #2:Elt, #4:List, #5:List) Unifier 3556 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, j(#8:List, #9:List), #10:List) H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#10:List, #2:Elt, #4:List, #5:List) Unifier 3557 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, 1, #8:List) H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#8:List, #2:Elt, #4:List, #5:List) Unifier 3558 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List, #9:List) H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#9:List, #2:Elt, #4:List, #5:List) Unifier 3559 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List, #9:List) H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#9:List, #2:Elt, #4:List, #5:List) Unifier 3560 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, j(#8:List, #9:List), #10:List) H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#10:List, #2:Elt, #4:List, #5:List) Unifier 3561 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, 1, #9:List) H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #8:List Z --> 1 Y --> 1 S --> f(#9:List, #2:Elt, j(#4:List, #5:List), #6:List) Unifier 3562 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List, #10:List) H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #8:List Z --> #9:List Y --> 1 S --> f(#10:List, #2:Elt, j(#4:List, #5:List), #6:List) Unifier 3563 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List, #10:List) H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #8:List Z --> 1 Y --> #9:List S --> f(#10:List, #2:Elt, j(#4:List, #5:List), #6:List) Unifier 3564 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, j(#9:List, #10:List), #11:List) H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #8:List Z --> #9:List Y --> #10:List S --> f(#11:List, #2:Elt, j(#4:List, #5:List), #6:List) Unifier 3565 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#7:List, #5:List) D --> f(#6:List, 1) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> f(#1:List, #2:Elt, #7:List) W --> #5:List X --> #6:List Z --> 1 Y --> 1 S --> f(#2:Elt, 1, #3:List) Unifier 3566 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> f(#6:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #6:List Z --> #7:List Y --> 1 S --> f(#2:Elt, 1, #3:List) Unifier 3567 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> f(#6:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #6:List Z --> 1 Y --> #7:List S --> f(#2:Elt, 1, #3:List) Unifier 3568 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#9:List, #5:List) D --> f(#6:List, j(#7:List, #8:List)) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> f(#1:List, #2:Elt, #9:List) W --> #5:List X --> #6:List Z --> #7:List Y --> #8:List S --> f(#2:Elt, 1, #3:List) Unifier 3569 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> f(#7:List, 1) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #8:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> f(#2:Elt, #3:List, #4:List) Unifier 3570 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> f(#7:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#2:Elt, #3:List, #4:List) Unifier 3571 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> f(#7:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#2:Elt, #3:List, #4:List) Unifier 3572 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> f(#7:List, j(#8:List, #9:List)) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#2:Elt, #3:List, #4:List) Unifier 3573 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#8:List, #6:List) D --> f(#7:List, 1) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #8:List) W --> #6:List X --> #7:List Z --> 1 Y --> 1 S --> f(#2:Elt, #3:List, #4:List) Unifier 3574 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> f(#7:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#2:Elt, #3:List, #4:List) Unifier 3575 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> f(#7:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#2:Elt, #3:List, #4:List) Unifier 3576 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#10:List, #6:List) D --> f(#7:List, j(#8:List, #9:List)) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #10:List) W --> #6:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#2:Elt, #3:List, #4:List) Unifier 3577 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#9:List, #7:List) D --> f(#8:List, 1) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt, #9:List) W --> #7:List X --> #8:List Z --> 1 Y --> 1 S --> f(#2:Elt, j(#3:List, #4:List), #5:List) Unifier 3578 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List) D --> f(#8:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt, #10:List) W --> #7:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#2:Elt, j(#3:List, #4:List), #5:List) Unifier 3579 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List) D --> f(#8:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt, #10:List) W --> #7:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#2:Elt, j(#3:List, #4:List), #5:List) Unifier 3580 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#11:List, #7:List) D --> f(#8:List, j(#9:List, #10:List)) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt, #11:List) W --> #7:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#2:Elt, j(#3:List, #4:List), #5:List) Unifier 3581 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, 1) H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> 1 S --> f(#2:Elt, 1, #4:List) Unifier 3582 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> #7:List Y --> 1 S --> f(#2:Elt, 1, #4:List) Unifier 3583 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> 1 Y --> #7:List S --> f(#2:Elt, 1, #4:List) Unifier 3584 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, j(#7:List, #8:List)) H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #6:List Z --> #7:List Y --> #8:List S --> f(#2:Elt, 1, #4:List) Unifier 3585 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, 1) H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> 1 S --> f(#2:Elt, #4:List, #5:List) Unifier 3586 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#2:Elt, #4:List, #5:List) Unifier 3587 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#2:Elt, #4:List, #5:List) Unifier 3588 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, j(#8:List, #9:List)) H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#2:Elt, #4:List, #5:List) Unifier 3589 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, 1) H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> 1 S --> f(#2:Elt, #4:List, #5:List) Unifier 3590 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> #8:List Y --> 1 S --> f(#2:Elt, #4:List, #5:List) Unifier 3591 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> 1 Y --> #8:List S --> f(#2:Elt, #4:List, #5:List) Unifier 3592 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, j(#8:List, #9:List)) H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #7:List Z --> #8:List Y --> #9:List S --> f(#2:Elt, #4:List, #5:List) Unifier 3593 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, 1) H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #8:List Z --> 1 Y --> 1 S --> f(#2:Elt, j(#4:List, #5:List), #6:List) Unifier 3594 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #8:List Z --> #9:List Y --> 1 S --> f(#2:Elt, j(#4:List, #5:List), #6:List) Unifier 3595 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #8:List Z --> 1 Y --> #9:List S --> f(#2:Elt, j(#4:List, #5:List), #6:List) Unifier 3596 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, j(#9:List, #10:List)) H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #8:List Z --> #9:List Y --> #10:List S --> f(#2:Elt, j(#4:List, #5:List), #6:List) Unifier 3597 A --> #4:List B --> f(#5:List, #7:List) E --> #1:Elt C --> #2:List D --> f(#6:List, 1) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#7:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#1:Elt, 1, #3:List) Unifier 3598 A --> #4:List B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#1:Elt, 1, #3:List) Unifier 3599 A --> #4:List B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#6:List, #7:List) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#1:Elt, 1, #3:List) Unifier 3600 A --> #4:List B --> f(#5:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#6:List, j(#7:List, #8:List)) H --> 1 G --> 1 I --> #3:List U --> #4:List V --> #5:List W --> f(#9:List, #1:Elt, #2:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#1:Elt, 1, #3:List) Unifier 3601 A --> #5:List B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#7:List, 1) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#8:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#1:Elt, #3:List, #4:List) Unifier 3602 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#1:Elt, #3:List, #4:List) Unifier 3603 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #8:List) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#1:Elt, #3:List, #4:List) Unifier 3604 A --> #5:List B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#7:List, j(#8:List, #9:List)) H --> #3:List G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#1:Elt, #3:List, #4:List) Unifier 3605 A --> #5:List B --> f(#6:List, #8:List) E --> #1:Elt C --> #2:List D --> f(#7:List, 1) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#8:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#1:Elt, #3:List, #4:List) Unifier 3606 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#1:Elt, #3:List, #4:List) Unifier 3607 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#7:List, #8:List) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#1:Elt, #3:List, #4:List) Unifier 3608 A --> #5:List B --> f(#6:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#7:List, j(#8:List, #9:List)) H --> 1 G --> #3:List I --> #4:List U --> #5:List V --> #6:List W --> f(#10:List, #1:Elt, #2:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#1:Elt, #3:List, #4:List) Unifier 3609 A --> #6:List B --> f(#7:List, #9:List) E --> #1:Elt C --> #2:List D --> f(#8:List, 1) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#9:List, #1:Elt, #2:List) X --> #8:List Z --> 1 Y --> 1 S --> f(#1:Elt, j(#3:List, #4:List), #5:List) Unifier 3610 A --> #6:List B --> f(#7:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#8:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#10:List, #1:Elt, #2:List) X --> #8:List Z --> #9:List Y --> 1 S --> f(#1:Elt, j(#3:List, #4:List), #5:List) Unifier 3611 A --> #6:List B --> f(#7:List, #10:List) E --> #1:Elt C --> #2:List D --> f(#8:List, #9:List) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#10:List, #1:Elt, #2:List) X --> #8:List Z --> 1 Y --> #9:List S --> f(#1:Elt, j(#3:List, #4:List), #5:List) Unifier 3612 A --> #6:List B --> f(#7:List, #11:List) E --> #1:Elt C --> #2:List D --> f(#8:List, j(#9:List, #10:List)) H --> #3:List G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#11:List, #1:Elt, #2:List) X --> #8:List Z --> #9:List Y --> #10:List S --> f(#1:Elt, j(#3:List, #4:List), #5:List) Unifier 3613 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, 1) H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> 1 S --> f(#2:Elt, 1, #4:List) Unifier 3614 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> #7:List Y --> 1 S --> f(#2:Elt, 1, #4:List) Unifier 3615 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, #7:List) H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> 1 Y --> #7:List S --> f(#2:Elt, 1, #4:List) Unifier 3616 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#6:List, j(#7:List, #8:List)) H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #6:List Z --> #7:List Y --> #8:List S --> f(#2:Elt, 1, #4:List) Unifier 3617 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, 1) H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#2:Elt, #4:List, #5:List) Unifier 3618 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#2:Elt, #4:List, #5:List) Unifier 3619 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#2:Elt, #4:List, #5:List) Unifier 3620 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, j(#8:List, #9:List)) H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#2:Elt, #4:List, #5:List) Unifier 3621 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, 1) H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> 1 S --> f(#2:Elt, #4:List, #5:List) Unifier 3622 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> #8:List Y --> 1 S --> f(#2:Elt, #4:List, #5:List) Unifier 3623 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, #8:List) H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> 1 Y --> #8:List S --> f(#2:Elt, #4:List, #5:List) Unifier 3624 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#7:List, j(#8:List, #9:List)) H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #7:List Z --> #8:List Y --> #9:List S --> f(#2:Elt, #4:List, #5:List) Unifier 3625 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, 1) H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #8:List Z --> 1 Y --> 1 S --> f(#2:Elt, j(#4:List, #5:List), #6:List) Unifier 3626 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #8:List Z --> #9:List Y --> 1 S --> f(#2:Elt, j(#4:List, #5:List), #6:List) Unifier 3627 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, #9:List) H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #8:List Z --> 1 Y --> #9:List S --> f(#2:Elt, j(#4:List, #5:List), #6:List) Unifier 3628 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> f(#8:List, j(#9:List, #10:List)) H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #8:List Z --> #9:List Y --> #10:List S --> f(#2:Elt, j(#4:List, #5:List), #6:List) Unifier 3629 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> f(#7:List, #6:List) U --> #4:List V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #3:List Z --> f(#2:Elt, 1, #7:List) Y --> 1 S --> #6:List Unifier 3630 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, #7:List) U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #3:List Z --> f(#2:Elt, #4:List, #8:List) Y --> 1 S --> #7:List Unifier 3631 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, #7:List) U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #3:List Z --> f(#2:Elt, #4:List, #8:List) Y --> 1 S --> #7:List Unifier 3632 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, #8:List) U --> #6:List V --> f(#1:List, #2:Elt, #10:List) W --> #7:List X --> #3:List Z --> f(#2:Elt, j(#4:List, #5:List), #9:List) Y --> 1 S --> #8:List Unifier 3633 A --> #4:List B --> #1:List E --> #2:Elt C --> f(#8:List, #5:List) D --> #3:List H --> 1 G --> 1 I --> f(#7:List, #6:List) U --> #4:List V --> f(#1:List, #2:Elt, #8:List) W --> #5:List X --> #3:List Z --> 1 Y --> f(#2:Elt, 1, #7:List) S --> #6:List Unifier 3634 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, #7:List) U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #3:List Z --> 1 Y --> f(#2:Elt, #4:List, #8:List) S --> #7:List Unifier 3635 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, #7:List) U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #3:List Z --> 1 Y --> f(#2:Elt, #4:List, #8:List) S --> #7:List Unifier 3636 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#10:List, #7:List) D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, #8:List) U --> #6:List V --> f(#1:List, #2:Elt, #10:List) W --> #7:List X --> #3:List Z --> 1 Y --> f(#2:Elt, j(#4:List, #5:List), #9:List) S --> #8:List Unifier 3637 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#7:List, #6:List) U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> f(#2:Elt, 1, #7:List) Y --> 1 S --> #6:List Unifier 3638 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#8:List, #7:List) U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> f(#2:Elt, #5:List, #8:List) Y --> 1 S --> #7:List Unifier 3639 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#8:List, #7:List) U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> f(#2:Elt, #5:List, #8:List) Y --> 1 S --> #7:List Unifier 3640 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#9:List, #8:List) U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> f(#2:Elt, j(#5:List, #6:List), #9:List) Y --> 1 S --> #8:List Unifier 3641 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#7:List, #6:List) U --> #5:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> f(#2:Elt, 1, #7:List) S --> #6:List Unifier 3642 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#8:List, #7:List) U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #5:List, #8:List) S --> #7:List Unifier 3643 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#8:List, #7:List) U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #5:List, #8:List) S --> #7:List Unifier 3644 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#9:List, #8:List) U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> f(#2:Elt, j(#5:List, #6:List), #9:List) S --> #8:List Unifier 3645 A --> #4:List B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#7:List, #6:List) U --> #4:List V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #3:List Z --> f(#1:Elt, 1, #7:List) Y --> 1 S --> #6:List Unifier 3646 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, #7:List) U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #3:List Z --> f(#1:Elt, #4:List, #8:List) Y --> 1 S --> #7:List Unifier 3647 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, #7:List) U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #3:List Z --> f(#1:Elt, #4:List, #8:List) Y --> 1 S --> #7:List Unifier 3648 A --> #6:List B --> f(#7:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, #8:List) U --> #6:List V --> #7:List W --> f(#10:List, #1:Elt, #2:List) X --> #3:List Z --> f(#1:Elt, j(#4:List, #5:List), #9:List) Y --> 1 S --> #8:List Unifier 3649 A --> #4:List B --> f(#5:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> f(#7:List, #6:List) U --> #4:List V --> #5:List W --> f(#8:List, #1:Elt, #2:List) X --> #3:List Z --> 1 Y --> f(#1:Elt, 1, #7:List) S --> #6:List Unifier 3650 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> f(#8:List, #7:List) U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #3:List Z --> 1 Y --> f(#1:Elt, #4:List, #8:List) S --> #7:List Unifier 3651 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> f(#8:List, #7:List) U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #3:List Z --> 1 Y --> f(#1:Elt, #4:List, #8:List) S --> #7:List Unifier 3652 A --> #6:List B --> f(#7:List, #10:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> f(#9:List, #8:List) U --> #6:List V --> #7:List W --> f(#10:List, #1:Elt, #2:List) X --> #3:List Z --> 1 Y --> f(#1:Elt, j(#4:List, #5:List), #9:List) S --> #8:List Unifier 3653 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#7:List, #6:List) U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> f(#2:Elt, 1, #7:List) Y --> 1 S --> #6:List Unifier 3654 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#8:List, #7:List) U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> f(#2:Elt, #5:List, #8:List) Y --> 1 S --> #7:List Unifier 3655 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#8:List, #7:List) U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> f(#2:Elt, #5:List, #8:List) Y --> 1 S --> #7:List Unifier 3656 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#9:List, #8:List) U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> f(#2:Elt, j(#5:List, #6:List), #9:List) Y --> 1 S --> #8:List Unifier 3657 A --> #5:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> f(#7:List, #6:List) U --> #5:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> f(#2:Elt, 1, #7:List) S --> #6:List Unifier 3658 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> f(#8:List, #7:List) U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> f(#2:Elt, #5:List, #8:List) S --> #7:List Unifier 3659 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> f(#8:List, #7:List) U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> f(#2:Elt, #5:List, #8:List) S --> #7:List Unifier 3660 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> f(#9:List, #8:List) U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> f(#2:Elt, j(#5:List, #6:List), #9:List) S --> #8:List Unifier 3661 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> f(#7:List, #8:List) G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #3:List Z --> f(#2:Elt, #7:List) Y --> 1 S --> f(#8:List, #4:List) Unifier 3662 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> f(#7:List, #8:List) G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #3:List Z --> 1 Y --> f(#2:Elt, #7:List) S --> f(#8:List, #4:List) Unifier 3663 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> 1 G --> f(#7:List, #8:List) I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #3:List Z --> f(#2:Elt, #7:List) Y --> 1 S --> f(#8:List, #4:List) Unifier 3664 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#9:List, #6:List) D --> #3:List H --> 1 G --> f(#7:List, #8:List) I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #9:List) W --> #6:List X --> #3:List Z --> 1 Y --> f(#2:Elt, #7:List) S --> f(#8:List, #4:List) Unifier 3665 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#7:List, #8:List) G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> f(#2:Elt, #7:List) Y --> 1 S --> f(#8:List, #5:List) Unifier 3666 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#7:List, #8:List) G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #7:List) S --> f(#8:List, #5:List) Unifier 3667 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#7:List, #8:List) I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> f(#2:Elt, #7:List) Y --> 1 S --> f(#8:List, #5:List) Unifier 3668 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#7:List, #8:List) I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #7:List) S --> f(#8:List, #5:List) Unifier 3669 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#7:List, #8:List) G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #3:List Z --> f(#1:Elt, #7:List) Y --> 1 S --> f(#8:List, #4:List) Unifier 3670 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> f(#7:List, #8:List) G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #3:List Z --> 1 Y --> f(#1:Elt, #7:List) S --> f(#8:List, #4:List) Unifier 3671 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#7:List, #8:List) I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #3:List Z --> f(#1:Elt, #7:List) Y --> 1 S --> f(#8:List, #4:List) Unifier 3672 A --> #5:List B --> f(#6:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> f(#7:List, #8:List) I --> #4:List U --> #5:List V --> #6:List W --> f(#9:List, #1:Elt, #2:List) X --> #3:List Z --> 1 Y --> f(#1:Elt, #7:List) S --> f(#8:List, #4:List) Unifier 3673 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#7:List, #8:List) G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> f(#2:Elt, #7:List) Y --> 1 S --> f(#8:List, #5:List) Unifier 3674 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> f(#7:List, #8:List) G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> f(#2:Elt, #7:List) S --> f(#8:List, #5:List) Unifier 3675 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#7:List, #8:List) I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> f(#2:Elt, #7:List) Y --> 1 S --> f(#8:List, #5:List) Unifier 3676 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> f(#7:List, #8:List) I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> f(#2:Elt, #7:List) S --> f(#8:List, #5:List) Unifier 3677 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #7:List) W --> #6:List X --> #3:List Z --> f(#2:Elt, 1) Y --> 1 S --> #4:List Unifier 3678 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt, #8:List) W --> #7:List X --> #3:List Z --> f(#2:Elt, #4:List) Y --> 1 S --> #5:List Unifier 3679 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt, #8:List) W --> #7:List X --> #3:List Z --> f(#2:Elt, #4:List) Y --> 1 S --> #5:List Unifier 3680 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#9:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt, #9:List) W --> #8:List X --> #3:List Z --> f(#2:Elt, j(#4:List, #5:List)) Y --> 1 S --> #6:List Unifier 3681 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #7:List) W --> #6:List X --> #3:List Z --> 1 Y --> f(#2:Elt, 1) S --> #4:List Unifier 3682 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt, #8:List) W --> #7:List X --> #3:List Z --> 1 Y --> f(#2:Elt, #4:List) S --> #5:List Unifier 3683 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt, #8:List) W --> #7:List X --> #3:List Z --> 1 Y --> f(#2:Elt, #4:List) S --> #5:List Unifier 3684 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#9:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt, #9:List) W --> #8:List X --> #3:List Z --> 1 Y --> f(#2:Elt, j(#4:List, #5:List)) S --> #6:List Unifier 3685 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> f(#2:Elt, 1) Y --> 1 S --> #5:List Unifier 3686 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> f(#2:Elt, #5:List) Y --> 1 S --> #6:List Unifier 3687 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> f(#2:Elt, #5:List) Y --> 1 S --> #6:List Unifier 3688 A --> #8:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> #8:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> f(#2:Elt, j(#5:List, #6:List)) Y --> 1 S --> #7:List Unifier 3689 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> f(#2:Elt, 1) S --> #5:List Unifier 3690 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #5:List) S --> #6:List Unifier 3691 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> f(#2:Elt, #5:List) S --> #6:List Unifier 3692 A --> #8:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> #8:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> f(#2:Elt, j(#5:List, #6:List)) S --> #7:List Unifier 3693 A --> #5:List B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#7:List, #1:Elt, #2:List) X --> #3:List Z --> f(#1:Elt, 1) Y --> 1 S --> #4:List Unifier 3694 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #7:List W --> f(#8:List, #1:Elt, #2:List) X --> #3:List Z --> f(#1:Elt, #4:List) Y --> 1 S --> #5:List Unifier 3695 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#8:List, #1:Elt, #2:List) X --> #3:List Z --> f(#1:Elt, #4:List) Y --> 1 S --> #5:List Unifier 3696 A --> #7:List B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #8:List W --> f(#9:List, #1:Elt, #2:List) X --> #3:List Z --> f(#1:Elt, j(#4:List, #5:List)) Y --> 1 S --> #6:List Unifier 3697 A --> #5:List B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#7:List, #1:Elt, #2:List) X --> #3:List Z --> 1 Y --> f(#1:Elt, 1) S --> #4:List Unifier 3698 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #7:List W --> f(#8:List, #1:Elt, #2:List) X --> #3:List Z --> 1 Y --> f(#1:Elt, #4:List) S --> #5:List Unifier 3699 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#8:List, #1:Elt, #2:List) X --> #3:List Z --> 1 Y --> f(#1:Elt, #4:List) S --> #5:List Unifier 3700 A --> #7:List B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #8:List W --> f(#9:List, #1:Elt, #2:List) X --> #3:List Z --> 1 Y --> f(#1:Elt, j(#4:List, #5:List)) S --> #6:List Unifier 3701 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> f(#2:Elt, 1) Y --> 1 S --> #5:List Unifier 3702 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> f(#2:Elt, #5:List) Y --> 1 S --> #6:List Unifier 3703 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> f(#2:Elt, #5:List) Y --> 1 S --> #6:List Unifier 3704 A --> #8:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> #8:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> f(#2:Elt, j(#5:List, #6:List)) Y --> 1 S --> #7:List Unifier 3705 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> f(#2:Elt, 1) S --> #5:List Unifier 3706 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> f(#2:Elt, #5:List) S --> #6:List Unifier 3707 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> f(#2:Elt, #5:List) S --> #6:List Unifier 3708 A --> #8:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> #8:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> f(#2:Elt, j(#5:List, #6:List)) S --> #7:List Unifier 3709 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #7:List) W --> #6:List X --> #3:List Z --> #2:Elt Y --> 1 S --> f(1, #4:List) Unifier 3710 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt, #8:List) W --> #7:List X --> #3:List Z --> #2:Elt Y --> 1 S --> f(#4:List, #5:List) Unifier 3711 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt, #8:List) W --> #7:List X --> #3:List Z --> #2:Elt Y --> 1 S --> f(#4:List, #5:List) Unifier 3712 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#9:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt, #9:List) W --> #8:List X --> #3:List Z --> #2:Elt Y --> 1 S --> f(j(#4:List, #5:List), #6:List) Unifier 3713 A --> #5:List B --> #1:List E --> #2:Elt C --> f(#7:List, #6:List) D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> f(#1:List, #2:Elt, #7:List) W --> #6:List X --> #3:List Z --> 1 Y --> #2:Elt S --> f(1, #4:List) Unifier 3714 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt, #8:List) W --> #7:List X --> #3:List Z --> 1 Y --> #2:Elt S --> f(#4:List, #5:List) Unifier 3715 A --> #6:List B --> #1:List E --> #2:Elt C --> f(#8:List, #7:List) D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt, #8:List) W --> #7:List X --> #3:List Z --> 1 Y --> #2:Elt S --> f(#4:List, #5:List) Unifier 3716 A --> #7:List B --> #1:List E --> #2:Elt C --> f(#9:List, #8:List) D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt, #9:List) W --> #8:List X --> #3:List Z --> 1 Y --> #2:Elt S --> f(j(#4:List, #5:List), #6:List) Unifier 3717 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> #2:Elt Y --> 1 S --> f(1, #5:List) Unifier 3718 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> #2:Elt Y --> 1 S --> f(#5:List, #6:List) Unifier 3719 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> #2:Elt Y --> 1 S --> f(#5:List, #6:List) Unifier 3720 A --> #8:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> #8:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> #2:Elt Y --> 1 S --> f(j(#5:List, #6:List), #7:List) Unifier 3721 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> #6:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> #2:Elt S --> f(1, #5:List) Unifier 3722 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> #2:Elt S --> f(#5:List, #6:List) Unifier 3723 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> #7:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> #2:Elt S --> f(#5:List, #6:List) Unifier 3724 A --> #8:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> #8:List V --> f(#1:List, #2:Elt) W --> #3:List X --> #4:List Z --> 1 Y --> #2:Elt S --> f(j(#5:List, #6:List), #7:List) Unifier 3725 A --> #5:List B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#7:List, #1:Elt, #2:List) X --> #3:List Z --> #1:Elt Y --> 1 S --> f(1, #4:List) Unifier 3726 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #7:List W --> f(#8:List, #1:Elt, #2:List) X --> #3:List Z --> #1:Elt Y --> 1 S --> f(#4:List, #5:List) Unifier 3727 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#8:List, #1:Elt, #2:List) X --> #3:List Z --> #1:Elt Y --> 1 S --> f(#4:List, #5:List) Unifier 3728 A --> #7:List B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #8:List W --> f(#9:List, #1:Elt, #2:List) X --> #3:List Z --> #1:Elt Y --> 1 S --> f(j(#4:List, #5:List), #6:List) Unifier 3729 A --> #5:List B --> f(#6:List, #7:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> 1 I --> #4:List U --> #5:List V --> #6:List W --> f(#7:List, #1:Elt, #2:List) X --> #3:List Z --> 1 Y --> #1:Elt S --> f(1, #4:List) Unifier 3730 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> 1 I --> #5:List U --> #6:List V --> #7:List W --> f(#8:List, #1:Elt, #2:List) X --> #3:List Z --> 1 Y --> #1:Elt S --> f(#4:List, #5:List) Unifier 3731 A --> #6:List B --> f(#7:List, #8:List) E --> #1:Elt C --> #2:List D --> #3:List H --> 1 G --> #4:List I --> #5:List U --> #6:List V --> #7:List W --> f(#8:List, #1:Elt, #2:List) X --> #3:List Z --> 1 Y --> #1:Elt S --> f(#4:List, #5:List) Unifier 3732 A --> #7:List B --> f(#8:List, #9:List) E --> #1:Elt C --> #2:List D --> #3:List H --> #4:List G --> #5:List I --> #6:List U --> #7:List V --> #8:List W --> f(#9:List, #1:Elt, #2:List) X --> #3:List Z --> 1 Y --> #1:Elt S --> f(j(#4:List, #5:List), #6:List) Unifier 3733 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> #2:Elt Y --> 1 S --> f(1, #5:List) Unifier 3734 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> #2:Elt Y --> 1 S --> f(#5:List, #6:List) Unifier 3735 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> #2:Elt Y --> 1 S --> f(#5:List, #6:List) Unifier 3736 A --> #8:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> #8:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> #2:Elt Y --> 1 S --> f(j(#5:List, #6:List), #7:List) Unifier 3737 A --> #6:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> 1 I --> #5:List U --> #6:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> #2:Elt S --> f(1, #5:List) Unifier 3738 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> 1 I --> #6:List U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> #2:Elt S --> f(#5:List, #6:List) Unifier 3739 A --> #7:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> 1 G --> #5:List I --> #6:List U --> #7:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> #2:Elt S --> f(#5:List, #6:List) Unifier 3740 A --> #8:List B --> #1:List E --> #2:Elt C --> #3:List D --> #4:List H --> #5:List G --> #6:List I --> #7:List U --> #8:List V --> #1:List W --> f(#2:Elt, #3:List) X --> #4:List Z --> 1 Y --> #2:Elt S --> f(j(#5:List, #6:List), #7:List) ========================================== unify in FOO : P P =? Q Q R R H . No unifier. ========================================== unify in FOO : P P Q =? Q R R H . No unifier. ========================================== unify in FOO : P P =? Q Q G G H . No unifier. ========================================== unify in FOO : P P Q =? Q G G H . No unifier. ========================================== unify in FOO : P P =? Q Q R H R . No unifier. ========================================== unify in FOO : P P Q =? Q R H R . No unifier. ========================================== unify in FOO : P P =? Q Q G H G . No unifier. ========================================== unify in FOO : P P Q =? Q G H G . No unifier. ========================================== unify in FOO : P P =? Q Q G S S . No unifier. ========================================== unify in FOO : P P Q =? Q G S S . No unifier. ========================================== unify in FOO : P P =? Q Q G H H . No unifier. ========================================== unify in FOO : P P Q =? Q G H H . No unifier. ========================================== unify in FOO : P P =? Q Q G H I . No unifier. ========================================== unify in FOO : P P Q =? Q G H I . No unifier. ========================================== unify in FOO : P P =? Q G Q S S . No unifier. ========================================== unify in FOO : P P Q =? G Q S S . No unifier. ========================================== unify in FOO : P P =? F R R S S . No unifier. ========================================== unify in FOO : P P F =? R R S S . No unifier. ========================================== unify in FOO : P Q P =? Q R R H . No unifier. ========================================== unify in FOO : P Q P =? Q G G H . No unifier. ========================================== unify in FOO : P Q P =? Q R H R . No unifier. ========================================== unify in FOO : P Q P =? Q G H G . No unifier. ========================================== unify in FOO : P Q P =? Q G S S . No unifier. ========================================== unify in FOO : P Q P =? Q G H H . No unifier. ========================================== unify in FOO : P Q P =? Q G H I . No unifier. ========================================== unify in FOO : P Q P =? G Q S S . No unifier. ========================================== unify in FOO : P F P =? R R S S . No unifier. ========================================== unify in FOO : P Q Q =? R P R H . No unifier. ========================================== unify in FOO : P Q Q =? G P G H . No unifier. ========================================== unify in FOO : P Q Q =? R P H R . No unifier. ========================================== unify in FOO : P Q Q =? G P H G . No unifier. ========================================== unify in FOO : P Q Q =? G P S S . No unifier. ========================================== unify in FOO : P Q Q =? G P H H . No unifier. ========================================== unify in FOO : P Q Q =? G P H I . No unifier. ========================================== unify in FOO : P Q Q =? R R P H . No unifier. ========================================== unify in FOO : P Q Q =? G G P H . No unifier. ========================================== unify in FOO : P Q Q =? R R H P . No unifier. ========================================== unify in FOO : P Q Q =? G G H P . No unifier. ========================================== unify in FOO : E Q Q =? R R S S . No unifier. ========================================== unify in FOO : P Q Q =? R H P R . No unifier. ========================================== unify in FOO : P Q Q =? G H P G . No unifier. ========================================== unify in FOO : P Q Q =? G S P S . No unifier. ========================================== unify in FOO : P Q Q =? G H P H . No unifier. ========================================== unify in FOO : P Q Q =? G H P I . No unifier. ========================================== unify in FOO : P Q Q =? R H R P . No unifier. ========================================== unify in FOO : P Q Q =? G H G P . No unifier. ========================================== unify in FOO : P Q Q =? G S S P . No unifier. ========================================== unify in FOO : P Q Q =? G H H P . No unifier. ========================================== unify in FOO : P Q Q =? G H I P . No unifier. ========================================== unify in FOO : P Q R R =? H H Q I I . Unifier 1 P --> #2:Elt #2:Elt Q --> #1:Foo R --> #3:Elt H --> #2:Elt I --> #3:Elt ========================================== unify in FOO : P Q R R =? H H Q I J . Unifier 1 P --> #2:Elt #2:Elt Q --> #1:Foo R --> #3:Elt H --> #2:Elt I --> #3:Elt J --> #3:Elt ========================================== unify in FOO : P Q R R =? H I Q H I . Unifier 1 P --> #2:Elt #2:Elt Q --> #1:Foo R --> #2:Elt H --> #2:Elt I --> #2:Elt ========================================== unify in FOO : P Q R R =? H I Q H J . Unifier 1 P --> #2:Elt #3:Elt Q --> #1:Foo R --> #2:Elt H --> #2:Elt I --> #3:Elt J --> #2:Elt ========================================== unify in FOO : P Q R R =? H I Q I H . Unifier 1 P --> #2:Elt #2:Elt Q --> #1:Foo R --> #2:Elt H --> #2:Elt I --> #2:Elt ========================================== unify in FOO : P Q R R =? H I Q I J . Unifier 1 P --> #2:Elt #3:Elt Q --> #1:Foo R --> #3:Elt H --> #2:Elt I --> #3:Elt J --> #3:Elt ========================================== unify in FOO : P Q R R =? H I Q J H . Unifier 1 P --> #2:Elt #3:Elt Q --> #1:Foo R --> #2:Elt H --> #2:Elt I --> #3:Elt J --> #2:Elt ========================================== unify in FOO : P Q R R =? H I Q J I . Unifier 1 P --> #2:Elt #3:Elt Q --> #1:Foo R --> #3:Elt H --> #2:Elt I --> #3:Elt J --> #3:Elt ========================================== unify in FOO : P Q R R =? H I Q J J . Unifier 1 P --> #2:Elt #3:Elt Q --> #1:Foo R --> #4:Elt H --> #2:Elt I --> #3:Elt J --> #4:Elt ========================================== unify in FOO : P Q R R =? H I Q J K . Unifier 1 P --> #2:Elt #3:Elt Q --> #1:Foo R --> #4:Elt H --> #2:Elt I --> #3:Elt J --> #4:Elt K --> #4:Elt ========================================== unify in FOO : a Q =? Q c . No unifier. ========================================== unify in FOO : P b =? c P . No unifier. ========================================== unify in FOO : a a Q =? Q c c . No unifier. ========================================== unify in FOO : a a Q =? Q c S . No unifier. ========================================== unify in FOO : a a Q =? Q R d . No unifier. ========================================== unify in FOO : P P =? Q Q c d . No unifier. ========================================== unify in FOO : P P Q =? Q c d . No unifier. ========================================== unify in FOO : a a Q =? Q c d . No unifier. ========================================== unify in FOO : a a Q =? R Q d . No unifier. ========================================== unify in FOO : P P Q =? c Q d . No unifier. ========================================== unify in FOO : P P =? b R R d . No unifier. ========================================== unify in FOO : P P =? Q c d Q . No unifier. ========================================== unify in FOO : P P b =? R d R . No unifier. ========================================== unify in FOO : P P =? b c S S . No unifier. ========================================== unify in FOO : a Q a =? Q c c . No unifier. ========================================== unify in FOO : a Q a =? Q c S . No unifier. ========================================== unify in FOO : a Q a =? Q R d . No unifier. ========================================== unify in FOO : P Q P =? Q c d . No unifier. ========================================== unify in FOO : a Q a =? Q c d . No unifier. ========================================== unify in FOO : P b P =? R R d . No unifier. ========================================== unify in FOO : a Q a =? R d Q . No unifier. ========================================== unify in FOO : P Q P =? c d Q . No unifier. ========================================== unify in FOO : P b P =? c S S . No unifier. ========================================== unify in FOO : P b b =? c P c . No unifier. ========================================== unify in FOO : P b b =? c P S . No unifier. ========================================== unify in FOO : P b b =? R P d . No unifier. ========================================== unify in FOO : P Q Q =? c P d . No unifier. ========================================== unify in FOO : P b b =? c P d . No unifier. ========================================== unify in FOO : P b b =? c c P . No unifier. ========================================== unify in FOO : P b b =? c S P . No unifier. ========================================== unify in FOO : P b b =? R d P . No unifier. ========================================== unify in FOO : P Q Q =? c d P . No unifier. ========================================== unify in FOO : P b b =? c d P . No unifier. ========================================== unify in FOO : a Q Q =? R d R . No unifier. ========================================== unify in FOO : P b R =? P R d . No unifier. ========================================== unify in FOO : a b R =? a R d . No unifier. ========================================== unify in FOO : P Q c =? P d Q . No unifier. ========================================== unify in FOO : a Q c =? a d Q . No unifier. ========================================== unify in FOO : P Q c =? Q P d . No unifier. ========================================== unify in FOO : a Q c =? Q a d . No unifier. ========================================== unify in FOO : P b c =? b P d . No unifier. ========================================== unify in FOO : a Q c =? Q c a . No unifier. ========================================== unify in FOO : a Q c =? Q c S . No unifier. ========================================== unify in FOO : a Q R =? Q R d . No unifier. ========================================== unify in FOO : P b R =? b R d . No unifier. ========================================== unify in FOO : P Q c =? Q c d . No unifier. ========================================== unify in FOO : a Q c =? Q c d . No unifier. ========================================== unify in FOO : a Q c =? Q S a . No unifier. ========================================== unify in FOO : a Q R =? Q d a . No unifier. ========================================== unify in FOO : P Q c =? Q d P . No unifier. ========================================== unify in FOO : a Q c =? Q d a . No unifier. ========================================== unify in FOO : P b c =? b d P . No unifier. ========================================== unify in FOO : a Q R =? Q d R . No unifier. ========================================== unify in FOO : a Q c =? Q d c . No unifier. ========================================== unify in FOO : a Q c =? Q S S . No unifier. ========================================== unify in FOO : a Q R =? Q d d . No unifier. ========================================== unify in FOO : P Q c =? Q d d . No unifier. ========================================== unify in FOO : a Q c =? Q d d . No unifier. ========================================== unify in FOO : a Q R =? Q d T . No unifier. ========================================== unify in FOO : a Q c =? Q d T . No unifier. ========================================== unify in FOO : P Q c =? Q S e . No unifier. ========================================== unify in FOO : a Q c =? Q S e . No unifier. ========================================== unify in FOO : a Q R =? Q d e . No unifier. ========================================== unify in FOO : P Q c =? Q d e . No unifier. ========================================== unify in FOO : a Q c =? Q d e . No unifier. ========================================== unify in FOO : P b c =? c P b . No unifier. ========================================== unify in FOO : P b c =? c P S . No unifier. ========================================== unify in FOO : P b R =? R P d . No unifier. ========================================== unify in FOO : a b R =? R a d . No unifier. ========================================== unify in FOO : P Q c =? c P d . No unifier. ========================================== unify in FOO : P b c =? c P d . No unifier. ========================================== unify in FOO : a Q R =? R Q d . No unifier. ========================================== unify in FOO : a b R =? R b d . No unifier. ========================================== unify in FOO : P b R =? R d P . No unifier. ========================================== unify in FOO : a b R =? R d a . No unifier. ========================================== unify in FOO : P b c =? c d P . No unifier. ========================================== unify in FOO : a Q R =? R d Q . No unifier. ========================================== unify in FOO : a b R =? R d b . No unifier. ========================================== unify in FOO : P Q c =? c d Q . No unifier. ========================================== unify in FOO : a b R =? R S S . No unifier. ========================================== unify in FOO : a Q R =? R d d . No unifier. ========================================== unify in FOO : P b R =? R d d . No unifier. ========================================== unify in FOO : a b R =? R d d . No unifier. ========================================== unify in FOO : a b R =? R d T . No unifier. ========================================== unify in FOO : a b R =? R S e . No unifier. ========================================== unify in FOO : a Q R =? R d e . No unifier. ========================================== unify in FOO : P b R =? R d e . No unifier. ========================================== unify in FOO : a b R =? R d e . No unifier. ========================================== unify in FOO : a Q c =? S a Q . No unifier. ========================================== unify in FOO : P b c =? S P b . No unifier. ========================================== unify in FOO : P b R =? d P b . No unifier. ========================================== unify in FOO : P Q c =? d P Q . No unifier. ========================================== unify in FOO : P b c =? d P b . No unifier. ========================================== unify in FOO : P b R =? d P R . No unifier. ========================================== unify in FOO : P b c =? d P c . No unifier. ========================================== unify in FOO : P b c =? S P S . No unifier. ========================================== unify in FOO : P b R =? d P d . No unifier. ========================================== unify in FOO : P Q c =? d P d . No unifier. ========================================== unify in FOO : P b c =? d P d . No unifier. ========================================== unify in FOO : P b R =? d P T . No unifier. ========================================== unify in FOO : P b c =? d P T . No unifier. ========================================== unify in FOO : P Q c =? S P e . No unifier. ========================================== unify in FOO : P b c =? S P e . No unifier. ========================================== unify in FOO : P b R =? d P e . No unifier. ========================================== unify in FOO : P Q c =? d P e . No unifier. ========================================== unify in FOO : P b c =? d P e . No unifier. ========================================== unify in FOO : P Q c =? d Q P . No unifier. ========================================== unify in FOO : P b c =? d b P . No unifier. ========================================== unify in FOO : a b R =? S R a . No unifier. ========================================== unify in FOO : P b R =? d R P . No unifier. ========================================== unify in FOO : P b c =? d c P . No unifier. ========================================== unify in FOO : a b R =? S R S . No unifier. ========================================== unify in FOO : P b R =? d R d . No unifier. ========================================== unify in FOO : P b R =? S R e . No unifier. ========================================== unify in FOO : a b R =? S R e . No unifier. ========================================== unify in FOO : P b R =? d R e . No unifier. ========================================== unify in FOO : P b c =? S S P . No unifier. ========================================== unify in FOO : P b R =? d d P . No unifier. ========================================== unify in FOO : P Q c =? d d P . No unifier. ========================================== unify in FOO : P b c =? d d P . No unifier. ========================================== unify in FOO : a Q c =? S S Q . No unifier. ========================================== unify in FOO : P Q c =? d d Q . No unifier. ========================================== unify in FOO : P b c =? d T P . No unifier. ========================================== unify in FOO : P b c =? S e P . No unifier. ========================================== unify in FOO : P b R =? d e P . No unifier. ========================================== unify in FOO : P Q c =? d e P . No unifier. ========================================== unify in FOO : P b c =? d e P . No unifier. ========================================== unify in FOO : P Q c =? S e Q . No unifier. ========================================== unify in FOO : a Q c =? S e Q . No unifier. ========================================== unify in FOO : P Q c =? d e Q . No unifier. ========================================== unify in FOO : P P =? Q Q R R d . No unifier. ========================================== unify in FOO : P P Q =? Q R R d . No unifier. ========================================== unify in FOO : P P =? Q Q c c d . No unifier. ========================================== unify in FOO : P P Q =? Q c c d . No unifier. ========================================== unify in FOO : P P =? Q Q R d R . No unifier. ========================================== unify in FOO : P P Q =? Q R d R . No unifier. ========================================== unify in FOO : P P =? Q Q c d c . No unifier. ========================================== unify in FOO : P P Q =? Q c d c . No unifier. ========================================== unify in FOO : P P =? Q Q c S S . No unifier. ========================================== unify in FOO : P P Q =? Q c S S . No unifier. ========================================== unify in FOO : P P =? Q Q c d d . No unifier. ========================================== unify in FOO : P P Q =? Q c d d . No unifier. ========================================== unify in FOO : P P =? Q Q c d e . No unifier. ========================================== unify in FOO : P P Q =? Q c d e . No unifier. ========================================== unify in FOO : P P =? Q c Q S S . No unifier. ========================================== unify in FOO : P P Q =? c Q S S . No unifier. ========================================== unify in FOO : P P =? b R R S S . No unifier. ========================================== unify in FOO : P P b =? R R S S . No unifier. ========================================== unify in FOO : P P b =? R R S e . No unifier. ========================================== unify in FOO : P P b =? R S R e . No unifier. ========================================== unify in FOO : P P b =? R S S e . No unifier. ========================================== unify in FOO : P Q P =? Q R R d . No unifier. ========================================== unify in FOO : P Q P =? Q c c d . No unifier. ========================================== unify in FOO : P Q P =? Q R d R . No unifier. ========================================== unify in FOO : P Q P =? Q c d c . No unifier. ========================================== unify in FOO : P Q P =? Q c S S . No unifier. ========================================== unify in FOO : P Q P =? Q c d d . No unifier. ========================================== unify in FOO : P Q P =? Q c d e . No unifier. ========================================== unify in FOO : P Q P =? c Q S S . No unifier. ========================================== unify in FOO : P b P =? R R S S . No unifier. ========================================== unify in FOO : P Q Q =? R P R d . No unifier. ========================================== unify in FOO : P Q Q =? c P c d . No unifier. ========================================== unify in FOO : P Q Q =? R P d R . No unifier. ========================================== unify in FOO : P Q Q =? c P d c . No unifier. ========================================== unify in FOO : P Q Q =? c P S S . No unifier. ========================================== unify in FOO : P Q Q =? c P d d . No unifier. ========================================== unify in FOO : P Q Q =? c P d e . No unifier. ========================================== unify in FOO : P Q Q =? R R P d . No unifier. ========================================== unify in FOO : P Q Q =? c c P d . No unifier. ========================================== unify in FOO : P Q Q =? R R d P . No unifier. ========================================== unify in FOO : P Q Q =? c c d P . No unifier. ========================================== unify in FOO : a Q Q =? R R S S . No unifier. ========================================== unify in FOO : P Q Q =? R d P R . No unifier. ========================================== unify in FOO : P Q Q =? c d P c . No unifier. ========================================== unify in FOO : P Q Q =? c S P S . No unifier. ========================================== unify in FOO : P Q Q =? c d P d . No unifier. ========================================== unify in FOO : P Q Q =? c d P e . No unifier. ========================================== unify in FOO : P Q Q =? R d R P . No unifier. ========================================== unify in FOO : P Q Q =? c d c P . No unifier. ========================================== unify in FOO : P Q Q =? c S S P . No unifier. ========================================== unify in FOO : P Q Q =? c d d P . No unifier. ========================================== unify in FOO : P Q Q =? c d e P . No unifier. ========================================== unify in FOO : P b R =? b R d d . No unifier. ========================================== unify in FOO : P Q c =? Q c d d . No unifier. ========================================== unify in FOO : P Q c =? Q c S e . No unifier. ========================================== unify in FOO : P b R =? b R d e . No unifier. ========================================== unify in FOO : P Q c =? Q c d e . No unifier. ========================================== unify in FOO : a Q R =? Q d a d . No unifier. ========================================== unify in FOO : a Q R =? Q d a T . No unifier. ========================================== unify in FOO : a Q R =? Q d a e . No unifier. ========================================== unify in FOO : P b R =? b d R d . No unifier. ========================================== unify in FOO : P Q c =? Q d c d . No unifier. ========================================== unify in FOO : P b R =? b S R e . No unifier. ========================================== unify in FOO : P Q c =? Q S c e . No unifier. ========================================== unify in FOO : P b R =? b d R e . No unifier. ========================================== unify in FOO : P Q c =? Q d c e . No unifier. ========================================== unify in FOO : a Q R =? Q d d a . No unifier. ========================================== unify in FOO : a Q R =? Q d d T . No unifier. ========================================== unify in FOO : P Q c =? Q S S e . No unifier. ========================================== unify in FOO : a Q R =? Q d d e . No unifier. ========================================== unify in FOO : P Q c =? Q d d e . No unifier. ========================================== unify in FOO : a Q R =? Q d T a . No unifier. ========================================== unify in FOO : a Q R =? Q d e a . No unifier. ========================================== unify in FOO : a Q R =? Q d T d . No unifier. ========================================== unify in FOO : P Q c =? Q d T d . No unifier. ========================================== unify in FOO : a Q R =? Q d e d . No unifier. ========================================== unify in FOO : P Q c =? Q d e d . No unifier. ========================================== unify in FOO : a Q R =? Q d T T . No unifier. ========================================== unify in FOO : P Q c =? Q S e e . No unifier. ========================================== unify in FOO : a Q R =? Q d e e . No unifier. ========================================== unify in FOO : P Q c =? Q d e e . No unifier. ========================================== unify in FOO : a Q R =? Q d T U . No unifier. ========================================== unify in FOO : a Q R =? Q d e U . No unifier. ========================================== unify in FOO : P Q c =? Q S T f . No unifier. ========================================== unify in FOO : a Q R =? Q d T f . No unifier. ========================================== unify in FOO : P Q c =? Q d T f . No unifier. ========================================== unify in FOO : P Q c =? Q S e f . No unifier. ========================================== unify in FOO : a Q R =? Q d e f . No unifier. ========================================== unify in FOO : P Q c =? Q d e f . No unifier. ========================================== unify in FOO : P Q c =? c P d d . No unifier. ========================================== unify in FOO : P Q c =? c P S e . No unifier. ========================================== unify in FOO : P Q c =? c P d e . No unifier. ========================================== unify in FOO : P Q c =? c Q d d . No unifier. ========================================== unify in FOO : P Q c =? c Q S e . No unifier. ========================================== unify in FOO : P Q c =? c Q d e . No unifier. ========================================== unify in FOO : P Q c =? c d P d . No unifier. ========================================== unify in FOO : P Q c =? c S P e . No unifier. ========================================== unify in FOO : P Q c =? c d P e . No unifier. ========================================== unify in FOO : P Q c =? c d d Q . No unifier. ========================================== unify in FOO : a Q R =? R d d e . No unifier. ========================================== unify in FOO : P b R =? R d d e . No unifier. ========================================== unify in FOO : P Q c =? c S e Q . No unifier. ========================================== unify in FOO : P Q c =? c d e Q . No unifier. ========================================== unify in FOO : a Q R =? R d e d . No unifier. ========================================== unify in FOO : P b R =? R d e d . No unifier. ========================================== unify in FOO : a Q R =? R d e e . No unifier. ========================================== unify in FOO : P b R =? R d e e . No unifier. ========================================== unify in FOO : a Q R =? R d e f . No unifier. ========================================== unify in FOO : P b R =? R d e f . No unifier. ========================================== unify in FOO : P b R =? d P b d . No unifier. ========================================== unify in FOO : P b R =? d P b T . No unifier. ========================================== unify in FOO : P b R =? d P b e . No unifier. ========================================== unify in FOO : P Q c =? d P c d . No unifier. ========================================== unify in FOO : P Q c =? S P c e . No unifier. ========================================== unify in FOO : P Q c =? d P c e . No unifier. ========================================== unify in FOO : P b R =? d P d b . No unifier. ========================================== unify in FOO : P b R =? d P d T . No unifier. ========================================== unify in FOO : P Q c =? S P S e . No unifier. ========================================== unify in FOO : P b R =? d P d e . No unifier. ========================================== unify in FOO : P Q c =? d P d e . No unifier. ========================================== unify in FOO : P b R =? d P T b . No unifier. ========================================== unify in FOO : P b R =? d P e b . No unifier. ========================================== unify in FOO : P b R =? d P T d . No unifier. ========================================== unify in FOO : P Q c =? d P T d . No unifier. ========================================== unify in FOO : P b R =? d P e d . No unifier. ========================================== unify in FOO : P Q c =? d P e d . No unifier. ========================================== unify in FOO : P b R =? d P T T . No unifier. ========================================== unify in FOO : P Q c =? S P e e . No unifier. ========================================== unify in FOO : P b R =? d P e e . No unifier. ========================================== unify in FOO : P Q c =? d P e e . No unifier. ========================================== unify in FOO : P b R =? d P T U . No unifier. ========================================== unify in FOO : P b R =? d P e U . No unifier. ========================================== unify in FOO : P Q c =? S P T f . No unifier. ========================================== unify in FOO : P b R =? d P T f . No unifier. ========================================== unify in FOO : P Q c =? d P T f . No unifier. ========================================== unify in FOO : P Q c =? S P e f . No unifier. ========================================== unify in FOO : P b R =? d P e f . No unifier. ========================================== unify in FOO : P Q c =? d P e f . No unifier. ========================================== unify in FOO : P b R =? d b R d . No unifier. ========================================== unify in FOO : P Q c =? d Q c d . No unifier. ========================================== unify in FOO : P b R =? S b R e . No unifier. ========================================== unify in FOO : P Q c =? S Q c e . No unifier. ========================================== unify in FOO : P b R =? d b R e . No unifier. ========================================== unify in FOO : P Q c =? d Q c e . No unifier. ========================================== unify in FOO : P Q c =? S Q S e . No unifier. ========================================== unify in FOO : P Q c =? d Q d e . No unifier. ========================================== unify in FOO : P Q c =? d Q T d . No unifier. ========================================== unify in FOO : P Q c =? d Q e d . No unifier. ========================================== unify in FOO : P Q c =? S Q e e . No unifier. ========================================== unify in FOO : P Q c =? d Q e e . No unifier. ========================================== unify in FOO : P Q c =? S Q T f . No unifier. ========================================== unify in FOO : P Q c =? d Q T f . No unifier. ========================================== unify in FOO : P Q c =? S Q e f . No unifier. ========================================== unify in FOO : P Q c =? d Q e f . No unifier. ========================================== unify in FOO : P Q c =? d c P d . No unifier. ========================================== unify in FOO : P Q c =? S c P e . No unifier. ========================================== unify in FOO : P Q c =? d c P e . No unifier. ========================================== unify in FOO : P Q c =? d c d Q . No unifier. ========================================== unify in FOO : P b R =? d R d e . No unifier. ========================================== unify in FOO : P Q c =? S c e Q . No unifier. ========================================== unify in FOO : P Q c =? d c e Q . No unifier. ========================================== unify in FOO : P b R =? d R e d . No unifier. ========================================== unify in FOO : P b R =? S R e e . No unifier. ========================================== unify in FOO : P b R =? d R e e . No unifier. ========================================== unify in FOO : P b R =? S R e f . No unifier. ========================================== unify in FOO : P b R =? d R e f . No unifier. ========================================== unify in FOO : P b R =? d d P b . No unifier. ========================================== unify in FOO : P b R =? d d P T . No unifier. ========================================== unify in FOO : P Q c =? S S P e . No unifier. ========================================== unify in FOO : P b R =? d d P e . No unifier. ========================================== unify in FOO : P Q c =? d d P e . No unifier. ========================================== unify in FOO : P b R =? S S R e . No unifier. ========================================== unify in FOO : P b R =? d d R e . No unifier. ========================================== unify in FOO : P b R =? d d e P . No unifier. ========================================== unify in FOO : P Q c =? d d e P . No unifier. ========================================== unify in FOO : P Q c =? S S e Q . No unifier. ========================================== unify in FOO : P Q c =? d d e Q . No unifier. ========================================== unify in FOO : P b R =? d e P b . No unifier. ========================================== unify in FOO : P Q c =? d T P d . No unifier. ========================================== unify in FOO : P b R =? d e P d . No unifier. ========================================== unify in FOO : P Q c =? d e P d . No unifier. ========================================== unify in FOO : P Q c =? S e P e . No unifier. ========================================== unify in FOO : P b R =? d e P e . No unifier. ========================================== unify in FOO : P Q c =? d e P e . No unifier. ========================================== unify in FOO : P b R =? d e P U . No unifier. ========================================== unify in FOO : P Q c =? S T P f . No unifier. ========================================== unify in FOO : P Q c =? d T P f . No unifier. ========================================== unify in FOO : P Q c =? S e P f . No unifier. ========================================== unify in FOO : P b R =? d e P f . No unifier. ========================================== unify in FOO : P Q c =? d e P f . No unifier. ========================================== unify in FOO : P b R =? d T R d . No unifier. ========================================== unify in FOO : P b R =? d e R d . No unifier. ========================================== unify in FOO : P b R =? S e R e . No unifier. ========================================== unify in FOO : P b R =? d e R e . No unifier. ========================================== unify in FOO : P b R =? S T R f . No unifier. ========================================== unify in FOO : P b R =? d T R f . No unifier. ========================================== unify in FOO : P b R =? S e R f . No unifier. ========================================== unify in FOO : P b R =? d e R f . No unifier. ========================================== unify in FOO : P b R =? d e d P . No unifier. ========================================== unify in FOO : P Q c =? d e d P . No unifier. ========================================== unify in FOO : P Q c =? d T d Q . No unifier. ========================================== unify in FOO : P Q c =? d e d Q . No unifier. ========================================== unify in FOO : P b R =? d e e P . No unifier. ========================================== unify in FOO : P Q c =? d e e P . No unifier. ========================================== unify in FOO : P Q c =? S e e Q . No unifier. ========================================== unify in FOO : P Q c =? d e e Q . No unifier. ========================================== unify in FOO : P b R =? d e f P . No unifier. ========================================== unify in FOO : P Q c =? d e f P . No unifier. ========================================== unify in FOO : P Q c =? S T f Q . No unifier. ========================================== unify in FOO : P Q c =? d T f Q . No unifier. ========================================== unify in FOO : P Q c =? S e f Q . No unifier. ========================================== unify in FOO : P Q c =? d e f Q . No unifier. ========================================== unify in FOO : P Q R R =? d d Q e e . Unifier 1 P --> d d Q --> #1:Foo R --> e ========================================== unify in FOO : P Q R R =? d e Q f f . Unifier 1 P --> d e Q --> #1:Foo R --> f ========================================== unify in FOO : P b R S =? e b R e f . Unifier 1 P --> e R --> #1:Foo S --> e f ========================================== unify in FOO : P Q c S =? e Q c e f . Unifier 1 P --> e Q --> #1:Foo S --> e f ========================================== unify in FOO : P b R S =? e b R f e . Unifier 1 P --> e R --> #1:Foo S --> f e ========================================== unify in FOO : P Q c S =? e Q c f e . Unifier 1 P --> e Q --> #1:Foo S --> f e ========================================== unify in FOO : P b R S =? e b R f f . Unifier 1 P --> e R --> #1:Foo S --> f f ========================================== unify in FOO : P Q c S =? e Q c f f . Unifier 1 P --> e Q --> #1:Foo S --> f f ========================================== unify in FOO : P b R S =? e b R f g . Unifier 1 P --> e R --> #1:Foo S --> f g ========================================== unify in FOO : P Q c S =? e Q c f g . Unifier 1 P --> e Q --> #1:Foo S --> f g ========================================== unify in FOO : P Q c S =? e e Q c f . Unifier 1 P --> e e Q --> #1:Foo S --> f ========================================== unify in FOO : P Q c S =? e f Q c e . Unifier 1 P --> e f Q --> #1:Foo S --> e ========================================== unify in FOO : P Q c S =? e f Q c f . Unifier 1 P --> e f Q --> #1:Foo S --> f ========================================== unify in FOO : P Q c S =? e f Q c g . Unifier 1 P --> e f Q --> #1:Foo S --> g ========================================== unify in FOO : X X =? Y a Y . No unifier. ========================================== unify in FOO : X X =? E Y a b Y E . No unifier. ========================================== unify in FOO : X X =? Y Y . Unifier 1 X --> #1:Foo Y --> #1:Foo ========================================== unify in FOO : X X =? Y a Y a . Unifier 1 X --> #1:Foo a Y --> #1:Foo ========================================== unify in FOO : X X =? E Y F E Y F . Unifier 1 X --> #1:Elt #2:Foo #3:Elt E --> #1:Elt Y --> #2:Foo F --> #3:Elt ========================================== unify in FOO : X X =? E Y a b Y F . No unifier. ========================================== unify in FOO : X X =? E Y F b Y E . No unifier. ========================================== unify in FOO : X X =? E Y b b Y E . No unifier. ========================================== unify in FOO : X Y =? Y X . Warning: Unification modulo the theory of operator __ has encountered an instance for which it may not be complete. Unifier 1 X --> #1:Foo Y --> #1:Foo Warning: Some unifiers may have been missed due to incomplete unification algorithm(s). ========================================== unify in FOO : X Y X =? Z Z . Unifier 1 X --> #1:Foo Y --> #2:Foo #1:Foo #1:Foo #2:Foo Z --> #1:Foo #2:Foo #1:Foo Warning: Unification modulo the theory of operator __ has encountered an instance for which it may not be complete. Unifier 2 X --> #1:Foo Y --> #1:Foo #1:Foo Z --> #1:Foo #1:Foo Warning: Some unifiers may have been missed due to incomplete unification algorithm(s). ========================================== unify in FOO : X X =? Y a a Y . Warning: Unification modulo the theory of operator __ has encountered an instance for which it may not be complete. Unifier 1 X --> a a Y --> a Warning: Some unifiers may have been missed due to incomplete unification algorithm(s). ========================================== unify in FOO : X Y =? Y X . Warning: Unification modulo the theory of operator __ has encountered an instance for which it may not be complete. Unifier 1 X --> #1:Foo Y --> #1:Foo Warning: Some unifiers may have been missed due to incomplete unification algorithm(s). ========================================== unify in FOO : X X X =? Y Y Y Y . Unifier 1 X --> #1:Foo #1:Foo #1:Foo #1:Foo Y --> #1:Foo #1:Foo #1:Foo ========================================== unify in FOO : X Y =? Y X /\ X X X =? Y Y Y Y . Unifier 1 X --> #1:Foo #1:Foo #1:Foo #1:Foo Y --> #1:Foo #1:Foo #1:Foo ========================================== unify in FOO : X X X =? Y Y Y Y /\ X Y =? Y X . Unifier 1 X --> #1:Foo #1:Foo #1:Foo #1:Foo Y --> #1:Foo #1:Foo #1:Foo ========================================== unify in FOO : X X =? Y Y Y . Unifier 1 X --> #1:Foo #1:Foo #1:Foo Y --> #1:Foo #1:Foo ========================================== unify in FOO : X Y X =? Y X Y . Unifier 1 X --> #1:Foo Y --> #1:Foo ========================================== unify in FOO : X X X =? Y Y Y Y . Unifier 1 X --> #1:Foo #1:Foo #1:Foo #1:Foo Y --> #1:Foo #1:Foo #1:Foo ========================================== unify in FOO : X Y X =? Y Y Y Y . Unifier 1 X --> #1:Foo #1:Foo #1:Foo Y --> #1:Foo #1:Foo Bye. maude-3.1/tests/Misc/dekker.maude0000644000175200017520000001161110026173401013706 00000000000000set show timing off . set show advisories off . ***( Dekker's algorithm is generally defined with two processes on a shared memory machine specified in an imperative language. Rather than give a translation of Dekker's algorithm into rewriting logic we give a deep embedding of a toy language just powerful enough to express Dekker's algorithm. ) load model-checker ***( Naive model of memory with locations named by Qids and holding Ints. ) fmod MEMORY is inc INT . inc QID . sorts Memory . op none : -> Memory . op __ : Memory Memory -> Memory [assoc comm id: none] . op [_,_] : Qid Int -> Memory . endfm ***( Equality test comparing the contents of a named memory location to a given machine integer. ) fmod TESTS is inc MEMORY . sort Test . op _=_ : Qid Int -> Test . op eval : Test Memory -> Bool . var Q : Qid . var M : Memory . vars N N' : Int . eq eval(Q = N, [Q, N'] M) = N == N' . endfm ***( Syntax for a trival sequential programming langauge. ) fmod SEQUENTIAL is inc TESTS . sorts UserStatement Program . subsort UserStatement < Program . op skip : -> Program . op _;_ : Program Program -> Program [prec 61 assoc id: skip] . op _:=_ : Qid Int -> Program . op if_then_fi : Test Program -> Program . op while_do_od : Test Program -> Program . op repeat_forever : Program -> Program . endfm ***( Processes have a process identifier and a program. The machine state is a soup of processes, a shared memory and a process identifier. The latter records the id of the last process to execute and is needed to talk about fairness. The operational semantics of the programming language running on this machine is given by just 5 rules. ) mod PARALLEL is inc SEQUENTIAL . inc TESTS . sorts Pid Process Soup MachineState . subsort Process < Soup . op [_,_] : Pid Program -> Process . op empty : -> Soup . op _|_ : Soup Soup -> Soup [prec 61 assoc comm id: empty] . op {_,_,_} : Soup Memory Pid -> MachineState . vars P R : Program . var S : Soup . var U : UserStatement . vars I J : Pid . var M : Memory . var Q : Qid . vars N X : Int . var T : Test . rl {[I, U ; R] | S, M, J} => {[I, R] | S, M, I} . rl {[I, (Q := N) ; R] | S, [Q, X] M, J} => {[I, R] | S, [Q, N] M, I} . rl {[I, if T then P fi ; R] | S, M, J} => {[I, if eval(T, M) then P else skip fi ; R] | S, M, I} . rl {[I, while T do P od ; R] | S, M, J} => {[I, if eval(T, M) then (P ; while T do P od) else skip fi ; R] | S, M, I} . rl {[I, repeat P forever ; R] | S, M, J} => {[I, P ; repeat P forever ; R] | S, M, I} . endm ***( The classical Dekker's algorithm for mutual exclusion between two processes using 3 variables, 'c1, 'c2 and 'turn, in shared memory. crit is used to represent the critical section and rem is used to represent the remainder (non-critical) part of each program. ) mod DEKKER is inc PARALLEL . subsort Int < Pid . ops crit rem : -> UserStatement . ops p1 p2 : -> Program . op initialMem : -> Memory . op initial : -> MachineState . eq p1 = repeat 'c1 := 0 ; while 'c2 = 0 do if 'turn = 2 then 'c1 := 1 ; while 'turn = 2 do skip od ; 'c1 := 0 fi od ; crit ; 'turn := 2 ; 'c1 := 1 ; rem forever . eq p2 = repeat 'c2 := 0 ; while 'c1 = 0 do if 'turn = 1 then 'c2 := 1 ; while 'turn = 1 do skip od ; 'c2 := 0 fi od ; crit ; 'turn := 1 ; 'c2 := 1 ; rem forever . eq initialMem = ['c1, 1] ['c2, 1] ['turn, 1] . eq initial = { [1, p1] | [2, p2], initialMem, 0 } . endm ***( The model check. Note how the operation enterCrit is used to represent two propositions: enterCrit(1) means process 1 is about to enter it's critical section and enterCrit(2) means process 2 is about to enter it's critical section. Similarly exec(1) means process 1 just executed and exec(2) means process 2 just executed. ) mod CHECK is inc DEKKER . inc MODEL-CHECKER . subsort MachineState < State . ops enterCrit exec : Pid -> Prop . var M : Memory . vars R : Program . var S : Soup . vars I J : Pid . eq {[I, crit ; R] | S, M, J} |= enterCrit(I) = true . eq {S, M, J} |= exec(J) = true . endm ***( Safety: we check that always we are not in a state where p1 is about to enter it's critical section and p2 is about to enter it's critical section. ) red modelCheck(initial, [] ~ (enterCrit(1) /\ enterCrit(2))) . ***( "Strong" liveness: if p1 gets to execute infinitely often then it enters it's critical section infinitely often. This is not true with Dekker's algorithm. ) red modelCheck(initial, []<> exec(1) -> []<> enterCrit(1)) . *** Counterexample has a 9 state lead in to a 2 state cycle. ***( "Weaker" liveness: if p1 and p2 both get to execute infinitely often then p1 and p2 both enter their critical sections infinitely often. ) red modelCheck(initial, ([]<> exec(1) /\ []<> exec(2)) -> ([]<> enterCrit(1) /\ []<> enterCrit(2))) . maude-3.1/tests/Misc/meseguerFiniteVariant.maude0000644000175200017520000003150712664201217016756 00000000000000***( Based on code supplied by Jose Meseguer for specifications with the finite variant property, which in turn are based on: @TECHREPORT{var-sat, AUTHOR = {J. Meseguer}, TITLE = {Variant-Based Satisfiability in Initial Algebras}, INSTITUTION = {University of Illinois at Urbana-Champaign}, NUMBER = {\texttt{http://hdl.handle.net/2142/88408}}, MONTH = {November}, YEAR = {2015} } ) set show timing off . set include BOOL off . **************************************** fmod BOOL-FVP is sort Boolean . ops tt ff : -> Boolean [ctor] . op _/\_ : Boolean Boolean -> Boolean . op _\/_ : Boolean Boolean -> Boolean . op ~ : Boolean -> Boolean . vars B X Y Z : Boolean . eq B /\ tt = B [variant] . eq B /\ ff = ff [variant] . eq B \/ ff = B [variant] . eq B \/ tt = tt [variant] . eq ~(tt) = ff [variant] . eq ~(ff) = tt [variant] . endfm *** expect 3 get variants in BOOL-FVP : X /\ Y . *** expect 3 get variants in BOOL-FVP : X \/ Y . *** expect 3 get variants in BOOL-FVP : ~(X) . **************************************** fmod NAT-AC-MONUS is sorts Nat NzNat Pred Lit Conj . subsorts NzNat < Nat . subsort Lit < Conj . op 0 : -> Nat [ctor] . op 1 : -> NzNat [ctor] . op _+_ : NzNat NzNat -> NzNat [ctor assoc comm] . op _=_ : Nat Nat -> Lit [ctor] . op _=/=_ : Nat Nat -> Lit [ctor] . op _=_ : Pred Pred -> Lit [ctor] . op _=/=_ : Pred Pred -> Lit [ctor] . op _/\_ : Conj Conj -> Conj [ctor assoc comm] . *** defined functions op _+_ : Nat Nat -> Nat [assoc comm] . var n m : Nat . vars p q : NzNat . eq n + 0 = n [variant] . op _-_ : Nat Nat -> Nat . *** monus eq n - (n + p) = 0 [variant]. eq (n + p) - n = p [variant] . eq n - n = 0 [variant] . endfm *** expect 3 get variants in NAT-AC-MONUS : n + m . *** expect 4 get variants in NAT-AC-MONUS : n - m . **************************************** fmod NAT-ACU-MONUS is sorts Nat . op 0 : -> Nat [ctor] . op 1 : -> Nat [ctor] . op _+_ : Nat Nat -> Nat [ctor assoc comm id: 0] . *** defined functions monus op _-_ : Nat Nat -> Nat . *** monus vars n m : Nat . eq n - (n + m) = 0 [variant]. eq (n + m) - n = m [variant] . endfm fmod NAT-ACU-MONUS-CONJ is protecting NAT-ACU-MONUS . sorts Lit Conj . subsorts Lit < Conj . op _=_ : Nat Nat -> Lit [ctor] . op _=/=_ : Nat Nat -> Lit [ctor] . op _/\_ : Conj Conj -> Conj [ctor assoc comm] . vars n m : Nat . endfm *** expect 3 get variants in NAT-ACU-MONUS : n - m . *** expect 3 get variants in NAT-ACU-MONUS-CONJ : (n - m =/= 0) /\ (m - n =/= 0) . **************************************** fmod NAT-ACU is sorts Nat NzNat . subsorts NzNat < Nat . op 0 : -> Nat [ctor] . op 1 : -> NzNat [ctor] . op _+_ : NzNat NzNat -> NzNat [ctor assoc comm id: 0] . op _+_ : Nat Nat -> Nat [ctor assoc comm id: 0] . endfm fmod INT-ACU is protecting NAT-ACU . sorts NzNeg Int . subsorts Nat NzNeg < Int . op - : NzNat -> NzNeg [ctor] . vars n m : NzNat . vars i j k l : Int . *** defined function op _+_ : Int Int -> Int [assoc comm id: 0] . eq i + -(n) + -(m) = i + -(n + m) [variant] . eq i + n + -(n) = i [variant] . eq i + n + -(n + m) = i + -(m) [variant] . eq i + n + m + -(n) = i + m [variant] . endfm *** expect 12 get variants in INT-ACU : i + j . *** expect 1 but too slow to detect there are no further ones variant unify [1] in INT-ACU : i + j =? i + l . *** expect 1 variant unify in INT-ACU : j =? l . **************************************** fmod INT-OFFSET-COMP-LIST is sorts Zero Nat Neg Int NeList List Lit Conj . subsorts Zero < Nat Neg < Int . subsort NeList < List . subsort Lit < Conj . op 0 : -> Zero [ctor] . op s : Nat -> Nat [ctor] . op p : Neg -> Neg [ctor] . op nil : -> List [ctor] . op _;_ : Int List -> NeList [ctor] . op _=_ : Int Int -> Lit [ctor] . op _=_ : List List -> Lit [ctor] . op _=/=_ : Int Int -> Lit [ctor] . op _=/=_ : List List -> Lit [ctor] . op _/\_ : Lit Conj -> Conj [ctor] . var M : Nat . var N : Neg . vars I J : Int . var L : List . var Q : NeList . eq I ; I ; L = I ; L [variant] . *** defined functions ops s p : Int -> Int . eq s(p(N)) = N [variant] . eq p(s(M)) = M [variant] . op head : NeList -> Int . eq head(I ; L) = I [variant] . endfm *** expect 2 get variants in INT-OFFSET-COMP-LIST : head(Q) . *** expect 2 get variants in INT-OFFSET-COMP-LIST : I ; L . **************************************** fmod INT-OFFSET-CONJ is sorts Zero Nat Neg Int Lit Conj . subsorts Zero < Nat Neg < Int . subsort Lit < Conj . op 0 : -> Zero [ctor] . op s : Nat -> Nat [ctor] . op p : Neg -> Neg [ctor] . op _=_ : Int Int -> Lit [ctor] . op _=/=_ : Int Int -> Lit [ctor] . op _/\_ : Lit Conj -> Conj [ctor] . var M : Nat . var N : Neg . vars I J : Int . *** defined functions ops s p : Int -> Int . eq s(p(N)) = N [variant] . eq p(s(M)) = M [variant] . endfm *** expect 2 get variants in INT-OFFSET-CONJ : s(I) . *** expect 2 get variants in INT-OFFSET-CONJ : p(I) . **************************************** set include BOOL off . fmod INT-OFFSET-MSET is sorts Zero Nat Neg Int NeMSet MSet Lit Conj Pred . subsorts Zero < Nat Neg < Int < NeMSet < MSet . subsort Lit < Conj . op 0 : -> Zero [ctor] . op s : Nat -> Nat [ctor] . op p : Neg -> Neg [ctor] . op mt : -> MSet [ctor] . op _,_ : NeMSet NeMSet -> NeMSet [ctor assoc comm] . op tt : -> Pred [ctor] . op _in_ : Int MSet -> Pred [ctor] . op dupl : MSet -> Pred . op _=_ : MSet MSet -> Lit [ctor] . op _=/=_ : MSet MSet -> Lit [ctor] . op _/\_ : Lit Conj -> Conj [ctor] . var m : Nat . var n : Neg . vars x y : Int . var Q Q' : MSet . vars M M' : NeMSet . eq x in x = tt [variant] . eq x in x,M = tt [variant] . eq dupl(M,M) = tt [variant] . eq dupl(M,M,M') = tt [variant] . *** defined functions op _,_ : MSet MSet -> MSet [assoc comm] . eq Q,mt = Q [variant] . ops s p : Int -> Int . eq s(p(n)) = n [variant] . eq p(s(m)) = m [variant] . endfm *** expect 3 get variants in INT-OFFSET-MSET : Q,Q' . *** expect 3 get variants in INT-OFFSET-MSET : x in Q . *** expect 3 get variants in INT-OFFSET-MSET : dupl(Q) . **************************************** fmod INT-OFFSET-SET is sorts Zero Nat Neg Int NeSet Set Lit Conj Pred . subsorts Zero < Nat Neg < Int < NeSet < Set . subsort Lit < Conj . op 0 : -> Zero [ctor] . op s : Nat -> Nat [ctor] . op p : Neg -> Neg [ctor] . op mt : -> Set [ctor] . op _,_ : NeSet NeSet -> NeSet [ctor assoc comm] . op tt : -> Pred [ctor] . op _=<_ : Set Set -> Pred [ctor] . op _=_ : Set Set -> Lit [ctor] . op _=/=_ : Set Set -> Lit [ctor] . op _/\_ : Lit Conj -> Conj [ctor] . var m : Nat . var n : Neg . vars x y : Int . vars S S' : NeSet . var Q U V : Set . eq S,S = S [variant] . eq S,S,S' = S,S' [variant] . eq mt =< U = tt [variant] . eq U =< U = tt [variant] . eq U =< U,V = tt [variant] . *** defined functions op _,_ : Set Set -> Set [assoc comm] . eq Q,mt = Q [variant] . ops s p : Int -> Int . eq s(p(n)) = n [variant] . eq p(s(m)) = m [variant] . endfm *** expect 7 get variants in INT-OFFSET-SET : V,U . *** expect 4 get variants in INT-OFFSET-SET : U =< V . *** expect 3 variant unify in INT-OFFSET-SET : x,y,S =? y,S . **************************************** fmod INT-OFFSET-SET is sorts Zero Nat Neg Int NeMSet MSet NeSet Set Lit Conj Pred . subsorts Zero < Nat Neg < Int < NeMSet < MSet . subsort NeSet < Set . subsort Lit < Conj . op 0 : -> Zero [ctor] . op s : Nat -> Nat [ctor] . op p : Neg -> Neg [ctor] . op mt : -> MSet [ctor] . op null : -> Set [ctor] . op {_} : NeMSet -> NeSet [ctor] . op _,_ : NeMSet NeMSet -> NeMSet [ctor assoc comm] . op tt : -> Pred [ctor] . op _in_ : Int MSet -> Pred [ctor] . op _in_ : Int Set -> Pred [ctor] . op dupl : MSet -> Pred . op _=_ : MSet MSet -> Lit [ctor] . op _=/=_ : MSet MSet -> Lit [ctor] . op _/\_ : Lit Conj -> Conj [ctor] . var m : Nat . var n : Neg . vars x y : Int . var Q : MSet . vars M M' : NeMSet . var S : Set . eq {M,M} = {M} [variant] . eq {M,M,M'} = {M,M'} [variant] . eq x in x = tt [variant] . eq x in x,M = tt [variant] . eq x in {x} = tt [variant] . eq x in {x,M} = tt [variant] . eq dupl(M,M) = tt [variant] . eq dupl(M,M,M') = tt [variant] . *** defined functions op _,_ : MSet MSet -> MSet [assoc comm] . eq Q,mt = Q [variant] . op _U_ : Set Set -> Set [assoc comm] . eq null U S = S [variant] . eq S U null = S [variant] . eq {M} U {M'} = {M,M'} [variant] . ops s p : Int -> Int . eq s(p(n)) = n [variant] . eq p(s(m)) = m [variant] . endfm *** expect 111 but only the first 23 are fast enough for the test suite variant unify [23] in INT-OFFSET-SET : {M} =? {M'} . **************************************** fmod HF-SETS-CONJ is sorts Magma Set DNat Pred Lit Conj . subsorts DNat < Set < Magma . subsort Lit < Conj . op _,_ : Magma Magma -> Magma [ctor assoc comm] . op {_} : Magma -> Set [ctor] . op {_} : DNat -> DNat [ctor] . *** Dedekid number successor op 0 : -> DNat [ctor] . op tt : -> Pred [ctor] . op _<=_ : Set Set -> Pred [ctor] . *** set containment predicate op _=_ : Magma Magma -> Lit [ctor] . op _=/=_ : Magma Magma -> Lit [ctor] . op _=_ : Pred Pred -> Lit [ctor] . op _=/=_ : Pred Pred -> Lit [ctor] . op _/\_ : Lit Conj -> Conj [ctor] . vars M M' : Magma . vars S S' : Set . *** set idempotency equations eq [1]: M, M = M [variant] . eq [2]: M,M,M' = M,M' [variant] . *** set containment equations eq [3]: 0 <= S = tt [variant] . eq [4]: {M} <= {M} = tt [variant] . eq [5]: {M} <= {M,M'} = tt [variant] . *** specification of defined functions op _U_ : Set Set -> Set . *** union eq [6]: S U 0 = S [variant] . eq [7]: 0 U S = S [variant] . eq [8]: {M} U {M'} = {M,M'} [variant] . endfm *** expect 5 get variants in HF-SETS-CONJ : M,M' . *** expect 4 get variants in HF-SETS-CONJ : S <= S' . *** expect 8 get variants in HF-SETS-CONJ : S U S' . **************************************** fmod NAT-ACU-CONJ is protecting NAT-ACU . sorts Lit Conj . subsort Lit < Conj . op _=_ : Nat Nat -> Lit [ctor] . op _=~=_ : Nat Nat -> Lit [ctor] . op _/\_ : Conj Conj -> Conj [ctor assoc comm] . endfm fmod NAT-PRES is protecting NAT-ACU-CONJ . sort Pred . op tt : -> Pred [ctor] . op _=_ : Pred Pred -> Lit [ctor] . op _=~=_ : Pred Pred -> Lit [ctor] . vars n n' m : Nat . vars p q : NzNat . op _>_ : Nat Nat -> Pred [ctor] . eq p + n > n = tt [variant] . endfm get variants in NAT-PRES : n > m . get variants in NAT-PRES : (n > m =~= tt) /\ (m > n =~= tt) /\ (n =~= m) . **************************************** fmod NAT-PRES-BOOL is protecting NAT-ACU-CONJ . sort Truth . ops true false : -> Truth [ctor] . op _=_ : Truth Truth -> Lit [ctor] . op _=~=_ : Truth Truth -> Lit [ctor] . vars n n' m : Nat . vars p q : NzNat . op _>_ : Nat Nat -> Truth . eq p + n > n = true [variant] . eq n > n + m = false [variant] . endfm get variants in NAT-PRES-BOOL : n > m . variant unify in NAT-PRES-BOOL : n > m =? true /\ m > n' =? true /\ n > n' =? false . **************************************** fmod NATU-ACU is sort Nat . ops 0 1 : -> Nat [ctor] . op _+_ : Nat Nat -> Nat [ctor assoc comm id: 0] . endfm fmod NATU-PRES-BOOL is protecting NATU-ACU . sort Truth . ops true false : -> Truth [ctor] . vars n n' m : Nat . op _>_ : Nat Nat -> Truth . op _>=_ : Nat Nat -> Truth . eq m + n + 1 > n = true [variant] . eq n > n + m = false [variant] . eq m + n >= n = true [variant] . eq n >= m + n + 1 = false [variant] . endfm get variants in NATU-PRES-BOOL : n > m . get variants in NATU-PRES-BOOL : n >= m . variant unify in NATU-PRES-BOOL : n > m =? true /\ m > n' =? true /\ n > n' =? false . variant unify in NATU-PRES-BOOL : n >= m =? false /\ m >= n =? false . **************************************** fmod INT-PRES is protecting NAT-PRES . extending INT-ACU . op _>_ : Int Int -> Pred [ctor] . var n : Nat . vars p q : NzNat . vars i j k : Int . *** remaining equations for definign > outside Nat eq n > -(q) = tt [variant] . eq -(p) > -(p + q) = tt [variant] . endfm get variants in INT-PRES : i > j . **************************************** fmod INT-PRESS-BOOL is protecting INT-ACU . sort Truth . ops true false : -> Truth [ctor] . vars n n' m : Nat . vars p q : NzNat . vars i j k : Int . op _>_ : Int Int -> Truth . eq p + n > n = true [variant] . eq n > -(q) = true [variant] . eq -(p) > -(p + q) = true [variant] . eq i > i + n = false [variant] . endfm get variants in INT-PRESS-BOOL : i > j . variant unify in INT-PRESS-BOOL : i > j =? true /\ j > k =? true /\ i > k =? false . maude-3.1/tests/Misc/rot13.maude0000644000175200017520000000256413321016213013416 00000000000000set show timing off . set show advisories off . *** *** Check that characters read from stdin are correctly apportioned between *** the lexer and STD-STREAM. *** load file . mod ROT13 is inc STD-STREAM . pr INT . op myClass : -> Cid . ops myObj : -> Oid . op run : -> Configuration . op rot13 : String -> String . vars O O2 : Oid . var A : AttributeSet . vars S T : String . var C : Char . eq rot13(C) = if C >= "A" and C <= "Z" then char(ascii("A") + ((13 + (ascii(C) - ascii("A"))) rem 26)) else if C >= "a" and C <= "z" then char(ascii("a") + ((13 + (ascii(C) - ascii("a"))) rem 26)) else C fi fi . eq rot13(S) = rot13(substr(S, 0, 1)) + rot13(substr(S, 1, length(S))) [owise] . eq run = <> < myObj : myClass | none > write(stdout, myObj, "\nROT13 Encryption\n----------------\n") . rl < O : myClass | A > wrote(O, O2) => < O : myClass | A > getLine(stdin, O, "Enter plain text> ") . rl < O : myClass | A > gotLine(O, O2, T) => < O : myClass | A > if T =/= "" then write(stdout, O, "Cypher text: " + rot13(T)) else none fi . endm erew run . The time has come the walrus said, To talk of many things. Of shoes and ships and sealing wax, Of cabbages and kings. Of why the sea is boiling hot, And whether pigs have wings. maude-3.1/tests/Misc/smtTest0000755000175200017520000000100413122577515013026 00000000000000#!/bin/sh if grep "#define USE_CVC4" ../../config.h ; # are we using CVC4? then echo "testing CVC4" else if grep "#define USE_YICES2" ../../config.h ; # are we using YICES2? then echo "testing Yices2" else echo "no SMT support compiled in" exit 77 # grep returned nonzero exit so skip this test fi fi MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/smtTest.maude -no-banner -no-advise \ > smtTest.out 2>&1 diff $srcdir/smtTest.expected smtTest.out > /dev/null 2>&1 maude-3.1/tests/Misc/filteredVariantUnification.expected0000644000175200017520000001134113726052543020500 00000000000000========================================== filtered variant unify in EXCLUSIVE-OR : V1 =? V2 * V3 . rewrites: 46 Unifier 1 V1 --> %1:[ElemXor] * %2:[ElemXor] V2 --> %1:[ElemXor] V3 --> %2:[ElemXor] No more unifiers. ========================================== filtered variant unify in EXCLUSIVE-OR : V1 =? V2 * V3 * V4 . rewrites: 1266 Unifier 1 V1 --> %1:[ElemXor] * %2:[ElemXor] * %3:[ElemXor] V2 --> %1:[ElemXor] V3 --> %2:[ElemXor] V4 --> %3:[ElemXor] No more unifiers. ========================================== filtered variant unify in EXCLUSIVE-OR : V1 =? f1(V2 * V3 * f1(V4)) . rewrites: 214 Unifier 1 V1 --> f1(%1:[ElemXor] * %2:[ElemXor] * f1(%3:[ElemXor])) V2 --> %1:[ElemXor] V3 --> %2:[ElemXor] V4 --> %3:[ElemXor] No more unifiers. ========================================== filtered variant unify in EXCLUSIVE-OR : V1 =? f2(V2 * V3, f1(V2 * V4)) . rewrites: 2050 Unifier 1 V1 --> f2(%1:[ElemXor] * %2:[ElemXor], f1(%1:[ElemXor] * %3:[ElemXor])) V2 --> %1:[ElemXor] V3 --> %2:[ElemXor] V4 --> %3:[ElemXor] No more unifiers. ========================================== filtered variant unify in EXCLUSIVE-OR : V1 =? f3(V2 * V3, f1(V3 * V4), f2(V2, f1(V4))) . rewrites: 2918 Unifier 1 V1 --> f3(%1:[ElemXor] * %2:[ElemXor], f1(%2:[ElemXor] * %3:[ElemXor]), f2(%1:[ ElemXor], f1(%3:[ElemXor]))) V2 --> %1:[ElemXor] V3 --> %2:[ElemXor] V4 --> %3:[ElemXor] No more unifiers. ========================================== filtered variant unify in EXCLUSIVE-OR : V1 * V2 =? V3 * V4 . rewrites: 1211 Unifier 1 V1 --> %1:[ElemXor] * %3:[ElemXor] V2 --> %2:[ElemXor] * %4:[ElemXor] V3 --> %1:[ElemXor] * %2:[ElemXor] V4 --> %3:[ElemXor] * %4:[ElemXor] No more unifiers. ========================================== filtered variant unify in EXCLUSIVE-OR : V1 * V2 =? f1(V3 * V4) . rewrites: 326 Unifier 1 V1 --> #3:[ElemXor] * f1(#1:[ElemXor] * #2:[ElemXor]) V2 --> #3:[ElemXor] V3 --> #1:[ElemXor] V4 --> #2:[ElemXor] No more unifiers. ========================================== filtered variant unify in EXCLUSIVE-OR : V1 * V2 =? f1(V3 * V3 * f1(V4)) . rewrites: 18 Unifier 1 V1 --> #2:[ElemXor] * f1(f1(#1:[ElemXor])) V2 --> #2:[ElemXor] V3 --> #3:[ElemXor] V4 --> #1:[ElemXor] No more unifiers. ========================================== filtered variant unify in EXCLUSIVE-OR : f1(V1) =? f1(V2 * V3) . rewrites: 46 Unifier 1 V1 --> %1:[ElemXor] * %2:[ElemXor] V2 --> %1:[ElemXor] V3 --> %2:[ElemXor] No more unifiers. ========================================== filtered variant unify in EXCLUSIVE-OR : f1(V1) * f1(V2) =? f1(V3) * f1(V3 * V4) . rewrites: 141 Unifier 1 V1 --> %1:[ElemXor] V2 --> %1:[ElemXor] * %2:[ElemXor] V3 --> %1:[ElemXor] V4 --> %2:[ElemXor] Unifier 2 V1 --> %1:[ElemXor] * %2:[ElemXor] V2 --> %1:[ElemXor] V3 --> %1:[ElemXor] V4 --> %2:[ElemXor] Unifier 3 V1 --> %1:[ElemXor] V2 --> %1:[ElemXor] V3 --> %2:[ElemXor] V4 --> mt No more unifiers. ========================================== filtered variant unify in EXCLUSIVE-OR : f2(V1 * V2, V2 * V3) =? f2(V4, V5) . rewrites: 2054 Unifier 1 V1 --> %1:[ElemXor] V2 --> %2:[ElemXor] V3 --> %3:[ElemXor] V4 --> %1:[ElemXor] * %2:[ElemXor] V5 --> %2:[ElemXor] * %3:[ElemXor] No more unifiers. ========================================== filtered variant unify in EXCLUSIVE-OR : f3(V1 * V2, V3 * V4, V5 * V6) =? f3( V7, V8, V9) . rewrites: 6762 Unifier 1 V1 --> %1:[ElemXor] V2 --> %2:[ElemXor] V3 --> %3:[ElemXor] V4 --> %4:[ElemXor] V5 --> %5:[ElemXor] V6 --> %6:[ElemXor] V7 --> %1:[ElemXor] * %2:[ElemXor] V8 --> %3:[ElemXor] * %4:[ElemXor] V9 --> %5:[ElemXor] * %6:[ElemXor] No more unifiers. ========================================== filtered variant unify in EXCLUSIVE-OR : V1 =? a * b * V2 . rewrites: 31 Unifier 1 V1 --> a * b * %1:[ElemXor] V2 --> %1:[ElemXor] No more unifiers. ========================================== filtered variant unify in EXCLUSIVE-OR : V1 * V2 =? a * b * V3 . rewrites: 815 Unifier 1 V1 --> a * b * %2:[ElemXor] V2 --> %1:[ElemXor] V3 --> %1:[ElemXor] * %2:[ElemXor] No more unifiers. ========================================== filtered variant unify in EXCLUSIVE-OR : V1 * a =? V2 * b . rewrites: 46 Unifier 1 V1 --> b * %1:[ElemXor] V2 --> a * %1:[ElemXor] No more unifiers. ========================================== filtered variant unify in EXCLUSIVE-OR : f1(a) * f1(V1) =? f1(V2 * b) * f1(V3 * c) . rewrites: 123 Unifier 1 V1 --> c * #1:[ElemXor] V2 --> a * b V3 --> #1:[ElemXor] Unifier 2 V1 --> b * #1:[ElemXor] V2 --> #1:[ElemXor] V3 --> a * c Unifier 3 V1 --> a V2 --> c * %1:[ElemXor] V3 --> b * %1:[ElemXor] No more unifiers. ========================================== filtered variant unify in EXCLUSIVE-OR : f2(a, V1) =? f2(V2 * V3, f1(a * b)) . rewrites: 16 Unifier 1 V1 --> f1(a * b) V2 --> a * #1:[ElemXor] V3 --> #1:[ElemXor] No more unifiers. Bye. maude-3.1/tests/Misc/sreduce0000755000175200017520000000033012234061774013014 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/sreduce.maude -no-banner -no-advise \ > sreduce.out 2>&1 diff $srcdir/sreduce.expected sreduce.out > /dev/null 2>&1 maude-3.1/tests/Misc/diophantine0000755000175200017520000000035010511603045013653 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/diophantine.maude -no-banner -no-advise \ > diophantine.out 2>&1 diff $srcdir/diophantine.expected diophantine.out > /dev/null 2>&1 maude-3.1/tests/Misc/continue.expected0000644000175200017520000003327213731027217015013 00000000000000========================================== debug search [10] in COLLATZ : f(27) =>+ f(N) . *********** trial #1 crl f(N) => f(N / 2) if N rem 2 = 0 . N --> 27 *********** solving condition fragment N rem 2 = 0 *********** equation (built-in equation for symbol _rem_) 27 rem 2 ---> 1 *********** failure for condition fragment N rem 2 = 0 *********** failure #1 Solution 1 (state 1) states: 2 rewrites: 5 N --> 82 Solution 2 (state 2) states: 3 rewrites: 8 N --> 41 Solution 3 (state 3) states: 4 rewrites: 14 N --> 124 Solution 4 (state 4) states: 5 rewrites: 17 N --> 62 Solution 5 (state 5) states: 6 rewrites: 21 N --> 31 Solution 6 (state 6) states: 7 rewrites: 27 N --> 94 Solution 7 (state 7) states: 8 rewrites: 30 N --> 47 Solution 8 (state 8) states: 9 rewrites: 36 N --> 142 Solution 9 (state 9) states: 10 rewrites: 39 N --> 71 Solution 10 (state 10) states: 11 rewrites: 45 N --> 214 *********** trial #2 crl f(N) => f(N / 2) if N rem 2 = 0 . N --> 214 *********** solving condition fragment N rem 2 = 0 Solution 11 (state 11) states: 12 rewrites: 3 N --> 107 Solution 12 (state 12) states: 13 rewrites: 9 N --> 322 Solution 13 (state 13) states: 14 rewrites: 12 N --> 161 Solution 14 (state 14) states: 15 rewrites: 18 N --> 484 Solution 15 (state 15) states: 16 rewrites: 21 N --> 242 Solution 16 (state 16) states: 17 rewrites: 25 N --> 121 Solution 17 (state 17) states: 18 rewrites: 31 N --> 364 Solution 18 (state 18) states: 19 rewrites: 34 N --> 182 Solution 19 (state 19) states: 20 rewrites: 38 N --> 91 Solution 20 (state 20) states: 21 rewrites: 44 N --> 274 Solution 21 (state 21) states: 22 rewrites: 3 N --> 137 Solution 22 (state 22) states: 23 rewrites: 9 N --> 412 Solution 23 (state 23) states: 24 rewrites: 12 N --> 206 Solution 24 (state 24) states: 25 rewrites: 16 N --> 103 Solution 25 (state 25) states: 26 rewrites: 22 N --> 310 Solution 26 (state 26) states: 27 rewrites: 25 N --> 155 Solution 27 (state 27) states: 28 rewrites: 31 N --> 466 Solution 28 (state 28) states: 29 rewrites: 34 N --> 233 Solution 29 (state 29) states: 30 rewrites: 40 N --> 700 Solution 30 (state 30) states: 31 rewrites: 43 N --> 350 Solution 31 (state 31) states: 32 rewrites: 47 N --> 175 Solution 32 (state 32) states: 33 rewrites: 53 N --> 526 Solution 33 (state 33) states: 34 rewrites: 56 N --> 263 Solution 34 (state 34) states: 35 rewrites: 62 N --> 790 Solution 35 (state 35) states: 36 rewrites: 65 N --> 395 Solution 36 (state 36) states: 37 rewrites: 71 N --> 1186 Solution 37 (state 37) states: 38 rewrites: 74 N --> 593 Solution 38 (state 38) states: 39 rewrites: 80 N --> 1780 Solution 39 (state 39) states: 40 rewrites: 83 N --> 890 Solution 40 (state 40) states: 41 rewrites: 87 N --> 445 Solution 41 (state 41) states: 42 rewrites: 93 N --> 1336 Solution 42 (state 42) states: 43 rewrites: 96 N --> 668 Solution 43 (state 43) states: 44 rewrites: 100 N --> 334 Solution 44 (state 44) states: 45 rewrites: 104 N --> 167 Solution 45 (state 45) states: 46 rewrites: 110 N --> 502 Solution 46 (state 46) states: 47 rewrites: 113 N --> 251 Solution 47 (state 47) states: 48 rewrites: 119 N --> 754 Solution 48 (state 48) states: 49 rewrites: 122 N --> 377 Solution 49 (state 49) states: 50 rewrites: 128 N --> 1132 Solution 50 (state 50) states: 51 rewrites: 131 N --> 566 Solution 51 (state 51) states: 52 rewrites: 135 N --> 283 Solution 52 (state 52) states: 53 rewrites: 141 N --> 850 Solution 53 (state 53) states: 54 rewrites: 144 N --> 425 Solution 54 (state 54) states: 55 rewrites: 150 N --> 1276 Solution 55 (state 55) states: 56 rewrites: 153 N --> 638 Solution 56 (state 56) states: 57 rewrites: 157 N --> 319 Solution 57 (state 57) states: 58 rewrites: 163 N --> 958 Solution 58 (state 58) states: 59 rewrites: 166 N --> 479 Solution 59 (state 59) states: 60 rewrites: 172 N --> 1438 Solution 60 (state 60) states: 61 rewrites: 175 N --> 719 Solution 61 (state 61) states: 62 rewrites: 181 N --> 2158 Solution 62 (state 62) states: 63 rewrites: 184 N --> 1079 Solution 63 (state 63) states: 64 rewrites: 190 N --> 3238 Solution 64 (state 64) states: 65 rewrites: 193 N --> 1619 Solution 65 (state 65) states: 66 rewrites: 199 N --> 4858 Solution 66 (state 66) states: 67 rewrites: 202 N --> 2429 Solution 67 (state 67) states: 68 rewrites: 208 N --> 7288 Solution 68 (state 68) states: 69 rewrites: 211 N --> 3644 Solution 69 (state 69) states: 70 rewrites: 215 N --> 1822 Solution 70 (state 70) states: 71 rewrites: 219 N --> 911 Solution 71 (state 71) states: 72 rewrites: 225 N --> 2734 Solution 72 (state 72) states: 73 rewrites: 228 N --> 1367 Solution 73 (state 73) states: 74 rewrites: 234 N --> 4102 Solution 74 (state 74) states: 75 rewrites: 237 N --> 2051 Solution 75 (state 75) states: 76 rewrites: 243 N --> 6154 Solution 76 (state 76) states: 77 rewrites: 246 N --> 3077 Solution 77 (state 77) states: 78 rewrites: 252 N --> 9232 Solution 78 (state 78) states: 79 rewrites: 255 N --> 4616 Solution 79 (state 79) states: 80 rewrites: 259 N --> 2308 Solution 80 (state 80) states: 81 rewrites: 263 N --> 1154 Solution 81 (state 81) states: 82 rewrites: 267 N --> 577 Solution 82 (state 82) states: 83 rewrites: 273 N --> 1732 Solution 83 (state 83) states: 84 rewrites: 276 N --> 866 Solution 84 (state 84) states: 85 rewrites: 280 N --> 433 Solution 85 (state 85) states: 86 rewrites: 286 N --> 1300 Solution 86 (state 86) states: 87 rewrites: 289 N --> 650 Solution 87 (state 87) states: 88 rewrites: 293 N --> 325 Solution 88 (state 88) states: 89 rewrites: 299 N --> 976 Solution 89 (state 89) states: 90 rewrites: 302 N --> 488 Solution 90 (state 90) states: 91 rewrites: 306 N --> 244 Solution 91 (state 91) states: 92 rewrites: 310 N --> 122 Solution 92 (state 92) states: 93 rewrites: 314 N --> 61 Solution 93 (state 93) states: 94 rewrites: 320 N --> 184 Solution 94 (state 94) states: 95 rewrites: 323 N --> 92 Solution 95 (state 95) states: 96 rewrites: 327 N --> 46 Solution 96 (state 96) states: 97 rewrites: 331 N --> 23 Solution 97 (state 97) states: 98 rewrites: 337 N --> 70 Solution 98 (state 98) states: 99 rewrites: 340 N --> 35 Solution 99 (state 99) states: 100 rewrites: 346 N --> 106 Solution 100 (state 100) states: 101 rewrites: 349 N --> 53 Solution 101 (state 101) states: 102 rewrites: 355 N --> 160 Solution 102 (state 102) states: 103 rewrites: 358 N --> 80 Solution 103 (state 103) states: 104 rewrites: 362 N --> 40 Solution 104 (state 104) states: 105 rewrites: 366 N --> 20 Solution 105 (state 105) states: 106 rewrites: 370 N --> 10 Solution 106 (state 106) states: 107 rewrites: 374 N --> 5 Solution 107 (state 107) states: 108 rewrites: 380 N --> 16 Solution 108 (state 108) states: 109 rewrites: 383 N --> 8 Solution 109 (state 109) states: 110 rewrites: 387 N --> 4 Solution 110 (state 110) states: 111 rewrites: 391 N --> 2 Solution 111 (state 111) states: 112 rewrites: 395 N --> 1 No more solutions. states: 112 rewrites: 401 ========================================== get variants [1] in XOR : cst1 + X . Variant 1 rewrites: 0 XOR: cst1 + #1:XOR X --> #1:XOR *********** variant narrowing step eq 0 + Y = Y [variant] . Equation variable bindings: Y --> cst1 Old variant variable bindings: #1:XOR --> 0 cst1 + #1:XOR ---> cst1 Variant 2 rewrites: 3 Elem: cst1 X --> 0 Variant 3 rewrites: 0 XOR: 0 X --> cst1 Variant 4 rewrites: 0 XOR: %1:XOR X --> cst1 + %1:XOR No more variants. rewrites: 0 ========================================== variant unify [2] in XOR : X + cst1 =? Y + cst2 . Unifier 1 rewrites: 6 X --> cst2 + %1:XOR Y --> cst1 + %1:XOR Unifier 2 rewrites: 6 X --> cst2 Y --> cst1 *********** variant narrowing step eq 0 + Y = Y [variant] . Equation variable bindings: Y --> cst2 Old variant variable bindings: %1:XOR --> 0 cst2 + %1:XOR ---> cst2 *********** variant narrowing step eq X + X = 0 [variant] . Equation variable bindings: X --> cst2 Old variant variable bindings: %1:XOR --> cst2 cst2 + %1:XOR ---> 0 Unifier 3 rewrites: 18 X --> cst1 + cst2 + #1:XOR Y --> #1:XOR Unifier 4 rewrites: 18 X --> #1:XOR Y --> cst1 + cst2 + #1:XOR Unifier 5 rewrites: 18 X --> 0 Y --> cst1 + cst2 Unifier 6 rewrites: 0 X --> cst1 Y --> cst2 Unifier 7 rewrites: 0 X --> cst1 + cst2 Y --> 0 Unifier 8 rewrites: 0 X --> cst1 + %1:XOR Y --> cst2 + %1:XOR No more unifiers. rewrites: 0 ========================================== variant unify [1] in XOR : X + cst1 =? Y + cst2 such that X + cst1 irreducible . Unifier 1 rewrites: 3 X --> cst2 + %1:XOR Y --> cst1 + %1:XOR Unifier 2 rewrites: 0 X --> cst2 Y --> cst1 Unifier 3 rewrites: 0 X --> #1:XOR Y --> cst1 + cst2 + #1:XOR No more unifiers. rewrites: 0 ========================================== debug narrow [5, 1] in FOO : f(A, A) =>+ C . *********** narrowing step rl f(X, Y, Y, Z) => f(X, Y, Z) [narrowing] . Rule variable bindings: X --> f(%3:Foo, %1:Foo, %1:Foo, %2:Foo, %3:Foo) Y --> %1:Foo Z --> %2:Foo Subject variable bindings: #1:Foo --> f(%3:Foo, %1:Foo, %1:Foo, %2:Foo) f(#1:Foo, #1:Foo) ---> f(f(%3:Foo, %1:Foo, %1:Foo, %2:Foo, %3:Foo), %1:Foo, %2:Foo) Solution 1 rewrites: 1 state: f(%3:Foo, %1:Foo, %1:Foo, %2:Foo, %3:Foo, %1:Foo, %2:Foo) C --> f(%3:Foo, %1:Foo, %1:Foo, %2:Foo, %3:Foo, %1:Foo, %2:Foo) Warning: Unification modulo the theory of operator f has encountered an instance for which it may not be complete. Solution 2 rewrites: 2 state: f(%2:Foo, %3:Foo, %3:Foo, %1:Foo, %2:Foo, %3:Foo, %1:Foo, %2:Foo, %3:Foo, %1:Foo) C --> f(%2:Foo, %3:Foo, %3:Foo, %1:Foo, %2:Foo, %3:Foo, %1:Foo, %2:Foo, %3:Foo, %1:Foo) Solution 3 rewrites: 3 state: f(%1:Foo, %2:Foo, %1:Foo, %3:Foo, %2:Foo, %1:Foo, %3:Foo, %2:Foo) C --> f(%1:Foo, %2:Foo, %1:Foo, %3:Foo, %2:Foo, %1:Foo, %3:Foo, %2:Foo) Solution 4 rewrites: 4 state: f(%2:Foo, %1:Foo, %2:Foo, %1:Foo, %2:Foo, %1:Foo) C --> f(%2:Foo, %1:Foo, %2:Foo, %1:Foo, %2:Foo, %1:Foo) Solution 5 rewrites: 5 state: f(%2:Foo, %2:Foo, %1:Foo, %2:Foo, %1:Foo, %2:Foo, %1:Foo) C --> f(%2:Foo, %2:Foo, %1:Foo, %2:Foo, %1:Foo, %2:Foo, %1:Foo) Solution 6 rewrites: 1 state: f(%1:Foo, %2:Foo, %3:Foo, %1:Foo, %2:Foo, %3:Foo, %1:Foo, %3:Foo) C --> f(%1:Foo, %2:Foo, %3:Foo, %1:Foo, %2:Foo, %3:Foo, %1:Foo, %3:Foo) Solution 7 rewrites: 2 state: f(%1:Foo, %2:Foo, %1:Foo, %2:Foo, %1:Foo, %2:Foo) C --> f(%1:Foo, %2:Foo, %1:Foo, %2:Foo, %1:Foo, %2:Foo) Solution 8 rewrites: 3 state: f(%1:Foo, %2:Foo, %3:Foo, %1:Foo, %2:Foo, %2:Foo, %3:Foo) C --> f(%1:Foo, %2:Foo, %3:Foo, %1:Foo, %2:Foo, %2:Foo, %3:Foo) Solution 9 rewrites: 4 state: f(%1:Foo, %2:Foo, %1:Foo, %2:Foo, %2:Foo) C --> f(%1:Foo, %2:Foo, %1:Foo, %2:Foo, %2:Foo) Solution 10 rewrites: 5 state: f(%1:Foo, %2:Foo, %1:Foo, %2:Foo, %1:Foo) C --> f(%1:Foo, %2:Foo, %1:Foo, %2:Foo, %1:Foo) Solution 11 rewrites: 1 state: f(%1:Foo, %1:Foo, %1:Foo) C --> f(%1:Foo, %1:Foo, %1:Foo) Solution 12 rewrites: 2 state: f(%1:Foo, %1:Foo, %2:Foo, %1:Foo, %2:Foo) C --> f(%1:Foo, %1:Foo, %2:Foo, %1:Foo, %2:Foo) No more solutions. rewrites: 2 Warning: Some solutions may have been missed due to incomplete unification algorithm(s). ========================================== debug vu-narrow [2] in BAZ : g(j(A, B)) =>* C . Solution 1 rewrites: 1 state: g(j(#1:Foo, #2:Foo)) accumulated substitution: A --> #1:Foo B --> #2:Foo variant unifier: C --> g(j(@1:Foo, @2:Foo)) #1:Foo --> @1:Foo #2:Foo --> @2:Foo Solution 2 rewrites: 1 state: g(j(#1:Foo, #2:Foo)) accumulated substitution: A --> #1:Foo B --> #2:Foo variant unifier: C --> g(i(f(%1:Foo), %2:Foo)) #1:Foo --> f(%2:Foo) #2:Foo --> %1:Foo *********** variant narrowing step eq j(f(X), Y) = i(f(Y), X) [variant] . Equation variable bindings: X --> @1:Foo Y --> @5:Foo Old variant variable bindings: %1:Foo --> @2:Foo %2:Foo --> @3:Foo %3:Foo --> @4:Foo %4:Foo --> f(@1:Foo) %5:Foo --> @5:Foo j(%4:Foo, %5:Foo) ---> i(f(@5:Foo), @1:Foo) Solution 3 rewrites: 2 state: f(k(%2:Foo, f(%3:Foo))) accumulated substitution: A --> f(k(%1:Foo, %2:Foo)) B --> %3:Foo variant unifier: C --> f(k(@1:Foo, f(@2:Foo))) %2:Foo --> @1:Foo %3:Foo --> @2:Foo Solution 4 rewrites: 4 state: h(f(@1:Foo)) accumulated substitution: A --> f(k(@2:Foo, f(@1:Foo))) B --> @1:Foo variant unifier: C --> h(f(%1:Foo)) @1:Foo --> %1:Foo Solution 5 rewrites: 5 state: f(k(@2:Foo, h(@1:Foo))) accumulated substitution: A --> f(k(@3:Foo, @2:Foo)) B --> k(@1:Foo, @1:Foo) variant unifier: C --> f(k(%1:Foo, h(%2:Foo))) @2:Foo --> %1:Foo @1:Foo --> %2:Foo Solution 6 rewrites: 1 state: h(h(%1:Foo)) accumulated substitution: A --> f(k(%2:Foo, f(k(%1:Foo, %1:Foo)))) B --> k(%1:Foo, %1:Foo) variant unifier: C --> h(h(@1:Foo)) %1:Foo --> @1:Foo Solution 7 rewrites: 2 state: h(h(%1:Foo)) accumulated substitution: A --> f(k(%2:Foo, h(%1:Foo))) B --> k(%1:Foo, %1:Foo) variant unifier: C --> h(h(@1:Foo)) %1:Foo --> @1:Foo No more solutions. rewrites: 2 ========================================== debug srewrite [1] in FOO3 : f(a, b) using 1{all *} . *********** equation eq h(a) = i(d) . empty substitution h(a) ---> i(d) Solution 1 rewrites: 3 result Foo: g(a, d) *********** rule crl f(X, Y) => g(Z, X) if h(X) => i(Z) [label 1] . X --> b Y --> a Z --> e f(a, b) ---> g(e, b) Solution 2 rewrites: 1 result Foo: g(b, e) No more solutions. rewrites: 0 ========================================== debug variant match [1] in XOR : X + Y <=? c + d . *********** variant narrowing step eq 0 + Y = Y [variant] . Equation variable bindings: Y --> %1:XOR Old variant variable bindings: #1:XOR --> 0 #2:XOR --> %1:XOR #1:XOR + #2:XOR ---> %1:XOR rewrites: 10 Matcher 1 X --> c Y --> d Matcher 2 X --> d Y --> c Matcher 3 X --> 0 Y --> c + d Matcher 4 X --> c + d Y --> 0 Matcher 5 X --> c + #1:XOR Y --> d + #1:XOR Matcher 6 X --> d + #1:XOR Y --> c + #1:XOR Matcher 7 X --> c + d + #1:XOR Y --> #1:XOR Matcher 8 X --> #1:XOR Y --> c + d + #1:XOR No more matchers. Bye. maude-3.1/tests/Misc/CU_Unification0000755000175200017520000000036412117720075014224 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/CU_Unification.maude -no-banner -no-advise \ > CU_Unification.out 2>&1 diff $srcdir/CU_Unification.expected CU_Unification.out > /dev/null 2>&1 maude-3.1/tests/Misc/meseguerFiniteVariant.expected0000644000175200017520000003507513735217030017470 00000000000000========================================== get variants in BOOL-FVP : X /\ Y . Variant 1 rewrites: 0 Boolean: #1:Boolean /\ #2:Boolean X --> #1:Boolean Y --> #2:Boolean Variant 2 rewrites: 2 Boolean: %1:Boolean X --> %1:Boolean Y --> tt Variant 3 rewrites: 2 Boolean: ff X --> %1:Boolean Y --> ff No more variants. rewrites: 2 ========================================== get variants in BOOL-FVP : X \/ Y . Variant 1 rewrites: 0 Boolean: #1:Boolean \/ #2:Boolean X --> #1:Boolean Y --> #2:Boolean Variant 2 rewrites: 2 Boolean: %1:Boolean X --> %1:Boolean Y --> ff Variant 3 rewrites: 2 Boolean: tt X --> %1:Boolean Y --> tt No more variants. rewrites: 2 ========================================== get variants in BOOL-FVP : ~(X) . Variant 1 rewrites: 0 Boolean: ~(#1:Boolean) X --> #1:Boolean Variant 2 rewrites: 2 Boolean: ff X --> tt Variant 3 rewrites: 2 Boolean: tt X --> ff No more variants. rewrites: 2 ========================================== get variants in NAT-AC-MONUS : n + m . Variant 1 rewrites: 0 Nat: #1:Nat + #2:Nat n --> #1:Nat m --> #2:Nat Variant 2 rewrites: 2 Nat: %1:Nat n --> 0 m --> %1:Nat Variant 3 rewrites: 2 Nat: %1:Nat n --> %1:Nat m --> 0 No more variants. rewrites: 2 ========================================== get variants in NAT-AC-MONUS : n - m . Variant 1 rewrites: 0 Nat: #1:Nat - #2:Nat n --> #1:Nat m --> #2:Nat Variant 2 rewrites: 3 Nat: 0 n --> %2:Nat m --> %2:Nat + %1:NzNat Variant 3 rewrites: 3 NzNat: %1:NzNat n --> %2:Nat + %1:NzNat m --> %2:Nat Variant 4 rewrites: 3 Nat: 0 n --> %1:Nat m --> %1:Nat No more variants. rewrites: 3 ========================================== get variants in NAT-ACU-MONUS : n - m . Variant 1 rewrites: 0 Nat: #1:Nat - #2:Nat n --> #1:Nat m --> #2:Nat Variant 2 rewrites: 2 Nat: 0 n --> %2:Nat m --> %1:Nat + %2:Nat Variant 3 rewrites: 2 Nat: %1:Nat n --> %1:Nat + %2:Nat m --> %2:Nat No more variants. rewrites: 2 ========================================== get variants in NAT-ACU-MONUS-CONJ : ((n - m) =/= 0) /\ (m - n) =/= 0 . Variant 1 rewrites: 0 Conj: ((#1:Nat - #2:Nat) =/= 0) /\ (#2:Nat - #1:Nat) =/= 0 n --> #1:Nat m --> #2:Nat Variant 2 rewrites: 4 Conj: (0 =/= 0) /\ %1:Nat =/= 0 n --> %2:Nat m --> %1:Nat + %2:Nat Variant 3 rewrites: 4 Conj: (0 =/= 0) /\ %1:Nat =/= 0 n --> %1:Nat + %2:Nat m --> %2:Nat No more variants. rewrites: 4 ========================================== get variants in INT-ACU : i + j . Variant 1 rewrites: 0 Int: #1:Int + #2:Int i --> #1:Int j --> #2:Int Variant 2 rewrites: 5 Int: %3:Int + %4:Int + -(%1:NzNat + %2:NzNat) i --> %3:Int + -(%2:NzNat) j --> %4:Int + -(%1:NzNat) Variant 3 rewrites: 5 Int: %2:Int + %3:Int i --> %2:Int + -(%1:NzNat) j --> %3:Int + %1:NzNat Variant 4 rewrites: 5 Int: %2:Int + %3:Int i --> %2:Int + %1:NzNat j --> %3:Int + -(%1:NzNat) Variant 5 rewrites: 5 Int: %3:Int + %4:Int + -(%2:NzNat) i --> %3:Int + -(%1:NzNat + %2:NzNat) j --> %4:Int + %1:NzNat Variant 6 rewrites: 5 Int: %3:Int + %4:Int + -(%2:NzNat) i --> %3:Int + %1:NzNat j --> %4:Int + -(%1:NzNat + %2:NzNat) Variant 7 rewrites: 19 Int: #2:Int + #4:Int + -(#3:NzNat + #5:NzNat) i --> #4:Int + #1:NzNat + -(#3:NzNat) j --> #2:Int + -(#1:NzNat + #5:NzNat) Variant 8 rewrites: 19 Int: #2:Int + #4:Int + -(#3:NzNat + #5:NzNat) i --> #2:Int + -(#1:NzNat + #5:NzNat) j --> #4:Int + #1:NzNat + -(#3:NzNat) Variant 9 rewrites: 19 Int: #3:Int + #4:Int i --> #3:Int + #1:NzNat + -(#2:NzNat) j --> #4:Int + #2:NzNat + -(#1:NzNat) Variant 10 rewrites: 19 Int: #4:Int + #5:Int + -(#2:NzNat) i --> #4:Int + #1:NzNat + -(#3:NzNat) j --> #5:Int + #3:NzNat + -(#1:NzNat + #2:NzNat) Variant 11 rewrites: 19 Int: #4:Int + #5:Int + -(#2:NzNat) i --> #4:Int + #3:NzNat + -(#1:NzNat + #2:NzNat) j --> #5:Int + #1:NzNat + -(#3:NzNat) Variant 12 rewrites: 31 Int: %2:Int + %5:Int + -(%3:NzNat + %6:NzNat) i --> %2:Int + %4:NzNat + -(%1:NzNat + %6:NzNat) j --> %5:Int + %1:NzNat + -(%3:NzNat + %4:NzNat) No more variants. rewrites: 35 ========================================== variant unify [1] in INT-ACU : i + j =? i + l . Unifier 1 rewrites: 10 i --> %1:Int j --> %2:Int l --> %2:Int ========================================== variant unify in INT-ACU : j =? l . Unifier 1 rewrites: 0 j --> %1:Int l --> %1:Int No more unifiers. rewrites: 0 ========================================== get variants in INT-OFFSET-COMP-LIST : head(Q) . Variant 1 rewrites: 0 Int: head(#1:NeList) Q --> #1:NeList Variant 2 rewrites: 1 Int: %1:Int Q --> %1:Int ; %2:List No more variants. rewrites: 1 ========================================== get variants in INT-OFFSET-COMP-LIST : I ; L . Variant 1 rewrites: 0 NeList: #1:Int ; #2:List I --> #1:Int L --> #2:List Variant 2 rewrites: 1 NeList: %2:Int ; %1:List I --> %2:Int L --> %2:Int ; %1:List No more variants. rewrites: 1 ========================================== get variants in INT-OFFSET-CONJ : s(I) . Variant 1 rewrites: 0 Int: s(#1:Int) I --> #1:Int Variant 2 rewrites: 1 Neg: %1:Neg I --> p(%1:Neg) No more variants. rewrites: 1 ========================================== get variants in INT-OFFSET-CONJ : p(I) . Variant 1 rewrites: 0 Int: p(#1:Int) I --> #1:Int Variant 2 rewrites: 1 Nat: %1:Nat I --> s(%1:Nat) No more variants. rewrites: 1 ========================================== get variants in INT-OFFSET-MSET : Q,Q' . Variant 1 rewrites: 0 MSet: #1:MSet,#2:MSet Q --> #1:MSet Q' --> #2:MSet Variant 2 rewrites: 2 MSet: %1:MSet Q --> mt Q' --> %1:MSet Variant 3 rewrites: 2 MSet: %1:MSet Q --> %1:MSet Q' --> mt No more variants. rewrites: 2 ========================================== get variants in INT-OFFSET-MSET : x in Q . Variant 1 rewrites: 0 Pred: #1:Int in #2:MSet x --> #1:Int Q --> #2:MSet Variant 2 rewrites: 2 Pred: tt x --> %1:Int Q --> %1:Int Variant 3 rewrites: 2 Pred: tt x --> %2:Int Q --> %2:Int,%1:NeMSet No more variants. rewrites: 2 ========================================== get variants in INT-OFFSET-MSET : dupl(Q) . Variant 1 rewrites: 0 Pred: dupl(#1:MSet) Q --> #1:MSet Variant 2 rewrites: 2 Pred: tt Q --> %1:NeMSet,%1:NeMSet Variant 3 rewrites: 2 Pred: tt Q --> %1:NeMSet,%1:NeMSet,%2:NeMSet No more variants. rewrites: 2 ========================================== get variants in INT-OFFSET-SET : V,U . Variant 1 rewrites: 0 Set: #1:Set,#2:Set V --> #1:Set U --> #2:Set Variant 2 rewrites: 6 NeSet: %1:NeSet V --> %1:NeSet U --> %1:NeSet Variant 3 rewrites: 6 NeSet: %1:NeSet,%2:NeSet,%3:NeSet V --> %1:NeSet,%2:NeSet U --> %1:NeSet,%3:NeSet Variant 4 rewrites: 6 NeSet: %1:NeSet,%2:NeSet V --> %1:NeSet,%2:NeSet U --> %1:NeSet Variant 5 rewrites: 6 NeSet: %1:NeSet,%2:NeSet V --> %1:NeSet U --> %1:NeSet,%2:NeSet Variant 6 rewrites: 6 Set: %1:Set V --> mt U --> %1:Set Variant 7 rewrites: 6 Set: %1:Set V --> %1:Set U --> mt No more variants. rewrites: 10 ========================================== get variants in INT-OFFSET-SET : U =< V . Variant 1 rewrites: 0 Pred: #1:Set =< #2:Set U --> #1:Set V --> #2:Set Variant 2 rewrites: 3 Pred: tt U --> mt V --> %1:Set Variant 3 rewrites: 3 Pred: tt U --> %1:Set V --> %1:Set Variant 4 rewrites: 3 Pred: tt U --> %2:Set V --> %1:Set,%2:Set No more variants. rewrites: 3 ========================================== variant unify in INT-OFFSET-SET : x,y,S =? y,S . Unifier 1 rewrites: 11 S --> #1:NeSet,#2:Int x --> #2:Int y --> #3:Int Unifier 2 rewrites: 11 S --> #1:Int x --> #1:Int y --> #2:Int Unifier 3 rewrites: 11 S --> #1:NeSet x --> #2:Int y --> #2:Int No more unifiers. rewrites: 11 ========================================== variant unify [23] in INT-OFFSET-SET : {M} =? {M'} . Unifier 1 rewrites: 4 M --> %1:NeMSet M' --> %1:NeMSet Unifier 2 rewrites: 32 M --> #1:NeMSet,#1:NeMSet M' --> #1:NeMSet Unifier 3 rewrites: 32 M --> #1:NeMSet,#1:NeMSet,#2:NeMSet M' --> #1:NeMSet,#2:NeMSet Unifier 4 rewrites: 32 M --> #1:NeMSet M' --> #1:NeMSet,#1:NeMSet Unifier 5 rewrites: 32 M --> #1:NeMSet,#2:NeMSet M' --> #1:NeMSet,#1:NeMSet,#2:NeMSet Unifier 6 rewrites: 248 M --> %1:NeMSet,%1:NeMSet,%1:NeMSet,%1:NeMSet M' --> %1:NeMSet Unifier 7 rewrites: 248 M --> %1:NeMSet,%1:NeMSet,%1:NeMSet,%1:NeMSet,%2:NeMSet,%2:NeMSet M' --> %1:NeMSet,%2:NeMSet Unifier 8 rewrites: 248 M --> %1:NeMSet,%1:NeMSet,%1:NeMSet M' --> %1:NeMSet Unifier 9 rewrites: 248 M --> %1:NeMSet,%1:NeMSet,%1:NeMSet,%1:NeMSet,%2:NeMSet,%3:NeMSet,%3:NeMSet M' --> %1:NeMSet,%2:NeMSet,%3:NeMSet Unifier 10 rewrites: 248 M --> %1:NeMSet,%1:NeMSet,%1:NeMSet,%1:NeMSet,%2:NeMSet M' --> %1:NeMSet,%2:NeMSet Unifier 11 rewrites: 248 M --> %1:NeMSet,%1:NeMSet,%1:NeMSet,%2:NeMSet,%2:NeMSet,%3:NeMSet M' --> %1:NeMSet,%2:NeMSet,%3:NeMSet Unifier 12 rewrites: 248 M --> %1:NeMSet,%1:NeMSet,%2:NeMSet,%2:NeMSet,%2:NeMSet M' --> %1:NeMSet,%2:NeMSet Unifier 13 rewrites: 248 M --> %1:NeMSet,%2:NeMSet,%2:NeMSet,%2:NeMSet M' --> %1:NeMSet,%2:NeMSet Unifier 14 rewrites: 248 M --> %1:NeMSet,%1:NeMSet,%2:NeMSet,%3:NeMSet M' --> %1:NeMSet,%2:NeMSet,%2:NeMSet,%3:NeMSet Unifier 15 rewrites: 248 M --> %1:NeMSet,%2:NeMSet,%2:NeMSet M' --> %1:NeMSet,%1:NeMSet,%2:NeMSet Unifier 16 rewrites: 248 M --> %1:NeMSet M' --> %1:NeMSet,%1:NeMSet,%1:NeMSet,%1:NeMSet Unifier 17 rewrites: 248 M --> %1:NeMSet,%2:NeMSet M' --> %1:NeMSet,%1:NeMSet,%1:NeMSet,%1:NeMSet,%2:NeMSet,%2:NeMSet Unifier 18 rewrites: 248 M --> %1:NeMSet M' --> %1:NeMSet,%1:NeMSet,%1:NeMSet Unifier 19 rewrites: 248 M --> %1:NeMSet,%2:NeMSet,%3:NeMSet M' --> %1:NeMSet,%1:NeMSet,%1:NeMSet,%1:NeMSet,%2:NeMSet,%3:NeMSet,%3:NeMSet Unifier 20 rewrites: 248 M --> %1:NeMSet,%2:NeMSet M' --> %1:NeMSet,%1:NeMSet,%1:NeMSet,%1:NeMSet,%2:NeMSet Unifier 21 rewrites: 248 M --> %1:NeMSet,%2:NeMSet,%3:NeMSet M' --> %1:NeMSet,%1:NeMSet,%1:NeMSet,%2:NeMSet,%2:NeMSet,%3:NeMSet Unifier 22 rewrites: 248 M --> %1:NeMSet,%2:NeMSet M' --> %1:NeMSet,%1:NeMSet,%2:NeMSet,%2:NeMSet,%2:NeMSet Unifier 23 rewrites: 248 M --> %1:NeMSet,%2:NeMSet M' --> %1:NeMSet,%2:NeMSet,%2:NeMSet,%2:NeMSet ========================================== get variants in HF-SETS-CONJ : M,M' . Variant 1 rewrites: 0 Magma: #1:Magma,#2:Magma M --> #1:Magma M' --> #2:Magma Variant 2 rewrites: 4 Magma: %1:Magma M --> %1:Magma M' --> %1:Magma Variant 3 rewrites: 4 Magma: %1:Magma,%2:Magma,%3:Magma M --> %1:Magma,%2:Magma M' --> %1:Magma,%3:Magma Variant 4 rewrites: 4 Magma: %1:Magma,%2:Magma M --> %1:Magma,%2:Magma M' --> %2:Magma Variant 5 rewrites: 4 Magma: %1:Magma,%2:Magma M --> %2:Magma M' --> %1:Magma,%2:Magma No more variants. rewrites: 8 ========================================== get variants in HF-SETS-CONJ : S <= S' . Variant 1 rewrites: 0 Pred: #1:Set <= #2:Set S --> #1:Set S' --> #2:Set Variant 2 rewrites: 3 Pred: tt S --> 0 S' --> %1:Set Variant 3 rewrites: 3 Pred: tt S --> {%1:Magma} S' --> {%1:Magma} Variant 4 rewrites: 3 Pred: tt S --> {%1:Magma} S' --> {%1:Magma,%2:Magma} No more variants. rewrites: 3 ========================================== get variants in HF-SETS-CONJ : S U S' . Variant 1 rewrites: 0 Set: #1:Set U #2:Set S --> #1:Set S' --> #2:Set Variant 2 rewrites: 3 Set: %1:Set S --> %1:Set S' --> 0 Variant 3 rewrites: 3 Set: %1:Set S --> 0 S' --> %1:Set Variant 4 rewrites: 3 Set: {%1:Magma,%2:Magma} S --> {%1:Magma} S' --> {%2:Magma} Variant 5 rewrites: 7 Set: {#1:Magma} S --> {#1:Magma} S' --> {#1:Magma} Variant 6 rewrites: 7 Set: {#1:Magma,#2:Magma,#3:Magma} S --> {#1:Magma,#2:Magma} S' --> {#1:Magma,#3:Magma} Variant 7 rewrites: 7 Set: {#1:Magma,#2:Magma} S --> {#1:Magma,#2:Magma} S' --> {#2:Magma} Variant 8 rewrites: 7 Set: {#1:Magma,#2:Magma} S --> {#2:Magma} S' --> {#1:Magma,#2:Magma} No more variants. rewrites: 11 ========================================== get variants in NAT-PRES : n > m . Variant 1 rewrites: 0 Pred: #1:Nat > #2:Nat n --> #1:Nat m --> #2:Nat Variant 2 rewrites: 1 Pred: tt n --> %1:NzNat + %2:Nat m --> %2:Nat No more variants. rewrites: 1 ========================================== get variants in NAT-PRES : ((n =~= m) /\ m > n =~= tt) /\ n > m =~= tt . Variant 1 rewrites: 0 Conj: (#1:Nat =~= #2:Nat) /\ (#1:Nat > #2:Nat =~= tt) /\ #2:Nat > #1:Nat =~= tt n --> #1:Nat m --> #2:Nat Variant 2 rewrites: 2 Conj: ((%1:NzNat + %2:Nat) =~= %2:Nat) /\ (tt =~= tt) /\ %2:Nat > %1:NzNat + %2:Nat =~= tt n --> %1:NzNat + %2:Nat m --> %2:Nat Variant 3 rewrites: 2 Conj: (%2:Nat =~= %1:NzNat + %2:Nat) /\ (tt =~= tt) /\ %2:Nat > %1:NzNat + %2:Nat =~= tt n --> %2:Nat m --> %1:NzNat + %2:Nat No more variants. rewrites: 2 ========================================== get variants in NAT-PRES-BOOL : n > m . Variant 1 rewrites: 0 Truth: #1:Nat > #2:Nat n --> #1:Nat m --> #2:Nat Variant 2 rewrites: 2 Truth: true n --> %1:NzNat + %2:Nat m --> %2:Nat Variant 3 rewrites: 2 Truth: false n --> %2:Nat m --> %1:Nat + %2:Nat No more variants. rewrites: 2 ========================================== variant unify in NAT-PRES-BOOL : n > m =? true /\ m > n' =? true /\ n > n' =? false . No unifiers. rewrites: 56 ========================================== get variants in NATU-PRES-BOOL : n > m . Variant 1 rewrites: 0 Truth: #1:Nat > #2:Nat n --> #1:Nat m --> #2:Nat Variant 2 rewrites: 2 Truth: true n --> 1 + %1:Nat + %2:Nat m --> %2:Nat Variant 3 rewrites: 2 Truth: false n --> %2:Nat m --> %1:Nat + %2:Nat No more variants. rewrites: 2 ========================================== get variants in NATU-PRES-BOOL : n >= m . Variant 1 rewrites: 0 Truth: #1:Nat >= #2:Nat n --> #1:Nat m --> #2:Nat Variant 2 rewrites: 2 Truth: true n --> %1:Nat + %2:Nat m --> %2:Nat Variant 3 rewrites: 2 Truth: false n --> %2:Nat m --> 1 + %1:Nat + %2:Nat No more variants. rewrites: 2 ========================================== variant unify in NATU-PRES-BOOL : n > m =? true /\ m > n' =? true /\ n > n' =? false . No unifiers. rewrites: 34 ========================================== variant unify in NATU-PRES-BOOL : n >= m =? false /\ m >= n =? false . No unifiers. rewrites: 6 ========================================== get variants in INT-PRES : i > j . Variant 1 rewrites: 0 Pred: #1:Int > #2:Int i --> #1:Int j --> #2:Int Variant 2 rewrites: 3 Pred: tt i --> %1:Nat j --> -(%2:NzNat) Variant 3 rewrites: 3 Pred: tt i --> -(%1:NzNat) j --> -(%1:NzNat + %2:NzNat) Variant 4 rewrites: 3 Pred: tt i --> %1:Nat + %2:NzNat j --> %1:Nat No more variants. rewrites: 3 ========================================== get variants in INT-PRESS-BOOL : i > j . Variant 1 rewrites: 0 Truth: #1:Int > #2:Int i --> #1:Int j --> #2:Int Variant 2 rewrites: 4 Truth: true i --> %1:NzNat + %2:Nat j --> %2:Nat Variant 3 rewrites: 4 Truth: true i --> %1:Nat j --> -(%2:NzNat) Variant 4 rewrites: 4 Truth: true i --> -(%1:NzNat) j --> -(%1:NzNat + %2:NzNat) Variant 5 rewrites: 4 Truth: false i --> %2:Int j --> %1:Nat + %2:Int No more variants. rewrites: 4 ========================================== variant unify in INT-PRESS-BOOL : i > j =? true /\ j > k =? true /\ i > k =? false . No unifiers. rewrites: 123 Bye. maude-3.1/tests/Misc/debug.maude0000644000175200017520000000102010026174112013520 00000000000000set show timing off . set show advisories off . fmod FOO is sort Foo . endfm fmod BAR is inc FOO . sort Bar . ops a b c : -> Bar . eq a = b . eq b = c . endfm debug red a . fmod FOO is sort Foo2 . endfm debug red in BAR : a . fmod FOO is sort Foo2 . endfm resume . resume . fmod FOO is sort Foo . endfm fmod BAR is inc FOO . sort Bar . ops a b c : -> Bar . eq a = b . eq b = c . endfm debug red in META-LEVEL : metaReduce(['BAR], 'a.Bar) . step . fmod FOO is sort Foo . endfm resume . maude-3.1/tests/Misc/dekker.expected0000644000175200017520000001657213140740420014430 00000000000000========================================== reduce in CHECK : modelCheck(initial, []~ (enterCrit(1) /\ enterCrit(2))) . rewrites: 1048 result Bool: true ========================================== reduce in CHECK : modelCheck(initial, []<> exec(1) -> []<> enterCrit(1)) . rewrites: 100 result ModelCheckResult: counterexample({{[1,repeat 'c1 := 0 ; while 'c2 = 0 do if 'turn = 2 then 'c1 := 1 ; while 'turn = 2 do skip od ; 'c1 := 0 fi od ; crit ; 'turn := 2 ; 'c1 := 1 ; rem forever] | [2,repeat 'c2 := 0 ; while 'c1 = 0 do if 'turn = 1 then 'c2 := 1 ; while 'turn = 1 do skip od ; 'c2 := 0 fi od ; crit ; 'turn := 1 ; 'c2 := 1 ; rem forever],['c1,1] ['c2,1] [ 'turn,1],0},unlabeled} {{[1,'c1 := 0 ; while 'c2 = 0 do if 'turn = 2 then 'c1 := 1 ; while 'turn = 2 do skip od ; 'c1 := 0 fi od ; crit ; 'turn := 2 ; 'c1 := 1 ; rem ; repeat 'c1 := 0 ; while 'c2 = 0 do if 'turn = 2 then 'c1 := 1 ; while 'turn = 2 do skip od ; 'c1 := 0 fi od ; crit ; 'turn := 2 ; 'c1 := 1 ; rem forever] | [2,repeat 'c2 := 0 ; while 'c1 = 0 do if 'turn = 1 then 'c2 := 1 ; while 'turn = 1 do skip od ; 'c2 := 0 fi od ; crit ; 'turn := 1 ; 'c2 := 1 ; rem forever],['c1,1] ['c2,1] ['turn,1],1}, unlabeled} {{[1,while 'c2 = 0 do if 'turn = 2 then 'c1 := 1 ; while 'turn = 2 do skip od ; 'c1 := 0 fi od ; crit ; 'turn := 2 ; 'c1 := 1 ; rem ; repeat 'c1 := 0 ; while 'c2 = 0 do if 'turn = 2 then 'c1 := 1 ; while 'turn = 2 do skip od ; 'c1 := 0 fi od ; crit ; 'turn := 2 ; 'c1 := 1 ; rem forever] | [ 2,repeat 'c2 := 0 ; while 'c1 = 0 do if 'turn = 1 then 'c2 := 1 ; while 'turn = 1 do skip od ; 'c2 := 0 fi od ; crit ; 'turn := 1 ; 'c2 := 1 ; rem forever],['c1,0] ['c2,1] ['turn,1],1},unlabeled} {{[1,while 'c2 = 0 do if 'turn = 2 then 'c1 := 1 ; while 'turn = 2 do skip od ; 'c1 := 0 fi od ; crit ; 'turn := 2 ; 'c1 := 1 ; rem ; repeat 'c1 := 0 ; while 'c2 = 0 do if 'turn = 2 then 'c1 := 1 ; while 'turn = 2 do skip od ; 'c1 := 0 fi od ; crit ; 'turn := 2 ; 'c1 := 1 ; rem forever] | [2,'c2 := 0 ; while 'c1 = 0 do if 'turn = 1 then 'c2 := 1 ; while 'turn = 1 do skip od ; 'c2 := 0 fi od ; crit ; 'turn := 1 ; 'c2 := 1 ; rem ; repeat 'c2 := 0 ; while 'c1 = 0 do if 'turn = 1 then 'c2 := 1 ; while 'turn = 1 do skip od ; 'c2 := 0 fi od ; crit ; 'turn := 1 ; 'c2 := 1 ; rem forever],['c1,0] ['c2,1] ['turn,1],2}, unlabeled} {{[1,while 'c2 = 0 do if 'turn = 2 then 'c1 := 1 ; while 'turn = 2 do skip od ; 'c1 := 0 fi od ; crit ; 'turn := 2 ; 'c1 := 1 ; rem ; repeat 'c1 := 0 ; while 'c2 = 0 do if 'turn = 2 then 'c1 := 1 ; while 'turn = 2 do skip od ; 'c1 := 0 fi od ; crit ; 'turn := 2 ; 'c1 := 1 ; rem forever] | [ 2,while 'c1 = 0 do if 'turn = 1 then 'c2 := 1 ; while 'turn = 1 do skip od ; 'c2 := 0 fi od ; crit ; 'turn := 1 ; 'c2 := 1 ; rem ; repeat 'c2 := 0 ; while 'c1 = 0 do if 'turn = 1 then 'c2 := 1 ; while 'turn = 1 do skip od ; 'c2 := 0 fi od ; crit ; 'turn := 1 ; 'c2 := 1 ; rem forever],['c1,0] ['c2, 0] ['turn,1],2},unlabeled} {{[1,if 'turn = 2 then 'c1 := 1 ; while 'turn = 2 do skip od ; 'c1 := 0 fi ; while 'c2 = 0 do if 'turn = 2 then 'c1 := 1 ; while 'turn = 2 do skip od ; 'c1 := 0 fi od ; crit ; 'turn := 2 ; 'c1 := 1 ; rem ; repeat 'c1 := 0 ; while 'c2 = 0 do if 'turn = 2 then 'c1 := 1 ; while 'turn = 2 do skip od ; 'c1 := 0 fi od ; crit ; 'turn := 2 ; 'c1 := 1 ; rem forever] | [2,while 'c1 = 0 do if 'turn = 1 then 'c2 := 1 ; while 'turn = 1 do skip od ; 'c2 := 0 fi od ; crit ; 'turn := 1 ; 'c2 := 1 ; rem ; repeat 'c2 := 0 ; while 'c1 = 0 do if 'turn = 1 then 'c2 := 1 ; while 'turn = 1 do skip od ; 'c2 := 0 fi od ; crit ; 'turn := 1 ; 'c2 := 1 ; rem forever],['c1,0] ['c2,0] ['turn,1],1},unlabeled} {{[1,while 'c2 = 0 do if 'turn = 2 then 'c1 := 1 ; while 'turn = 2 do skip od ; 'c1 := 0 fi od ; crit ; 'turn := 2 ; 'c1 := 1 ; rem ; repeat 'c1 := 0 ; while 'c2 = 0 do if 'turn = 2 then 'c1 := 1 ; while 'turn = 2 do skip od ; 'c1 := 0 fi od ; crit ; 'turn := 2 ; 'c1 := 1 ; rem forever] | [2,while 'c1 = 0 do if 'turn = 1 then 'c2 := 1 ; while 'turn = 1 do skip od ; 'c2 := 0 fi od ; crit ; 'turn := 1 ; 'c2 := 1 ; rem ; repeat 'c2 := 0 ; while 'c1 = 0 do if 'turn = 1 then 'c2 := 1 ; while 'turn = 1 do skip od ; 'c2 := 0 fi od ; crit ; 'turn := 1 ; 'c2 := 1 ; rem forever],['c1,0] ['c2,0] ['turn,1],1}, unlabeled} {{[1,while 'c2 = 0 do if 'turn = 2 then 'c1 := 1 ; while 'turn = 2 do skip od ; 'c1 := 0 fi od ; crit ; 'turn := 2 ; 'c1 := 1 ; rem ; repeat 'c1 := 0 ; while 'c2 = 0 do if 'turn = 2 then 'c1 := 1 ; while 'turn = 2 do skip od ; 'c1 := 0 fi od ; crit ; 'turn := 2 ; 'c1 := 1 ; rem forever] | [ 2,if 'turn = 1 then 'c2 := 1 ; while 'turn = 1 do skip od ; 'c2 := 0 fi ; while 'c1 = 0 do if 'turn = 1 then 'c2 := 1 ; while 'turn = 1 do skip od ; 'c2 := 0 fi od ; crit ; 'turn := 1 ; 'c2 := 1 ; rem ; repeat 'c2 := 0 ; while 'c1 = 0 do if 'turn = 1 then 'c2 := 1 ; while 'turn = 1 do skip od ; 'c2 := 0 fi od ; crit ; 'turn := 1 ; 'c2 := 1 ; rem forever],['c1,0] ['c2, 0] ['turn,1],2},unlabeled} {{[1,while 'c2 = 0 do if 'turn = 2 then 'c1 := 1 ; while 'turn = 2 do skip od ; 'c1 := 0 fi od ; crit ; 'turn := 2 ; 'c1 := 1 ; rem ; repeat 'c1 := 0 ; while 'c2 = 0 do if 'turn = 2 then 'c1 := 1 ; while 'turn = 2 do skip od ; 'c1 := 0 fi od ; crit ; 'turn := 2 ; 'c1 := 1 ; rem forever] | [2,'c2 := 1 ; while 'turn = 1 do skip od ; 'c2 := 0 ; while 'c1 = 0 do if 'turn = 1 then 'c2 := 1 ; while 'turn = 1 do skip od ; 'c2 := 0 fi od ; crit ; 'turn := 1 ; 'c2 := 1 ; rem ; repeat 'c2 := 0 ; while 'c1 = 0 do if 'turn = 1 then 'c2 := 1 ; while 'turn = 1 do skip od ; 'c2 := 0 fi od ; crit ; 'turn := 1 ; 'c2 := 1 ; rem forever],['c1,0] ['c2, 0] ['turn,1],2},unlabeled}, {{[1,if 'turn = 2 then 'c1 := 1 ; while 'turn = 2 do skip od ; 'c1 := 0 fi ; while 'c2 = 0 do if 'turn = 2 then 'c1 := 1 ; while 'turn = 2 do skip od ; 'c1 := 0 fi od ; crit ; 'turn := 2 ; 'c1 := 1 ; rem ; repeat 'c1 := 0 ; while 'c2 = 0 do if 'turn = 2 then 'c1 := 1 ; while 'turn = 2 do skip od ; 'c1 := 0 fi od ; crit ; 'turn := 2 ; 'c1 := 1 ; rem forever] | [2,'c2 := 1 ; while 'turn = 1 do skip od ; 'c2 := 0 ; while 'c1 = 0 do if 'turn = 1 then 'c2 := 1 ; while 'turn = 1 do skip od ; 'c2 := 0 fi od ; crit ; 'turn := 1 ; 'c2 := 1 ; rem ; repeat 'c2 := 0 ; while 'c1 = 0 do if 'turn = 1 then 'c2 := 1 ; while 'turn = 1 do skip od ; 'c2 := 0 fi od ; crit ; 'turn := 1 ; 'c2 := 1 ; rem forever],['c1,0] ['c2, 0] ['turn,1],1},unlabeled} {{[1,while 'c2 = 0 do if 'turn = 2 then 'c1 := 1 ; while 'turn = 2 do skip od ; 'c1 := 0 fi od ; crit ; 'turn := 2 ; 'c1 := 1 ; rem ; repeat 'c1 := 0 ; while 'c2 = 0 do if 'turn = 2 then 'c1 := 1 ; while 'turn = 2 do skip od ; 'c1 := 0 fi od ; crit ; 'turn := 2 ; 'c1 := 1 ; rem forever] | [2,'c2 := 1 ; while 'turn = 1 do skip od ; 'c2 := 0 ; while 'c1 = 0 do if 'turn = 1 then 'c2 := 1 ; while 'turn = 1 do skip od ; 'c2 := 0 fi od ; crit ; 'turn := 1 ; 'c2 := 1 ; rem ; repeat 'c2 := 0 ; while 'c1 = 0 do if 'turn = 1 then 'c2 := 1 ; while 'turn = 1 do skip od ; 'c2 := 0 fi od ; crit ; 'turn := 1 ; 'c2 := 1 ; rem forever],['c1,0] ['c2, 0] ['turn,1],1},unlabeled}) ========================================== reduce in CHECK : modelCheck(initial, []<> exec(1) /\ []<> exec(2) -> []<> enterCrit(1) /\ []<> enterCrit(2)) . rewrites: 1319 result Bool: true Bye. maude-3.1/tests/Misc/badView0000755000175200017520000000033013472141046012737 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/badView.maude -no-banner -no-advise \ > badView.out 2>&1 diff $srcdir/badView.expected badView.out > /dev/null 2>&1 maude-3.1/tests/Misc/badView.expected0000644000175200017520000000263313472141560014545 00000000000000Warning: , line 23 (view BAD1): right-hand side of operator-to-term mapping contains a variable Z which does not correspond to a left-hand side variable. Warning: , line 30 (view BAD2): left-hand side X . 0 of an operator-to-term mapping has non-variable argument 0. Warning: , line 37 (view BAD3): variable X used more than once in the left-hand side X . X of an operator-to-term mapping. Warning: , line 50 (view BAD4): left-hand side f(X, Y, Z) of operator-to-term mapping has 3 arguments whereas 2 were expected. Warning: In nonfinal module instantiation MAP-TO-LIST-WRAP{TRIV, TRIV} parameters C and D cannot both be instantiated by theory-views because of a conflict in the underlying module MAP-TO-LIST-WRAP. Warning: , line 77 (fmod TEST): this module contains one or more errors that could not be patched up and thus it cannot be used or imported. Warning: In nonfinal view instantiation V{TRIV, TRIV} parameters A and B cannot both be instantiated by theory-views because of a conflict in the underlying view V. Warning: , line 98 (fmod TEST): this module contains one or more errors that could not be patched up and thus it cannot be used or imported. Warning: , line 105 (view Wrapper): parameter V of view Wrapper is not bound in target module NAT. Bye. maude-3.1/tests/Misc/unification30000755000175200017520000000035411444017756013766 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/unification3.maude -no-banner -no-advise \ > unification3.out 2>&1 diff $srcdir/unification3.expected unification3.out > /dev/null 2>&1 maude-3.1/tests/Misc/parameterizedView.maude0000644000175200017520000000303413473366130016144 00000000000000set show timing off . set show advisories off . *** *** Test parameterized views. *** fmod FOO{X :: TRIV, Y :: TRIV} is inc MAP{X, Y} + SET{X} . endfm view SetAsDefault{X :: TRIV} from DEFAULT to SET*{X} is sort Elt to Set{X} . op 0 to {} . endv fmod ARRAY-OF-SETS{X :: TRIV, Y :: TRIV} is inc ARRAY{X, SetAsDefault{Y}} . endfm fmod TEST is inc ARRAY-OF-SETS{String, Nat} . endfm red in TEST : insert("one", {1}, insert("one-two", {1,2}, empty)) . red in TEST : insert("one", {1}, insert("one-two", {1,2}, empty))["unseen"] . red in TEST : insert("one", {1}, insert("one-two", {1,2}, empty))["one"] . fmod TEST2 is inc ARRAY{String, SetAsDefault{Nat}} . endfm red in TEST2 : insert("one", {1}, insert("one-two", {1,2}, empty)) . red in TEST2 : insert("one", {1}, insert("one-two", {1,2}, empty))["unseen"] . red in TEST2 : insert("one", {1}, insert("one-two", {1,2}, empty))["one"] . view ArrayOfSets{X :: TRIV, Y :: TRIV} from TRIV to ARRAY{X, SetAsDefault{Y}} is sort Elt to Array{X,SetAsDefault{Y}} . endv fmod LIST-OF-ARRAYS-OF-SETS{X :: TRIV, Y :: TRIV} is inc LIST{ArrayOfSets{X, Y}} . endfm fmod TEST3 is inc LIST-OF-ARRAYS-OF-SETS{String, Nat} . endfm red in TEST3 : insert("one", {1}, insert("one-two", {1,2}, empty)) insert("one", {1}, insert("one-two-three", {1,2,3}, empty)) insert("two", {2}, insert("one-two-three", {1,2,3}, empty)) . fmod TEST4 is inc ARRAY{String, SetAsDefault{DEFAULT}{Nat0}} . endfm red in TEST4 : insert("one", {1}, insert("one-two", {1,2}, empty))["one"] . show views . show modules . maude-3.1/tests/Misc/debug0000755000175200017520000000032010511602774012444 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/debug.maude -no-banner -no-advise \ > debug.out 2>&1 diff $srcdir/debug.expected debug.out > /dev/null 2>&1 maude-3.1/tests/Misc/diophantine.expected0000644000175200017520000000232113140740420015450 00000000000000========================================== reduce in DIOPHANTINE : natSystemSolve(0,0 |-> 1 ; 0,1 |-> 2 ; 0,2 |-> -3 ; 0,3 |-> -2 ; 0,4 |-> -4 ; 1,0 |-> 2 ; 1,1 |-> -1 ; 1,2 |-> -3 ; 1,3 |-> 2 ; 1,4 |-> 5, zeroVector, "cd") . rewrites: 1 result IntVectorSetPair: [ zeroVector | 0 |-> 9 ; 1 |-> 3 ; 2 |-> 5, 1 |-> 9 ; 2 |-> 2 ; 4 |-> 3, 1 |-> 12 ; 2 |-> 2 ; 3 |-> 9, 0 |-> 1 ; 1 |-> 3 ; 2 |-> 1 ; 3 |-> 2, 0 |-> 3 ; 1 |-> 7 ; 2 |-> 3 ; 4 |-> 2, 0 |-> 5 ; 1 |-> 3 ; 2 |-> 3 ; 3 |-> 1, 0 |-> 6 ; 1 |-> 5 ; 2 |-> 4 ; 4 |-> 1, 1 |-> 10 ; 2 |-> 2 ; 3 |-> 3 ; 4 |-> 2, 1 |-> 11 ; 2 |-> 2 ; 3 |-> 6 ; 4 |-> 1, 0 |-> 2 ; 1 |-> 5 ; 2 |-> 2 ; 3 |-> 1 ; 4 |-> 1 ] ========================================== reduce in DIOPHANTINE : natSystemSolve(0,0 |-> 1 ; 0,1 |-> -5 ; 1,1 |-> 4 ; 1,2 |-> -5 ; 2,2 |-> 4 ; 2,3 |-> -5 ; 3,3 |-> 4 ; 3,4 |-> -5 ; 4,4 |-> 4 ; 4,5 |-> -5 ; 5,5 |-> 4 ; 5,6 |-> -5, 0 |-> 1 ; 1 |-> 1 ; 2 |-> 1 ; 3 |-> 1 ; 4 |-> 1 ; 5 |-> 1, "gcd") . rewrites: 1 result IntVectorSetPair: [ 0 |-> 15621 ; 1 |-> 3124 ; 2 |-> 2499 ; 3 |-> 1999 ; 4 |-> 1599 ; 5 |-> 1279 ; 6 |-> 1023 | 0 |-> 15625 ; 1 |-> 3125 ; 2 |-> 2500 ; 3 |-> 2000 ; 4 |-> 1600 ; 5 |-> 1280 ; 6 |-> 1024 ] Bye. maude-3.1/tests/Misc/narrow.expected0000644000175200017520000005631613140740420014473 00000000000000========================================== vu-narrow in BAZ : g(j(A, B)) =>* C . Solution 1 rewrites: 1 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 1 narrowing steps: 0 state: g(j(#1:Foo, #2:Foo)) accumulated substitution: A --> #1:Foo B --> #2:Foo variant unifier: C --> g(j(@1:Foo, @2:Foo)) #1:Foo --> @1:Foo #2:Foo --> @2:Foo Solution 2 rewrites: 1 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 1 narrowing steps: 0 state: g(j(#1:Foo, #2:Foo)) accumulated substitution: A --> #1:Foo B --> #2:Foo variant unifier: C --> g(i(f(%1:Foo), %2:Foo)) #1:Foo --> f(%2:Foo) #2:Foo --> %1:Foo Solution 3 rewrites: 3 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 2 narrowing steps: 1 state: f(k(%2:Foo, f(%3:Foo))) accumulated substitution: A --> f(k(%1:Foo, %2:Foo)) B --> %3:Foo variant unifier: C --> f(k(@1:Foo, f(@2:Foo))) %2:Foo --> @1:Foo %3:Foo --> @2:Foo Solution 4 rewrites: 7 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 5 narrowing steps: 2 state: h(f(@1:Foo)) accumulated substitution: A --> f(k(@2:Foo, f(@1:Foo))) B --> @1:Foo variant unifier: C --> h(f(%1:Foo)) @1:Foo --> %1:Foo Solution 5 rewrites: 8 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 5 narrowing steps: 3 state: f(k(@2:Foo, h(@1:Foo))) accumulated substitution: A --> f(k(@3:Foo, @2:Foo)) B --> k(@1:Foo, @1:Foo) variant unifier: C --> f(k(%1:Foo, h(%2:Foo))) @2:Foo --> %1:Foo @1:Foo --> %2:Foo Solution 6 rewrites: 9 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 5 narrowing steps: 4 state: h(h(%1:Foo)) accumulated substitution: A --> f(k(%2:Foo, f(k(%1:Foo, %1:Foo)))) B --> k(%1:Foo, %1:Foo) variant unifier: C --> h(h(@1:Foo)) %1:Foo --> @1:Foo Solution 7 rewrites: 10 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 5 narrowing steps: 5 state: h(h(%1:Foo)) accumulated substitution: A --> f(k(%2:Foo, h(%1:Foo))) B --> k(%1:Foo, %1:Foo) variant unifier: C --> h(h(@1:Foo)) %1:Foo --> @1:Foo No more solutions. rewrites: 10 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 5 narrowing steps: 5 ========================================== vu-narrow in BAZ : g(j(A, B)) =>+ C . Solution 1 rewrites: 2 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 1 narrowing steps: 1 state: f(k(%2:Foo, f(%3:Foo))) accumulated substitution: A --> f(k(%1:Foo, %2:Foo)) B --> %3:Foo variant unifier: C --> f(k(@1:Foo, f(@2:Foo))) %2:Foo --> @1:Foo %3:Foo --> @2:Foo Solution 2 rewrites: 6 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 4 narrowing steps: 2 state: h(f(@1:Foo)) accumulated substitution: A --> f(k(@2:Foo, f(@1:Foo))) B --> @1:Foo variant unifier: C --> h(f(%1:Foo)) @1:Foo --> %1:Foo Solution 3 rewrites: 7 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 4 narrowing steps: 3 state: f(k(@2:Foo, h(@1:Foo))) accumulated substitution: A --> f(k(@3:Foo, @2:Foo)) B --> k(@1:Foo, @1:Foo) variant unifier: C --> f(k(%1:Foo, h(%2:Foo))) @2:Foo --> %1:Foo @1:Foo --> %2:Foo Solution 4 rewrites: 8 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 4 narrowing steps: 4 state: h(h(%1:Foo)) accumulated substitution: A --> f(k(%2:Foo, f(k(%1:Foo, %1:Foo)))) B --> k(%1:Foo, %1:Foo) variant unifier: C --> h(h(@1:Foo)) %1:Foo --> @1:Foo Solution 5 rewrites: 9 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 4 narrowing steps: 5 state: h(h(%1:Foo)) accumulated substitution: A --> f(k(%2:Foo, h(%1:Foo))) B --> k(%1:Foo, %1:Foo) variant unifier: C --> h(h(@1:Foo)) %1:Foo --> @1:Foo No more solutions. rewrites: 9 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 4 narrowing steps: 5 ========================================== vu-narrow in BAZ : g(j(A, B)) =>! C . Solution 1 rewrites: 9 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 4 narrowing steps: 5 state: h(h(%1:Foo)) accumulated substitution: A --> f(k(%2:Foo, f(k(%1:Foo, %1:Foo)))) B --> k(%1:Foo, %1:Foo) variant unifier: C --> h(h(@1:Foo)) %1:Foo --> @1:Foo Solution 2 rewrites: 9 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 4 narrowing steps: 5 state: h(h(%1:Foo)) accumulated substitution: A --> f(k(%2:Foo, h(%1:Foo))) B --> k(%1:Foo, %1:Foo) variant unifier: C --> h(h(@1:Foo)) %1:Foo --> @1:Foo No more solutions. rewrites: 9 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 4 narrowing steps: 5 ========================================== vu-narrow [, 1] in BAZ : g(j(A, B)) =>! C . No solution. rewrites: 5 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 4 narrowing steps: 1 ========================================== vu-narrow [, 2] in BAZ : g(j(A, B)) =>! C . No solution. rewrites: 7 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 4 narrowing steps: 3 ========================================== vu-narrow [, 3] in BAZ : g(j(A, B)) =>! C . Solution 1 rewrites: 9 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 4 narrowing steps: 5 state: h(h(%1:Foo)) accumulated substitution: A --> f(k(%2:Foo, f(k(%1:Foo, %1:Foo)))) B --> k(%1:Foo, %1:Foo) variant unifier: C --> h(h(@1:Foo)) %1:Foo --> @1:Foo Solution 2 rewrites: 9 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 4 narrowing steps: 5 state: h(h(%1:Foo)) accumulated substitution: A --> f(k(%2:Foo, h(%1:Foo))) B --> k(%1:Foo, %1:Foo) variant unifier: C --> h(h(@1:Foo)) %1:Foo --> @1:Foo No more solutions. rewrites: 9 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 4 narrowing steps: 5 ========================================== vu-narrow [, 4] in BAZ : g(j(A, B)) =>! C . Solution 1 rewrites: 9 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 4 narrowing steps: 5 state: h(h(%1:Foo)) accumulated substitution: A --> f(k(%2:Foo, f(k(%1:Foo, %1:Foo)))) B --> k(%1:Foo, %1:Foo) variant unifier: C --> h(h(@1:Foo)) %1:Foo --> @1:Foo Solution 2 rewrites: 9 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 4 narrowing steps: 5 state: h(h(%1:Foo)) accumulated substitution: A --> f(k(%2:Foo, h(%1:Foo))) B --> k(%1:Foo, %1:Foo) variant unifier: C --> h(h(@1:Foo)) %1:Foo --> @1:Foo No more solutions. rewrites: 9 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 4 narrowing steps: 5 ========================================== vu-narrow [, 1] in BAZ : g(j(A, B)) =>* C . Solution 1 rewrites: 1 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 1 narrowing steps: 0 state: g(j(#1:Foo, #2:Foo)) accumulated substitution: A --> #1:Foo B --> #2:Foo variant unifier: C --> g(j(@1:Foo, @2:Foo)) #1:Foo --> @1:Foo #2:Foo --> @2:Foo Solution 2 rewrites: 1 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 1 narrowing steps: 0 state: g(j(#1:Foo, #2:Foo)) accumulated substitution: A --> #1:Foo B --> #2:Foo variant unifier: C --> g(i(f(%1:Foo), %2:Foo)) #1:Foo --> f(%2:Foo) #2:Foo --> %1:Foo Solution 3 rewrites: 3 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 2 narrowing steps: 1 state: f(k(%2:Foo, f(%3:Foo))) accumulated substitution: A --> f(k(%1:Foo, %2:Foo)) B --> %3:Foo variant unifier: C --> f(k(@1:Foo, f(@2:Foo))) %2:Foo --> @1:Foo %3:Foo --> @2:Foo No more solutions. rewrites: 6 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 5 narrowing steps: 1 ========================================== vu-narrow [, 2] in BAZ : g(j(A, B)) =>* C . Solution 1 rewrites: 1 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 1 narrowing steps: 0 state: g(j(#1:Foo, #2:Foo)) accumulated substitution: A --> #1:Foo B --> #2:Foo variant unifier: C --> g(j(@1:Foo, @2:Foo)) #1:Foo --> @1:Foo #2:Foo --> @2:Foo Solution 2 rewrites: 1 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 1 narrowing steps: 0 state: g(j(#1:Foo, #2:Foo)) accumulated substitution: A --> #1:Foo B --> #2:Foo variant unifier: C --> g(i(f(%1:Foo), %2:Foo)) #1:Foo --> f(%2:Foo) #2:Foo --> %1:Foo Solution 3 rewrites: 3 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 2 narrowing steps: 1 state: f(k(%2:Foo, f(%3:Foo))) accumulated substitution: A --> f(k(%1:Foo, %2:Foo)) B --> %3:Foo variant unifier: C --> f(k(@1:Foo, f(@2:Foo))) %2:Foo --> @1:Foo %3:Foo --> @2:Foo Solution 4 rewrites: 7 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 5 narrowing steps: 2 state: h(f(@1:Foo)) accumulated substitution: A --> f(k(@2:Foo, f(@1:Foo))) B --> @1:Foo variant unifier: C --> h(f(%1:Foo)) @1:Foo --> %1:Foo Solution 5 rewrites: 8 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 5 narrowing steps: 3 state: f(k(@2:Foo, h(@1:Foo))) accumulated substitution: A --> f(k(@3:Foo, @2:Foo)) B --> k(@1:Foo, @1:Foo) variant unifier: C --> f(k(%1:Foo, h(%2:Foo))) @2:Foo --> %1:Foo @1:Foo --> %2:Foo No more solutions. rewrites: 8 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 5 narrowing steps: 3 ========================================== vu-narrow [, 3] in BAZ : g(j(A, B)) =>* C . Solution 1 rewrites: 1 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 1 narrowing steps: 0 state: g(j(#1:Foo, #2:Foo)) accumulated substitution: A --> #1:Foo B --> #2:Foo variant unifier: C --> g(j(@1:Foo, @2:Foo)) #1:Foo --> @1:Foo #2:Foo --> @2:Foo Solution 2 rewrites: 1 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 1 narrowing steps: 0 state: g(j(#1:Foo, #2:Foo)) accumulated substitution: A --> #1:Foo B --> #2:Foo variant unifier: C --> g(i(f(%1:Foo), %2:Foo)) #1:Foo --> f(%2:Foo) #2:Foo --> %1:Foo Solution 3 rewrites: 3 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 2 narrowing steps: 1 state: f(k(%2:Foo, f(%3:Foo))) accumulated substitution: A --> f(k(%1:Foo, %2:Foo)) B --> %3:Foo variant unifier: C --> f(k(@1:Foo, f(@2:Foo))) %2:Foo --> @1:Foo %3:Foo --> @2:Foo Solution 4 rewrites: 7 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 5 narrowing steps: 2 state: h(f(@1:Foo)) accumulated substitution: A --> f(k(@2:Foo, f(@1:Foo))) B --> @1:Foo variant unifier: C --> h(f(%1:Foo)) @1:Foo --> %1:Foo Solution 5 rewrites: 8 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 5 narrowing steps: 3 state: f(k(@2:Foo, h(@1:Foo))) accumulated substitution: A --> f(k(@3:Foo, @2:Foo)) B --> k(@1:Foo, @1:Foo) variant unifier: C --> f(k(%1:Foo, h(%2:Foo))) @2:Foo --> %1:Foo @1:Foo --> %2:Foo Solution 6 rewrites: 9 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 5 narrowing steps: 4 state: h(h(%1:Foo)) accumulated substitution: A --> f(k(%2:Foo, f(k(%1:Foo, %1:Foo)))) B --> k(%1:Foo, %1:Foo) variant unifier: C --> h(h(@1:Foo)) %1:Foo --> @1:Foo Solution 7 rewrites: 10 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 5 narrowing steps: 5 state: h(h(%1:Foo)) accumulated substitution: A --> f(k(%2:Foo, h(%1:Foo))) B --> k(%1:Foo, %1:Foo) variant unifier: C --> h(h(@1:Foo)) %1:Foo --> @1:Foo No more solutions. rewrites: 10 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 5 narrowing steps: 5 ========================================== fvu-narrow in BAZ : g(j(A, B)) =>* C . Solution 1 rewrites: 1 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 1 narrowing steps: 0 state: g(j(#1:Foo, #2:Foo)) accumulated substitution: A --> #1:Foo B --> #2:Foo variant unifier: C --> g(j(@1:Foo, @2:Foo)) #1:Foo --> @1:Foo #2:Foo --> @2:Foo Solution 2 rewrites: 1 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 1 narrowing steps: 0 state: g(j(#1:Foo, #2:Foo)) accumulated substitution: A --> #1:Foo B --> #2:Foo variant unifier: C --> g(i(f(%1:Foo), %2:Foo)) #1:Foo --> f(%2:Foo) #2:Foo --> %1:Foo Solution 3 rewrites: 3 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 2 narrowing steps: 1 state: f(k(%2:Foo, f(%3:Foo))) accumulated substitution: A --> f(k(%1:Foo, %2:Foo)) B --> %3:Foo variant unifier: C --> f(k(@1:Foo, f(@2:Foo))) %2:Foo --> @1:Foo %3:Foo --> @2:Foo Solution 4 rewrites: 7 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 5 narrowing steps: 2 state: h(f(@1:Foo)) accumulated substitution: A --> f(k(@2:Foo, f(@1:Foo))) B --> @1:Foo variant unifier: C --> h(f(%1:Foo)) @1:Foo --> %1:Foo Solution 5 rewrites: 8 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 5 narrowing steps: 3 state: f(k(@2:Foo, h(@1:Foo))) accumulated substitution: A --> f(k(@3:Foo, @2:Foo)) B --> k(@1:Foo, @1:Foo) variant unifier: C --> f(k(%1:Foo, h(%2:Foo))) @2:Foo --> %1:Foo @1:Foo --> %2:Foo Solution 6 rewrites: 9 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 5 narrowing steps: 4 state: h(h(%1:Foo)) accumulated substitution: A --> f(k(%2:Foo, f(k(%1:Foo, %1:Foo)))) B --> k(%1:Foo, %1:Foo) variant unifier: C --> h(h(@1:Foo)) %1:Foo --> @1:Foo No more solutions. rewrites: 10 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 5 narrowing steps: 5 ========================================== fvu-narrow in BAZ : g(j(A, B)) =>+ C . Solution 1 rewrites: 2 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 1 narrowing steps: 1 state: f(k(%2:Foo, f(%3:Foo))) accumulated substitution: A --> f(k(%1:Foo, %2:Foo)) B --> %3:Foo variant unifier: C --> f(k(@1:Foo, f(@2:Foo))) %2:Foo --> @1:Foo %3:Foo --> @2:Foo Solution 2 rewrites: 6 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 4 narrowing steps: 2 state: h(f(@1:Foo)) accumulated substitution: A --> f(k(@2:Foo, f(@1:Foo))) B --> @1:Foo variant unifier: C --> h(f(%1:Foo)) @1:Foo --> %1:Foo Solution 3 rewrites: 7 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 4 narrowing steps: 3 state: f(k(@2:Foo, h(@1:Foo))) accumulated substitution: A --> f(k(@3:Foo, @2:Foo)) B --> k(@1:Foo, @1:Foo) variant unifier: C --> f(k(%1:Foo, h(%2:Foo))) @2:Foo --> %1:Foo @1:Foo --> %2:Foo Solution 4 rewrites: 8 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 4 narrowing steps: 4 state: h(h(%1:Foo)) accumulated substitution: A --> f(k(%2:Foo, f(k(%1:Foo, %1:Foo)))) B --> k(%1:Foo, %1:Foo) variant unifier: C --> h(h(@1:Foo)) %1:Foo --> @1:Foo No more solutions. rewrites: 9 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 4 narrowing steps: 5 ========================================== fvu-narrow in BAZ : g(j(A, B)) =>! C . Solution 1 rewrites: 9 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 4 narrowing steps: 5 state: h(h(%1:Foo)) accumulated substitution: A --> f(k(%2:Foo, f(k(%1:Foo, %1:Foo)))) B --> k(%1:Foo, %1:Foo) variant unifier: C --> h(h(@1:Foo)) %1:Foo --> @1:Foo No more solutions. rewrites: 9 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 4 narrowing steps: 5 ========================================== fvu-narrow [, 1] in BAZ : g(j(A, B)) =>! C . No solution. rewrites: 5 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 4 narrowing steps: 1 ========================================== fvu-narrow [, 2] in BAZ : g(j(A, B)) =>! C . No solution. rewrites: 7 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 4 narrowing steps: 3 ========================================== fvu-narrow [, 3] in BAZ : g(j(A, B)) =>! C . Solution 1 rewrites: 9 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 4 narrowing steps: 5 state: h(h(%1:Foo)) accumulated substitution: A --> f(k(%2:Foo, f(k(%1:Foo, %1:Foo)))) B --> k(%1:Foo, %1:Foo) variant unifier: C --> h(h(@1:Foo)) %1:Foo --> @1:Foo No more solutions. rewrites: 9 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 4 narrowing steps: 5 ========================================== fvu-narrow [, 4] in BAZ : g(j(A, B)) =>! C . Solution 1 rewrites: 9 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 4 narrowing steps: 5 state: h(h(%1:Foo)) accumulated substitution: A --> f(k(%2:Foo, f(k(%1:Foo, %1:Foo)))) B --> k(%1:Foo, %1:Foo) variant unifier: C --> h(h(@1:Foo)) %1:Foo --> @1:Foo No more solutions. rewrites: 9 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 4 narrowing steps: 5 ========================================== fvu-narrow [, 1] in BAZ : g(j(A, B)) =>* C . Solution 1 rewrites: 1 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 1 narrowing steps: 0 state: g(j(#1:Foo, #2:Foo)) accumulated substitution: A --> #1:Foo B --> #2:Foo variant unifier: C --> g(j(@1:Foo, @2:Foo)) #1:Foo --> @1:Foo #2:Foo --> @2:Foo Solution 2 rewrites: 1 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 1 narrowing steps: 0 state: g(j(#1:Foo, #2:Foo)) accumulated substitution: A --> #1:Foo B --> #2:Foo variant unifier: C --> g(i(f(%1:Foo), %2:Foo)) #1:Foo --> f(%2:Foo) #2:Foo --> %1:Foo Solution 3 rewrites: 3 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 2 narrowing steps: 1 state: f(k(%2:Foo, f(%3:Foo))) accumulated substitution: A --> f(k(%1:Foo, %2:Foo)) B --> %3:Foo variant unifier: C --> f(k(@1:Foo, f(@2:Foo))) %2:Foo --> @1:Foo %3:Foo --> @2:Foo No more solutions. rewrites: 6 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 5 narrowing steps: 1 ========================================== fvu-narrow [, 2] in BAZ : g(j(A, B)) =>* C . Solution 1 rewrites: 1 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 1 narrowing steps: 0 state: g(j(#1:Foo, #2:Foo)) accumulated substitution: A --> #1:Foo B --> #2:Foo variant unifier: C --> g(j(@1:Foo, @2:Foo)) #1:Foo --> @1:Foo #2:Foo --> @2:Foo Solution 2 rewrites: 1 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 1 narrowing steps: 0 state: g(j(#1:Foo, #2:Foo)) accumulated substitution: A --> #1:Foo B --> #2:Foo variant unifier: C --> g(i(f(%1:Foo), %2:Foo)) #1:Foo --> f(%2:Foo) #2:Foo --> %1:Foo Solution 3 rewrites: 3 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 2 narrowing steps: 1 state: f(k(%2:Foo, f(%3:Foo))) accumulated substitution: A --> f(k(%1:Foo, %2:Foo)) B --> %3:Foo variant unifier: C --> f(k(@1:Foo, f(@2:Foo))) %2:Foo --> @1:Foo %3:Foo --> @2:Foo Solution 4 rewrites: 7 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 5 narrowing steps: 2 state: h(f(@1:Foo)) accumulated substitution: A --> f(k(@2:Foo, f(@1:Foo))) B --> @1:Foo variant unifier: C --> h(f(%1:Foo)) @1:Foo --> %1:Foo Solution 5 rewrites: 8 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 5 narrowing steps: 3 state: f(k(@2:Foo, h(@1:Foo))) accumulated substitution: A --> f(k(@3:Foo, @2:Foo)) B --> k(@1:Foo, @1:Foo) variant unifier: C --> f(k(%1:Foo, h(%2:Foo))) @2:Foo --> %1:Foo @1:Foo --> %2:Foo No more solutions. rewrites: 8 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 5 narrowing steps: 3 ========================================== fvu-narrow [, 3] in BAZ : g(j(A, B)) =>* C . Solution 1 rewrites: 1 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 1 narrowing steps: 0 state: g(j(#1:Foo, #2:Foo)) accumulated substitution: A --> #1:Foo B --> #2:Foo variant unifier: C --> g(j(@1:Foo, @2:Foo)) #1:Foo --> @1:Foo #2:Foo --> @2:Foo Solution 2 rewrites: 1 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 1 narrowing steps: 0 state: g(j(#1:Foo, #2:Foo)) accumulated substitution: A --> #1:Foo B --> #2:Foo variant unifier: C --> g(i(f(%1:Foo), %2:Foo)) #1:Foo --> f(%2:Foo) #2:Foo --> %1:Foo Solution 3 rewrites: 3 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 2 narrowing steps: 1 state: f(k(%2:Foo, f(%3:Foo))) accumulated substitution: A --> f(k(%1:Foo, %2:Foo)) B --> %3:Foo variant unifier: C --> f(k(@1:Foo, f(@2:Foo))) %2:Foo --> @1:Foo %3:Foo --> @2:Foo Solution 4 rewrites: 7 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 5 narrowing steps: 2 state: h(f(@1:Foo)) accumulated substitution: A --> f(k(@2:Foo, f(@1:Foo))) B --> @1:Foo variant unifier: C --> h(f(%1:Foo)) @1:Foo --> %1:Foo Solution 5 rewrites: 8 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 5 narrowing steps: 3 state: f(k(@2:Foo, h(@1:Foo))) accumulated substitution: A --> f(k(@3:Foo, @2:Foo)) B --> k(@1:Foo, @1:Foo) variant unifier: C --> f(k(%1:Foo, h(%2:Foo))) @2:Foo --> %1:Foo @1:Foo --> %2:Foo Solution 6 rewrites: 9 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 5 narrowing steps: 4 state: h(h(%1:Foo)) accumulated substitution: A --> f(k(%2:Foo, f(k(%1:Foo, %1:Foo)))) B --> k(%1:Foo, %1:Foo) variant unifier: C --> h(h(@1:Foo)) %1:Foo --> @1:Foo No more solutions. rewrites: 10 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 5 narrowing steps: 5 ========================================== vu-narrow in FOO : i(A, B) =>+ g(A) . Solution 1 rewrites: 1 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 0 narrowing steps: 1 state: g(f(@1:Foo)) accumulated substitution: A --> f(@1:Foo) B --> h(@2:Foo) variant unifier: @1:Foo --> #1:Foo No more solutions. rewrites: 1 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 0 narrowing steps: 1 ========================================== fvu-narrow in FOO : i(A, B) =>+ g(A) . Solution 1 rewrites: 1 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 0 narrowing steps: 1 state: g(f(@1:Foo)) accumulated substitution: A --> f(@1:Foo) B --> h(@2:Foo) variant unifier: @1:Foo --> #1:Foo No more solutions. rewrites: 1 mb applications: 0 equational rewrites: 0 rule rewrites: 0 variant narrowing steps: 0 narrowing steps: 1 Bye. maude-3.1/tests/Misc/variantNarrowing.maude0000644000175200017520000000234712006104535016004 00000000000000set show timing off . fmod CONSTANTS is sort Msg . op null : -> Msg . op 1 : -> Msg . op 2 : -> Msg . op 3 : -> Msg . op 4 : -> Msg . op 5 : -> Msg . op f : Msg Msg -> Msg [frozen] . op g : Msg Msg -> Msg [frozen] . endfm fmod TEST is inc CONSTANTS . op u : Msg Msg -> Msg [frozen assoc comm] . eq u(X:Msg, X:Msg) = (null).Msg [variant] . eq u(X:Msg, X:Msg, Y:Msg) = Y:Msg [variant] . eq u(X:Msg, (null).Msg) = X:Msg [variant] . endfm get variants in TEST : g(f(u(u(X14:Msg,2),g(g(X3:Msg,X15:Msg),X16:Msg)),u(g(X12:Msg,X3:Msg),g(X8:Msg,g(X10:Msg,X9:Msg)))),f(u(f(X8:Msg,X15:Msg),u(X15:Msg,X9:Msg)),g(f(X2:Msg,X2:Msg),g(3,X6:Msg)))) . fmod XOR is sort XOR . sort Elem . ops cst1 cst2 cst3 cst4 : -> Elem . subsort Elem < XOR . op _+_ : XOR XOR -> XOR [ctor assoc comm] . op 0 : -> XOR . op a : -> XOR . vars X Y : XOR . eq Y + 0 = Y [variant] . eq X + X = 0 [variant] . eq X + X + Y = Y [variant] . endfm get variants in XOR : X:XOR + cst1 . get variants in XOR : X:XOR + cst2 . get variants in XOR : X:XOR + cst2 such that X:XOR + a irreducible . get variants in XOR : X:XOR + Y:XOR + cst1 . get variants in XOR : X:XOR + Y:XOR + cst1 such that X:XOR + cst1, X:XOR + cst2 irreducible . maude-3.1/tests/Misc/narrow.maude0000644000175200017520000000251713112153756013770 00000000000000set show timing off . mod BAZ is sort Foo . ops f g h : Foo -> Foo . ops i j k : Foo Foo -> Foo . vars X Y Z W A B C D : Foo . eq j(f(X), Y) = i(f(Y), X) [variant] . rl g(i(X, k(Y, Z))) => f(k(Z, X)) [narrowing] . rl f(k(X, X)) => h(X) [narrowing] . endm set show breakdown on . vu-narrow in BAZ : g(j(A, B)) =>* C . vu-narrow in BAZ : g(j(A, B)) =>+ C . vu-narrow in BAZ : g(j(A, B)) =>! C . vu-narrow [,1] in BAZ : g(j(A, B)) =>! C . vu-narrow [,2] in BAZ : g(j(A, B)) =>! C . vu-narrow [,3] in BAZ : g(j(A, B)) =>! C . vu-narrow [,4] in BAZ : g(j(A, B)) =>! C . vu-narrow [,1] in BAZ : g(j(A, B)) =>* C . vu-narrow [,2] in BAZ : g(j(A, B)) =>* C . vu-narrow [,3] in BAZ : g(j(A, B)) =>* C . fvu-narrow in BAZ : g(j(A, B)) =>* C . fvu-narrow in BAZ : g(j(A, B)) =>+ C . fvu-narrow in BAZ : g(j(A, B)) =>! C . fvu-narrow [,1] in BAZ : g(j(A, B)) =>! C . fvu-narrow [,2] in BAZ : g(j(A, B)) =>! C . fvu-narrow [,3] in BAZ : g(j(A, B)) =>! C . fvu-narrow [,4] in BAZ : g(j(A, B)) =>! C . fvu-narrow [,1] in BAZ : g(j(A, B)) =>* C . fvu-narrow [,2] in BAZ : g(j(A, B)) =>* C . fvu-narrow [,3] in BAZ : g(j(A, B)) =>* C . mod FOO is sort Foo . ops f g h : Foo -> Foo . op i : Foo Foo -> Foo . vars X Y Z W A B C D : Foo . rl i(f(X), h(Y)) => g(f(X)) [narrowing] . endm vu-narrow i(A, B) =>+ g(A) . fvu-narrow i(A, B) =>+ g(A) . maude-3.1/tests/Misc/dataStructures.maude0000644000175200017520000000540710502101415015457 00000000000000set show timing off . fmod SORTABLE-LIST-TEST is inc SORTABLE-LIST{Nat<} . var N : Nat . var L : List{Nat<} . op gen : Nat -> List{Nat<} . eq gen(N) = gen2(N, nil) . op gen2 : Nat List{Nat<} -> List{Nat<} . eq gen2(0, L) = L . eq gen2(s N, L) = gen2(N, ((s N * s N) rem 100) L) . endfm red size(gen(100)) . red sort(gen(100)) . red reverse(sort(gen(100))) . red occurs(5, gen(100)) . red occurs(24, gen(100)) . fmod SET-TEST is inc SET{Nat} . var N M : Nat . var A : Set{Nat} . op gen : Nat Nat -> Set{Nat} . eq gen(N, M) = gen2(N, M, empty) . op gen2 : Nat Nat Set{Nat} -> Set{Nat} . eq gen2(0, M, A) = A . eq gen2(s N, M, A) = gen2(N, M, insert(s N * M, A)) . endfm red intersection(gen(100, 13), gen(100, 4)) . red union(gen(100, 13), gen(100, 4)) . red gen(100, 13) \ gen(100, 52) . red intersection(gen(100, 13), gen(100, 4)) \ gen(100, 52) . red | gen(100, 13) | . red delete(3,(4,5,3)) . red 53 in union(gen(100, 13), gen(100, 4)) . red 52 in union(gen(100, 13), gen(100, 4)) . fmod LIST-AND-SET-TEST is inc LIST-AND-SET{Nat} . var N : Nat . var L : List{Nat} . op gen : Nat -> List{Nat} . eq gen(N) = gen2(N, nil) . op gen2 : Nat List{Nat} -> List{Nat} . eq gen2(0, L) = L . eq gen2(s N, L) = gen2(N, ((s N * s N) rem 100) L) . endfm red gen(100) . red makeSet(gen(100)) . red filter(gen(100), makeSet(gen(10))) . red filterOut(gen(100), makeSet(gen(10))) . fmod SORTABLE-LIST-AND-SET-TEST is inc SORTABLE-LIST-AND-SET{Nat<} . var N : Nat . var L : List{Nat<} . op gen : Nat -> List{Nat<} . eq gen(N) = gen2(N, nil) . op gen2 : Nat List{Nat<} -> List{Nat<} . eq gen2(0, L) = L . eq gen2(s N, L) = gen2(N, ((s N * s N) rem 100) L) . endfm red makeList(makeSet(gen(100))) . fmod LIST*-TEST is inc LIST*{Nat} . ops a b : -> List{Nat} . eq a = [[1 2 3] [] [3 4 5 6]] . eq b = [[[1] []] 2 [1 2 3]] . endfm red append(a, b) . red size(append(a, b)) . red reverse(append(a, b)) . red head(a) . red tail(a) . red last(a) . red front(a) . red occurs([], a) . red occurs([2 3], a) . fmod SET*-TEST is inc SET*{Nat} . var N : Nat . op zf : Nat -> Set{Nat} . eq zf(0) = {} . eq zf(s N) = union({zf(N)}, zf(N)) . endfm red zf(0) . red zf(1) . red zf(2) . red zf(3) . red zf(4) . red | zf(10) | . red | zf(100) | . red 2^ zf(4) . red | 2^ zf(9) | . fmod MAP-TEST is inc MAP{String, Nat} . op a : -> Map{String, Nat} . eq a = insert("three", 3, insert("two", 2, insert("one", 1, insert("zero", 0, empty)))) . endfm red a . red a["one"] . fmod ARRAY-TEST is inc ARRAY{Nat, Nat0} . var N : Nat . op gen : Nat -> Array{Nat, Nat0} . eq gen(0) = empty . eq gen(s N) = insert(s N, s N rem 10, gen(N)) . endfm red gen(100) . red gen(100)[55] . red gen(100)[60] . red gen(100)[1000000000000000000000] . maude-3.1/tests/Misc/view.maude0000644000175200017520000000177013275423315013433 00000000000000set include BOOL off . fth T is sort Elt . op f : Elt -> Elt . endfth fmod M{X :: T} is op g : X$Elt -> X$Elt . var X : X$Elt . eq g(X) = f(f(X)) . endfm fmod FOO is sort Foo . endfm view V from T to FOO is sort Elt to Foo . var X : Elt . op f(X) to term X . endv fmod TEST is inc M{V} . endfm show all TEST . *** now invalidate view V by replacing FOO and recheck TEST fmod FOO is sort Foo . op c : -> Foo . endfm show all TEST . *** now replace view V altogether view V from T to FOO is sort Elt to Foo . var X : Elt . op f(X) to term c . endv show all TEST . *** now replace T with incompatible theory and redefine everything fth T is sort Elt . op f : Elt Elt -> Elt . endfth fmod M{X :: T} is op g : X$Elt -> X$Elt . var X : X$Elt . eq g(X) = f(X, f(X, X)) . endfm fmod FOO is sort Foo . op h : Foo -> Foo . endfm view V from T to FOO is sort Elt to Foo . vars X Y : Elt . op f(X, Y) to term h(Y) . endv fmod TEST is inc M{V} . endfm show all TEST . maude-3.1/tests/Misc/assocUnification0000755000175200017520000000037412317660153014671 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/assocUnification.maude -no-banner -no-advise \ > assocUnification.out 2>&1 diff $srcdir/assocUnification.expected assocUnification.out > /dev/null 2>&1 maude-3.1/tests/Misc/sreduce.expected0000644000175200017520000000133313140740420014602 00000000000000========================================== sreduce in MODULAR : modExp(s s s s 0, s s 0 ^ ((s s 0 ^ s s s s 0) + s s s s 0), s s s s s 0) . rewrites: 40894656 result NzNat: s 0 ========================================== sreduce in LIST-BENCH : head(multi(dup(a b c d e nil, s s s s 0 * s s s s 0), s s s s s s s s s 0 * s s s s s s s s s 0)) . rewrites: 26870231 result Elt: e ========================================== sreduce in BIT : count(1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 nil) . rewrites: 1572843 result List: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 nil ========================================== sreduce in BINARY : count(fact(1 1 1 1 1 1 1 1 1 1 nil)) . rewrites: 18755260 result Num: 0 0 0 1 0 0 0 0 1 1 1 1 nil Bye. maude-3.1/tests/Misc/view0000755000175200017520000000031413275423425012337 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/view.maude -no-banner -no-advise \ > view.out 2>&1 diff $srcdir/view.expected view.out > /dev/null 2>&1 maude-3.1/tests/Misc/variantMatching.maude0000644000175200017520000000350713724605076015605 00000000000000set show timing off . *** *** We variant matching against equivalent variant unification problems. *** fmod FOO is sort Foo . ops f g h : Foo Foo -> Foo . op 1f : -> Foo . vars W X Y Z A B C D E : Foo . ops w x y z a b c d e : -> Foo . eq f(X, 1f) = X [variant] . eq f(1f, X) = X [variant] . endfm variant unify f(X, g(Y, Z)) =? f(x, g(y, z)) . variant match f(X, g(Y, Z)) <=? f(X, g(Y, Z)) . variant unify g(f(X, Y), Z) =? g(a, g(a, b)) . variant match g(f(X, Y), Z) <=? g(a, g(A, B)) . variant unify f(1f, g(Y, Z)) =? g(y, z) . variant match f(1f, g(Y, Z)) <=? g(Y, Z) . variant unify g(f(X, Y), Z) =? g(a, f(b, c)) . variant match g(f(X, Y), Z) <=? g(A, f(B, C)) . fmod LEFT-ID is sorts Elt Magma . subsort Elt < Magma . op __ : Magma Magma -> Magma [gather(E e)] . ops a b c d e x y z : -> Elt . var X : [Magma] . eq e X = X [variant] . endfm variant unify X:Magma a =? y a a . variant match X:Magma a <=? Y:Magma a a . variant unify a X:Magma =? a a y . variant match a X:Magma <=? a a Y:Magma . fmod RIGHT-ID is sorts Elt Magma . subsort Elt < Magma . op __ : Magma Magma -> Magma [gather(e E)] . ops a b c d e x y z : -> Elt . var X : [Magma] . eq X e = X [variant] . endfm variant unify X:Magma a =? y a a . variant match X:Magma a <=? Y:Magma a a . variant unify a X:Magma =? a a y . variant match a X:Magma <=? a a Y:Magma . fmod XOR is sort XOR . sort Elem . ops a b c d w x y z : -> Elem . subsort Elem < XOR . op _+_ : XOR XOR -> XOR [ctor assoc comm] . op 0 : -> XOR . vars X Y : XOR . eq Y + 0 = Y [variant] . eq X + X = 0 [variant] . eq X + X + Y = Y [variant] . endfm variant unify X + Y =? c . variant match X + Y <=? c . variant unify X + Y =? c + d . variant match X + Y <=? c + d . variant match X + Y <=? #1:Elem + d . variant match X + Y <=? #1:Elem + #2:Elem . maude-3.1/tests/Misc/debug.expected0000644000175200017520000000112013565216260014243 00000000000000========================================== reduce in BAR : a . ========================================== reduce in BAR : a . rewrites: 2 result Bar: c rewrites: 2 result Bar: c ========================================== reduce in META-LEVEL : metaReduce(['BAR], 'a.Bar) . *********** equation eq [Q:Qid] = sth Q:Qid is including Q:Qid . sorts none . none none none none none none none endsth . Q:Qid --> 'BAR ['BAR] ---> sth 'BAR is including 'BAR . sorts none . none none none none none none none endsth rewrites: 4 result ResultPair: {'c.Bar,'Bar} Bye. maude-3.1/tests/Misc/parameterization.maude0000644000175200017520000001253513463210042016026 00000000000000set show timing off . *** check renaming instantiation *** trivial case: no parameterized sorts in renaming fmod FOO{X :: TRIV, Y :: TRIV} is sort Foo{X,Y} . op f : Bool -> Bool . endfm fmod BAR{Z :: TRIV} is inc FOO{Z, Nat} . endfm fmod BAZ is inc (BAR * (op f : Bool -> Bool to g)){Rat} . endfm show all . show modules . *** parameterized sorts in renaming fmod FOO{X :: TRIV, Y :: TRIV} is sort Foo{X,Y} . op f : Foo{X,Y} -> Foo{X,Y} . endfm fmod BAR{Z :: TRIV} is inc FOO{Z, Nat} . endfm fmod BAZ is inc (BAR * (sort Foo{Z, Nat} to Bar{Nat, Z}, op f : Foo{Z, Nat} -> Foo{Z, Nat} to g) ){Rat} . endfm show all . show modules . *** parameter has the same name fmod FOO{X :: TRIV, Y :: TRIV} is sort Foo{X,Y} . op f : Foo{X,Y} -> Foo{X,Y} . endfm fmod BAR{X :: TRIV} is inc FOO{X, Nat} . endfm fmod BAZ is inc (BAR * (sort Foo{X, Nat} to Bar{Nat, X}, op f : Foo{X, Nat} -> Foo{X, Nat} to g) ){Rat} . endfm show all . show modules . *** recapture of bound parameters instantiated by a theory-view fmod FOO{X :: TRIV} is sort Foo{X} . op f : Foo{X} -> Foo{X} . endfm fmod BAR{X :: TRIV} is inc FOO{X} . sort Bar{X} . op g : Bar{X} -> Foo{X} . endfm fmod BAZ is inc (BAR * (sort Foo{X} to Foo'{X}, sort Bar{X} to Bar'{X}, op f : Foo{X} -> Foo{X} to f', op g : Bar{X} -> Foo{X} to g') ){STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{Nat<} . endfm show all . show modules . *** op->term mappings fth T is sort Elt . op f : Elt -> Elt . endfth fmod M{X :: T} is op g : X$Elt -> X$Elt . var A : X$Elt . eq g(A) = f(f(A)) . endfm view V from T to NAT is sort Elt to Nat . op f(X:Elt) to term X:Nat + 1 . endv fmod TEST is inc M{V} . endfm show all . *** with terms occuring as identities fth T is sort Elt . op s : Elt -> Elt . op 0 : -> Elt . endfth fmod M{X :: T} is op _#_ : X$Elt X$Elt -> X$Elt [id: s(0)] . vars A B : X$Elt . eq s(A) # s(B) = s(s(A # B)) . endfm view V from T to NAT is sort Elt to Nat . op s(X:Elt) to term s X:Nat . endv fmod TEST is inc M{V} . endfm show all . red 0 # 1 . **** mapping iter ops to terms fth T is sort Elt . op s : Elt -> Elt [iter] . op 0 : -> Elt . endfth fmod M{X :: T} is op f : X$Elt -> X$Elt . var A : X$Elt . eq f(A) = s^10(A) . endfm view V from T to INT is sort Elt to Int . op s(X:Elt) to term - X:Int . endv fmod TEST is inc M{V} . endfm show all . fth T is sort Elt . op s : Elt -> Elt [iter] . op 0 : -> Elt . endfth fmod M{X :: T} is op f : X$Elt -> X$Elt . var A : X$Elt . eq f(A) = s^3(A) . endfm view V from T to INT is sort Elt to Int . op s(X:Elt) to term X:Int * X:Int . endv fmod TEST is inc M{V} . endfm show all . **** mapping assoc ops to terms fth T is sort Elt . op f : Elt Elt -> Elt [assoc] . endfth fmod M{X :: T} is op g : X$Elt X$Elt -> X$Elt . vars A B : X$Elt . eq g(A, B) = f(A, B, A, B) . endfm view V from T to NAT is sort Elt to Nat . op f(X:Elt, Y:Elt) to term X:Nat + Y:Nat . endv fmod TEST is inc M{V} . endfm show all . fth T is sort Elt . op f : Elt Elt -> Elt [assoc] . endfth fmod M{X :: T} is op g : X$Elt X$Elt -> X$Elt . vars A B : X$Elt . eq g(A, B) = f(A, B, A, B) . endfm view V from T to INT is sort Elt to Int . op f(X:Elt, Y:Elt) to term X:Int - s Y:Int . endv fmod TEST is inc M{V} . endfm show all . set print mixfix off . show all . set print mixfix on . **** mapping AC ops to terms fth T is sort Elt . op f : Elt Elt -> Elt [assoc comm] . endfth fmod M{X :: T} is op g : X$Elt X$Elt -> X$Elt . vars A B : X$Elt . eq g(A, B) = f(A, B, A, B) . endfm show all . view V from T to NAT is sort Elt to Nat . op f(X:Elt, Y:Elt) to term X:Nat + Y:Nat . endv fmod TEST is inc M{V} . endfm show all . set print mixfix off . show all . fth T is sort Elt . op f : Elt Elt -> Elt [assoc comm] . endfth fmod M{X :: T} is op g : X$Elt X$Elt -> X$Elt . vars A B : X$Elt . eq g(A, B) = f(A, B, A, B) . endfm show all . view V from T to INT is sort Elt to Int . op f(X:Elt, Y:Elt) to term X:Int - s Y:Int . endv fmod TEST is inc M{V} . endfm show all . set print mixfix off . show all . set print mixfix on . *** what if toTerm contains polymorph instances? fth T is sort Elt . op f : Elt Elt -> Elt [assoc comm] . endfth fmod M{X :: T} is op g : X$Elt X$Elt -> X$Elt . vars A B : X$Elt . eq g(A, B) = f(A, B, A, B) . endfm show all . view V from T to NAT is sort Elt to Nat . op f(X:Elt, Y:Elt) to term if X:Nat > Y:Nat then X:Nat else Y:Nat fi . endv fmod TEST is inc M{V} . endfm show all . set print mixfix off . show all . set print mixfix off . red g(5, 4) . *** check handling of illegal stuff *** summing modules with free parameters fmod FOO{X :: TRIV} is inc (LIST + SET){X} . endfm *** summing modules with bound parameters fmod FOO{X :: TRIV} is inc LIST{X} + SET{X} . endfm *** Now LEGAL *** passing a PEM in a nonfinal instantiation fmod FOO{X :: STRICT-WEAK-ORDER, Y :: TRIV} is inc MAP{STRICT-WEAK-ORDER, Y}{X} . endfm *** illegally overriding an operator from a parameter theory fth T is sort Elt . op f : Elt -> Elt . endfth view V from T to NAT is sort Elt to NzNat . op f(X:Elt) to term X:NzNat . endv fmod MOD{M :: T} is op f : M$Elt -> M$Elt . endfm fmod TEST is protecting MOD{V} . endfm maude-3.1/tests/Misc/assocUnification.maude0000755000175200017520000003765712716733466016014 00000000000000set show timing off . fmod A-UNIF is sorts List Elt . subsort Elt < List . op __ : List List -> List [assoc] . op f : List List -> List [assoc] . op g : List List -> List . op h : List List -> List [assoc comm] . op i : List -> List . op j : List List -> List [assoc comm id: 1] . op 1 : -> List . ops a b c d e : -> Elt . vars A B C D G H I J K L M N P Q R S T U V W X Y Z : List . vars E F : Elt . endfm *** linear elementary associative unification of n variables against m variables *** has a minimal complete set of unifiers of size D(n, m) ***( Delannoy's numbers D(n, m) 1 1 1 1 1 1 1 1 1 1 1 3 5 7 9 11 13 15 17 19 1 5 13 25 41 61 85 113 145 181 1 7 25 63 129 231 377 575 833 1159 1 9 41 129 321 681 1289 2241 3649 5641 1 11 61 231 681 1683 3653 7183 13073 22363 1 13 85 377 1289 3653 8989 19825 40081 75517 1 15 113 575 2241 7183 19825 48639 108545 224143 1 17 145 833 3649 13073 40081 108545 265729 598417 1 19 181 1159 5641 22363 75517 224143 598417 1462563 ) unify A B =? X . unify A B =? X Y . unify A B C =? X Y . unify A B C =? X Y Z . unify A B C D =? X Y Z . unify A B C D G =? X Y Z . *** Simultaneous elementary associative unification is just a product as each *** equation is independent because of linearity unify A B C =? X Y Z /\ G H I =? M N . *** Non-linear problems are explicitly disallowed. unify A B =? B C . *** Non-variable subterms are allowed with the proviso: *** [1] Each such subterm must be headed by a collapse free symbol; and *** [2] No variable occuring directly under an associative symbol can be mentioned. unify a A a =? B a C . unify a A b =? B c C . unify a A a =? B a C a D . unify a A b =? B c C d D . unify h(A, B, B) C h(G, H) =? I h(J, i(K)) L . unify h(A, B) C h(G, H) =? I h(J, J) L h(M, M) N . unify A h(X, Y) B =? C h(U, V) D h(U, U) G . *** Because non-free theories introduce non-linear fresh variables for purification and expressing *** unifiers, associative symbols can only appear at the top or immediately under the free skeleton *** of a term. unify g(h(A, B, B) C h(G, H), X Y a Z) =? g(I h(J, i(K)) L, U b V W) . *** The AC theory introduces fresh variables to express the AC unifiers on abstracted terms *** and these are necessarily non-linear [since each variable must show up on each side of the *** equation] which breaks linear associative unification. unify h(h(A, B, B) C h(G, H), X Y a Z) =? h(I h(J, i(K)) L, U b V W) . *** *** New algorithm lifts many of the above restrictions, though variables occuring under an associative *** symbol (perhaps indirectly via collapse) should still be linear, unless they are element variables *** or are otherwise constrained. No more than two subterms headed by the same associative symbol should *** the same variable unless at least for one of the terms has all the arguments are collapse-free *** aliens or element variables. *** unify h(A, A) =? h(f(B, C), f(I, J)) . *** this is OK unify h(A, A, A) =? h(f(B, C), f(I, J), f(X, Y)) . *** this forces 3 h-terms to unify against A and fails unify h(f(a, b), f(a, b), f(a, b)) =? h(f(B, C), f(I, J), f(X, Y)) . *** this is OK unify A E B F C E D =? W F X E Y F Z . *** OK because the nonlinear variable are all element variables unify A =? h(B, C) /\ X A Y =? U h(C, D) V E A W . *** OK because A is bound to a collapse-free alien before the associative theory sees it unify X A Y =? U h(C, D) V E A W /\ A =? h(B, C) . unify A =? h(B, C) /\ X A Y =? U h(C, D) V E A W . *** Swapping the order no longer fails unify j(A, f(B, E, C), f(D, E, j(G, H), I)) =? j(U, f(V, W), f(X, j(Y, Z), S)) . *** very complicated cases with collapse work as long as only element variables are nonlinear ********************************************* *** New non-linear examples added 5/15/16 *** ********************************************* ***( Associative unfication examples to test PIG-PUG with cycle detection where all variables appear at most twice. We are mostly interested in the rare cases where cycles are detected but they are found to be dead and don't generate infinite families of unifiers. This situation only seems to happen when element variables or free constants are present. ) fmod FOO is sorts Elt Foo . subsort Elt < Foo . op __ : Foo Foo -> Foo [assoc] . *** free constants ops a b c d e f g h i j : -> Foo . *** element variables vars E F G H I J K L M N : Elt . *** unconstrained variables vars P Q R S T U V W X Y Z : Foo . endfm *** 7 symbol, element variables, PIG-PUG has dead cycle(s), no unifiers unify P P =? Q Q R R H . unify P P Q =? Q R R H . unify P P =? Q Q G G H . unify P P Q =? Q G G H . unify P P =? Q Q R H R . unify P P Q =? Q R H R . unify P P =? Q Q G H G . unify P P Q =? Q G H G . unify P P =? Q Q G S S . unify P P Q =? Q G S S . unify P P =? Q Q G H H . unify P P Q =? Q G H H . unify P P =? Q Q G H I . unify P P Q =? Q G H I . unify P P =? Q G Q S S . unify P P Q =? G Q S S . unify P P =? F R R S S . unify P P F =? R R S S . unify P Q P =? Q R R H . unify P Q P =? Q G G H . unify P Q P =? Q R H R . unify P Q P =? Q G H G . unify P Q P =? Q G S S . unify P Q P =? Q G H H . unify P Q P =? Q G H I . unify P Q P =? G Q S S . unify P F P =? R R S S . unify P Q Q =? R P R H . unify P Q Q =? G P G H . unify P Q Q =? R P H R . unify P Q Q =? G P H G . unify P Q Q =? G P S S . unify P Q Q =? G P H H . unify P Q Q =? G P H I . unify P Q Q =? R R P H . unify P Q Q =? G G P H . unify P Q Q =? R R H P . unify P Q Q =? G G H P . unify E Q Q =? R R S S . unify P Q Q =? R H P R . unify P Q Q =? G H P G . unify P Q Q =? G S P S . unify P Q Q =? G H P H . unify P Q Q =? G H P I . unify P Q Q =? R H R P . unify P Q Q =? G H G P . unify P Q Q =? G S S P . unify P Q Q =? G H H P . unify P Q Q =? G H I P . *** 9 symbol, element variables, PIG-PUG has dead cycle(s), 1 unifier unify P Q R R =? H H Q I I . unify P Q R R =? H H Q I J . unify P Q R R =? H I Q H I . unify P Q R R =? H I Q H J . unify P Q R R =? H I Q I H . unify P Q R R =? H I Q I J . unify P Q R R =? H I Q J H . unify P Q R R =? H I Q J I . unify P Q R R =? H I Q J J . unify P Q R R =? H I Q J K . *** 4 symbol, free constants, PIG-PUG has dead cycle(s), no unifiers unify a Q =? Q c . unify P b =? c P . *** 6 symbol, free constants, PIG-PUG has dead cycle(s), no unifiers unify a a Q =? Q c c . unify a a Q =? Q c S . unify a a Q =? Q R d . unify P P =? Q Q c d . unify P P Q =? Q c d . unify a a Q =? Q c d . unify a a Q =? R Q d . unify P P Q =? c Q d . unify P P =? b R R d . unify P P =? Q c d Q . unify P P b =? R d R . unify P P =? b c S S . unify a Q a =? Q c c . unify a Q a =? Q c S . unify a Q a =? Q R d . unify P Q P =? Q c d . unify a Q a =? Q c d . unify P b P =? R R d . unify a Q a =? R d Q . unify P Q P =? c d Q . unify P b P =? c S S . unify P b b =? c P c . unify P b b =? c P S . unify P b b =? R P d . unify P Q Q =? c P d . unify P b b =? c P d . unify P b b =? c c P . unify P b b =? c S P . unify P b b =? R d P . unify P Q Q =? c d P . unify P b b =? c d P . unify a Q Q =? R d R . unify P b R =? P R d . unify a b R =? a R d . unify P Q c =? P d Q . unify a Q c =? a d Q . unify P Q c =? Q P d . unify a Q c =? Q a d . unify P b c =? b P d . unify a Q c =? Q c a . unify a Q c =? Q c S . unify a Q R =? Q R d . unify P b R =? b R d . unify P Q c =? Q c d . unify a Q c =? Q c d . unify a Q c =? Q S a . unify a Q R =? Q d a . unify P Q c =? Q d P . unify a Q c =? Q d a . unify P b c =? b d P . unify a Q R =? Q d R . unify a Q c =? Q d c . unify a Q c =? Q S S . unify a Q R =? Q d d . unify P Q c =? Q d d . unify a Q c =? Q d d . unify a Q R =? Q d T . unify a Q c =? Q d T . unify P Q c =? Q S e . unify a Q c =? Q S e . unify a Q R =? Q d e . unify P Q c =? Q d e . unify a Q c =? Q d e . unify P b c =? c P b . unify P b c =? c P S . unify P b R =? R P d . unify a b R =? R a d . unify P Q c =? c P d . unify P b c =? c P d . unify a Q R =? R Q d . unify a b R =? R b d . unify P b R =? R d P . unify a b R =? R d a . unify P b c =? c d P . unify a Q R =? R d Q . unify a b R =? R d b . unify P Q c =? c d Q . unify a b R =? R S S . unify a Q R =? R d d . unify P b R =? R d d . unify a b R =? R d d . unify a b R =? R d T . unify a b R =? R S e . unify a Q R =? R d e . unify P b R =? R d e . unify a b R =? R d e . unify a Q c =? S a Q . unify P b c =? S P b . unify P b R =? d P b . unify P Q c =? d P Q . unify P b c =? d P b . unify P b R =? d P R . unify P b c =? d P c . unify P b c =? S P S . unify P b R =? d P d . unify P Q c =? d P d . unify P b c =? d P d . unify P b R =? d P T . unify P b c =? d P T . unify P Q c =? S P e . unify P b c =? S P e . unify P b R =? d P e . unify P Q c =? d P e . unify P b c =? d P e . unify P Q c =? d Q P . unify P b c =? d b P . unify a b R =? S R a . unify P b R =? d R P . unify P b c =? d c P . unify a b R =? S R S . unify P b R =? d R d . unify P b R =? S R e . unify a b R =? S R e . unify P b R =? d R e . unify P b c =? S S P . unify P b R =? d d P . unify P Q c =? d d P . unify P b c =? d d P . unify a Q c =? S S Q . unify P Q c =? d d Q . unify P b c =? d T P . unify P b c =? S e P . unify P b R =? d e P . unify P Q c =? d e P . unify P b c =? d e P . unify P Q c =? S e Q . unify a Q c =? S e Q . unify P Q c =? d e Q . *** 7 symbol, free constants, PIG-PUG has dead cycle(s), no unifiers unify P P =? Q Q R R d . unify P P Q =? Q R R d . unify P P =? Q Q c c d . unify P P Q =? Q c c d . unify P P =? Q Q R d R . unify P P Q =? Q R d R . unify P P =? Q Q c d c . unify P P Q =? Q c d c . unify P P =? Q Q c S S . unify P P Q =? Q c S S . unify P P =? Q Q c d d . unify P P Q =? Q c d d . unify P P =? Q Q c d e . unify P P Q =? Q c d e . unify P P =? Q c Q S S . unify P P Q =? c Q S S . unify P P =? b R R S S . unify P P b =? R R S S . unify P P b =? R R S e . unify P P b =? R S R e . unify P P b =? R S S e . unify P Q P =? Q R R d . unify P Q P =? Q c c d . unify P Q P =? Q R d R . unify P Q P =? Q c d c . unify P Q P =? Q c S S . unify P Q P =? Q c d d . unify P Q P =? Q c d e . unify P Q P =? c Q S S . unify P b P =? R R S S . unify P Q Q =? R P R d . unify P Q Q =? c P c d . unify P Q Q =? R P d R . unify P Q Q =? c P d c . unify P Q Q =? c P S S . unify P Q Q =? c P d d . unify P Q Q =? c P d e . unify P Q Q =? R R P d . unify P Q Q =? c c P d . unify P Q Q =? R R d P . unify P Q Q =? c c d P . unify a Q Q =? R R S S . unify P Q Q =? R d P R . unify P Q Q =? c d P c . unify P Q Q =? c S P S . unify P Q Q =? c d P d . unify P Q Q =? c d P e . unify P Q Q =? R d R P . unify P Q Q =? c d c P . unify P Q Q =? c S S P . unify P Q Q =? c d d P . unify P Q Q =? c d e P . unify P b R =? b R d d . unify P Q c =? Q c d d . unify P Q c =? Q c S e . unify P b R =? b R d e . unify P Q c =? Q c d e . unify a Q R =? Q d a d . unify a Q R =? Q d a T . unify a Q R =? Q d a e . unify P b R =? b d R d . unify P Q c =? Q d c d . unify P b R =? b S R e . unify P Q c =? Q S c e . unify P b R =? b d R e . unify P Q c =? Q d c e . unify a Q R =? Q d d a . unify a Q R =? Q d d T . unify P Q c =? Q S S e . unify a Q R =? Q d d e . unify P Q c =? Q d d e . unify a Q R =? Q d T a . unify a Q R =? Q d e a . unify a Q R =? Q d T d . unify P Q c =? Q d T d . unify a Q R =? Q d e d . unify P Q c =? Q d e d . unify a Q R =? Q d T T . unify P Q c =? Q S e e . unify a Q R =? Q d e e . unify P Q c =? Q d e e . unify a Q R =? Q d T U . unify a Q R =? Q d e U . unify P Q c =? Q S T f . unify a Q R =? Q d T f . unify P Q c =? Q d T f . unify P Q c =? Q S e f . unify a Q R =? Q d e f . unify P Q c =? Q d e f . unify P Q c =? c P d d . unify P Q c =? c P S e . unify P Q c =? c P d e . unify P Q c =? c Q d d . unify P Q c =? c Q S e . unify P Q c =? c Q d e . unify P Q c =? c d P d . unify P Q c =? c S P e . unify P Q c =? c d P e . unify P Q c =? c d d Q . unify a Q R =? R d d e . unify P b R =? R d d e . unify P Q c =? c S e Q . unify P Q c =? c d e Q . unify a Q R =? R d e d . unify P b R =? R d e d . unify a Q R =? R d e e . unify P b R =? R d e e . unify a Q R =? R d e f . unify P b R =? R d e f . unify P b R =? d P b d . unify P b R =? d P b T . unify P b R =? d P b e . unify P Q c =? d P c d . unify P Q c =? S P c e . unify P Q c =? d P c e . unify P b R =? d P d b . unify P b R =? d P d T . unify P Q c =? S P S e . unify P b R =? d P d e . unify P Q c =? d P d e . unify P b R =? d P T b . unify P b R =? d P e b . unify P b R =? d P T d . unify P Q c =? d P T d . unify P b R =? d P e d . unify P Q c =? d P e d . unify P b R =? d P T T . unify P Q c =? S P e e . unify P b R =? d P e e . unify P Q c =? d P e e . unify P b R =? d P T U . unify P b R =? d P e U . unify P Q c =? S P T f . unify P b R =? d P T f . unify P Q c =? d P T f . unify P Q c =? S P e f . unify P b R =? d P e f . unify P Q c =? d P e f . unify P b R =? d b R d . unify P Q c =? d Q c d . unify P b R =? S b R e . unify P Q c =? S Q c e . unify P b R =? d b R e . unify P Q c =? d Q c e . unify P Q c =? S Q S e . unify P Q c =? d Q d e . unify P Q c =? d Q T d . unify P Q c =? d Q e d . unify P Q c =? S Q e e . unify P Q c =? d Q e e . unify P Q c =? S Q T f . unify P Q c =? d Q T f . unify P Q c =? S Q e f . unify P Q c =? d Q e f . unify P Q c =? d c P d . unify P Q c =? S c P e . unify P Q c =? d c P e . unify P Q c =? d c d Q . unify P b R =? d R d e . unify P Q c =? S c e Q . unify P Q c =? d c e Q . unify P b R =? d R e d . unify P b R =? S R e e . unify P b R =? d R e e . unify P b R =? S R e f . unify P b R =? d R e f . unify P b R =? d d P b . unify P b R =? d d P T . unify P Q c =? S S P e . unify P b R =? d d P e . unify P Q c =? d d P e . unify P b R =? S S R e . unify P b R =? d d R e . unify P b R =? d d e P . unify P Q c =? d d e P . unify P Q c =? S S e Q . unify P Q c =? d d e Q . unify P b R =? d e P b . unify P Q c =? d T P d . unify P b R =? d e P d . unify P Q c =? d e P d . unify P Q c =? S e P e . unify P b R =? d e P e . unify P Q c =? d e P e . unify P b R =? d e P U . unify P Q c =? S T P f . unify P Q c =? d T P f . unify P Q c =? S e P f . unify P b R =? d e P f . unify P Q c =? d e P f . unify P b R =? d T R d . unify P b R =? d e R d . unify P b R =? S e R e . unify P b R =? d e R e . unify P b R =? S T R f . unify P b R =? d T R f . unify P b R =? S e R f . unify P b R =? d e R f . unify P b R =? d e d P . unify P Q c =? d e d P . unify P Q c =? d T d Q . unify P Q c =? d e d Q . unify P b R =? d e e P . unify P Q c =? d e e P . unify P Q c =? S e e Q . unify P Q c =? d e e Q . unify P b R =? d e f P . unify P Q c =? d e f P . unify P Q c =? S T f Q . unify P Q c =? d T f Q . unify P Q c =? S e f Q . unify P Q c =? d e f Q . *** 9 symbol, free constants, PIG-PUG has dead cycle(s), 1 unifier unify P Q R R =? d d Q e e . unify P Q R R =? d e Q f f . unify P b R S =? e b R e f . unify P Q c S =? e Q c e f . unify P b R S =? e b R f e . unify P Q c S =? e Q c f e . unify P b R S =? e b R f f . unify P Q c S =? e Q c f f . unify P b R S =? e b R f g . unify P Q c S =? e Q c f g . unify P Q c S =? e e Q c f . unify P Q c S =? e f Q c e . unify P Q c S =? e f Q c f . unify P Q c S =? e f Q c g . *** no cycle examples *** no unifiers unify X X =? Y a Y . unify X X =? E Y a b Y E . *** 1 unifier unify X X =? Y Y . unify X X =? Y a Y a . unify X X =? E Y F E Y F . unify X X =? E Y a b Y F . unify X X =? E Y F b Y E . unify X X =? E Y b b Y E . *** incomplete unify X Y =? Y X . unify X Y X =? Z Z . unify X X =? Y a a Y . *** other interesting cases *** infinite set of mgus X |-> W^n, Y |-> W^m where n, m are relatively prime unify X Y =? Y X . *** single mgu X |-> W W W W, Y |-> W W W unify X X X =? Y Y Y Y . *** simultaneous combination of both unify X Y =? Y X /\ X X X =? Y Y Y Y . unify X X X =? Y Y Y Y /\ X Y =? Y X . *** bounded depth unify X X =? Y Y Y . unify X Y X =? Y X Y . unify X X X =? Y Y Y Y . unify X Y X =? Y Y Y Y . maude-3.1/tests/Misc/bubble0000755000175200017520000000032413252621607012616 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/bubble.maude -no-banner -no-advise \ > bubble.out 2>&1 diff $srcdir/bubble.expected bubble.out > /dev/null 2>&1 maude-3.1/tests/Misc/parse.maude0000644000175200017520000000271213252625247013573 00000000000000*** Colliding Deterministic Reduction Paths for Leo's algorithm set print mixfix off . fmod COLLIDING-DRPs is sorts A B C D . op a_ : B -> A . op b_ : C -> B . op c_ : D -> C . op d e : -> D . op c d e : -> C . endfm *** ambiguous parse a b c d e . fmod COLLIDING-DRPs2 is sorts A B C D . op a_ : B -> A . op b_ : C -> B . op c d e : -> C . op c _ e : D -> C . op d : -> D . endfm *** ambiguous parse a b c d e . fmod SUB-DRP is sorts A B C D E F G . op a_ : B -> A [prec 10 gather (E)] . op b_ : C -> B [prec 10 gather (E)] . op c_ : D -> C [prec 10 gather (E)] . *** t2 op d e : -> D [prec 10] . *** t1 op _e : E -> D [prec 1 gather (E)] . *** r2 op d : -> E . op __ : G D -> F [prec 1 gather (E E)] . *** u2 op c : -> G . op a b_ : F -> A [prec 10 gather (E)] . endfm *** ambiguous - need to avoid generating the same parse twice parse a b c d e . fmod SUB-DRP2 is sorts A B C D E F G H . op a_ : B -> A [prec 10 gather (E)] . op b_ : C -> B [prec 10 gather (E)] . op c_ : D -> C [prec 10 gather (E)] . *** t2 op d_ : H -> D [prec 10] . *** now above t1 op e : -> H . *** new t1 op _e : E -> D [prec 1 gather (E)] . *** r2 op d : -> E . op __ : G D -> F [prec 1 gather (E E)] . *** u2 op c : -> G . op a b_ : F -> A [prec 10 gather (E)] . endfm *** ambiguous - need to avoid generating the same parse twice parse a b c d e . maude-3.1/tests/Misc/parameterization.expected0000644000175200017520000073567713522536500016565 00000000000000fmod BAZ is sorts Bool Zero NzNat Nat NzInt Int PosRat NzRat Rat Foo{Rat,Nat} . subsorts Zero NzNat NzNat < Nat . subsort NzNat < NzInt . subsorts NzInt Nat NzInt < Int . subsort NzNat < PosRat . subsorts NzInt PosRat < NzRat . subsorts NzRat Int < Rat . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op 0 : -> Zero [ctor] . op s_ : Nat -> NzNat [ctor iter prec 15 gather (E) special ( id-hook SuccSymbol term-hook zeroTerm (0))] . op _+_ : NzNat Nat -> NzNat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Nat Nat -> Nat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Int Int -> Int [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : PosRat PosRat -> PosRat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : PosRat Nat -> PosRat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Rat Rat -> Rat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op sd : Nat Nat -> Nat [comm special ( id-hook CUI_NumberOpSymbol (sd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : NzNat NzNat -> NzNat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Nat Nat -> Nat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : NzInt NzInt -> NzInt [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Int Int -> Int [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : PosRat PosRat -> PosRat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : NzRat NzRat -> NzRat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Rat Rat -> Rat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Int NzInt -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : PosRat PosRat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Rat NzRat -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Int NzInt -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Rat NzRat -> Rat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Nat Nat -> Nat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzNat Nat -> NzNat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Int Nat -> Int [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzInt Nat -> NzInt [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : PosRat Nat -> PosRat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzRat Nat -> NzRat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Rat Nat -> Rat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op modExp : [Rat] [Rat] [Rat] -> [Rat] [special ( id-hook NumberOpSymbol (modExp) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : NzInt Int -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Int Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : NzRat Rat -> PosRat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Rat Rat -> Rat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzInt NzInt -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Int Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzRat NzRat -> PosRat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Rat Rat -> Rat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzInt NzInt -> NzInt [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Int Int -> Int [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : PosRat PosRat -> PosRat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzRat NzRat -> NzRat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Rat Rat -> Rat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzInt NzInt -> NzInt [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Int Int -> Int [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzNat Int -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Nat Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : PosRat Rat -> PosRat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzRat NzRat -> NzRat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Rat Rat -> Rat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _xor_ : Nat Nat -> Nat [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _xor_ : Int Int -> Int [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Nat Nat -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Nat Int -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Int Int -> Int [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : NzNat Nat -> NzNat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : Nat Nat -> Nat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : NzInt Int -> NzInt [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : Int Int -> Int [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _>>_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _>>_ : Int Nat -> Int [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<<_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<<_ : Int Nat -> Int [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<_ : Rat Rat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Rat Rat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Rat Rat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Rat Rat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzNat Nat -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzInt Int -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzRat Rat -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op -_ : NzNat -> NzInt [ctor prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : NzInt -> NzInt [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : Int -> Int [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : NzRat -> NzRat [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : Rat -> Rat [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _-_ : Int Int -> Int [prec 33 gather (E e) special ( id-hook NumberOpSymbol (-) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _-_ : Rat Rat -> Rat [prec 33 gather (E e) special ( id-hook NumberOpSymbol (-) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : NzInt -> NzNat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : Int -> Nat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : NzRat -> PosRat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : Rat -> Rat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op ~_ : Int -> Int [prec 15 gather (E) special ( id-hook NumberOpSymbol (~) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _/_ : NzInt NzNat -> NzRat [ctor prec 31 gather (E e) special ( id-hook DivisionSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _/_ : NzNat NzNat -> PosRat [ctor prec 31 gather (E e) special ( id-hook DivisionSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _/_ : PosRat PosRat -> PosRat [prec 31 gather (E e) special ( id-hook DivisionSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _/_ : NzRat NzRat -> NzRat [prec 31 gather (E e) special ( id-hook DivisionSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _/_ : Rat NzRat -> Rat [prec 31 gather (E e) special ( id-hook DivisionSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op trunc : PosRat -> Nat . op trunc : Rat -> Int . op frac : Rat -> Rat . op floor : PosRat -> Nat . op floor : Rat -> Int . op ceiling : PosRat -> NzNat . op ceiling : Rat -> Int . op g : Bool -> Bool . eq true and A:Bool = A:Bool . eq false and A:Bool = false . eq A:Bool and A:Bool = A:Bool . eq false xor A:Bool = A:Bool . eq A:Bool xor A:Bool = false . eq A:Bool and (B:Bool xor C:Bool) = A:Bool and B:Bool xor A:Bool and C:Bool . eq not A:Bool = true xor A:Bool . eq A:Bool or B:Bool = A:Bool and B:Bool xor A:Bool xor B:Bool . eq A:Bool implies B:Bool = not (A:Bool xor A:Bool and B:Bool) . eq 0 / Q:NzRat = 0 . eq I:NzInt / - N:NzNat = - I:NzInt / N:NzNat . eq I:NzInt / N:NzNat / (J:NzInt / M:NzNat) = (I:NzInt * M:NzNat) / (J:NzInt * N:NzNat) . eq I:NzInt / N:NzNat / J:NzInt = I:NzInt / (J:NzInt * N:NzNat) . eq I:NzInt / (J:NzInt / M:NzNat) = (I:NzInt * M:NzNat) / J:NzInt . eq - (I:NzInt / N:NzNat) = - I:NzInt / N:NzNat . eq I:NzInt / N:NzNat + J:NzInt / M:NzNat = (I:NzInt * M:NzNat + J:NzInt * N:NzNat) / (N:NzNat * M:NzNat) . eq K:Int + I:NzInt / N:NzNat = (I:NzInt + N:NzNat * K:Int) / N:NzNat . eq I:NzInt / N:NzNat - J:NzInt / M:NzNat = (I:NzInt * M:NzNat - J:NzInt * N:NzNat) / (N:NzNat * M:NzNat) . eq I:NzInt / N:NzNat - K:Int = (I:NzInt - N:NzNat * K:Int) / N:NzNat . eq K:Int - J:NzInt / M:NzNat = (M:NzNat * K:Int - J:NzInt) / M:NzNat . eq 0 * Q:NzRat = 0 . eq (I:NzInt / N:NzNat) * (J:NzInt / M:NzNat) = (I:NzInt * J:NzInt) / (N:NzNat * M:NzNat) . eq K:Int * (I:NzInt / N:NzNat) = (I:NzInt * K:Int) / N:NzNat . eq I:NzInt / N:NzNat quo Q:NzRat = I:NzInt quo (Q:NzRat * N:NzNat) . eq K:Int quo (J:NzInt / M:NzNat) = (M:NzNat * K:Int) quo J:NzInt . eq I:NzInt / N:NzNat rem (J:NzInt / M:NzNat) = (I:NzInt * M:NzNat) rem ( J:NzInt * N:NzNat) / (N:NzNat * M:NzNat) . eq K:Int rem (J:NzInt / M:NzNat) = (M:NzNat * K:Int) rem J:NzInt / M:NzNat . eq I:NzInt / N:NzNat rem J:NzInt = I:NzInt rem (J:NzInt * N:NzNat) / N:NzNat . eq (I:NzInt / N:NzNat) ^ Z:Nat = I:NzInt ^ Z:Nat / N:NzNat ^ Z:Nat . eq abs(I:NzInt / N:NzNat) = abs(I:NzInt) / N:NzNat . eq gcd(R:Rat, I:NzInt / N:NzNat) = gcd(I:NzInt, N:NzNat * R:Rat) / N:NzNat . eq lcm(R:Rat, I:NzInt / N:NzNat) = lcm(I:NzInt, N:NzNat * R:Rat) / N:NzNat . eq min(R:Rat, I:NzInt / N:NzNat) = min(I:NzInt, N:NzNat * R:Rat) / N:NzNat . eq max(R:Rat, I:NzInt / N:NzNat) = max(I:NzInt, N:NzNat * R:Rat) / N:NzNat . eq I:NzInt / N:NzNat < J:NzInt / M:NzNat = I:NzInt * M:NzNat < J:NzInt * N:NzNat . eq I:NzInt / N:NzNat < K:Int = I:NzInt < N:NzNat * K:Int . eq K:Int < J:NzInt / M:NzNat = M:NzNat * K:Int < J:NzInt . eq I:NzInt / N:NzNat <= J:NzInt / M:NzNat = I:NzInt * M:NzNat <= J:NzInt * N:NzNat . eq I:NzInt / N:NzNat <= K:Int = I:NzInt <= N:NzNat * K:Int . eq K:Int <= J:NzInt / M:NzNat = M:NzNat * K:Int <= J:NzInt . eq I:NzInt / N:NzNat > J:NzInt / M:NzNat = I:NzInt * M:NzNat > J:NzInt * N:NzNat . eq I:NzInt / N:NzNat > K:Int = I:NzInt > N:NzNat * K:Int . eq K:Int > J:NzInt / M:NzNat = M:NzNat * K:Int > J:NzInt . eq I:NzInt / N:NzNat >= J:NzInt / M:NzNat = I:NzInt * M:NzNat >= J:NzInt * N:NzNat . eq I:NzInt / N:NzNat >= K:Int = I:NzInt >= N:NzNat * K:Int . eq K:Int >= J:NzInt / M:NzNat = M:NzNat * K:Int >= J:NzInt . eq I:NzInt / N:NzNat divides K:Int = I:NzInt divides N:NzNat * K:Int . eq Q:NzRat divides J:NzInt / M:NzNat = Q:NzRat * M:NzNat divides J:NzInt . eq trunc(K:Int) = K:Int . eq trunc(I:NzInt / N:NzNat) = I:NzInt quo N:NzNat . eq frac(K:Int) = 0 . eq frac(I:NzInt / N:NzNat) = I:NzInt rem N:NzNat / N:NzNat . eq floor(K:Int) = K:Int . eq ceiling(K:Int) = K:Int . eq floor(N:NzNat / M:NzNat) = N:NzNat quo M:NzNat . eq ceiling(N:NzNat / M:NzNat) = ((N:NzNat + M:NzNat) - 1) quo M:NzNat . eq floor(- N:NzNat / M:NzNat) = - ceiling(N:NzNat / M:NzNat) . eq ceiling(- N:NzNat / M:NzNat) = - floor(N:NzNat / M:NzNat) . endfm fmod BOOL fmod TRUTH-VALUE fmod BOOL-OPS fmod TRUTH fmod EXT-BOOL fmod NAT fmod INT fmod RAT fmod FLOAT fmod STRING fmod CONVERSION fmod RANDOM fmod BOUND fmod QID fth TRIV fth STRICT-WEAK-ORDER fth STRICT-TOTAL-ORDER fth TOTAL-PREORDER fth TOTAL-ORDER fth DEFAULT fmod LIST fmod WEAKLY-SORTABLE-LIST fmod SORTABLE-LIST fmod WEAKLY-SORTABLE-LIST' fmod SORTABLE-LIST' fmod SET fmod LIST-AND-SET fmod SORTABLE-LIST-AND-SET fmod SORTABLE-LIST-AND-SET' fmod LIST* fmod SET* fmod MAP fmod ARRAY fmod NAT-LIST fmod QID-LIST fmod QID-SET fmod META-TERM fmod META-CONDITION fmod META-STRATEGY fmod META-MODULE fmod META-VIEW fmod META-LEVEL fmod LEXICAL mod COUNTER mod LOOP-MODE mod CONFIGURATION fmod FOO fmod BAR fmod BAZ fth X :: TRIV fmod LIST{[X]} fth X :: STRICT-WEAK-ORDER fmod LIST{STRICT-WEAK-ORDER} fmod LIST{STRICT-WEAK-ORDER}{[X]} fmod LIST{STRICT-WEAK-ORDER}{[X]} * (sort NeList{STRICT-WEAK-ORDER}{X} to NeList{X}, sort List{STRICT-WEAK-ORDER}{X} to List{X}) fmod WEAKLY-SORTABLE-LIST{[X]} fth X :: STRICT-TOTAL-ORDER fmod WEAKLY-SORTABLE-LIST{STRICT-TOTAL-ORDER} fmod LIST{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER} fmod LIST{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} fmod LIST{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeList{STRICT-TOTAL-ORDER}{X}, sort List{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to List{ STRICT-TOTAL-ORDER}{X}) fmod WEAKLY-SORTABLE-LIST{STRICT-TOTAL-ORDER}{[X]} fmod WEAKLY-SORTABLE-LIST{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-TOTAL-ORDER}{X} to NeList{X}, sort List{STRICT-TOTAL-ORDER}{X} to List{X}) fmod LIST{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeList{STRICT-TOTAL-ORDER}{X}, sort List{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to List{ STRICT-TOTAL-ORDER}{X}) * (sort NeList{STRICT-TOTAL-ORDER}{X} to NeList{X}, sort List{STRICT-TOTAL-ORDER}{X} to List{X}) fmod SORTABLE-LIST{[X]} fth X :: TOTAL-PREORDER fmod LIST{TOTAL-PREORDER} fmod LIST{TOTAL-PREORDER}{[X]} fmod LIST{TOTAL-PREORDER}{[X]} * (sort NeList{TOTAL-PREORDER}{X} to NeList{X}, sort List{TOTAL-PREORDER}{X} to List{X}) fmod WEAKLY-SORTABLE-LIST'{[X]} fth X :: TOTAL-ORDER fmod WEAKLY-SORTABLE-LIST'{TOTAL-ORDER} fmod LIST{TOTAL-PREORDER}{TOTAL-ORDER} fmod LIST{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} fmod LIST{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeList{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to NeList{TOTAL-ORDER}{X}, sort List{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to List{TOTAL-ORDER}{X}) fmod WEAKLY-SORTABLE-LIST'{TOTAL-ORDER}{[X]} fmod WEAKLY-SORTABLE-LIST'{TOTAL-ORDER}{[X]} * (sort NeList{TOTAL-ORDER}{X} to NeList{X}, sort List{TOTAL-ORDER}{X} to List{X}) fmod LIST{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeList{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to NeList{TOTAL-ORDER}{X}, sort List{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to List{TOTAL-ORDER}{X}) * (sort NeList{TOTAL-ORDER}{X} to NeList{X}, sort List{TOTAL-ORDER}{X} to List{X}) fmod SORTABLE-LIST'{[X]} fmod SET{[X]} fmod LIST-AND-SET{STRICT-WEAK-ORDER} fmod SET{STRICT-WEAK-ORDER} fmod SET{STRICT-WEAK-ORDER}{[X]} fmod LIST-AND-SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER} fmod SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER} fmod SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} fmod LIST-AND-SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} fmod LIST-AND-SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeList{STRICT-TOTAL-ORDER}{X}, sort List{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to List{ STRICT-TOTAL-ORDER}{X}) fmod LIST-AND-SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeList{STRICT-TOTAL-ORDER}{X}, sort List{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to List{ STRICT-TOTAL-ORDER}{X}) * (sort NeList{STRICT-TOTAL-ORDER}{X} to NeList{X}, sort List{STRICT-TOTAL-ORDER}{X} to List{X}, sort NeSet{STRICT-WEAK-ORDER}{ STRICT-TOTAL-ORDER}{X} to NeSet{X}, sort Set{STRICT-WEAK-ORDER}{ STRICT-TOTAL-ORDER}{X} to Set{X}) fmod SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeSet{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeSet{X}, sort Set{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to Set{X}) fmod LIST-AND-SET{TOTAL-PREORDER} fmod SET{TOTAL-PREORDER} fmod SET{TOTAL-PREORDER}{[X]} fmod LIST-AND-SET{TOTAL-PREORDER}{TOTAL-ORDER} fmod SET{TOTAL-PREORDER}{TOTAL-ORDER} fmod SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} fmod LIST-AND-SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} fmod LIST-AND-SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeList{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to NeList{TOTAL-ORDER}{X}, sort List{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to List{TOTAL-ORDER}{X}) fmod LIST-AND-SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeList{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to NeList{TOTAL-ORDER}{X}, sort List{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to List{TOTAL-ORDER}{X}) * (sort NeList{ TOTAL-ORDER}{X} to NeList{X}, sort List{TOTAL-ORDER}{X} to List{X}, sort NeSet{TOTAL-PREORDER}{TOTAL-ORDER}{X} to NeSet{X}, sort Set{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to Set{X}) fmod SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeSet{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to NeSet{X}, sort Set{TOTAL-PREORDER}{TOTAL-ORDER}{X} to Set{X}) fmod LIST*{[X]} fmod SET*{[X]} fth Y :: TRIV fmod MAP{[X], [Y]} fth Y :: DEFAULT fmod ARRAY{[X], [Y]} fmod LIST{Nat} fmod LIST{Nat} * (sort NeList{Nat} to NeNatList, sort List{Nat} to NatList) fmod LIST{Qid} fmod LIST{Qid} * (sort NeList{Qid} to NeQidList, sort List{Qid} to QidList) fmod SET{Qid} fmod SET{Qid} * (sort NeSet{Qid} to NeQidSet, sort Set{Qid} to QidSet) fmod QID-SET * (op _`,_ to _;_ [prec 43], op empty to none) fmod SET{Qid} * (sort NeSet{Qid} to NeQidSet, sort Set{Qid} to QidSet) * (op _`,_ to _;_ [prec 43], op empty to none) fth Z :: TRIV fmod FOO{[Z], Nat} fmod BAR * (op f : [Bool] -> [Bool] to g) fmod FOO{[Z], Nat} * (op f : [Bool] -> [Bool] to g) fmod (BAR * (op f : [Bool] -> [Bool] to g)){Rat} fmod FOO{Rat, Nat} fmod FOO{Rat, Nat} * (op f : [Bool] -> [Bool] to g) fmod BAZ is sorts Bool Zero NzNat Nat NzInt Int PosRat NzRat Rat Bar{Nat,Rat} . subsorts Zero NzNat NzNat < Nat . subsort NzNat < NzInt . subsorts NzInt Nat NzInt < Int . subsort NzNat < PosRat . subsorts NzInt PosRat < NzRat . subsorts NzRat Int < Rat . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op 0 : -> Zero [ctor] . op s_ : Nat -> NzNat [ctor iter prec 15 gather (E) special ( id-hook SuccSymbol term-hook zeroTerm (0))] . op _+_ : NzNat Nat -> NzNat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Nat Nat -> Nat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Int Int -> Int [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : PosRat PosRat -> PosRat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : PosRat Nat -> PosRat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Rat Rat -> Rat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op sd : Nat Nat -> Nat [comm special ( id-hook CUI_NumberOpSymbol (sd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : NzNat NzNat -> NzNat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Nat Nat -> Nat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : NzInt NzInt -> NzInt [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Int Int -> Int [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : PosRat PosRat -> PosRat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : NzRat NzRat -> NzRat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Rat Rat -> Rat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Int NzInt -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : PosRat PosRat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Rat NzRat -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Int NzInt -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Rat NzRat -> Rat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Nat Nat -> Nat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzNat Nat -> NzNat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Int Nat -> Int [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzInt Nat -> NzInt [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : PosRat Nat -> PosRat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzRat Nat -> NzRat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Rat Nat -> Rat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op modExp : [Rat] [Rat] [Rat] -> [Rat] [special ( id-hook NumberOpSymbol (modExp) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : NzInt Int -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Int Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : NzRat Rat -> PosRat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Rat Rat -> Rat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzInt NzInt -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Int Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzRat NzRat -> PosRat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Rat Rat -> Rat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzInt NzInt -> NzInt [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Int Int -> Int [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : PosRat PosRat -> PosRat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzRat NzRat -> NzRat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Rat Rat -> Rat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzInt NzInt -> NzInt [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Int Int -> Int [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzNat Int -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Nat Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : PosRat Rat -> PosRat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzRat NzRat -> NzRat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Rat Rat -> Rat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _xor_ : Nat Nat -> Nat [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _xor_ : Int Int -> Int [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Nat Nat -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Nat Int -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Int Int -> Int [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : NzNat Nat -> NzNat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : Nat Nat -> Nat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : NzInt Int -> NzInt [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : Int Int -> Int [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _>>_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _>>_ : Int Nat -> Int [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<<_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<<_ : Int Nat -> Int [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<_ : Rat Rat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Rat Rat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Rat Rat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Rat Rat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzNat Nat -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzInt Int -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzRat Rat -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op -_ : NzNat -> NzInt [ctor prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : NzInt -> NzInt [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : Int -> Int [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : NzRat -> NzRat [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : Rat -> Rat [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _-_ : Int Int -> Int [prec 33 gather (E e) special ( id-hook NumberOpSymbol (-) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _-_ : Rat Rat -> Rat [prec 33 gather (E e) special ( id-hook NumberOpSymbol (-) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : NzInt -> NzNat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : Int -> Nat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : NzRat -> PosRat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : Rat -> Rat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op ~_ : Int -> Int [prec 15 gather (E) special ( id-hook NumberOpSymbol (~) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _/_ : NzInt NzNat -> NzRat [ctor prec 31 gather (E e) special ( id-hook DivisionSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _/_ : NzNat NzNat -> PosRat [ctor prec 31 gather (E e) special ( id-hook DivisionSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _/_ : PosRat PosRat -> PosRat [prec 31 gather (E e) special ( id-hook DivisionSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _/_ : NzRat NzRat -> NzRat [prec 31 gather (E e) special ( id-hook DivisionSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _/_ : Rat NzRat -> Rat [prec 31 gather (E e) special ( id-hook DivisionSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op trunc : PosRat -> Nat . op trunc : Rat -> Int . op frac : Rat -> Rat . op floor : PosRat -> Nat . op floor : Rat -> Int . op ceiling : PosRat -> NzNat . op ceiling : Rat -> Int . op g : Bar{Nat,Rat} -> Bar{Nat,Rat} . eq true and A:Bool = A:Bool . eq false and A:Bool = false . eq A:Bool and A:Bool = A:Bool . eq false xor A:Bool = A:Bool . eq A:Bool xor A:Bool = false . eq A:Bool and (B:Bool xor C:Bool) = A:Bool and B:Bool xor A:Bool and C:Bool . eq not A:Bool = true xor A:Bool . eq A:Bool or B:Bool = A:Bool and B:Bool xor A:Bool xor B:Bool . eq A:Bool implies B:Bool = not (A:Bool xor A:Bool and B:Bool) . eq 0 / Q:NzRat = 0 . eq I:NzInt / - N:NzNat = - I:NzInt / N:NzNat . eq I:NzInt / N:NzNat / (J:NzInt / M:NzNat) = (I:NzInt * M:NzNat) / (J:NzInt * N:NzNat) . eq I:NzInt / N:NzNat / J:NzInt = I:NzInt / (J:NzInt * N:NzNat) . eq I:NzInt / (J:NzInt / M:NzNat) = (I:NzInt * M:NzNat) / J:NzInt . eq - (I:NzInt / N:NzNat) = - I:NzInt / N:NzNat . eq I:NzInt / N:NzNat + J:NzInt / M:NzNat = (I:NzInt * M:NzNat + J:NzInt * N:NzNat) / (N:NzNat * M:NzNat) . eq K:Int + I:NzInt / N:NzNat = (I:NzInt + N:NzNat * K:Int) / N:NzNat . eq I:NzInt / N:NzNat - J:NzInt / M:NzNat = (I:NzInt * M:NzNat - J:NzInt * N:NzNat) / (N:NzNat * M:NzNat) . eq I:NzInt / N:NzNat - K:Int = (I:NzInt - N:NzNat * K:Int) / N:NzNat . eq K:Int - J:NzInt / M:NzNat = (M:NzNat * K:Int - J:NzInt) / M:NzNat . eq 0 * Q:NzRat = 0 . eq (I:NzInt / N:NzNat) * (J:NzInt / M:NzNat) = (I:NzInt * J:NzInt) / (N:NzNat * M:NzNat) . eq K:Int * (I:NzInt / N:NzNat) = (I:NzInt * K:Int) / N:NzNat . eq I:NzInt / N:NzNat quo Q:NzRat = I:NzInt quo (Q:NzRat * N:NzNat) . eq K:Int quo (J:NzInt / M:NzNat) = (M:NzNat * K:Int) quo J:NzInt . eq I:NzInt / N:NzNat rem (J:NzInt / M:NzNat) = (I:NzInt * M:NzNat) rem ( J:NzInt * N:NzNat) / (N:NzNat * M:NzNat) . eq K:Int rem (J:NzInt / M:NzNat) = (M:NzNat * K:Int) rem J:NzInt / M:NzNat . eq I:NzInt / N:NzNat rem J:NzInt = I:NzInt rem (J:NzInt * N:NzNat) / N:NzNat . eq (I:NzInt / N:NzNat) ^ Z:Nat = I:NzInt ^ Z:Nat / N:NzNat ^ Z:Nat . eq abs(I:NzInt / N:NzNat) = abs(I:NzInt) / N:NzNat . eq gcd(R:Rat, I:NzInt / N:NzNat) = gcd(I:NzInt, N:NzNat * R:Rat) / N:NzNat . eq lcm(R:Rat, I:NzInt / N:NzNat) = lcm(I:NzInt, N:NzNat * R:Rat) / N:NzNat . eq min(R:Rat, I:NzInt / N:NzNat) = min(I:NzInt, N:NzNat * R:Rat) / N:NzNat . eq max(R:Rat, I:NzInt / N:NzNat) = max(I:NzInt, N:NzNat * R:Rat) / N:NzNat . eq I:NzInt / N:NzNat < J:NzInt / M:NzNat = I:NzInt * M:NzNat < J:NzInt * N:NzNat . eq I:NzInt / N:NzNat < K:Int = I:NzInt < N:NzNat * K:Int . eq K:Int < J:NzInt / M:NzNat = M:NzNat * K:Int < J:NzInt . eq I:NzInt / N:NzNat <= J:NzInt / M:NzNat = I:NzInt * M:NzNat <= J:NzInt * N:NzNat . eq I:NzInt / N:NzNat <= K:Int = I:NzInt <= N:NzNat * K:Int . eq K:Int <= J:NzInt / M:NzNat = M:NzNat * K:Int <= J:NzInt . eq I:NzInt / N:NzNat > J:NzInt / M:NzNat = I:NzInt * M:NzNat > J:NzInt * N:NzNat . eq I:NzInt / N:NzNat > K:Int = I:NzInt > N:NzNat * K:Int . eq K:Int > J:NzInt / M:NzNat = M:NzNat * K:Int > J:NzInt . eq I:NzInt / N:NzNat >= J:NzInt / M:NzNat = I:NzInt * M:NzNat >= J:NzInt * N:NzNat . eq I:NzInt / N:NzNat >= K:Int = I:NzInt >= N:NzNat * K:Int . eq K:Int >= J:NzInt / M:NzNat = M:NzNat * K:Int >= J:NzInt . eq I:NzInt / N:NzNat divides K:Int = I:NzInt divides N:NzNat * K:Int . eq Q:NzRat divides J:NzInt / M:NzNat = Q:NzRat * M:NzNat divides J:NzInt . eq trunc(K:Int) = K:Int . eq trunc(I:NzInt / N:NzNat) = I:NzInt quo N:NzNat . eq frac(K:Int) = 0 . eq frac(I:NzInt / N:NzNat) = I:NzInt rem N:NzNat / N:NzNat . eq floor(K:Int) = K:Int . eq ceiling(K:Int) = K:Int . eq floor(N:NzNat / M:NzNat) = N:NzNat quo M:NzNat . eq ceiling(N:NzNat / M:NzNat) = ((N:NzNat + M:NzNat) - 1) quo M:NzNat . eq floor(- N:NzNat / M:NzNat) = - ceiling(N:NzNat / M:NzNat) . eq ceiling(- N:NzNat / M:NzNat) = - floor(N:NzNat / M:NzNat) . endfm fmod BOOL fmod TRUTH-VALUE fmod BOOL-OPS fmod TRUTH fmod EXT-BOOL fmod NAT fmod INT fmod RAT fmod FLOAT fmod STRING fmod CONVERSION fmod RANDOM fmod BOUND fmod QID fth TRIV fth STRICT-WEAK-ORDER fth STRICT-TOTAL-ORDER fth TOTAL-PREORDER fth TOTAL-ORDER fth DEFAULT fmod LIST fmod WEAKLY-SORTABLE-LIST fmod SORTABLE-LIST fmod WEAKLY-SORTABLE-LIST' fmod SORTABLE-LIST' fmod SET fmod LIST-AND-SET fmod SORTABLE-LIST-AND-SET fmod SORTABLE-LIST-AND-SET' fmod LIST* fmod SET* fmod MAP fmod ARRAY fmod NAT-LIST fmod QID-LIST fmod QID-SET fmod META-TERM fmod META-CONDITION fmod META-STRATEGY fmod META-MODULE fmod META-VIEW fmod META-LEVEL fmod LEXICAL mod COUNTER mod LOOP-MODE mod CONFIGURATION fmod FOO fmod BAR fmod BAZ fth X :: TRIV fmod LIST{[X]} fth X :: STRICT-WEAK-ORDER fmod LIST{STRICT-WEAK-ORDER} fmod LIST{STRICT-WEAK-ORDER}{[X]} fmod LIST{STRICT-WEAK-ORDER}{[X]} * (sort NeList{STRICT-WEAK-ORDER}{X} to NeList{X}, sort List{STRICT-WEAK-ORDER}{X} to List{X}) fmod WEAKLY-SORTABLE-LIST{[X]} fth X :: STRICT-TOTAL-ORDER fmod WEAKLY-SORTABLE-LIST{STRICT-TOTAL-ORDER} fmod LIST{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER} fmod LIST{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} fmod LIST{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeList{STRICT-TOTAL-ORDER}{X}, sort List{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to List{ STRICT-TOTAL-ORDER}{X}) fmod WEAKLY-SORTABLE-LIST{STRICT-TOTAL-ORDER}{[X]} fmod WEAKLY-SORTABLE-LIST{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-TOTAL-ORDER}{X} to NeList{X}, sort List{STRICT-TOTAL-ORDER}{X} to List{X}) fmod LIST{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeList{STRICT-TOTAL-ORDER}{X}, sort List{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to List{ STRICT-TOTAL-ORDER}{X}) * (sort NeList{STRICT-TOTAL-ORDER}{X} to NeList{X}, sort List{STRICT-TOTAL-ORDER}{X} to List{X}) fmod SORTABLE-LIST{[X]} fth X :: TOTAL-PREORDER fmod LIST{TOTAL-PREORDER} fmod LIST{TOTAL-PREORDER}{[X]} fmod LIST{TOTAL-PREORDER}{[X]} * (sort NeList{TOTAL-PREORDER}{X} to NeList{X}, sort List{TOTAL-PREORDER}{X} to List{X}) fmod WEAKLY-SORTABLE-LIST'{[X]} fth X :: TOTAL-ORDER fmod WEAKLY-SORTABLE-LIST'{TOTAL-ORDER} fmod LIST{TOTAL-PREORDER}{TOTAL-ORDER} fmod LIST{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} fmod LIST{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeList{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to NeList{TOTAL-ORDER}{X}, sort List{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to List{TOTAL-ORDER}{X}) fmod WEAKLY-SORTABLE-LIST'{TOTAL-ORDER}{[X]} fmod WEAKLY-SORTABLE-LIST'{TOTAL-ORDER}{[X]} * (sort NeList{TOTAL-ORDER}{X} to NeList{X}, sort List{TOTAL-ORDER}{X} to List{X}) fmod LIST{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeList{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to NeList{TOTAL-ORDER}{X}, sort List{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to List{TOTAL-ORDER}{X}) * (sort NeList{TOTAL-ORDER}{X} to NeList{X}, sort List{TOTAL-ORDER}{X} to List{X}) fmod SORTABLE-LIST'{[X]} fmod SET{[X]} fmod LIST-AND-SET{STRICT-WEAK-ORDER} fmod SET{STRICT-WEAK-ORDER} fmod SET{STRICT-WEAK-ORDER}{[X]} fmod LIST-AND-SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER} fmod SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER} fmod SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} fmod LIST-AND-SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} fmod LIST-AND-SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeList{STRICT-TOTAL-ORDER}{X}, sort List{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to List{ STRICT-TOTAL-ORDER}{X}) fmod LIST-AND-SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeList{STRICT-TOTAL-ORDER}{X}, sort List{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to List{ STRICT-TOTAL-ORDER}{X}) * (sort NeList{STRICT-TOTAL-ORDER}{X} to NeList{X}, sort List{STRICT-TOTAL-ORDER}{X} to List{X}, sort NeSet{STRICT-WEAK-ORDER}{ STRICT-TOTAL-ORDER}{X} to NeSet{X}, sort Set{STRICT-WEAK-ORDER}{ STRICT-TOTAL-ORDER}{X} to Set{X}) fmod SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeSet{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeSet{X}, sort Set{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to Set{X}) fmod LIST-AND-SET{TOTAL-PREORDER} fmod SET{TOTAL-PREORDER} fmod SET{TOTAL-PREORDER}{[X]} fmod LIST-AND-SET{TOTAL-PREORDER}{TOTAL-ORDER} fmod SET{TOTAL-PREORDER}{TOTAL-ORDER} fmod SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} fmod LIST-AND-SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} fmod LIST-AND-SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeList{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to NeList{TOTAL-ORDER}{X}, sort List{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to List{TOTAL-ORDER}{X}) fmod LIST-AND-SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeList{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to NeList{TOTAL-ORDER}{X}, sort List{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to List{TOTAL-ORDER}{X}) * (sort NeList{ TOTAL-ORDER}{X} to NeList{X}, sort List{TOTAL-ORDER}{X} to List{X}, sort NeSet{TOTAL-PREORDER}{TOTAL-ORDER}{X} to NeSet{X}, sort Set{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to Set{X}) fmod SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeSet{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to NeSet{X}, sort Set{TOTAL-PREORDER}{TOTAL-ORDER}{X} to Set{X}) fmod LIST*{[X]} fmod SET*{[X]} fth Y :: TRIV fmod MAP{[X], [Y]} fth Y :: DEFAULT fmod ARRAY{[X], [Y]} fmod LIST{Nat} fmod LIST{Nat} * (sort NeList{Nat} to NeNatList, sort List{Nat} to NatList) fmod LIST{Qid} fmod LIST{Qid} * (sort NeList{Qid} to NeQidList, sort List{Qid} to QidList) fmod SET{Qid} fmod SET{Qid} * (sort NeSet{Qid} to NeQidSet, sort Set{Qid} to QidSet) fmod QID-SET * (op _`,_ to _;_ [prec 43], op empty to none) fmod SET{Qid} * (sort NeSet{Qid} to NeQidSet, sort Set{Qid} to QidSet) * (op _`,_ to _;_ [prec 43], op empty to none) fth Z :: TRIV fmod FOO{[Z], Nat} fmod FOO{Rat, Nat} fmod BAR * (sort Foo{Z,Nat} to Bar{Nat,Z}, op f : [Foo{Z,Nat}] -> [Foo{Z,Nat}] to g) fmod FOO{[Z], Nat} * (sort Foo{Z,Nat} to Bar{Nat,Z}, op f : [Foo{Z,Nat}] -> [ Foo{Z,Nat}] to g) fmod (BAR * (sort Foo{Z,Nat} to Bar{Nat,Z}, op f : [Foo{Z,Nat}] -> [Foo{Z,Nat}] to g)){Rat} fmod FOO{Rat, Nat} * (sort Foo{Rat,Nat} to Bar{Nat,Rat}, op f : [Foo{Rat,Nat}] -> [Foo{Rat,Nat}] to g) fmod BAZ is sorts Bool Zero NzNat Nat NzInt Int PosRat NzRat Rat Bar{Nat,Rat} . subsorts Zero NzNat NzNat < Nat . subsort NzNat < NzInt . subsorts NzInt Nat NzInt < Int . subsort NzNat < PosRat . subsorts NzInt PosRat < NzRat . subsorts NzRat Int < Rat . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op 0 : -> Zero [ctor] . op s_ : Nat -> NzNat [ctor iter prec 15 gather (E) special ( id-hook SuccSymbol term-hook zeroTerm (0))] . op _+_ : NzNat Nat -> NzNat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Nat Nat -> Nat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Int Int -> Int [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : PosRat PosRat -> PosRat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : PosRat Nat -> PosRat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Rat Rat -> Rat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op sd : Nat Nat -> Nat [comm special ( id-hook CUI_NumberOpSymbol (sd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : NzNat NzNat -> NzNat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Nat Nat -> Nat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : NzInt NzInt -> NzInt [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Int Int -> Int [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : PosRat PosRat -> PosRat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : NzRat NzRat -> NzRat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Rat Rat -> Rat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Int NzInt -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : PosRat PosRat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Rat NzRat -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Int NzInt -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Rat NzRat -> Rat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Nat Nat -> Nat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzNat Nat -> NzNat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Int Nat -> Int [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzInt Nat -> NzInt [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : PosRat Nat -> PosRat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzRat Nat -> NzRat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Rat Nat -> Rat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op modExp : [Rat] [Rat] [Rat] -> [Rat] [special ( id-hook NumberOpSymbol (modExp) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : NzInt Int -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Int Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : NzRat Rat -> PosRat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Rat Rat -> Rat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzInt NzInt -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Int Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzRat NzRat -> PosRat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Rat Rat -> Rat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzInt NzInt -> NzInt [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Int Int -> Int [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : PosRat PosRat -> PosRat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzRat NzRat -> NzRat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Rat Rat -> Rat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzInt NzInt -> NzInt [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Int Int -> Int [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzNat Int -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Nat Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : PosRat Rat -> PosRat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzRat NzRat -> NzRat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Rat Rat -> Rat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _xor_ : Nat Nat -> Nat [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _xor_ : Int Int -> Int [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Nat Nat -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Nat Int -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Int Int -> Int [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : NzNat Nat -> NzNat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : Nat Nat -> Nat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : NzInt Int -> NzInt [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : Int Int -> Int [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _>>_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _>>_ : Int Nat -> Int [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<<_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<<_ : Int Nat -> Int [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<_ : Rat Rat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Rat Rat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Rat Rat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Rat Rat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzNat Nat -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzInt Int -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzRat Rat -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op -_ : NzNat -> NzInt [ctor prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : NzInt -> NzInt [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : Int -> Int [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : NzRat -> NzRat [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : Rat -> Rat [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _-_ : Int Int -> Int [prec 33 gather (E e) special ( id-hook NumberOpSymbol (-) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _-_ : Rat Rat -> Rat [prec 33 gather (E e) special ( id-hook NumberOpSymbol (-) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : NzInt -> NzNat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : Int -> Nat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : NzRat -> PosRat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : Rat -> Rat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op ~_ : Int -> Int [prec 15 gather (E) special ( id-hook NumberOpSymbol (~) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _/_ : NzInt NzNat -> NzRat [ctor prec 31 gather (E e) special ( id-hook DivisionSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _/_ : NzNat NzNat -> PosRat [ctor prec 31 gather (E e) special ( id-hook DivisionSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _/_ : PosRat PosRat -> PosRat [prec 31 gather (E e) special ( id-hook DivisionSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _/_ : NzRat NzRat -> NzRat [prec 31 gather (E e) special ( id-hook DivisionSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _/_ : Rat NzRat -> Rat [prec 31 gather (E e) special ( id-hook DivisionSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op trunc : PosRat -> Nat . op trunc : Rat -> Int . op frac : Rat -> Rat . op floor : PosRat -> Nat . op floor : Rat -> Int . op ceiling : PosRat -> NzNat . op ceiling : Rat -> Int . op g : Bar{Nat,Rat} -> Bar{Nat,Rat} . eq true and A:Bool = A:Bool . eq false and A:Bool = false . eq A:Bool and A:Bool = A:Bool . eq false xor A:Bool = A:Bool . eq A:Bool xor A:Bool = false . eq A:Bool and (B:Bool xor C:Bool) = A:Bool and B:Bool xor A:Bool and C:Bool . eq not A:Bool = true xor A:Bool . eq A:Bool or B:Bool = A:Bool and B:Bool xor A:Bool xor B:Bool . eq A:Bool implies B:Bool = not (A:Bool xor A:Bool and B:Bool) . eq 0 / Q:NzRat = 0 . eq I:NzInt / - N:NzNat = - I:NzInt / N:NzNat . eq I:NzInt / N:NzNat / (J:NzInt / M:NzNat) = (I:NzInt * M:NzNat) / (J:NzInt * N:NzNat) . eq I:NzInt / N:NzNat / J:NzInt = I:NzInt / (J:NzInt * N:NzNat) . eq I:NzInt / (J:NzInt / M:NzNat) = (I:NzInt * M:NzNat) / J:NzInt . eq - (I:NzInt / N:NzNat) = - I:NzInt / N:NzNat . eq I:NzInt / N:NzNat + J:NzInt / M:NzNat = (I:NzInt * M:NzNat + J:NzInt * N:NzNat) / (N:NzNat * M:NzNat) . eq K:Int + I:NzInt / N:NzNat = (I:NzInt + N:NzNat * K:Int) / N:NzNat . eq I:NzInt / N:NzNat - J:NzInt / M:NzNat = (I:NzInt * M:NzNat - J:NzInt * N:NzNat) / (N:NzNat * M:NzNat) . eq I:NzInt / N:NzNat - K:Int = (I:NzInt - N:NzNat * K:Int) / N:NzNat . eq K:Int - J:NzInt / M:NzNat = (M:NzNat * K:Int - J:NzInt) / M:NzNat . eq 0 * Q:NzRat = 0 . eq (I:NzInt / N:NzNat) * (J:NzInt / M:NzNat) = (I:NzInt * J:NzInt) / (N:NzNat * M:NzNat) . eq K:Int * (I:NzInt / N:NzNat) = (I:NzInt * K:Int) / N:NzNat . eq I:NzInt / N:NzNat quo Q:NzRat = I:NzInt quo (Q:NzRat * N:NzNat) . eq K:Int quo (J:NzInt / M:NzNat) = (M:NzNat * K:Int) quo J:NzInt . eq I:NzInt / N:NzNat rem (J:NzInt / M:NzNat) = (I:NzInt * M:NzNat) rem ( J:NzInt * N:NzNat) / (N:NzNat * M:NzNat) . eq K:Int rem (J:NzInt / M:NzNat) = (M:NzNat * K:Int) rem J:NzInt / M:NzNat . eq I:NzInt / N:NzNat rem J:NzInt = I:NzInt rem (J:NzInt * N:NzNat) / N:NzNat . eq (I:NzInt / N:NzNat) ^ Z:Nat = I:NzInt ^ Z:Nat / N:NzNat ^ Z:Nat . eq abs(I:NzInt / N:NzNat) = abs(I:NzInt) / N:NzNat . eq gcd(R:Rat, I:NzInt / N:NzNat) = gcd(I:NzInt, N:NzNat * R:Rat) / N:NzNat . eq lcm(R:Rat, I:NzInt / N:NzNat) = lcm(I:NzInt, N:NzNat * R:Rat) / N:NzNat . eq min(R:Rat, I:NzInt / N:NzNat) = min(I:NzInt, N:NzNat * R:Rat) / N:NzNat . eq max(R:Rat, I:NzInt / N:NzNat) = max(I:NzInt, N:NzNat * R:Rat) / N:NzNat . eq I:NzInt / N:NzNat < J:NzInt / M:NzNat = I:NzInt * M:NzNat < J:NzInt * N:NzNat . eq I:NzInt / N:NzNat < K:Int = I:NzInt < N:NzNat * K:Int . eq K:Int < J:NzInt / M:NzNat = M:NzNat * K:Int < J:NzInt . eq I:NzInt / N:NzNat <= J:NzInt / M:NzNat = I:NzInt * M:NzNat <= J:NzInt * N:NzNat . eq I:NzInt / N:NzNat <= K:Int = I:NzInt <= N:NzNat * K:Int . eq K:Int <= J:NzInt / M:NzNat = M:NzNat * K:Int <= J:NzInt . eq I:NzInt / N:NzNat > J:NzInt / M:NzNat = I:NzInt * M:NzNat > J:NzInt * N:NzNat . eq I:NzInt / N:NzNat > K:Int = I:NzInt > N:NzNat * K:Int . eq K:Int > J:NzInt / M:NzNat = M:NzNat * K:Int > J:NzInt . eq I:NzInt / N:NzNat >= J:NzInt / M:NzNat = I:NzInt * M:NzNat >= J:NzInt * N:NzNat . eq I:NzInt / N:NzNat >= K:Int = I:NzInt >= N:NzNat * K:Int . eq K:Int >= J:NzInt / M:NzNat = M:NzNat * K:Int >= J:NzInt . eq I:NzInt / N:NzNat divides K:Int = I:NzInt divides N:NzNat * K:Int . eq Q:NzRat divides J:NzInt / M:NzNat = Q:NzRat * M:NzNat divides J:NzInt . eq trunc(K:Int) = K:Int . eq trunc(I:NzInt / N:NzNat) = I:NzInt quo N:NzNat . eq frac(K:Int) = 0 . eq frac(I:NzInt / N:NzNat) = I:NzInt rem N:NzNat / N:NzNat . eq floor(K:Int) = K:Int . eq ceiling(K:Int) = K:Int . eq floor(N:NzNat / M:NzNat) = N:NzNat quo M:NzNat . eq ceiling(N:NzNat / M:NzNat) = ((N:NzNat + M:NzNat) - 1) quo M:NzNat . eq floor(- N:NzNat / M:NzNat) = - ceiling(N:NzNat / M:NzNat) . eq ceiling(- N:NzNat / M:NzNat) = - floor(N:NzNat / M:NzNat) . endfm fmod BOOL fmod TRUTH-VALUE fmod BOOL-OPS fmod TRUTH fmod EXT-BOOL fmod NAT fmod INT fmod RAT fmod FLOAT fmod STRING fmod CONVERSION fmod RANDOM fmod BOUND fmod QID fth TRIV fth STRICT-WEAK-ORDER fth STRICT-TOTAL-ORDER fth TOTAL-PREORDER fth TOTAL-ORDER fth DEFAULT fmod LIST fmod WEAKLY-SORTABLE-LIST fmod SORTABLE-LIST fmod WEAKLY-SORTABLE-LIST' fmod SORTABLE-LIST' fmod SET fmod LIST-AND-SET fmod SORTABLE-LIST-AND-SET fmod SORTABLE-LIST-AND-SET' fmod LIST* fmod SET* fmod MAP fmod ARRAY fmod NAT-LIST fmod QID-LIST fmod QID-SET fmod META-TERM fmod META-CONDITION fmod META-STRATEGY fmod META-MODULE fmod META-VIEW fmod META-LEVEL fmod LEXICAL mod COUNTER mod LOOP-MODE mod CONFIGURATION fmod FOO fmod BAR fmod BAZ fth X :: TRIV fmod LIST{[X]} fth X :: STRICT-WEAK-ORDER fmod LIST{STRICT-WEAK-ORDER} fmod LIST{STRICT-WEAK-ORDER}{[X]} fmod LIST{STRICT-WEAK-ORDER}{[X]} * (sort NeList{STRICT-WEAK-ORDER}{X} to NeList{X}, sort List{STRICT-WEAK-ORDER}{X} to List{X}) fmod WEAKLY-SORTABLE-LIST{[X]} fth X :: STRICT-TOTAL-ORDER fmod WEAKLY-SORTABLE-LIST{STRICT-TOTAL-ORDER} fmod LIST{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER} fmod LIST{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} fmod LIST{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeList{STRICT-TOTAL-ORDER}{X}, sort List{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to List{ STRICT-TOTAL-ORDER}{X}) fmod WEAKLY-SORTABLE-LIST{STRICT-TOTAL-ORDER}{[X]} fmod WEAKLY-SORTABLE-LIST{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-TOTAL-ORDER}{X} to NeList{X}, sort List{STRICT-TOTAL-ORDER}{X} to List{X}) fmod LIST{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeList{STRICT-TOTAL-ORDER}{X}, sort List{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to List{ STRICT-TOTAL-ORDER}{X}) * (sort NeList{STRICT-TOTAL-ORDER}{X} to NeList{X}, sort List{STRICT-TOTAL-ORDER}{X} to List{X}) fmod SORTABLE-LIST{[X]} fth X :: TOTAL-PREORDER fmod LIST{TOTAL-PREORDER} fmod LIST{TOTAL-PREORDER}{[X]} fmod LIST{TOTAL-PREORDER}{[X]} * (sort NeList{TOTAL-PREORDER}{X} to NeList{X}, sort List{TOTAL-PREORDER}{X} to List{X}) fmod WEAKLY-SORTABLE-LIST'{[X]} fth X :: TOTAL-ORDER fmod WEAKLY-SORTABLE-LIST'{TOTAL-ORDER} fmod LIST{TOTAL-PREORDER}{TOTAL-ORDER} fmod LIST{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} fmod LIST{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeList{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to NeList{TOTAL-ORDER}{X}, sort List{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to List{TOTAL-ORDER}{X}) fmod WEAKLY-SORTABLE-LIST'{TOTAL-ORDER}{[X]} fmod WEAKLY-SORTABLE-LIST'{TOTAL-ORDER}{[X]} * (sort NeList{TOTAL-ORDER}{X} to NeList{X}, sort List{TOTAL-ORDER}{X} to List{X}) fmod LIST{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeList{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to NeList{TOTAL-ORDER}{X}, sort List{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to List{TOTAL-ORDER}{X}) * (sort NeList{TOTAL-ORDER}{X} to NeList{X}, sort List{TOTAL-ORDER}{X} to List{X}) fmod SORTABLE-LIST'{[X]} fmod SET{[X]} fmod LIST-AND-SET{STRICT-WEAK-ORDER} fmod SET{STRICT-WEAK-ORDER} fmod SET{STRICT-WEAK-ORDER}{[X]} fmod LIST-AND-SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER} fmod SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER} fmod SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} fmod LIST-AND-SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} fmod LIST-AND-SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeList{STRICT-TOTAL-ORDER}{X}, sort List{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to List{ STRICT-TOTAL-ORDER}{X}) fmod LIST-AND-SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeList{STRICT-TOTAL-ORDER}{X}, sort List{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to List{ STRICT-TOTAL-ORDER}{X}) * (sort NeList{STRICT-TOTAL-ORDER}{X} to NeList{X}, sort List{STRICT-TOTAL-ORDER}{X} to List{X}, sort NeSet{STRICT-WEAK-ORDER}{ STRICT-TOTAL-ORDER}{X} to NeSet{X}, sort Set{STRICT-WEAK-ORDER}{ STRICT-TOTAL-ORDER}{X} to Set{X}) fmod SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeSet{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeSet{X}, sort Set{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to Set{X}) fmod LIST-AND-SET{TOTAL-PREORDER} fmod SET{TOTAL-PREORDER} fmod SET{TOTAL-PREORDER}{[X]} fmod LIST-AND-SET{TOTAL-PREORDER}{TOTAL-ORDER} fmod SET{TOTAL-PREORDER}{TOTAL-ORDER} fmod SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} fmod LIST-AND-SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} fmod LIST-AND-SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeList{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to NeList{TOTAL-ORDER}{X}, sort List{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to List{TOTAL-ORDER}{X}) fmod LIST-AND-SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeList{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to NeList{TOTAL-ORDER}{X}, sort List{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to List{TOTAL-ORDER}{X}) * (sort NeList{ TOTAL-ORDER}{X} to NeList{X}, sort List{TOTAL-ORDER}{X} to List{X}, sort NeSet{TOTAL-PREORDER}{TOTAL-ORDER}{X} to NeSet{X}, sort Set{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to Set{X}) fmod SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeSet{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to NeSet{X}, sort Set{TOTAL-PREORDER}{TOTAL-ORDER}{X} to Set{X}) fmod LIST*{[X]} fmod SET*{[X]} fth Y :: TRIV fmod MAP{[X], [Y]} fth Y :: DEFAULT fmod ARRAY{[X], [Y]} fmod LIST{Nat} fmod LIST{Nat} * (sort NeList{Nat} to NeNatList, sort List{Nat} to NatList) fmod LIST{Qid} fmod LIST{Qid} * (sort NeList{Qid} to NeQidList, sort List{Qid} to QidList) fmod SET{Qid} fmod SET{Qid} * (sort NeSet{Qid} to NeQidSet, sort Set{Qid} to QidSet) fmod QID-SET * (op _`,_ to _;_ [prec 43], op empty to none) fmod SET{Qid} * (sort NeSet{Qid} to NeQidSet, sort Set{Qid} to QidSet) * (op _`,_ to _;_ [prec 43], op empty to none) fmod FOO{Rat, Nat} fmod FOO{Rat, Nat} * (sort Foo{Rat,Nat} to Bar{Nat,Rat}, op f : [Foo{Rat,Nat}] -> [Foo{Rat,Nat}] to g) fmod FOO{[X], Nat} fmod BAR * (sort Foo{X,Nat} to Bar{Nat,X}, op f : [Foo{X,Nat}] -> [Foo{X,Nat}] to g) fmod FOO{[X], Nat} * (sort Foo{X,Nat} to Bar{Nat,X}, op f : [Foo{X,Nat}] -> [ Foo{X,Nat}] to g) fmod (BAR * (sort Foo{X,Nat} to Bar{Nat,X}, op f : [Foo{X,Nat}] -> [Foo{X,Nat}] to g)){Rat} fmod BAZ is sorts Bool Zero NzNat Nat Foo'{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{Nat<} Bar'{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{Nat<} . subsorts Zero NzNat < Nat . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op 0 : -> Zero [ctor] . op s_ : Nat -> NzNat [ctor iter prec 15 gather (E) special ( id-hook SuccSymbol term-hook zeroTerm (0))] . op _+_ : NzNat Nat -> NzNat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _+_ : Nat Nat -> Nat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat))] . op sd : Nat Nat -> Nat [comm special ( id-hook CUI_NumberOpSymbol (sd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : NzNat NzNat -> NzNat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : Nat Nat -> Nat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _quo_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _rem_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _^_ : Nat Nat -> Nat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _^_ : NzNat Nat -> NzNat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat))] . op modExp : [Nat] [Nat] [Nat] -> [Nat] [special ( id-hook NumberOpSymbol (modExp) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op lcm : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat))] . op lcm : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat))] . op min : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat))] . op min : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat))] . op max : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat))] . op max : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _xor_ : Nat Nat -> Nat [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _&_ : Nat Nat -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _|_ : NzNat Nat -> NzNat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _|_ : Nat Nat -> Nat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _>>_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _<<_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _<_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzNat Nat -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op f' : Foo'{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{Nat<} -> Foo'{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{Nat<} . op g' : Bar'{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{Nat<} -> Foo'{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{Nat<} . eq true and A:Bool = A:Bool . eq false and A:Bool = false . eq A:Bool and A:Bool = A:Bool . eq false xor A:Bool = A:Bool . eq A:Bool xor A:Bool = false . eq A:Bool and (B:Bool xor C:Bool) = A:Bool and B:Bool xor A:Bool and C:Bool . eq not A:Bool = true xor A:Bool . eq A:Bool or B:Bool = A:Bool and B:Bool xor A:Bool xor B:Bool . eq A:Bool implies B:Bool = not (A:Bool xor A:Bool and B:Bool) . endfm fmod BOOL fmod TRUTH-VALUE fmod BOOL-OPS fmod TRUTH fmod EXT-BOOL fmod NAT fmod INT fmod RAT fmod FLOAT fmod STRING fmod CONVERSION fmod RANDOM fmod BOUND fmod QID fth TRIV fth STRICT-WEAK-ORDER fth STRICT-TOTAL-ORDER fth TOTAL-PREORDER fth TOTAL-ORDER fth DEFAULT fmod LIST fmod WEAKLY-SORTABLE-LIST fmod SORTABLE-LIST fmod WEAKLY-SORTABLE-LIST' fmod SORTABLE-LIST' fmod SET fmod LIST-AND-SET fmod SORTABLE-LIST-AND-SET fmod SORTABLE-LIST-AND-SET' fmod LIST* fmod SET* fmod MAP fmod ARRAY fmod NAT-LIST fmod QID-LIST fmod QID-SET fmod META-TERM fmod META-CONDITION fmod META-STRATEGY fmod META-MODULE fmod META-VIEW fmod META-LEVEL fmod LEXICAL mod COUNTER mod LOOP-MODE mod CONFIGURATION fmod FOO fmod BAR fmod BAZ fth X :: TRIV fmod LIST{[X]} fth X :: STRICT-WEAK-ORDER fmod LIST{STRICT-WEAK-ORDER} fmod LIST{STRICT-WEAK-ORDER}{[X]} fmod LIST{STRICT-WEAK-ORDER}{[X]} * (sort NeList{STRICT-WEAK-ORDER}{X} to NeList{X}, sort List{STRICT-WEAK-ORDER}{X} to List{X}) fmod WEAKLY-SORTABLE-LIST{[X]} fth X :: STRICT-TOTAL-ORDER fmod WEAKLY-SORTABLE-LIST{STRICT-TOTAL-ORDER} fmod LIST{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER} fmod LIST{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} fmod LIST{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeList{STRICT-TOTAL-ORDER}{X}, sort List{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to List{ STRICT-TOTAL-ORDER}{X}) fmod WEAKLY-SORTABLE-LIST{STRICT-TOTAL-ORDER}{[X]} fmod WEAKLY-SORTABLE-LIST{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-TOTAL-ORDER}{X} to NeList{X}, sort List{STRICT-TOTAL-ORDER}{X} to List{X}) fmod LIST{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeList{STRICT-TOTAL-ORDER}{X}, sort List{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to List{ STRICT-TOTAL-ORDER}{X}) * (sort NeList{STRICT-TOTAL-ORDER}{X} to NeList{X}, sort List{STRICT-TOTAL-ORDER}{X} to List{X}) fmod SORTABLE-LIST{[X]} fth X :: TOTAL-PREORDER fmod LIST{TOTAL-PREORDER} fmod LIST{TOTAL-PREORDER}{[X]} fmod LIST{TOTAL-PREORDER}{[X]} * (sort NeList{TOTAL-PREORDER}{X} to NeList{X}, sort List{TOTAL-PREORDER}{X} to List{X}) fmod WEAKLY-SORTABLE-LIST'{[X]} fth X :: TOTAL-ORDER fmod WEAKLY-SORTABLE-LIST'{TOTAL-ORDER} fmod LIST{TOTAL-PREORDER}{TOTAL-ORDER} fmod LIST{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} fmod LIST{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeList{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to NeList{TOTAL-ORDER}{X}, sort List{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to List{TOTAL-ORDER}{X}) fmod WEAKLY-SORTABLE-LIST'{TOTAL-ORDER}{[X]} fmod WEAKLY-SORTABLE-LIST'{TOTAL-ORDER}{[X]} * (sort NeList{TOTAL-ORDER}{X} to NeList{X}, sort List{TOTAL-ORDER}{X} to List{X}) fmod LIST{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeList{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to NeList{TOTAL-ORDER}{X}, sort List{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to List{TOTAL-ORDER}{X}) * (sort NeList{TOTAL-ORDER}{X} to NeList{X}, sort List{TOTAL-ORDER}{X} to List{X}) fmod SORTABLE-LIST'{[X]} fmod SET{[X]} fmod LIST-AND-SET{STRICT-WEAK-ORDER} fmod SET{STRICT-WEAK-ORDER} fmod SET{STRICT-WEAK-ORDER}{[X]} fmod LIST-AND-SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER} fmod SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER} fmod SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} fmod LIST-AND-SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} fmod LIST-AND-SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeList{STRICT-TOTAL-ORDER}{X}, sort List{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to List{ STRICT-TOTAL-ORDER}{X}) fmod LIST-AND-SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeList{STRICT-TOTAL-ORDER}{X}, sort List{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to List{ STRICT-TOTAL-ORDER}{X}) * (sort NeList{STRICT-TOTAL-ORDER}{X} to NeList{X}, sort List{STRICT-TOTAL-ORDER}{X} to List{X}, sort NeSet{STRICT-WEAK-ORDER}{ STRICT-TOTAL-ORDER}{X} to NeSet{X}, sort Set{STRICT-WEAK-ORDER}{ STRICT-TOTAL-ORDER}{X} to Set{X}) fmod SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeSet{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeSet{X}, sort Set{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to Set{X}) fmod LIST-AND-SET{TOTAL-PREORDER} fmod SET{TOTAL-PREORDER} fmod SET{TOTAL-PREORDER}{[X]} fmod LIST-AND-SET{TOTAL-PREORDER}{TOTAL-ORDER} fmod SET{TOTAL-PREORDER}{TOTAL-ORDER} fmod SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} fmod LIST-AND-SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} fmod LIST-AND-SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeList{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to NeList{TOTAL-ORDER}{X}, sort List{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to List{TOTAL-ORDER}{X}) fmod LIST-AND-SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeList{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to NeList{TOTAL-ORDER}{X}, sort List{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to List{TOTAL-ORDER}{X}) * (sort NeList{ TOTAL-ORDER}{X} to NeList{X}, sort List{TOTAL-ORDER}{X} to List{X}, sort NeSet{TOTAL-PREORDER}{TOTAL-ORDER}{X} to NeSet{X}, sort Set{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to Set{X}) fmod SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeSet{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to NeSet{X}, sort Set{TOTAL-PREORDER}{TOTAL-ORDER}{X} to Set{X}) fmod LIST*{[X]} fmod SET*{[X]} fth Y :: TRIV fmod MAP{[X], [Y]} fth Y :: DEFAULT fmod ARRAY{[X], [Y]} fmod LIST{Nat} fmod LIST{Nat} * (sort NeList{Nat} to NeNatList, sort List{Nat} to NatList) fmod LIST{Qid} fmod LIST{Qid} * (sort NeList{Qid} to NeQidList, sort List{Qid} to QidList) fmod SET{Qid} fmod SET{Qid} * (sort NeSet{Qid} to NeQidSet, sort Set{Qid} to QidSet) fmod QID-SET * (op _`,_ to _;_ [prec 43], op empty to none) fmod SET{Qid} * (sort NeSet{Qid} to NeQidSet, sort Set{Qid} to QidSet) * (op _`,_ to _;_ [prec 43], op empty to none) fmod FOO{[X]} fmod BAR * (sort Foo{X} to Foo'{X}, sort Bar{X} to Bar'{X}, op f : [Foo{X}] -> [Foo{X}] to f', op g : [Bar{X}] -> [Foo{X}] to g') fmod FOO{[X]} * (sort Foo{X} to Foo'{X}, op f : [Foo{X}] -> [Foo{X}] to f') fmod (BAR * (sort Foo{X} to Foo'{X}, sort Bar{X} to Bar'{X}, op f : [Foo{X}] -> [Foo{X}] to f', op g : [Bar{X}] -> [Foo{X}] to g')){STRICT-WEAK-ORDER} fmod FOO{STRICT-WEAK-ORDER} fmod FOO{STRICT-WEAK-ORDER}{[X]} fmod FOO{STRICT-WEAK-ORDER}{[X]} * (sort Foo{STRICT-WEAK-ORDER}{X} to Foo'{ STRICT-WEAK-ORDER}{X}, op f : [Foo{STRICT-WEAK-ORDER}{X}] -> [Foo{ STRICT-WEAK-ORDER}{X}] to f') fmod (BAR * (sort Foo{X} to Foo'{X}, sort Bar{X} to Bar'{X}, op f : [Foo{X}] -> [Foo{X}] to f', op g : [Bar{X}] -> [Foo{X}] to g')){STRICT-WEAK-ORDER}{ STRICT-TOTAL-ORDER} fmod FOO{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER} fmod FOO{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} fmod FOO{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort Foo{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to Foo'{STRICT-WEAK-ORDER}{ STRICT-TOTAL-ORDER}{X}, op f : [Foo{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{ X}] -> [Foo{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X}] to f') fmod (BAR * (sort Foo{X} to Foo'{X}, sort Bar{X} to Bar'{X}, op f : [Foo{X}] -> [Foo{X}] to f', op g : [Bar{X}] -> [Foo{X}] to g')){STRICT-WEAK-ORDER}{ STRICT-TOTAL-ORDER}{Nat<} fmod FOO{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{Nat<} fmod FOO{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{Nat<} * (sort Foo{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{Nat<} to Foo'{STRICT-WEAK-ORDER}{ STRICT-TOTAL-ORDER}{Nat<}, op f : [Foo{STRICT-WEAK-ORDER}{ STRICT-TOTAL-ORDER}{Nat<}] -> [Foo{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{ Nat<}] to f') fmod TEST is sorts Bool Zero NzNat Nat . subsorts Zero NzNat < Nat . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op 0 : -> Zero [ctor] . op s_ : Nat -> NzNat [ctor iter prec 15 gather (E) special ( id-hook SuccSymbol term-hook zeroTerm (0))] . op _+_ : NzNat Nat -> NzNat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _+_ : Nat Nat -> Nat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat))] . op sd : Nat Nat -> Nat [comm special ( id-hook CUI_NumberOpSymbol (sd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : NzNat NzNat -> NzNat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : Nat Nat -> Nat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _quo_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _rem_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _^_ : Nat Nat -> Nat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _^_ : NzNat Nat -> NzNat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat))] . op modExp : [Nat] [Nat] [Nat] -> [Nat] [special ( id-hook NumberOpSymbol (modExp) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op lcm : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat))] . op lcm : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat))] . op min : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat))] . op min : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat))] . op max : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat))] . op max : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _xor_ : Nat Nat -> Nat [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _&_ : Nat Nat -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _|_ : NzNat Nat -> NzNat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _|_ : Nat Nat -> Nat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _>>_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _<<_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _<_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzNat Nat -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op g : Nat -> Nat . eq true and A:Bool = A:Bool . eq false and A:Bool = false . eq A:Bool and A:Bool = A:Bool . eq false xor A:Bool = A:Bool . eq A:Bool xor A:Bool = false . eq A:Bool and (B:Bool xor C:Bool) = A:Bool and B:Bool xor A:Bool and C:Bool . eq not A:Bool = true xor A:Bool . eq A:Bool or B:Bool = A:Bool and B:Bool xor A:Bool xor B:Bool . eq A:Bool implies B:Bool = not (A:Bool xor A:Bool and B:Bool) . eq g(A:Nat) = 1 + A:Nat + 1 . endfm fmod TEST is sorts Bool Zero NzNat Nat . subsorts Zero NzNat < Nat . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op 0 : -> Zero [ctor] . op s_ : Nat -> NzNat [ctor iter prec 15 gather (E) special ( id-hook SuccSymbol term-hook zeroTerm (0))] . op _+_ : NzNat Nat -> NzNat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _+_ : Nat Nat -> Nat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat))] . op sd : Nat Nat -> Nat [comm special ( id-hook CUI_NumberOpSymbol (sd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : NzNat NzNat -> NzNat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : Nat Nat -> Nat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _quo_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _rem_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _^_ : Nat Nat -> Nat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _^_ : NzNat Nat -> NzNat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat))] . op modExp : [Nat] [Nat] [Nat] -> [Nat] [special ( id-hook NumberOpSymbol (modExp) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op lcm : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat))] . op lcm : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat))] . op min : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat))] . op min : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat))] . op max : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat))] . op max : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _xor_ : Nat Nat -> Nat [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _&_ : Nat Nat -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _|_ : NzNat Nat -> NzNat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _|_ : Nat Nat -> Nat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _>>_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _<<_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _<_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzNat Nat -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _#_ : Nat Nat -> Nat [id: 1 prec 41 gather (E E)] . eq true and A:Bool = A:Bool . eq false and A:Bool = false . eq A:Bool and A:Bool = A:Bool . eq false xor A:Bool = A:Bool . eq A:Bool xor A:Bool = false . eq A:Bool and (B:Bool xor C:Bool) = A:Bool and B:Bool xor A:Bool and C:Bool . eq not A:Bool = true xor A:Bool . eq A:Bool or B:Bool = A:Bool and B:Bool xor A:Bool xor B:Bool . eq A:Bool implies B:Bool = not (A:Bool xor A:Bool and B:Bool) . eq s A:Nat # s B:Nat = s_^2(A:Nat # B:Nat) . endfm ========================================== reduce in TEST : 0 . rewrites: 0 result Zero: 0 fmod TEST is sorts Bool Zero NzNat Nat NzInt Int . subsorts Zero NzNat NzNat < Nat . subsort NzNat < NzInt . subsorts NzInt Nat < Int . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op 0 : -> Zero [ctor] . op s_ : Nat -> NzNat [ctor iter prec 15 gather (E) special ( id-hook SuccSymbol term-hook zeroTerm (0))] . op _+_ : NzNat Nat -> NzNat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Nat Nat -> Nat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Int Int -> Int [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op sd : Nat Nat -> Nat [comm special ( id-hook CUI_NumberOpSymbol (sd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : NzNat NzNat -> NzNat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Nat Nat -> Nat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : NzInt NzInt -> NzInt [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Int Int -> Int [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Int NzInt -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Int NzInt -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Nat Nat -> Nat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzNat Nat -> NzNat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Int Nat -> Int [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzInt Nat -> NzInt [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op modExp : [Int] [Int] [Int] -> [Int] [special ( id-hook NumberOpSymbol (modExp) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : NzInt Int -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Int Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzInt NzInt -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Int Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzInt NzInt -> NzInt [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Int Int -> Int [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzInt NzInt -> NzInt [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Int Int -> Int [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzNat Int -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Nat Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _xor_ : Nat Nat -> Nat [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _xor_ : Int Int -> Int [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Nat Nat -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Nat Int -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Int Int -> Int [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : NzNat Nat -> NzNat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : Nat Nat -> Nat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : NzInt Int -> NzInt [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : Int Int -> Int [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _>>_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _>>_ : Int Nat -> Int [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<<_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<<_ : Int Nat -> Int [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzNat Nat -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzInt Int -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op -_ : NzNat -> NzInt [ctor prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : NzInt -> NzInt [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : Int -> Int [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _-_ : Int Int -> Int [prec 33 gather (E e) special ( id-hook NumberOpSymbol (-) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : NzInt -> NzNat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : Int -> Nat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op ~_ : Int -> Int [prec 15 gather (E) special ( id-hook NumberOpSymbol (~) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op f : Int -> Int . eq true and A:Bool = A:Bool . eq false and A:Bool = false . eq A:Bool and A:Bool = A:Bool . eq false xor A:Bool = A:Bool . eq A:Bool xor A:Bool = false . eq A:Bool and (B:Bool xor C:Bool) = A:Bool and B:Bool xor A:Bool and C:Bool . eq not A:Bool = true xor A:Bool . eq A:Bool or B:Bool = A:Bool and B:Bool xor A:Bool xor B:Bool . eq A:Bool implies B:Bool = not (A:Bool xor A:Bool and B:Bool) . eq f(A:Int) = - - - - - - - - - - A:Int . endfm fmod TEST is sorts Bool Zero NzNat Nat NzInt Int . subsorts Zero NzNat NzNat < Nat . subsort NzNat < NzInt . subsorts NzInt Nat < Int . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op 0 : -> Zero [ctor] . op s_ : Nat -> NzNat [ctor iter prec 15 gather (E) special ( id-hook SuccSymbol term-hook zeroTerm (0))] . op _+_ : NzNat Nat -> NzNat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Nat Nat -> Nat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Int Int -> Int [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op sd : Nat Nat -> Nat [comm special ( id-hook CUI_NumberOpSymbol (sd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : NzNat NzNat -> NzNat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Nat Nat -> Nat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : NzInt NzInt -> NzInt [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Int Int -> Int [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Int NzInt -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Int NzInt -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Nat Nat -> Nat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzNat Nat -> NzNat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Int Nat -> Int [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzInt Nat -> NzInt [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op modExp : [Int] [Int] [Int] -> [Int] [special ( id-hook NumberOpSymbol (modExp) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : NzInt Int -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Int Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzInt NzInt -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Int Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzInt NzInt -> NzInt [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Int Int -> Int [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzInt NzInt -> NzInt [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Int Int -> Int [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzNat Int -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Nat Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _xor_ : Nat Nat -> Nat [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _xor_ : Int Int -> Int [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Nat Nat -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Nat Int -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Int Int -> Int [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : NzNat Nat -> NzNat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : Nat Nat -> Nat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : NzInt Int -> NzInt [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : Int Int -> Int [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _>>_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _>>_ : Int Nat -> Int [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<<_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<<_ : Int Nat -> Int [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzNat Nat -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzInt Int -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op -_ : NzNat -> NzInt [ctor prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : NzInt -> NzInt [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : Int -> Int [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _-_ : Int Int -> Int [prec 33 gather (E e) special ( id-hook NumberOpSymbol (-) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : NzInt -> NzNat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : Int -> Nat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op ~_ : Int -> Int [prec 15 gather (E) special ( id-hook NumberOpSymbol (~) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op f : Int -> Int . eq true and A:Bool = A:Bool . eq false and A:Bool = false . eq A:Bool and A:Bool = A:Bool . eq false xor A:Bool = A:Bool . eq A:Bool xor A:Bool = false . eq A:Bool and (B:Bool xor C:Bool) = A:Bool and B:Bool xor A:Bool and C:Bool . eq not A:Bool = true xor A:Bool . eq A:Bool or B:Bool = A:Bool and B:Bool xor A:Bool xor B:Bool . eq A:Bool implies B:Bool = not (A:Bool xor A:Bool and B:Bool) . eq f(A:Int) = ((A:Int * A:Int) * A:Int * A:Int) * (A:Int * A:Int) * A:Int * A:Int . endfm fmod TEST is sorts Bool Zero NzNat Nat . subsorts Zero NzNat < Nat . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op 0 : -> Zero [ctor] . op s_ : Nat -> NzNat [ctor iter prec 15 gather (E) special ( id-hook SuccSymbol term-hook zeroTerm (0))] . op _+_ : NzNat Nat -> NzNat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _+_ : Nat Nat -> Nat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat))] . op sd : Nat Nat -> Nat [comm special ( id-hook CUI_NumberOpSymbol (sd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : NzNat NzNat -> NzNat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : Nat Nat -> Nat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _quo_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _rem_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _^_ : Nat Nat -> Nat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _^_ : NzNat Nat -> NzNat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat))] . op modExp : [Nat] [Nat] [Nat] -> [Nat] [special ( id-hook NumberOpSymbol (modExp) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op lcm : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat))] . op lcm : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat))] . op min : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat))] . op min : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat))] . op max : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat))] . op max : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _xor_ : Nat Nat -> Nat [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _&_ : Nat Nat -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _|_ : NzNat Nat -> NzNat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _|_ : Nat Nat -> Nat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _>>_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _<<_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _<_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzNat Nat -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op g : Nat Nat -> Nat . eq true and A:Bool = A:Bool . eq false and A:Bool = false . eq A:Bool and A:Bool = A:Bool . eq false xor A:Bool = A:Bool . eq A:Bool xor A:Bool = false . eq A:Bool and (B:Bool xor C:Bool) = A:Bool and B:Bool xor A:Bool and C:Bool . eq not A:Bool = true xor A:Bool . eq A:Bool or B:Bool = A:Bool and B:Bool xor A:Bool xor B:Bool . eq A:Bool implies B:Bool = not (A:Bool xor A:Bool and B:Bool) . eq g(A:Nat, B:Nat) = B:Nat + A:Nat + A:Nat + B:Nat . endfm fmod TEST is sorts Bool Zero NzNat Nat NzInt Int . subsorts Zero NzNat NzNat < Nat . subsort NzNat < NzInt . subsorts NzInt Nat < Int . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op 0 : -> Zero [ctor] . op s_ : Nat -> NzNat [ctor iter prec 15 gather (E) special ( id-hook SuccSymbol term-hook zeroTerm (0))] . op _+_ : NzNat Nat -> NzNat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Nat Nat -> Nat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Int Int -> Int [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op sd : Nat Nat -> Nat [comm special ( id-hook CUI_NumberOpSymbol (sd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : NzNat NzNat -> NzNat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Nat Nat -> Nat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : NzInt NzInt -> NzInt [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Int Int -> Int [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Int NzInt -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Int NzInt -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Nat Nat -> Nat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzNat Nat -> NzNat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Int Nat -> Int [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzInt Nat -> NzInt [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op modExp : [Int] [Int] [Int] -> [Int] [special ( id-hook NumberOpSymbol (modExp) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : NzInt Int -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Int Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzInt NzInt -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Int Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzInt NzInt -> NzInt [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Int Int -> Int [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzInt NzInt -> NzInt [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Int Int -> Int [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzNat Int -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Nat Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _xor_ : Nat Nat -> Nat [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _xor_ : Int Int -> Int [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Nat Nat -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Nat Int -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Int Int -> Int [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : NzNat Nat -> NzNat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : Nat Nat -> Nat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : NzInt Int -> NzInt [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : Int Int -> Int [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _>>_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _>>_ : Int Nat -> Int [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<<_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<<_ : Int Nat -> Int [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzNat Nat -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzInt Int -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op -_ : NzNat -> NzInt [ctor prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : NzInt -> NzInt [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : Int -> Int [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _-_ : Int Int -> Int [prec 33 gather (E e) special ( id-hook NumberOpSymbol (-) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : NzInt -> NzNat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : Int -> Nat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op ~_ : Int -> Int [prec 15 gather (E) special ( id-hook NumberOpSymbol (~) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op g : Int Int -> Int . eq true and A:Bool = A:Bool . eq false and A:Bool = false . eq A:Bool and A:Bool = A:Bool . eq false xor A:Bool = A:Bool . eq A:Bool xor A:Bool = false . eq A:Bool and (B:Bool xor C:Bool) = A:Bool and B:Bool xor A:Bool and C:Bool . eq not A:Bool = true xor A:Bool . eq A:Bool or B:Bool = A:Bool and B:Bool xor A:Bool xor B:Bool . eq A:Bool implies B:Bool = not (A:Bool xor A:Bool and B:Bool) . eq g(A:Int, B:Int) = A:Int - s B:Int - s A:Int - s B:Int . endfm fmod TEST is sorts Bool Zero NzNat Nat NzInt Int . subsorts Zero NzNat NzNat < Nat . subsort NzNat < NzInt . subsorts NzInt Nat < Int . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op 0 : -> Zero [ctor] . op s_ : Nat -> NzNat [ctor iter prec 15 gather (E) special ( id-hook SuccSymbol term-hook zeroTerm (0))] . op _+_ : NzNat Nat -> NzNat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Nat Nat -> Nat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Int Int -> Int [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op sd : Nat Nat -> Nat [comm special ( id-hook CUI_NumberOpSymbol (sd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : NzNat NzNat -> NzNat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Nat Nat -> Nat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : NzInt NzInt -> NzInt [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Int Int -> Int [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Int NzInt -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Int NzInt -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Nat Nat -> Nat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzNat Nat -> NzNat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Int Nat -> Int [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzInt Nat -> NzInt [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op modExp : [Int] [Int] [Int] -> [Int] [special ( id-hook NumberOpSymbol (modExp) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : NzInt Int -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Int Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzInt NzInt -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Int Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzInt NzInt -> NzInt [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Int Int -> Int [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzInt NzInt -> NzInt [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Int Int -> Int [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzNat Int -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Nat Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _xor_ : Nat Nat -> Nat [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _xor_ : Int Int -> Int [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Nat Nat -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Nat Int -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Int Int -> Int [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : NzNat Nat -> NzNat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : Nat Nat -> Nat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : NzInt Int -> NzInt [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : Int Int -> Int [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _>>_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _>>_ : Int Nat -> Int [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<<_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<<_ : Int Nat -> Int [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzNat Nat -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzInt Int -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op -_ : NzNat -> NzInt [ctor prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : NzInt -> NzInt [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : Int -> Int [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _-_ : Int Int -> Int [prec 33 gather (E e) special ( id-hook NumberOpSymbol (-) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : NzInt -> NzNat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : Int -> Nat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op ~_ : Int -> Int [prec 15 gather (E) special ( id-hook NumberOpSymbol (~) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op g : Int Int -> Int . eq _and_(true, A:Bool) = A:Bool . eq _and_(false, A:Bool) = false . eq _and_(A:Bool, A:Bool) = A:Bool . eq _xor_(false, A:Bool) = A:Bool . eq _xor_(A:Bool, A:Bool) = false . eq _and_(A:Bool, _xor_(B:Bool, C:Bool)) = _xor_(_and_(A:Bool, B:Bool), _and_( A:Bool, C:Bool)) . eq not_(A:Bool) = _xor_(true, A:Bool) . eq _or_(A:Bool, B:Bool) = _xor_(_and_(A:Bool, B:Bool), _xor_(A:Bool, B:Bool)) . eq _implies_(A:Bool, B:Bool) = not_(_xor_(A:Bool, _and_(A:Bool, B:Bool))) . eq g(A:Int, B:Int) = _-_(_-_(_-_(A:Int, s_(B:Int)), s_(A:Int)), s_(B:Int)) . endfm fmod M{X :: T} is sorts X$Elt Bool . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op f : X$Elt X$Elt -> X$Elt [assoc comm] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op g : X$Elt X$Elt -> X$Elt . var A : X$Elt . var B : X$Elt . eq g(A, B) = f(A, A, B, B) . eq true and A:Bool = A:Bool . eq false and A:Bool = false . eq A:Bool and A:Bool = A:Bool . eq false xor A:Bool = A:Bool . eq A:Bool xor A:Bool = false . eq A:Bool and (B:Bool xor C:Bool) = A:Bool and B:Bool xor A:Bool and C:Bool . eq not A:Bool = true xor A:Bool . eq A:Bool or B:Bool = A:Bool and B:Bool xor A:Bool xor B:Bool . eq A:Bool implies B:Bool = not (A:Bool xor A:Bool and B:Bool) . endfm fmod TEST is sorts Bool Zero NzNat Nat . subsorts Zero NzNat < Nat . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op 0 : -> Zero [ctor] . op s_ : Nat -> NzNat [ctor iter prec 15 gather (E) special ( id-hook SuccSymbol term-hook zeroTerm (0))] . op _+_ : NzNat Nat -> NzNat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _+_ : Nat Nat -> Nat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat))] . op sd : Nat Nat -> Nat [comm special ( id-hook CUI_NumberOpSymbol (sd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : NzNat NzNat -> NzNat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : Nat Nat -> Nat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _quo_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _rem_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _^_ : Nat Nat -> Nat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _^_ : NzNat Nat -> NzNat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat))] . op modExp : [Nat] [Nat] [Nat] -> [Nat] [special ( id-hook NumberOpSymbol (modExp) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op lcm : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat))] . op lcm : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat))] . op min : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat))] . op min : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat))] . op max : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat))] . op max : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _xor_ : Nat Nat -> Nat [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _&_ : Nat Nat -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _|_ : NzNat Nat -> NzNat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _|_ : Nat Nat -> Nat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _>>_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _<<_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _<_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzNat Nat -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op g : Nat Nat -> Nat . eq true and A:Bool = A:Bool . eq false and A:Bool = false . eq A:Bool and A:Bool = A:Bool . eq false xor A:Bool = A:Bool . eq A:Bool xor A:Bool = false . eq A:Bool and (B:Bool xor C:Bool) = A:Bool and B:Bool xor A:Bool and C:Bool . eq not A:Bool = true xor A:Bool . eq A:Bool or B:Bool = A:Bool and B:Bool xor A:Bool xor B:Bool . eq A:Bool implies B:Bool = not (A:Bool xor A:Bool and B:Bool) . eq g(A:Nat, B:Nat) = B:Nat + B:Nat + A:Nat + A:Nat . endfm fmod TEST is sorts Bool Zero NzNat Nat . subsorts Zero NzNat < Nat . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op 0 : -> Zero [ctor] . op s_ : Nat -> NzNat [ctor iter prec 15 gather (E) special ( id-hook SuccSymbol term-hook zeroTerm (0))] . op _+_ : NzNat Nat -> NzNat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _+_ : Nat Nat -> Nat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat))] . op sd : Nat Nat -> Nat [comm special ( id-hook CUI_NumberOpSymbol (sd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : NzNat NzNat -> NzNat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : Nat Nat -> Nat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _quo_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _rem_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _^_ : Nat Nat -> Nat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _^_ : NzNat Nat -> NzNat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat))] . op modExp : [Nat] [Nat] [Nat] -> [Nat] [special ( id-hook NumberOpSymbol (modExp) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op lcm : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat))] . op lcm : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat))] . op min : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat))] . op min : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat))] . op max : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat))] . op max : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _xor_ : Nat Nat -> Nat [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _&_ : Nat Nat -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _|_ : NzNat Nat -> NzNat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _|_ : Nat Nat -> Nat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _>>_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _<<_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _<_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzNat Nat -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op g : Nat Nat -> Nat . eq _and_(true, A:Bool) = A:Bool . eq _and_(false, A:Bool) = false . eq _and_(A:Bool, A:Bool) = A:Bool . eq _xor_(false, A:Bool) = A:Bool . eq _xor_(A:Bool, A:Bool) = false . eq _and_(A:Bool, _xor_(B:Bool, C:Bool)) = _xor_(_and_(A:Bool, B:Bool), _and_( A:Bool, C:Bool)) . eq not_(A:Bool) = _xor_(true, A:Bool) . eq _or_(A:Bool, B:Bool) = _xor_(_and_(A:Bool, B:Bool), _xor_(A:Bool, B:Bool)) . eq _implies_(A:Bool, B:Bool) = not_(_xor_(A:Bool, _and_(A:Bool, B:Bool))) . eq g(A:Nat, B:Nat) = _+_(B:Nat, _+_(B:Nat, _+_(A:Nat, A:Nat))) . endfm fmod M{X :: T} is sorts X$Elt Bool . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op f : X$Elt X$Elt -> X$Elt [assoc comm] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op g : X$Elt X$Elt -> X$Elt . var A : X$Elt . var B : X$Elt . eq g(A, B) = f(A, A, B, B) . eq _and_(true, A:Bool) = A:Bool . eq _and_(false, A:Bool) = false . eq _and_(A:Bool, A:Bool) = A:Bool . eq _xor_(false, A:Bool) = A:Bool . eq _xor_(A:Bool, A:Bool) = false . eq _and_(A:Bool, _xor_(B:Bool, C:Bool)) = _xor_(_and_(A:Bool, B:Bool), _and_( A:Bool, C:Bool)) . eq not_(A:Bool) = _xor_(true, A:Bool) . eq _or_(A:Bool, B:Bool) = _xor_(_and_(A:Bool, B:Bool), _xor_(A:Bool, B:Bool)) . eq _implies_(A:Bool, B:Bool) = not_(_xor_(A:Bool, _and_(A:Bool, B:Bool))) . endfm fmod TEST is sorts Bool Zero NzNat Nat NzInt Int . subsorts Zero NzNat NzNat < Nat . subsort NzNat < NzInt . subsorts NzInt Nat < Int . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op 0 : -> Zero [ctor] . op s_ : Nat -> NzNat [ctor iter prec 15 gather (E) special ( id-hook SuccSymbol term-hook zeroTerm (0))] . op _+_ : NzNat Nat -> NzNat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Nat Nat -> Nat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Int Int -> Int [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op sd : Nat Nat -> Nat [comm special ( id-hook CUI_NumberOpSymbol (sd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : NzNat NzNat -> NzNat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Nat Nat -> Nat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : NzInt NzInt -> NzInt [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Int Int -> Int [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Int NzInt -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Int NzInt -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Nat Nat -> Nat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzNat Nat -> NzNat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Int Nat -> Int [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzInt Nat -> NzInt [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op modExp : [Int] [Int] [Int] -> [Int] [special ( id-hook NumberOpSymbol (modExp) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : NzInt Int -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Int Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzInt NzInt -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Int Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzInt NzInt -> NzInt [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Int Int -> Int [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzInt NzInt -> NzInt [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Int Int -> Int [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzNat Int -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Nat Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _xor_ : Nat Nat -> Nat [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _xor_ : Int Int -> Int [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Nat Nat -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Nat Int -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Int Int -> Int [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : NzNat Nat -> NzNat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : Nat Nat -> Nat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : NzInt Int -> NzInt [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : Int Int -> Int [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _>>_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _>>_ : Int Nat -> Int [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<<_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<<_ : Int Nat -> Int [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzNat Nat -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzInt Int -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op -_ : NzNat -> NzInt [ctor prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : NzInt -> NzInt [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : Int -> Int [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _-_ : Int Int -> Int [prec 33 gather (E e) special ( id-hook NumberOpSymbol (-) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : NzInt -> NzNat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : Int -> Nat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op ~_ : Int -> Int [prec 15 gather (E) special ( id-hook NumberOpSymbol (~) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op g : Int Int -> Int . eq _and_(true, A:Bool) = A:Bool . eq _and_(false, A:Bool) = false . eq _and_(A:Bool, A:Bool) = A:Bool . eq _xor_(false, A:Bool) = A:Bool . eq _xor_(A:Bool, A:Bool) = false . eq _and_(A:Bool, _xor_(B:Bool, C:Bool)) = _xor_(_and_(A:Bool, B:Bool), _and_( A:Bool, C:Bool)) . eq not_(A:Bool) = _xor_(true, A:Bool) . eq _or_(A:Bool, B:Bool) = _xor_(_and_(A:Bool, B:Bool), _xor_(A:Bool, B:Bool)) . eq _implies_(A:Bool, B:Bool) = not_(_xor_(A:Bool, _and_(A:Bool, B:Bool))) . eq g(A:Int, B:Int) = _-_(_-_(_-_(A:Int, s_(A:Int)), s_(B:Int)), s_(B:Int)) . endfm fmod TEST is sorts Bool Zero NzNat Nat NzInt Int . subsorts Zero NzNat NzNat < Nat . subsort NzNat < NzInt . subsorts NzInt Nat < Int . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op 0 : -> Zero [ctor] . op s_ : Nat -> NzNat [ctor iter prec 15 gather (E) special ( id-hook SuccSymbol term-hook zeroTerm (0))] . op _+_ : NzNat Nat -> NzNat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Nat Nat -> Nat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _+_ : Int Int -> Int [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op sd : Nat Nat -> Nat [comm special ( id-hook CUI_NumberOpSymbol (sd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : NzNat NzNat -> NzNat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Nat Nat -> Nat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : NzInt NzInt -> NzInt [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _*_ : Int Int -> Int [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _quo_ : Int NzInt -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _rem_ : Int NzInt -> Int [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Nat Nat -> Nat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzNat Nat -> NzNat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : Int Nat -> Int [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _^_ : NzInt Nat -> NzInt [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op modExp : [Int] [Int] [Int] -> [Int] [special ( id-hook NumberOpSymbol (modExp) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : NzInt Int -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op gcd : Int Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : NzInt NzInt -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op lcm : Int Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : NzInt NzInt -> NzInt [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op min : Int Int -> Int [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzInt NzInt -> NzInt [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Int Int -> Int [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : NzNat Int -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op max : Nat Int -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _xor_ : Nat Nat -> Nat [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _xor_ : Int Int -> Int [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Nat Nat -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Nat Int -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _&_ : Int Int -> Int [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : NzNat Nat -> NzNat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : Nat Nat -> Nat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : NzInt Int -> NzInt [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _|_ : Int Int -> Int [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _>>_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _>>_ : Int Nat -> Int [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<<_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<<_ : Int Nat -> Int [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _<_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Int Int -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzNat Nat -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzInt Int -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt) term-hook trueTerm (true) term-hook falseTerm (false))] . op -_ : NzNat -> NzInt [ctor prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : NzInt -> NzInt [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op -_ : Int -> Int [prec 15 gather (E) special ( id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op _-_ : Int Int -> Int [prec 33 gather (E e) special ( id-hook NumberOpSymbol (-) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : NzInt -> NzNat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op abs : Int -> Nat [special ( id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op ~_ : Int -> Int [prec 15 gather (E) special ( id-hook NumberOpSymbol (~) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> NzInt))] . op g : Int Int -> Int . eq _and_(true, A:Bool) = A:Bool . eq _and_(false, A:Bool) = false . eq _and_(A:Bool, A:Bool) = A:Bool . eq _xor_(false, A:Bool) = A:Bool . eq _xor_(A:Bool, A:Bool) = false . eq _and_(A:Bool, _xor_(B:Bool, C:Bool)) = _xor_(_and_(A:Bool, B:Bool), _and_( A:Bool, C:Bool)) . eq not_(A:Bool) = _xor_(true, A:Bool) . eq _or_(A:Bool, B:Bool) = _xor_(_and_(A:Bool, B:Bool), _xor_(A:Bool, B:Bool)) . eq _implies_(A:Bool, B:Bool) = not_(_xor_(A:Bool, _and_(A:Bool, B:Bool))) . eq g(A:Int, B:Int) = _-_(_-_(_-_(A:Int, s_(A:Int)), s_(B:Int)), s_(B:Int)) . endfm fmod M{X :: T} is sorts X$Elt Bool . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op f : X$Elt X$Elt -> X$Elt [assoc comm] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op g : X$Elt X$Elt -> X$Elt . var A : X$Elt . var B : X$Elt . eq g(A, B) = f(A, A, B, B) . eq true and A:Bool = A:Bool . eq false and A:Bool = false . eq A:Bool and A:Bool = A:Bool . eq false xor A:Bool = A:Bool . eq A:Bool xor A:Bool = false . eq A:Bool and (B:Bool xor C:Bool) = A:Bool and B:Bool xor A:Bool and C:Bool . eq not A:Bool = true xor A:Bool . eq A:Bool or B:Bool = A:Bool and B:Bool xor A:Bool xor B:Bool . eq A:Bool implies B:Bool = not (A:Bool xor A:Bool and B:Bool) . endfm fmod TEST is sorts Bool Zero NzNat Nat . subsorts Zero NzNat < Nat . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op 0 : -> Zero [ctor] . op s_ : Nat -> NzNat [ctor iter prec 15 gather (E) special ( id-hook SuccSymbol term-hook zeroTerm (0))] . op _+_ : NzNat Nat -> NzNat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _+_ : Nat Nat -> Nat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat))] . op sd : Nat Nat -> Nat [comm special ( id-hook CUI_NumberOpSymbol (sd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : NzNat NzNat -> NzNat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : Nat Nat -> Nat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _quo_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _rem_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _^_ : Nat Nat -> Nat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _^_ : NzNat Nat -> NzNat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat))] . op modExp : [Nat] [Nat] [Nat] -> [Nat] [special ( id-hook NumberOpSymbol (modExp) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op lcm : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat))] . op lcm : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat))] . op min : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat))] . op min : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat))] . op max : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat))] . op max : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _xor_ : Nat Nat -> Nat [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _&_ : Nat Nat -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _|_ : NzNat Nat -> NzNat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _|_ : Nat Nat -> Nat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _>>_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _<<_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _<_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzNat Nat -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op g : Nat Nat -> Nat . eq true and A:Bool = A:Bool . eq false and A:Bool = false . eq A:Bool and A:Bool = A:Bool . eq false xor A:Bool = A:Bool . eq A:Bool xor A:Bool = false . eq A:Bool and (B:Bool xor C:Bool) = A:Bool and B:Bool xor A:Bool and C:Bool . eq not A:Bool = true xor A:Bool . eq A:Bool or B:Bool = A:Bool and B:Bool xor A:Bool xor B:Bool . eq A:Bool implies B:Bool = not (A:Bool xor A:Bool and B:Bool) . eq g(A:Nat, B:Nat) = if if if A:Nat > A:Nat then A:Nat else A:Nat fi > B:Nat then if A:Nat > A:Nat then A:Nat else A:Nat fi else B:Nat fi > B:Nat then if if A:Nat > A:Nat then A:Nat else A:Nat fi > B:Nat then if A:Nat > A:Nat then A:Nat else A:Nat fi else B:Nat fi else B:Nat fi . endfm fmod TEST is sorts Bool Zero NzNat Nat . subsorts Zero NzNat < Nat . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op 0 : -> Zero [ctor] . op s_ : Nat -> NzNat [ctor iter prec 15 gather (E) special ( id-hook SuccSymbol term-hook zeroTerm (0))] . op _+_ : NzNat Nat -> NzNat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _+_ : Nat Nat -> Nat [assoc comm prec 33 gather (e E) special ( id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat))] . op sd : Nat Nat -> Nat [comm special ( id-hook CUI_NumberOpSymbol (sd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : NzNat NzNat -> NzNat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : Nat Nat -> Nat [assoc comm prec 31 gather (e E) special ( id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _quo_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _rem_ : Nat NzNat -> Nat [prec 31 gather (E e) special ( id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _^_ : Nat Nat -> Nat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _^_ : NzNat Nat -> NzNat [prec 29 gather (E e) special ( id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat))] . op modExp : [Nat] [Nat] [Nat] -> [Nat] [special ( id-hook NumberOpSymbol (modExp) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op lcm : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat))] . op lcm : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat))] . op min : NzNat NzNat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat))] . op min : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat))] . op max : NzNat Nat -> NzNat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat))] . op max : Nat Nat -> Nat [assoc comm special ( id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _xor_ : Nat Nat -> Nat [assoc comm prec 55 gather (e E) special ( id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _&_ : Nat Nat -> Nat [assoc comm prec 53 gather (e E) special ( id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _|_ : NzNat Nat -> NzNat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _|_ : Nat Nat -> Nat [assoc comm prec 57 gather (e E) special ( id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _>>_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _<<_ : Nat Nat -> Nat [prec 35 gather (E e) special ( id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _<_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Nat Nat -> Bool [prec 37 gather (E E) special ( id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzNat Nat -> Bool [prec 51 gather (E E) special ( id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op g : Nat Nat -> Nat . eq _and_(true, A:Bool) = A:Bool . eq _and_(false, A:Bool) = false . eq _and_(A:Bool, A:Bool) = A:Bool . eq _xor_(false, A:Bool) = A:Bool . eq _xor_(A:Bool, A:Bool) = false . eq _and_(A:Bool, _xor_(B:Bool, C:Bool)) = _xor_(_and_(A:Bool, B:Bool), _and_( A:Bool, C:Bool)) . eq not_(A:Bool) = _xor_(true, A:Bool) . eq _or_(A:Bool, B:Bool) = _xor_(_and_(A:Bool, B:Bool), _xor_(A:Bool, B:Bool)) . eq _implies_(A:Bool, B:Bool) = not_(_xor_(A:Bool, _and_(A:Bool, B:Bool))) . eq g(A:Nat, B:Nat) = if_then_else_fi(_>_(if_then_else_fi(_>_(if_then_else_fi( _>_(A:Nat, A:Nat), A:Nat, A:Nat), B:Nat), if_then_else_fi(_>_(A:Nat, A:Nat), A:Nat, A:Nat), B:Nat), B:Nat), if_then_else_fi(_>_(if_then_else_fi( _>_(A:Nat, A:Nat), A:Nat, A:Nat), B:Nat), if_then_else_fi(_>_(A:Nat, A:Nat), A:Nat, A:Nat), B:Nat), B:Nat) . endfm ========================================== reduce in TEST : g(5, 4) . rewrites: 7 result NzNat: 5 Warning: summand module LIST has free parameters. Warning: , line 326 (fmod FOO): this module contains one or more errors that could not be patched up and thus it cannot be used or imported. Warning: Instantiation MAP{STRICT-WEAK-ORDER, Y} uses both a theory-view and a parameter from enclosing module FOO. Warning: , line 339 (fmod FOO): this module contains one or more errors that could not be patched up and thus it cannot be used or imported. Warning: , line 356 (fmod MOD): operator declaration for operation f subsort overloads an operator of the same name from a parameter. Warning: , line 355 (fmod MOD): this module contains one or more errors that could not be patched up and thus it cannot be used or imported. Warning: , line 360 (fmod TEST): unable to use module MOD due to unpatchable errors. Warning: , line 359 (fmod TEST): this module contains one or more errors that could not be patched up and thus it cannot be used or imported. Bye. maude-3.1/tests/Misc/smtTest.expected0000644000175200017520000006501213565216260014632 00000000000000========================================== check in TEST-B : W =/== X and Y . Result from sat solver is: sat ========================================== check in TEST-B : W === X and Y . Result from sat solver is: sat ========================================== check in TEST-B : X =/== true and X =/== Y and Y =/== true . Result from sat solver is: unsat ========================================== check in TEST-B : X =/== true and X =/== Y and Y =/== false . Result from sat solver is: sat ========================================== check in TEST-B : (X xor true) and (X xor Y) and (Y xor true) . Result from sat solver is: unsat ========================================== check in TEST-B : (X xor true) and (X xor Y) and (Y xor false) . Result from sat solver is: sat ========================================== check in TEST-B : not (X or not X) . Result from sat solver is: unsat ========================================== check in TEST-B : not (X implies Y implies X) . Result from sat solver is: unsat ========================================== check in TEST-B : (X ? Y : Z) and (Y implies X) and (Z implies X) . Result from sat solver is: sat ========================================== check in TEST-B : (X ? Y : Z) and (Y implies not X) and (Z implies X) . Result from sat solver is: unsat ========================================== check in TEST-B : X === Y and Y === Z . Result from sat solver is: sat ========================================== check in TEST-B : X === Y and Y === Z and Z =/== X . Result from sat solver is: unsat ========================================== check in TEST-I : I > J and J > K . Result from sat solver is: sat ========================================== check in TEST-I : I > J and J > K and K > I . Result from sat solver is: unsat ========================================== check in TEST-I : I < J and J < K . Result from sat solver is: sat ========================================== check in TEST-I : I < J and J < K and K < I . Result from sat solver is: unsat ========================================== check in TEST-I : I >= J and J >= I . Result from sat solver is: sat ========================================== check in TEST-I : I >= J and J >= I and I =/== J . Result from sat solver is: unsat ========================================== check in TEST-I : I <= J and J <= I . Result from sat solver is: sat ========================================== check in TEST-I : I <= J and J <= I and I =/== J . Result from sat solver is: unsat ========================================== check in TEST-I : I === J + K and I > J and I > K . Result from sat solver is: sat ========================================== check in TEST-I : I === J + K and I > J + K . Result from sat solver is: unsat ========================================== check in TEST-I : I === J + K and I > J + K + L . Result from sat solver is: sat ========================================== check in TEST-I : I === J - K and I > J + K . Result from sat solver is: sat ========================================== check in TEST-I : - I === J - K and I > J + K . Result from sat solver is: sat ========================================== check in TEST-I : I =/== J + K and I > J + K . Result from sat solver is: sat ========================================== check in TEST-I : (I > J ? I : J) >= I and (I > J ? I : J) >= J . Result from sat solver is: sat ========================================== check in TEST-I : (I > J ? I : J) < I . Result from sat solver is: unsat ========================================== check in TEST-I : (I > J ? I : J) === I or (I > J ? I : J) === J . Result from sat solver is: sat ========================================== check in TEST-I : not ((I > J ? I : J) === I or (I > J ? I : J) === J) . Result from sat solver is: unsat ========================================== check in TEST-I : (I > J ? I : J) =/== I and (I > J ? I : J) =/== J . Result from sat solver is: unsat ========================================== check in TEST-R : P > Q and Q > R . Result from sat solver is: sat ========================================== check in TEST-R : P > Q and Q > R and R > P . Result from sat solver is: unsat ========================================== check in TEST-R : P < Q and Q < R . Result from sat solver is: sat ========================================== check in TEST-R : P < Q and Q < R and R < P . Result from sat solver is: unsat ========================================== check in TEST-R : P >= Q and Q >= P . Result from sat solver is: sat ========================================== check in TEST-R : P >= Q and Q >= P and P =/== Q . Result from sat solver is: unsat ========================================== check in TEST-R : P <= Q and Q <= P . Result from sat solver is: sat ========================================== check in TEST-R : P <= Q and Q <= P and P =/== Q . Result from sat solver is: unsat ========================================== check in TEST-R : P === Q + R and P > Q and P > R . Result from sat solver is: sat ========================================== check in TEST-R : P === Q + R and P > Q + R . Result from sat solver is: unsat ========================================== check in TEST-R : P === Q + R and P > Q + R + S . Result from sat solver is: sat ========================================== check in TEST-R : P === Q - R and P > Q + R . Result from sat solver is: sat ========================================== check in TEST-R : - P === Q - R and P > Q + R . Result from sat solver is: sat ========================================== check in TEST-R : P =/== Q + R and P > Q + R . Result from sat solver is: sat ========================================== check in TEST-R : (P > Q ? P : Q) >= P and (P > Q ? P : Q) >= Q . Result from sat solver is: sat ========================================== check in TEST-R : (P > Q ? P : Q) < P . Result from sat solver is: unsat ========================================== check in TEST-R : (P > Q ? P : Q) === P or (P > Q ? P : Q) === Q . Result from sat solver is: sat ========================================== check in TEST-R : not ((P > Q ? P : Q) === P or (P > Q ? P : Q) === Q) . Result from sat solver is: unsat ========================================== check in TEST-R : (P > Q ? P : Q) =/== P and (P > Q ? P : Q) =/== Q . Result from sat solver is: unsat ========================================== check in TEST-RI : isInteger(toReal(I) + toReal(J)) =/== false . Result from sat solver is: sat ========================================== check in TEST-RI : isInteger(toReal(I) + toReal(J)) =/== true . Result from sat solver is: unsat ========================================== check in TEST-RI : toInteger(R) + toInteger(P) === toInteger(R + P) . Result from sat solver is: sat ========================================== check in TEST-RI : not toInteger(R) + toInteger(P) === toInteger(R + P) . Result from sat solver is: sat ========================================== check in TEST-RI : 1/2 < P . Result from sat solver is: sat ========================================== check in TEST-RI : 1/2 < P and P < 3/4 . Result from sat solver is: sat ========================================== check in TEST-RI : 1/2 < P and P < 3/4 and isInteger(P) . Result from sat solver is: unsat ========================================== check in TEST-RI : -2 < I . Result from sat solver is: sat ========================================== check in TEST-RI : -2 < I and -2 * I > -1 . Result from sat solver is: sat ========================================== check in TEST-RI : -2 < I and -2 * I > -1 and I =/== -1 . Result from sat solver is: sat ========================================== check in TEST-RI : -2 < I and -2 * I > -1 and I =/== -1 and I - I =/== I . Result from sat solver is: unsat ========================================== reduce in META-LEVEL : metaCheck(['REAL-INTEGER], '_=_['_+_['1.Integer, '1.Integer],'2.Integer]) . rewrites: 1 result [Bool]: metaCheck(sth 'REAL-INTEGER is including 'REAL-INTEGER . sorts none . none none none none none none none endsth, '_=_['_+_['1.Integer,'1.Integer],'2.Integer]) ========================================== reduce in META-LEVEL : metaCheck(['REAL-INTEGER], '_=_['_+_['1.Integer, '1.Integer],'3.Integer]) . rewrites: 1 result [Bool]: metaCheck(sth 'REAL-INTEGER is including 'REAL-INTEGER . sorts none . none none none none none none none endsth, '_=_['_+_['1.Integer,'1.Integer],'3.Integer]) ========================================== reduce in META-CHECK : metaCheck(['META-CHECK], upTerm((I > J ? I : J) < I)) . rewrites: 3 result Bool: (false).Bool ========================================== reduce in META-CHECK : metaCheck(['META-CHECK], upTerm((I > J ? I : J) > I)) . rewrites: 3 result Bool: (true).Bool ========================================== reduce in META-CHECK : metaCheck(['META-CHECK], upTerm((I > J ? I : J) === I or (I > J ? I : J) === J)) . rewrites: 3 result Bool: (true).Bool ========================================== reduce in META-CHECK : metaCheck(['META-CHECK], upTerm(not ((I > J ? I : J) === I or (I > J ? I : J) === J))) . rewrites: 3 result Bool: (false).Bool ========================================== reduce in META-CHECK : metaCheck(['META-CHECK], upTerm((I > J ? I : J) =/== I and (I > J ? I : J) =/== J)) . rewrites: 3 result Bool: (false).Bool ========================================== reduce in META-CHECK : metaCheck(['META-CHECK], upTerm((I > J ? I : J) =/== I or (I > J ? I : J) =/== J)) . rewrites: 3 result Bool: (true).Bool ========================================== smt-search [10] in MULTI : f(-2, X) =>* Z:State . Solution 1 rewrites: 0 state: f(-2, X) Z:State --> f(-2, X) where true Solution 2 rewrites: 1 state: g(-2 + 1, #1-Y:Foo) Z:State --> g(-2 + 1, #1-Y:Foo) where -2 < 0 No more solutions. rewrites: 1 ========================================== reduce in TEST : metaSmtSearch(['MULTI], upTerm(f(-2, X)), 'Z:State, nil, '*, 1, 1, 0) . rewrites: 4 result SmtResult: {'f['-2.Integer,'X:Foo], 'Z:State <- 'f['-2.Integer,'X:Foo],'true.Boolean,(1).NzNat} ========================================== reduce in TEST : metaSmtSearch(['MULTI], upTerm(f(-2, X)), 'Z:State, nil, '*, 1, 1, 1) . rewrites: 4 result SmtResult: {'g['_+_['-2.Integer,'1.Integer],'#2-Y:Foo], 'Z:State <- 'g['_+_['-2.Integer,'1.Integer],'#2-Y:Foo],'_<_['-2.Integer, '0.Integer],(2).NzNat} ========================================== reduce in TEST : metaSmtSearch(['MULTI], upTerm(f(-2, X)), 'Z:State, nil, '*, 1, 1, 2) . rewrites: 3 result SmtResult?: (failure).SmtResult? ========================================== reduce in TEST : metaSmtSearch(['MULTI], upTerm(f(-2, X)), 'Z:State, nil, '+, 200, 1, 0) . rewrites: 4 result SmtResult: {'g['_+_['-2.Integer,'1.Integer],'#201-Y:Foo], 'Z:State <- 'g['_+_['-2.Integer,'1.Integer],'#201-Y:Foo],'_<_['-2.Integer, '0.Integer],(201).NzNat} ========================================== reduce in TEST : metaSmtSearch(['MULTI], upTerm(f(-2, X)), 'Z:State, nil, '+, 200, 1, 1) . rewrites: 3 result SmtResult?: (failure).SmtResult? ========================================== smt-search [4] in ITEST : f(11) =>1 X . Solution 1 rewrites: 1 state: f(11 + 1) X --> f(11 + 1) where 11 >= 10 and 11 <= 12 Solution 2 rewrites: 2 state: f(11 - 1) X --> f(11 - 1) where 11 >= 10 and 11 <= 12 No more solutions. rewrites: 2 ========================================== smt-search [4] in ITEST : f(11) =>* X . Solution 1 rewrites: 0 state: f(11) X --> f(11) where true Solution 2 rewrites: 1 state: f(11 + 1) X --> f(11 + 1) where 11 >= 10 and 11 <= 12 Solution 3 rewrites: 2 state: f(11 - 1) X --> f(11 - 1) where 11 >= 10 and 11 <= 12 Solution 4 rewrites: 3 state: f(11 + 1 + 1) X --> f(11 + 1 + 1) where 11 >= 10 and 11 <= 12 and (11 + 1 >= 10 and 11 + 1 <= 12) ========================================== smt-search [4] in ITEST : f(11) =>+ X . Solution 1 rewrites: 1 state: f(11 + 1) X --> f(11 + 1) where 11 >= 10 and 11 <= 12 Solution 2 rewrites: 2 state: f(11 - 1) X --> f(11 - 1) where 11 >= 10 and 11 <= 12 Solution 3 rewrites: 3 state: f(11 + 1 + 1) X --> f(11 + 1 + 1) where 11 >= 10 and 11 <= 12 and (11 + 1 >= 10 and 11 + 1 <= 12) Solution 4 rewrites: 4 state: f(11 + 1 - 1) X --> f(11 + 1 - 1) where 11 >= 10 and 11 <= 12 and (11 + 1 >= 10 and 11 + 1 <= 12) ========================================== smt-search [4, 1] in ITEST : f(11) =>+ X . Solution 1 rewrites: 1 state: f(11 + 1) X --> f(11 + 1) where 11 >= 10 and 11 <= 12 Solution 2 rewrites: 2 state: f(11 - 1) X --> f(11 - 1) where 11 >= 10 and 11 <= 12 No more solutions. rewrites: 2 ========================================== smt-search [4, 2] in ITEST : f(11) =>+ X . Solution 1 rewrites: 1 state: f(11 + 1) X --> f(11 + 1) where 11 >= 10 and 11 <= 12 Solution 2 rewrites: 2 state: f(11 - 1) X --> f(11 - 1) where 11 >= 10 and 11 <= 12 Solution 3 rewrites: 3 state: f(11 + 1 + 1) X --> f(11 + 1 + 1) where 11 >= 10 and 11 <= 12 and (11 + 1 >= 10 and 11 + 1 <= 12) Solution 4 rewrites: 4 state: f(11 + 1 - 1) X --> f(11 + 1 - 1) where 11 >= 10 and 11 <= 12 and (11 + 1 >= 10 and 11 + 1 <= 12) Warning: , line 208: didn't expect token [: [ <---*HERE* Warning: , line 208: no parse for command. ========================================== smt-search [4, 1] in ITEST : f(11) =>* X . Solution 1 rewrites: 0 state: f(11) X --> f(11) where true Solution 2 rewrites: 1 state: f(11 + 1) X --> f(11 + 1) where 11 >= 10 and 11 <= 12 Solution 3 rewrites: 2 state: f(11 - 1) X --> f(11 - 1) where 11 >= 10 and 11 <= 12 No more solutions. rewrites: 2 ========================================== smt-search [4, 2] in ITEST : f(11) =>* X . Solution 1 rewrites: 0 state: f(11) X --> f(11) where true Solution 2 rewrites: 1 state: f(11 + 1) X --> f(11 + 1) where 11 >= 10 and 11 <= 12 Solution 3 rewrites: 2 state: f(11 - 1) X --> f(11 - 1) where 11 >= 10 and 11 <= 12 Solution 4 rewrites: 3 state: f(11 + 1 + 1) X --> f(11 + 1 + 1) where 11 >= 10 and 11 <= 12 and (11 + 1 >= 10 and 11 + 1 <= 12) ========================================== smt-search [20] in ITEST : f(11) =>* X . Solution 1 rewrites: 0 state: f(11) X --> f(11) where true Solution 2 rewrites: 1 state: f(11 + 1) X --> f(11 + 1) where 11 >= 10 and 11 <= 12 Solution 3 rewrites: 2 state: f(11 - 1) X --> f(11 - 1) where 11 >= 10 and 11 <= 12 Solution 4 rewrites: 3 state: f(11 + 1 + 1) X --> f(11 + 1 + 1) where 11 >= 10 and 11 <= 12 and (11 + 1 >= 10 and 11 + 1 <= 12) Solution 5 rewrites: 4 state: f(11 + 1 - 1) X --> f(11 + 1 - 1) where 11 >= 10 and 11 <= 12 and (11 + 1 >= 10 and 11 + 1 <= 12) Solution 6 rewrites: 5 state: f(11 - 1 + 1) X --> f(11 - 1 + 1) where 11 >= 10 and 11 <= 12 and (11 - 1 >= 10 and 11 - 1 <= 12) Solution 7 rewrites: 6 state: f(11 - 1 - 1) X --> f(11 - 1 - 1) where 11 >= 10 and 11 <= 12 and (11 - 1 >= 10 and 11 - 1 <= 12) Solution 8 rewrites: 7 state: f(11 + 1 - 1 + 1) X --> f(11 + 1 - 1 + 1) where 11 >= 10 and 11 <= 12 and (11 + 1 >= 10 and 11 + 1 <= 12) and (11 + 1 - 1 >= 10 and 11 + 1 - 1 <= 12) Solution 9 rewrites: 8 state: f(11 + 1 - 1 - 1) X --> f(11 + 1 - 1 - 1) where 11 >= 10 and 11 <= 12 and (11 + 1 >= 10 and 11 + 1 <= 12) and (11 + 1 - 1 >= 10 and 11 + 1 - 1 <= 12) Solution 10 rewrites: 9 state: f(11 - 1 + 1 + 1) X --> f(11 - 1 + 1 + 1) where 11 >= 10 and 11 <= 12 and (11 - 1 >= 10 and 11 - 1 <= 12) and (11 - 1 + 1 >= 10 and 11 - 1 + 1 <= 12) Solution 11 rewrites: 10 state: f(11 - 1 + 1 - 1) X --> f(11 - 1 + 1 - 1) where 11 >= 10 and 11 <= 12 and (11 - 1 >= 10 and 11 - 1 <= 12) and (11 - 1 + 1 >= 10 and 11 - 1 + 1 <= 12) Solution 12 rewrites: 11 state: f(11 + 1 - 1 + 1 + 1) X --> f(11 + 1 - 1 + 1 + 1) where 11 >= 10 and 11 <= 12 and (11 + 1 >= 10 and 11 + 1 <= 12) and (11 + 1 - 1 >= 10 and 11 + 1 - 1 <= 12) and (11 + 1 - 1 + 1 >= 10 and 11 + 1 - 1 + 1 <= 12) Solution 13 rewrites: 12 state: f(11 + 1 - 1 + 1 - 1) X --> f(11 + 1 - 1 + 1 - 1) where 11 >= 10 and 11 <= 12 and (11 + 1 >= 10 and 11 + 1 <= 12) and (11 + 1 - 1 >= 10 and 11 + 1 - 1 <= 12) and (11 + 1 - 1 + 1 >= 10 and 11 + 1 - 1 + 1 <= 12) Solution 14 rewrites: 13 state: f(11 + 1 - 1 - 1 + 1) X --> f(11 + 1 - 1 - 1 + 1) where 11 >= 10 and 11 <= 12 and (11 + 1 >= 10 and 11 + 1 <= 12) and (11 + 1 - 1 >= 10 and 11 + 1 - 1 <= 12) and (11 + 1 - 1 - 1 >= 10 and 11 + 1 - 1 - 1 <= 12) Solution 15 rewrites: 14 state: f(11 + 1 - 1 - 1 - 1) X --> f(11 + 1 - 1 - 1 - 1) where 11 >= 10 and 11 <= 12 and (11 + 1 >= 10 and 11 + 1 <= 12) and (11 + 1 - 1 >= 10 and 11 + 1 - 1 <= 12) and (11 + 1 - 1 - 1 >= 10 and 11 + 1 - 1 - 1 <= 12) Solution 16 rewrites: 15 state: f(11 - 1 + 1 + 1 + 1) X --> f(11 - 1 + 1 + 1 + 1) where 11 >= 10 and 11 <= 12 and (11 - 1 >= 10 and 11 - 1 <= 12) and (11 - 1 + 1 >= 10 and 11 - 1 + 1 <= 12) and (11 - 1 + 1 + 1 >= 10 and 11 - 1 + 1 + 1 <= 12) Solution 17 rewrites: 16 state: f(11 - 1 + 1 + 1 - 1) X --> f(11 - 1 + 1 + 1 - 1) where 11 >= 10 and 11 <= 12 and (11 - 1 >= 10 and 11 - 1 <= 12) and (11 - 1 + 1 >= 10 and 11 - 1 + 1 <= 12) and (11 - 1 + 1 + 1 >= 10 and 11 - 1 + 1 + 1 <= 12) Solution 18 rewrites: 17 state: f(11 - 1 + 1 - 1 + 1) X --> f(11 - 1 + 1 - 1 + 1) where 11 >= 10 and 11 <= 12 and (11 - 1 >= 10 and 11 - 1 <= 12) and (11 - 1 + 1 >= 10 and 11 - 1 + 1 <= 12) and (11 - 1 + 1 - 1 >= 10 and 11 - 1 + 1 - 1 <= 12) Solution 19 rewrites: 18 state: f(11 - 1 + 1 - 1 - 1) X --> f(11 - 1 + 1 - 1 - 1) where 11 >= 10 and 11 <= 12 and (11 - 1 >= 10 and 11 - 1 <= 12) and (11 - 1 + 1 >= 10 and 11 - 1 + 1 <= 12) and (11 - 1 + 1 - 1 >= 10 and 11 - 1 + 1 - 1 <= 12) Solution 20 rewrites: 19 state: f(11 + 1 - 1 + 1 - 1 + 1) X --> f(11 + 1 - 1 + 1 - 1 + 1) where 11 >= 10 and 11 <= 12 and (11 + 1 >= 10 and 11 + 1 <= 12) and (11 + 1 - 1 >= 10 and 11 + 1 - 1 <= 12) and (11 + 1 - 1 + 1 >= 10 and 11 + 1 - 1 + 1 <= 12) and (11 + 1 - 1 + 1 - 1 >= 10 and 11 + 1 - 1 + 1 - 1 <= 12) ========================================== smt-search [4] in ITEST : f(J) =>* X . Solution 1 rewrites: 0 state: f(J) X --> f(J) where true Solution 2 rewrites: 1 state: f(J + 1) X --> f(J + 1) where J >= 10 and J <= 12 Solution 3 rewrites: 2 state: f(J - 1) X --> f(J - 1) where J >= 10 and J <= 12 Solution 4 rewrites: 3 state: f(J + 1 + 1) X --> f(J + 1 + 1) where J >= 10 and J <= 12 and (J + 1 >= 10 and J + 1 <= 12) ========================================== smt-search [4] in ITEST : f(J) =>* f(J) . Solution 1 rewrites: 0 state: f(J) empty substitution where true and J === J Solution 2 rewrites: 4 state: f(J + 1 - 1) empty substitution where J >= 10 and J <= 12 and (J + 1 >= 10 and J + 1 <= 12) and J === J + 1 - 1 Solution 3 rewrites: 5 state: f(J - 1 + 1) empty substitution where J >= 10 and J <= 12 and (J - 1 >= 10 and J - 1 <= 12) and J === J - 1 + 1 Solution 4 rewrites: 16 state: f(J + 1 + 1 - 1 - 1) empty substitution where J >= 10 and J <= 12 and (J + 1 >= 10 and J + 1 <= 12) and (J + 1 + 1 >= 10 and J + 1 + 1 <= 12) and (J + 1 + 1 - 1 >= 10 and J + 1 + 1 - 1 <= 12) and J === J + 1 + 1 - 1 - 1 ========================================== smt-search [4] in ITEST : f(J) =>* f(K) such that J = K . Solution 1 rewrites: 0 state: f(J) empty substitution where J === K and K === J Solution 2 rewrites: 4 state: f(J + 1 - 1) empty substitution where J === K and (J >= 10 and J <= 12) and (J + 1 >= 10 and J + 1 <= 12) and K === J + 1 - 1 Solution 3 rewrites: 5 state: f(J - 1 + 1) empty substitution where J === K and (J >= 10 and J <= 12) and (J - 1 >= 10 and J - 1 <= 12) and K === J - 1 + 1 Solution 4 rewrites: 16 state: f(J + 1 + 1 - 1 - 1) empty substitution where J === K and (J >= 10 and J <= 12) and (J + 1 >= 10 and J + 1 <= 12) and ( J + 1 + 1 >= 10 and J + 1 + 1 <= 12) and (J + 1 + 1 - 1 >= 10 and J + 1 + 1 - 1 <= 12) and K === J + 1 + 1 - 1 - 1 ========================================== smt-search [1] in ITEST : f(11) =>1 X . Solution 1 rewrites: 1 state: f(11 + 1) X --> f(11 + 1) where 11 >= 10 and 11 <= 12 Solution 2 rewrites: 1 state: f(11 - 1) X --> f(11 - 1) where 11 >= 10 and 11 <= 12 No more solutions. rewrites: 1 ========================================== smt-search [1] in ITEST : f(11) =>* X . Solution 1 rewrites: 0 state: f(11) X --> f(11) where true Solution 2 rewrites: 1 state: f(11 + 1) X --> f(11 + 1) where 11 >= 10 and 11 <= 12 Solution 3 rewrites: 2 state: f(11 - 1) X --> f(11 - 1) where 11 >= 10 and 11 <= 12 Solution 4 rewrites: 1 state: f(11 + 1 + 1) X --> f(11 + 1 + 1) where 11 >= 10 and 11 <= 12 and (11 + 1 >= 10 and 11 + 1 <= 12) Solution 5 rewrites: 1 state: f(11 + 1 - 1) X --> f(11 + 1 - 1) where 11 >= 10 and 11 <= 12 and (11 + 1 >= 10 and 11 + 1 <= 12) ========================================== debug smt-search [4] in ITEST : f(11) =>+ X . *********** rule crl f(I) => f(I + 1) if I >= 10 = true /\ I <= 12 = true . I --> 11 f(11) ---> f(11 + 1) Solution 1 rewrites: 1 state: f(11 + 1) X --> f(11 + 1) where 11 >= 10 and 11 <= 12 *********** rule crl f(I) => f(I - 1) if I >= 10 = true /\ I <= 12 = true . I --> 11 f(11) ---> f(11 - 1) Solution 2 rewrites: 2 state: f(11 - 1) X --> f(11 - 1) where 11 >= 10 and 11 <= 12 *********** rule crl f(I) => f(I + 1) if I >= 10 = true /\ I <= 12 = true . I --> 11 + 1 f(11 + 1) ---> f(11 + 1 + 1) Solution 3 rewrites: 3 state: f(11 + 1 + 1) X --> f(11 + 1 + 1) where 11 >= 10 and 11 <= 12 and (11 + 1 >= 10 and 11 + 1 <= 12) Solution 4 rewrites: 4 state: f(11 + 1 - 1) X --> f(11 + 1 - 1) where 11 >= 10 and 11 <= 12 and (11 + 1 >= 10 and 11 + 1 <= 12) ========================================== smt-search [4] in ITEST : f(J) =>* f(K) such that J = K . Solution 1 rewrites: 0 state: f(J) empty substitution where J === K and K === J Solution 2 rewrites: 4 state: f(J + 1 - 1) empty substitution where J === K and (J >= 10 and J <= 12) and (J + 1 >= 10 and J + 1 <= 12) and K === J + 1 - 1 Solution 3 rewrites: 5 state: f(J - 1 + 1) empty substitution where J === K and (J >= 10 and J <= 12) and (J - 1 >= 10 and J - 1 <= 12) and K === J - 1 + 1 Solution 4 rewrites: 16 state: f(J + 1 + 1 - 1 - 1) empty substitution where J === K and (J >= 10 and J <= 12) and (J + 1 >= 10 and J + 1 <= 12) and ( J + 1 + 1 >= 10 and J + 1 + 1 <= 12) and (J + 1 + 1 - 1 >= 10 and J + 1 + 1 - 1 <= 12) and K === J + 1 + 1 - 1 - 1 *********** rule crl f(I) => f(I + 1) if I >= 10 = true /\ I <= 12 = true . I --> J + 1 - 1 + 1 f(J + 1 - 1 + 1) ---> f(J + 1 - 1 + 1 + 1) Solution 5 rewrites: 2 state: f(J + 1 - 1 + 1 - 1) empty substitution where J === K and (J >= 10 and J <= 12) and (J + 1 >= 10 and J + 1 <= 12) and ( J + 1 - 1 >= 10 and J + 1 - 1 <= 12) and (J + 1 - 1 + 1 >= 10 and J + 1 - 1 + 1 <= 12) and K === J + 1 - 1 + 1 - 1 ========================================== reduce in TEST2 : metaSmtSearch(['ITEST], upTerm(f(J)), upTerm(f(K)), 'J:Integer = 'K:Integer, '*, 42, 2, 0) . rewrites: 5 result SmtResult: {'f['J:Integer],(none).Substitution,'_and_['_===_['J:Integer, 'K:Integer],'_===_['K:Integer,'J:Integer]],(42).NzNat} ========================================== reduce in TEST2 : metaSmtSearch(['ITEST], upTerm(f(J)), upTerm(f(K)), 'J:Integer = 'K:Integer, '*, 42, 2, 1) . rewrites: 5 result SmtResult: {'f['_-_['_+_['J:Integer,'1.Integer],'1.Integer]],( none).Substitution,'_and_['_and_['_and_['_===_['J:Integer,'K:Integer], '_and_['_>=_['J:Integer,'10.Integer],'_<=_['J:Integer,'12.Integer]]], '_and_['_>=_['_+_['J:Integer,'1.Integer],'10.Integer],'_<=_['_+_[ 'J:Integer,'1.Integer],'12.Integer]]],'_===_['K:Integer,'_-_['_+_[ 'J:Integer,'1.Integer],'1.Integer]]],(42).NzNat} ========================================== reduce in TEST2 : metaSmtSearch(['ITEST], upTerm(f(J)), upTerm(f(K)), 'J:Integer = 'K:Integer, '*, 42, 2, 2) . rewrites: 5 result SmtResult: {'f['_+_['_-_['J:Integer,'1.Integer],'1.Integer]],( none).Substitution,'_and_['_and_['_and_['_===_['J:Integer,'K:Integer], '_and_['_>=_['J:Integer,'10.Integer],'_<=_['J:Integer,'12.Integer]]], '_and_['_>=_['_-_['J:Integer,'1.Integer],'10.Integer],'_<=_['_-_[ 'J:Integer,'1.Integer],'12.Integer]]],'_===_['K:Integer,'_+_['_-_[ 'J:Integer,'1.Integer],'1.Integer]]],(42).NzNat} ========================================== reduce in TEST2 : metaSmtSearch(['ITEST], upTerm(f(J)), upTerm(f(K)), 'J:Integer = 'K:Integer, '*, 42, 2, 3) . rewrites: 4 result SmtResult?: (failure).SmtResult? ========================================== reduce in TEST2 : metaSmtSearch(['ITEST], upTerm(f(J)), upTerm(f(K)), 'J:Integer = 'K:Integer, '*, 42, unbounded, 3) . rewrites: 8 result SmtResult: {'f['_-_['_-_['_+_['_+_['J:Integer,'1.Integer],'1.Integer], '1.Integer],'1.Integer]],(none).Substitution,'_and_['_and_['_and_['_and_[ '_and_['_===_['J:Integer,'K:Integer],'_and_['_>=_['J:Integer,'10.Integer], '_<=_['J:Integer,'12.Integer]]],'_and_['_>=_['_+_['J:Integer,'1.Integer], '10.Integer],'_<=_['_+_['J:Integer,'1.Integer],'12.Integer]]],'_and_['_>=_[ '_+_['_+_['J:Integer,'1.Integer],'1.Integer],'10.Integer],'_<=_['_+_['_+_[ 'J:Integer,'1.Integer],'1.Integer],'12.Integer]]],'_and_['_>=_['_-_['_+_[ '_+_['J:Integer,'1.Integer],'1.Integer],'1.Integer],'10.Integer],'_<=_[ '_-_['_+_['_+_['J:Integer,'1.Integer],'1.Integer],'1.Integer], '12.Integer]]],'_===_['K:Integer,'_-_['_-_['_+_['_+_['J:Integer, '1.Integer],'1.Integer],'1.Integer],'1.Integer]]],(42).NzNat} Warning: , line 282 (mod COLLAPSE-AXIOM): operator bad has a collapse axiom. Warning: , line 280 (mod COLLAPSE-AXIOM): module COLLAPSE-AXIOM does not satisfy restrictions for rewriting modulo SMT. Warning: , line 297 (mod COLLAPSE-AXIOM2): polymorphic operator bad has a collapse axiom. Warning: , line 295 (mod COLLAPSE-AXIOM2): module COLLAPSE-AXIOM2 does not satisfy restrictions for rewriting modulo SMT. Warning: , line 319 (mod SMT-OP-IN-LHS): left-hand side of rule crl f(h(X), h(Y + 1)) => g(h(X)) if X = Y . contains SMT symbol _+_. Warning: , line 310 (mod SMT-OP-IN-LHS): module SMT-OP-IN-LHS does not satisfy restrictions for rewriting modulo SMT. Warning: , line 333 (mod NONLINEAR-VAR-IN-LHS): left-hand side of rule crl f(h(X), h(X)) => g(h(X)) if X = 1 . contains a nonlinear variable X. Warning: , line 324 (mod NONLINEAR-VAR-IN-LHS): module NONLINEAR-VAR-IN-LHS does not satisfy restrictions for rewriting modulo SMT. Warning: , line 338 (mod EQ-AND-MB-NO_RULES): module EQ-AND-MB-NO_RULES has equations. Warning: , line 338 (mod EQ-AND-MB-NO_RULES): module EQ-AND-MB-NO_RULES has membership axioms. Warning: , line 338 (mod EQ-AND-MB-NO_RULES): module EQ-AND-MB-NO_RULES has no rules. Warning: , line 338 (mod EQ-AND-MB-NO_RULES): module EQ-AND-MB-NO_RULES does not satisfy restrictions for rewriting modulo SMT. Warning: , line 368: pattern contains a nonlinear variable C. Warning: , line 371: pattern contains SMT symbol _+_. Bye. maude-3.1/tests/Misc/renaming.maude0000644000175200017520000000276410256611736014267 00000000000000set show timing off . fmod FOO is sorts Foo Bar . subsort Foo < Bar . endfm fmod BAR is inc FOO * (sort Foo to Baz, sort Bar to Quux) . endfm show mod . show all . fmod ONE is sorts Foo Bar . subsort Foo < Bar . endfm fmod TWO is inc ONE * (sort Foo to Baz) . sort Quux . subsort Quux < Baz . endfm fmod THREE is inc TWO * (sort Foo to Foo', sort Baz to Baz', sort Quux to Quux') . sort Jaz . subsort Jaz < Baz' . endfm show mod . show all . fmod FOO is sorts Foo Bar . subsort Foo < Bar . op a : -> Foo . endfm fmod BAR is inc FOO * (sort Foo to Baz, op a to b) . endfm show mod . show all . fmod FOO' is sorts Foo Bar Baz . subsort Foo < Bar . op a : -> Baz . op _+_ : Foo Foo -> Foo [prec 31 gather (e E) assoc comm] . op _+_ : Baz Baz -> Foo [prec 31 gather (e E)] . endfm fmod BAR' is inc FOO' * ( sort Foo to Quux, op _+_ : Foo Foo -> Foo to _*_ [prec 29 gather (E e)], op _+_ : Baz Baz -> Foo to _._ [prec 27 gather (E e)] ) . endfm show mod . show all . red a . a * a . a . fmod BAR'' is inc FOO' * ( sort Foo to Quux, op _+_ to _*_ [prec 29 gather (E E)] ) . endfm show mod . show all . red a * a * a * a . red (a * a) * (a * a) . *** Check splitting renaming over bashed together ops fmod DIFF is sorts Foo Bar . op f : Foo -> Foo . op f : Bar -> Bar . endfm fmod BASH is inc DIFF . subsort Foo < Bar . endfm fmod TEST is inc BASH * (op f : Foo -> Foo to g) . endfm show mod . show all . show modules . maude-3.1/tests/Misc/variantUnification.maude0000644000175200017520000000250412006070203016273 00000000000000set show timing off . fmod FOO is sort Foo . ops a b c d e : -> Foo . ops f g h : Foo Foo -> Foo . op 1f : -> Foo . vars W X Y Z A B C D : Foo . eq f(X, 1f) = X [variant] . eq f(1f, X) = X [variant] . endfm variant unify f(X, g(Y, Z)) =? f(X, g(Y, Z)) . variant unify g(f(X, Y), Z) =? g(a, g(A, B)) . variant unify f(1f, g(Y, Z)) =? g(Y, Z) . variant unify g(f(X, Y), Z) =? g(A, f(B, C)) . fmod LEFT-ID is sorts Elt Magma . subsort Elt < Magma . op __ : Magma Magma -> Magma [gather(E e)] . ops a b c d e : -> Elt . var X : [Magma] . eq e X = X [variant] . endfm variant unify X:Magma a =? Y:Magma a a . variant unify a X:Magma =? a a Y:Magma . fmod RIGHT-ID is sorts Elt Magma . subsort Elt < Magma . op __ : Magma Magma -> Magma [gather(e E)] . ops a b c d e : -> Elt . var X : [Magma] . eq X e = X [variant] . endfm variant unify X:Magma a =? Y:Magma a a . variant unify a X:Magma =? a a Y:Magma . fmod XOR is sort XOR . sort Elem . ops cst1 cst2 cst3 cst4 : -> Elem . subsort Elem < XOR . op _+_ : XOR XOR -> XOR [ctor assoc comm] . op 0 : -> XOR . vars X Y : XOR . eq Y + 0 = Y [variant] . eq X + X = 0 [variant] . eq X + X + Y = Y [variant] . endfm variant unify X:XOR + cst1 =? Y:XOR + cst2 . variant unify X:XOR + cst1 =? Y:XOR + cst2 such that X:XOR + cst1 irreducible . maude-3.1/tests/Misc/dekker0000755000175200017520000000032410511603007012615 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/dekker.maude -no-banner -no-advise \ > dekker.out 2>&1 diff $srcdir/dekker.expected dekker.out > /dev/null 2>&1 maude-3.1/tests/Misc/parameterization0000755000175200017520000000037410511603071014734 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/parameterization.maude -no-banner -no-advise \ > parameterization.out 2>&1 diff $srcdir/parameterization.expected parameterization.out > /dev/null 2>&1 maude-3.1/tests/Misc/unification3.expected0000644000175200017520000000300013703743156015552 00000000000000========================================== unify in FOO : X:Big =? h(f(Y:Big, Z:Big)) . Unifier 1 X:Big --> h(1f) Z:Big --> 1f Y:Big --> 1f Unifier 2 X:Big --> h(#1:Small) Z:Big --> #1:Small Y:Big --> 1f Unifier 3 X:Big --> h(#1:Small) Z:Big --> 1f Y:Big --> #1:Small ========================================== unify in FOO1 : X:Small =? f(Y:Big, Z:Big) . Unifier 1 X:Small --> #1:Small Z:Big --> #1:Small Y:Big --> 1f Unifier 2 X:Small --> #1:Small Z:Big --> 1f Y:Big --> #1:Small Unifier 3 X:Small --> f(#1:Small, #2:Small) Z:Big --> #1:Small Y:Big --> #2:Small ========================================== unify in FOO2 : X:Small =? f(g(Y:Small), Z:Small) . Unifier 1 X:Small --> #1:Small Z:Small --> #1:Small Y:Small --> a ========================================== unify in FOO3 : X:Small =? f(g(Y:Big), Z:Small) . Unifier 1 X:Small --> #1:Small Z:Small --> #1:Small Y:Big --> a Unifier 2 X:Small --> f(#1:Small, g(#2:Small)) Z:Small --> #1:Small Y:Big --> #2:Small ========================================== unify in FOO4 : X:Small =? f(g(Y:Big), Z:Small) . Unifier 1 X:Small --> #1:Small Z:Small --> #1:Small Y:Big --> g^999999(a) ========================================== unify in FOO5 : X:Small =? f(g(Y:Big), Z:Small) . Unifier 1 X:Small --> #1:Small Z:Small --> #1:Small Y:Big --> g^999999(a) Unifier 2 X:Small --> f(#1:Small, g(#2:Small)) Z:Small --> #1:Small Y:Big --> #2:Small ========================================== unify in FOO6 : X:Big =? h(f(Y:Big, Y:Big)) . Unifier 1 X:Big --> h(1f) Y:Big --> 1f Bye. maude-3.1/tests/Misc/renaming0000755000175200017520000000033410511603114013150 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/renaming.maude -no-banner -no-advise \ > renaming.out 2>&1 diff $srcdir/renaming.expected renaming.out > /dev/null 2>&1 maude-3.1/tests/Misc/attributes0000755000175200017520000000034411064250617013551 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/attributes.maude -no-banner -no-advise \ > attributes.out 2>&1 diff $srcdir/attributes.expected attributes.out > /dev/null 2>&1 maude-3.1/tests/Misc/diophantine.maude0000644000175200017520000000112410321336430014742 00000000000000set show timing off . load linear *** 10 solution system from Domenjoud LNCS 520 red natSystemSolve( ( (0,0) |-> 1 ; (0,1) |-> 2 ; (0,2) |-> -3 ; (0,3) |-> -2 ; (0,4) |-> -4 ; (1,0) |-> 2 ; (1,1) |-> -1 ; (1,2) |-> -3 ; (1,3) |-> 2 ; (1,4) |-> 5 ), zeroVector, "cd" ) . *** sailors and monkey from Contejean and Devie 1994 red natSystemSolve( ( (0,0) |-> 1 ; (0,1) |-> -5 ; (1,1) |-> 4 ; (1,2) |-> -5 ; (2,2) |-> 4 ; (2,3) |-> -5 ; (3,3) |-> 4 ; (3,4) |-> -5 ; (4,4) |-> 4 ; (4,5) |-> -5 ; (5,5) |-> 4 ; (5,6) |-> -5 ), (0 |-> 1 ; 1 |-> 1 ; 2 |-> 1 ; 3 |-> 1 ; 4 |-> 1 ; 5 |-> 1), "gcd" ) . maude-3.1/tests/Misc/parameterizedView0000755000175200017520000000040013473366365015061 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/parameterizedView.maude -no-banner -no-advise \ > parameterizedView.out 2>&1 diff $srcdir/parameterizedView.expected parameterizedView.out > /dev/null 2>&1 maude-3.1/tests/Misc/continue.maude0000644000175200017520000000500113731027110014262 00000000000000set show timing off . set show advisories off . *** *** Test continue and debug options with various commands. *** *** *** rewriting search *** mod COLLATZ is pr RAT . sort Foo . op f : Nat -> Foo . var N : Nat . crl f(N) => f(N / 2) if N rem 2 = 0 . crl f(N) => f(3 * N + 1) if N rem 2 = 1 . endm debug search [10] f(27) =>+ f(N) . step . step . resume . debug cont 10 . step . resume . cont . *** *** variant generation *** fmod XOR is sort XOR . sort Elem . ops cst1 cst2 cst3 cst4 : -> Elem . subsort Elem < XOR . op _+_ : XOR XOR -> XOR [ctor assoc comm] . op 0 : -> XOR . op a : -> XOR . vars X Y : XOR . eq Y + 0 = Y [variant] . eq X + X = 0 [variant] . eq X + X + Y = Y [variant] . endfm get variants [1] in XOR : X:XOR + cst1 . debug cont 1 . step . resume . cont . *** *** variant unification *** variant unify [2] X:XOR + cst1 =? Y:XOR + cst2 . debug cont 3 . step . step . resume . cont . variant unify [1] X:XOR + cst1 =? Y:XOR + cst2 such that X:XOR + cst1 irreducible . cont 1 . cont 1 . cont 1 . *** *** regular narrowing *** mod FOO is sort Foo . op f : Foo Foo -> Foo [assoc] . var X Y Z W A B C D : Foo . rl f(X, Y, Y, Z) => f(X, Y, Z) [narrowing] . endm debug narrow [5, 1] f(A, A) =>+ C . step . resume . debug cont 5 . resume . cont 5 . *** *** narrowing with variant unification. *** mod BAZ is sort Foo . ops f g h : Foo -> Foo . ops i j k : Foo Foo -> Foo . vars X Y Z W A B C D : Foo . eq j(f(X), Y) = i(f(Y), X) [variant] . rl g(i(X, k(Y, Z))) => f(k(Z, X)) [narrowing] . rl f(k(X, X)) => h(X) [narrowing] . endm debug vu-narrow [2] in BAZ : g(j(A, B)) =>* C . resume . debug cont 1 . step . resume . cont 2 . cont . *** *** rewriting with strategies *** mod FOO3 is sort Foo . ops a b c d e : -> Foo . ops f g : Foo Foo -> Foo [comm]. ops h i : Foo -> Bool . vars X Y Z : Foo . crl f(X, Y) => g(X, Z) if h(X) => i(Z) [label 1] . eq h(a) = i(d) . eq h(b) = i(e) . endm debug srew [1] f(a, b) using 1{all *} . step . resume . debug cont 1 . step . cont . *** *** variant matching. *** fmod XOR is sort XOR . sort Elem . ops a b c d w x y z : -> Elem . subsort Elem < XOR . op _+_ : XOR XOR -> XOR [ctor assoc comm] . op 0 : -> XOR . vars X Y : XOR . eq Y + 0 = Y [variant] . eq X + X = 0 [variant] . eq X + X + Y = Y [variant] . endfm debug variant match [1] in XOR : X + Y <=? c + d . step . resume . *** No point in trying "debug cont" because all rewriting/narrowing *** has be done at this stage. cont 2 . cont . maude-3.1/tests/Misc/unification2.expected0000644000175200017520000012051613703743124015560 00000000000000========================================== unify in TEST : g(f(X, X, Y, Y, h(Z)), f(X, Y, Y, Z, Z)) =? g(f(A, A, A, B, C), f(A, B, B, h(C))) . Unifier 1 X --> f(#1:Foo, #1:Foo, #1:Foo, #1:Foo, #2:Foo, #2:Foo, #2:Foo, #3:Foo, #3:Foo, #3:Foo, #4:Foo, #4:Foo, #4:Foo, #4:Foo, #4:Foo, #5:Foo, #5:Foo, #5:Foo, #5:Foo, #6:Foo, #6:Foo, #6:Foo, #7:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f( #3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo))))) Y --> f(#7:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #12:Foo, #14:Foo) Z --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo))) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo, #4:Foo, #4:Foo, #5:Foo, #5:Foo, #6:Foo, #7:Foo, #8:Foo, #8:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f( #1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo))))) B --> f(#1:Foo, #1:Foo, #2:Foo, #2:Foo, #2:Foo, #3:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo, #7:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #9:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #10:Foo, #11:Foo, #11:Foo, #12:Foo, #12:Foo, #13:Foo, #14:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo))) C --> f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo) Unifier 2 X --> f(#1:Foo, #1:Foo, #1:Foo, #1:Foo, #2:Foo, #2:Foo, #2:Foo, #3:Foo, #3:Foo, #3:Foo, #4:Foo, #4:Foo, #4:Foo, #4:Foo, #4:Foo, #5:Foo, #5:Foo, #5:Foo, #5:Foo, #6:Foo, #6:Foo, #6:Foo, #7:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo)), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo))) Y --> f(#7:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #12:Foo, #14:Foo) Z --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo, #4:Foo, #4:Foo, #5:Foo, #5:Foo, #6:Foo, #7:Foo, #8:Foo, #8:Foo, h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo)), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo))) B --> f(#1:Foo, #1:Foo, #2:Foo, #2:Foo, #2:Foo, #3:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo, #7:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #9:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #10:Foo, #11:Foo, #11:Foo, #12:Foo, #12:Foo, #13:Foo, #14:Foo) C --> f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo) Unifier 3 X --> f(#1:Foo, #1:Foo, #1:Foo, #1:Foo, #2:Foo, #2:Foo, #2:Foo, #3:Foo, #3:Foo, #3:Foo, #4:Foo, #4:Foo, #4:Foo, #4:Foo, #4:Foo, #5:Foo, #5:Foo, #5:Foo, #5:Foo, #6:Foo, #6:Foo, #6:Foo, #7:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f( #3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo))) Y --> f(#7:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #12:Foo, #14:Foo, h(f( #1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)))), h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)))), h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)))), h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo))))) Z --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo))) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo, #4:Foo, #4:Foo, #5:Foo, #5:Foo, #6:Foo, #7:Foo, #8:Foo, #8:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f( #1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)))), h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo))))) B --> f(#1:Foo, #1:Foo, #2:Foo, #2:Foo, #2:Foo, #3:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo, #7:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #9:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #10:Foo, #11:Foo, #11:Foo, #12:Foo, #12:Foo, #13:Foo, #14:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo, h(f( #3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)))), h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)))), h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo))))) C --> f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo) Unifier 4 X --> f(#1:Foo, #1:Foo, #1:Foo, #1:Foo, #2:Foo, #2:Foo, #2:Foo, #3:Foo, #3:Foo, #3:Foo, #4:Foo, #4:Foo, #4:Foo, #4:Foo, #4:Foo, #5:Foo, #5:Foo, #5:Foo, #5:Foo, #6:Foo, #6:Foo, #6:Foo, #7:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f( #3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo))) Y --> f(#7:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #12:Foo, #14:Foo, h(f( #1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo)), h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo)), h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo)), h(f( #1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo))) Z --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo, #4:Foo, #4:Foo, #5:Foo, #5:Foo, #6:Foo, #7:Foo, #8:Foo, #8:Foo, h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo)), h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo)), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo))) B --> f(#1:Foo, #1:Foo, #2:Foo, #2:Foo, #2:Foo, #3:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo, #7:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #9:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #10:Foo, #11:Foo, #11:Foo, #12:Foo, #12:Foo, #13:Foo, #14:Foo, h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo)), h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo)), h(f( #1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo))) C --> f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo) Unifier 5 X --> f(#1:Foo, #1:Foo, #1:Foo, #1:Foo, #2:Foo, #2:Foo, #2:Foo, #3:Foo, #3:Foo, #3:Foo, #4:Foo, #4:Foo, #4:Foo, #4:Foo, #4:Foo, #5:Foo, #5:Foo, #5:Foo, #5:Foo, #6:Foo, #6:Foo, #6:Foo, #7:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo))) Y --> f(#7:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #12:Foo, #14:Foo, h(f( #3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo))) Z --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo, #4:Foo, #4:Foo, #5:Foo, #5:Foo, #6:Foo, #7:Foo, #8:Foo, #8:Foo, h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo)), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo))) B --> f(#1:Foo, #1:Foo, #2:Foo, #2:Foo, #2:Foo, #3:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo, #7:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #9:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #10:Foo, #11:Foo, #11:Foo, #12:Foo, #12:Foo, #13:Foo, #14:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo))) C --> f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo) Unifier 6 X --> f(#1:Foo, #1:Foo, #1:Foo, #1:Foo, #2:Foo, #2:Foo, #2:Foo, #3:Foo, #3:Foo, #3:Foo, #4:Foo, #4:Foo, #4:Foo, #4:Foo, #4:Foo, #5:Foo, #5:Foo, #5:Foo, #5:Foo, #6:Foo, #6:Foo, #6:Foo, #7:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo) Y --> f(#7:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #12:Foo, #14:Foo, h(f( #1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo)), h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo)), h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo)), h(f( #1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo)), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo))) Z --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo, #4:Foo, #4:Foo, #5:Foo, #5:Foo, #6:Foo, #7:Foo, #8:Foo, #8:Foo, h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo)), h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo)), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo))) B --> f(#1:Foo, #1:Foo, #2:Foo, #2:Foo, #2:Foo, #3:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo, #7:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #9:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #10:Foo, #11:Foo, #11:Foo, #12:Foo, #12:Foo, #13:Foo, #14:Foo, h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo)), h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo)), h(f( #1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo)), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo))) C --> f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo) Unifier 7 X --> f(#1:Foo, #1:Foo, #1:Foo, #2:Foo, #2:Foo, #2:Foo, #2:Foo, #2:Foo, #3:Foo, #5:Foo, #5:Foo, #5:Foo, #5:Foo, #5:Foo, #5:Foo, #5:Foo, #5:Foo, #6:Foo, #6:Foo, #6:Foo, #6:Foo, #6:Foo, #6:Foo, #6:Foo, #6:Foo, #6:Foo, #6:Foo, #6:Foo, #7:Foo, #7:Foo, #7:Foo, #7:Foo, #7:Foo, #7:Foo, #7:Foo, #7:Foo, #7:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #9:Foo, #9:Foo, #9:Foo, #9:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #10:Foo, #10:Foo, #10:Foo, #10:Foo, #10:Foo, #10:Foo, #10:Foo, #11:Foo, #11:Foo, #11:Foo, #11:Foo, #11:Foo, #11:Foo, #11:Foo, #11:Foo, #11:Foo, #11:Foo, #11:Foo, #11:Foo, #11:Foo, #11:Foo, #12:Foo, #12:Foo, #12:Foo, #12:Foo, #12:Foo, #12:Foo, #12:Foo, #12:Foo, #12:Foo, #12:Foo, #12:Foo, #12:Foo, #13:Foo, #13:Foo, #13:Foo, #13:Foo, #13:Foo, #13:Foo, #13:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo, #14:Foo, #14:Foo, #14:Foo, #14:Foo, #14:Foo, #14:Foo, #14:Foo, #15:Foo, #15:Foo, #15:Foo, #15:Foo, #15:Foo, #15:Foo, #16:Foo, #16:Foo, #16:Foo, #16:Foo, #16:Foo, #16:Foo, #16:Foo, #16:Foo, #16:Foo, #16:Foo, #17:Foo, #17:Foo, #17:Foo, #17:Foo, #18:Foo, #18:Foo, #18:Foo, #18:Foo, #18:Foo, #18:Foo, #19:Foo, #19:Foo, #19:Foo, #19:Foo, #19:Foo, #19:Foo, #19:Foo, #19:Foo, #19:Foo, #19:Foo, #19:Foo, #19:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #21:Foo, #21:Foo, #21:Foo, #21:Foo, #21:Foo, #21:Foo, #21:Foo, #21:Foo, #22:Foo, #22:Foo, #22:Foo, #22:Foo, #22:Foo, #22:Foo, #22:Foo, #22:Foo, #22:Foo, #22:Foo, #23:Foo, #23:Foo, #23:Foo, #23:Foo, #23:Foo, #23:Foo, #23:Foo, #24:Foo, #24:Foo, #24:Foo, #24:Foo, #24:Foo, #25:Foo, #25:Foo, #25:Foo, #25:Foo, #25:Foo, #25:Foo, #26:Foo, #26:Foo, #26:Foo, #26:Foo, #26:Foo, #26:Foo, #26:Foo, #26:Foo, #26:Foo, #26:Foo, #26:Foo, #27:Foo, #27:Foo, #27:Foo, #27:Foo, #27:Foo, #27:Foo, #27:Foo, #28:Foo, #28:Foo, #28:Foo, #28:Foo, #28:Foo, #28:Foo, #28:Foo, #28:Foo, #28:Foo, #29:Foo, #29:Foo, #29:Foo, #30:Foo, #30:Foo, #30:Foo, #30:Foo, #30:Foo, #31:Foo, #31:Foo, #31:Foo, #31:Foo, #31:Foo, #31:Foo, #31:Foo, #32:Foo, #32:Foo, #32:Foo, #32:Foo, #33:Foo, #33:Foo, #33:Foo, #33:Foo, #33:Foo, #33:Foo, #33:Foo, #34:Foo, #34:Foo, #34:Foo, #34:Foo, #34:Foo, #34:Foo, #34:Foo, #34:Foo, #34:Foo, #34:Foo, #34:Foo, #34:Foo, #35:Foo, #35:Foo, #35:Foo, #35:Foo, #35:Foo, #35:Foo, #35:Foo, #35:Foo, #36:Foo, #36:Foo, #36:Foo, #36:Foo, #36:Foo, #36:Foo, #36:Foo, #36:Foo, #36:Foo, #36:Foo, #37:Foo, #37:Foo, #37:Foo, #37:Foo, #38:Foo, #38:Foo, #38:Foo, #38:Foo, #38:Foo, #38:Foo, #39:Foo, #39:Foo, #39:Foo, #39:Foo, #39:Foo, #39:Foo, #39:Foo, #39:Foo, #40:Foo, #40:Foo, #41:Foo, #41:Foo, #41:Foo, #41:Foo, #41:Foo, #41:Foo, #42:Foo, #42:Foo, #42:Foo, #42:Foo, #42:Foo, #42:Foo, #42:Foo, #43:Foo, #43:Foo, #43:Foo, #43:Foo, #43:Foo, #43:Foo, #43:Foo, #43:Foo, #43:Foo, #43:Foo, #44:Foo, #44:Foo, #44:Foo, #44:Foo, #44:Foo, #45:Foo, #45:Foo, #45:Foo, #45:Foo, #45:Foo, #45:Foo, #46:Foo, #46:Foo, #46:Foo, #46:Foo, #47:Foo, #47:Foo, #47:Foo, #47:Foo, #47:Foo, #47:Foo, #47:Foo, #47:Foo, #48:Foo, #48:Foo, #49:Foo, #49:Foo, #49:Foo, #49:Foo, #50:Foo, #50:Foo, #50:Foo, #50:Foo, #50:Foo, #51:Foo, #51:Foo, #51:Foo, #51:Foo, #51:Foo, #51:Foo, #51:Foo, #51:Foo, #51:Foo, #51:Foo, #52:Foo, #52:Foo, #52:Foo, #52:Foo, #52:Foo, #52:Foo, #53:Foo, #53:Foo, #54:Foo, #54:Foo, #54:Foo, #54:Foo, #54:Foo, #54:Foo, #54:Foo, #54:Foo, #54:Foo, #55:Foo, #55:Foo, #55:Foo, #55:Foo, #55:Foo, #55:Foo, #55:Foo, #55:Foo, #55:Foo, #55:Foo, #55:Foo, #55:Foo, #55:Foo, #55:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #57:Foo, #57:Foo, #57:Foo, #57:Foo, #57:Foo, #57:Foo, #57:Foo, #57:Foo, #58:Foo, #58:Foo, #58:Foo, #58:Foo, #59:Foo, #59:Foo, #59:Foo, #60:Foo, #60:Foo) Y --> f(#3:Foo, #4:Foo, #4:Foo, #4:Foo, #4:Foo, #4:Foo, #9:Foo, #13:Foo, #14:Foo, #15:Foo, #15:Foo, #17:Foo, #21:Foo, #24:Foo, #27:Foo, #29:Foo, #29:Foo, #30:Foo, #35:Foo, #37:Foo, #37:Foo, #38:Foo, #40:Foo, #44:Foo, #45:Foo, #46:Foo, #46:Foo, #48:Foo, #50:Foo, #51:Foo, #52:Foo, #52:Foo, #53:Foo, #53:Foo, #53:Foo, #57:Foo, #58:Foo, #59:Foo, #59:Foo, #60:Foo, #60:Foo, #60:Foo, #61:Foo, #61:Foo, h(f(#1:Foo, #5:Foo, #6:Foo, #6:Foo, #7:Foo, #7:Foo, #7:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #10:Foo, #11:Foo, #11:Foo, #11:Foo, #12:Foo, #12:Foo, #12:Foo, #12:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo, #14:Foo, #14:Foo, #14:Foo, #15:Foo, #15:Foo, #15:Foo, #16:Foo, #16:Foo, #16:Foo, #16:Foo, #16:Foo, #17:Foo, #18:Foo, #18:Foo, #19:Foo, #19:Foo, #19:Foo, #19:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #21:Foo, #21:Foo, #21:Foo, #21:Foo, #22:Foo, #22:Foo, #22:Foo, #22:Foo, #22:Foo, #23:Foo, #23:Foo, #23:Foo, #23:Foo, #24:Foo, #24:Foo, #24:Foo, #25:Foo, #25:Foo, #26:Foo, #26:Foo, #27:Foo, #27:Foo, #28:Foo, #28:Foo, #28:Foo, #29:Foo, #29:Foo, #30:Foo, #30:Foo, #30:Foo, #31:Foo, #31:Foo, #31:Foo, #31:Foo, #32:Foo, #32:Foo, #32:Foo, #33:Foo, #33:Foo, #33:Foo, #33:Foo, #34:Foo, #34:Foo, #34:Foo, #34:Foo, #35:Foo, #35:Foo, #35:Foo, #35:Foo, #36:Foo, #36:Foo, #36:Foo, #36:Foo, #36:Foo, #37:Foo, #37:Foo, #37:Foo, #37:Foo, #38:Foo, #38:Foo, #38:Foo, #38:Foo, #38:Foo, #39:Foo, #39:Foo, #39:Foo, #39:Foo, #39:Foo, #39:Foo, #40:Foo, #40:Foo, #41:Foo, #41:Foo, #42:Foo, #42:Foo, #42:Foo, #42:Foo, #43:Foo, #43:Foo, #43:Foo, #43:Foo, #43:Foo, #44:Foo, #44:Foo, #44:Foo, #45:Foo, #45:Foo, #45:Foo, #45:Foo, #45:Foo, #46:Foo, #46:Foo, #46:Foo, #46:Foo, #47:Foo, #47:Foo, #47:Foo, #47:Foo, #47:Foo, #47:Foo, #48:Foo, #48:Foo, #49:Foo, #49:Foo, #49:Foo, #50:Foo, #50:Foo, #50:Foo, #51:Foo, #51:Foo, #51:Foo, #52:Foo, #52:Foo, #52:Foo, #53:Foo, #53:Foo, #53:Foo, #54:Foo, #54:Foo, #54:Foo, #55:Foo, #55:Foo, #55:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #57:Foo, #57:Foo, #57:Foo, #57:Foo, #58:Foo, #59:Foo, #59:Foo, #60:Foo, #60:Foo, #60:Foo, #61:Foo))) Z --> f(#1:Foo, #5:Foo, #6:Foo, #6:Foo, #7:Foo, #7:Foo, #7:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #10:Foo, #11:Foo, #11:Foo, #11:Foo, #12:Foo, #12:Foo, #12:Foo, #12:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo, #14:Foo, #14:Foo, #14:Foo, #15:Foo, #15:Foo, #15:Foo, #16:Foo, #16:Foo, #16:Foo, #16:Foo, #16:Foo, #17:Foo, #18:Foo, #18:Foo, #19:Foo, #19:Foo, #19:Foo, #19:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #21:Foo, #21:Foo, #21:Foo, #21:Foo, #22:Foo, #22:Foo, #22:Foo, #22:Foo, #22:Foo, #23:Foo, #23:Foo, #23:Foo, #23:Foo, #24:Foo, #24:Foo, #24:Foo, #25:Foo, #25:Foo, #26:Foo, #26:Foo, #27:Foo, #27:Foo, #28:Foo, #28:Foo, #28:Foo, #29:Foo, #29:Foo, #30:Foo, #30:Foo, #30:Foo, #31:Foo, #31:Foo, #31:Foo, #31:Foo, #32:Foo, #32:Foo, #32:Foo, #33:Foo, #33:Foo, #33:Foo, #33:Foo, #34:Foo, #34:Foo, #34:Foo, #34:Foo, #35:Foo, #35:Foo, #35:Foo, #35:Foo, #36:Foo, #36:Foo, #36:Foo, #36:Foo, #36:Foo, #37:Foo, #37:Foo, #37:Foo, #37:Foo, #38:Foo, #38:Foo, #38:Foo, #38:Foo, #38:Foo, #39:Foo, #39:Foo, #39:Foo, #39:Foo, #39:Foo, #39:Foo, #40:Foo, #40:Foo, #41:Foo, #41:Foo, #42:Foo, #42:Foo, #42:Foo, #42:Foo, #43:Foo, #43:Foo, #43:Foo, #43:Foo, #43:Foo, #44:Foo, #44:Foo, #44:Foo, #45:Foo, #45:Foo, #45:Foo, #45:Foo, #45:Foo, #46:Foo, #46:Foo, #46:Foo, #46:Foo, #47:Foo, #47:Foo, #47:Foo, #47:Foo, #47:Foo, #47:Foo, #48:Foo, #48:Foo, #49:Foo, #49:Foo, #49:Foo, #50:Foo, #50:Foo, #50:Foo, #51:Foo, #51:Foo, #51:Foo, #52:Foo, #52:Foo, #52:Foo, #53:Foo, #53:Foo, #53:Foo, #54:Foo, #54:Foo, #54:Foo, #55:Foo, #55:Foo, #55:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #57:Foo, #57:Foo, #57:Foo, #57:Foo, #58:Foo, #59:Foo, #59:Foo, #60:Foo, #60:Foo, #60:Foo, #61:Foo) A --> f(#1:Foo, #2:Foo, #2:Foo, #2:Foo, #3:Foo, #4:Foo, #4:Foo, #5:Foo, #5:Foo, #5:Foo, #5:Foo, #6:Foo, #6:Foo, #6:Foo, #6:Foo, #6:Foo, #7:Foo, #7:Foo, #7:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #10:Foo, #11:Foo, #11:Foo, #11:Foo, #11:Foo, #11:Foo, #11:Foo, #12:Foo, #12:Foo, #12:Foo, #12:Foo, #13:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo, #14:Foo, #15:Foo, #15:Foo, #16:Foo, #16:Foo, #17:Foo, #17:Foo, #18:Foo, #18:Foo, #19:Foo, #19:Foo, #19:Foo, #19:Foo, #20:Foo, #20:Foo, #20:Foo, #21:Foo, #21:Foo, #22:Foo, #22:Foo, #23:Foo, #24:Foo, #25:Foo, #25:Foo, #26:Foo, #26:Foo, #26:Foo, #26:Foo, #26:Foo, #27:Foo, #27:Foo, #27:Foo, #28:Foo, #28:Foo, #28:Foo, #29:Foo, #30:Foo, #31:Foo, #33:Foo, #34:Foo, #34:Foo, #34:Foo, #34:Foo, #35:Foo, #35:Foo, #36:Foo, #36:Foo, #41:Foo, #41:Foo, #42:Foo, #43:Foo, #43:Foo, #44:Foo, #50:Foo, #51:Foo, #51:Foo, #51:Foo, #51:Foo, #52:Foo, #52:Foo, #54:Foo, #54:Foo, #54:Foo, #55:Foo, #55:Foo, #55:Foo, #55:Foo, #55:Foo, #55:Foo, #56:Foo, #56:Foo, #56:Foo, #57:Foo, #57:Foo, #58:Foo, #58:Foo, #59:Foo, h(f(#1:Foo, #5:Foo, #6:Foo, #6:Foo, #7:Foo, #7:Foo, #7:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #10:Foo, #11:Foo, #11:Foo, #11:Foo, #12:Foo, #12:Foo, #12:Foo, #12:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo, #14:Foo, #14:Foo, #14:Foo, #15:Foo, #15:Foo, #15:Foo, #16:Foo, #16:Foo, #16:Foo, #16:Foo, #16:Foo, #17:Foo, #18:Foo, #18:Foo, #19:Foo, #19:Foo, #19:Foo, #19:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #21:Foo, #21:Foo, #21:Foo, #21:Foo, #22:Foo, #22:Foo, #22:Foo, #22:Foo, #22:Foo, #23:Foo, #23:Foo, #23:Foo, #23:Foo, #24:Foo, #24:Foo, #24:Foo, #25:Foo, #25:Foo, #26:Foo, #26:Foo, #27:Foo, #27:Foo, #28:Foo, #28:Foo, #28:Foo, #29:Foo, #29:Foo, #30:Foo, #30:Foo, #30:Foo, #31:Foo, #31:Foo, #31:Foo, #31:Foo, #32:Foo, #32:Foo, #32:Foo, #33:Foo, #33:Foo, #33:Foo, #33:Foo, #34:Foo, #34:Foo, #34:Foo, #34:Foo, #35:Foo, #35:Foo, #35:Foo, #35:Foo, #36:Foo, #36:Foo, #36:Foo, #36:Foo, #36:Foo, #37:Foo, #37:Foo, #37:Foo, #37:Foo, #38:Foo, #38:Foo, #38:Foo, #38:Foo, #38:Foo, #39:Foo, #39:Foo, #39:Foo, #39:Foo, #39:Foo, #39:Foo, #40:Foo, #40:Foo, #41:Foo, #41:Foo, #42:Foo, #42:Foo, #42:Foo, #42:Foo, #43:Foo, #43:Foo, #43:Foo, #43:Foo, #43:Foo, #44:Foo, #44:Foo, #44:Foo, #45:Foo, #45:Foo, #45:Foo, #45:Foo, #45:Foo, #46:Foo, #46:Foo, #46:Foo, #46:Foo, #47:Foo, #47:Foo, #47:Foo, #47:Foo, #47:Foo, #47:Foo, #48:Foo, #48:Foo, #49:Foo, #49:Foo, #49:Foo, #50:Foo, #50:Foo, #50:Foo, #51:Foo, #51:Foo, #51:Foo, #52:Foo, #52:Foo, #52:Foo, #53:Foo, #53:Foo, #53:Foo, #54:Foo, #54:Foo, #54:Foo, #55:Foo, #55:Foo, #55:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #57:Foo, #57:Foo, #57:Foo, #57:Foo, #58:Foo, #59:Foo, #59:Foo, #60:Foo, #60:Foo, #60:Foo, #61:Foo))) B --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo, #4:Foo, #4:Foo, #4:Foo, #5:Foo, #5:Foo, #5:Foo, #6:Foo, #6:Foo, #6:Foo, #6:Foo, #6:Foo, #7:Foo, #7:Foo, #7:Foo, #7:Foo, #7:Foo, #7:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #9:Foo, #9:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #10:Foo, #10:Foo, #10:Foo, #10:Foo, #11:Foo, #11:Foo, #11:Foo, #11:Foo, #11:Foo, #11:Foo, #11:Foo, #12:Foo, #12:Foo, #12:Foo, #12:Foo, #12:Foo, #12:Foo, #12:Foo, #12:Foo, #13:Foo, #13:Foo, #13:Foo, #13:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo, #14:Foo, #14:Foo, #14:Foo, #14:Foo, #14:Foo, #14:Foo, #14:Foo, #15:Foo, #15:Foo, #15:Foo, #15:Foo, #15:Foo, #15:Foo, #15:Foo, #16:Foo, #16:Foo, #16:Foo, #16:Foo, #16:Foo, #16:Foo, #16:Foo, #16:Foo, #16:Foo, #17:Foo, #17:Foo, #17:Foo, #18:Foo, #18:Foo, #18:Foo, #18:Foo, #19:Foo, #19:Foo, #19:Foo, #19:Foo, #19:Foo, #19:Foo, #19:Foo, #19:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #21:Foo, #21:Foo, #21:Foo, #21:Foo, #21:Foo, #21:Foo, #21:Foo, #21:Foo, #22:Foo, #22:Foo, #22:Foo, #22:Foo, #22:Foo, #22:Foo, #22:Foo, #22:Foo, #22:Foo, #23:Foo, #23:Foo, #23:Foo, #23:Foo, #23:Foo, #23:Foo, #23:Foo, #24:Foo, #24:Foo, #24:Foo, #24:Foo, #24:Foo, #24:Foo, #25:Foo, #25:Foo, #25:Foo, #25:Foo, #26:Foo, #26:Foo, #26:Foo, #26:Foo, #26:Foo, #27:Foo, #27:Foo, #27:Foo, #27:Foo, #27:Foo, #28:Foo, #28:Foo, #28:Foo, #28:Foo, #28:Foo, #28:Foo, #29:Foo, #29:Foo, #29:Foo, #29:Foo, #29:Foo, #30:Foo, #30:Foo, #30:Foo, #30:Foo, #30:Foo, #30:Foo, #31:Foo, #31:Foo, #31:Foo, #31:Foo, #31:Foo, #31:Foo, #31:Foo, #32:Foo, #32:Foo, #32:Foo, #32:Foo, #32:Foo, #33:Foo, #33:Foo, #33:Foo, #33:Foo, #33:Foo, #33:Foo, #33:Foo, #34:Foo, #34:Foo, #34:Foo, #34:Foo, #34:Foo, #34:Foo, #34:Foo, #34:Foo, #35:Foo, #35:Foo, #35:Foo, #35:Foo, #35:Foo, #35:Foo, #35:Foo, #35:Foo, #36:Foo, #36:Foo, #36:Foo, #36:Foo, #36:Foo, #36:Foo, #36:Foo, #36:Foo, #36:Foo, #37:Foo, #37:Foo, #37:Foo, #37:Foo, #37:Foo, #37:Foo, #37:Foo, #37:Foo, #38:Foo, #38:Foo, #38:Foo, #38:Foo, #38:Foo, #38:Foo, #38:Foo, #38:Foo, #38:Foo, #39:Foo, #39:Foo, #39:Foo, #39:Foo, #39:Foo, #39:Foo, #39:Foo, #39:Foo, #39:Foo, #39:Foo, #40:Foo, #40:Foo, #40:Foo, #40:Foo, #41:Foo, #41:Foo, #41:Foo, #41:Foo, #42:Foo, #42:Foo, #42:Foo, #42:Foo, #42:Foo, #42:Foo, #42:Foo, #43:Foo, #43:Foo, #43:Foo, #43:Foo, #43:Foo, #43:Foo, #43:Foo, #43:Foo, #43:Foo, #44:Foo, #44:Foo, #44:Foo, #44:Foo, #44:Foo, #44:Foo, #45:Foo, #45:Foo, #45:Foo, #45:Foo, #45:Foo, #45:Foo, #45:Foo, #45:Foo, #45:Foo, #46:Foo, #46:Foo, #46:Foo, #46:Foo, #46:Foo, #46:Foo, #46:Foo, #46:Foo, #47:Foo, #47:Foo, #47:Foo, #47:Foo, #47:Foo, #47:Foo, #47:Foo, #47:Foo, #47:Foo, #47:Foo, #48:Foo, #48:Foo, #48:Foo, #48:Foo, #49:Foo, #49:Foo, #49:Foo, #49:Foo, #49:Foo, #50:Foo, #50:Foo, #50:Foo, #50:Foo, #50:Foo, #50:Foo, #51:Foo, #51:Foo, #51:Foo, #51:Foo, #51:Foo, #51:Foo, #51:Foo, #52:Foo, #52:Foo, #52:Foo, #52:Foo, #52:Foo, #52:Foo, #52:Foo, #53:Foo, #53:Foo, #53:Foo, #53:Foo, #53:Foo, #53:Foo, #53:Foo, #54:Foo, #54:Foo, #54:Foo, #54:Foo, #54:Foo, #54:Foo, #55:Foo, #55:Foo, #55:Foo, #55:Foo, #55:Foo, #55:Foo, #55:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #57:Foo, #57:Foo, #57:Foo, #57:Foo, #57:Foo, #57:Foo, #57:Foo, #57:Foo, #58:Foo, #58:Foo, #58:Foo, #59:Foo, #59:Foo, #59:Foo, #59:Foo, #59:Foo, #60:Foo, #60:Foo, #60:Foo, #60:Foo, #60:Foo, #60:Foo, #60:Foo, #61:Foo, #61:Foo, #61:Foo) C --> f(#1:Foo, #5:Foo, #6:Foo, #6:Foo, #7:Foo, #7:Foo, #7:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #10:Foo, #11:Foo, #11:Foo, #11:Foo, #12:Foo, #12:Foo, #12:Foo, #12:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo, #14:Foo, #14:Foo, #14:Foo, #15:Foo, #15:Foo, #15:Foo, #16:Foo, #16:Foo, #16:Foo, #16:Foo, #16:Foo, #17:Foo, #18:Foo, #18:Foo, #19:Foo, #19:Foo, #19:Foo, #19:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #20:Foo, #21:Foo, #21:Foo, #21:Foo, #21:Foo, #22:Foo, #22:Foo, #22:Foo, #22:Foo, #22:Foo, #23:Foo, #23:Foo, #23:Foo, #23:Foo, #24:Foo, #24:Foo, #24:Foo, #25:Foo, #25:Foo, #26:Foo, #26:Foo, #27:Foo, #27:Foo, #28:Foo, #28:Foo, #28:Foo, #29:Foo, #29:Foo, #30:Foo, #30:Foo, #30:Foo, #31:Foo, #31:Foo, #31:Foo, #31:Foo, #32:Foo, #32:Foo, #32:Foo, #33:Foo, #33:Foo, #33:Foo, #33:Foo, #34:Foo, #34:Foo, #34:Foo, #34:Foo, #35:Foo, #35:Foo, #35:Foo, #35:Foo, #36:Foo, #36:Foo, #36:Foo, #36:Foo, #36:Foo, #37:Foo, #37:Foo, #37:Foo, #37:Foo, #38:Foo, #38:Foo, #38:Foo, #38:Foo, #38:Foo, #39:Foo, #39:Foo, #39:Foo, #39:Foo, #39:Foo, #39:Foo, #40:Foo, #40:Foo, #41:Foo, #41:Foo, #42:Foo, #42:Foo, #42:Foo, #42:Foo, #43:Foo, #43:Foo, #43:Foo, #43:Foo, #43:Foo, #44:Foo, #44:Foo, #44:Foo, #45:Foo, #45:Foo, #45:Foo, #45:Foo, #45:Foo, #46:Foo, #46:Foo, #46:Foo, #46:Foo, #47:Foo, #47:Foo, #47:Foo, #47:Foo, #47:Foo, #47:Foo, #48:Foo, #48:Foo, #49:Foo, #49:Foo, #49:Foo, #50:Foo, #50:Foo, #50:Foo, #51:Foo, #51:Foo, #51:Foo, #52:Foo, #52:Foo, #52:Foo, #53:Foo, #53:Foo, #53:Foo, #54:Foo, #54:Foo, #54:Foo, #55:Foo, #55:Foo, #55:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #56:Foo, #57:Foo, #57:Foo, #57:Foo, #57:Foo, #58:Foo, #59:Foo, #59:Foo, #60:Foo, #60:Foo, #60:Foo, #61:Foo) Unifier 8 X --> f(#1:Foo, #1:Foo, #1:Foo, #1:Foo, #2:Foo, #2:Foo, #2:Foo, #3:Foo, #3:Foo, #3:Foo, #4:Foo, #4:Foo, #4:Foo, #4:Foo, #4:Foo, #5:Foo, #5:Foo, #5:Foo, #5:Foo, #6:Foo, #6:Foo, #6:Foo, #7:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f( #1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo))))) Y --> f(#7:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #12:Foo, #14:Foo) Z --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo))) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo, #4:Foo, #4:Foo, #5:Foo, #5:Foo, #6:Foo, #7:Foo, #8:Foo, #8:Foo, h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo))))) B --> f(#1:Foo, #1:Foo, #2:Foo, #2:Foo, #2:Foo, #3:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo, #7:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #9:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #10:Foo, #11:Foo, #11:Foo, #12:Foo, #12:Foo, #13:Foo, #14:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo))) C --> f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo) Unifier 9 X --> f(#1:Foo, #1:Foo, #1:Foo, #1:Foo, #2:Foo, #2:Foo, #2:Foo, #3:Foo, #3:Foo, #3:Foo, #4:Foo, #4:Foo, #4:Foo, #4:Foo, #4:Foo, #5:Foo, #5:Foo, #5:Foo, #5:Foo, #6:Foo, #6:Foo, #6:Foo, #7:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo))) Y --> f(#7:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #12:Foo, #14:Foo, h(f( #1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)))), h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)))), h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f( #3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)))), h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo))))) Z --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo))) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo, #4:Foo, #4:Foo, #5:Foo, #5:Foo, #6:Foo, #7:Foo, #8:Foo, #8:Foo, h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)))), h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo))))) B --> f(#1:Foo, #1:Foo, #2:Foo, #2:Foo, #2:Foo, #3:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo, #7:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #9:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #10:Foo, #11:Foo, #11:Foo, #12:Foo, #12:Foo, #13:Foo, #14:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h( f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)))), h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)))), h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo)), h(f( #3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo))))) C --> f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo) Unifier 10 X --> f(#1:Foo, #1:Foo, #1:Foo, #1:Foo, #2:Foo, #2:Foo, #2:Foo, #3:Foo, #3:Foo, #3:Foo, #4:Foo, #4:Foo, #4:Foo, #4:Foo, #4:Foo, #5:Foo, #5:Foo, #5:Foo, #5:Foo, #6:Foo, #6:Foo, #6:Foo, #7:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo, h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo)))), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo, h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo)))), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo, h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo))))) Y --> f(#7:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #12:Foo, #14:Foo) Z --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo, #4:Foo, #4:Foo, #5:Foo, #5:Foo, #6:Foo, #7:Foo, #8:Foo, #8:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo, h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo)))), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo, h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo))))) B --> f(#1:Foo, #1:Foo, #2:Foo, #2:Foo, #2:Foo, #3:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo, #7:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #9:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #10:Foo, #11:Foo, #11:Foo, #12:Foo, #12:Foo, #13:Foo, #14:Foo) C --> f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo, h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo))) Unifier 11 X --> f(#1:Foo, #1:Foo, #1:Foo, #1:Foo, #2:Foo, #2:Foo, #2:Foo, #3:Foo, #3:Foo, #3:Foo, #4:Foo, #4:Foo, #4:Foo, #4:Foo, #4:Foo, #5:Foo, #5:Foo, #5:Foo, #5:Foo, #6:Foo, #6:Foo, #6:Foo, #7:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo) Y --> f(#7:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #12:Foo, #14:Foo, h(f( #3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo, h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo)))), h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo, h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo))))) Z --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo, #4:Foo, #4:Foo, #5:Foo, #5:Foo, #6:Foo, #7:Foo, #8:Foo, #8:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo, h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo))))) B --> f(#1:Foo, #1:Foo, #2:Foo, #2:Foo, #2:Foo, #3:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo, #7:Foo, #8:Foo, #8:Foo, #8:Foo, #8:Foo, #9:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #10:Foo, #11:Foo, #11:Foo, #12:Foo, #12:Foo, #13:Foo, #14:Foo, h(f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo, h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo))))) C --> f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #10:Foo, #11:Foo, #11:Foo, #13:Foo, #13:Foo, #13:Foo, #14:Foo, h(f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #9:Foo, #9:Foo, #9:Foo, #10:Foo, #10:Foo, #11:Foo, #12:Foo))) ========================================== unify in FOO : X =? W /\ f(X, Y) =? f(W, Z) . Unifier 1 X --> #1:Foo W --> #1:Foo Y --> #2:Foo Z --> #2:Foo ========================================== unify in NAT' : X =? s (X * Y) . Unifier 1 X --> s 0 Y --> 0 Unifier 2 X --> s 0 Y --> 0 ========================================== unify in NAT' : X =? s X * Y . Unifier 1 X --> 0 Y --> 0 Unifier 2 X --> 0 Y --> 0 ========================================== unify in NAT' : s X =? s X * Y . Unifier 1 X --> #1:Nat Y --> s 0 ========================================== unify in NAT' : s X =? X * Y . Unifier 1 X --> s 0 Y --> s_^2(0) ========================================== unify in COMM : X =? c(f(X, Y), Z) . Unifier 1 X --> c(a, b) Z --> a Y --> b Unifier 2 X --> c(a, b) Z --> b Y --> a ========================================== unify in FOO2 : X =? f(Y, a, b) /\ Y =? g(X, c, d) . Unifier 1 X --> f(a, b) Y --> g(c, d) Unifier 2 X --> f(a, b) Y --> g(c, d) ========================================== unify in FOO3 : X =? f(Y, a, b) /\ Y =? h(X) . Unifier 1 X --> f(a, b) Y --> h(f(a, b)) Bye. maude-3.1/tests/Misc/variantMatching0000755000175200017520000000037013724605021014477 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/variantMatching.maude -no-banner -no-advise \ > variantMatching.out 2>&1 diff $srcdir/variantMatching.expected variantMatching.out > /dev/null 2>&1 maude-3.1/tests/Misc/rot130000755000175200017520000000032013321015520012313 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/rot13.maude -no-banner -no-advise \ > rot13.out 2>&1 diff $srcdir/rot13.expected rot13.out > /dev/null 2>&1 maude-3.1/tests/Misc/bubble.maude0000644000175200017520000002065513256560243013720 00000000000000*** check bubble corner cases fmod HANG is including QID-LIST . sorts Tokens Foo Bar . op start__ : Tokens Bar -> Foo . op __ : Tokens Tokens -> Bar . op tokens : QidList -> Tokens [special( id-hook Bubble (0 -1 < >) id-hook Exclude (start) op-hook qidSymbol ( : ~> Qid) op-hook nilQidListSymbol (nil : ~> QidList) op-hook qidListSymbol (__ : QidList QidList ~> QidList) )] . endfm *** MSCP10 hangs parse start . **** adjacent possibly empty bubbles **** fmod EMPTY-ADJACENT is including QID-LIST . sorts Tokens Foo . op start__ : Tokens Tokens -> Foo . op tokens : QidList -> Tokens [special( id-hook Bubble (0 -1 < >) op-hook qidSymbol ( : ~> Qid) op-hook nilQidListSymbol (nil : ~> QidList) op-hook qidListSymbol (__ : QidList QidList ~> QidList) )] . endfm *** both empty (MSCP10 finds no parse) parse start . *** ambiguous (MSCP10 finds no parse) parse start a . *** ambiguous (MSCP10 finds no parse) parse start < a > . fmod TRIPLE-EMPTY is including QID-LIST . sorts Foo Tokens Tokens2 . op [___] : Tokens Tokens2 Tokens -> Foo . op tokens : QidList -> Tokens [special( id-hook Bubble (0 -1 < >) id-hook Exclude (a) op-hook qidSymbol ( : ~> Qid) op-hook nilQidListSymbol (nil : ~> QidList) op-hook qidListSymbol (__ : QidList QidList ~> QidList) )] . op tokens2 : QidList -> Tokens2 [special( id-hook Bubble (0 -1 < >) op-hook qidSymbol ( : ~> Qid) op-hook nilQidListSymbol (nil : ~> QidList) op-hook qidListSymbol (__ : QidList QidList ~> QidList) )] . endfm *** all empty (MSCP10 finds no parse) parse [ ] . fmod EMPTY-ADJACENT2 is including QID-LIST . sorts Tokens Foo . op __ : Tokens Tokens -> Foo . op tokens : QidList -> Tokens [special( id-hook Bubble (0 -1 < >) op-hook qidSymbol ( : ~> Qid) op-hook nilQidListSymbol (nil : ~> QidList) op-hook qidListSymbol (__ : QidList QidList ~> QidList) )] . endfm *** ambiguous (MSCP10 finds no parse) parse a . fmod EMPTY-ADJACENT3 is including QID-LIST . sorts Tokens Tokens2 Foo . op __ : Tokens Tokens2 -> Foo . op tokens : QidList -> Tokens [special( id-hook Bubble (0 -1 < >) op-hook qidSymbol ( : ~> Qid) op-hook nilQidListSymbol (nil : ~> QidList) op-hook qidListSymbol (__ : QidList QidList ~> QidList) )] . op tokens2 : QidList -> Tokens2 [special( id-hook Bubble (0 -1 < >) id-hook Exclude (a) op-hook qidSymbol ( : ~> Qid) op-hook nilQidListSymbol (nil : ~> QidList) op-hook qidListSymbol (__ : QidList QidList ~> QidList) )] . endfm *** only first bubble can take a (MSCP10 finds no parse) parse a . fmod EMPTY-ADJACENT4 is including QID-LIST . sorts Tokens Tokens2 Foo Bar . op start__ : Tokens Bar -> Foo [prec 15] . op __ : Tokens Tokens2 -> Bar [prec 10] . op tokens : QidList -> Tokens [special( id-hook Bubble (0 -1 < >) id-hook Exclude (start) op-hook qidSymbol ( : ~> Qid) op-hook nilQidListSymbol (nil : ~> QidList) op-hook qidListSymbol (__ : QidList QidList ~> QidList) )] . op tokens2 : QidList -> Tokens2 [special( id-hook Bubble (0 -1 < >) op-hook qidSymbol ( : ~> Qid) op-hook nilQidListSymbol (nil : ~> QidList) op-hook qidListSymbol (__ : QidList QidList ~> QidList) )] . endfm *** ambiguous parse start . **** error position *** fmod ERROR-POSITION is including QID-LIST . sorts Tokens Foo . op start_ : Tokens -> Foo . op tokens : QidList -> Tokens [special( id-hook Bubble (1 10 < >) op-hook qidSymbol ( : ~> Qid) op-hook nilQidListSymbol (nil : ~> QidList) op-hook qidListSymbol (__ : QidList QidList ~> QidList) )] . endfm *** bad close parse start a b > c < . *** missing close (MSCP10 reports error in wrong position) parse start a b < c d . *** close not encountered in time; g needs to be > (MSCP10 reports error in wrong position) parse start < a < b > c d e f g > . **** competing bubble definitions **** fmod PAREN-DIFF is including QID-LIST . sorts Tokens Foo . op start_ : Tokens -> Foo . op tokens : QidList -> Tokens [special( id-hook Bubble (1 -1 < >) op-hook qidSymbol ( : ~> Qid) op-hook nilQidListSymbol (nil : ~> QidList) op-hook qidListSymbol (__ : QidList QidList ~> QidList) )] . op _;_ : QidList QidList -> QidList [assoc] . op tokens : QidList -> Tokens [special( id-hook Bubble (1 -1 <| |>) op-hook qidSymbol ( : ~> Qid) op-hook nilQidListSymbol (nil : ~> QidList) op-hook qidListSymbol (_;_ : QidList QidList ~> QidList) )] . endfm *** 2nd bubble def parse start a < . *** 1st bubble def parse start a <| . *** ambiguous (MSCP10 doesn't see this) parse start a b . fmod BOUND-DIFF is including QID-LIST . sorts Tokens Foo . op start_ : Tokens -> Foo . op tokens : QidList -> Tokens [special( id-hook Bubble (3 -1 < >) op-hook qidSymbol ( : ~> Qid) op-hook nilQidListSymbol (nil : ~> QidList) op-hook qidListSymbol (__ : QidList QidList ~> QidList) )] . op _;_ : QidList QidList -> QidList [assoc] . op tokens : QidList -> Tokens [special( id-hook Bubble (1 5 < >) op-hook qidSymbol ( : ~> Qid) op-hook nilQidListSymbol (nil : ~> QidList) op-hook qidListSymbol (_;_ : QidList QidList ~> QidList) )] . endfm *** 2nd bubble def parse start a b . *** 1st bubble def parse start a b c < e > f . *** ambiguous (MSCP10 doesn't see this) parse start a b c . **** adjacent nonempty bubbles **** fmod NON-EMPTY-ADJACENT is including QID-LIST . sorts Tokens Foo . op start__ : Tokens Tokens -> Foo . op tokens : QidList -> Tokens [special( id-hook Bubble (1 -1 < >) op-hook qidSymbol ( : ~> Qid) op-hook nilQidListSymbol (nil : ~> QidList) op-hook qidListSymbol (__ : QidList QidList ~> QidList) )] . endfm *** one token each parse start a b . *** ambiguous (MSCP10 finds no parse) parse start a b c d e f g . *** parens force split parse start < b > < d e f g > . *** unmatched close - unexpected end of tokens (MSCP10 reports wrong error position) parse start < b > < d e f g . *** unexpected close parse start < b > > d e f g . fmod LOWER-BOUND-ADJACENT is including QID-LIST . sorts Tokens Foo . op start__ : Tokens Tokens -> Foo . op tokens : QidList -> Tokens [special( id-hook Bubble (3 -1 < >) op-hook qidSymbol ( : ~> Qid) op-hook nilQidListSymbol (nil : ~> QidList) op-hook qidListSymbol (__ : QidList QidList ~> QidList) )] . endfm *** insufficient tokens parse start a b c d e . *** three tokens each parse start a b c d e f . *** ambiguous (MSCP10 finds no parse) parse start a b c d e f g . *** parens force split parse start < a b c d > < e f g > . fmod UPPER-BOUND-NON-EMPTY-ADJACENT is including QID-LIST . sorts Tokens Foo . op start__ : Tokens Tokens -> Foo . op tokens : QidList -> Tokens [special( id-hook Bubble (1 3 < >) op-hook qidSymbol ( : ~> Qid) op-hook nilQidListSymbol (nil : ~> QidList) op-hook qidListSymbol (__ : QidList QidList ~> QidList) )] . endfm *** ambiguous (MSCP10 finds no parse) parse start a b c d e . *** parens force split (MSCP10 finds no parse) parse start < a > b c . *** three tokens each (MSCP10 finds no parse) parse start a b c d e f . *** too many tokens (MSCP10 reports wrong error position) parse start a b c d e f g . **** unbound tree of empty bubbles possible **** fmod INFINITE-EMPTY-BUBBLES is including QID-LIST . sorts Tokens Foo . op __ : Tokens Foo -> Foo . op end : -> Foo . op tokens : QidList -> Tokens [special( id-hook Bubble (0 -1 < >) id-hook Exclude (start) op-hook qidSymbol ( : ~> Qid) op-hook nilQidListSymbol (nil : ~> QidList) op-hook qidListSymbol (__ : QidList QidList ~> QidList) )] . endfm *** ambiguous (MSCP10 only finds one parse) parse end . *** force at least one empty bubble fmod EMPTY-BUBBLE is including QID-LIST . sorts Tokens Foo Bar . op start_ : Foo -> Bar [prec 0 gather (E)] . op __ : Tokens Foo -> Foo [prec 0 gather (& &)]. op e n d : -> Foo [prec 10]. op tokens : QidList -> Tokens [special( id-hook Bubble (0 -1 < >) id-hook Exclude (start) op-hook qidSymbol ( : ~> Qid) op-hook nilQidListSymbol (nil : ~> QidList) op-hook qidListSymbol (__ : QidList QidList ~> QidList) )] . endfm *** ambiguous (MSCP10 infinite recursion in ScpParser::setAmbNode()) parse start e n d . maude-3.1/tests/Misc/mapToParameterTheory.maude0000644000175200017520000002571113471356524016603 00000000000000*** *** Examples to exercise the weird case where a parameterized view explicitly *** or implicitly maps sorts or operators from its fromTheory into one of its *** parameters rather than its toModule. *** set show timing off . *** don't pull in BOOL so we have simple modules to look at set include BOOL off . ************************************** *** explicit-explicit sort mapping *** ************************************** fth T is sort Elt . endfth fth T2 is sort Elt2 . endfth fmod M{X :: T} is sort Foo{X} . op f : X$Elt -> Foo{X} . endfm view V{A :: T} from T2 to M{A} is sort Elt2 to A$Elt . *** mapping fromTheory sort to parameterTheory sort endv fmod C is sort Bar . op a : -> Bar . endfm view V2 from T to C is sort Elt to Bar . endv fmod M2{Y :: T2} is sort Baz{Y} . op g : Y$Elt2 -> Baz{Y} . endfm fmod TEST is inc M2{V{V2}} . endfm show all . *** Now Y$Elt2 which is mapped by Elt2 to A$Elt in V *** which in turn is mapped by Elt to Bar in V2 *** should end up at Bar and thus g which maps from Y$Elt2 *** should now map from Bar *** op g : Bar -> Baz{V{V2}} . ************************************** *** implicit-explicit sort mapping *** ************************************** fth T is sort Elt . endfth fth T2 is sort A$Elt . *** highly dubious name endfth fmod M{X :: T} is sort Foo{X} . op f : X$Elt -> Foo{X} . endfm view V{A :: T} from T2 to M{A} is *** A$Elt in fromTheory is implicitly mapped to A$Elt in parameterTheory endv fmod C is sort Bar . op a : -> Bar . endfm view V2 from T to C is sort Elt to Bar . endv fmod M2{Y :: T2} is sort Baz{Y} . op g : Y$A$Elt -> Baz{Y} . endfm fmod TEST is inc M2{V{V2}} . endfm show all . *** Now Y$A$Elt which is implicitly mapped to A$Elt by V *** which in turn is mapped by Elt to Bar in V2 *** should end up at Bar and thus g which maps from Y$A$Elt2 *** should now map from Bar *** op g : Bar -> Baz{V{V2}} . ************************************** *** explicit-implicit sort mapping *** ************************************** fth T is sort Elt . endfth fth T2 is sort Elt2 . endfth fmod M{X :: T} is sort Foo{X} . op f : X$Elt -> Foo{X} . endfm view V{A :: T} from T2 to M{A} is sort Elt2 to A$Elt . *** mapping fromTheory sort to parameterTheory sort endv fmod C is sort Elt . op a : -> Elt . endfm view V2 from T to C is *** Elt is implicitly mapped from T to C endv fmod M2{Y :: T2} is sort Baz{Y} . op g : Y$Elt2 -> Baz{Y} . endfm fmod TEST is inc M2{V{V2}} . endfm show all . *** Now Y$Elt2 which is mapped by Elt2 to A$Elt in V *** which in turn is mapped by to Elt in C by V2 *** Thus thus g which maps from Y$Elt2 *** should now map from Elt *** op g : Elt -> Baz{V{V2}} . ************************************** *** implicit-implicit sort mapping *** ************************************** fth T is sort Elt . endfth fth T2 is sort A$Elt . *** highly dubious name endfth fmod M{X :: T} is sort Foo{X} . op f : X$Elt -> Foo{X} . endfm view V{A :: T} from T2 to M{A} is *** A$Elt in fromTheory is implicitly mapped to A$Elt in parameterTheory endv fmod C is sort Elt . op a : -> Elt . endfm view V2 from T to C is *** Elt is implicitly mapped from T to C endv fmod M2{Y :: T2} is sort Baz{Y} . op g : Y$A$Elt -> Baz{Y} . endfm fmod TEST is inc M2{V{V2}} . endfm show all . *** Now Y$A$Elt which is implicitly mapped to A$Elt by V *** which in turn is mapped by Elt in C by V2 *** Thus g which maps from Y$A$Elt2 *** should now map from Elt *** op g : Elt -> Baz{V{V2}} . ****************************************** *** explicit-explicit operator mapping *** ****************************************** fth T is sort Elt . op _+_ : Elt Elt -> Elt . endfth fth T2 is sort Elt2 . op sum : Elt2 Elt2 -> Elt2 . endfth fmod M{X :: T} is op g : X$Elt -> X$Elt . var X : X$Elt . eq g(X) = X + X . endfm view V{A :: T} from T2 to M{A} is sort Elt2 to A$Elt . *** mapping fromTheory sort to parameterTheory sort op sum to _+_ . *** mapping fromTheory operator to parameterTheory operator endv fmod C is sort Bar . op summation : Bar Bar -> Bar . endfm view V2 from T to C is sort Elt to Bar . op _+_ to summation . endv fmod M2{Y :: T2} is op h : Y$Elt2 Y$Elt2 -> Y$Elt2 . vars X Y : Y$Elt2 . eq h(X, Y) = sum(X, Y) . endfm fmod TEST is inc M2{V{V2}} . endfm show all . *** sum in eq h(X, Y) = sum(X, Y) should be mapped to _+_ by V, but then *** V2 instantiates the operator from the parameter theory to summation so we get *** eq h(X:Bar, Y:Bar) = summation(X:Bar, Y:Bar) . ****************************************** *** implicit-explicit operator mapping *** ****************************************** fth T is sort Elt . op _+_ : Elt Elt -> Elt . endfth fth T2 is sort Elt2 . op _+_ : Elt2 Elt2 -> Elt2 . endfth fmod M{X :: T} is op g : X$Elt -> X$Elt . var X : X$Elt . eq g(X) = X + X . endfm view V{A :: T} from T2 to M{A} is sort Elt2 to A$Elt . *** mapping fromTheory sort to parameterTheory sort *** _+_ in fromTheory is implicitly mapped to _+_ in parameterTheory endv fmod C is sort Bar . op summation : Bar Bar -> Bar . endfm view V2 from T to C is sort Elt to Bar . op _+_ to summation . endv fmod M2{Y :: T2} is op h : Y$Elt2 Y$Elt2 -> Y$Elt2 . vars X Y : Y$Elt2 . eq h(X, Y) = X + Y . endfm fmod TEST is inc M2{V{V2}} . endfm show all . *** _+_ in eq h(X, Y) = X + Y should be mapped to _+_ in T by V, but then *** V2 instantiates the operator from the parameter theory to summation so we get *** eq h(X:Bar, Y:Bar) = summation(X:Bar, Y:Bar) . ****************************************** *** op->term-explicit operator mapping *** ****************************************** fth T is sort Elt . op _+_ : Elt Elt -> Elt . endfth fth T2 is sort Elt2 . op sum : Elt2 Elt2 -> Elt2 . endfth fmod M{X :: T} is op g : X$Elt -> X$Elt . var X : X$Elt . eq g(X) = X + X . endfm view V{A :: T} from T2 to M{A} is sort Elt2 to A$Elt . *** mapping fromTheory sort to parameterTheory sort vars X Y : Elt2 . op sum(X, Y) to term X + g(Y) . *** mapping fromTheory operator to parameterTheory operator endv fmod C is sort Bar . op summation : Bar Bar -> Bar . endfm view V2 from T to C is sort Elt to Bar . op _+_ to summation . endv fmod M2{Y :: T2} is op h : Y$Elt2 Y$Elt2 -> Y$Elt2 . vars X Y : Y$Elt2 . eq h(X, Y) = sum(X, Y) . endfm fmod TEST is inc M2{V{V2}} . endfm show all . *** sum in eq h(X, Y) = sum(X, Y) should be mapped to X + g(Y) by V, but then *** V2 instantiates the operator _+_ from the parameter theory to summation so we get *** eq h(X:Bar, Y:Bar) = summation(X:Bar, g(Y:Bar)) . ****************************************** *** explicit-op->term operator mapping *** ****************************************** fth T is sort Elt . op _+_ : Elt Elt -> Elt . endfth fth T2 is sort Elt2 . op sum : Elt2 Elt2 -> Elt2 . endfth fmod M{X :: T} is op g : X$Elt -> X$Elt . var X : X$Elt . eq g(X) = X + X . endfm view V{A :: T} from T2 to M{A} is sort Elt2 to A$Elt . *** mapping fromTheory sort to parameterTheory sort op sum to _+_ . *** mapping fromTheory operator to parameterTheory operator endv fmod C is sort Bar . op summation : Bar Bar -> Bar . op inv : Bar -> Bar . endfm view V2 from T to C is sort Elt to Bar . vars X Y : Elt . op X + Y to term summation(inv(Y), inv(X)) . endv fmod M2{Y :: T2} is op h : Y$Elt2 Y$Elt2 -> Y$Elt2 . vars X Y : Y$Elt2 . eq h(X, Y) = sum(X, Y) . endfm fmod TEST is inc M2{V{V2}} . endfm show all . *** sum in eq h(X, Y) = sum(X, Y) should be mapped to _+_ by V, but then *** V2 instantiates the operator from the parameter theory to summation *** summation(inv(Y), inv(X)) so we get *** eq h(X:Bar, Y:Bar) = summation(inv(Y:Bar), inv(X:Bar)) . ************************************************************* *** explicit-op->term operator mapping with lost variable *** ************************************************************* fth T is sort Elt . op + : Elt Elt Elt -> Elt . endfth fth T2 is sort Elt2 . op sum : Elt2 Elt2 Elt2 -> Elt2 . endfth fmod M{X :: T} is op g : X$Elt -> X$Elt . var X : X$Elt . eq g(X) = +(X, X, X) . endfm view V{A :: T} from T2 to M{A} is sort Elt2 to A$Elt . *** mapping fromTheory sort to parameterTheory sort op sum to + . *** mapping fromTheory operator to parameterTheory operator endv fmod C is sort Bar . op summation : Bar Bar -> Bar . op inv : Bar -> Bar . endfm view V2 from T to C is sort Elt to Bar . vars X Y Z : Elt . op +(X, Y, Z) to term summation(inv(X), inv(Z)) . *** Y is lost endv fmod M2{Y :: T2} is op h : Y$Elt2 Y$Elt2 Y$Elt2 -> Y$Elt2 . vars X Y Z : Y$Elt2 . eq h(X, Y, Z) = sum(X, Y, Z) . endfm fmod TEST is inc M2{V{V2}} . endfm show all . *** eq h(X:Bar, Y:Bar, Z:Bar) = summation(inv(X:Bar), inv(Z:Bar)) . ****************************************************************** *** explicit-op->term operator mapping with two lost variables *** ****************************************************************** fth T is sort Elt . op + : Elt Elt Elt Elt -> Elt . endfth fth T2 is sort Elt2 . op sum : Elt2 Elt2 Elt2 Elt2 -> Elt2 . endfth fmod M{X :: T} is op g : X$Elt -> X$Elt . var X : X$Elt . eq g(X) = +(X, X, X, X) . endfm view V{A :: T} from T2 to M{A} is sort Elt2 to A$Elt . *** mapping fromTheory sort to parameterTheory sort op sum to + . *** mapping fromTheory operator to parameterTheory operator endv fmod C is sort Bar . op summation : Bar Bar -> Bar . op inv : Bar -> Bar . endfm view V2 from T to C is sort Elt to Bar . vars W, X Y Z : Elt . op +(W, X, Y, Z) to term summation(inv(X), inv(Z)) . *** W, Y is lost endv fmod M2{Y :: T2} is op h : Y$Elt2 Y$Elt2 Y$Elt2 Y$Elt2 -> Y$Elt2 . vars W, X Y Z : Y$Elt2 . eq h(W, X, Y, Z) = sum(W, X, Y, Z) . endfm fmod TEST is inc M2{V{V2}} . endfm show all . *** eq h(W:Bar, X:Bar, Y:Bar, Z:Bar) = summation(inv(X:Bar), inv(Z:Bar)) . ****************************************************** *** explicit-explicit polymorphic operator mapping *** ****************************************************** fth T is sort Elt . op f : Elt Universal -> Universal [poly(2 0)] . ops a b : -> Elt . endfth fth T2 is sort Elt2 . op f2 : Elt2 Universal -> Universal [poly(2 0)] . endfth fmod M{X :: T} is sort One{X} Two{X} . op g1 : One{X} -> One{X} . op g2 : Two{X} -> Two{X} . var X : One{X} . var Y : Two{X} . eq g1(X) = f(a, X) . eq g2(Y) = f(b, Y) . endfm view V{A :: T} from T2 to M{A} is sort Elt2 to A$Elt . op f2 to f . *** map polymorphic operator f2 to polymorphic operator f in parameter theory endv fmod C is sort Bar . op h : Bar Universal -> Universal [poly(2 0)] . ops 1 2 : -> Bar . endfm view V2 from T to C is sort Elt to Bar . op f to h . op a to 1 . op b to 2 . endv fmod M2{Y :: T2} is sort MySort . op p : Y$Elt2 MySort -> MySort . var X : Y$Elt2 . var Y : MySort . eq p(X, Y) = f2(X, Y) . endfm fmod TEST is inc M2{V{V2}} . endfm show all . red p(1, A:MySort) . maude-3.1/tests/Misc/commands.maude0000644000175200017520000000130310026174223014242 00000000000000set show timing off . set show advisories off . mod FOO is inc INT . op f : Int Int -> Int [assoc comm id: 1] . sort Foo . subsort Int < Foo . vars X Y Z : Int . eq f(f(X, Y), X) = f(Y, Y) . cq f(f(X, Y), Y) = f(Y, X) if X =/= Y . rl f(f(X, Y), X) => f(Y, Y) . crl f(f(X, Y), Y) => f(Z, X) if Z =/= Y . mb f(X, X) : NzInt . cmb f(X, Y) : NzInt if X =/= Y . endm show mod . show all FOO . show sorts . show kinds . show eqs . show mbs . show rls . show vars . show summary . select INT . show mod . show mod FOO . show eqs FOO . parse in FOO : f(0, 2) . set print mixfix off . show all FOO . set print mixfix on . set print with parens on . show all FOO . set print with parens off . maude-3.1/tests/Misc/unification.maude0000644000175200017520000000713613675006400014767 00000000000000set show advise off . set show timing off . *** order sorted free theory unification is not unitary fmod TEST is pr NAT . op f : Nat Nat -> Nat . op f : NzNat Nat -> NzNat . op f : Nat NzNat -> NzNat . endfm unify f(X:Nat, Y:Nat) ^ B:NzNat =? A:NzNat ^ f(Y:Nat, Z:Nat) . *** quite modest AC unification problems can produce a large number of *** unifiers unify [100] in NAT : X:Nat + X:Nat + Y:Nat =? A:Nat + B:Nat + C:Nat . *** built-in constants are handled; built in functions are not *** evaluated unify in CONVERSION : X:String < "foo" + Y:Char =? Z:String + string(pi) < "foo" + Z:String . *** using forbidden variable names in unificands fails with a warning unify in NAT : X:Nat ^ #1:Nat =? #2:Nat . fmod TEST2 is pr NAT . op f : Nat Nat -> Nat [assoc left id: 0] . endfm *** using of a symbol from an unsupported theory above a non-gound *** term fails with a warning unify f(f(X:Nat, Y:Nat), Z:Nat) =? f(A:Nat, B:Nat) . *** all symbols are allowed in ground terms unify X:Nat + f(41, 42) =? Y:Nat + f(41, 42) . *** order sorted unification is efficient on the iter representation fmod ITER is sorts NzEvenNat EvenNat OddNat NzNat Nat EvenInt OddInt NzInt Int . subsorts OddNat < OddInt NzNat < NzInt < Int . subsorts EvenNat < EvenInt Nat < Int . subsorts NzEvenNat < NzNat EvenNat < Nat . op 0 : -> EvenNat . op s : EvenNat -> OddNat [iter] . op s : OddNat -> NzEvenNat [iter] . op s : Nat -> NzNat [iter] . op s : EvenInt -> OddInt [iter] . op s : OddInt -> EvenInt [iter] . op s : Int -> Int [iter] . op _+_ : Int Int -> Int [comm gather (E e)] . op _+_ : OddInt OddInt -> EvenInt [ditto] . op _+_ : EvenInt EvenInt -> EvenInt [ditto] . op _+_ : OddInt EvenInt -> OddInt [ditto] . op _+_ : Nat Nat -> Nat [ditto] . op _+_ : Nat NzNat -> NzNat [ditto] . op _+_ : OddNat OddNat -> NzEvenNat [ditto] . op _+_ : NzEvenNat EvenNat -> NzEvenNat [ditto] . op _+_ : EvenNat EvenNat -> EvenNat [ditto] . op _+_ : OddNat EvenNat -> OddNat [ditto] . endfm unify s^1000000(X:OddNat) =? s^100000000001(Y:Int) . unify s^1000000(X:OddNat) =? s^100000000001(Y:Int + Z:Int + W:Int) . fmod AC is sort Foo . ops a b c d e z : -> Foo . op f : Foo Foo -> Foo [assoc comm] . op g : Foo Foo -> Foo . vars W X Y Z A B C D E F : Foo . endfm unify f(X, Y) =? f(A, B) . unify f(X, Y) =? f(a, b) . unify f(X, Y) =? f(a, b, c) . match f(X, Y) <=? f(a, b, c) . unify f(X, X, Y) =? f(X, Y, Y) . unify f(X, X, Y) =? f(X, Y) . unify f(X, X, Y) =? f(A, B, C) . unify f(X, X, Y) =? f(a, B, C) . unify f(X, X, X) =? f(a, a) . unify f(X, X, X, Y) =? f(a, a) . fmod AC2 is sort Elt Set . subsort Elt < Set . ops a b c d e z : -> Elt . op f : Set Set -> Set [assoc comm] . op g : Set Set -> Set . vars U V W X Y Z : Set . vars A B C D E F : Elt . endfm unify f(A, B) =? f(C, D) . unify f(X, A) =? f(Y, B) . unify f(g(X, Y), g(X, Z), U) =? f(g(Y, Z), V) . unify g(f(X, Y), f(X, U, Z)) =? g(f(U, V), f(W, A)) . fmod AC+C is sort Elt Set . subsort Elt < Set . ops a b c d e z : -> Elt . op f : Set Set -> Set [assoc comm] . op g : Set Set -> Set [comm] . vars U V W X Y Z : Set . vars A B C D E F : Elt . endfm unify f(g(X, Y), g(X, Z), U) =? f(g(Y, Z), V) . unify g(f(X, Y), f(X, U, Z)) =? g(f(U, V), f(W, A)) . *** simultaneous unification fmod SIMULT is sort Foo . ops g h : Foo -> Foo . endfm unify g(X:Foo) =? g(Y:Foo) /\ h(X:Foo) =? h(Z:Foo) . unify g(X:Foo) =? Y:Foo /\ h(X:Foo) =? h(Z:Foo) . unify g(X:Foo) =? Y:Foo /\ h(X:Foo) =? h(Y:Foo) . unify g(X:Foo) =? Y:Foo /\ X:Foo =? h(Y:Foo) . unify [1] in SIMULT : g(X:Foo) =? Y:Foo /\ h(X:Foo) =? h(Z:Foo) . maude-3.1/tests/Misc/parse0000755000175200017520000000032013252620403012462 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/parse.maude -no-banner -no-advise \ > parse.out 2>&1 diff $srcdir/parse.expected parse.out > /dev/null 2>&1 maude-3.1/tests/Misc/variantUnification.expected0000644000175200017520000000646013720016537017024 00000000000000========================================== variant unify in FOO : f(X, g(Y, Z)) =? f(X, g(Y, Z)) . Unifier 1 rewrites: 0 X --> #1:Foo Y --> #2:Foo Z --> #3:Foo No more unifiers. rewrites: 0 ========================================== variant unify in FOO : g(f(X, Y), Z) =? g(a, g(A, B)) . Unifier 1 rewrites: 2 X --> a Y --> 1f Z --> g(#1:Foo, #2:Foo) A --> #1:Foo B --> #2:Foo Unifier 2 rewrites: 2 X --> 1f Y --> a Z --> g(#1:Foo, #2:Foo) A --> #1:Foo B --> #2:Foo No more unifiers. rewrites: 2 ========================================== variant unify in FOO : f(1f, g(Y, Z)) =? g(Y, Z) . Unifier 1 rewrites: 1 Y --> #1:Foo Z --> #2:Foo No more unifiers. rewrites: 1 ========================================== variant unify in FOO : g(f(X, Y), Z) =? g(A, f(B, C)) . Unifier 1 rewrites: 4 X --> %1:Foo Y --> %2:Foo Z --> f(%3:Foo, %4:Foo) A --> f(%1:Foo, %2:Foo) B --> %3:Foo C --> %4:Foo Unifier 2 rewrites: 12 X --> #1:Foo Y --> 1f Z --> f(#2:Foo, #3:Foo) A --> #1:Foo B --> #2:Foo C --> #3:Foo Unifier 3 rewrites: 12 X --> 1f Y --> #1:Foo Z --> f(#2:Foo, #3:Foo) A --> #1:Foo B --> #2:Foo C --> #3:Foo Unifier 4 rewrites: 12 X --> #1:Foo Y --> #2:Foo Z --> #3:Foo A --> f(#1:Foo, #2:Foo) B --> #3:Foo C --> 1f Unifier 5 rewrites: 12 X --> #1:Foo Y --> #2:Foo Z --> #3:Foo A --> f(#1:Foo, #2:Foo) B --> 1f C --> #3:Foo Unifier 6 rewrites: 12 X --> %1:Foo Y --> 1f Z --> %2:Foo A --> %1:Foo B --> %2:Foo C --> 1f Unifier 7 rewrites: 12 X --> %1:Foo Y --> 1f Z --> %2:Foo A --> %1:Foo B --> 1f C --> %2:Foo Unifier 8 rewrites: 12 X --> 1f Y --> %1:Foo Z --> %2:Foo A --> %1:Foo B --> %2:Foo C --> 1f Unifier 9 rewrites: 12 X --> 1f Y --> %1:Foo Z --> %2:Foo A --> %1:Foo B --> 1f C --> %2:Foo No more unifiers. rewrites: 12 ========================================== variant unify in LEFT-ID : X:Magma a =? Y:Magma a a . Unifier 1 rewrites: 2 X:Magma --> %1:Magma a Y:Magma --> %1:Magma Unifier 2 rewrites: 4 X:Magma --> a Y:Magma --> e No more unifiers. rewrites: 4 ========================================== variant unify in LEFT-ID : a X:Magma =? a a Y:Magma . No unifiers. rewrites: 0 ========================================== variant unify in RIGHT-ID : X:Magma a =? Y:Magma a a . No unifiers. rewrites: 0 ========================================== variant unify in RIGHT-ID : a X:Magma =? a a Y:Magma . Unifier 1 rewrites: 2 X:Magma --> a %1:Magma Y:Magma --> %1:Magma Unifier 2 rewrites: 4 X:Magma --> a Y:Magma --> e No more unifiers. rewrites: 4 ========================================== variant unify in XOR : X + cst1 =? Y + cst2 . Unifier 1 rewrites: 6 X --> cst2 + %1:XOR Y --> cst1 + %1:XOR Unifier 2 rewrites: 6 X --> cst2 Y --> cst1 Unifier 3 rewrites: 24 X --> cst1 + cst2 + #1:XOR Y --> #1:XOR Unifier 4 rewrites: 24 X --> #1:XOR Y --> cst1 + cst2 + #1:XOR Unifier 5 rewrites: 24 X --> 0 Y --> cst1 + cst2 Unifier 6 rewrites: 24 X --> cst1 Y --> cst2 Unifier 7 rewrites: 24 X --> cst1 + cst2 Y --> 0 Unifier 8 rewrites: 24 X --> cst1 + %1:XOR Y --> cst2 + %1:XOR No more unifiers. rewrites: 24 ========================================== variant unify in XOR : X + cst1 =? Y + cst2 such that X + cst1 irreducible . Unifier 1 rewrites: 3 X --> cst2 + %1:XOR Y --> cst1 + %1:XOR Unifier 2 rewrites: 3 X --> cst2 Y --> cst1 Unifier 3 rewrites: 3 X --> #1:XOR Y --> cst1 + cst2 + #1:XOR No more unifiers. rewrites: 3 Bye. maude-3.1/tests/Misc/unification.expected0000644000175200017520000032114713735216660015506 00000000000000========================================== unify in TEST : f(X:Nat, Y:Nat) ^ B:NzNat =? A:NzNat ^ f(Y:Nat, Z:Nat) . Unifier 1 X:Nat --> #1:Nat Y:Nat --> #2:NzNat B:NzNat --> f(#2:NzNat, #3:Nat) A:NzNat --> f(#1:Nat, #2:NzNat) Z:Nat --> #3:Nat Unifier 2 X:Nat --> #1:NzNat Y:Nat --> #2:Nat B:NzNat --> f(#2:Nat, #3:NzNat) A:NzNat --> f(#1:NzNat, #2:Nat) Z:Nat --> #3:NzNat ========================================== unify [100] in NAT : X:Nat + X:Nat + Y:Nat =? A:Nat + B:Nat + C:Nat . Unifier 1 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #5:Nat + #6:Nat + #8:Nat Y:Nat --> #4:Nat + #7:Nat + #9:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #2:Nat + #5:Nat + #5:Nat + #6:Nat + #7:Nat C:Nat --> #3:Nat + #6:Nat + #8:Nat + #8:Nat + #9:Nat Unifier 2 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #5:Nat + #6:Nat + #8:Nat Y:Nat --> #4:Nat + #7:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #2:Nat + #5:Nat + #5:Nat + #6:Nat + #7:Nat C:Nat --> #3:Nat + #6:Nat + #8:Nat + #8:Nat Unifier 3 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #5:Nat + #6:Nat Y:Nat --> #4:Nat + #7:Nat + #8:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #2:Nat + #5:Nat + #5:Nat + #6:Nat + #7:Nat C:Nat --> #3:Nat + #6:Nat + #8:Nat Unifier 4 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #5:Nat + #6:Nat Y:Nat --> #4:Nat + #7:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #2:Nat + #5:Nat + #5:Nat + #6:Nat + #7:Nat C:Nat --> #3:Nat + #6:Nat Unifier 5 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #5:Nat + #6:Nat + #7:Nat Y:Nat --> #4:Nat + #8:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #2:Nat + #5:Nat + #5:Nat + #6:Nat C:Nat --> #3:Nat + #6:Nat + #7:Nat + #7:Nat + #8:Nat Unifier 6 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat + #6:Nat + #7:Nat Y:Nat --> #1:Nat A:Nat --> #1:Nat + #2:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #3:Nat + #5:Nat + #5:Nat + #6:Nat C:Nat --> #4:Nat + #6:Nat + #7:Nat + #7:Nat Unifier 7 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #5:Nat + #6:Nat Y:Nat --> #4:Nat + #7:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #2:Nat + #5:Nat + #5:Nat + #6:Nat C:Nat --> #3:Nat + #6:Nat + #7:Nat Unifier 8 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat + #6:Nat Y:Nat --> #1:Nat A:Nat --> #1:Nat + #2:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #3:Nat + #5:Nat + #5:Nat + #6:Nat C:Nat --> #4:Nat + #6:Nat Unifier 9 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #5:Nat + #7:Nat Y:Nat --> #4:Nat + #6:Nat + #8:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #2:Nat + #5:Nat + #5:Nat + #6:Nat C:Nat --> #3:Nat + #7:Nat + #7:Nat + #8:Nat Unifier 10 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #5:Nat + #7:Nat Y:Nat --> #4:Nat + #6:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #2:Nat + #5:Nat + #5:Nat + #6:Nat C:Nat --> #3:Nat + #7:Nat + #7:Nat Unifier 11 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #5:Nat Y:Nat --> #4:Nat + #6:Nat + #7:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #2:Nat + #5:Nat + #5:Nat + #6:Nat C:Nat --> #3:Nat + #7:Nat Unifier 12 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #5:Nat Y:Nat --> #4:Nat + #6:Nat A:Nat --> #1:Nat + #2:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #3:Nat + #5:Nat + #5:Nat + #6:Nat C:Nat --> #1:Nat Unifier 13 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #5:Nat + #6:Nat Y:Nat --> #4:Nat + #7:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #2:Nat + #5:Nat + #5:Nat C:Nat --> #3:Nat + #6:Nat + #6:Nat + #7:Nat Unifier 14 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat + #6:Nat Y:Nat --> #1:Nat A:Nat --> #1:Nat + #2:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #3:Nat + #5:Nat + #5:Nat C:Nat --> #4:Nat + #6:Nat + #6:Nat Unifier 15 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #5:Nat Y:Nat --> #4:Nat + #6:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #2:Nat + #5:Nat + #5:Nat C:Nat --> #3:Nat + #6:Nat Unifier 16 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat Y:Nat --> #1:Nat A:Nat --> #1:Nat + #2:Nat + #3:Nat + #3:Nat + #4:Nat B:Nat --> #4:Nat + #5:Nat + #5:Nat C:Nat --> #2:Nat Unifier 17 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #5:Nat + #7:Nat Y:Nat --> #4:Nat + #6:Nat + #8:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #2:Nat + #5:Nat + #6:Nat C:Nat --> #3:Nat + #5:Nat + #7:Nat + #7:Nat + #8:Nat Unifier 18 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #5:Nat + #7:Nat Y:Nat --> #4:Nat + #6:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #2:Nat + #5:Nat + #6:Nat C:Nat --> #3:Nat + #5:Nat + #7:Nat + #7:Nat Unifier 19 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #5:Nat Y:Nat --> #4:Nat + #6:Nat + #7:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #2:Nat + #5:Nat + #6:Nat C:Nat --> #3:Nat + #5:Nat + #7:Nat Unifier 20 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #5:Nat Y:Nat --> #4:Nat + #6:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #2:Nat + #5:Nat + #6:Nat C:Nat --> #3:Nat + #5:Nat Unifier 21 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #5:Nat + #6:Nat Y:Nat --> #4:Nat + #7:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #2:Nat + #5:Nat C:Nat --> #3:Nat + #5:Nat + #6:Nat + #6:Nat + #7:Nat Unifier 22 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat + #6:Nat Y:Nat --> #1:Nat A:Nat --> #1:Nat + #2:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #3:Nat + #5:Nat C:Nat --> #4:Nat + #5:Nat + #6:Nat + #6:Nat Unifier 23 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #5:Nat Y:Nat --> #4:Nat + #6:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #2:Nat + #5:Nat C:Nat --> #3:Nat + #5:Nat + #6:Nat Unifier 24 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat Y:Nat --> #1:Nat A:Nat --> #1:Nat + #2:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #3:Nat + #5:Nat C:Nat --> #4:Nat + #5:Nat Unifier 25 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #6:Nat Y:Nat --> #4:Nat + #5:Nat + #7:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #2:Nat + #5:Nat C:Nat --> #3:Nat + #6:Nat + #6:Nat + #7:Nat Unifier 26 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #6:Nat Y:Nat --> #4:Nat + #5:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #2:Nat + #5:Nat C:Nat --> #3:Nat + #6:Nat + #6:Nat Unifier 27 X:Nat --> #1:Nat + #2:Nat + #3:Nat Y:Nat --> #4:Nat + #5:Nat + #6:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #2:Nat + #5:Nat C:Nat --> #3:Nat + #6:Nat Unifier 28 X:Nat --> #1:Nat + #2:Nat + #3:Nat Y:Nat --> #4:Nat + #5:Nat A:Nat --> #1:Nat + #2:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #3:Nat + #5:Nat C:Nat --> #1:Nat Unifier 29 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #5:Nat Y:Nat --> #4:Nat + #6:Nat A:Nat --> #1:Nat + #2:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #1:Nat C:Nat --> #3:Nat + #5:Nat + #5:Nat + #6:Nat Unifier 30 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat Y:Nat --> #1:Nat A:Nat --> #1:Nat + #2:Nat + #3:Nat + #3:Nat + #4:Nat B:Nat --> #2:Nat C:Nat --> #4:Nat + #5:Nat + #5:Nat Unifier 31 X:Nat --> #1:Nat + #2:Nat + #3:Nat Y:Nat --> #4:Nat + #5:Nat A:Nat --> #1:Nat + #2:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #1:Nat C:Nat --> #3:Nat + #5:Nat Unifier 32 X:Nat --> #2:Nat + #3:Nat + #4:Nat Y:Nat --> #1:Nat A:Nat --> #1:Nat + #2:Nat + #3:Nat + #4:Nat + #4:Nat B:Nat --> #2:Nat C:Nat --> #3:Nat Unifier 33 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #4:Nat + #5:Nat + #7:Nat Y:Nat --> #6:Nat + #8:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat B:Nat --> #2:Nat + #4:Nat + #4:Nat + #5:Nat + #6:Nat C:Nat --> #3:Nat + #5:Nat + #7:Nat + #7:Nat + #8:Nat Unifier 34 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat + #6:Nat + #7:Nat Y:Nat --> #1:Nat A:Nat --> #2:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #1:Nat + #3:Nat + #5:Nat + #5:Nat + #6:Nat C:Nat --> #4:Nat + #6:Nat + #7:Nat + #7:Nat Unifier 35 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #4:Nat + #5:Nat Y:Nat --> #6:Nat + #7:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat B:Nat --> #2:Nat + #4:Nat + #4:Nat + #5:Nat + #6:Nat C:Nat --> #3:Nat + #5:Nat + #7:Nat Unifier 36 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat + #6:Nat Y:Nat --> #1:Nat A:Nat --> #2:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #1:Nat + #3:Nat + #5:Nat + #5:Nat + #6:Nat C:Nat --> #4:Nat + #6:Nat Unifier 37 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat + #6:Nat + #7:Nat Y:Nat --> #1:Nat A:Nat --> #2:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #3:Nat + #5:Nat + #5:Nat + #6:Nat C:Nat --> #1:Nat + #4:Nat + #6:Nat + #7:Nat + #7:Nat Unifier 38 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat + #6:Nat Y:Nat --> #1:Nat A:Nat --> #2:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #3:Nat + #5:Nat + #5:Nat + #6:Nat C:Nat --> #1:Nat + #4:Nat + #6:Nat Unifier 39 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #4:Nat + #6:Nat Y:Nat --> #5:Nat + #7:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat B:Nat --> #2:Nat + #4:Nat + #4:Nat + #5:Nat C:Nat --> #3:Nat + #6:Nat + #6:Nat + #7:Nat Unifier 40 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat + #6:Nat Y:Nat --> #1:Nat A:Nat --> #2:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #1:Nat + #3:Nat + #5:Nat + #5:Nat C:Nat --> #4:Nat + #6:Nat + #6:Nat Unifier 41 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #4:Nat Y:Nat --> #5:Nat + #6:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat B:Nat --> #2:Nat + #4:Nat + #4:Nat + #5:Nat C:Nat --> #3:Nat + #6:Nat Unifier 42 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat Y:Nat --> #1:Nat A:Nat --> #2:Nat + #3:Nat + #3:Nat + #4:Nat B:Nat --> #1:Nat + #4:Nat + #5:Nat + #5:Nat C:Nat --> #2:Nat Unifier 43 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat + #6:Nat Y:Nat --> #1:Nat A:Nat --> #2:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #3:Nat + #5:Nat + #5:Nat C:Nat --> #1:Nat + #4:Nat + #6:Nat + #6:Nat Unifier 44 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat Y:Nat --> #1:Nat A:Nat --> #2:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #3:Nat + #5:Nat + #5:Nat C:Nat --> #1:Nat + #4:Nat Unifier 45 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #4:Nat + #6:Nat Y:Nat --> #5:Nat + #7:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat B:Nat --> #2:Nat + #4:Nat + #5:Nat C:Nat --> #3:Nat + #4:Nat + #6:Nat + #6:Nat + #7:Nat Unifier 46 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat + #6:Nat Y:Nat --> #1:Nat A:Nat --> #2:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #1:Nat + #3:Nat + #5:Nat C:Nat --> #4:Nat + #5:Nat + #6:Nat + #6:Nat Unifier 47 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #4:Nat Y:Nat --> #5:Nat + #6:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat B:Nat --> #2:Nat + #4:Nat + #5:Nat C:Nat --> #3:Nat + #4:Nat + #6:Nat Unifier 48 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat Y:Nat --> #1:Nat A:Nat --> #2:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #1:Nat + #3:Nat + #5:Nat C:Nat --> #4:Nat + #5:Nat Unifier 49 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat + #6:Nat Y:Nat --> #1:Nat A:Nat --> #2:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #3:Nat + #5:Nat C:Nat --> #1:Nat + #4:Nat + #5:Nat + #6:Nat + #6:Nat Unifier 50 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat Y:Nat --> #1:Nat A:Nat --> #2:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #3:Nat + #5:Nat C:Nat --> #1:Nat + #4:Nat + #5:Nat Unifier 51 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #5:Nat Y:Nat --> #4:Nat + #6:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat B:Nat --> #2:Nat + #4:Nat C:Nat --> #3:Nat + #5:Nat + #5:Nat + #6:Nat Unifier 52 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat Y:Nat --> #1:Nat A:Nat --> #2:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #1:Nat + #3:Nat C:Nat --> #4:Nat + #5:Nat + #5:Nat Unifier 53 X:Nat --> #1:Nat + #2:Nat + #3:Nat Y:Nat --> #4:Nat + #5:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat B:Nat --> #2:Nat + #4:Nat C:Nat --> #3:Nat + #5:Nat Unifier 54 X:Nat --> #2:Nat + #3:Nat + #4:Nat Y:Nat --> #1:Nat A:Nat --> #2:Nat + #3:Nat + #3:Nat + #4:Nat B:Nat --> #1:Nat + #4:Nat C:Nat --> #2:Nat Unifier 55 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat Y:Nat --> #1:Nat A:Nat --> #2:Nat + #3:Nat + #3:Nat + #4:Nat B:Nat --> #2:Nat C:Nat --> #1:Nat + #4:Nat + #5:Nat + #5:Nat Unifier 56 X:Nat --> #2:Nat + #3:Nat + #4:Nat Y:Nat --> #1:Nat A:Nat --> #2:Nat + #3:Nat + #3:Nat + #4:Nat B:Nat --> #2:Nat C:Nat --> #1:Nat + #4:Nat Unifier 57 X:Nat --> #1:Nat + #2:Nat + #4:Nat + #5:Nat + #7:Nat Y:Nat --> #3:Nat + #6:Nat + #8:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat B:Nat --> #2:Nat + #4:Nat + #4:Nat + #5:Nat + #6:Nat C:Nat --> #5:Nat + #7:Nat + #7:Nat + #8:Nat Unifier 58 X:Nat --> #1:Nat + #2:Nat + #4:Nat + #5:Nat + #7:Nat Y:Nat --> #3:Nat + #6:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat B:Nat --> #2:Nat + #4:Nat + #4:Nat + #5:Nat + #6:Nat C:Nat --> #5:Nat + #7:Nat + #7:Nat Unifier 59 X:Nat --> #1:Nat + #2:Nat + #4:Nat + #5:Nat Y:Nat --> #3:Nat + #6:Nat + #7:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat B:Nat --> #2:Nat + #4:Nat + #4:Nat + #5:Nat + #6:Nat C:Nat --> #5:Nat + #7:Nat Unifier 60 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #5:Nat Y:Nat --> #4:Nat + #6:Nat A:Nat --> #2:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #1:Nat + #3:Nat + #5:Nat + #5:Nat + #6:Nat C:Nat --> #1:Nat Unifier 61 X:Nat --> #1:Nat + #2:Nat + #4:Nat + #5:Nat + #6:Nat Y:Nat --> #3:Nat + #7:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat B:Nat --> #2:Nat + #4:Nat + #4:Nat + #5:Nat C:Nat --> #5:Nat + #6:Nat + #6:Nat + #7:Nat Unifier 62 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat + #6:Nat Y:Nat --> #1:Nat A:Nat --> #1:Nat + #2:Nat + #2:Nat + #3:Nat B:Nat --> #3:Nat + #4:Nat + #4:Nat + #5:Nat C:Nat --> #5:Nat + #6:Nat + #6:Nat Unifier 63 X:Nat --> #1:Nat + #2:Nat + #4:Nat + #5:Nat Y:Nat --> #3:Nat + #6:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat B:Nat --> #2:Nat + #4:Nat + #4:Nat + #5:Nat C:Nat --> #5:Nat + #6:Nat Unifier 64 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat Y:Nat --> #1:Nat A:Nat --> #1:Nat + #3:Nat + #3:Nat + #4:Nat B:Nat --> #2:Nat + #4:Nat + #5:Nat + #5:Nat C:Nat --> #2:Nat Unifier 65 X:Nat --> #1:Nat + #2:Nat + #4:Nat + #6:Nat Y:Nat --> #3:Nat + #5:Nat + #7:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat B:Nat --> #2:Nat + #4:Nat + #4:Nat + #5:Nat C:Nat --> #6:Nat + #6:Nat + #7:Nat Unifier 66 X:Nat --> #1:Nat + #2:Nat + #4:Nat + #6:Nat Y:Nat --> #3:Nat + #5:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat B:Nat --> #2:Nat + #4:Nat + #4:Nat + #5:Nat C:Nat --> #6:Nat + #6:Nat Unifier 67 X:Nat --> #2:Nat + #3:Nat + #5:Nat Y:Nat --> #1:Nat + #4:Nat + #6:Nat A:Nat --> #2:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #3:Nat + #5:Nat + #5:Nat + #6:Nat C:Nat --> #1:Nat Unifier 68 X:Nat --> #1:Nat + #2:Nat + #4:Nat + #5:Nat Y:Nat --> #3:Nat + #6:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat B:Nat --> #2:Nat + #4:Nat + #4:Nat C:Nat --> #5:Nat + #5:Nat + #6:Nat Unifier 69 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat Y:Nat --> #1:Nat A:Nat --> #1:Nat + #2:Nat + #2:Nat + #3:Nat B:Nat --> #3:Nat + #4:Nat + #4:Nat C:Nat --> #5:Nat + #5:Nat Unifier 70 X:Nat --> #2:Nat + #3:Nat + #5:Nat Y:Nat --> #1:Nat + #4:Nat A:Nat --> #2:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #3:Nat + #5:Nat + #5:Nat C:Nat --> #1:Nat Unifier 71 X:Nat --> #1:Nat + #2:Nat + #4:Nat + #6:Nat Y:Nat --> #3:Nat + #5:Nat + #7:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat B:Nat --> #2:Nat + #4:Nat + #5:Nat C:Nat --> #4:Nat + #6:Nat + #6:Nat + #7:Nat Unifier 72 X:Nat --> #1:Nat + #2:Nat + #4:Nat + #6:Nat Y:Nat --> #3:Nat + #5:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat B:Nat --> #2:Nat + #4:Nat + #5:Nat C:Nat --> #4:Nat + #6:Nat + #6:Nat Unifier 73 X:Nat --> #1:Nat + #2:Nat + #4:Nat Y:Nat --> #3:Nat + #5:Nat + #6:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat B:Nat --> #2:Nat + #4:Nat + #5:Nat C:Nat --> #4:Nat + #6:Nat Unifier 74 X:Nat --> #1:Nat + #2:Nat + #3:Nat Y:Nat --> #4:Nat + #5:Nat A:Nat --> #2:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #1:Nat + #3:Nat + #5:Nat C:Nat --> #1:Nat Unifier 75 X:Nat --> #1:Nat + #2:Nat + #4:Nat + #5:Nat Y:Nat --> #3:Nat + #6:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat B:Nat --> #2:Nat + #4:Nat C:Nat --> #4:Nat + #5:Nat + #5:Nat + #6:Nat Unifier 76 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat Y:Nat --> #1:Nat A:Nat --> #1:Nat + #2:Nat + #2:Nat + #3:Nat B:Nat --> #3:Nat + #4:Nat C:Nat --> #4:Nat + #5:Nat + #5:Nat Unifier 77 X:Nat --> #1:Nat + #2:Nat + #4:Nat Y:Nat --> #3:Nat + #5:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat B:Nat --> #2:Nat + #4:Nat C:Nat --> #4:Nat + #5:Nat Unifier 78 X:Nat --> #2:Nat + #3:Nat + #4:Nat Y:Nat --> #1:Nat A:Nat --> #1:Nat + #3:Nat + #3:Nat + #4:Nat B:Nat --> #2:Nat + #4:Nat C:Nat --> #2:Nat Unifier 79 X:Nat --> #1:Nat + #2:Nat + #5:Nat Y:Nat --> #3:Nat + #4:Nat + #6:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat B:Nat --> #2:Nat + #4:Nat C:Nat --> #5:Nat + #5:Nat + #6:Nat Unifier 80 X:Nat --> #1:Nat + #2:Nat + #5:Nat Y:Nat --> #3:Nat + #4:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat + #3:Nat B:Nat --> #2:Nat + #4:Nat C:Nat --> #5:Nat + #5:Nat Unifier 81 X:Nat --> #2:Nat + #3:Nat Y:Nat --> #1:Nat + #4:Nat + #5:Nat A:Nat --> #2:Nat + #2:Nat + #3:Nat + #4:Nat B:Nat --> #3:Nat + #5:Nat C:Nat --> #1:Nat Unifier 82 X:Nat --> #1:Nat + #2:Nat + #4:Nat Y:Nat --> #3:Nat + #5:Nat A:Nat --> #1:Nat + #2:Nat + #2:Nat + #3:Nat B:Nat --> #1:Nat C:Nat --> #4:Nat + #4:Nat + #5:Nat Unifier 83 X:Nat --> #2:Nat + #3:Nat + #4:Nat Y:Nat --> #1:Nat A:Nat --> #1:Nat + #2:Nat + #3:Nat + #3:Nat B:Nat --> #2:Nat C:Nat --> #4:Nat + #4:Nat Unifier 84 X:Nat --> #1:Nat + #3:Nat Y:Nat --> #2:Nat + #4:Nat A:Nat --> #1:Nat + #3:Nat + #3:Nat + #4:Nat B:Nat --> #1:Nat C:Nat --> #2:Nat Unifier 85 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #4:Nat + #6:Nat Y:Nat --> #5:Nat + #7:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat B:Nat --> #2:Nat + #3:Nat + #3:Nat + #4:Nat + #5:Nat C:Nat --> #4:Nat + #6:Nat + #6:Nat + #7:Nat Unifier 86 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat + #6:Nat Y:Nat --> #1:Nat A:Nat --> #2:Nat + #2:Nat + #3:Nat B:Nat --> #1:Nat + #3:Nat + #4:Nat + #4:Nat + #5:Nat C:Nat --> #5:Nat + #6:Nat + #6:Nat Unifier 87 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #4:Nat Y:Nat --> #5:Nat + #6:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat B:Nat --> #2:Nat + #3:Nat + #3:Nat + #4:Nat + #5:Nat C:Nat --> #4:Nat + #6:Nat Unifier 88 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat Y:Nat --> #1:Nat A:Nat --> #3:Nat + #3:Nat + #4:Nat B:Nat --> #1:Nat + #2:Nat + #4:Nat + #5:Nat + #5:Nat C:Nat --> #2:Nat Unifier 89 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat + #6:Nat Y:Nat --> #1:Nat A:Nat --> #2:Nat + #2:Nat + #3:Nat B:Nat --> #3:Nat + #4:Nat + #4:Nat + #5:Nat C:Nat --> #1:Nat + #5:Nat + #6:Nat + #6:Nat Unifier 90 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat Y:Nat --> #1:Nat A:Nat --> #2:Nat + #2:Nat + #3:Nat B:Nat --> #3:Nat + #4:Nat + #4:Nat + #5:Nat C:Nat --> #1:Nat + #5:Nat Unifier 91 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #5:Nat Y:Nat --> #4:Nat + #6:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat B:Nat --> #2:Nat + #3:Nat + #3:Nat + #4:Nat C:Nat --> #5:Nat + #5:Nat + #6:Nat Unifier 92 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat Y:Nat --> #1:Nat A:Nat --> #2:Nat + #2:Nat + #3:Nat B:Nat --> #1:Nat + #3:Nat + #4:Nat + #4:Nat C:Nat --> #5:Nat + #5:Nat Unifier 93 X:Nat --> #2:Nat + #3:Nat + #4:Nat Y:Nat --> #1:Nat + #5:Nat A:Nat --> #2:Nat + #2:Nat + #3:Nat B:Nat --> #3:Nat + #4:Nat + #4:Nat + #5:Nat C:Nat --> #1:Nat Unifier 94 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat Y:Nat --> #1:Nat A:Nat --> #2:Nat + #2:Nat + #3:Nat B:Nat --> #3:Nat + #4:Nat + #4:Nat C:Nat --> #1:Nat + #5:Nat + #5:Nat Unifier 95 X:Nat --> #2:Nat + #3:Nat + #4:Nat Y:Nat --> #1:Nat A:Nat --> #2:Nat + #2:Nat + #3:Nat B:Nat --> #3:Nat + #4:Nat + #4:Nat C:Nat --> #1:Nat Unifier 96 X:Nat --> #1:Nat + #2:Nat + #3:Nat + #5:Nat Y:Nat --> #4:Nat + #6:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat B:Nat --> #2:Nat + #3:Nat + #4:Nat C:Nat --> #3:Nat + #5:Nat + #5:Nat + #6:Nat Unifier 97 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat Y:Nat --> #1:Nat A:Nat --> #2:Nat + #2:Nat + #3:Nat B:Nat --> #1:Nat + #3:Nat + #4:Nat C:Nat --> #4:Nat + #5:Nat + #5:Nat Unifier 98 X:Nat --> #1:Nat + #2:Nat + #3:Nat Y:Nat --> #4:Nat + #5:Nat A:Nat --> #1:Nat + #1:Nat + #2:Nat B:Nat --> #2:Nat + #3:Nat + #4:Nat C:Nat --> #3:Nat + #5:Nat Unifier 99 X:Nat --> #2:Nat + #3:Nat + #4:Nat Y:Nat --> #1:Nat A:Nat --> #3:Nat + #3:Nat + #4:Nat B:Nat --> #1:Nat + #2:Nat + #4:Nat C:Nat --> #2:Nat Unifier 100 X:Nat --> #2:Nat + #3:Nat + #4:Nat + #5:Nat Y:Nat --> #1:Nat A:Nat --> #2:Nat + #2:Nat + #3:Nat B:Nat --> #3:Nat + #4:Nat C:Nat --> #1:Nat + #4:Nat + #5:Nat + #5:Nat ========================================== unify in CONVERSION : X:String < "foo" + Y:Char =? Z:String + string(pi) < "foo" + Z:String . Unifier 1 X:String --> #1:Char + string(pi) Y:Char --> #1:Char Z:String --> #1:Char ========================================== unify in NAT : X:Nat ^ #1:Nat =? #2:Nat . Warning: unsafe variable name #1:Nat in unification problem. ========================================== unify in TEST2 : f(f(X:Nat, Y:Nat), Z:Nat) =? f(A:Nat, B:Nat) . Warning: Term f(X:Nat, Y:Nat, Z:Nat) is non-ground and unification for its top symbol is not currently supported. ========================================== unify in TEST2 : X:Nat + f(41, 42) =? Y:Nat + f(41, 42) . Unifier 1 X:Nat --> #1:Nat Y:Nat --> #1:Nat ========================================== unify in ITER : s^1000000(X:OddNat) =? s^100000000001(Y:Int) . Unifier 1 X:OddNat --> s^99999000001(#1:EvenNat) Y:Int --> #1:EvenNat ========================================== unify in ITER : s^1000000(X:OddNat) =? s^100000000001(Y:Int + Z:Int + W:Int) . Unifier 1 X:OddNat --> s^99999000001(#1:OddNat + (#2:OddNat + #3:EvenNat)) W:Int --> #1:OddNat Z:Int --> #2:OddNat Y:Int --> #3:EvenNat Unifier 2 X:OddNat --> s^99999000001(#1:OddNat + (#2:EvenNat + #3:OddNat)) W:Int --> #1:OddNat Z:Int --> #2:EvenNat Y:Int --> #3:OddNat Unifier 3 X:OddNat --> s^99999000001(#1:EvenNat + (#2:OddNat + #3:OddNat)) W:Int --> #1:EvenNat Z:Int --> #2:OddNat Y:Int --> #3:OddNat Unifier 4 X:OddNat --> s^99999000001(#1:EvenNat + (#2:EvenNat + #3:EvenNat)) W:Int --> #1:EvenNat Z:Int --> #2:EvenNat Y:Int --> #3:EvenNat ========================================== unify in AC : f(X, Y) =? f(A, B) . Unifier 1 X --> f(#1:Foo, #3:Foo) Y --> f(#2:Foo, #4:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#3:Foo, #4:Foo) Unifier 2 X --> f(#2:Foo, #3:Foo) Y --> #1:Foo A --> f(#1:Foo, #3:Foo) B --> #2:Foo Unifier 3 X --> #1:Foo Y --> f(#2:Foo, #3:Foo) A --> f(#1:Foo, #3:Foo) B --> #2:Foo Unifier 4 X --> f(#2:Foo, #3:Foo) Y --> #1:Foo A --> #2:Foo B --> f(#1:Foo, #3:Foo) Unifier 5 X --> #1:Foo Y --> #2:Foo A --> #1:Foo B --> #2:Foo Unifier 6 X --> #1:Foo Y --> f(#2:Foo, #3:Foo) A --> #2:Foo B --> f(#1:Foo, #3:Foo) Unifier 7 X --> #2:Foo Y --> #1:Foo A --> #1:Foo B --> #2:Foo ========================================== unify in AC : f(X, Y) =? f(a, b) . Unifier 1 X --> a Y --> b Unifier 2 X --> b Y --> a ========================================== unify in AC : f(X, Y) =? f(a, b, c) . Unifier 1 X --> f(a, b) Y --> c Unifier 2 X --> f(a, c) Y --> b Unifier 3 X --> a Y --> f(b, c) Unifier 4 X --> f(b, c) Y --> a Unifier 5 X --> b Y --> f(a, c) Unifier 6 X --> c Y --> f(a, b) ========================================== match in AC : f(X, Y) <=? f(a, b, c) . Matcher 1 X --> a Y --> f(b, c) Matcher 2 X --> b Y --> f(a, c) Matcher 3 X --> c Y --> f(a, b) Matcher 4 X --> f(a, b) Y --> c Matcher 5 X --> f(a, c) Y --> b Matcher 6 X --> f(b, c) Y --> a ========================================== unify in AC : f(X, X, Y) =? f(X, Y, Y) . Unifier 1 X --> #1:Foo Y --> #1:Foo ========================================== unify in AC : f(X, X, Y) =? f(X, Y) . No unifier. ========================================== unify in AC : f(X, X, Y) =? f(A, B, C) . Unifier 1 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo, #6:Foo, #8:Foo) Y --> f(#4:Foo, #7:Foo, #9:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#2:Foo, #5:Foo, #5:Foo, #6:Foo, #7:Foo) C --> f(#3:Foo, #6:Foo, #8:Foo, #8:Foo, #9:Foo) Unifier 2 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo, #6:Foo, #8:Foo) Y --> f(#4:Foo, #7:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#2:Foo, #5:Foo, #5:Foo, #6:Foo, #7:Foo) C --> f(#3:Foo, #6:Foo, #8:Foo, #8:Foo) Unifier 3 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo, #6:Foo) Y --> f(#4:Foo, #7:Foo, #8:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#2:Foo, #5:Foo, #5:Foo, #6:Foo, #7:Foo) C --> f(#3:Foo, #6:Foo, #8:Foo) Unifier 4 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo, #6:Foo) Y --> f(#4:Foo, #7:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#2:Foo, #5:Foo, #5:Foo, #6:Foo, #7:Foo) C --> f(#3:Foo, #6:Foo) Unifier 5 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo, #6:Foo, #7:Foo) Y --> f(#4:Foo, #8:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#2:Foo, #5:Foo, #5:Foo, #6:Foo) C --> f(#3:Foo, #6:Foo, #7:Foo, #7:Foo, #8:Foo) Unifier 6 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo, #7:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#3:Foo, #5:Foo, #5:Foo, #6:Foo) C --> f(#4:Foo, #6:Foo, #7:Foo, #7:Foo) Unifier 7 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo, #6:Foo) Y --> f(#4:Foo, #7:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#2:Foo, #5:Foo, #5:Foo, #6:Foo) C --> f(#3:Foo, #6:Foo, #7:Foo) Unifier 8 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#3:Foo, #5:Foo, #5:Foo, #6:Foo) C --> f(#4:Foo, #6:Foo) Unifier 9 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo, #7:Foo) Y --> f(#4:Foo, #6:Foo, #8:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#2:Foo, #5:Foo, #5:Foo, #6:Foo) C --> f(#3:Foo, #7:Foo, #7:Foo, #8:Foo) Unifier 10 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo, #7:Foo) Y --> f(#4:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#2:Foo, #5:Foo, #5:Foo, #6:Foo) C --> f(#3:Foo, #7:Foo, #7:Foo) Unifier 11 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo) Y --> f(#4:Foo, #6:Foo, #7:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#2:Foo, #5:Foo, #5:Foo, #6:Foo) C --> f(#3:Foo, #7:Foo) Unifier 12 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo) Y --> f(#4:Foo, #6:Foo) A --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#3:Foo, #5:Foo, #5:Foo, #6:Foo) C --> #1:Foo Unifier 13 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo, #6:Foo) Y --> f(#4:Foo, #7:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#2:Foo, #5:Foo, #5:Foo) C --> f(#3:Foo, #6:Foo, #6:Foo, #7:Foo) Unifier 14 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#3:Foo, #5:Foo, #5:Foo) C --> f(#4:Foo, #6:Foo, #6:Foo) Unifier 15 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo) Y --> f(#4:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#2:Foo, #5:Foo, #5:Foo) C --> f(#3:Foo, #6:Foo) Unifier 16 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo, #3:Foo, #3:Foo, #4:Foo) B --> f(#4:Foo, #5:Foo, #5:Foo) C --> #2:Foo Unifier 17 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo, #7:Foo) Y --> f(#4:Foo, #6:Foo, #8:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#2:Foo, #5:Foo, #6:Foo) C --> f(#3:Foo, #5:Foo, #7:Foo, #7:Foo, #8:Foo) Unifier 18 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo, #7:Foo) Y --> f(#4:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#2:Foo, #5:Foo, #6:Foo) C --> f(#3:Foo, #5:Foo, #7:Foo, #7:Foo) Unifier 19 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo) Y --> f(#4:Foo, #6:Foo, #7:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#2:Foo, #5:Foo, #6:Foo) C --> f(#3:Foo, #5:Foo, #7:Foo) Unifier 20 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo) Y --> f(#4:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#2:Foo, #5:Foo, #6:Foo) C --> f(#3:Foo, #5:Foo) Unifier 21 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo, #6:Foo) Y --> f(#4:Foo, #7:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#2:Foo, #5:Foo) C --> f(#3:Foo, #5:Foo, #6:Foo, #6:Foo, #7:Foo) Unifier 22 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#3:Foo, #5:Foo) C --> f(#4:Foo, #5:Foo, #6:Foo, #6:Foo) Unifier 23 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo) Y --> f(#4:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#2:Foo, #5:Foo) C --> f(#3:Foo, #5:Foo, #6:Foo) Unifier 24 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#3:Foo, #5:Foo) C --> f(#4:Foo, #5:Foo) Unifier 25 X --> f(#1:Foo, #2:Foo, #3:Foo, #6:Foo) Y --> f(#4:Foo, #5:Foo, #7:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#2:Foo, #5:Foo) C --> f(#3:Foo, #6:Foo, #6:Foo, #7:Foo) Unifier 26 X --> f(#1:Foo, #2:Foo, #3:Foo, #6:Foo) Y --> f(#4:Foo, #5:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#2:Foo, #5:Foo) C --> f(#3:Foo, #6:Foo, #6:Foo) Unifier 27 X --> f(#1:Foo, #2:Foo, #3:Foo) Y --> f(#4:Foo, #5:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#2:Foo, #5:Foo) C --> f(#3:Foo, #6:Foo) Unifier 28 X --> f(#1:Foo, #2:Foo, #3:Foo) Y --> f(#4:Foo, #5:Foo) A --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#3:Foo, #5:Foo) C --> #1:Foo Unifier 29 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo) Y --> f(#4:Foo, #6:Foo) A --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> #1:Foo C --> f(#3:Foo, #5:Foo, #5:Foo, #6:Foo) Unifier 30 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo, #3:Foo, #3:Foo, #4:Foo) B --> #2:Foo C --> f(#4:Foo, #5:Foo, #5:Foo) Unifier 31 X --> f(#1:Foo, #2:Foo, #3:Foo) Y --> f(#4:Foo, #5:Foo) A --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> #1:Foo C --> f(#3:Foo, #5:Foo) Unifier 32 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo, #3:Foo, #4:Foo, #4:Foo) B --> #2:Foo C --> #3:Foo Unifier 33 X --> f(#1:Foo, #2:Foo, #3:Foo, #4:Foo, #5:Foo, #7:Foo) Y --> f(#6:Foo, #8:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo, #4:Foo, #5:Foo, #6:Foo) C --> f(#3:Foo, #5:Foo, #7:Foo, #7:Foo, #8:Foo) Unifier 34 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo, #7:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#1:Foo, #3:Foo, #5:Foo, #5:Foo, #6:Foo) C --> f(#4:Foo, #6:Foo, #7:Foo, #7:Foo) Unifier 35 X --> f(#1:Foo, #2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> f(#6:Foo, #7:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo, #4:Foo, #5:Foo, #6:Foo) C --> f(#3:Foo, #5:Foo, #7:Foo) Unifier 36 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#1:Foo, #3:Foo, #5:Foo, #5:Foo, #6:Foo) C --> f(#4:Foo, #6:Foo) Unifier 37 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo, #7:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#3:Foo, #5:Foo, #5:Foo, #6:Foo) C --> f(#1:Foo, #4:Foo, #6:Foo, #7:Foo, #7:Foo) Unifier 38 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#3:Foo, #5:Foo, #5:Foo, #6:Foo) C --> f(#1:Foo, #4:Foo, #6:Foo) Unifier 39 X --> f(#1:Foo, #2:Foo, #3:Foo, #4:Foo, #6:Foo) Y --> f(#5:Foo, #7:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo, #4:Foo, #5:Foo) C --> f(#3:Foo, #6:Foo, #6:Foo, #7:Foo) Unifier 40 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#1:Foo, #3:Foo, #5:Foo, #5:Foo) C --> f(#4:Foo, #6:Foo, #6:Foo) Unifier 41 X --> f(#1:Foo, #2:Foo, #3:Foo, #4:Foo) Y --> f(#5:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo, #4:Foo, #5:Foo) C --> f(#3:Foo, #6:Foo) Unifier 42 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#2:Foo, #3:Foo, #3:Foo, #4:Foo) B --> f(#1:Foo, #4:Foo, #5:Foo, #5:Foo) C --> #2:Foo Unifier 43 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#3:Foo, #5:Foo, #5:Foo) C --> f(#1:Foo, #4:Foo, #6:Foo, #6:Foo) Unifier 44 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#3:Foo, #5:Foo, #5:Foo) C --> f(#1:Foo, #4:Foo) Unifier 45 X --> f(#1:Foo, #2:Foo, #3:Foo, #4:Foo, #6:Foo) Y --> f(#5:Foo, #7:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo, #5:Foo) C --> f(#3:Foo, #4:Foo, #6:Foo, #6:Foo, #7:Foo) Unifier 46 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#1:Foo, #3:Foo, #5:Foo) C --> f(#4:Foo, #5:Foo, #6:Foo, #6:Foo) Unifier 47 X --> f(#1:Foo, #2:Foo, #3:Foo, #4:Foo) Y --> f(#5:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo, #5:Foo) C --> f(#3:Foo, #4:Foo, #6:Foo) Unifier 48 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#1:Foo, #3:Foo, #5:Foo) C --> f(#4:Foo, #5:Foo) Unifier 49 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#3:Foo, #5:Foo) C --> f(#1:Foo, #4:Foo, #5:Foo, #6:Foo, #6:Foo) Unifier 50 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#3:Foo, #5:Foo) C --> f(#1:Foo, #4:Foo, #5:Foo) Unifier 51 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo) Y --> f(#4:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo) C --> f(#3:Foo, #5:Foo, #5:Foo, #6:Foo) Unifier 52 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#1:Foo, #3:Foo) C --> f(#4:Foo, #5:Foo, #5:Foo) Unifier 53 X --> f(#1:Foo, #2:Foo, #3:Foo) Y --> f(#4:Foo, #5:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo) C --> f(#3:Foo, #5:Foo) Unifier 54 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#2:Foo, #3:Foo, #3:Foo, #4:Foo) B --> f(#1:Foo, #4:Foo) C --> #2:Foo Unifier 55 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#2:Foo, #3:Foo, #3:Foo, #4:Foo) B --> #2:Foo C --> f(#1:Foo, #4:Foo, #5:Foo, #5:Foo) Unifier 56 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#2:Foo, #3:Foo, #3:Foo, #4:Foo) B --> #2:Foo C --> f(#1:Foo, #4:Foo) Unifier 57 X --> f(#1:Foo, #2:Foo, #4:Foo, #5:Foo, #7:Foo) Y --> f(#3:Foo, #6:Foo, #8:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo, #4:Foo, #5:Foo, #6:Foo) C --> f(#5:Foo, #7:Foo, #7:Foo, #8:Foo) Unifier 58 X --> f(#1:Foo, #2:Foo, #4:Foo, #5:Foo, #7:Foo) Y --> f(#3:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo, #4:Foo, #5:Foo, #6:Foo) C --> f(#5:Foo, #7:Foo, #7:Foo) Unifier 59 X --> f(#1:Foo, #2:Foo, #4:Foo, #5:Foo) Y --> f(#3:Foo, #6:Foo, #7:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo, #4:Foo, #5:Foo, #6:Foo) C --> f(#5:Foo, #7:Foo) Unifier 60 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo) Y --> f(#4:Foo, #6:Foo) A --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#1:Foo, #3:Foo, #5:Foo, #5:Foo, #6:Foo) C --> #1:Foo Unifier 61 X --> f(#1:Foo, #2:Foo, #4:Foo, #5:Foo, #6:Foo) Y --> f(#3:Foo, #7:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo, #4:Foo, #5:Foo) C --> f(#5:Foo, #6:Foo, #6:Foo, #7:Foo) Unifier 62 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo) B --> f(#3:Foo, #4:Foo, #4:Foo, #5:Foo) C --> f(#5:Foo, #6:Foo, #6:Foo) Unifier 63 X --> f(#1:Foo, #2:Foo, #4:Foo, #5:Foo) Y --> f(#3:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo, #4:Foo, #5:Foo) C --> f(#5:Foo, #6:Foo) Unifier 64 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#1:Foo, #3:Foo, #3:Foo, #4:Foo) B --> f(#2:Foo, #4:Foo, #5:Foo, #5:Foo) C --> #2:Foo Unifier 65 X --> f(#1:Foo, #2:Foo, #4:Foo, #6:Foo) Y --> f(#3:Foo, #5:Foo, #7:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo, #4:Foo, #5:Foo) C --> f(#6:Foo, #6:Foo, #7:Foo) Unifier 66 X --> f(#1:Foo, #2:Foo, #4:Foo, #6:Foo) Y --> f(#3:Foo, #5:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo, #4:Foo, #5:Foo) C --> f(#6:Foo, #6:Foo) Unifier 67 X --> f(#2:Foo, #3:Foo, #5:Foo) Y --> f(#1:Foo, #4:Foo, #6:Foo) A --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#3:Foo, #5:Foo, #5:Foo, #6:Foo) C --> #1:Foo Unifier 68 X --> f(#1:Foo, #2:Foo, #4:Foo, #5:Foo) Y --> f(#3:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo, #4:Foo) C --> f(#5:Foo, #5:Foo, #6:Foo) Unifier 69 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo) B --> f(#3:Foo, #4:Foo, #4:Foo) C --> f(#5:Foo, #5:Foo) Unifier 70 X --> f(#2:Foo, #3:Foo, #5:Foo) Y --> f(#1:Foo, #4:Foo) A --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#3:Foo, #5:Foo, #5:Foo) C --> #1:Foo Unifier 71 X --> f(#1:Foo, #2:Foo, #4:Foo, #6:Foo) Y --> f(#3:Foo, #5:Foo, #7:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo, #5:Foo) C --> f(#4:Foo, #6:Foo, #6:Foo, #7:Foo) Unifier 72 X --> f(#1:Foo, #2:Foo, #4:Foo, #6:Foo) Y --> f(#3:Foo, #5:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo, #5:Foo) C --> f(#4:Foo, #6:Foo, #6:Foo) Unifier 73 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo, #5:Foo) C --> f(#4:Foo, #6:Foo) Unifier 74 X --> f(#1:Foo, #2:Foo, #3:Foo) Y --> f(#4:Foo, #5:Foo) A --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#1:Foo, #3:Foo, #5:Foo) C --> #1:Foo Unifier 75 X --> f(#1:Foo, #2:Foo, #4:Foo, #5:Foo) Y --> f(#3:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo) C --> f(#4:Foo, #5:Foo, #5:Foo, #6:Foo) Unifier 76 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo) B --> f(#3:Foo, #4:Foo) C --> f(#4:Foo, #5:Foo, #5:Foo) Unifier 77 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo) C --> f(#4:Foo, #5:Foo) Unifier 78 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#1:Foo, #3:Foo, #3:Foo, #4:Foo) B --> f(#2:Foo, #4:Foo) C --> #2:Foo Unifier 79 X --> f(#1:Foo, #2:Foo, #5:Foo) Y --> f(#3:Foo, #4:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo) C --> f(#5:Foo, #5:Foo, #6:Foo) Unifier 80 X --> f(#1:Foo, #2:Foo, #5:Foo) Y --> f(#3:Foo, #4:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo) C --> f(#5:Foo, #5:Foo) Unifier 81 X --> f(#2:Foo, #3:Foo) Y --> f(#1:Foo, #4:Foo, #5:Foo) A --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> f(#3:Foo, #5:Foo) C --> #1:Foo Unifier 82 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo) A --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo) B --> #1:Foo C --> f(#4:Foo, #4:Foo, #5:Foo) Unifier 83 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo, #3:Foo, #3:Foo) B --> #2:Foo C --> f(#4:Foo, #4:Foo) Unifier 84 X --> f(#1:Foo, #3:Foo) Y --> f(#2:Foo, #4:Foo) A --> f(#1:Foo, #3:Foo, #3:Foo, #4:Foo) B --> #1:Foo C --> #2:Foo Unifier 85 X --> f(#1:Foo, #2:Foo, #3:Foo, #4:Foo, #6:Foo) Y --> f(#5:Foo, #7:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo) B --> f(#2:Foo, #3:Foo, #3:Foo, #4:Foo, #5:Foo) C --> f(#4:Foo, #6:Foo, #6:Foo, #7:Foo) Unifier 86 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #3:Foo, #4:Foo, #4:Foo, #5:Foo) C --> f(#5:Foo, #6:Foo, #6:Foo) Unifier 87 X --> f(#1:Foo, #2:Foo, #3:Foo, #4:Foo) Y --> f(#5:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo) B --> f(#2:Foo, #3:Foo, #3:Foo, #4:Foo, #5:Foo) C --> f(#4:Foo, #6:Foo) Unifier 88 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#3:Foo, #3:Foo, #4:Foo) B --> f(#1:Foo, #2:Foo, #4:Foo, #5:Foo, #5:Foo) C --> #2:Foo Unifier 89 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo) B --> f(#3:Foo, #4:Foo, #4:Foo, #5:Foo) C --> f(#1:Foo, #5:Foo, #6:Foo, #6:Foo) Unifier 90 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo) B --> f(#3:Foo, #4:Foo, #4:Foo, #5:Foo) C --> f(#1:Foo, #5:Foo) Unifier 91 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo) Y --> f(#4:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo) B --> f(#2:Foo, #3:Foo, #3:Foo, #4:Foo) C --> f(#5:Foo, #5:Foo, #6:Foo) Unifier 92 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #3:Foo, #4:Foo, #4:Foo) C --> f(#5:Foo, #5:Foo) Unifier 93 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> f(#1:Foo, #5:Foo) A --> f(#2:Foo, #2:Foo, #3:Foo) B --> f(#3:Foo, #4:Foo, #4:Foo, #5:Foo) C --> #1:Foo Unifier 94 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo) B --> f(#3:Foo, #4:Foo, #4:Foo) C --> f(#1:Foo, #5:Foo, #5:Foo) Unifier 95 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo) B --> f(#3:Foo, #4:Foo, #4:Foo) C --> #1:Foo Unifier 96 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo) Y --> f(#4:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo) B --> f(#2:Foo, #3:Foo, #4:Foo) C --> f(#3:Foo, #5:Foo, #5:Foo, #6:Foo) Unifier 97 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #3:Foo, #4:Foo) C --> f(#4:Foo, #5:Foo, #5:Foo) Unifier 98 X --> f(#1:Foo, #2:Foo, #3:Foo) Y --> f(#4:Foo, #5:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo) B --> f(#2:Foo, #3:Foo, #4:Foo) C --> f(#3:Foo, #5:Foo) Unifier 99 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#3:Foo, #3:Foo, #4:Foo) B --> f(#1:Foo, #2:Foo, #4:Foo) C --> #2:Foo Unifier 100 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo) B --> f(#3:Foo, #4:Foo) C --> f(#1:Foo, #4:Foo, #5:Foo, #5:Foo) Unifier 101 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo) B --> f(#3:Foo, #4:Foo) C --> f(#1:Foo, #4:Foo) Unifier 102 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo) B --> f(#2:Foo, #3:Foo) C --> f(#4:Foo, #4:Foo, #5:Foo) Unifier 103 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #3:Foo) C --> f(#4:Foo, #4:Foo) Unifier 104 X --> f(#2:Foo, #3:Foo) Y --> f(#1:Foo, #4:Foo) A --> f(#2:Foo, #2:Foo, #3:Foo) B --> f(#3:Foo, #4:Foo) C --> #1:Foo Unifier 105 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#2:Foo, #3:Foo, #3:Foo) B --> #2:Foo C --> f(#1:Foo, #4:Foo, #4:Foo) Unifier 106 X --> f(#1:Foo, #3:Foo) Y --> #2:Foo A --> f(#1:Foo, #3:Foo, #3:Foo) B --> #1:Foo C --> #2:Foo Unifier 107 X --> f(#1:Foo, #2:Foo, #4:Foo, #5:Foo, #7:Foo) Y --> f(#3:Foo, #6:Foo, #8:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#4:Foo, #4:Foo, #5:Foo, #6:Foo) C --> f(#2:Foo, #5:Foo, #7:Foo, #7:Foo, #8:Foo) Unifier 108 X --> f(#1:Foo, #2:Foo, #4:Foo, #5:Foo, #7:Foo) Y --> f(#3:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#4:Foo, #4:Foo, #5:Foo, #6:Foo) C --> f(#2:Foo, #5:Foo, #7:Foo, #7:Foo) Unifier 109 X --> f(#1:Foo, #2:Foo, #4:Foo, #5:Foo) Y --> f(#3:Foo, #6:Foo, #7:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#4:Foo, #4:Foo, #5:Foo, #6:Foo) C --> f(#2:Foo, #5:Foo, #7:Foo) Unifier 110 X --> f(#1:Foo, #2:Foo, #4:Foo, #5:Foo) Y --> f(#3:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#4:Foo, #4:Foo, #5:Foo, #6:Foo) C --> f(#2:Foo, #5:Foo) Unifier 111 X --> f(#1:Foo, #2:Foo, #4:Foo, #5:Foo, #6:Foo) Y --> f(#3:Foo, #7:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#4:Foo, #4:Foo, #5:Foo) C --> f(#2:Foo, #5:Foo, #6:Foo, #6:Foo, #7:Foo) Unifier 112 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo) B --> f(#4:Foo, #4:Foo, #5:Foo) C --> f(#3:Foo, #5:Foo, #6:Foo, #6:Foo) Unifier 113 X --> f(#1:Foo, #2:Foo, #4:Foo, #5:Foo) Y --> f(#3:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#4:Foo, #4:Foo, #5:Foo) C --> f(#2:Foo, #5:Foo, #6:Foo) Unifier 114 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo) B --> f(#4:Foo, #4:Foo, #5:Foo) C --> f(#3:Foo, #5:Foo) Unifier 115 X --> f(#1:Foo, #2:Foo, #4:Foo, #6:Foo) Y --> f(#3:Foo, #5:Foo, #7:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#4:Foo, #4:Foo, #5:Foo) C --> f(#2:Foo, #6:Foo, #6:Foo, #7:Foo) Unifier 116 X --> f(#1:Foo, #2:Foo, #4:Foo, #6:Foo) Y --> f(#3:Foo, #5:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#4:Foo, #4:Foo, #5:Foo) C --> f(#2:Foo, #6:Foo, #6:Foo) Unifier 117 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#4:Foo, #4:Foo, #5:Foo) C --> f(#2:Foo, #6:Foo) Unifier 118 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo) A --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo) B --> f(#4:Foo, #4:Foo, #5:Foo) C --> #1:Foo Unifier 119 X --> f(#1:Foo, #2:Foo, #4:Foo, #5:Foo) Y --> f(#3:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#4:Foo, #4:Foo) C --> f(#2:Foo, #5:Foo, #5:Foo, #6:Foo) Unifier 120 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo) B --> f(#4:Foo, #4:Foo) C --> f(#3:Foo, #5:Foo, #5:Foo) Unifier 121 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#4:Foo, #4:Foo) C --> f(#2:Foo, #5:Foo) Unifier 122 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo, #3:Foo, #3:Foo) B --> f(#4:Foo, #4:Foo) C --> #2:Foo Unifier 123 X --> f(#1:Foo, #2:Foo, #4:Foo, #6:Foo) Y --> f(#3:Foo, #5:Foo, #7:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#4:Foo, #5:Foo) C --> f(#2:Foo, #4:Foo, #6:Foo, #6:Foo, #7:Foo) Unifier 124 X --> f(#1:Foo, #2:Foo, #4:Foo, #6:Foo) Y --> f(#3:Foo, #5:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#4:Foo, #5:Foo) C --> f(#2:Foo, #4:Foo, #6:Foo, #6:Foo) Unifier 125 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#4:Foo, #5:Foo) C --> f(#2:Foo, #4:Foo, #6:Foo) Unifier 126 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) B --> f(#4:Foo, #5:Foo) C --> f(#2:Foo, #4:Foo) Unifier 127 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo) Y --> f(#4:Foo, #6:Foo) A --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> #1:Foo C --> f(#1:Foo, #3:Foo, #5:Foo, #5:Foo, #6:Foo) Unifier 128 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#1:Foo, #3:Foo, #3:Foo, #4:Foo) B --> #2:Foo C --> f(#2:Foo, #4:Foo, #5:Foo, #5:Foo) Unifier 129 X --> f(#1:Foo, #2:Foo, #3:Foo) Y --> f(#4:Foo, #5:Foo) A --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> #1:Foo C --> f(#1:Foo, #3:Foo, #5:Foo) Unifier 130 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#1:Foo, #3:Foo, #3:Foo, #4:Foo) B --> #2:Foo C --> f(#2:Foo, #4:Foo) Unifier 131 X --> f(#2:Foo, #3:Foo, #5:Foo) Y --> f(#1:Foo, #4:Foo, #6:Foo) A --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> #1:Foo C --> f(#3:Foo, #5:Foo, #5:Foo, #6:Foo) Unifier 132 X --> f(#2:Foo, #3:Foo, #5:Foo) Y --> f(#1:Foo, #4:Foo) A --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> #1:Foo C --> f(#3:Foo, #5:Foo, #5:Foo) Unifier 133 X --> f(#2:Foo, #3:Foo) Y --> f(#1:Foo, #4:Foo, #5:Foo) A --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) B --> #1:Foo C --> f(#3:Foo, #5:Foo) Unifier 134 X --> f(#2:Foo, #3:Foo) Y --> f(#1:Foo, #4:Foo) A --> f(#2:Foo, #3:Foo, #3:Foo, #4:Foo) B --> #1:Foo C --> #2:Foo Unifier 135 X --> f(#1:Foo, #2:Foo, #3:Foo, #4:Foo, #6:Foo) Y --> f(#5:Foo, #7:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo, #4:Foo, #5:Foo) C --> f(#2:Foo, #4:Foo, #6:Foo, #6:Foo, #7:Foo) Unifier 136 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo, #4:Foo, #5:Foo) C --> f(#3:Foo, #5:Foo, #6:Foo, #6:Foo) Unifier 137 X --> f(#1:Foo, #2:Foo, #3:Foo, #4:Foo) Y --> f(#5:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo, #4:Foo, #5:Foo) C --> f(#2:Foo, #4:Foo, #6:Foo) Unifier 138 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo, #4:Foo, #5:Foo) C --> f(#3:Foo, #5:Foo) Unifier 139 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo) B --> f(#4:Foo, #4:Foo, #5:Foo) C --> f(#1:Foo, #3:Foo, #5:Foo, #6:Foo, #6:Foo) Unifier 140 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo) B --> f(#4:Foo, #4:Foo, #5:Foo) C --> f(#1:Foo, #3:Foo, #5:Foo) Unifier 141 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo) Y --> f(#4:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo, #4:Foo) C --> f(#2:Foo, #5:Foo, #5:Foo, #6:Foo) Unifier 142 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo, #4:Foo) C --> f(#3:Foo, #5:Foo, #5:Foo) Unifier 143 X --> f(#1:Foo, #2:Foo, #3:Foo) Y --> f(#4:Foo, #5:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo, #4:Foo) C --> f(#2:Foo, #5:Foo) Unifier 144 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#2:Foo, #3:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo, #4:Foo) C --> #2:Foo Unifier 145 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo) B --> f(#4:Foo, #4:Foo) C --> f(#1:Foo, #3:Foo, #5:Foo, #5:Foo) Unifier 146 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo) B --> f(#4:Foo, #4:Foo) C --> f(#1:Foo, #3:Foo) Unifier 147 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo) Y --> f(#4:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo) B --> f(#3:Foo, #4:Foo) C --> f(#2:Foo, #3:Foo, #5:Foo, #5:Foo, #6:Foo) Unifier 148 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo) C --> f(#3:Foo, #4:Foo, #5:Foo, #5:Foo) Unifier 149 X --> f(#1:Foo, #2:Foo, #3:Foo) Y --> f(#4:Foo, #5:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo) B --> f(#3:Foo, #4:Foo) C --> f(#2:Foo, #3:Foo, #5:Foo) Unifier 150 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo) C --> f(#3:Foo, #4:Foo) Unifier 151 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#3:Foo, #3:Foo, #4:Foo) B --> #2:Foo C --> f(#1:Foo, #2:Foo, #4:Foo, #5:Foo, #5:Foo) Unifier 152 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#3:Foo, #3:Foo, #4:Foo) B --> #2:Foo C --> f(#1:Foo, #2:Foo, #4:Foo) Unifier 153 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> f(#1:Foo, #5:Foo) A --> f(#2:Foo, #2:Foo, #3:Foo) B --> #1:Foo C --> f(#3:Foo, #4:Foo, #4:Foo, #5:Foo) Unifier 154 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo, #3:Foo) B --> #1:Foo C --> f(#3:Foo, #4:Foo, #4:Foo) Unifier 155 X --> f(#2:Foo, #3:Foo) Y --> f(#1:Foo, #4:Foo) A --> f(#2:Foo, #2:Foo, #3:Foo) B --> #1:Foo C --> f(#3:Foo, #4:Foo) Unifier 156 X --> f(#2:Foo, #3:Foo) Y --> #1:Foo A --> f(#2:Foo, #3:Foo, #3:Foo) B --> #1:Foo C --> #2:Foo Unifier 157 X --> f(#1:Foo, #3:Foo, #4:Foo, #6:Foo) Y --> f(#2:Foo, #5:Foo, #7:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo, #4:Foo, #5:Foo) C --> f(#4:Foo, #6:Foo, #6:Foo, #7:Foo) Unifier 158 X --> f(#1:Foo, #3:Foo, #4:Foo, #6:Foo) Y --> f(#2:Foo, #5:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo, #4:Foo, #5:Foo) C --> f(#4:Foo, #6:Foo, #6:Foo) Unifier 159 X --> f(#1:Foo, #3:Foo, #4:Foo) Y --> f(#2:Foo, #5:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo, #4:Foo, #5:Foo) C --> f(#4:Foo, #6:Foo) Unifier 160 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo) A --> f(#2:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo, #4:Foo, #5:Foo) C --> #1:Foo Unifier 161 X --> f(#1:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> f(#2:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo, #4:Foo) C --> f(#4:Foo, #5:Foo, #5:Foo, #6:Foo) Unifier 162 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo, #4:Foo) C --> f(#4:Foo, #5:Foo, #5:Foo) Unifier 163 X --> f(#1:Foo, #3:Foo, #4:Foo) Y --> f(#2:Foo, #5:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo, #4:Foo) C --> f(#4:Foo, #5:Foo) Unifier 164 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#1:Foo, #3:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo, #4:Foo) C --> #2:Foo Unifier 165 X --> f(#1:Foo, #3:Foo, #5:Foo) Y --> f(#2:Foo, #4:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo, #4:Foo) C --> f(#5:Foo, #5:Foo, #6:Foo) Unifier 166 X --> f(#1:Foo, #3:Foo, #5:Foo) Y --> f(#2:Foo, #4:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo, #4:Foo) C --> f(#5:Foo, #5:Foo) Unifier 167 X --> f(#2:Foo, #4:Foo) Y --> f(#1:Foo, #3:Foo, #5:Foo) A --> f(#2:Foo, #2:Foo, #3:Foo) B --> f(#4:Foo, #4:Foo, #5:Foo) C --> #1:Foo Unifier 168 X --> f(#1:Foo, #3:Foo, #4:Foo) Y --> f(#2:Foo, #5:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo) C --> f(#4:Foo, #4:Foo, #5:Foo) Unifier 169 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo) C --> f(#4:Foo, #4:Foo) Unifier 170 X --> f(#2:Foo, #4:Foo) Y --> f(#1:Foo, #3:Foo) A --> f(#2:Foo, #2:Foo, #3:Foo) B --> f(#4:Foo, #4:Foo) C --> #1:Foo Unifier 171 X --> f(#1:Foo, #3:Foo, #5:Foo) Y --> f(#2:Foo, #4:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo) B --> f(#3:Foo, #4:Foo) C --> f(#3:Foo, #5:Foo, #5:Foo, #6:Foo) Unifier 172 X --> f(#1:Foo, #3:Foo, #5:Foo) Y --> f(#2:Foo, #4:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo) B --> f(#3:Foo, #4:Foo) C --> f(#3:Foo, #5:Foo, #5:Foo) Unifier 173 X --> f(#1:Foo, #3:Foo) Y --> f(#2:Foo, #4:Foo, #5:Foo) A --> f(#1:Foo, #1:Foo, #2:Foo) B --> f(#3:Foo, #4:Foo) C --> f(#3:Foo, #5:Foo) Unifier 174 X --> f(#1:Foo, #2:Foo) Y --> f(#3:Foo, #4:Foo) A --> f(#2:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo) C --> #1:Foo Unifier 175 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo) A --> f(#2:Foo, #2:Foo, #3:Foo) B --> #1:Foo C --> f(#1:Foo, #4:Foo, #4:Foo, #5:Foo) Unifier 176 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#1:Foo, #3:Foo, #3:Foo) B --> #2:Foo C --> f(#2:Foo, #4:Foo, #4:Foo) Unifier 177 X --> f(#1:Foo, #2:Foo) Y --> f(#3:Foo, #4:Foo) A --> f(#2:Foo, #2:Foo, #3:Foo) B --> #1:Foo C --> f(#1:Foo, #4:Foo) Unifier 178 X --> f(#2:Foo, #3:Foo) Y --> #1:Foo A --> f(#1:Foo, #3:Foo, #3:Foo) B --> #2:Foo C --> #2:Foo Unifier 179 X --> f(#2:Foo, #4:Foo) Y --> f(#1:Foo, #3:Foo, #5:Foo) A --> f(#2:Foo, #2:Foo, #3:Foo) B --> #1:Foo C --> f(#4:Foo, #4:Foo, #5:Foo) Unifier 180 X --> f(#2:Foo, #4:Foo) Y --> f(#1:Foo, #3:Foo) A --> f(#2:Foo, #2:Foo, #3:Foo) B --> #1:Foo C --> f(#4:Foo, #4:Foo) Unifier 181 X --> #1:Foo Y --> f(#2:Foo, #3:Foo, #4:Foo) A --> f(#1:Foo, #1:Foo, #4:Foo) B --> #2:Foo C --> #3:Foo Unifier 182 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo) Y --> f(#4:Foo, #6:Foo) A --> f(#1:Foo, #1:Foo) B --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) C --> f(#3:Foo, #5:Foo, #5:Foo, #6:Foo) Unifier 183 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo) B --> f(#1:Foo, #3:Foo, #3:Foo, #4:Foo) C --> f(#4:Foo, #5:Foo, #5:Foo) Unifier 184 X --> f(#1:Foo, #2:Foo, #3:Foo) Y --> f(#4:Foo, #5:Foo) A --> f(#1:Foo, #1:Foo) B --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) C --> f(#3:Foo, #5:Foo) Unifier 185 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#3:Foo, #3:Foo) B --> f(#1:Foo, #2:Foo, #4:Foo, #4:Foo) C --> #2:Foo Unifier 186 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo, #4:Foo) C --> f(#1:Foo, #4:Foo, #5:Foo, #5:Foo) Unifier 187 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo, #4:Foo) C --> f(#1:Foo, #4:Foo) Unifier 188 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo) A --> f(#1:Foo, #1:Foo) B --> f(#2:Foo, #2:Foo, #3:Foo) C --> f(#4:Foo, #4:Foo, #5:Foo) Unifier 189 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo) B --> f(#1:Foo, #3:Foo, #3:Foo) C --> f(#4:Foo, #4:Foo) Unifier 190 X --> f(#2:Foo, #3:Foo) Y --> f(#1:Foo, #4:Foo) A --> f(#2:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo, #4:Foo) C --> #1:Foo Unifier 191 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo) C --> f(#1:Foo, #4:Foo, #4:Foo) Unifier 192 X --> f(#2:Foo, #3:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo) C --> #1:Foo Unifier 193 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo) A --> f(#1:Foo, #1:Foo) B --> f(#2:Foo, #3:Foo) C --> f(#2:Foo, #4:Foo, #4:Foo, #5:Foo) Unifier 194 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo) B --> f(#1:Foo, #3:Foo) C --> f(#3:Foo, #4:Foo, #4:Foo) Unifier 195 X --> f(#1:Foo, #2:Foo) Y --> f(#3:Foo, #4:Foo) A --> f(#1:Foo, #1:Foo) B --> f(#2:Foo, #3:Foo) C --> f(#2:Foo, #4:Foo) Unifier 196 X --> f(#2:Foo, #3:Foo) Y --> #1:Foo A --> f(#3:Foo, #3:Foo) B --> f(#1:Foo, #2:Foo) C --> #2:Foo Unifier 197 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#3:Foo, #3:Foo) B --> #2:Foo C --> f(#1:Foo, #2:Foo, #4:Foo, #4:Foo) Unifier 198 X --> f(#2:Foo, #3:Foo) Y --> #1:Foo A --> f(#3:Foo, #3:Foo) B --> #2:Foo C --> f(#1:Foo, #2:Foo) Unifier 199 X --> f(#2:Foo, #3:Foo) Y --> f(#1:Foo, #4:Foo) A --> f(#2:Foo, #2:Foo) B --> #1:Foo C --> f(#3:Foo, #3:Foo, #4:Foo) Unifier 200 X --> f(#2:Foo, #3:Foo) Y --> #1:Foo A --> f(#2:Foo, #2:Foo) B --> #1:Foo C --> f(#3:Foo, #3:Foo) Unifier 201 X --> #1:Foo Y --> f(#2:Foo, #3:Foo) A --> f(#1:Foo, #1:Foo) B --> #2:Foo C --> #3:Foo Unifier 202 X --> f(#1:Foo, #2:Foo, #4:Foo, #5:Foo, #7:Foo) Y --> f(#3:Foo, #6:Foo, #8:Foo) A --> f(#1:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo, #4:Foo, #5:Foo, #6:Foo) C --> f(#2:Foo, #5:Foo, #7:Foo, #7:Foo, #8:Foo) Unifier 203 X --> f(#1:Foo, #2:Foo, #4:Foo, #5:Foo, #7:Foo) Y --> f(#3:Foo, #6:Foo) A --> f(#1:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo, #4:Foo, #5:Foo, #6:Foo) C --> f(#2:Foo, #5:Foo, #7:Foo, #7:Foo) Unifier 204 X --> f(#1:Foo, #2:Foo, #4:Foo, #5:Foo) Y --> f(#3:Foo, #6:Foo, #7:Foo) A --> f(#1:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo, #4:Foo, #5:Foo, #6:Foo) C --> f(#2:Foo, #5:Foo, #7:Foo) Unifier 205 X --> f(#1:Foo, #2:Foo, #4:Foo, #5:Foo) Y --> f(#3:Foo, #6:Foo) A --> f(#1:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo, #4:Foo, #5:Foo, #6:Foo) C --> f(#2:Foo, #5:Foo) Unifier 206 X --> f(#1:Foo, #2:Foo, #4:Foo, #5:Foo, #6:Foo) Y --> f(#3:Foo, #7:Foo) A --> f(#1:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo, #4:Foo, #5:Foo) C --> f(#2:Foo, #5:Foo, #6:Foo, #6:Foo, #7:Foo) Unifier 207 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo, #4:Foo, #5:Foo) C --> f(#3:Foo, #5:Foo, #6:Foo, #6:Foo) Unifier 208 X --> f(#1:Foo, #2:Foo, #4:Foo, #5:Foo) Y --> f(#3:Foo, #6:Foo) A --> f(#1:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo, #4:Foo, #5:Foo) C --> f(#2:Foo, #5:Foo, #6:Foo) Unifier 209 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo, #4:Foo, #5:Foo) C --> f(#3:Foo, #5:Foo) Unifier 210 X --> f(#1:Foo, #2:Foo, #4:Foo, #6:Foo) Y --> f(#3:Foo, #5:Foo, #7:Foo) A --> f(#1:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo, #4:Foo, #5:Foo) C --> f(#2:Foo, #6:Foo, #6:Foo, #7:Foo) Unifier 211 X --> f(#1:Foo, #2:Foo, #4:Foo, #6:Foo) Y --> f(#3:Foo, #5:Foo) A --> f(#1:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo, #4:Foo, #5:Foo) C --> f(#2:Foo, #6:Foo, #6:Foo) Unifier 212 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo, #6:Foo) A --> f(#1:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo, #4:Foo, #5:Foo) C --> f(#2:Foo, #6:Foo) Unifier 213 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo) A --> f(#1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo, #4:Foo, #5:Foo) C --> #1:Foo Unifier 214 X --> f(#1:Foo, #2:Foo, #4:Foo, #5:Foo) Y --> f(#3:Foo, #6:Foo) A --> f(#1:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo, #4:Foo) C --> f(#2:Foo, #5:Foo, #5:Foo, #6:Foo) Unifier 215 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo, #4:Foo) C --> f(#3:Foo, #5:Foo, #5:Foo) Unifier 216 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo) A --> f(#1:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo, #4:Foo) C --> f(#2:Foo, #5:Foo) Unifier 217 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo, #3:Foo) B --> f(#3:Foo, #4:Foo, #4:Foo) C --> #2:Foo Unifier 218 X --> f(#1:Foo, #2:Foo, #4:Foo, #6:Foo) Y --> f(#3:Foo, #5:Foo, #7:Foo) A --> f(#1:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo, #5:Foo) C --> f(#2:Foo, #4:Foo, #6:Foo, #6:Foo, #7:Foo) Unifier 219 X --> f(#1:Foo, #2:Foo, #4:Foo, #6:Foo) Y --> f(#3:Foo, #5:Foo) A --> f(#1:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo, #5:Foo) C --> f(#2:Foo, #4:Foo, #6:Foo, #6:Foo) Unifier 220 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo, #6:Foo) A --> f(#1:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo, #5:Foo) C --> f(#2:Foo, #4:Foo, #6:Foo) Unifier 221 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo) A --> f(#1:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo, #5:Foo) C --> f(#2:Foo, #4:Foo) Unifier 222 X --> f(#1:Foo, #2:Foo, #4:Foo, #5:Foo) Y --> f(#3:Foo, #6:Foo) A --> f(#1:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo) C --> f(#2:Foo, #4:Foo, #5:Foo, #5:Foo, #6:Foo) Unifier 223 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo) C --> f(#3:Foo, #4:Foo, #5:Foo, #5:Foo) Unifier 224 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo) A --> f(#1:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo) C --> f(#2:Foo, #4:Foo, #5:Foo) Unifier 225 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo) C --> f(#3:Foo, #4:Foo) Unifier 226 X --> f(#1:Foo, #2:Foo, #5:Foo) Y --> f(#3:Foo, #4:Foo, #6:Foo) A --> f(#1:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo) C --> f(#2:Foo, #5:Foo, #5:Foo, #6:Foo) Unifier 227 X --> f(#1:Foo, #2:Foo, #5:Foo) Y --> f(#3:Foo, #4:Foo) A --> f(#1:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo) C --> f(#2:Foo, #5:Foo, #5:Foo) Unifier 228 X --> f(#1:Foo, #2:Foo) Y --> f(#3:Foo, #4:Foo, #5:Foo) A --> f(#1:Foo, #2:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo) C --> f(#2:Foo, #5:Foo) Unifier 229 X --> f(#1:Foo, #2:Foo) Y --> f(#3:Foo, #4:Foo) A --> f(#1:Foo, #2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo) C --> #1:Foo Unifier 230 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo) A --> f(#1:Foo, #2:Foo, #3:Foo) B --> #1:Foo C --> f(#2:Foo, #4:Foo, #4:Foo, #5:Foo) Unifier 231 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo, #3:Foo) B --> #2:Foo C --> f(#3:Foo, #4:Foo, #4:Foo) Unifier 232 X --> f(#1:Foo, #2:Foo) Y --> f(#3:Foo, #4:Foo) A --> f(#1:Foo, #2:Foo, #3:Foo) B --> #1:Foo C --> f(#2:Foo, #4:Foo) Unifier 233 X --> f(#2:Foo, #3:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo, #3:Foo) B --> #2:Foo C --> #3:Foo Unifier 234 X --> f(#1:Foo, #2:Foo, #3:Foo, #4:Foo, #6:Foo) Y --> f(#5:Foo, #7:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#1:Foo, #3:Foo, #3:Foo, #4:Foo, #5:Foo) C --> f(#2:Foo, #4:Foo, #6:Foo, #6:Foo, #7:Foo) Unifier 235 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo) Y --> #1:Foo A --> f(#2:Foo, #3:Foo) B --> f(#1:Foo, #2:Foo, #4:Foo, #4:Foo, #5:Foo) C --> f(#3:Foo, #5:Foo, #6:Foo, #6:Foo) Unifier 236 X --> f(#1:Foo, #2:Foo, #3:Foo, #4:Foo) Y --> f(#5:Foo, #6:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#1:Foo, #3:Foo, #3:Foo, #4:Foo, #5:Foo) C --> f(#2:Foo, #4:Foo, #6:Foo) Unifier 237 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#2:Foo, #3:Foo) B --> f(#1:Foo, #2:Foo, #4:Foo, #4:Foo, #5:Foo) C --> f(#3:Foo, #5:Foo) Unifier 238 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo, #6:Foo) Y --> #1:Foo A --> f(#2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo, #4:Foo, #5:Foo) C --> f(#1:Foo, #3:Foo, #5:Foo, #6:Foo, #6:Foo) Unifier 239 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo, #4:Foo, #5:Foo) C --> f(#1:Foo, #3:Foo, #5:Foo) Unifier 240 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo) Y --> f(#4:Foo, #6:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#1:Foo, #3:Foo, #3:Foo, #4:Foo) C --> f(#2:Foo, #5:Foo, #5:Foo, #6:Foo) Unifier 241 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#2:Foo, #3:Foo) B --> f(#1:Foo, #2:Foo, #4:Foo, #4:Foo) C --> f(#3:Foo, #5:Foo, #5:Foo) Unifier 242 X --> f(#1:Foo, #2:Foo, #3:Foo) Y --> f(#4:Foo, #5:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#1:Foo, #3:Foo, #3:Foo, #4:Foo) C --> f(#2:Foo, #5:Foo) Unifier 243 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#2:Foo, #3:Foo) B --> f(#1:Foo, #3:Foo, #4:Foo, #4:Foo) C --> #2:Foo Unifier 244 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo, #4:Foo) C --> f(#1:Foo, #3:Foo, #5:Foo, #5:Foo) Unifier 245 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo, #4:Foo) C --> f(#1:Foo, #3:Foo) Unifier 246 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo) Y --> f(#4:Foo, #6:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#1:Foo, #3:Foo, #4:Foo) C --> f(#2:Foo, #3:Foo, #5:Foo, #5:Foo, #6:Foo) Unifier 247 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#2:Foo, #3:Foo) B --> f(#1:Foo, #2:Foo, #4:Foo) C --> f(#3:Foo, #4:Foo, #5:Foo, #5:Foo) Unifier 248 X --> f(#1:Foo, #2:Foo, #3:Foo) Y --> f(#4:Foo, #5:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#1:Foo, #3:Foo, #4:Foo) C --> f(#2:Foo, #3:Foo, #5:Foo) Unifier 249 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#2:Foo, #3:Foo) B --> f(#1:Foo, #2:Foo, #4:Foo) C --> f(#3:Foo, #4:Foo) Unifier 250 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo) C --> f(#1:Foo, #3:Foo, #4:Foo, #5:Foo, #5:Foo) Unifier 251 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo) C --> f(#1:Foo, #3:Foo, #4:Foo) Unifier 252 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#1:Foo, #3:Foo) C --> f(#2:Foo, #4:Foo, #4:Foo, #5:Foo) Unifier 253 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#2:Foo, #3:Foo) B --> f(#1:Foo, #2:Foo) C --> f(#3:Foo, #4:Foo, #4:Foo) Unifier 254 X --> f(#1:Foo, #2:Foo) Y --> f(#3:Foo, #4:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#1:Foo, #3:Foo) C --> f(#2:Foo, #4:Foo) Unifier 255 X --> f(#2:Foo, #3:Foo) Y --> #1:Foo A --> f(#2:Foo, #3:Foo) B --> f(#1:Foo, #3:Foo) C --> #2:Foo Unifier 256 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#2:Foo, #3:Foo) B --> #2:Foo C --> f(#1:Foo, #3:Foo, #4:Foo, #4:Foo) Unifier 257 X --> f(#2:Foo, #3:Foo) Y --> #1:Foo A --> f(#2:Foo, #3:Foo) B --> #2:Foo C --> f(#1:Foo, #3:Foo) Unifier 258 X --> f(#1:Foo, #3:Foo, #4:Foo, #6:Foo) Y --> f(#2:Foo, #5:Foo, #7:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#1:Foo, #3:Foo, #3:Foo, #4:Foo, #5:Foo) C --> f(#4:Foo, #6:Foo, #6:Foo, #7:Foo) Unifier 259 X --> f(#1:Foo, #3:Foo, #4:Foo, #6:Foo) Y --> f(#2:Foo, #5:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#1:Foo, #3:Foo, #3:Foo, #4:Foo, #5:Foo) C --> f(#4:Foo, #6:Foo, #6:Foo) Unifier 260 X --> f(#1:Foo, #3:Foo, #4:Foo) Y --> f(#2:Foo, #5:Foo, #6:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#1:Foo, #3:Foo, #3:Foo, #4:Foo, #5:Foo) C --> f(#4:Foo, #6:Foo) Unifier 261 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo) A --> f(#2:Foo, #3:Foo) B --> f(#1:Foo, #2:Foo, #4:Foo, #4:Foo, #5:Foo) C --> #1:Foo Unifier 262 X --> f(#1:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> f(#2:Foo, #6:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#1:Foo, #3:Foo, #3:Foo, #4:Foo) C --> f(#4:Foo, #5:Foo, #5:Foo, #6:Foo) Unifier 263 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo) B --> f(#2:Foo, #3:Foo, #3:Foo, #4:Foo) C --> f(#4:Foo, #5:Foo, #5:Foo) Unifier 264 X --> f(#1:Foo, #3:Foo, #4:Foo) Y --> f(#2:Foo, #5:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#1:Foo, #3:Foo, #3:Foo, #4:Foo) C --> f(#4:Foo, #5:Foo) Unifier 265 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#1:Foo, #3:Foo) B --> f(#2:Foo, #3:Foo, #4:Foo, #4:Foo) C --> #2:Foo Unifier 266 X --> f(#1:Foo, #3:Foo, #5:Foo) Y --> f(#2:Foo, #4:Foo, #6:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#1:Foo, #3:Foo, #3:Foo, #4:Foo) C --> f(#5:Foo, #5:Foo, #6:Foo) Unifier 267 X --> f(#1:Foo, #3:Foo, #5:Foo) Y --> f(#2:Foo, #4:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#1:Foo, #3:Foo, #3:Foo, #4:Foo) C --> f(#5:Foo, #5:Foo) Unifier 268 X --> f(#2:Foo, #4:Foo) Y --> f(#1:Foo, #3:Foo, #5:Foo) A --> f(#2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo, #4:Foo, #5:Foo) C --> #1:Foo Unifier 269 X --> f(#1:Foo, #3:Foo, #4:Foo) Y --> f(#2:Foo, #5:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#1:Foo, #3:Foo, #3:Foo) C --> f(#4:Foo, #4:Foo, #5:Foo) Unifier 270 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo) B --> f(#2:Foo, #3:Foo, #3:Foo) C --> f(#4:Foo, #4:Foo) Unifier 271 X --> f(#2:Foo, #4:Foo) Y --> f(#1:Foo, #3:Foo) A --> f(#2:Foo, #3:Foo) B --> f(#2:Foo, #4:Foo, #4:Foo) C --> #1:Foo Unifier 272 X --> f(#1:Foo, #3:Foo, #5:Foo) Y --> f(#2:Foo, #4:Foo, #6:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#1:Foo, #3:Foo, #4:Foo) C --> f(#3:Foo, #5:Foo, #5:Foo, #6:Foo) Unifier 273 X --> f(#1:Foo, #3:Foo, #5:Foo) Y --> f(#2:Foo, #4:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#1:Foo, #3:Foo, #4:Foo) C --> f(#3:Foo, #5:Foo, #5:Foo) Unifier 274 X --> f(#1:Foo, #3:Foo) Y --> f(#2:Foo, #4:Foo, #5:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#1:Foo, #3:Foo, #4:Foo) C --> f(#3:Foo, #5:Foo) Unifier 275 X --> f(#1:Foo, #2:Foo) Y --> f(#3:Foo, #4:Foo) A --> f(#2:Foo, #3:Foo) B --> f(#1:Foo, #2:Foo, #4:Foo) C --> #1:Foo Unifier 276 X --> f(#1:Foo, #3:Foo, #4:Foo) Y --> f(#2:Foo, #5:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#1:Foo, #3:Foo) C --> f(#3:Foo, #4:Foo, #4:Foo, #5:Foo) Unifier 277 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo) B --> f(#2:Foo, #3:Foo) C --> f(#3:Foo, #4:Foo, #4:Foo) Unifier 278 X --> f(#1:Foo, #3:Foo) Y --> f(#2:Foo, #4:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#1:Foo, #3:Foo) C --> f(#3:Foo, #4:Foo) Unifier 279 X --> f(#2:Foo, #3:Foo) Y --> #1:Foo A --> f(#1:Foo, #3:Foo) B --> f(#2:Foo, #3:Foo) C --> #2:Foo Unifier 280 X --> f(#1:Foo, #4:Foo) Y --> f(#2:Foo, #3:Foo, #5:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#1:Foo, #3:Foo) C --> f(#4:Foo, #4:Foo, #5:Foo) Unifier 281 X --> f(#1:Foo, #4:Foo) Y --> f(#2:Foo, #3:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#1:Foo, #3:Foo) C --> f(#4:Foo, #4:Foo) Unifier 282 X --> #1:Foo Y --> f(#2:Foo, #3:Foo, #4:Foo) A --> f(#1:Foo, #3:Foo) B --> f(#1:Foo, #4:Foo) C --> #2:Foo Unifier 283 X --> f(#1:Foo, #3:Foo) Y --> f(#2:Foo, #4:Foo) A --> f(#1:Foo, #2:Foo) B --> #1:Foo C --> f(#3:Foo, #3:Foo, #4:Foo) Unifier 284 X --> f(#2:Foo, #3:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo) B --> #2:Foo C --> f(#3:Foo, #3:Foo) Unifier 285 X --> #1:Foo Y --> f(#2:Foo, #3:Foo) A --> f(#1:Foo, #3:Foo) B --> #1:Foo C --> #2:Foo Unifier 286 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo) Y --> f(#4:Foo, #6:Foo) A --> #1:Foo B --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #4:Foo) C --> f(#3:Foo, #5:Foo, #5:Foo, #6:Foo) Unifier 287 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> #2:Foo B --> f(#1:Foo, #2:Foo, #3:Foo, #3:Foo, #4:Foo) C --> f(#4:Foo, #5:Foo, #5:Foo) Unifier 288 X --> f(#1:Foo, #2:Foo, #3:Foo) Y --> f(#4:Foo, #5:Foo) A --> #1:Foo B --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo, #4:Foo) C --> f(#3:Foo, #5:Foo) Unifier 289 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> #2:Foo B --> f(#1:Foo, #2:Foo, #3:Foo, #4:Foo, #4:Foo) C --> #3:Foo Unifier 290 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> #2:Foo B --> f(#2:Foo, #3:Foo, #3:Foo, #4:Foo) C --> f(#1:Foo, #4:Foo, #5:Foo, #5:Foo) Unifier 291 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> #2:Foo B --> f(#2:Foo, #3:Foo, #3:Foo, #4:Foo) C --> f(#1:Foo, #4:Foo) Unifier 292 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo) A --> #1:Foo B --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo) C --> f(#4:Foo, #4:Foo, #5:Foo) Unifier 293 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> #2:Foo B --> f(#1:Foo, #2:Foo, #3:Foo, #3:Foo) C --> f(#4:Foo, #4:Foo) Unifier 294 X --> f(#1:Foo, #3:Foo) Y --> f(#2:Foo, #4:Foo) A --> #1:Foo B --> f(#1:Foo, #3:Foo, #3:Foo, #4:Foo) C --> #2:Foo Unifier 295 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> #2:Foo B --> f(#2:Foo, #3:Foo, #3:Foo) C --> f(#1:Foo, #4:Foo, #4:Foo) Unifier 296 X --> f(#1:Foo, #3:Foo) Y --> #2:Foo A --> #1:Foo B --> f(#1:Foo, #3:Foo, #3:Foo) C --> #2:Foo Unifier 297 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo) A --> #1:Foo B --> f(#1:Foo, #2:Foo, #3:Foo) C --> f(#2:Foo, #4:Foo, #4:Foo, #5:Foo) Unifier 298 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> #2:Foo B --> f(#1:Foo, #2:Foo, #3:Foo) C --> f(#3:Foo, #4:Foo, #4:Foo) Unifier 299 X --> f(#1:Foo, #2:Foo) Y --> f(#3:Foo, #4:Foo) A --> #1:Foo B --> f(#1:Foo, #2:Foo, #3:Foo) C --> f(#2:Foo, #4:Foo) Unifier 300 X --> f(#2:Foo, #3:Foo) Y --> #1:Foo A --> #2:Foo B --> f(#1:Foo, #2:Foo, #3:Foo) C --> #3:Foo Unifier 301 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> #2:Foo B --> f(#2:Foo, #3:Foo) C --> f(#1:Foo, #3:Foo, #4:Foo, #4:Foo) Unifier 302 X --> f(#2:Foo, #3:Foo) Y --> #1:Foo A --> #2:Foo B --> f(#2:Foo, #3:Foo) C --> f(#1:Foo, #3:Foo) Unifier 303 X --> f(#1:Foo, #3:Foo) Y --> f(#2:Foo, #4:Foo) A --> #1:Foo B --> f(#1:Foo, #2:Foo) C --> f(#3:Foo, #3:Foo, #4:Foo) Unifier 304 X --> f(#2:Foo, #3:Foo) Y --> #1:Foo A --> #2:Foo B --> f(#1:Foo, #2:Foo) C --> f(#3:Foo, #3:Foo) Unifier 305 X --> #1:Foo Y --> f(#2:Foo, #3:Foo) A --> #1:Foo B --> f(#1:Foo, #3:Foo) C --> #2:Foo Unifier 306 X --> f(#2:Foo, #3:Foo) Y --> #1:Foo A --> #2:Foo B --> #2:Foo C --> f(#1:Foo, #3:Foo, #3:Foo) Unifier 307 X --> #1:Foo Y --> #2:Foo A --> #1:Foo B --> #1:Foo C --> #2:Foo Unifier 308 X --> f(#1:Foo, #3:Foo, #4:Foo, #6:Foo) Y --> f(#2:Foo, #5:Foo, #7:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo, #4:Foo, #5:Foo) C --> f(#1:Foo, #4:Foo, #6:Foo, #6:Foo, #7:Foo) Unifier 309 X --> f(#1:Foo, #3:Foo, #4:Foo, #6:Foo) Y --> f(#2:Foo, #5:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo, #4:Foo, #5:Foo) C --> f(#1:Foo, #4:Foo, #6:Foo, #6:Foo) Unifier 310 X --> f(#1:Foo, #3:Foo, #4:Foo) Y --> f(#2:Foo, #5:Foo, #6:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo, #4:Foo, #5:Foo) C --> f(#1:Foo, #4:Foo, #6:Foo) Unifier 311 X --> f(#1:Foo, #3:Foo, #4:Foo) Y --> f(#2:Foo, #5:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo, #4:Foo, #5:Foo) C --> f(#1:Foo, #4:Foo) Unifier 312 X --> f(#1:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> f(#2:Foo, #6:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo, #4:Foo) C --> f(#1:Foo, #4:Foo, #5:Foo, #5:Foo, #6:Foo) Unifier 313 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo, #4:Foo) C --> f(#2:Foo, #4:Foo, #5:Foo, #5:Foo) Unifier 314 X --> f(#1:Foo, #3:Foo, #4:Foo) Y --> f(#2:Foo, #5:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo, #4:Foo) C --> f(#1:Foo, #4:Foo, #5:Foo) Unifier 315 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo, #4:Foo) C --> f(#2:Foo, #4:Foo) Unifier 316 X --> f(#1:Foo, #3:Foo, #5:Foo) Y --> f(#2:Foo, #4:Foo, #6:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo, #4:Foo) C --> f(#1:Foo, #5:Foo, #5:Foo, #6:Foo) Unifier 317 X --> f(#1:Foo, #3:Foo, #5:Foo) Y --> f(#2:Foo, #4:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo, #4:Foo) C --> f(#1:Foo, #5:Foo, #5:Foo) Unifier 318 X --> f(#1:Foo, #3:Foo) Y --> f(#2:Foo, #4:Foo, #5:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo, #4:Foo) C --> f(#1:Foo, #5:Foo) Unifier 319 X --> f(#1:Foo, #3:Foo) Y --> f(#2:Foo, #4:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo, #4:Foo) C --> #1:Foo Unifier 320 X --> f(#1:Foo, #3:Foo, #4:Foo) Y --> f(#2:Foo, #5:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo) C --> f(#1:Foo, #4:Foo, #4:Foo, #5:Foo) Unifier 321 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo) C --> f(#2:Foo, #4:Foo, #4:Foo) Unifier 322 X --> f(#1:Foo, #3:Foo) Y --> f(#2:Foo, #4:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo) C --> f(#1:Foo, #4:Foo) Unifier 323 X --> f(#2:Foo, #3:Foo) Y --> #1:Foo A --> f(#1:Foo, #2:Foo) B --> f(#3:Foo, #3:Foo) C --> #2:Foo Unifier 324 X --> f(#1:Foo, #3:Foo, #5:Foo) Y --> f(#2:Foo, #4:Foo, #6:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#3:Foo, #4:Foo) C --> f(#1:Foo, #3:Foo, #5:Foo, #5:Foo, #6:Foo) Unifier 325 X --> f(#1:Foo, #3:Foo, #5:Foo) Y --> f(#2:Foo, #4:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#3:Foo, #4:Foo) C --> f(#1:Foo, #3:Foo, #5:Foo, #5:Foo) Unifier 326 X --> f(#1:Foo, #3:Foo) Y --> f(#2:Foo, #4:Foo, #5:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#3:Foo, #4:Foo) C --> f(#1:Foo, #3:Foo, #5:Foo) Unifier 327 X --> f(#1:Foo, #3:Foo) Y --> f(#2:Foo, #4:Foo) A --> f(#1:Foo, #2:Foo) B --> f(#3:Foo, #4:Foo) C --> f(#1:Foo, #3:Foo) Unifier 328 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo) A --> f(#2:Foo, #3:Foo) B --> #1:Foo C --> f(#1:Foo, #2:Foo, #4:Foo, #4:Foo, #5:Foo) Unifier 329 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> f(#1:Foo, #3:Foo) B --> #2:Foo C --> f(#2:Foo, #3:Foo, #4:Foo, #4:Foo) Unifier 330 X --> f(#1:Foo, #2:Foo) Y --> f(#3:Foo, #4:Foo) A --> f(#2:Foo, #3:Foo) B --> #1:Foo C --> f(#1:Foo, #2:Foo, #4:Foo) Unifier 331 X --> f(#2:Foo, #3:Foo) Y --> #1:Foo A --> f(#1:Foo, #3:Foo) B --> #2:Foo C --> f(#2:Foo, #3:Foo) Unifier 332 X --> f(#2:Foo, #4:Foo) Y --> f(#1:Foo, #3:Foo, #5:Foo) A --> f(#2:Foo, #3:Foo) B --> #1:Foo C --> f(#2:Foo, #4:Foo, #4:Foo, #5:Foo) Unifier 333 X --> f(#2:Foo, #4:Foo) Y --> f(#1:Foo, #3:Foo) A --> f(#2:Foo, #3:Foo) B --> #1:Foo C --> f(#2:Foo, #4:Foo, #4:Foo) Unifier 334 X --> #1:Foo Y --> f(#2:Foo, #3:Foo, #4:Foo) A --> f(#1:Foo, #3:Foo) B --> #2:Foo C --> f(#1:Foo, #4:Foo) Unifier 335 X --> #2:Foo Y --> f(#1:Foo, #3:Foo) A --> f(#2:Foo, #3:Foo) B --> #1:Foo C --> #2:Foo Unifier 336 X --> f(#1:Foo, #2:Foo, #3:Foo, #5:Foo) Y --> f(#4:Foo, #6:Foo) A --> #1:Foo B --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) C --> f(#1:Foo, #3:Foo, #5:Foo, #5:Foo, #6:Foo) Unifier 337 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> #2:Foo B --> f(#1:Foo, #3:Foo, #3:Foo, #4:Foo) C --> f(#2:Foo, #4:Foo, #5:Foo, #5:Foo) Unifier 338 X --> f(#1:Foo, #2:Foo, #3:Foo) Y --> f(#4:Foo, #5:Foo) A --> #1:Foo B --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) C --> f(#1:Foo, #3:Foo, #5:Foo) Unifier 339 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> #2:Foo B --> f(#1:Foo, #3:Foo, #3:Foo, #4:Foo) C --> f(#2:Foo, #4:Foo) Unifier 340 X --> f(#2:Foo, #3:Foo, #4:Foo, #5:Foo) Y --> #1:Foo A --> #2:Foo B --> f(#3:Foo, #3:Foo, #4:Foo) C --> f(#1:Foo, #2:Foo, #4:Foo, #5:Foo, #5:Foo) Unifier 341 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> #2:Foo B --> f(#3:Foo, #3:Foo, #4:Foo) C --> f(#1:Foo, #2:Foo, #4:Foo) Unifier 342 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo) A --> #1:Foo B --> f(#2:Foo, #2:Foo, #3:Foo) C --> f(#1:Foo, #4:Foo, #4:Foo, #5:Foo) Unifier 343 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> #2:Foo B --> f(#1:Foo, #3:Foo, #3:Foo) C --> f(#2:Foo, #4:Foo, #4:Foo) Unifier 344 X --> f(#1:Foo, #2:Foo) Y --> f(#3:Foo, #4:Foo) A --> #1:Foo B --> f(#2:Foo, #2:Foo, #3:Foo) C --> f(#1:Foo, #4:Foo) Unifier 345 X --> f(#2:Foo, #3:Foo) Y --> #1:Foo A --> #2:Foo B --> f(#1:Foo, #3:Foo, #3:Foo) C --> #2:Foo Unifier 346 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> #2:Foo B --> f(#3:Foo, #3:Foo) C --> f(#1:Foo, #2:Foo, #4:Foo, #4:Foo) Unifier 347 X --> f(#2:Foo, #3:Foo) Y --> #1:Foo A --> #2:Foo B --> f(#3:Foo, #3:Foo) C --> f(#1:Foo, #2:Foo) Unifier 348 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo) A --> #1:Foo B --> f(#2:Foo, #3:Foo) C --> f(#1:Foo, #2:Foo, #4:Foo, #4:Foo, #5:Foo) Unifier 349 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> #2:Foo B --> f(#1:Foo, #3:Foo) C --> f(#2:Foo, #3:Foo, #4:Foo, #4:Foo) Unifier 350 X --> f(#1:Foo, #2:Foo) Y --> f(#3:Foo, #4:Foo) A --> #1:Foo B --> f(#2:Foo, #3:Foo) C --> f(#1:Foo, #2:Foo, #4:Foo) Unifier 351 X --> f(#2:Foo, #3:Foo) Y --> #1:Foo A --> #2:Foo B --> f(#1:Foo, #3:Foo) C --> f(#2:Foo, #3:Foo) Unifier 352 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> #2:Foo B --> #3:Foo C --> f(#1:Foo, #2:Foo, #3:Foo, #4:Foo, #4:Foo) Unifier 353 X --> f(#2:Foo, #3:Foo) Y --> #1:Foo A --> #2:Foo B --> #3:Foo C --> f(#1:Foo, #2:Foo, #3:Foo) Unifier 354 X --> f(#1:Foo, #3:Foo) Y --> f(#2:Foo, #4:Foo) A --> #1:Foo B --> #2:Foo C --> f(#1:Foo, #3:Foo, #3:Foo, #4:Foo) Unifier 355 X --> f(#1:Foo, #3:Foo) Y --> #2:Foo A --> #1:Foo B --> #2:Foo C --> f(#1:Foo, #3:Foo, #3:Foo) Unifier 356 X --> #1:Foo Y --> f(#2:Foo, #3:Foo) A --> #1:Foo B --> #2:Foo C --> f(#1:Foo, #3:Foo) Unifier 357 X --> #1:Foo Y --> #2:Foo A --> #1:Foo B --> #2:Foo C --> #1:Foo Unifier 358 X --> f(#2:Foo, #3:Foo, #5:Foo) Y --> f(#1:Foo, #4:Foo, #6:Foo) A --> #1:Foo B --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) C --> f(#3:Foo, #5:Foo, #5:Foo, #6:Foo) Unifier 359 X --> f(#2:Foo, #3:Foo, #5:Foo) Y --> f(#1:Foo, #4:Foo) A --> #1:Foo B --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) C --> f(#3:Foo, #5:Foo, #5:Foo) Unifier 360 X --> f(#2:Foo, #3:Foo) Y --> f(#1:Foo, #4:Foo, #5:Foo) A --> #1:Foo B --> f(#2:Foo, #2:Foo, #3:Foo, #4:Foo) C --> f(#3:Foo, #5:Foo) Unifier 361 X --> f(#2:Foo, #3:Foo) Y --> f(#1:Foo, #4:Foo) A --> #1:Foo B --> f(#2:Foo, #3:Foo, #3:Foo, #4:Foo) C --> #2:Foo Unifier 362 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> f(#1:Foo, #5:Foo) A --> #1:Foo B --> f(#2:Foo, #2:Foo, #3:Foo) C --> f(#3:Foo, #4:Foo, #4:Foo, #5:Foo) Unifier 363 X --> f(#2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo A --> #1:Foo B --> f(#2:Foo, #2:Foo, #3:Foo) C --> f(#3:Foo, #4:Foo, #4:Foo) Unifier 364 X --> f(#2:Foo, #3:Foo) Y --> f(#1:Foo, #4:Foo) A --> #1:Foo B --> f(#2:Foo, #2:Foo, #3:Foo) C --> f(#3:Foo, #4:Foo) Unifier 365 X --> f(#2:Foo, #3:Foo) Y --> #1:Foo A --> #1:Foo B --> f(#2:Foo, #3:Foo, #3:Foo) C --> #2:Foo Unifier 366 X --> f(#2:Foo, #4:Foo) Y --> f(#1:Foo, #3:Foo, #5:Foo) A --> #1:Foo B --> f(#2:Foo, #2:Foo, #3:Foo) C --> f(#4:Foo, #4:Foo, #5:Foo) Unifier 367 X --> f(#2:Foo, #4:Foo) Y --> f(#1:Foo, #3:Foo) A --> #1:Foo B --> f(#2:Foo, #2:Foo, #3:Foo) C --> f(#4:Foo, #4:Foo) Unifier 368 X --> #1:Foo Y --> f(#2:Foo, #3:Foo, #4:Foo) A --> #2:Foo B --> f(#1:Foo, #1:Foo, #4:Foo) C --> #3:Foo Unifier 369 X --> f(#2:Foo, #3:Foo) Y --> f(#1:Foo, #4:Foo) A --> #1:Foo B --> f(#2:Foo, #2:Foo) C --> f(#3:Foo, #3:Foo, #4:Foo) Unifier 370 X --> f(#2:Foo, #3:Foo) Y --> #1:Foo A --> #1:Foo B --> f(#2:Foo, #2:Foo) C --> f(#3:Foo, #3:Foo) Unifier 371 X --> #1:Foo Y --> f(#2:Foo, #3:Foo) A --> #2:Foo B --> f(#1:Foo, #1:Foo) C --> #3:Foo Unifier 372 X --> f(#2:Foo, #4:Foo) Y --> f(#1:Foo, #3:Foo, #5:Foo) A --> #1:Foo B --> f(#2:Foo, #3:Foo) C --> f(#2:Foo, #4:Foo, #4:Foo, #5:Foo) Unifier 373 X --> f(#2:Foo, #4:Foo) Y --> f(#1:Foo, #3:Foo) A --> #1:Foo B --> f(#2:Foo, #3:Foo) C --> f(#2:Foo, #4:Foo, #4:Foo) Unifier 374 X --> #1:Foo Y --> f(#2:Foo, #3:Foo, #4:Foo) A --> #2:Foo B --> f(#1:Foo, #3:Foo) C --> f(#1:Foo, #4:Foo) Unifier 375 X --> #2:Foo Y --> f(#1:Foo, #3:Foo) A --> #1:Foo B --> f(#2:Foo, #3:Foo) C --> #2:Foo Unifier 376 X --> f(#2:Foo, #3:Foo) Y --> f(#1:Foo, #4:Foo) A --> #1:Foo B --> #2:Foo C --> f(#2:Foo, #3:Foo, #3:Foo, #4:Foo) Unifier 377 X --> f(#2:Foo, #3:Foo) Y --> #1:Foo A --> #1:Foo B --> #2:Foo C --> f(#2:Foo, #3:Foo, #3:Foo) Unifier 378 X --> #2:Foo Y --> f(#1:Foo, #3:Foo) A --> #1:Foo B --> #2:Foo C --> f(#2:Foo, #3:Foo) Unifier 379 X --> #2:Foo Y --> #1:Foo A --> #1:Foo B --> #2:Foo C --> #2:Foo Unifier 380 X --> #1:Foo Y --> f(#2:Foo, #3:Foo, #4:Foo) A --> #2:Foo B --> #3:Foo C --> f(#1:Foo, #1:Foo, #4:Foo) Unifier 381 X --> #1:Foo Y --> f(#2:Foo, #3:Foo) A --> #2:Foo B --> #3:Foo C --> f(#1:Foo, #1:Foo) ========================================== unify in AC : f(X, X, Y) =? f(a, B, C) . Unifier 1 X --> f(a, #1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo) B --> f(a, #1:Foo, #1:Foo, #2:Foo, #3:Foo) C --> f(#2:Foo, #4:Foo, #4:Foo, #5:Foo) Unifier 2 X --> f(a, #2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo B --> f(a, #1:Foo, #2:Foo, #2:Foo, #3:Foo) C --> f(#3:Foo, #4:Foo, #4:Foo) Unifier 3 X --> f(a, #1:Foo, #2:Foo) Y --> f(#3:Foo, #4:Foo) B --> f(a, #1:Foo, #1:Foo, #2:Foo, #3:Foo) C --> f(#2:Foo, #4:Foo) Unifier 4 X --> f(a, #2:Foo, #3:Foo) Y --> #1:Foo B --> f(a, #1:Foo, #2:Foo, #3:Foo, #3:Foo) C --> #2:Foo Unifier 5 X --> f(a, #2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo B --> f(a, #2:Foo, #2:Foo, #3:Foo) C --> f(#1:Foo, #3:Foo, #4:Foo, #4:Foo) Unifier 6 X --> f(a, #2:Foo, #3:Foo) Y --> #1:Foo B --> f(a, #2:Foo, #2:Foo, #3:Foo) C --> f(#1:Foo, #3:Foo) Unifier 7 X --> f(a, #1:Foo, #3:Foo) Y --> f(#2:Foo, #4:Foo) B --> f(a, #1:Foo, #1:Foo, #2:Foo) C --> f(#3:Foo, #3:Foo, #4:Foo) Unifier 8 X --> f(a, #2:Foo, #3:Foo) Y --> #1:Foo B --> f(a, #1:Foo, #2:Foo, #2:Foo) C --> f(#3:Foo, #3:Foo) Unifier 9 X --> f(a, #2:Foo) Y --> f(#1:Foo, #3:Foo) B --> f(a, #2:Foo, #2:Foo, #3:Foo) C --> #1:Foo Unifier 10 X --> f(a, #2:Foo, #3:Foo) Y --> #1:Foo B --> f(a, #2:Foo, #2:Foo) C --> f(#1:Foo, #3:Foo, #3:Foo) Unifier 11 X --> f(a, #2:Foo) Y --> #1:Foo B --> f(a, #2:Foo, #2:Foo) C --> #1:Foo Unifier 12 X --> f(a, #1:Foo, #3:Foo) Y --> f(#2:Foo, #4:Foo) B --> f(a, #1:Foo, #2:Foo) C --> f(#1:Foo, #3:Foo, #3:Foo, #4:Foo) Unifier 13 X --> f(a, #2:Foo, #3:Foo) Y --> #1:Foo B --> f(a, #1:Foo, #2:Foo) C --> f(#2:Foo, #3:Foo, #3:Foo) Unifier 14 X --> f(a, #1:Foo) Y --> f(#2:Foo, #3:Foo) B --> f(a, #1:Foo, #2:Foo) C --> f(#1:Foo, #3:Foo) Unifier 15 X --> f(a, #2:Foo) Y --> #1:Foo B --> f(a, #1:Foo, #2:Foo) C --> #2:Foo Unifier 16 X --> f(a, #2:Foo, #3:Foo) Y --> #1:Foo B --> f(a, #2:Foo) C --> f(#1:Foo, #2:Foo, #3:Foo, #3:Foo) Unifier 17 X --> f(a, #2:Foo) Y --> #1:Foo B --> f(a, #2:Foo) C --> f(#1:Foo, #2:Foo) Unifier 18 X --> f(a, #2:Foo) Y --> f(#1:Foo, #3:Foo) B --> f(a, #1:Foo) C --> f(#2:Foo, #2:Foo, #3:Foo) Unifier 19 X --> f(a, #2:Foo) Y --> #1:Foo B --> f(a, #1:Foo) C --> f(#2:Foo, #2:Foo) Unifier 20 X --> a Y --> f(#1:Foo, #2:Foo) B --> f(a, #2:Foo) C --> #1:Foo Unifier 21 X --> f(a, #2:Foo) Y --> #1:Foo B --> a C --> f(#1:Foo, #2:Foo, #2:Foo) Unifier 22 X --> a Y --> #1:Foo B --> a C --> #1:Foo Unifier 23 X --> f(a, #1:Foo, #2:Foo, #4:Foo) Y --> f(#3:Foo, #5:Foo) B --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) C --> f(a, #2:Foo, #4:Foo, #4:Foo, #5:Foo) Unifier 24 X --> f(a, #2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo B --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo) C --> f(a, #3:Foo, #4:Foo, #4:Foo) Unifier 25 X --> f(a, #1:Foo, #2:Foo) Y --> f(#3:Foo, #4:Foo) B --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) C --> f(a, #2:Foo, #4:Foo) Unifier 26 X --> f(a, #2:Foo, #3:Foo) Y --> #1:Foo B --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo) C --> f(a, #3:Foo) Unifier 27 X --> f(a, #2:Foo, #3:Foo, #4:Foo) Y --> #1:Foo B --> f(#2:Foo, #2:Foo, #3:Foo) C --> f(a, #1:Foo, #3:Foo, #4:Foo, #4:Foo) Unifier 28 X --> f(a, #2:Foo, #3:Foo) Y --> #1:Foo B --> f(#2:Foo, #2:Foo, #3:Foo) C --> f(a, #1:Foo, #3:Foo) Unifier 29 X --> f(a, #1:Foo, #3:Foo) Y --> f(#2:Foo, #4:Foo) B --> f(#1:Foo, #1:Foo, #2:Foo) C --> f(a, #3:Foo, #3:Foo, #4:Foo) Unifier 30 X --> f(a, #2:Foo, #3:Foo) Y --> #1:Foo B --> f(#1:Foo, #2:Foo, #2:Foo) C --> f(a, #3:Foo, #3:Foo) Unifier 31 X --> f(a, #1:Foo) Y --> f(#2:Foo, #3:Foo) B --> f(#1:Foo, #1:Foo, #2:Foo) C --> f(a, #3:Foo) Unifier 32 X --> f(a, #2:Foo) Y --> #1:Foo B --> f(#1:Foo, #2:Foo, #2:Foo) C --> a Unifier 33 X --> f(a, #2:Foo, #3:Foo) Y --> #1:Foo B --> f(#2:Foo, #2:Foo) C --> f(a, #1:Foo, #3:Foo, #3:Foo) Unifier 34 X --> f(a, #2:Foo) Y --> #1:Foo B --> f(#2:Foo, #2:Foo) C --> f(a, #1:Foo) Unifier 35 X --> f(a, #1:Foo, #3:Foo) Y --> f(#2:Foo, #4:Foo) B --> f(#1:Foo, #2:Foo) C --> f(a, #1:Foo, #3:Foo, #3:Foo, #4:Foo) Unifier 36 X --> f(a, #2:Foo, #3:Foo) Y --> #1:Foo B --> f(#1:Foo, #2:Foo) C --> f(a, #2:Foo, #3:Foo, #3:Foo) Unifier 37 X --> f(a, #1:Foo) Y --> f(#2:Foo, #3:Foo) B --> f(#1:Foo, #2:Foo) C --> f(a, #1:Foo, #3:Foo) Unifier 38 X --> f(a, #2:Foo) Y --> #1:Foo B --> f(#1:Foo, #2:Foo) C --> f(a, #2:Foo) Unifier 39 X --> f(a, #2:Foo, #3:Foo) Y --> #1:Foo B --> #2:Foo C --> f(a, #1:Foo, #2:Foo, #3:Foo, #3:Foo) Unifier 40 X --> f(a, #2:Foo) Y --> #1:Foo B --> #2:Foo C --> f(a, #1:Foo, #2:Foo) Unifier 41 X --> f(a, #2:Foo) Y --> f(#1:Foo, #3:Foo) B --> #1:Foo C --> f(a, #2:Foo, #2:Foo, #3:Foo) Unifier 42 X --> f(a, #2:Foo) Y --> #1:Foo B --> #1:Foo C --> f(a, #2:Foo, #2:Foo) Unifier 43 X --> a Y --> f(#1:Foo, #2:Foo) B --> #1:Foo C --> f(a, #2:Foo) Unifier 44 X --> a Y --> #1:Foo B --> #1:Foo C --> a Unifier 45 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(a, #3:Foo, #5:Foo) B --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) C --> f(#2:Foo, #4:Foo, #4:Foo, #5:Foo) Unifier 46 X --> f(#1:Foo, #2:Foo, #4:Foo) Y --> f(a, #3:Foo) B --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) C --> f(#2:Foo, #4:Foo, #4:Foo) Unifier 47 X --> f(#1:Foo, #2:Foo) Y --> f(a, #3:Foo, #4:Foo) B --> f(#1:Foo, #1:Foo, #2:Foo, #3:Foo) C --> f(#2:Foo, #4:Foo) Unifier 48 X --> f(#1:Foo, #2:Foo) Y --> f(a, #3:Foo) B --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo) C --> #1:Foo Unifier 49 X --> f(#1:Foo, #2:Foo, #3:Foo) Y --> f(a, #4:Foo) B --> f(#1:Foo, #1:Foo, #2:Foo) C --> f(#2:Foo, #3:Foo, #3:Foo, #4:Foo) Unifier 50 X --> f(#1:Foo, #2:Foo, #3:Foo) Y --> a B --> f(#1:Foo, #1:Foo, #2:Foo) C --> f(#2:Foo, #3:Foo, #3:Foo) Unifier 51 X --> f(#1:Foo, #2:Foo) Y --> f(a, #3:Foo) B --> f(#1:Foo, #1:Foo, #2:Foo) C --> f(#2:Foo, #3:Foo) Unifier 52 X --> f(#1:Foo, #2:Foo) Y --> a B --> f(#1:Foo, #2:Foo, #2:Foo) C --> #1:Foo Unifier 53 X --> f(#1:Foo, #3:Foo) Y --> f(a, #2:Foo, #4:Foo) B --> f(#1:Foo, #1:Foo, #2:Foo) C --> f(#3:Foo, #3:Foo, #4:Foo) Unifier 54 X --> f(#1:Foo, #3:Foo) Y --> f(a, #2:Foo) B --> f(#1:Foo, #1:Foo, #2:Foo) C --> f(#3:Foo, #3:Foo) Unifier 55 X --> #1:Foo Y --> f(a, #2:Foo, #3:Foo) B --> f(#1:Foo, #1:Foo, #3:Foo) C --> #2:Foo Unifier 56 X --> f(#1:Foo, #2:Foo) Y --> f(a, #3:Foo) B --> f(#1:Foo, #1:Foo) C --> f(#2:Foo, #2:Foo, #3:Foo) Unifier 57 X --> f(#1:Foo, #2:Foo) Y --> a B --> f(#1:Foo, #1:Foo) C --> f(#2:Foo, #2:Foo) Unifier 58 X --> #1:Foo Y --> f(a, #2:Foo) B --> f(#1:Foo, #1:Foo) C --> #2:Foo Unifier 59 X --> f(#1:Foo, #3:Foo) Y --> f(a, #2:Foo, #4:Foo) B --> f(#1:Foo, #2:Foo) C --> f(#1:Foo, #3:Foo, #3:Foo, #4:Foo) Unifier 60 X --> f(#1:Foo, #3:Foo) Y --> f(a, #2:Foo) B --> f(#1:Foo, #2:Foo) C --> f(#1:Foo, #3:Foo, #3:Foo) Unifier 61 X --> #1:Foo Y --> f(a, #2:Foo, #3:Foo) B --> f(#1:Foo, #2:Foo) C --> f(#1:Foo, #3:Foo) Unifier 62 X --> #1:Foo Y --> f(a, #2:Foo) B --> f(#1:Foo, #2:Foo) C --> #1:Foo Unifier 63 X --> f(#1:Foo, #2:Foo) Y --> f(a, #3:Foo) B --> #1:Foo C --> f(#1:Foo, #2:Foo, #2:Foo, #3:Foo) Unifier 64 X --> f(#1:Foo, #2:Foo) Y --> a B --> #1:Foo C --> f(#1:Foo, #2:Foo, #2:Foo) Unifier 65 X --> #1:Foo Y --> f(a, #2:Foo) B --> #1:Foo C --> f(#1:Foo, #2:Foo) Unifier 66 X --> #1:Foo Y --> a B --> #1:Foo C --> #1:Foo Unifier 67 X --> #1:Foo Y --> f(a, #2:Foo, #3:Foo) B --> #2:Foo C --> f(#1:Foo, #1:Foo, #3:Foo) Unifier 68 X --> #1:Foo Y --> f(a, #2:Foo) B --> #2:Foo C --> f(#1:Foo, #1:Foo) ========================================== unify in AC : f(X, X, X) =? f(a, a) . No unifier. ========================================== unify in AC : f(X, X, X, Y) =? f(a, a) . No unifier. ========================================== unify in AC2 : f(A, B) =? f(C, D) . Unifier 1 A --> #1:Elt B --> #2:Elt C --> #1:Elt D --> #2:Elt Unifier 2 A --> #2:Elt B --> #1:Elt C --> #1:Elt D --> #2:Elt ========================================== unify in AC2 : f(X, A) =? f(Y, B) . Unifier 1 A --> #1:Elt X --> #2:Set B --> #1:Elt Y --> #2:Set Unifier 2 A --> #1:Elt X --> f(#2:Elt, #3:Set) B --> #2:Elt Y --> f(#1:Elt, #3:Set) Unifier 3 A --> #1:Elt X --> #2:Elt B --> #2:Elt Y --> #1:Elt ========================================== unify in AC2 : f(g(X, Y), g(X, Z), U) =? f(g(Y, Z), V) . Unifier 1 U --> f(#4:Set, g(#3:Set, #2:Set)) X --> #1:Set Z --> #2:Set Y --> #3:Set V --> f(#4:Set, g(#1:Set, #2:Set), g(#1:Set, #3:Set)) Unifier 2 U --> #1:Set X --> #2:Set Z --> #2:Set Y --> #2:Set V --> f(#1:Set, g(#2:Set, #2:Set)) Unifier 3 U --> #1:Set X --> #3:Set Z --> #2:Set Y --> #3:Set V --> f(#1:Set, g(#3:Set, #3:Set)) Unifier 4 U --> g(#3:Set, #2:Set) X --> #1:Set Z --> #2:Set Y --> #3:Set V --> f(g(#1:Set, #2:Set), g(#1:Set, #3:Set)) ========================================== unify in AC2 : g(f(X, Y), f(X, U, Z)) =? g(f(U, V), f(W, A)) . Unifier 1 X --> f(#3:Set, #4:Set) Y --> f(#5:Set, #6:Set) Z --> f(#1:Elt, #2:Set) U --> f(#3:Set, #5:Set) V --> f(#4:Set, #6:Set) A --> #1:Elt W --> f(#2:Set, #3:Set, #3:Set, #4:Set, #5:Set) Unifier 2 X --> f(#2:Set, #5:Set) Y --> #1:Set Z --> f(#3:Elt, #4:Set) U --> f(#1:Set, #5:Set) V --> #2:Set A --> #3:Elt W --> f(#1:Set, #2:Set, #4:Set, #5:Set, #5:Set) Unifier 3 X --> f(#2:Set, #5:Set) Y --> #1:Set Z --> f(#3:Elt, #4:Set) U --> #2:Set V --> f(#1:Set, #5:Set) A --> #3:Elt W --> f(#2:Set, #2:Set, #4:Set, #5:Set) Unifier 4 X --> #1:Set Y --> f(#2:Set, #5:Set) Z --> f(#3:Elt, #4:Set) U --> f(#1:Set, #5:Set) V --> #2:Set A --> #3:Elt W --> f(#1:Set, #1:Set, #4:Set, #5:Set) Unifier 5 X --> #1:Set Y --> #2:Set Z --> f(#3:Elt, #4:Set) U --> #1:Set V --> #2:Set A --> #3:Elt W --> f(#1:Set, #1:Set, #4:Set) Unifier 6 X --> #1:Set Y --> f(#2:Set, #5:Set) Z --> f(#3:Elt, #4:Set) U --> #2:Set V --> f(#1:Set, #5:Set) A --> #3:Elt W --> f(#1:Set, #2:Set, #4:Set) Unifier 7 X --> #1:Set Y --> #2:Set Z --> f(#3:Elt, #4:Set) U --> #2:Set V --> #1:Set A --> #3:Elt W --> f(#1:Set, #2:Set, #4:Set) Unifier 8 X --> f(#2:Set, #3:Set) Y --> f(#4:Set, #5:Set) Z --> #1:Elt U --> f(#2:Set, #4:Set) V --> f(#3:Set, #5:Set) A --> #1:Elt W --> f(#2:Set, #2:Set, #3:Set, #4:Set) Unifier 9 X --> f(#2:Set, #4:Set) Y --> #1:Set Z --> #3:Elt U --> f(#1:Set, #4:Set) V --> #2:Set A --> #3:Elt W --> f(#1:Set, #2:Set, #4:Set, #4:Set) Unifier 10 X --> f(#2:Set, #4:Set) Y --> #1:Set Z --> #3:Elt U --> #2:Set V --> f(#1:Set, #4:Set) A --> #3:Elt W --> f(#2:Set, #2:Set, #4:Set) Unifier 11 X --> #1:Set Y --> f(#2:Set, #4:Set) Z --> #3:Elt U --> f(#1:Set, #4:Set) V --> #2:Set A --> #3:Elt W --> f(#1:Set, #1:Set, #4:Set) Unifier 12 X --> #1:Set Y --> #2:Set Z --> #3:Elt U --> #1:Set V --> #2:Set A --> #3:Elt W --> f(#1:Set, #1:Set) Unifier 13 X --> #1:Set Y --> f(#2:Set, #4:Set) Z --> #3:Elt U --> #2:Set V --> f(#1:Set, #4:Set) A --> #3:Elt W --> f(#1:Set, #2:Set) Unifier 14 X --> #1:Set Y --> #2:Set Z --> #3:Elt U --> #2:Set V --> #1:Set A --> #3:Elt W --> f(#1:Set, #2:Set) Unifier 15 X --> f(#2:Elt, #3:Set, #4:Set) Y --> f(#5:Set, #6:Set) Z --> #1:Set U --> f(#2:Elt, #3:Set, #5:Set) V --> f(#4:Set, #6:Set) A --> #2:Elt W --> f(#2:Elt, #1:Set, #3:Set, #3:Set, #4:Set, #5:Set) Unifier 16 X --> f(#4:Elt, #3:Set, #5:Set) Y --> #1:Set Z --> #2:Set U --> f(#4:Elt, #1:Set, #5:Set) V --> #3:Set A --> #4:Elt W --> f(#4:Elt, #1:Set, #2:Set, #3:Set, #5:Set, #5:Set) Unifier 17 X --> f(#3:Elt, #4:Set, #5:Set) Y --> #1:Set Z --> #2:Set U --> f(#3:Elt, #4:Set) V --> f(#1:Set, #5:Set) A --> #3:Elt W --> f(#3:Elt, #2:Set, #4:Set, #4:Set, #5:Set) Unifier 18 X --> f(#3:Elt, #4:Set) Y --> f(#2:Set, #5:Set) Z --> #1:Set U --> f(#3:Elt, #4:Set, #5:Set) V --> #2:Set A --> #3:Elt W --> f(#3:Elt, #1:Set, #4:Set, #4:Set, #5:Set) Unifier 19 X --> f(#3:Elt, #4:Set) Y --> #2:Set Z --> #1:Set U --> f(#3:Elt, #4:Set) V --> #2:Set A --> #3:Elt W --> f(#3:Elt, #1:Set, #4:Set, #4:Set) Unifier 20 X --> f(#2:Elt, #3:Set) Y --> f(#4:Set, #5:Set) Z --> #1:Set U --> f(#2:Elt, #4:Set) V --> f(#3:Set, #5:Set) A --> #2:Elt W --> f(#2:Elt, #1:Set, #3:Set, #4:Set) Unifier 21 X --> f(#4:Elt, #3:Set) Y --> #1:Set Z --> #2:Set U --> f(#4:Elt, #1:Set) V --> #3:Set A --> #4:Elt W --> f(#4:Elt, #1:Set, #2:Set, #3:Set) Unifier 22 X --> f(#3:Elt, #4:Set) Y --> #1:Set Z --> #2:Set U --> #3:Elt V --> f(#1:Set, #4:Set) A --> #3:Elt W --> f(#3:Elt, #2:Set, #4:Set) Unifier 23 X --> #3:Elt Y --> f(#2:Set, #4:Set) Z --> #1:Set U --> f(#3:Elt, #4:Set) V --> #2:Set A --> #3:Elt W --> f(#3:Elt, #1:Set, #4:Set) Unifier 24 X --> #3:Elt Y --> #2:Set Z --> #1:Set U --> #3:Elt V --> #2:Set A --> #3:Elt W --> f(#3:Elt, #1:Set) Unifier 25 X --> f(#2:Elt, #3:Set, #4:Set) Y --> f(#5:Set, #6:Set) Z --> #1:Set U --> f(#3:Set, #5:Set) V --> f(#2:Elt, #4:Set, #6:Set) A --> #2:Elt W --> f(#1:Set, #3:Set, #3:Set, #4:Set, #5:Set) Unifier 26 X --> f(#3:Elt, #4:Set, #5:Set) Y --> #1:Set Z --> #2:Set U --> f(#1:Set, #4:Set) V --> f(#3:Elt, #5:Set) A --> #3:Elt W --> f(#1:Set, #2:Set, #4:Set, #4:Set, #5:Set) Unifier 27 X --> f(#4:Elt, #3:Set, #5:Set) Y --> #1:Set Z --> #2:Set U --> #3:Set V --> f(#4:Elt, #1:Set, #5:Set) A --> #4:Elt W --> f(#2:Set, #3:Set, #3:Set, #5:Set) Unifier 28 X --> f(#2:Elt, #3:Set) Y --> f(#4:Set, #5:Set) Z --> #1:Set U --> f(#3:Set, #4:Set) V --> f(#2:Elt, #5:Set) A --> #2:Elt W --> f(#1:Set, #3:Set, #3:Set, #4:Set) Unifier 29 X --> f(#3:Elt, #4:Set) Y --> #1:Set Z --> #2:Set U --> f(#1:Set, #4:Set) V --> #3:Elt A --> #3:Elt W --> f(#1:Set, #2:Set, #4:Set, #4:Set) Unifier 30 X --> f(#4:Elt, #3:Set) Y --> #1:Set Z --> #2:Set U --> #3:Set V --> f(#4:Elt, #1:Set) A --> #4:Elt W --> f(#2:Set, #3:Set, #3:Set) Unifier 31 X --> f(#3:Elt, #4:Set) Y --> f(#2:Set, #5:Set) Z --> #1:Set U --> #2:Set V --> f(#3:Elt, #4:Set, #5:Set) A --> #3:Elt W --> f(#1:Set, #2:Set, #4:Set) Unifier 32 X --> f(#3:Elt, #4:Set) Y --> #2:Set Z --> #1:Set U --> #2:Set V --> f(#3:Elt, #4:Set) A --> #3:Elt W --> f(#1:Set, #2:Set, #4:Set) Unifier 33 X --> #3:Elt Y --> f(#2:Set, #4:Set) Z --> #1:Set U --> #2:Set V --> f(#3:Elt, #4:Set) A --> #3:Elt W --> f(#1:Set, #2:Set) Unifier 34 X --> #3:Elt Y --> #2:Set Z --> #1:Set U --> #2:Set V --> #3:Elt A --> #3:Elt W --> f(#1:Set, #2:Set) Unifier 35 X --> f(#3:Set, #4:Set) Y --> f(#2:Elt, #5:Set, #6:Set) Z --> #1:Set U --> f(#2:Elt, #3:Set, #5:Set) V --> f(#4:Set, #6:Set) A --> #2:Elt W --> f(#1:Set, #3:Set, #3:Set, #4:Set, #5:Set) Unifier 36 X --> f(#2:Set, #4:Set) Y --> f(#3:Elt, #5:Set) Z --> #1:Set U --> f(#3:Elt, #4:Set, #5:Set) V --> #2:Set A --> #3:Elt W --> f(#1:Set, #2:Set, #4:Set, #4:Set, #5:Set) Unifier 37 X --> f(#3:Set, #4:Set) Y --> f(#2:Elt, #5:Set) Z --> #1:Set U --> f(#2:Elt, #3:Set) V --> f(#4:Set, #5:Set) A --> #2:Elt W --> f(#1:Set, #3:Set, #3:Set, #4:Set) Unifier 38 X --> f(#2:Set, #4:Set) Y --> #3:Elt Z --> #1:Set U --> f(#3:Elt, #4:Set) V --> #2:Set A --> #3:Elt W --> f(#1:Set, #2:Set, #4:Set, #4:Set) Unifier 39 X --> #1:Set Y --> f(#4:Elt, #3:Set, #5:Set) Z --> #2:Set U --> f(#4:Elt, #1:Set, #5:Set) V --> #3:Set A --> #4:Elt W --> f(#1:Set, #1:Set, #2:Set, #5:Set) Unifier 40 X --> #1:Set Y --> f(#4:Elt, #3:Set) Z --> #2:Set U --> f(#4:Elt, #1:Set) V --> #3:Set A --> #4:Elt W --> f(#1:Set, #1:Set, #2:Set) Unifier 41 X --> #1:Set Y --> f(#3:Elt, #4:Set, #5:Set) Z --> #2:Set U --> f(#3:Elt, #4:Set) V --> f(#1:Set, #5:Set) A --> #3:Elt W --> f(#1:Set, #2:Set, #4:Set) Unifier 42 X --> #1:Set Y --> f(#3:Elt, #4:Set) Z --> #2:Set U --> f(#3:Elt, #4:Set) V --> #1:Set A --> #3:Elt W --> f(#1:Set, #2:Set, #4:Set) Unifier 43 X --> #1:Set Y --> f(#3:Elt, #4:Set) Z --> #2:Set U --> #3:Elt V --> f(#1:Set, #4:Set) A --> #3:Elt W --> f(#1:Set, #2:Set) Unifier 44 X --> #1:Set Y --> #3:Elt Z --> #2:Set U --> #3:Elt V --> #1:Set A --> #3:Elt W --> f(#1:Set, #2:Set) ========================================== unify in AC+C : f(g(X, Y), g(X, Z), U) =? f(g(Y, Z), V) . Unifier 1 U --> f(#4:Set, g(#1:Set, #3:Set)) Z --> #1:Set X --> #2:Set Y --> #3:Set V --> f(#4:Set, g(#1:Set, #2:Set), g(#2:Set, #3:Set)) Unifier 2 U --> #1:Set Z --> #2:Set X --> #2:Set Y --> #3:Set V --> f(#1:Set, g(#2:Set, #2:Set)) Unifier 3 U --> #1:Set Z --> #2:Set X --> #3:Set Y --> #3:Set V --> f(#1:Set, g(#3:Set, #3:Set)) Unifier 4 U --> g(#1:Set, #3:Set) Z --> #1:Set X --> #2:Set Y --> #3:Set V --> f(g(#1:Set, #2:Set), g(#2:Set, #3:Set)) ========================================== unify in AC+C : g(f(X, Y), f(X, U, Z)) =? g(f(U, V), f(W, A)) . Unifier 1 X --> f(#3:Set, #4:Set, #2:Elt) Y --> f(#5:Set, #6:Set) Z --> #1:Set U --> f(#3:Set, #5:Set, #2:Elt) V --> f(#4:Set, #6:Set) W --> f(#1:Set, #3:Set, #3:Set, #4:Set, #5:Set, #2:Elt) A --> #2:Elt Unifier 2 X --> f(#3:Set, #5:Set, #4:Elt) Y --> #1:Set Z --> #2:Set U --> f(#1:Set, #5:Set, #4:Elt) V --> #3:Set W --> f(#1:Set, #2:Set, #3:Set, #5:Set, #5:Set, #4:Elt) A --> #4:Elt Unifier 3 X --> f(#4:Set, #5:Set, #3:Elt) Y --> #1:Set Z --> #2:Set U --> f(#4:Set, #3:Elt) V --> f(#1:Set, #5:Set) W --> f(#2:Set, #4:Set, #4:Set, #5:Set, #3:Elt) A --> #3:Elt Unifier 4 X --> f(#4:Set, #3:Elt) Y --> f(#2:Set, #5:Set) Z --> #1:Set U --> f(#4:Set, #5:Set, #3:Elt) V --> #2:Set W --> f(#1:Set, #4:Set, #4:Set, #5:Set, #3:Elt) A --> #3:Elt Unifier 5 X --> f(#4:Set, #3:Elt) Y --> #2:Set Z --> #1:Set U --> f(#4:Set, #3:Elt) V --> #2:Set W --> f(#1:Set, #4:Set, #4:Set, #3:Elt) A --> #3:Elt Unifier 6 X --> f(#3:Set, #4:Set) Y --> f(#5:Set, #6:Set) Z --> f(#2:Set, #1:Elt) U --> f(#3:Set, #5:Set) V --> f(#4:Set, #6:Set) W --> f(#2:Set, #3:Set, #3:Set, #4:Set, #5:Set) A --> #1:Elt Unifier 7 X --> f(#2:Set, #5:Set) Y --> #1:Set Z --> f(#4:Set, #3:Elt) U --> f(#1:Set, #5:Set) V --> #2:Set W --> f(#1:Set, #2:Set, #4:Set, #5:Set, #5:Set) A --> #3:Elt Unifier 8 X --> f(#3:Set, #4:Set, #2:Elt) Y --> f(#5:Set, #6:Set) Z --> #1:Set U --> f(#3:Set, #5:Set) V --> f(#4:Set, #6:Set, #2:Elt) W --> f(#1:Set, #3:Set, #3:Set, #4:Set, #5:Set) A --> #2:Elt Unifier 9 X --> f(#4:Set, #5:Set, #3:Elt) Y --> #1:Set Z --> #2:Set U --> f(#1:Set, #4:Set) V --> f(#5:Set, #3:Elt) W --> f(#1:Set, #2:Set, #4:Set, #4:Set, #5:Set) A --> #3:Elt Unifier 10 X --> f(#3:Set, #4:Set) Y --> f(#5:Set, #6:Set, #2:Elt) Z --> #1:Set U --> f(#3:Set, #5:Set, #2:Elt) V --> f(#4:Set, #6:Set) W --> f(#1:Set, #3:Set, #3:Set, #4:Set, #5:Set) A --> #2:Elt Unifier 11 X --> f(#2:Set, #4:Set) Y --> f(#5:Set, #3:Elt) Z --> #1:Set U --> f(#4:Set, #5:Set, #3:Elt) V --> #2:Set W --> f(#1:Set, #2:Set, #4:Set, #4:Set, #5:Set) A --> #3:Elt Unifier 12 X --> f(#2:Set, #5:Set) Y --> #1:Set Z --> f(#4:Set, #3:Elt) U --> #2:Set V --> f(#1:Set, #5:Set) W --> f(#2:Set, #2:Set, #4:Set, #5:Set) A --> #3:Elt Unifier 13 X --> f(#3:Set, #5:Set, #4:Elt) Y --> #1:Set Z --> #2:Set U --> #3:Set V --> f(#1:Set, #5:Set, #4:Elt) W --> f(#2:Set, #3:Set, #3:Set, #5:Set) A --> #4:Elt Unifier 14 X --> f(#3:Set, #4:Set) Y --> f(#5:Set, #2:Elt) Z --> #1:Set U --> f(#3:Set, #2:Elt) V --> f(#4:Set, #5:Set) W --> f(#1:Set, #3:Set, #3:Set, #4:Set) A --> #2:Elt Unifier 15 X --> f(#2:Set, #4:Set) Y --> #3:Elt Z --> #1:Set U --> f(#4:Set, #3:Elt) V --> #2:Set W --> f(#1:Set, #2:Set, #4:Set, #4:Set) A --> #3:Elt Unifier 16 X --> #1:Set Y --> f(#2:Set, #5:Set) Z --> f(#4:Set, #3:Elt) U --> f(#1:Set, #5:Set) V --> #2:Set W --> f(#1:Set, #1:Set, #4:Set, #5:Set) A --> #3:Elt Unifier 17 X --> f(#3:Set, #2:Elt) Y --> f(#4:Set, #5:Set) Z --> #1:Set U --> f(#3:Set, #4:Set) V --> f(#5:Set, #2:Elt) W --> f(#1:Set, #3:Set, #3:Set, #4:Set) A --> #2:Elt Unifier 18 X --> f(#4:Set, #3:Elt) Y --> #1:Set Z --> #2:Set U --> f(#1:Set, #4:Set) V --> #3:Elt W --> f(#1:Set, #2:Set, #4:Set, #4:Set) A --> #3:Elt Unifier 19 X --> #1:Set Y --> f(#3:Set, #5:Set, #4:Elt) Z --> #2:Set U --> f(#1:Set, #5:Set, #4:Elt) V --> #3:Set W --> f(#1:Set, #1:Set, #2:Set, #5:Set) A --> #4:Elt Unifier 20 X --> #1:Set Y --> #2:Set Z --> f(#4:Set, #3:Elt) U --> #1:Set V --> #2:Set W --> f(#1:Set, #1:Set, #4:Set) A --> #3:Elt Unifier 21 X --> f(#3:Set, #4:Elt) Y --> #1:Set Z --> #2:Set U --> #3:Set V --> f(#1:Set, #4:Elt) W --> f(#2:Set, #3:Set, #3:Set) A --> #4:Elt Unifier 22 X --> #1:Set Y --> f(#3:Set, #4:Elt) Z --> #2:Set U --> f(#1:Set, #4:Elt) V --> #3:Set W --> f(#1:Set, #1:Set, #2:Set) A --> #4:Elt Unifier 23 X --> f(#3:Set, #2:Elt) Y --> f(#4:Set, #5:Set) Z --> #1:Set U --> f(#4:Set, #2:Elt) V --> f(#3:Set, #5:Set) W --> f(#1:Set, #3:Set, #4:Set, #2:Elt) A --> #2:Elt Unifier 24 X --> f(#3:Set, #4:Elt) Y --> #1:Set Z --> #2:Set U --> f(#1:Set, #4:Elt) V --> #3:Set W --> f(#1:Set, #2:Set, #3:Set, #4:Elt) A --> #4:Elt Unifier 25 X --> f(#4:Set, #3:Elt) Y --> #1:Set Z --> #2:Set U --> #3:Elt V --> f(#1:Set, #4:Set) W --> f(#2:Set, #4:Set, #3:Elt) A --> #3:Elt Unifier 26 X --> #3:Elt Y --> f(#2:Set, #4:Set) Z --> #1:Set U --> f(#4:Set, #3:Elt) V --> #2:Set W --> f(#1:Set, #4:Set, #3:Elt) A --> #3:Elt Unifier 27 X --> #3:Elt Y --> #2:Set Z --> #1:Set U --> #3:Elt V --> #2:Set W --> f(#1:Set, #3:Elt) A --> #3:Elt Unifier 28 X --> #1:Set Y --> f(#2:Set, #5:Set) Z --> f(#4:Set, #3:Elt) U --> #2:Set V --> f(#1:Set, #5:Set) W --> f(#1:Set, #2:Set, #4:Set) A --> #3:Elt Unifier 29 X --> #1:Set Y --> #2:Set Z --> f(#4:Set, #3:Elt) U --> #2:Set V --> #1:Set W --> f(#1:Set, #2:Set, #4:Set) A --> #3:Elt Unifier 30 X --> f(#4:Set, #3:Elt) Y --> f(#2:Set, #5:Set) Z --> #1:Set U --> #2:Set V --> f(#4:Set, #5:Set, #3:Elt) W --> f(#1:Set, #2:Set, #4:Set) A --> #3:Elt Unifier 31 X --> f(#4:Set, #3:Elt) Y --> #2:Set Z --> #1:Set U --> #2:Set V --> f(#4:Set, #3:Elt) W --> f(#1:Set, #2:Set, #4:Set) A --> #3:Elt Unifier 32 X --> #1:Set Y --> f(#4:Set, #5:Set, #3:Elt) Z --> #2:Set U --> f(#4:Set, #3:Elt) V --> f(#1:Set, #5:Set) W --> f(#1:Set, #2:Set, #4:Set) A --> #3:Elt Unifier 33 X --> #1:Set Y --> f(#4:Set, #3:Elt) Z --> #2:Set U --> f(#4:Set, #3:Elt) V --> #1:Set W --> f(#1:Set, #2:Set, #4:Set) A --> #3:Elt Unifier 34 X --> #1:Set Y --> f(#4:Set, #3:Elt) Z --> #2:Set U --> #3:Elt V --> f(#1:Set, #4:Set) W --> f(#1:Set, #2:Set) A --> #3:Elt Unifier 35 X --> #1:Set Y --> #3:Elt Z --> #2:Set U --> #3:Elt V --> #1:Set W --> f(#1:Set, #2:Set) A --> #3:Elt Unifier 36 X --> #3:Elt Y --> f(#2:Set, #4:Set) Z --> #1:Set U --> #2:Set V --> f(#4:Set, #3:Elt) W --> f(#1:Set, #2:Set) A --> #3:Elt Unifier 37 X --> #3:Elt Y --> #2:Set Z --> #1:Set U --> #2:Set V --> #3:Elt W --> f(#1:Set, #2:Set) A --> #3:Elt Unifier 38 X --> f(#2:Set, #3:Set) Y --> f(#4:Set, #5:Set) Z --> #1:Elt U --> f(#2:Set, #4:Set) V --> f(#3:Set, #5:Set) W --> f(#2:Set, #2:Set, #3:Set, #4:Set) A --> #1:Elt Unifier 39 X --> f(#2:Set, #4:Set) Y --> #1:Set Z --> #3:Elt U --> f(#1:Set, #4:Set) V --> #2:Set W --> f(#1:Set, #2:Set, #4:Set, #4:Set) A --> #3:Elt Unifier 40 X --> f(#2:Set, #4:Set) Y --> #1:Set Z --> #3:Elt U --> #2:Set V --> f(#1:Set, #4:Set) W --> f(#2:Set, #2:Set, #4:Set) A --> #3:Elt Unifier 41 X --> #1:Set Y --> f(#2:Set, #4:Set) Z --> #3:Elt U --> f(#1:Set, #4:Set) V --> #2:Set W --> f(#1:Set, #1:Set, #4:Set) A --> #3:Elt Unifier 42 X --> #1:Set Y --> #2:Set Z --> #3:Elt U --> #1:Set V --> #2:Set W --> f(#1:Set, #1:Set) A --> #3:Elt Unifier 43 X --> #1:Set Y --> f(#2:Set, #4:Set) Z --> #3:Elt U --> #2:Set V --> f(#1:Set, #4:Set) W --> f(#1:Set, #2:Set) A --> #3:Elt Unifier 44 X --> #1:Set Y --> #2:Set Z --> #3:Elt U --> #2:Set V --> #1:Set W --> f(#1:Set, #2:Set) A --> #3:Elt Unifier 45 X --> f(#5:Set, #4:Elt) Y --> #1:Set Z --> #2:Set U --> #3:Set V --> f(#2:Set, #5:Set, #4:Elt) W --> f(#1:Set, #5:Set) A --> #4:Elt Unifier 46 X --> #1:Set Y --> f(#5:Set, #4:Elt) Z --> #2:Set U --> #3:Set V --> f(#1:Set, #2:Set) W --> f(#1:Set, #5:Set) A --> #4:Elt Unifier 47 X --> #1:Set Y --> #4:Elt Z --> #2:Set U --> #3:Set V --> f(#1:Set, #2:Set) W --> #1:Set A --> #4:Elt Unifier 48 X --> #4:Elt Y --> #3:Set Z --> #1:Set U --> #2:Set V --> f(#1:Set, #4:Elt) W --> #3:Set A --> #4:Elt ========================================== unify in SIMULT : g(X:Foo) =? g(Y:Foo) /\ h(X:Foo) =? h(Z:Foo) . Unifier 1 X:Foo --> #1:Foo Y:Foo --> #1:Foo Z:Foo --> #1:Foo ========================================== unify in SIMULT : g(X:Foo) =? Y:Foo /\ h(X:Foo) =? h(Z:Foo) . Unifier 1 X:Foo --> #1:Foo Y:Foo --> g(#1:Foo) Z:Foo --> #1:Foo ========================================== unify in SIMULT : g(X:Foo) =? Y:Foo /\ h(X:Foo) =? h(Y:Foo) . No unifier. ========================================== unify in SIMULT : g(X:Foo) =? Y:Foo /\ X:Foo =? h(Y:Foo) . No unifier. ========================================== unify [1] in SIMULT : g(X:Foo) =? Y:Foo /\ h(X:Foo) =? h(Z:Foo) . Unifier 1 X:Foo --> #1:Foo Y:Foo --> g(#1:Foo) Z:Foo --> #1:Foo Bye. maude-3.1/tests/Misc/continue0000755000175200017520000000033413074024374013210 00000000000000#!/bin/sh MAUDE_LIB=$srcdir/../../src/Main export MAUDE_LIB ../../src/Main/maude \ < $srcdir/continue.maude -no-banner -no-advise \ > continue.out 2>&1 diff $srcdir/continue.expected continue.out > /dev/null 2>&1 maude-3.1/tests/Misc/unification2.maude0000644000175200017520000000331711431127416015045 00000000000000*** Tricky unification problems *** 8/12/10 set show timing off . fmod TEST is sort Foo . ops 1f a b c : -> Foo . op g : Foo Foo -> Foo . op h : Foo -> Foo . op f : Foo Foo -> Foo [assoc comm id: 1f] . vars A B C X Y Z : Foo . endfm *** long running time with naive algorithm unify g( f(X, X, Y, Y, h(Z)), f(X, Y, Y, Z, Z) ) =? g( f(A, A, A, B, C), f(A, B, B, h(C)) ) . fmod FOO is sort Foo . op f : Foo Foo -> Foo [assoc comm] . vars W X Y Z : Foo . endfm *** fewer unifiers with eager variable replacement unify X =? W /\ f(X, Y) =? f(W, Z) . fmod NAT' is protecting BOOL . sorts Zero NzNat Nat . subsort Zero NzNat < Nat . op 0 : -> Zero . op s_ : Nat -> NzNat [iter] . op _*_ : NzNat NzNat -> NzNat [assoc comm id: s(0) prec 31] . op _*_ : Nat Nat -> Nat [ditto] . vars W X Y Z A B C D : Nat . endfm *** cycle breaking through S theory unify X =? s (X * Y) . unify X =? s X * Y . *** theory conflict unify s X =? s X * Y . unify s X =? X * Y . fmod COMM is sort Foo . ops a b c d : -> Foo . op f : Foo Foo -> Foo [assoc comm id: c(a, b)] . op c : Foo Foo -> Foo [comm] . vars W X Y Z A B C D : Foo . endfm *** cycle breaking through comm theory unify X =? c(f(X, Y), Z) . fmod FOO2 is sort Foo . ops a b c d : -> Foo . op f : Foo Foo -> Foo [assoc comm id: g(c, d)] . op g : Foo Foo -> Foo [assoc comm id: f(a, b)] . vars X Y : Foo . endfm *** cycle breaking with non-disjoint identities unify X =? f(Y, a, b) /\ Y =? g(X, c, d) . fmod FOO3 is sort Foo . ops a b : -> Foo . op h : Foo -> Foo . op f : Foo Foo -> Foo [assoc comm id: h(f(a, b))] . vars X Y : Foo . endfm *** cycle breaking with non-disjoint identity unify X =? f(Y, a, b) /\ Y =? h(X) . maude-3.1/tests/Misc/renaming.expected0000644000175200017520000004051013522536500014756 00000000000000fmod BAR is including FOO * (sort Foo to Baz, sort Bar to Quux) . endfm fmod BAR is sorts Bool Baz Quux . subsort Baz < Quux . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . eq true and A:Bool = A:Bool . eq false and A:Bool = false . eq A:Bool and A:Bool = A:Bool . eq false xor A:Bool = A:Bool . eq A:Bool xor A:Bool = false . eq A:Bool and (B:Bool xor C:Bool) = A:Bool and B:Bool xor A:Bool and C:Bool . eq not A:Bool = true xor A:Bool . eq A:Bool or B:Bool = A:Bool and B:Bool xor A:Bool xor B:Bool . eq A:Bool implies B:Bool = not (A:Bool xor A:Bool and B:Bool) . endfm fmod THREE is including TWO * (sort Foo to Foo', sort Baz to Baz', sort Quux to Quux') . sorts Jaz . subsorts Jaz < Baz' . endfm fmod THREE is sorts Bool Baz' Bar Quux' Jaz . subsorts Quux' Jaz < Baz' . subsort Baz' < Bar . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . eq true and A:Bool = A:Bool . eq false and A:Bool = false . eq A:Bool and A:Bool = A:Bool . eq false xor A:Bool = A:Bool . eq A:Bool xor A:Bool = false . eq A:Bool and (B:Bool xor C:Bool) = A:Bool and B:Bool xor A:Bool and C:Bool . eq not A:Bool = true xor A:Bool . eq A:Bool or B:Bool = A:Bool and B:Bool xor A:Bool xor B:Bool . eq A:Bool implies B:Bool = not (A:Bool xor A:Bool and B:Bool) . endfm fmod BAR is including FOO * (sort Foo to Baz, op a to b) . endfm fmod BAR is sorts Bool Baz Bar . subsort Baz < Bar . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op b : -> Baz . eq true and A:Bool = A:Bool . eq false and A:Bool = false . eq A:Bool and A:Bool = A:Bool . eq false xor A:Bool = A:Bool . eq A:Bool xor A:Bool = false . eq A:Bool and (B:Bool xor C:Bool) = A:Bool and B:Bool xor A:Bool and C:Bool . eq not A:Bool = true xor A:Bool . eq A:Bool or B:Bool = A:Bool and B:Bool xor A:Bool xor B:Bool . eq A:Bool implies B:Bool = not (A:Bool xor A:Bool and B:Bool) . endfm fmod BAR' is including FOO' * (sort Foo to Quux, op _+_ : [Foo] [Foo] -> [Foo] to _*_ [ prec 29 gather (E e)], op _+_ : [Baz] [Baz] -> [Foo] to _._ [prec 27 gather (E e)]) . endfm fmod BAR' is sorts Bool Quux Bar Baz . subsort Quux < Bar . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op a : -> Baz . op _*_ : Quux Quux -> Quux [assoc comm prec 29 gather (E e)] . op _._ : Baz Baz -> Quux [prec 27 gather (E e)] . eq true and A:Bool = A:Bool . eq false and A:Bool = false . eq A:Bool and A:Bool = A:Bool . eq false xor A:Bool = A:Bool . eq A:Bool xor A:Bool = false . eq A:Bool and (B:Bool xor C:Bool) = A:Bool and B:Bool xor A:Bool and C:Bool . eq not A:Bool = true xor A:Bool . eq A:Bool or B:Bool = A:Bool and B:Bool xor A:Bool xor B:Bool . eq A:Bool implies B:Bool = not (A:Bool xor A:Bool and B:Bool) . endfm ========================================== reduce in BAR' : a . a * a . a . rewrites: 0 result Quux: a . a * a . a fmod BAR'' is including FOO' * (sort Foo to Quux, op _+_ to _*_ [prec 29 gather (E E)]) . endfm fmod BAR'' is sorts Bool Quux Bar Baz . subsort Quux < Bar . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op a : -> Baz . op _*_ : Quux Quux -> Quux [assoc comm prec 29 gather (E E)] . op _*_ : Baz Baz -> Quux [prec 29 gather (E E)] . eq true and A:Bool = A:Bool . eq false and A:Bool = false . eq A:Bool and A:Bool = A:Bool . eq false xor A:Bool = A:Bool . eq A:Bool xor A:Bool = false . eq A:Bool and (B:Bool xor C:Bool) = A:Bool and B:Bool xor A:Bool and C:Bool . eq not A:Bool = true xor A:Bool . eq A:Bool or B:Bool = A:Bool and B:Bool xor A:Bool xor B:Bool . eq A:Bool implies B:Bool = not (A:Bool xor A:Bool and B:Bool) . endfm ========================================== reduce in BAR'' : a * a * a * a . rewrites: 0 result Quux: a * a * a * a ========================================== reduce in BAR'' : a * a * a * a . rewrites: 0 result Quux: a * a * a * a fmod TEST is including BASH * (op f : [Foo] -> [Foo] to g) . endfm fmod TEST is sorts Bool Foo Bar . subsort Foo < Bar . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) prec 0 gather (& & &) special ( id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [poly (1 2) prec 51 gather (E E) special ( id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . op true : -> Bool [ctor special ( id-hook SystemTrue)] . op false : -> Bool [ctor special ( id-hook SystemFalse)] . op _and_ : Bool Bool -> Bool [assoc comm prec 55 gather (e E)] . op _or_ : Bool Bool -> Bool [assoc comm prec 59 gather (e E)] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57 gather (e E)] . op not_ : Bool -> Bool [prec 53 gather (E)] . op _implies_ : Bool Bool -> Bool [prec 61 gather (e E)] . op g : Foo -> Foo . op g : Bar -> Bar . eq true and A:Bool = A:Bool . eq false and A:Bool = false . eq A:Bool and A:Bool = A:Bool . eq false xor A:Bool = A:Bool . eq A:Bool xor A:Bool = false . eq A:Bool and (B:Bool xor C:Bool) = A:Bool and B:Bool xor A:Bool and C:Bool . eq not A:Bool = true xor A:Bool . eq A:Bool or B:Bool = A:Bool and B:Bool xor A:Bool xor B:Bool . eq A:Bool implies B:Bool = not (A:Bool xor A:Bool and B:Bool) . endfm fmod BOOL fmod TRUTH-VALUE fmod BOOL-OPS fmod TRUTH fmod EXT-BOOL fmod NAT fmod INT fmod RAT fmod FLOAT fmod STRING fmod CONVERSION fmod RANDOM fmod BOUND fmod QID fth TRIV fth STRICT-WEAK-ORDER fth STRICT-TOTAL-ORDER fth TOTAL-PREORDER fth TOTAL-ORDER fth DEFAULT fmod LIST fmod WEAKLY-SORTABLE-LIST fmod SORTABLE-LIST fmod WEAKLY-SORTABLE-LIST' fmod SORTABLE-LIST' fmod SET fmod LIST-AND-SET fmod SORTABLE-LIST-AND-SET fmod SORTABLE-LIST-AND-SET' fmod LIST* fmod SET* fmod MAP fmod ARRAY fmod NAT-LIST fmod QID-LIST fmod QID-SET fmod META-TERM fmod META-CONDITION fmod META-STRATEGY fmod META-MODULE fmod META-VIEW fmod META-LEVEL fmod LEXICAL mod COUNTER mod LOOP-MODE mod CONFIGURATION fmod FOO fmod BAR fmod ONE fmod TWO fmod THREE fmod FOO' fmod BAR' fmod BAR'' fmod DIFF fmod BASH fmod TEST fth X :: TRIV fmod LIST{[X]} fth X :: STRICT-WEAK-ORDER fmod LIST{STRICT-WEAK-ORDER} fmod LIST{STRICT-WEAK-ORDER}{[X]} fmod LIST{STRICT-WEAK-ORDER}{[X]} * (sort NeList{STRICT-WEAK-ORDER}{X} to NeList{X}, sort List{STRICT-WEAK-ORDER}{X} to List{X}) fmod WEAKLY-SORTABLE-LIST{[X]} fth X :: STRICT-TOTAL-ORDER fmod WEAKLY-SORTABLE-LIST{STRICT-TOTAL-ORDER} fmod LIST{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER} fmod LIST{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} fmod LIST{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeList{STRICT-TOTAL-ORDER}{X}, sort List{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to List{ STRICT-TOTAL-ORDER}{X}) fmod WEAKLY-SORTABLE-LIST{STRICT-TOTAL-ORDER}{[X]} fmod WEAKLY-SORTABLE-LIST{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-TOTAL-ORDER}{X} to NeList{X}, sort List{STRICT-TOTAL-ORDER}{X} to List{X}) fmod LIST{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeList{STRICT-TOTAL-ORDER}{X}, sort List{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to List{ STRICT-TOTAL-ORDER}{X}) * (sort NeList{STRICT-TOTAL-ORDER}{X} to NeList{X}, sort List{STRICT-TOTAL-ORDER}{X} to List{X}) fmod SORTABLE-LIST{[X]} fth X :: TOTAL-PREORDER fmod LIST{TOTAL-PREORDER} fmod LIST{TOTAL-PREORDER}{[X]} fmod LIST{TOTAL-PREORDER}{[X]} * (sort NeList{TOTAL-PREORDER}{X} to NeList{X}, sort List{TOTAL-PREORDER}{X} to List{X}) fmod WEAKLY-SORTABLE-LIST'{[X]} fth X :: TOTAL-ORDER fmod WEAKLY-SORTABLE-LIST'{TOTAL-ORDER} fmod LIST{TOTAL-PREORDER}{TOTAL-ORDER} fmod LIST{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} fmod LIST{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeList{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to NeList{TOTAL-ORDER}{X}, sort List{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to List{TOTAL-ORDER}{X}) fmod WEAKLY-SORTABLE-LIST'{TOTAL-ORDER}{[X]} fmod WEAKLY-SORTABLE-LIST'{TOTAL-ORDER}{[X]} * (sort NeList{TOTAL-ORDER}{X} to NeList{X}, sort List{TOTAL-ORDER}{X} to List{X}) fmod LIST{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeList{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to NeList{TOTAL-ORDER}{X}, sort List{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to List{TOTAL-ORDER}{X}) * (sort NeList{TOTAL-ORDER}{X} to NeList{X}, sort List{TOTAL-ORDER}{X} to List{X}) fmod SORTABLE-LIST'{[X]} fmod SET{[X]} fmod LIST-AND-SET{STRICT-WEAK-ORDER} fmod SET{STRICT-WEAK-ORDER} fmod SET{STRICT-WEAK-ORDER}{[X]} fmod LIST-AND-SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER} fmod SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER} fmod SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} fmod LIST-AND-SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} fmod LIST-AND-SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeList{STRICT-TOTAL-ORDER}{X}, sort List{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to List{ STRICT-TOTAL-ORDER}{X}) fmod LIST-AND-SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeList{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeList{STRICT-TOTAL-ORDER}{X}, sort List{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to List{ STRICT-TOTAL-ORDER}{X}) * (sort NeList{STRICT-TOTAL-ORDER}{X} to NeList{X}, sort List{STRICT-TOTAL-ORDER}{X} to List{X}, sort NeSet{STRICT-WEAK-ORDER}{ STRICT-TOTAL-ORDER}{X} to NeSet{X}, sort Set{STRICT-WEAK-ORDER}{ STRICT-TOTAL-ORDER}{X} to Set{X}) fmod SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{[X]} * (sort NeSet{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeSet{X}, sort Set{ STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to Set{X}) fmod LIST-AND-SET{TOTAL-PREORDER} fmod SET{TOTAL-PREORDER} fmod SET{TOTAL-PREORDER}{[X]} fmod LIST-AND-SET{TOTAL-PREORDER}{TOTAL-ORDER} fmod SET{TOTAL-PREORDER}{TOTAL-ORDER} fmod SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} fmod LIST-AND-SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} fmod LIST-AND-SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeList{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to NeList{TOTAL-ORDER}{X}, sort List{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to List{TOTAL-ORDER}{X}) fmod LIST-AND-SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeList{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to NeList{TOTAL-ORDER}{X}, sort List{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to List{TOTAL-ORDER}{X}) * (sort NeList{ TOTAL-ORDER}{X} to NeList{X}, sort List{TOTAL-ORDER}{X} to List{X}, sort NeSet{TOTAL-PREORDER}{TOTAL-ORDER}{X} to NeSet{X}, sort Set{ TOTAL-PREORDER}{TOTAL-ORDER}{X} to Set{X}) fmod SET{TOTAL-PREORDER}{TOTAL-ORDER}{[X]} * (sort NeSet{TOTAL-PREORDER}{ TOTAL-ORDER}{X} to NeSet{X}, sort Set{TOTAL-PREORDER}{TOTAL-ORDER}{X} to Set{X}) fmod LIST*{[X]} fmod SET*{[X]} fth Y :: TRIV fmod MAP{[X], [Y]} fth Y :: DEFAULT fmod ARRAY{[X], [Y]} fmod LIST{Nat} fmod LIST{Nat} * (sort NeList{Nat} to NeNatList, sort List{Nat} to NatList) fmod LIST{Qid} fmod LIST{Qid} * (sort NeList{Qid} to NeQidList, sort List{Qid} to QidList) fmod SET{Qid} fmod SET{Qid} * (sort NeSet{Qid} to NeQidSet, sort Set{Qid} to QidSet) fmod QID-SET * (op _`,_ to _;_ [prec 43], op empty to none) fmod SET{Qid} * (sort NeSet{Qid} to NeQidSet, sort Set{Qid} to QidSet) * (op _`,_ to _;_ [prec 43], op empty to none) fmod ONE * (sort Foo to Baz) fmod TWO * (sort Baz to Baz', sort Quux to Quux') fmod ONE * (sort Foo to Baz) * (sort Baz to Baz') fmod FOO * (sort Foo to Baz, op a to b) fmod FOO' * (sort Foo to Quux, op _+_ : [Baz] [Baz] -> [Foo,Bar] to _._ [prec 27 gather (E e)], op _+_ : [Foo,Bar] [Foo,Bar] -> [Foo,Bar] to _*_ [prec 29 gather (E e)]) fmod FOO' * (sort Foo to Quux, op _+_ to _*_ [prec 29 gather (E E)]) fmod BASH * (op f : [Foo,Bar] -> [Foo,Bar] to g) fmod DIFF * (op f : [Bar] -> [Bar] to g, op f : [Foo] -> [Foo] to g) Bye. maude-3.1/tests/Misc/Makefile.in0000644000175200017520000010571113741175703013514 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = tests/Misc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_have_poll.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/mkinstalldirs \ $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ BUDDY_LIB = @BUDDY_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CVC4_LIB = @CVC4_LIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FLEX = @FLEX@ GCC_LIBS = @GCC_LIBS@ GMP_LIBS = @GMP_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSIGSEGV_LIB = @LIBSIGSEGV_LIB@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TECLA_LIBS = @TECLA_LIBS@ VERSION = @VERSION@ YICES2_LIB = @YICES2_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ TESTS = \ view \ parameterizedView \ mapToParameterTheory \ badView \ dekker \ commands \ debug \ renaming \ dataStructures \ parameterization \ unification \ unification2 \ unification3 \ attributes \ diophantine \ variantUnification \ filteredVariantUnification \ variantNarrowing \ meseguerFiniteVariant \ variantMatching \ CU_Unification \ assocUnification \ AU_Unification \ sreduce \ smtTest \ narrow \ continue \ parse \ bubble \ rot13 MAUDE_FILES = \ view.maude \ parameterizedView.maude \ mapToParameterTheory.maude \ badView.maude \ dekker.maude \ commands.maude \ debug.maude \ renaming.maude \ dataStructures.maude \ parameterization.maude \ unification.maude \ unification2.maude \ unification3.maude \ attributes.maude \ diophantine.maude \ variantUnification.maude \ filteredVariantUnification.maude \ variantNarrowing.maude \ meseguerFiniteVariant.maude \ variantMatching.maude \ CU_Unification.maude \ assocUnification.maude \ AU_Unification.maude \ sreduce.maude \ smtTest.maude \ narrow.maude \ continue.maude \ parse.maude \ bubble.maude \ rot13.maude RESULT_FILES = \ view.expected \ parameterizedView.expected \ mapToParameterTheory.expected \ badView.expected \ dekker.expected \ commands.expected \ debug.expected \ renaming.expected \ dataStructures.expected \ parameterization.expected \ unification.expected \ unification2.expected \ unification3.expected \ attributes.expected \ diophantine.expected \ variantUnification.expected \ filteredVariantUnification.expected \ variantNarrowing.expected \ meseguerFiniteVariant.expected \ variantMatching.expected \ CU_Unification.expected \ assocUnification.expected \ AU_Unification.expected \ sreduce.expected \ smtTest.expected \ narrow.expected \ continue.expected \ parse.expected \ bubble.expected \ rot13.expected EXTRA_DIST = $(TESTS) $(MAUDE_FILES) $(RESULT_FILES) all: all-am .SUFFIXES: .SUFFIXES: .log .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Misc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/Misc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? view.log: view @p='view'; \ b='view'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) parameterizedView.log: parameterizedView @p='parameterizedView'; \ b='parameterizedView'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) mapToParameterTheory.log: mapToParameterTheory @p='mapToParameterTheory'; \ b='mapToParameterTheory'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) badView.log: badView @p='badView'; \ b='badView'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) dekker.log: dekker @p='dekker'; \ b='dekker'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) commands.log: commands @p='commands'; \ b='commands'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) debug.log: debug @p='debug'; \ b='debug'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) renaming.log: renaming @p='renaming'; \ b='renaming'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) dataStructures.log: dataStructures @p='dataStructures'; \ b='dataStructures'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) parameterization.log: parameterization @p='parameterization'; \ b='parameterization'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) unification.log: unification @p='unification'; \ b='unification'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) unification2.log: unification2 @p='unification2'; \ b='unification2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) unification3.log: unification3 @p='unification3'; \ b='unification3'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) attributes.log: attributes @p='attributes'; \ b='attributes'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) diophantine.log: diophantine @p='diophantine'; \ b='diophantine'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) variantUnification.log: variantUnification @p='variantUnification'; \ b='variantUnification'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) filteredVariantUnification.log: filteredVariantUnification @p='filteredVariantUnification'; \ b='filteredVariantUnification'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) variantNarrowing.log: variantNarrowing @p='variantNarrowing'; \ b='variantNarrowing'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) meseguerFiniteVariant.log: meseguerFiniteVariant @p='meseguerFiniteVariant'; \ b='meseguerFiniteVariant'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) variantMatching.log: variantMatching @p='variantMatching'; \ b='variantMatching'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) CU_Unification.log: CU_Unification @p='CU_Unification'; \ b='CU_Unification'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) assocUnification.log: assocUnification @p='assocUnification'; \ b='assocUnification'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) AU_Unification.log: AU_Unification @p='AU_Unification'; \ b='AU_Unification'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) sreduce.log: sreduce @p='sreduce'; \ b='sreduce'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) smtTest.log: smtTest @p='smtTest'; \ b='smtTest'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) narrow.log: narrow @p='narrow'; \ b='narrow'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) continue.log: continue @p='continue'; \ b='continue'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) parse.log: parse @p='parse'; \ b='parse'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) bubble.log: bubble @p='bubble'; \ b='bubble'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) rot13.log: rot13 @p='rot13'; \ b='rot13'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: all all-am check check-TESTS check-am clean clean-generic \ cscopelist-am ctags-am distclean distclean-generic distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am recheck tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: maude-3.1/tests/Makefile.in0000644000175200017520000004332213741175703012620 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = tests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_have_poll.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/mkinstalldirs DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ BUDDY_LIB = @BUDDY_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CVC4_LIB = @CVC4_LIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FLEX = @FLEX@ GCC_LIBS = @GCC_LIBS@ GMP_LIBS = @GMP_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSIGSEGV_LIB = @LIBSIGSEGV_LIB@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TECLA_LIBS = @TECLA_LIBS@ VERSION = @VERSION@ YICES2_LIB = @YICES2_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = BuiltIn Misc Meta ResolvedBugs StrategyLanguage all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic cscopelist-am ctags ctags-am \ distclean distclean-generic distclean-tags distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: maude-3.1/Makefile.am0000644000175200017520000000002410025445521011423 00000000000000SUBDIRS = src tests maude-3.1/config.h.in0000644000175200017520000000676213741176161011442 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* annotate comiler output */ #undef ANNOTATED /* build the experimental integrated compiler */ #undef COMPILER /* enable Darwin specific fixes */ #undef DARWIN /* include dump code */ #undef DUMP /* have conditional move instruction */ #undef HAVE_CMOV /* Define to 1 if you have the header file. */ #undef HAVE_CTYPE_H /* Define to 1 if you have the header file. */ #undef HAVE_IEEEFP_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `rt' library (-lrt). */ #undef HAVE_LIBRT /* Define to 1 if you have the `socket' library (-lsocket). */ #undef HAVE_LIBSOCKET /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if you have the header file. */ #undef HAVE_MATH_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_OSTREAM /* Define to 1 if you have the header file. */ #undef HAVE_OSTREAM_H /* use ppoll() */ #undef HAVE_PPOLL /* Define to 1 if you have the header file. */ #undef HAVE_STDDEF_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDIO_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TERMIOS_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* inline and discard selected local functions */ #undef LOCAL_INLINES /* support MOS oracles */ #undef MOS /* don't do runtime checks */ #undef NO_ASSERT /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* The size of `int', as computed by sizeof. */ #undef SIZEOF_INT /* The size of `long', as computed by sizeof. */ #undef SIZEOF_LONG /* The size of `short', as computed by sizeof. */ #undef SIZEOF_SHORT /* The size of `unsigned long', as computed by sizeof. */ #undef SIZEOF_UNSIGNED_LONG /* The size of `void *', as computed by sizeof. */ #undef SIZEOF_VOID_P /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* use CVC4 SMT solver library */ #undef USE_CVC4 /* use libsigsegv to handle segmentation faults */ #undef USE_LIBSIGSEGV /* use Tecla command line editing library */ #undef USE_TECLA /* use Yices2 SMT solver library */ #undef USE_YICES2 /* Version number of package */ #undef VERSION maude-3.1/depcomp0000755000175200017520000002753307704647737011011 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects # Copyright 1999, 2000 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # `libtool' can also be set to `yes' or `no'. if test -z "$depfile"; then base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'` dir=`echo "$object" | sed 's,/.*$,/,'` if test "$dir" = "$object"; then dir= fi # FIXME: should be _deps on DOS. depfile="$dir.deps/$base" fi tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. This file always lives in the current directory. # Also, the AIX compiler puts `$object:' at the start of each line; # $object doesn't have directory information. stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" outname="$stripped.o" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1="$dir.libs/$base.lo.d" tmpdepfile2="$dir.libs/$base.d" "$@" -Wc,-MD else tmpdepfile1="$dir$base.o.d" tmpdepfile2="$dir$base.d" "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi if test -f "$tmpdepfile1"; then tmpdepfile="$tmpdepfile1" else tmpdepfile="$tmpdepfile2" fi if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a space and a tab in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the proprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. We will use -o /dev/null later, # however we can't do the remplacement now because # `-o $object' might simply not be used IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M "$@" -o /dev/null $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; -*) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the proprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the proprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 maude-3.1/missing0000755000175200017520000002403607704647736011025 00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. # Copyright (C) 1996, 1997, 1999, 2000, 2002 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch]" ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing 0.4 - GNU automake" ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; aclocal*) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is needed, and you do not seem to have it handy on your system. You might have modified some files without having the proper tools for further handling them. You can get \`$1Help2man' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then # We have makeinfo, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` fi touch $file ;; tar) shift if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 fi # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and you do not seem to have it handy on your system. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequirements for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 maude-3.1/config.sub0000755000175200017520000007167407704647736011423 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002 Free Software Foundation, Inc. timestamp='2002-09-05' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit 0;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | freebsd*-gnu* | storm-chaos* | os2-emx* | windows32-* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k \ | m32r | m68000 | m68k | m88k | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mipsisa32 | mipsisa32el \ | mipsisa64 | mipsisa64el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | ns16k | ns32k \ | openrisc | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | sh | sh[1234] | sh3e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \ | strongarm \ | tahoe | thumb | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xscale | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* \ | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* \ | clipper-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* \ | m32r-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39 | mipstx39el \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh3e-* | sh[34]eb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* | tic30-* | tic4x-* | tic54x-* | tic80-* | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; crds | unos) basic_machine=m68k-crds ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; mmix*) basic_machine=mmix-knuth os=-mmixware ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; or32 | or32-*) basic_machine=or32-unknown os=-coff ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2) basic_machine=i686-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3d) basic_machine=alpha-cray os=-unicos ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic4x | c4x*) basic_machine=tic4x-unknown os=-coff ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; windows32) basic_machine=i386-pc os=-windows32-msvcrt ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh3 | sh4 | sh3eb | sh4eb | sh[1234]le | sh3ele) basic_machine=sh-unknown ;; sh64) basic_machine=sh64-unknown ;; sparc | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* | -powermax*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto*) os=-nto-qnx ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -ptx*) vendor=sequent ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: maude-3.1/src/0000755000175200017520000000000013741222371010246 500000000000000maude-3.1/src/Main/0000755000175200017520000000000013741222371011132 500000000000000maude-3.1/src/Main/ChangeLog0000755000175200017520000006466013734515503012647 000000000000002020-09-28 Steven Eker * main.cc (printHelp): fix alignment of -allow-processes ===================================Maude131=========================================== 2020-09-16 Steven Eker * metaInterpreter.maude: getNarrowingSearchResult() and getNarrowingSearchResultAndPath() now take VariantOptionSet arguments, with a backward compatibility declarations and equations * prelude.maude: metaNarrowingApply() now takes VariantOptionSet argument, with a backward compatibility declaration and equation; metaNarrowingSearch() and metaNarrowingSearchPath() now take VariantOptionSet arguments, with a backward compatibility declarations and equations 2020-09-15 Steven Eker * metaInterpreter.maude: getOneStepNarrowing() now takes a VariantOptionSet argument, with a backward compatibility declaration and equation ===================================Maude130=========================================== 2020-09-08 Steven Eker * metaInterpreter.maude: added getVariantMatcher()/gotVariantMatcher() messages 2020-09-03 Steven Eker * prelude.maude: added matching problem ctors, noMatchIncomplete, metaVariantMatch() 2020-09-02 Steven Eker * metaInterpreter.maude: getVariantUnifier() and getDisjointVariantUnifier() now take VariantOptionSet as their 7th argument; added declarations and equations for backwards compatibility 2020-08-31 Steven Eker * prelude.maude: added backward compatibility declarations and equations for metaVariantUnify(), metaVariantDisjointUnify(); added signature for variant options; updated decls for metaVariantUnify(), metaVariantDisjointUnify() to take VariantOptionSet argument 2020-07-14 Steven Eker * metaInterpreter.maude: added getIrredundantUnifier(), gotIrredundantUnifier(), getIrredundantDisjointUnifier(), gotIrredundantDisjointUnifier() * prelude.maude: added metaIrredundantUnify(), metaIrredundantDisjointUnify() ===================================Maude129=========================================== 2020-07-09 Steven Eker * main.cc (main): -no-execute becomes -allow-processes (main): added flags -allow-files, -trust (printHelp): updated with new flags 2020-06-04 Steven Eker * main.cc (printHelp): fix tabbing on -no-execute 2020-05-19 Steven Eker * main.cc (printHelp): -get-pid -> -show-pid 2020-04-24 Steven Eker * process.maude: added sort ExitStatus, ops normalExit, terminatedBySignal; use ExitStatus for exited message; don't protect INT, don't have hook for minusSymbol * main.cc (main): added -no-execute flag (printHelp): added -no-execute flag 2020-04-22 Steven Eker * process.maude: added op-hook for minusSymbol; protecting INT 2020-04-16 Steven Eker * process.maude: added signaledProcess() and waitForExit() messages 2020-03-30 Steven Eker * process.maude: added sorts ProcessOption, ProcessOptionSet; createProcess now takes ProcessOptionSet rather than 2nd StringList for environment; added none 2020-03-26 Steven Eker * process.maude: added fmod STRING-LIST; use STRING-LIST in PROCESS; added nilStringListSymbol and stringListSymbol hooks 2020-03-24 Steven Eker * process.maude: added hook for socketManagerSymbol 2020-03-19 Steven Eker * process.maude: updated to reflect move to sockets for communication 2020-03-18 Steven Eker * process.maude: created 2020-03-10 Rubén Rubio * prelude.maude: changed sort of the strategy all to RuleApplication ===================================Maude128a=========================================== 2020-02-28 Steven Eker * prelude.maude: added projection functions for UnificationTriple, Variant and TraceStep 2020-02-27 Steven Eker * prelude.maude: added projection functions for UnificationPair; added applySubstitution() ===================================Maude128=========================================== 2019-11-22 Steven Eker * prelude.maude: revert to Qid < Header pending further discussion of the metasyntax ===================================Maude126=========================================== 2019-11-21 Steven Eker * main.cc (printHelp): added -erewrite-loop-mode (main): handle -erewrite-loop-mode 2019-11-14 Rubén Rubio * prelude.maude: metaSrewrite takes a SrewriteOption and metaDsrewrite is removed. metaParseStrategy and and metaPrettyPrintStrategy receive a VariableSet. 2019-11-12 Rubén Rubio * prelude.maude: renaming from VarStratPair to UsingPair, VarStratList to UsingPairSet (and added equation), BasicStrategy to RuleApplication, _(_) to _[[_]], metaSRewrite to metaSrewrite, metaDSRewrite to metaDsrewrite, metaStratParse to metaParseStrategy, and metaStratPrettyPrint to metaPrettyPrintStrategy. Added precedence 21 to rule application symbol. Changed equation for [_] : Qid -> Module operator to support strategy modules. Added upStratDecls and upSds. 2019-11-11 Steven Eker * metaInterpreter.maude: parsedQidList()/parsedQidList() -> parseTerm()/parsedTerm() 2019-11-08 Steven Eker * metaInterpreter.maude: printTerm()/parseQidList() now take VariableSet arg for variables that can be abbreviated 2019-11-06 Steven Eker * prelude.maude: added sort SrewriteOption and ops breadthFirst, depthFirst * metaInterpreter.maude: srewriteTerm now takes an SrewriteOption argument 2019-11-05 Steven Eker * metaInterpreter.maude: added decls for srewriteTerm/srewroteTerm 2019-11-04 Steven Eker * prelude.maude: metaPrettyPrint() now takes 4 arguments; added backward compatibility version 2019-11-01 Steven Eker * prelude.maude: changed emptyQidSetSymbol from empty to none; fixed qidSetSymbol hook symbol and range 2019-10-31 Steven Eker * prelude.maude: rearrange subsort declarations to avoid a redundant NeQidSet < QidSet 2019-10-30 Steven Eker * prelude.maude: EmptyTypeSet -> EmptyQidSet Added decls for variable sets 2019-10-18 Steven Eker * prelude.maude: get rid of unificationPairSymbol hook; we're going to merge the operator with matchPairSymbol because they are subsort overloaded; fix new unificaton pair op so that Qid is second argument; add sort MatchOrUnificationPair and subsort MatchPair UnificationPair < MatchOrUnificationPair 2019-10-17 Steven Eker * prelude.maude: use legacyMetaUnify, legacyMetaDisjointUnify for deprecated versions 2019-10-16 Steven Eker * prelude.maude: added op-hooks legacyUnificationPairSymbol, legacyUnificationTripleSymbol, legacyVariantSymbol 2019-10-15 Steven Eker * prelude.maude: new variable family based ctors for UnificationPair, UnificationTriple, Variant and descent functions metaUnify(), metaDisjointUnify(), metaGetVariant(), metaGetIrredundantVariant(), metaVariantUnify(), metaVariantDisjointUnify() ===================================Maude125=========================================== 2019-10-10 Rubén Rubio * prelude.maude: conditions of tests and matchrews are now EqCondition instead of Condition. Added a new parameter to metaStratParse. to-expr changed to to expr (without hyphen). 2019-09-19 Rubén Rubio * prelude.maude: getStratDefs renamed to getSds, make matchrew's using pair list associative and commutative 2019-05-24 Steven Eker * prelude.maude: revert to renaming after instantiating after parameter for WEAKLY-SORTABLE-LIST, SORTABLE-LIST WEAKLY-SORTABLE-LIST', SORTABLE-LIST', SORTABLE-LIST-AND-SET, SORTABLE-LIST-AND-SET' 2019-04-11 Steven Eker * prelude.maude: added parameterized views: List, WeaklySortableList, SortableList, WeaklySortableList', SortableList', Set, List*, Set*, Map, Array 2019-03-28 Steven Eker * prelude.maude: rename before instantiating by parameter in fmod WEAKLY-SORTABLE-LIST, fmod SORTABLE-LIST, fmod WEAKLY-SORTABLE-LIST', fmod SORTABLE-LIST', fmod SORTABLE-LIST-AND-SET, fmod SORTABLE-LIST-AND-SET' 2019-02-15 Steven Eker * prelude.maude: reorganized view and module expressions to fix pre-regularity issues deleted viewInstantiationSymbol require NeParameterList for view and module instantiations 2019-02-14 Steven Eker * prelude.maude: added sort ViewExpression and operator _{_} : ViewExpression ParameterList -> ViewExpression handle view with parameter decl lists in getName() projection function ===================================Maude121=========================================== 2018-20-12 Rubén Rubio * prelude.maude: added 'all' strategy to META-STRATEGY, and metaStratParse, metaStratPrettyPrint, and metaDSRewrite to META-LEVEL. metaSRewrite signature has changed to match similar functions. Now, it receives a solution index instead of returning a set. Removed sort ResultSet. 2018-12-05 Steven Eker * metaInterpreter.maude: added getNarrowingSearchResult/gotNarrowingSearchResult, getNarrowingSearchResultAndPath/gotNarrowingSearchResultAndPath 2018-11-29 Steven Eker * metaInterpreter.maude: getOneStepNarrow/gotOneStepNarrow -> getOneStepNarrowing/gotOneStepNarrowing 2018-11-28 Steven Eker * metaInterpreter.maude: changed narrowWithRule/narrowedWithRule to getOneStepNarrow/gotOneStepNarrow since we're not passing the label of a specific rule 2018-11-27 Steven Eker * metaInterpreter.maude: added narrowWithRule, narrowedWithRule 2018-11-13 Steven Eker * metaInterpreter.maude: make interpreter a ctor 2018-11-02 Steven Eker * metaInterpreter.maude: added applyRule/appliedRule (2 overloaded versions) ===================================Maude120=========================================== 2018-10-22 Steven Eker * metaInterpreter.maude: added parseQidList/parsedQidList 2018-10-16 Steven Eker * metaInterpreter.maude: added printTerm/printedTerm 2018-10-12 Steven Eker * metaInterpreter.maude: added gotVariantUnifier, gotDisjointVariantUnifier 2018-10-11 Steven Eker * metaInterpreter.maude: added getDisjointVariantUnifier, getVariantUnifier 2018-10-03 Steven Eker * metaInterpreter.maude: added RewriteCount to gotVariant 2018-09-28 Steven Eker * metaInterpreter.maude: added getVariant/gotVariant, noSuchResult (4 arg version) 2018-09-25 Steven Eker * metaInterpreter.maude: added getUnifier/gotUnifier, getDisjointUnifier/gotDisjointUnifier, noSuchResult (Bool version) 2018-09-17 Steven Eker * metaInterpreter.maude: added normlizeTerm/normalizedTerm 2018-09-14 Steven Eker * metaInterpreter.maude: added getMaximalAritySet/gotMaximalAritySet ===================================Maude119=========================================== 2018-08-17 Steven Eker * metaInterpreter.maude: added getKind/gotKind, getKinds/gotKinds added getGlbTypes/gotGlbTypes 2018-08-16 Steven Eker * metaInterpreter.maude: added compareTypes/comparedTypes deleted op-hook succSymbol 2018-08-14 Steven Eker * metaInterpreter.maude: added getLesserSorts/gotLesserSorts, getMaximalSorts/gotMaximalSorts, getMinimalSorts/gotMinimalSorts 2018-08-13 Steven Eker * prelude.maude: added upperCase(), lowerCase() 2018-08-09 Steven Eker * metaInterpreter.maude: added sorts InterpreterOption InterpreterOptionSet, and constant none; createInterpreter() now takes InterpreterOptionSet argument 2018-08-07 Steven Eker * metaInterpreter.maude: added getXmatch/gotXmatch 2018-08-06 Steven Eker * metaInterpreter.maude: added getMatch/gotMatch 2018-08-02 Steven Eker * metaInterpreter.maude: added getSearchResultAndPathMsg, gotSearchResultAndPathMsg 2018-07-31 Steven Eker * metaInterpreter.maude: updated decl for gotSearchResult() 2018-07-30 Steven Eker * main.cc (printHelp): add -show-pid (main): add -show-pid 2018-07-20 Steven Eker * metaInterpreter.maude: added getSearchResult() and gotSearchResult() messages added noSuchResultMsg() message 2018-07-19 Steven Eker * metaInterpreter.maude: use Type rather than Sort for return messages ===================================Maude118=========================================== 2018-05-30 Steven Eker * metaInterpreter.maude: added messages erewriteTerm() and erewroteTerm() 2018-05-18 Steven Eker * metaInterpreter.maude: added messages showView() and showingView() 2018-05-16 Steven Eker * metaInterpreter.maude: added messages insertView() and insertedView() ===================================Maude117=========================================== 2018-04-29 Rubén Rubio * prelude.maude: added strategy renamings for module expressions and strategy mappings to metaviews. Changed -> to ~> in metaSRewrite 2018-04-10 Rubén Rubio * prelude.maude: added 'one' strategy to META-STRATEGY 2018-03-23 Rubén Rubio * prelude.maude: added fmod META-STRATEGY, moved metaconditions to META-CONDITION. Added strategy modules syntax and hooks, and metaSRewrite operator to META-LEVEL. 2018-03-16 Steven Eker * Makefile.am (maude_LDADD): remove refs to MSCP10 2017-12-06 Steven Eker * main.cc (main): call setUsePromptsAnyway() in forceInteractive case ===================================Maude116=========================================== 2017-08-08 Steven Eker * prelude.maude: fmod LEXICAL: print -> printTokens to avoid confusion with print attribute in META-LEVEL 2017-08-04 Steven Eker * prelude.maude: added fmod LEXICAL 2017-08-01 Steven Eker * main.cc (main): call setUsePromptsAnyway() if our input is from a terminal * file.maude: deleted stdin, stdout, stderr from mod FILE 2017-07-28 Steven Eker * file.maude: don't use BOUND, added mod COMMON-MESSAGES added mod STD-STREAM 2017-07-26 Steven Eker * file.maude: added op-hooks for stdin, stdout, stderr 2017-07-25 Steven Eker * file.maude: added op-hooks for start, current, end, minusSymbol 2017-07-19 Steven Eker * file.maude: created 2017-07-17 Steven Eker * prelude.maude: added fmod BOUND; use it in fmod META-LEVEL ===================================Maude115=========================================== 2017-06-27 Steven Eker * smt.maude: removed comment about _divisible_ breaking CVC4 now we've made it bulletproof 2017-06-23 Steven Eker * Makefile.am (maude_LDADD): move $(YICES2_LIB) before tecla in the hope that tecla won't be able to access its symbols 2017-06-22 Steven Eker * Makefile.am (maude_LDADD): delete $(DLMALLOC_LIB) form link line; move $(YICES2_LIB) to the end 2017-06-20 Steven Eker * Makefile.am (maude_LDADD): added YICE2_LIB ===================================Maude114=========================================== 2017-05-25 Steven Eker * prelude.maude: update syntax for metaNarrowingApply() return values; reverted to {} for results; updated formatting; added projection functions for new constructors 2017-05-24 Steven Eker * prelude.maude: updated format attribute for assignment, and narrowing results 2017-05-22 Steven Eker * prelude.maude: added 6 operators and 4 sorts to support narrowing search path results; added metaNarrowingSearchPath() descent function 2017-05-19 Steven Eker * prelude.maude: updated decl for metaNarrowingSearch(), NarrowingSearchResult ctor 2017-05-02 Steven Eker * prelude.maude: remove the 1st Qid argument from metaNarrowingApply() 2017-04-26 Steven Eker * prelude.maude: added narrowing attribute to META-LEVEL ===================================Maude113=========================================== 2017-03-14 Steven Eker * prelude.maude: changed order of parameters in NarrowingSearchResult ctor to avoid ambiguity 2017-03-10 Steven Eker * prelude.maude: added projection functions for NarrowingSearchResult 2017-02-06 Steven Eker * prelude.maude: revert to NarrowingSearchResult, but this time use a 5 tuple to avoid a kind clash 2017-02-03 Steven Eker * prelude.maude: added sorts NarrowingSearchResult, NarrowingSearchResult?; ctors {_,_,_,_}, failure, failureIncomplete, descent function metaNarrowingSearch() Use Result4Tuple in place of NarrowingSearchResult ===================================Maude111b=========================================== 2016-12-13 Steven Eker * prelude.maude: added projection functions for NarrowingResult 2016-12-12 Steven Eker * prelude.maude: added failureIncomplete for ResultTriple? 2016-12-09 Steven Eker * prelude.maude: switched args for NarrowingResult ctor added format for {_,_,_,_,_,_} 2016-11-23 Steven Eker * prelude.maude: added decls for metaNarrowingApply(); sorts NarrowingResult and NarrowingResult?, ctors failure, failureIncomplete and {_,_,_,_,_,_} 2016-10-28 Steven Eker * smt.maude: don't set include BOOLEAN on because it causes problems for modules that aren't expecting it. ===================================Maude111=========================================== 2016-04-27 Steven Eker * main.cc (main): added -print-to-stderr flag (printHelp): fix format in -always-advise line ===================================Maude110=========================================== 2016-01-29 Steven Eker * prelude.maude: update variant ctor; added Parent sort with none ctor ===================================Maude109=========================================== 2015-12-23 Steven Eker * main.cc (main): add a tie between cout and cerr so streams don't get out of sync on orion ===================================Maude108a=========================================== 2015-08-14 Steven Eker * prelude.maude: added constant noVariantIncomplete 2015-07-23 Steven Eker * prelude.maude: added two constants noUnifierIncomplete ===================================Maude108=========================================== 2014-10-28 Steven Eker * prelude.maude: updated decls for metaSmtSearch() and SmtResult ctor ===================================Maude105=========================================== 2014-09-22 Steven Eker * prelude.maude: added syntax for metaSmtSearch and its constructors 2014-08-15 Steven Eker * smt.maude: updated =/== and === hook syntax; commented out divisible breaks of CVC4 breakage 2014-08-14 Steven Eker * smt.maude: don't include BOOL; include BOOLEAN; use === and =/== in place of = and !=; use true and false in place of tt and ff ===================================Maude104=========================================== 2014-05-20 Steven Eker * prelude.maude: added metaCheck() 2014-05-01 Steven Eker * smt.maude: added modules INTEGER, REAL and REAL-INTEGER 2014-04-22 Steven Eker * Makefile.am (maude_LDADD): link in CVC4_LIB ===================================Maude103=========================================== 2014-03-03 Steven Eker * prelude.maude: added metaGetIrredundantVariant() 2014-02-26 Steven Eker * main.cc (main): added -always-advise (printHelp): added -always-advise ===================================Maude101=========================================== 2014-02-07 Steven Eker * main.cc (main): removed commented out code 2014-02-06 Steven Eker * prelude.maude: version number = 2.7 2014-01-31 Steven Eker * Makefile.am: moved mention of dlmalloc ===================================Maude100a=========================================== 2012-07-30 Steven Eker * prelude.maude: updated declarations for metaVariantUnify() and metaVariantDisjointUnify() 2012-07-20 Steven Eker * prelude.maude: metaGenerateVariant() replaced by metaGetVariant(); Term and Substitution arguments switched in meta variant ctor; added hood for emptyTermListSymbol ===================================Maude96a=========================================== 2012-05-03 Steven Eker * prelude.maude: added meta representation of variant attribute 2012-03-28 Steven Eker * prelude.maude: fix arity for metaGenerateVariant() 2012-03-08 Steven Eker * prelude.maude: added variant narrowing syntax and descent functions ===================================Maude96=========================================== 2010-07-13 Steven Eker * metaInterpreter.maude: added insertView/insertedView and showView/showingView ===================================Maude94a=========================================== 2010-05-18 Steven Eker * prelude.maude: split of Boolean operations into BOOL-OPS ===================================Maude93d2=========================================== 2010-05-05 Steven Eker * prelude.maude: added projection functions for meta-views 2009-08-11 Steven Eker * prelude.maude: op mappings don't take AttrSets 2009-08-07 Steven Eker * prelude.maude: added upView() 2009-08-06 Steven Eker * prelude.maude: added fmod META-VIEW 2009-08-05 Steven Eker * metaIntepreter.maude: added showModule/showingModule messages 2008-12-22 Steven Eker * prelude.maude: added TermQid to fix lub problem - Variable and Constant had multiple minimal upper bounds ===================================Maude92=========================================== 2008-08-26 Steven Eker * prelude.maude: added operator for print attribute 2008-01-22 Steven Eker * prelude.maude: added Bool arg to the XG specific version of metaNarrow ===================================Maude90=========================================== 2007-12-04 Steven Eker * prelude.maude: added a failure operator for ResultPair? added 5 arg version of metaNarrow 2007-11-19 Steven Eker * prelude.maude: metaXunify()/metaDisjointXunify() deleted; metaNarrow() added ===================================Maude89h=========================================== 2007-06-27 Steven Eker * prelude.maude: added metaXunify(), metaDisjointXunify() and associated declarations 2007-06-19 Steven Eker * prelude.maude: add UnificationProblem constructors; use for metaUnify() and metaDisjointUnify() 2007-06-14 Steven Eker * prelude.maude: added UnificationPair and ctors; updated decl for metaUnify() 2007-06-07 Steven Eker * prelude.maude: added UnificationTriple and ctors ===================================Maude89c=========================================== 2007-03-14 Steven Eker * main.cc (main): call checkForPending() if the -no-prelude flag given since we won't hit a top level EOF to check for them otherwise; this fixes a bug where we were ignoring command line files if -no-prelude flag given 2007-01-17 Steven Eker * prelude.maude: moved set include BOOL on to after last module; added syntax for metaUnify() ===================================Maude88d=========================================== 2006-11-20 Steven Eker * prelude.maude: rm getHeader() since this doesn't make sense with theories 2006-11-16 Steven Eker * prelude.maude: added getHeader() and redefined getName(); modified other projection functions so that they work with parameterized modules 2006-11-14 Steven Eker * prelude.maude: added min() and max() for Float ===================================Maude88c=========================================== 2006-11-13 Steven Eker * model-checker.maude: change protecting to including for SATISFACTION and LTL in MODEL-CHECKER 2006-11-07 Steven Eker * model-checker.maude: many minor changes recommended by Jose 2006-10-20 Steven Eker * model-checker.maude: changed importation modes 2006-10-19 Steven Eker * socket.maude: minor clean up * machine-int.maude: minor clean up * linear.maude: minor clean up * model-checker.maude: changed some importation modes * prelude.maude: added protecting BOOL to a number of modules; use set include BOOL on/off ===================================Maude88b=========================================== 2006-10-06 Steven Eker * main.cc: moved here and cleaned up ===================================Maude88a=========================================== maude-3.1/src/Main/smt.maude0000644000175200017520000001136413741217777012715 00000000000000***( This file is part of the Maude 3 interpreter. Copyright 1997-2014 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ) *** *** SMT bindings. *** Version 3.0. *** set include BOOL off . set include BOOLEAN off . fmod BOOLEAN is sort Boolean . op true : -> Boolean [special (id-hook SMT_Symbol (true))] . op false : -> Boolean [special (id-hook SMT_Symbol (false))] . op not_ : Boolean -> Boolean [prec 53 special (id-hook SMT_Symbol (not))] . op _and_ : Boolean Boolean -> Boolean [gather (E e) prec 55 special (id-hook SMT_Symbol (and))] . op _xor_ : Boolean Boolean -> Boolean [gather (E e) prec 57 special (id-hook SMT_Symbol (xor))] . op _or_ : Boolean Boolean -> Boolean [gather (E e) prec 59 special (id-hook SMT_Symbol (or))] . op _implies_ : Boolean Boolean -> Boolean [gather (e E) prec 61 special (id-hook SMT_Symbol (implies))] . op _===_ : Boolean Boolean -> Boolean [gather (e E) prec 51 special (id-hook SMT_Symbol (===))] . op _=/==_ : Boolean Boolean -> Boolean [gather (e E) prec 51 special (id-hook SMT_Symbol (=/==))] . op _?_:_ : Boolean Boolean Boolean -> Boolean [gather (e e e) prec 71 special (id-hook SMT_Symbol (ite))] . endfm fmod INTEGER is protecting BOOLEAN . sort Integer . op : -> Integer [special (id-hook SMT_NumberSymbol (integers))] . op -_ : Integer -> Integer [special (id-hook SMT_Symbol (-))] . op _+_ : Integer Integer -> Integer [gather (E e) prec 33 special (id-hook SMT_Symbol (+))] . op _*_ : Integer Integer -> Integer [gather (E e) prec 31 special (id-hook SMT_Symbol (*))] . op _-_ : Integer Integer -> Integer [gather (E e) prec 33 special (id-hook SMT_Symbol (-))] . op _div_ : Integer Integer -> Integer [gather (E e) prec 31 special (id-hook SMT_Symbol (div))] . op _mod_ : Integer Integer -> Integer [gather (E e) prec 31 special (id-hook SMT_Symbol (mod))] . op _<_ : Integer Integer -> Boolean [prec 37 special (id-hook SMT_Symbol (<))] . op _<=_ : Integer Integer -> Boolean [prec 37 special (id-hook SMT_Symbol (<=))] . op _>_ : Integer Integer -> Boolean [prec 37 special (id-hook SMT_Symbol (>))] . op _>=_ : Integer Integer -> Boolean [prec 37 special (id-hook SMT_Symbol (>=))] . op _===_ : Integer Integer -> Boolean [gather (e E) prec 51 special (id-hook SMT_Symbol (===))] . op _=/==_ : Integer Integer -> Boolean [gather (e E) prec 51 special (id-hook SMT_Symbol (=/==))] . op _?_:_ : Boolean Integer Integer -> Integer [gather (e e e) prec 71 special (id-hook SMT_Symbol (ite))] . *** seems to break CVC4 op _divisible_ : Integer Integer -> Boolean [prec 51 special (id-hook SMT_Symbol (divisible))] . endfm fmod REAL is protecting BOOLEAN . sort Real . op : -> Real [special (id-hook SMT_NumberSymbol (reals))] . op -_ : Real -> Real [special (id-hook SMT_Symbol (-))] . op _+_ : Real Real -> Real [gather (E e) prec 33 special (id-hook SMT_Symbol (+))] . op _*_ : Real Real -> Real [gather (E e) prec 31 special (id-hook SMT_Symbol (*))] . op _-_ : Real Real -> Real [gather (E e) prec 33 special (id-hook SMT_Symbol (-))] . op _/_ : Real Real -> Real [gather (E e) prec 31 special (id-hook SMT_Symbol (/))] . op _<_ : Real Real -> Boolean [prec 37 special (id-hook SMT_Symbol (<))] . op _<=_ : Real Real -> Boolean [prec 37 special (id-hook SMT_Symbol (<=))] . op _>_ : Real Real -> Boolean [prec 37 special (id-hook SMT_Symbol (>))] . op _>=_ : Real Real -> Boolean [prec 37 special (id-hook SMT_Symbol (>=))] . op _===_ : Real Real -> Boolean [gather (e E) prec 51 special (id-hook SMT_Symbol (===))] . op _=/==_ : Real Real -> Boolean [gather (e E) prec 51 special (id-hook SMT_Symbol (=/==))] . op _?_:_ : Boolean Real Real -> Real [gather (e e e) prec 71 special (id-hook SMT_Symbol (ite))] . endfm fmod REAL-INTEGER is protecting INTEGER . protecting REAL . op toReal : Integer -> Real [special (id-hook SMT_Symbol (toReal))] . op toInteger : Real -> Integer [special (id-hook SMT_Symbol (toInteger))] . op isInteger : Real -> Boolean [special (id-hook SMT_Symbol (isInteger))] . endfm set include BOOLEAN on . maude-3.1/src/Main/linear.maude0000644000175200017520000000672413741217772013363 00000000000000***( This file is part of the Maude 3 interpreter. Copyright 1997-2006 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ) *** *** Maude Diophantine solver. *** Version 2.3. *** fmod VECTOR{X :: DEFAULT} is protecting (ARRAY * (sort Entry{X,Y} to Entry{Y}, sort Array{X,Y} to Vector{Y}) ){Nat, X} . endfm fmod INDEX-PAIR is protecting NAT . sort IndexPair . op _,_ : Nat Nat -> IndexPair [ctor] . endfm view IndexPair from TRIV to INDEX-PAIR is sort Elt to IndexPair . endv fmod MATRIX{X :: DEFAULT} is protecting (ARRAY * (sort Entry{X,Y} to Entry{Y}, sort Array{X,Y} to Matrix{Y}) ){IndexPair, X} . endfm fmod INT-VECTOR is protecting VECTOR{Int0} * (sort Entry{Int0} to IntVectorEntry, sort Vector{Int0} to IntVector, op empty to zeroVector) . endfm view IntVector from TRIV to INT-VECTOR is sort Elt to IntVector . endv fmod INT-MATRIX is protecting MATRIX{Int0} * (sort Entry{Int0} to IntMatrixEntry, sort Matrix{Int0} to IntMatrix, op empty to zeroMatrix) . endfm fmod DIOPHANTINE is protecting STRING . protecting INT-MATRIX . protecting SET{IntVector} * (sort NeSet{IntVector} to NeIntVectorSet, sort Set{IntVector} to IntVectorSet, op _,_ : Set{IntVector} Set{IntVector} -> Set{IntVector} to (_,_) [prec 121 format (d d ni d)]) . sort IntVectorSetPair . op [_|_] : IntVectorSet IntVectorSet -> IntVectorSetPair [format (d n++i n ni n-- d)] . op natSystemSolve : IntMatrix IntVector String -> IntVectorSetPair [special ( id-hook MatrixOpSymbol (natSystemSolve) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int) op-hook stringSymbol ( : ~> Char) op-hook emptyVectorSymbol (zeroVector : ~> IntVector) op-hook vectorEntrySymbol (_|->_ : Nat Int ~> IntVectorEntry) op-hook vectorSymbol (_;_ : IntVector IntVector ~> IntVector) op-hook emptyMatrixSymbol (zeroMatrix : ~> IntMatrix) op-hook matrixEntrySymbol (_|->_ : IndexPair Int ~> IntMatrixEntry) op-hook matrixSymbol (_;_ : IntMatrix IntMatrix ~> IntMatrix) op-hook indexPairSymbol (_,_ : Nat Nat ~> IndexPair) op-hook emptyVectorSetSymbol (empty : ~> IntVectorSet) op-hook vectorSetSymbol (_,_ : IntVectorSet IntVectorSet ~> IntVectorSet) op-hook vectorSetPairSymbol ([_|_] : IntVectorSet IntVectorSet ~> IntVectorSetPair))] . op natSystemSolve : IntMatrix IntVector -> IntVectorSetPair . eq natSystemSolve(M:IntMatrix, V:IntVector) = natSystemSolve(M:IntMatrix, V:IntVector, "") . endfm maude-3.1/src/Main/prelude.maude0000644000175200017520000035051013741217775013547 00000000000000***( This file is part of the Maude 3 interpreter. Copyright 1997-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ) *** *** Maude interpreter standard prelude. *** Version 3.1. *** *** Some of the overall structure is taken from the OBJ3 *** interpreter standard prelude. *** set include BOOL off . fmod TRUTH-VALUE is sort Bool . op true : -> Bool [ctor special (id-hook SystemTrue)] . op false : -> Bool [ctor special (id-hook SystemFalse)] . endfm fmod BOOL-OPS is protecting TRUTH-VALUE . op _and_ : Bool Bool -> Bool [assoc comm prec 55] . op _or_ : Bool Bool -> Bool [assoc comm prec 59] . op _xor_ : Bool Bool -> Bool [assoc comm prec 57] . op not_ : Bool -> Bool [prec 53] . op _implies_ : Bool Bool -> Bool [gather (e E) prec 61] . vars A B C : Bool . eq true and A = A . eq false and A = false . eq A and A = A . eq false xor A = A . eq A xor A = false . eq A and (B xor C) = A and B xor A and C . eq not A = A xor true . eq A or B = A and B xor A xor B . eq A implies B = not(A xor A and B) . endfm fmod TRUTH is protecting TRUTH-VALUE . op if_then_else_fi : Bool Universal Universal -> Universal [poly (2 3 0) special (id-hook BranchSymbol term-hook 1 (true) term-hook 2 (false))] . op _==_ : Universal Universal -> Bool [prec 51 poly (1 2) special (id-hook EqualitySymbol term-hook equalTerm (true) term-hook notEqualTerm (false))] . op _=/=_ : Universal Universal -> Bool [prec 51 poly (1 2) special (id-hook EqualitySymbol term-hook equalTerm (false) term-hook notEqualTerm (true))] . endfm fmod BOOL is protecting BOOL-OPS . protecting TRUTH . endfm fmod EXT-BOOL is protecting BOOL . op _and-then_ : Bool Bool -> Bool [strat (1 0) gather (e E) prec 55] . op _or-else_ : Bool Bool -> Bool [strat (1 0) gather (e E) prec 59] . var B : [Bool] . eq true and-then B = B . eq false and-then B = false . eq true or-else B = true . eq false or-else B = B . endfm *** *** Builtin data types. *** fmod NAT is protecting BOOL . sorts Zero NzNat Nat . subsort Zero NzNat < Nat . op 0 : -> Zero [ctor] . op s_ : Nat -> NzNat [ctor iter special (id-hook SuccSymbol term-hook zeroTerm (0))] . op _+_ : NzNat Nat -> NzNat [assoc comm prec 33 special (id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _+_ : Nat Nat -> Nat [ditto] . op sd : Nat Nat -> Nat [comm special (id-hook CUI_NumberOpSymbol (sd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : NzNat NzNat -> NzNat [assoc comm prec 31 special (id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _*_ : Nat Nat -> Nat [ditto] . op _quo_ : Nat NzNat -> Nat [prec 31 gather (E e) special (id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _rem_ : Nat NzNat -> Nat [prec 31 gather (E e) special (id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _^_ : Nat Nat -> Nat [prec 29 gather (E e) special (id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _^_ : NzNat Nat -> NzNat [ditto] . op modExp : Nat Nat NzNat ~> Nat [special (id-hook NumberOpSymbol (modExp) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : NzNat Nat -> NzNat [assoc comm special (id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat))] . op gcd : Nat Nat -> Nat [ditto] . op lcm : NzNat NzNat -> NzNat [assoc comm special (id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat))] . op lcm : Nat Nat -> Nat [ditto] . op min : NzNat NzNat -> NzNat [assoc comm special (id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat))] . op min : Nat Nat -> Nat [ditto] . op max : NzNat Nat -> NzNat [assoc comm special (id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat))] . op max : Nat Nat -> Nat [ditto] . op _xor_ : Nat Nat -> Nat [assoc comm prec 55 special (id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _&_ : Nat Nat -> Nat [assoc comm prec 53 special (id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _|_ : NzNat Nat -> NzNat [assoc comm prec 57 special (id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _|_ : Nat Nat -> Nat [ditto] . op _>>_ : Nat Nat -> Nat [prec 35 gather (E e) special (id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _<<_ : Nat Nat -> Nat [prec 35 gather (E e) special (id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _<_ : Nat Nat -> Bool [prec 37 special (id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Nat Nat -> Bool [prec 37 special (id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Nat Nat -> Bool [prec 37 special (id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Nat Nat -> Bool [prec 37 special (id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzNat Nat -> Bool [prec 51 special (id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook trueTerm (true) term-hook falseTerm (false))] . endfm fmod INT is protecting NAT . sorts NzInt Int . subsorts NzNat < NzInt Nat < Int . op -_ : NzNat -> NzInt [ctor special (id-hook MinusSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op -_ : NzInt -> NzInt [ditto] . op -_ : Int -> Int [ditto] . op _+_ : Int Int -> Int [assoc comm prec 33 special (id-hook ACU_NumberOpSymbol (+) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op _-_ : Int Int -> Int [prec 33 gather (E e) special (id-hook NumberOpSymbol (-) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op _*_ : NzInt NzInt -> NzInt [assoc comm prec 31 special (id-hook ACU_NumberOpSymbol (*) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op _*_ : Int Int -> Int [ditto] . op _quo_ : Int NzInt -> Int [prec 31 gather (E e) special (id-hook NumberOpSymbol (quo) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op _rem_ : Int NzInt -> Int [prec 31 gather (E e) special (id-hook NumberOpSymbol (rem) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op _^_ : Int Nat -> Int [prec 29 gather (E e) special (id-hook NumberOpSymbol (^) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op _^_ : NzInt Nat -> NzInt [ditto] . op abs : NzInt -> NzNat [special (id-hook NumberOpSymbol (abs) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op abs : Int -> Nat [ditto] . op gcd : NzInt Int -> NzNat [assoc comm special (id-hook ACU_NumberOpSymbol (gcd) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op gcd : Int Int -> Nat [ditto] . op lcm : NzInt NzInt -> NzNat [assoc comm special (id-hook ACU_NumberOpSymbol (lcm) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op lcm : Int Int -> Nat [ditto] . op min : NzInt NzInt -> NzInt [assoc comm special (id-hook ACU_NumberOpSymbol (min) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op min : Int Int -> Int [ditto] . op max : NzInt NzInt -> NzInt [assoc comm special (id-hook ACU_NumberOpSymbol (max) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op max : Int Int -> Int [ditto] . op max : NzNat Int -> NzNat [ditto] . op max : Nat Int -> Nat [ditto] . op ~_ : Int -> Int [special (id-hook NumberOpSymbol (~) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op _xor_ : Int Int -> Int [assoc comm prec 55 special (id-hook ACU_NumberOpSymbol (xor) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op _&_ : Nat Int -> Nat [assoc comm prec 53 special (id-hook ACU_NumberOpSymbol (&) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op _&_ : Int Int -> Int [ditto] . op _|_ : NzInt Int -> NzInt [assoc comm prec 57 special (id-hook ACU_NumberOpSymbol (|) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op _|_ : Int Int -> Int [ditto] . op _>>_ : Int Nat -> Int [prec 35 gather (E e) special (id-hook NumberOpSymbol (>>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op _<<_ : Int Nat -> Int [prec 35 gather (E e) special (id-hook NumberOpSymbol (<<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . op _<_ : Int Int -> Bool [prec 37 special (id-hook NumberOpSymbol (<) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Int Int -> Bool [prec 37 special (id-hook NumberOpSymbol (<=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Int Int -> Bool [prec 37 special (id-hook NumberOpSymbol (>) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Int Int -> Bool [prec 37 special (id-hook NumberOpSymbol (>=) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int) term-hook trueTerm (true) term-hook falseTerm (false))] . op _divides_ : NzInt Int -> Bool [prec 51 special (id-hook NumberOpSymbol (divides) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int) term-hook trueTerm (true) term-hook falseTerm (false))] . endfm fmod RAT is protecting INT . sorts PosRat NzRat Rat . subsorts NzInt < NzRat Int < Rat . subsorts NzNat < PosRat < NzRat . op _/_ : NzInt NzNat -> NzRat [ctor prec 31 gather (E e) special (id-hook DivisionSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int))] . var I J : NzInt . var N M : NzNat . var K : Int . var Z : Nat . var Q : NzRat . var R : Rat . op _/_ : NzNat NzNat -> PosRat [ctor ditto] . op _/_ : PosRat PosRat -> PosRat [ditto] . op _/_ : NzRat NzRat -> NzRat [ditto] . op _/_ : Rat NzRat -> Rat [ditto] . eq 0 / Q = 0 . eq I / - N = - I / N . eq (I / N) / (J / M) = (I * M) / (J * N) . eq (I / N) / J = I / (J * N) . eq I / (J / M) = (I * M) / J . op -_ : NzRat -> NzRat [ditto] . op -_ : Rat -> Rat [ditto] . eq - (I / N) = - I / N . op _+_ : PosRat PosRat -> PosRat [ditto] . op _+_ : PosRat Nat -> PosRat [ditto] . op _+_ : Rat Rat -> Rat [ditto] . eq I / N + J / M = (I * M + J * N) / (N * M) . eq I / N + K = (I + K * N) / N . op _-_ : Rat Rat -> Rat [ditto] . eq I / N - J / M = (I * M - J * N) / (N * M) . eq I / N - K = (I - K * N) / N . eq K - J / M = (K * M - J ) / M . op _*_ : PosRat PosRat -> PosRat [ditto] . op _*_ : NzRat NzRat -> NzRat [ditto] . op _*_ : Rat Rat -> Rat [ditto] . eq Q * 0 = 0 . eq (I / N) * (J / M) = (I * J) / (N * M). eq (I / N) * K = (I * K) / N . op _quo_ : PosRat PosRat -> Nat [ditto] . op _quo_ : Rat NzRat -> Int [ditto] . eq (I / N) quo Q = I quo (N * Q) . eq K quo (J / M) = (K * M) quo J . op _rem_ : Rat NzRat -> Rat [ditto] . eq (I / N) rem (J / M) = ((I * M) rem (J * N)) / (N * M) . eq K rem (J / M) = ((K * M) rem J) / M . eq (I / N) rem J = (I rem (J * N)) / N . op _^_ : PosRat Nat -> PosRat [ditto] . op _^_ : NzRat Nat -> NzRat [ditto] . op _^_ : Rat Nat -> Rat [ditto] . eq (I / N) ^ Z = (I ^ Z) / (N ^ Z) . op abs : NzRat -> PosRat [ditto] . op abs : Rat -> Rat [ditto] . eq abs(I / N) = abs(I) / N . op gcd : NzRat Rat -> PosRat [ditto] . op gcd : Rat Rat -> Rat [ditto] . eq gcd(I / N, R) = gcd(I, N * R) / N . op lcm : NzRat NzRat -> PosRat [ditto] . op lcm : Rat Rat -> Rat [ditto] . eq lcm(I / N, R) = lcm(I, N * R) / N . op min : PosRat PosRat -> PosRat [ditto] . op min : NzRat NzRat -> NzRat [ditto] . op min : Rat Rat -> Rat [ditto] . eq min(I / N, R) = min(I, N * R) / N . op max : PosRat Rat -> PosRat [ditto] . op max : NzRat NzRat -> NzRat [ditto] . op max : Rat Rat -> Rat [ditto] . eq max(I / N, R) = max(I, N * R) / N . op _<_ : Rat Rat -> Bool [ditto] . eq (I / N) < (J / M) = (I * M) < (J * N) . eq (I / N) < K = I < (K * N) . eq K < (J / M) = (K * M) < J . op _<=_ : Rat Rat -> Bool [ditto] . eq (I / N) <= (J / M) = (I * M) <= (J * N) . eq (I / N) <= K = I <= (K * N) . eq K <= (J / M) = (K * M) <= J . op _>_ : Rat Rat -> Bool [ditto] . eq (I / N) > (J / M) = (I * M) > (J * N) . eq (I / N) > K = I > (K * N) . eq K > (J / M) = (K * M) > J . op _>=_ : Rat Rat -> Bool [ditto] . eq (I / N) >= (J / M) = (I * M) >= (J * N) . eq (I / N) >= K = I >= (K * N) . eq K >= (J / M) = (K * M) >= J . op _divides_ : NzRat Rat -> Bool [ditto] . eq (I / N) divides K = I divides N * K . eq Q divides (J / M) = Q * M divides J . op trunc : PosRat -> Nat . op trunc : Rat -> Int . eq trunc(K) = K . eq trunc(I / N) = I quo N . op frac : Rat -> Rat . eq frac(K) = 0 . eq frac(I / N) = (I rem N) / N . op floor : PosRat -> Nat . op floor : Rat -> Int . op ceiling : PosRat -> NzNat . op ceiling : Rat -> Int . eq floor(K) = K . eq ceiling(K) = K . eq floor(N / M) = N quo M . eq ceiling(N / M) = ((N + M) - 1) quo M . eq floor(- N / M) = - ceiling(N / M) . eq ceiling(- N / M) = - floor(N / M) . endfm fmod FLOAT is protecting BOOL . sorts FiniteFloat Float . subsort FiniteFloat < Float . *** pseudo constructor for the set of double precision floats op : -> FiniteFloat [special (id-hook FloatSymbol)] . op : -> Float [ditto] . op -_ : Float -> Float [prec 15 special (id-hook FloatOpSymbol (-) op-hook floatSymbol ( : ~> Float))] . op -_ : FiniteFloat -> FiniteFloat [ditto] . op _+_ : Float Float -> Float [prec 33 gather (E e) special (id-hook FloatOpSymbol (+) op-hook floatSymbol ( : ~> Float))] . op _-_ : Float Float -> Float [prec 33 gather (E e) special (id-hook FloatOpSymbol (-) op-hook floatSymbol ( : ~> Float))] . op _*_ : Float Float -> Float [prec 31 gather (E e) special (id-hook FloatOpSymbol (*) op-hook floatSymbol ( : ~> Float))] . op _/_ : Float Float ~> Float [prec 31 gather (E e) special (id-hook FloatOpSymbol (/) op-hook floatSymbol ( : ~> Float))] . op _rem_ : Float Float ~> Float [prec 31 gather (E e) special (id-hook FloatOpSymbol (rem) op-hook floatSymbol ( : ~> Float))] . op _^_ : Float Float ~> Float [prec 29 gather (E e) special (id-hook FloatOpSymbol (^) op-hook floatSymbol ( : ~> Float))] . op abs : Float -> Float [special (id-hook FloatOpSymbol (abs) op-hook floatSymbol ( : ~> Float))] . op abs : FiniteFloat -> FiniteFloat [ditto] . op floor : Float -> Float [special (id-hook FloatOpSymbol (floor) op-hook floatSymbol ( : ~> Float))] . op ceiling : Float -> Float [special (id-hook FloatOpSymbol (ceiling) op-hook floatSymbol ( : ~> Float))] . op min : Float Float -> Float [special (id-hook FloatOpSymbol (min) op-hook floatSymbol ( : ~> Float))] . op max : Float Float -> Float [special (id-hook FloatOpSymbol (max) op-hook floatSymbol ( : ~> Float))] . op sqrt : Float ~> Float [special (id-hook FloatOpSymbol (sqrt) op-hook floatSymbol ( : ~> Float))] . op exp : Float -> Float [special (id-hook FloatOpSymbol (exp) op-hook floatSymbol ( : ~> Float))] . op log : Float ~> Float [special (id-hook FloatOpSymbol (log) op-hook floatSymbol ( : ~> Float))] . op sin : Float -> Float [special (id-hook FloatOpSymbol (sin) op-hook floatSymbol ( : ~> Float))] . op cos : Float -> Float [special (id-hook FloatOpSymbol (cos) op-hook floatSymbol ( : ~> Float))] . op tan : Float -> Float [special (id-hook FloatOpSymbol (tan) op-hook floatSymbol ( : ~> Float))] . op asin : Float ~> Float [special (id-hook FloatOpSymbol (asin) op-hook floatSymbol ( : ~> Float))] . op acos : Float ~> Float [special (id-hook FloatOpSymbol (acos) op-hook floatSymbol ( : ~> Float))] . op atan : Float -> Float [special (id-hook FloatOpSymbol (atan) op-hook floatSymbol ( : ~> Float))] . op atan : Float Float -> Float [special (id-hook FloatOpSymbol (atan) op-hook floatSymbol ( : ~> Float))] . op _<_ : Float Float -> Bool [prec 51 special (id-hook FloatOpSymbol (<) op-hook floatSymbol ( : ~> Float) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : Float Float -> Bool [prec 51 special (id-hook FloatOpSymbol (<=) op-hook floatSymbol ( : ~> Float) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : Float Float -> Bool [prec 51 special (id-hook FloatOpSymbol (>) op-hook floatSymbol ( : ~> Float) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : Float Float -> Bool [prec 51 special (id-hook FloatOpSymbol (>=) op-hook floatSymbol ( : ~> Float) term-hook trueTerm (true) term-hook falseTerm (false))] . op pi : -> FiniteFloat . eq pi = 3.1415926535897931 . op _=[_]_ : Float FiniteFloat Float -> Bool [prec 51 format (d d d d d s d)] . var X Y : Float . var Z : FiniteFloat . eq X =[Z] Y = abs(X - Y) < Z . endfm fmod STRING is protecting NAT . sorts String Char FindResult . subsort Char < String . subsort Nat < FindResult . *** pseudo constructor for the infinite set of strings op : -> Char [special (id-hook StringSymbol)] . op : -> String [ditto] . op notFound : -> FindResult [ctor] . op ascii : Char -> Nat [special (id-hook StringOpSymbol (ascii) op-hook stringSymbol ( : ~> Char) op-hook succSymbol (s_ : Nat ~> NzNat))] . op char : Nat ~> Char [special (id-hook StringOpSymbol (char) op-hook stringSymbol ( : ~> Char) op-hook succSymbol (s_ : Nat ~> NzNat))] . op _+_ : String String -> String [prec 33 gather (E e) special (id-hook StringOpSymbol (+) op-hook stringSymbol ( : ~> String))] . op length : String -> Nat [special (id-hook StringOpSymbol (length) op-hook stringSymbol ( : ~> String) op-hook succSymbol (s_ : Nat ~> NzNat))] . op substr : String Nat Nat -> String [special (id-hook StringOpSymbol (substr) op-hook stringSymbol ( : ~> String) op-hook succSymbol (s_ : Nat ~> NzNat))] . op find : String String Nat -> FindResult [special (id-hook StringOpSymbol (find) op-hook stringSymbol ( : ~> String) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook notFoundTerm (notFound))] . op rfind : String String Nat -> FindResult [special (id-hook StringOpSymbol (rfind) op-hook stringSymbol ( : ~> String) op-hook succSymbol (s_ : Nat ~> NzNat) term-hook notFoundTerm (notFound))] . op _<_ : String String -> Bool [prec 37 special (id-hook StringOpSymbol (<) op-hook stringSymbol ( : ~> String) term-hook trueTerm (true) term-hook falseTerm (false))] . op _<=_ : String String -> Bool [prec 37 special (id-hook StringOpSymbol (<=) op-hook stringSymbol ( : ~> String) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>_ : String String -> Bool [prec 37 special (id-hook StringOpSymbol (>) op-hook stringSymbol ( : ~> String) term-hook trueTerm (true) term-hook falseTerm (false))] . op _>=_ : String String -> Bool [prec 37 special (id-hook StringOpSymbol (>=) op-hook stringSymbol ( : ~> String) term-hook trueTerm (true) term-hook falseTerm (false))] . op upperCase : String -> String [special (id-hook StringOpSymbol (upperCase) op-hook stringSymbol ( : ~> String))] . op lowerCase : String -> String [special (id-hook StringOpSymbol (lowerCase) op-hook stringSymbol ( : ~> String))] . endfm fmod CONVERSION is protecting RAT . protecting FLOAT . protecting STRING . sort DecFloat . op <_,_,_> : Int String Int -> DecFloat [ctor] . op float : Rat -> Float [special (id-hook FloatOpSymbol (float) op-hook floatSymbol ( : ~> Float) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int) op-hook divisionSymbol (_/_ : NzInt NzNat ~> NzRat))] . op rat : FiniteFloat -> Rat [special (id-hook FloatOpSymbol (rat) op-hook floatSymbol ( : ~> Float) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int) op-hook divisionSymbol (_/_ : NzInt NzNat ~> NzRat))] . op string : Rat NzNat ~> String [special (id-hook StringOpSymbol (string) op-hook stringSymbol ( : ~> String) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int) op-hook divisionSymbol (_/_ : NzInt NzNat ~> NzRat))] . op rat : String NzNat ~> Rat [special (id-hook StringOpSymbol (rat) op-hook stringSymbol ( : ~> String) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int) op-hook divisionSymbol (_/_ : NzInt NzNat ~> NzRat))] . op string : Float -> String [special (id-hook StringOpSymbol (string) op-hook stringSymbol ( : ~> String) op-hook floatSymbol ( : ~> Float))] . op float : String ~> Float [special (id-hook StringOpSymbol (float) op-hook stringSymbol ( : ~> String) op-hook floatSymbol ( : ~> Float))] . op decFloat : Float Nat -> DecFloat [special (id-hook StringOpSymbol (decFloat) op-hook stringSymbol ( : ~> String) op-hook floatSymbol ( : ~> Float) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int) op-hook decFloatSymbol (<_,_,_> : Int String Int ~> DecFloat))] . endfm fmod RANDOM is protecting NAT . op random : Nat -> Nat [special (id-hook RandomOpSymbol op-hook succSymbol (s_ : Nat ~> NzNat))] . endfm fmod BOUND is protecting NAT . sort Bound . subsort Nat < Bound . op unbounded : -> Bound [ctor] . endfm fmod QID is protecting STRING . sort Qid . *** pseudo constructor for the infinite set of quoted identifiers op : -> Qid [special (id-hook QuotedIdentifierSymbol)] . op string : Qid -> String [special (id-hook QuotedIdentifierOpSymbol (string) op-hook quotedIdentifierSymbol ( : ~> Qid) op-hook stringSymbol ( : ~> String))] . op qid : String ~> Qid [special (id-hook QuotedIdentifierOpSymbol (qid) op-hook quotedIdentifierSymbol ( : ~> Qid) op-hook stringSymbol ( : ~> String))] . endfm *** *** Standard theories and views. *** fth TRIV is sort Elt . endfth view TRIV from TRIV to TRIV is endv view Bool from TRIV to BOOL is sort Elt to Bool . endv view Nat from TRIV to NAT is sort Elt to Nat . endv view Int from TRIV to INT is sort Elt to Int . endv view Rat from TRIV to RAT is sort Elt to Rat . endv view Float from TRIV to FLOAT is sort Elt to Float . endv view String from TRIV to STRING is sort Elt to String . endv view Qid from TRIV to QID is sort Elt to Qid . endv fth STRICT-WEAK-ORDER is protecting BOOL . including TRIV . op _<_ : Elt Elt -> Bool . vars X Y Z : Elt . ceq X < Z = true if X < Y /\ Y < Z [nonexec label transitive] . eq X < X = false [nonexec label irreflexive] . ceq X < Y or Y < X or Y < Z or Z < Y = true if X < Z or Z < X [nonexec label incomparability-transitive] . endfth view STRICT-WEAK-ORDER from TRIV to STRICT-WEAK-ORDER is endv fth STRICT-TOTAL-ORDER is inc STRICT-WEAK-ORDER . vars X Y : Elt . ceq X = Y if X < Y = false /\ Y < X = false [nonexec label total] . endfth view STRICT-TOTAL-ORDER from STRICT-WEAK-ORDER to STRICT-TOTAL-ORDER is endv view Nat< from STRICT-TOTAL-ORDER to NAT is sort Elt to Nat . endv view Int< from STRICT-TOTAL-ORDER to INT is sort Elt to Int . endv view Rat< from STRICT-TOTAL-ORDER to RAT is sort Elt to Rat . endv view Float< from STRICT-TOTAL-ORDER to FLOAT is sort Elt to Float . endv view String< from STRICT-TOTAL-ORDER to STRING is sort Elt to String . endv fth TOTAL-PREORDER is protecting BOOL . including TRIV . op _<=_ : Elt Elt -> Bool . vars X Y Z : Elt . eq X <= X = true [nonexec label reflexive] . ceq X <= Z = true if X <= Y /\ Y <= Z [nonexec label transitive] . eq X <= Y or Y <= X = true [nonexec label total] . endfth view TOTAL-PREORDER from TRIV to TOTAL-PREORDER is endv fth TOTAL-ORDER is inc TOTAL-PREORDER . vars X Y : Elt . ceq X = Y if X <= Y /\ Y <= X [nonexec label antisymmetric] . endfth view TOTAL-ORDER from TOTAL-PREORDER to TOTAL-ORDER is endv view Nat<= from TOTAL-ORDER to NAT is sort Elt to Nat . endv view Int<= from TOTAL-ORDER to INT is sort Elt to Int . endv view Rat<= from TOTAL-ORDER to RAT is sort Elt to Rat . endv view Float<= from TOTAL-ORDER to FLOAT is sort Elt to Float . endv view String<= from TOTAL-ORDER to STRING is sort Elt to String . endv fth DEFAULT is including TRIV . op 0 : -> Elt . endfth view DEFAULT from TRIV to DEFAULT is endv view Nat0 from DEFAULT to NAT is sort Elt to Nat . endv view Int0 from DEFAULT to INT is sort Elt to Int . endv view Rat0 from DEFAULT to RAT is sort Elt to Rat . endv view Float0 from DEFAULT to FLOAT is sort Elt to Float . op 0 to term 0.0 . endv view String0 from DEFAULT to STRING is sort Elt to String . op 0 to term "" . endv view Qid0 from DEFAULT to QID is sort Elt to Qid . op 0 to term ' . endv *** *** Container data types defined in Maude. *** fmod LIST{X :: TRIV} is protecting NAT . sorts NeList{X} List{X} . subsort X$Elt < NeList{X} < List{X} . op nil : -> List{X} [ctor] . op __ : List{X} List{X} -> List{X} [ctor assoc id: nil prec 25] . op __ : NeList{X} List{X} -> NeList{X} [ctor ditto] . op __ : List{X} NeList{X} -> NeList{X} [ctor ditto] . var E E' : X$Elt . vars A L : List{X} . var C : Nat . op append : List{X} List{X} -> List{X} . op append : NeList{X} List{X} -> NeList{X} . op append : List{X} NeList{X} -> NeList{X} . eq append(A, L) = A L . op head : NeList{X} -> X$Elt . eq head(E L) = E . op tail : NeList{X} -> List{X} . eq tail(E L) = L . op last : NeList{X} -> X$Elt . eq last(L E) = E . op front : NeList{X} -> List{X} . eq front(L E) = L . op occurs : X$Elt List{X} -> Bool . eq occurs(E, nil) = false . eq occurs(E, E' L) = if E == E' then true else occurs(E, L) fi . op reverse : List{X} -> List{X} . op reverse : NeList{X} -> NeList{X} . eq reverse(L) = $reverse(L, nil) . op $reverse : List{X} List{X} -> List{X} . eq $reverse(nil, A) = A . eq $reverse(E L, A) = $reverse(L, E A). op size : List{X} -> Nat . op size : NeList{X} -> NzNat . eq size(L) = $size(L, 0) . op $size : List{X} Nat -> Nat . eq $size(nil, C) = C . eq $size(E L, C) = $size(L, C + 1) . endfm view List{X :: TRIV} from TRIV to LIST{X} is sort Elt to List{X} . endv fmod WEAKLY-SORTABLE-LIST{X :: STRICT-WEAK-ORDER} is protecting LIST{STRICT-WEAK-ORDER}{X} * (sort NeList{STRICT-WEAK-ORDER}{X} to NeList{X}, sort List{STRICT-WEAK-ORDER}{X} to List{X}) . sort $Split{X} . vars E E' : X$Elt . vars A A' L L' : List{X} . var N : NeList{X} . op sort : List{X} -> List{X} . op sort : NeList{X} -> NeList{X} . eq sort(nil) = nil . eq sort(E) = E . eq sort(E N) = $sort($split(E N, nil, nil)) . op $sort : $Split{X} -> List{X} . eq $sort($split(nil, L, L')) = $merge(sort(L), sort(L'), nil) . op $split : List{X} List{X} List{X} -> $Split{X} [ctor] . eq $split(E, A, A') = $split(nil, A E, A') . eq $split(E L E', A, A') = $split(L, A E, E' A') . op merge : List{X} List{X} -> List{X} . op merge : NeList{X} List{X} -> NeList{X} . op merge : List{X} NeList{X} -> NeList{X} . eq merge(L, L') = $merge(L, L', nil) . op $merge : List{X} List{X} List{X} -> List{X} . eq $merge(L, nil, A) = A L . eq $merge(nil, L, A) = A L . eq $merge(E L, E' L', A) = if E' < E then $merge(E L, L', A E') else $merge(L, E' L', A E) fi . endfm view WeaklySortableList{X :: STRICT-WEAK-ORDER} from TRIV to WEAKLY-SORTABLE-LIST{X} is sort Elt to List{X} . endv fmod SORTABLE-LIST{X :: STRICT-TOTAL-ORDER} is protecting WEAKLY-SORTABLE-LIST{STRICT-TOTAL-ORDER}{X} * (sort NeList{STRICT-TOTAL-ORDER}{X} to NeList{X}, sort List{STRICT-TOTAL-ORDER}{X} to List{X}) . endfm view SortableList{X :: STRICT-TOTAL-ORDER} from TRIV to SORTABLE-LIST{X} is sort Elt to List{X} . endv fmod WEAKLY-SORTABLE-LIST'{X :: TOTAL-PREORDER} is protecting LIST{TOTAL-PREORDER}{X} * (sort NeList{TOTAL-PREORDER}{X} to NeList{X}, sort List{TOTAL-PREORDER}{X} to List{X}) . sort $Split{X} . vars E E' : X$Elt . vars A A' L L' : List{X} . var N : NeList{X} . op sort : List{X} -> List{X} . op sort : NeList{X} -> NeList{X} . eq sort(nil) = nil . eq sort(E) = E . eq sort(E N) = $sort($split(E N, nil, nil)) . op $sort : $Split{X} -> List{X} . eq $sort($split(nil, L, L')) = $merge(sort(L), sort(L'), nil) . op $split : List{X} List{X} List{X} -> $Split{X} [ctor] . eq $split(E, A, A') = $split(nil, A E, A') . eq $split(E L E', A, A') = $split(L, A E, E' A') . op merge : List{X} List{X} -> List{X} . op merge : NeList{X} List{X} -> NeList{X} . op merge : List{X} NeList{X} -> NeList{X} . eq merge(L, L') = $merge(L, L', nil) . op $merge : List{X} List{X} List{X} -> List{X} . eq $merge(L, nil, A) = A L . eq $merge(nil, L, A) = A L . eq $merge(E L, E' L', A) = if E <= E' then $merge(L, E' L', A E) else $merge(E L, L', A E') fi . endfm view WeaklySortableList'{X :: TOTAL-PREORDER} from TRIV to WEAKLY-SORTABLE-LIST'{X} is sort Elt to List{X} . endv fmod SORTABLE-LIST'{X :: TOTAL-ORDER} is protecting WEAKLY-SORTABLE-LIST'{TOTAL-ORDER}{X} * (sort NeList{TOTAL-ORDER}{X} to NeList{X}, sort List{TOTAL-ORDER}{X} to List{X}) . endfm view SortableList'{X :: TOTAL-ORDER} from TRIV to SORTABLE-LIST'{X} is sort Elt to List{X} . endv fmod SET{X :: TRIV} is protecting EXT-BOOL . protecting NAT . sorts NeSet{X} Set{X} . subsort X$Elt < NeSet{X} < Set{X} . op empty : -> Set{X} [ctor] . op _,_ : Set{X} Set{X} -> Set{X} [ctor assoc comm id: empty prec 121 format (d r os d)] . op _,_ : NeSet{X} Set{X} -> NeSet{X} [ctor ditto] . var E : X$Elt . var N : NeSet{X} . vars A S S' : Set{X} . var C : Nat . eq N, N = N . op insert : X$Elt Set{X} -> Set{X} . eq insert(E, S) = E, S . op delete : X$Elt Set{X} -> Set{X} . eq delete(E, (E, S)) = delete(E, S) . eq delete(E, S) = S [owise] . op _in_ : X$Elt Set{X} -> Bool . eq E in (E, S) = true . eq E in S = false [owise] . op |_| : Set{X} -> Nat . op |_| : NeSet{X} -> NzNat . eq | S | = $card(S, 0) . op $card : Set{X} Nat -> Nat . eq $card(empty, C) = C . eq $card((N, N, S), C) = $card((N, S), C) . eq $card((E, S), C) = $card(S, C + 1) [owise] . op union : Set{X} Set{X} -> Set{X} . op union : NeSet{X} Set{X} -> NeSet{X} . op union : Set{X} NeSet{X} -> NeSet{X} . eq union(S, S') = S, S' . op intersection : Set{X} Set{X} -> Set{X} . eq intersection(S, empty) = empty . eq intersection(S, N) = $intersect(S, N, empty) . op $intersect : Set{X} Set{X} Set{X} -> Set{X} . eq $intersect(empty, S', A) = A . eq $intersect((E, S), S', A) = $intersect(S, S', if E in S' then E, A else A fi) . op _\_ : Set{X} Set{X} -> Set{X} [gather (E e)]. eq S \ empty = S . eq S \ N = $diff(S, N, empty) . op $diff : Set{X} Set{X} Set{X} -> Set{X} . eq $diff(empty, S', A) = A . eq $diff((E, S), S', A) = $diff(S, S', if E in S' then A else E, A fi) . op _subset_ : Set{X} Set{X} -> Bool . eq empty subset S' = true . eq (E, S) subset S' = E in S' and-then S subset S' . op _psubset_ : Set{X} Set{X} -> Bool . eq S psubset S' = S =/= S' and-then S subset S' . endfm view Set{X :: TRIV} from TRIV to SET{X} is sort Elt to Set{X} . endv fmod LIST-AND-SET{X :: TRIV} is protecting LIST{X} . protecting SET{X} . var E : X$Elt . vars A L : List{X} . var S : Set{X} . op makeSet : List{X} -> Set{X} . op makeSet : NeList{X} -> NeSet{X} . eq makeSet(L) = $makeSet(L, empty) . op $makeSet : List{X} Set{X} -> Set{X} . op $makeSet : NeList{X} Set{X} -> NeSet{X} . op $makeSet : List{X} NeSet{X} -> NeSet{X} . eq $makeSet(nil, S) = S . eq $makeSet(E L, S) = $makeSet(L, (E, S)) . op filter : List{X} Set{X} -> List{X} . eq filter(L, S) = $filter(L, S, nil) . op $filter : List{X} Set{X} List{X} -> List{X} . eq $filter(nil, S, A) = A . eq $filter(E L, S, A) = $filter(L, S, if E in S then A E else A fi) . op filterOut : List{X} Set{X} -> List{X} . eq filterOut(L, S) = $filterOut(L, S, nil) . op $filterOut : List{X} Set{X} List{X} -> List{X} . eq $filterOut(nil, S, A) = A . eq $filterOut(E L, S, A) = $filterOut(L, S, if E in S then A else A E fi) . endfm fmod SORTABLE-LIST-AND-SET{X :: STRICT-TOTAL-ORDER} is protecting SORTABLE-LIST{X} . *** *** This double renaming is needed for correct sharing of a renamed *** copy of LIST since Core Maude does not evaluate the composition *** of renamings but applies them sequentially. *** protecting LIST-AND-SET{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} * (sort NeList{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeList{STRICT-TOTAL-ORDER}{X}, sort List{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to List{STRICT-TOTAL-ORDER}{X}) * (sort NeList{STRICT-TOTAL-ORDER}{X} to NeList{X}, sort List{STRICT-TOTAL-ORDER}{X} to List{X}, sort NeSet{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to NeSet{X}, sort Set{STRICT-WEAK-ORDER}{STRICT-TOTAL-ORDER}{X} to Set{X}) . var E : X$Elt . var L : List{X} . var S : Set{X} . op makeList : Set{X} -> List{X} . op makeList : NeSet{X} -> NeList{X} . eq makeList(S) = $makeList(S, nil) . op $makeList : Set{X} List{X} -> List{X} . op $makeList : NeSet{X} List{X} -> NeList{X} . op $makeList : Set{X} NeList{X} -> NeList{X} . eq $makeList(empty, L) = sort(L) . eq $makeList((E, E, S), L) = $makeList((E, S), L) . eq $makeList((E, S), L) = $makeList(S, E L) [owise] . endfm fmod SORTABLE-LIST-AND-SET'{X :: TOTAL-ORDER} is protecting SORTABLE-LIST'{X} . *** *** This double renaming is needed for the same reasons as above. *** protecting LIST-AND-SET{TOTAL-PREORDER}{TOTAL-ORDER}{X} * (sort NeList{TOTAL-PREORDER}{TOTAL-ORDER}{X} to NeList{TOTAL-ORDER}{X}, sort List{TOTAL-PREORDER}{TOTAL-ORDER}{X} to List{TOTAL-ORDER}{X}) * (sort NeList{TOTAL-ORDER}{X} to NeList{X}, sort List{TOTAL-ORDER}{X} to List{X}, sort NeSet{TOTAL-PREORDER}{TOTAL-ORDER}{X} to NeSet{X}, sort Set{TOTAL-PREORDER}{TOTAL-ORDER}{X} to Set{X}) . var E : X$Elt . var L : List{X} . var S : Set{X} . op makeList : Set{X} -> List{X} . op makeList : NeSet{X} -> NeList{X} . eq makeList(S) = $makeList(S, nil) . op $makeList : Set{X} List{X} -> List{X} . op $makeList : NeSet{X} List{X} -> NeList{X} . op $makeList : Set{X} NeList{X} -> NeList{X} . eq $makeList(empty, L) = sort(L) . eq $makeList((E, E, S), L) = $makeList((E, S), L) . eq $makeList((E, S), L) = $makeList(S, E L) [owise] . endfm fmod LIST*{X :: TRIV} is protecting NAT . sorts Item{X} PreList{X} NeList{X} List{X} . subsort X$Elt List{X} < Item{X} < PreList{X} . subsort NeList{X} < List{X} . op __ : PreList{X} PreList{X} -> PreList{X} [ctor assoc prec 25] . op [_] : PreList{X} -> NeList{X} [ctor] . op [] : -> List{X} [ctor] . vars A P : PreList{X} . var L : List{X} . var E E' : Item{X} . var C : Nat . op append : List{X} List{X} -> List{X} . op append : NeList{X} List{X} -> NeList{X} . op append : List{X} NeList{X} -> NeList{X} . eq append([], L) = L . eq append(L, []) = L . eq append([P], [A]) = [P A] . op head : NeList{X} -> Item{X} . eq head([E]) = E . eq head([E P]) = E . op tail : NeList{X} -> List{X} . eq tail([E]) = [] . eq tail([E P]) = [P] . op last : NeList{X} -> Item{X} . eq last([E]) = E . eq last([P E]) = E . op front : NeList{X} -> List{X} . eq front([E]) = [] . eq front([P E]) = [P] . op occurs : Item{X} List{X} -> Bool . eq occurs(E, []) = false . eq occurs(E, [E']) = (E == E') . eq occurs(E, [E' P]) = if E == E' then true else occurs(E, [P]) fi . op reverse : List{X} -> List{X} . op reverse : NeList{X} -> NeList{X} . eq reverse([]) = [] . eq reverse([E]) = [E] . eq reverse([E P]) = [$reverse(P, E)] . op $reverse : PreList{X} PreList{X} -> PreList{X} . eq $reverse(E, A) = E A . eq $reverse(E P, A) = $reverse(P, E A). op size : List{X} -> Nat . op size : NeList{X} -> NzNat . eq size([]) = 0 . eq size([P]) = $size(P, 0) . op $size : PreList{X} Nat -> NzNat . eq $size(E, C) = C + 1 . eq $size(E P, C) = $size(P, C + 1) . endfm view List*{X :: TRIV} from TRIV to LIST*{X} is sort Elt to List{X} . endv fmod SET*{X :: TRIV} is protecting EXT-BOOL . protecting NAT . sorts Element{X} PreSet{X} NeSet{X} Set{X} . subsort X$Elt Set{X} < Element{X} < PreSet{X} . subsort NeSet{X} < Set{X} . op _,_ : PreSet{X} PreSet{X} -> PreSet{X} [ctor assoc comm prec 121 format (d r os d)] . op {_} : PreSet{X} -> NeSet{X} [ctor] . op {} : -> Set{X} [ctor] . vars P Q : PreSet{X} . vars A S : Set{X} . var E : Element{X} . var N : NeSet{X} . var C : Nat . eq {P, P} = {P} . eq {P, P, Q} = {P, Q} . op insert : Element{X} Set{X} -> Set{X} . eq insert(E, {}) = {E} . eq insert(E, {P}) = {E, P} . op delete : Element{X} Set{X} -> Set{X} . eq delete(E, {E}) = {} . eq delete(E, {E, P}) = delete(E, {P}) . eq delete(E, S) = S [owise] . op _in_ : Element{X} Set{X} -> Bool . eq E in {E} = true . eq E in {E, P} = true . eq E in S = false [owise] . op |_| : Set{X} -> Nat . op |_| : NeSet{X} -> NzNat . eq | {} | = 0 . eq | {P} | = $card(P, 0) . op $card : PreSet{X} Nat -> Nat . eq $card(E, C) = C + 1 . eq $card((N, N, P), C) = $card((N, P), C) . eq $card((E, P), C) = $card(P, C + 1) [owise] . op union : Set{X} Set{X} -> Set{X} . op union : NeSet{X} Set{X} -> NeSet{X} . op union : Set{X} NeSet{X} -> NeSet{X} . eq union({}, S) = S . eq union(S, {}) = S . eq union({P}, {Q}) = {P, Q} . op intersection : Set{X} Set{X} -> Set{X} . eq intersection({}, S) = {} . eq intersection(S, {}) = {} . eq intersection({P}, N) = $intersect(P, N, {}) . op $intersect : PreSet{X} Set{X} Set{X} -> Set{X} . eq $intersect(E, S, A) = if E in S then insert(E, A) else A fi . eq $intersect((E, P), S, A) = $intersect(P, S, $intersect(E, S, A)) . op _\_ : Set{X} Set{X} -> Set{X} [gather (E e)] . eq {} \ S = {} . eq S \ {} = S . eq {P} \ N = $diff(P, N, {}) . op $diff : PreSet{X} Set{X} Set{X} -> Set{X} . eq $diff(E, S, A) = if E in S then A else insert(E, A) fi . eq $diff((E, P), S, A) = $diff(P, S, $diff(E, S, A)) . op 2^_ : Set{X} -> Set{X} . eq 2^{} = {{}} . eq 2^{E} = {{}, {E}} . eq 2^{E, P} = union(2^{P}, $augment(2^{P}, E, {})) . op $augment : NeSet{X} Element{X} Set{X} -> Set{X} . eq $augment({S}, E, A) = insert(insert(E, S), A) . eq $augment({S, P}, E, A) = $augment({P}, E, $augment({S}, E, A)) . op _subset_ : Set{X} Set{X} -> Bool . eq {} subset S = true . eq {E} subset S = E in S . eq {E, P} subset S = E in S and-then {P} subset S . op _psubset_ : Set{X} Set{X} -> Bool . eq A psubset S = A =/= S and-then A subset S . endfm view Set*{X :: TRIV} from TRIV to SET*{X} is sort Elt to Set{X} . endv fmod MAP{X :: TRIV, Y :: TRIV} is protecting BOOL . sorts Entry{X,Y} Map{X,Y} . subsort Entry{X,Y} < Map{X,Y} . op _|->_ : X$Elt Y$Elt -> Entry{X,Y} [ctor] . op empty : -> Map{X,Y} [ctor] . op _,_ : Map{X,Y} Map{X,Y} -> Map{X,Y} [ctor assoc comm id: empty prec 121 format (d r os d)] . op undefined : -> [Y$Elt] [ctor] . var D : X$Elt . vars R R' : Y$Elt . var M : Map{X,Y} . op insert : X$Elt Y$Elt Map{X,Y} -> Map{X,Y} . eq insert(D, R, (M, D |-> R')) = if $hasMapping(M, D) then insert(D, R, M) else (M, D |-> R) fi . eq insert(D, R, M) = (M, D |-> R) [owise] . op _[_] : Map{X,Y} X$Elt -> [Y$Elt] [prec 23] . eq (M, D |-> R)[D] = if $hasMapping(M, D) then undefined else R fi . eq M[D] = undefined [owise] . op $hasMapping : Map{X,Y} X$Elt -> Bool . eq $hasMapping((M, D |-> R), D) = true . eq $hasMapping(M, D) = false [owise] . endfm view Map{X :: TRIV, Y :: TRIV} from TRIV to MAP{X, Y} is sort Elt to Map{X,Y} . endv fmod ARRAY{X :: TRIV, Y :: DEFAULT} is protecting BOOL . sorts Entry{X,Y} Array{X,Y} . subsort Entry{X,Y} < Array{X,Y} . op _|->_ : X$Elt Y$Elt -> Entry{X,Y} [ctor] . op empty : -> Array{X,Y} [ctor] . op _;_ : Array{X,Y} Array{X,Y} -> Array{X,Y} [ctor assoc comm id: empty prec 71 format (d r os d)] . var D : X$Elt . vars R R' : Y$Elt . var A : Array{X,Y} . op insert : X$Elt Y$Elt Array{X,Y} -> Array{X,Y} . eq insert(D, R, (A ; D |-> R')) = if $hasMapping(A, D) then insert(D, R, A) else if R == 0 then A else (A ; D |-> R) fi fi . eq insert(D, R, A) = if R == 0 then A else (A ; D |-> R) fi [owise] . op _[_] : Array{X,Y} X$Elt -> Y$Elt [prec 23] . eq (A ; D |-> R)[D] = if $hasMapping(A, D) then 0 else R fi . eq A[D] = 0 [owise] . op $hasMapping : Array{X,Y} X$Elt -> Bool . eq $hasMapping((A ; D |-> R), D) = true . eq $hasMapping(A, D) = false [owise] . endfm view Array{X :: TRIV, Y :: DEFAULT} from TRIV to ARRAY{X, Y} is sort Elt to Array{X,Y} . endv *** *** Container instantiations on builtin data types needed by the metalevel. *** fmod NAT-LIST is protecting LIST{Nat} * (sort NeList{Nat} to NeNatList, sort List{Nat} to NatList) . endfm fmod QID-LIST is protecting LIST{Qid} * (sort NeList{Qid} to NeQidList, sort List{Qid} to QidList) . endfm fmod QID-SET is protecting SET{Qid} * (sort NeSet{Qid} to NeQidSet, sort Set{Qid} to QidSet) . endfm *** *** The metalevel. *** fmod META-TERM is protecting QID . *** types sorts Sort Kind Type . subsorts Sort Kind < Type < Qid . op : -> Sort [special (id-hook QuotedIdentifierSymbol (sortQid))] . op : -> Kind [special (id-hook QuotedIdentifierSymbol (kindQid))] . *** terms sorts Constant Variable TermQid GroundTerm Term NeGroundTermList GroundTermList NeTermList TermList . subsorts Constant Variable < TermQid < Qid Term . subsorts Constant < GroundTerm < Term NeGroundTermList < NeTermList . subsorts NeGroundTermList < NeTermList GroundTermList < TermList . op : -> Constant [special (id-hook QuotedIdentifierSymbol (constantQid))] . op : -> Variable [special (id-hook QuotedIdentifierSymbol (variableQid))] . op empty : -> GroundTermList [ctor] . op _,_ : NeGroundTermList GroundTermList -> NeGroundTermList [ctor assoc id: empty gather (e E) prec 121] . op _,_ : GroundTermList NeGroundTermList -> NeGroundTermList [ctor ditto] . op _,_ : GroundTermList GroundTermList -> GroundTermList [ctor ditto] . op _,_ : NeTermList TermList -> NeTermList [ctor ditto] . op _,_ : TermList NeTermList -> NeTermList [ctor ditto] . op _,_ : TermList TermList -> TermList [ctor ditto] . op _[_] : Qid NeGroundTermList -> GroundTerm [ctor] . op _[_] : Qid NeTermList -> Term [ctor] . *** extraction of names and types op getName : Constant -> Qid . op getType : Constant -> Type . var C : Constant . eq getName(C) = qid(substr(string(C), 0, rfind(string(C), ".", length(string(C))))) . eq getType(C) = qid(substr(string(C), rfind(string(C), ".", length(string(C))) + 1, length(string(C)))) . op getName : Variable -> Qid . op getType : Variable -> Type . var V : Variable . eq getName(V) = qid(substr(string(V), 0, rfind(string(V), ":", length(string(V))))) . eq getType(V) = qid(substr(string(V), rfind(string(V), ":", length(string(V))) + 1, length(string(V)))) . *** substitutions sorts Assignment Substitution . subsort Assignment < Substitution . op _<-_ : Variable Term -> Assignment [ctor prec 63 format (n++i d d --)] . op none : -> Substitution [ctor] . op _;_ : Substitution Substitution -> Substitution [ctor assoc comm id: none prec 65] . eq A:Assignment ; A:Assignment = A:Assignment . *** contexts (terms with a single hole) sorts Context NeCTermList GTermList . subsort Context < NeCTermList < GTermList . subsorts TermList < GTermList . op [] : -> Context [ctor] . op _,_ : TermList NeCTermList -> NeCTermList [ctor ditto] . op _,_ : NeCTermList TermList -> NeCTermList [ctor ditto] . op _,_ : GTermList GTermList -> GTermList [ctor ditto] . op _[_] : Qid NeCTermList -> Context [ctor] . endfm fmod META-CONDITION is protecting META-TERM . *** conditions sorts EqCondition Condition . subsort EqCondition < Condition . op nil : -> EqCondition [ctor] . op _=_ : Term Term -> EqCondition [ctor prec 71] . op _:_ : Term Sort -> EqCondition [ctor prec 71] . op _:=_ : Term Term -> EqCondition [ctor prec 71] . op _=>_ : Term Term -> Condition [ctor prec 71] . op _/\_ : EqCondition EqCondition -> EqCondition [ctor assoc id: nil prec 73] . op _/\_ : Condition Condition -> Condition [ctor assoc id: nil prec 73] . endfm fmod META-STRATEGY is protecting META-CONDITION . *** strategies sorts UsingPair UsingPairSet . subsort UsingPair < UsingPairSet . sorts RuleApplication CallStrategy Strategy StrategyList . subsort RuleApplication CallStrategy < Strategy < StrategyList . *** basic operators ops fail idle : -> Strategy [ctor] . op all : -> RuleApplication [ctor] . op _[_]{_} : Qid Substitution StrategyList -> RuleApplication [ctor prec 21] . op top : RuleApplication -> Strategy [ctor] . op match_s.t._ : Term EqCondition -> Strategy [ctor prec 21] . op xmatch_s.t._ : Term EqCondition -> Strategy [ctor prec 21] . op amatch_s.t._ : Term EqCondition -> Strategy [ctor prec 21] . op _|_ : Strategy Strategy -> Strategy [ctor assoc comm id: fail prec 41 gather (e E)] . op _;_ : Strategy Strategy -> Strategy [ctor assoc id: idle prec 39 gather (e E)] . op _or-else_ : Strategy Strategy -> Strategy [ctor assoc prec 43 gather (e E)] . op _+ : Strategy -> Strategy [ctor] . op _?_:_ : Strategy Strategy Strategy -> Strategy [ctor prec 55] . op matchrew_s.t._by_ : Term EqCondition UsingPairSet -> Strategy [ctor] . op xmatchrew_s.t._by_ : Term EqCondition UsingPairSet -> Strategy [ctor] . op amatchrew_s.t._by_ : Term EqCondition UsingPairSet -> Strategy [ctor] . op _[[_]] : Qid TermList -> CallStrategy [ctor prec 21] . op one : Strategy -> Strategy [ctor] . *** derived operators (defined as constructors) op _* : Strategy -> Strategy [ctor] . op _! : Strategy -> Strategy [ctor] . op not : Strategy -> Strategy [ctor] . op test : Strategy -> Strategy [ctor] . op try : Strategy -> Strategy [ctor] . *** lists op empty : -> StrategyList [ctor] . op _,_ : StrategyList StrategyList -> StrategyList [ctor assoc id: empty] . op _using_ : Variable Strategy -> UsingPair [ctor prec 21] . op _,_ : UsingPairSet UsingPairSet -> UsingPairSet [ctor assoc comm prec 61] . eq U:UsingPair, U:UsingPair = U:UsingPair . endfm fmod META-MODULE is protecting META-TERM . protecting META-STRATEGY . protecting NAT-LIST . protecting QID-LIST . protecting QID-SET * (op empty to none, op _,_ to _;_ [prec 43]) . *** subsort declarations sorts SubsortDecl SubsortDeclSet . subsort SubsortDecl < SubsortDeclSet . op subsort_<_. : Sort Sort -> SubsortDecl [ctor] . op none : -> SubsortDeclSet [ctor] . op __ : SubsortDeclSet SubsortDeclSet -> SubsortDeclSet [ctor assoc comm id: none format (d ni d)] . eq S:SubsortDecl S:SubsortDecl = S:SubsortDecl . *** sort, kind and type sets sorts EmptyQidSet NeSortSet NeKindSet NeTypeSet SortSet KindSet TypeSet . subsort EmptyQidSet < SortSet KindSet < TypeSet < QidSet . subsort Sort < NeSortSet < SortSet . subsort Kind < NeKindSet < KindSet . subsort Type NeSortSet NeKindSet < NeTypeSet < TypeSet NeQidSet . op none : -> EmptyQidSet [ctor] . op _;_ : TypeSet TypeSet -> TypeSet [ctor ditto] . op _;_ : NeTypeSet TypeSet -> NeTypeSet [ctor ditto] . op _;_ : SortSet SortSet -> SortSet [ctor ditto] . op _;_ : NeSortSet SortSet -> NeSortSet [ctor ditto] . op _;_ : KindSet KindSet -> KindSet [ctor ditto] . op _;_ : NeKindSet KindSet -> NeKindSet [ctor ditto] . op _;_ : EmptyQidSet EmptyQidSet -> EmptyQidSet [ctor ditto] . *** type lists sort NeTypeList TypeList . subsorts Type < NeTypeList < TypeList < QidList . subsorts NeTypeList < NeQidList . op nil : -> TypeList [ctor] . op __ : TypeList TypeList -> TypeList [ctor ditto] . op __ : NeTypeList TypeList -> NeTypeList [ctor ditto] . op __ : TypeList NeTypeList -> NeTypeList [ctor ditto] . eq T:TypeList ; T:TypeList = T:TypeList . *** sets of type lists sort TypeListSet . subsort TypeList TypeSet < TypeListSet . op _;_ : TypeListSet TypeListSet -> TypeListSet [ctor ditto] . *** attribute sets sorts Attr AttrSet . subsort Attr < AttrSet . op none : -> AttrSet [ctor] . op __ : AttrSet AttrSet -> AttrSet [ctor assoc comm id: none] . eq A:Attr A:Attr = A:Attr . *** renamings sorts Renaming RenamingSet . subsort Renaming < RenamingSet . op sort_to_ : Qid Qid -> Renaming [ctor] . op op_to_[_] : Qid Qid AttrSet -> Renaming [ctor format (d d d d s d d d)] . op op_:_->_to_[_] : Qid TypeList Type Qid AttrSet -> Renaming [ctor format (d d d d d d d d s d d d)] . op label_to_ : Qid Qid -> Renaming [ctor] . op strat_to_ : Qid Qid -> Renaming [ctor] . op strat_:_@_to_ : Qid TypeList Type Qid -> Renaming [ctor] . op _,_ : RenamingSet RenamingSet -> RenamingSet [ctor assoc comm prec 43 format (d d ni d)] . *** view and module expressions sort Expression ViewExpression ModuleExpression . subsort Sort < Expression < ViewExpression ModuleExpression . op _{_} : Expression NeParameterList -> Expression [ctor prec 37] . op _{_} : ViewExpression NeParameterList -> ViewExpression [ctor ditto] . op _{_} : ModuleExpression NeParameterList -> ModuleExpression [ctor ditto] . op _+_ : ModuleExpression ModuleExpression -> ModuleExpression [ctor assoc comm] . op _*(_) : ModuleExpression RenamingSet -> ModuleExpression [ctor prec 39 format (d d s n++i n--i d)] . *** parameter lists sort EmptyCommaList NeParameterList ParameterList . subsorts ViewExpression < NeParameterList < ParameterList . subsort EmptyCommaList < GroundTermList ParameterList . op empty : -> EmptyCommaList [ctor] . op _,_ : ParameterList ParameterList -> ParameterList [ctor ditto] . op _,_ : NeParameterList ParameterList -> NeParameterList [ctor ditto] . op _,_ : ParameterList NeParameterList -> NeParameterList [ctor ditto] . op _,_ : EmptyCommaList EmptyCommaList -> EmptyCommaList [ctor ditto] . *** parameter declarations sorts ParameterDecl NeParameterDeclList ParameterDeclList . subsorts ParameterDecl < NeParameterDeclList < ParameterDeclList . op _::_ : Sort ModuleExpression -> ParameterDecl . op nil : -> ParameterDeclList [ctor] . op _,_ : ParameterDeclList ParameterDeclList -> ParameterDeclList [ctor assoc id: nil prec 121] . op _,_ : NeParameterDeclList ParameterDeclList -> NeParameterDeclList [ctor ditto] . op _,_ : ParameterDeclList NeParameterDeclList -> NeParameterDeclList [ctor ditto] . *** importations sorts Import ImportList . subsort Import < ImportList . op protecting_. : ModuleExpression -> Import [ctor] . op extending_. : ModuleExpression -> Import [ctor] . op including_. : ModuleExpression -> Import [ctor] . op nil : -> ImportList [ctor] . op __ : ImportList ImportList -> ImportList [ctor assoc id: nil format (d ni d)] . *** hooks sorts Hook NeHookList HookList . subsort Hook < NeHookList < HookList . op id-hook : Qid QidList -> Hook [ctor format (nssss d)] . op op-hook : Qid Qid QidList Qid -> Hook [ctor format (nssss d)] . op term-hook : Qid Term -> Hook [ctor format (nssss d)] . op nil : -> HookList [ctor] . op __ : HookList HookList -> HookList [ctor assoc id: nil] . op __ : NeHookList HookList -> NeHookList [ctor ditto] . op __ : HookList NeHookList -> NeHookList [ctor ditto] . *** operator attributes op assoc : -> Attr [ctor] . op comm : -> Attr [ctor] . op idem : -> Attr [ctor] . op iter : -> Attr [ctor] . op id : Term -> Attr [ctor] . op left-id : Term -> Attr [ctor] . op right-id : Term -> Attr [ctor] . op strat : NeNatList -> Attr [ctor] . op memo : -> Attr [ctor] . op prec : Nat -> Attr [ctor] . op gather : QidList -> Attr [ctor] . op format : QidList -> Attr [ctor] . op ctor : -> Attr [ctor] . op config : -> Attr [ctor] . op object : -> Attr [ctor] . op msg : -> Attr [ctor] . op frozen : NeNatList -> Attr [ctor] . op poly : NeNatList -> Attr [ctor] . op special : NeHookList -> Attr [ctor] . *** statement attributes op label : Qid -> Attr [ctor] . op metadata : String -> Attr [ctor] . op owise : -> Attr [ctor] . op nonexec : -> Attr [ctor] . op variant : -> Attr [ctor] . op narrowing : -> Attr [ctor] . op print : QidList -> Attr [ctor] . *** operator declarations sorts OpDecl OpDeclSet . subsort OpDecl < OpDeclSet . op (op_:_->_[_].) : Qid TypeList Type AttrSet -> OpDecl [ctor format (d d d d d d s d d s d)] . op none : -> OpDeclSet [ctor] . op __ : OpDeclSet OpDeclSet -> OpDeclSet [ctor assoc comm id: none format (d ni d)] . eq O:OpDecl O:OpDecl = O:OpDecl . *** membership axioms sorts MembAx MembAxSet . subsort MembAx < MembAxSet . op mb_:_[_]. : Term Sort AttrSet -> MembAx [ctor format (d d d d s d d s d)] . op cmb_:_if_[_]. : Term Sort EqCondition AttrSet -> MembAx [ctor format (d d d d d d s d d s d)] . op none : -> MembAxSet [ctor] . op __ : MembAxSet MembAxSet -> MembAxSet [ctor assoc comm id: none format (d ni d)] . eq M:MembAx M:MembAx = M:MembAx . *** equations sorts Equation EquationSet . subsort Equation < EquationSet . op eq_=_[_]. : Term Term AttrSet -> Equation [ctor format (d d d d s d d s d)] . op ceq_=_if_[_]. : Term Term EqCondition AttrSet -> Equation [ctor format (d d d d d d s d d s d)] . op none : -> EquationSet [ctor] . op __ : EquationSet EquationSet -> EquationSet [ctor assoc comm id: none format (d ni d)] . eq E:Equation E:Equation = E:Equation . *** rules sorts Rule RuleSet . subsort Rule < RuleSet . op rl_=>_[_]. : Term Term AttrSet -> Rule [ctor format (d d d d s d d s d)] . op crl_=>_if_[_]. : Term Term Condition AttrSet -> Rule [ctor format (d d d d d d s d d s d)] . op none : -> RuleSet [ctor] . op __ : RuleSet RuleSet -> RuleSet [ctor assoc comm id: none format (d ni d)] . eq R:Rule R:Rule = R:Rule . *** strategy declarations sorts StratDecl StratDeclSet . subsort StratDecl < StratDeclSet . op strat_:_@_[_]. : Qid TypeList Type AttrSet -> StratDecl [ctor format (d d d d d d s d d s d)] . op none : -> StratDeclSet [ctor] . op __ : StratDeclSet StratDeclSet -> StratDeclSet [ctor assoc comm id: none format (d ni d)] . eq O:StratDecl O:StratDecl = O:StratDecl . *** strategy definitions sorts StratDefinition StratDefSet . subsort StratDefinition < StratDefSet . op sd_:=_[_]. : CallStrategy Strategy AttrSet -> StratDefinition [ctor format (d d d d s d d s d)] . op csd_:=_if_[_]. : CallStrategy Strategy EqCondition AttrSet -> StratDefinition [ctor format (d d d d d d s d d s d)] . op none : -> StratDefSet [ctor] . op __ : StratDefSet StratDefSet -> StratDefSet [ctor assoc comm id: none format (d ni d)] . eq D:StratDefinition D:StratDefinition = D:StratDefinition . *** modules sorts FModule SModule FTheory STheory Module . subsorts FModule < SModule < Module . subsorts FTheory < STheory < Module . sort Header . subsort Qid < Header . op _{_} : Qid ParameterDeclList -> Header [ctor] . op fmod_is_sorts_.____endfm : Header ImportList SortSet SubsortDeclSet OpDeclSet MembAxSet EquationSet -> FModule [ctor gather (& & & & & & &) format (d d s n++i ni d d ni ni ni ni n--i d)] . op mod_is_sorts_._____endm : Header ImportList SortSet SubsortDeclSet OpDeclSet MembAxSet EquationSet RuleSet -> SModule [ctor gather (& & & & & & & &) format (d d s n++i ni d d ni ni ni ni ni n--i d)] . op fth_is_sorts_.____endfth : Qid ImportList SortSet SubsortDeclSet OpDeclSet MembAxSet EquationSet -> FTheory [ctor gather (& & & & & & &) format (d d d n++i ni d d ni ni ni ni n--i d)] . op th_is_sorts_._____endth : Qid ImportList SortSet SubsortDeclSet OpDeclSet MembAxSet EquationSet RuleSet -> STheory [ctor gather (& & & & & & & &) format (d d d n++i ni d d ni ni ni ni ni n--i d)] . op [_] : Qid -> Module . eq [Q:Qid] = (sth Q:Qid is including Q:Qid . sorts none . none none none none none none none endsth) . *** strategy modules sorts StratModule StratTheory . subsort StratModule StratTheory < Module . op smod_is_sorts_._______endsm : Header ImportList SortSet SubsortDeclSet OpDeclSet MembAxSet EquationSet RuleSet StratDeclSet StratDefSet -> StratModule [ctor gather (& & & & & & & & & &) format (d d s n++i ni d d ni ni ni ni ni ni ni n--i d)] . op sth_is_sorts_._______endsth : Header ImportList SortSet SubsortDeclSet OpDeclSet MembAxSet EquationSet RuleSet StratDeclSet StratDefSet -> StratTheory [ctor gather (& & & & & & & & & &) format (d d s n++i ni d d ni ni ni ni ni ni ni n--i d)] . *** projection functions var Q : Qid . var PDL : ParameterDeclList . var H : Header . var M : Module . var IL : ImportList . var SS : SortSet . var SSDS : SubsortDeclSet . var OPDS : OpDeclSet . var MAS : MembAxSet . var EQS : EquationSet . var RLS : RuleSet . var STDS : StratDeclSet . var STDFS : StratDefSet . op getName : Module -> Qid . eq getName(fmod Q is IL sorts SS . SSDS OPDS MAS EQS endfm) = Q . eq getName(mod Q is IL sorts SS . SSDS OPDS MAS EQS RLS endm) = Q . eq getName(fmod Q{PDL} is IL sorts SS . SSDS OPDS MAS EQS endfm) = Q . eq getName(mod Q{PDL} is IL sorts SS . SSDS OPDS MAS EQS RLS endm) = Q . eq getName(fth Q is IL sorts SS . SSDS OPDS MAS EQS endfth) = Q . eq getName(th Q is IL sorts SS . SSDS OPDS MAS EQS RLS endth) = Q . eq getName(smod Q is IL sorts SS . SSDS OPDS MAS EQS RLS STDS STDFS endsm) = Q . eq getName(smod Q{PDL} is IL sorts SS . SSDS OPDS MAS EQS RLS STDS STDFS endsm) = Q . eq getName(sth Q is IL sorts SS . SSDS OPDS MAS EQS RLS STDS STDFS endsth) = Q . op getImports : Module -> ImportList . eq getImports(fmod H is IL sorts SS . SSDS OPDS MAS EQS endfm) = IL . eq getImports(mod H is IL sorts SS . SSDS OPDS MAS EQS RLS endm) = IL . eq getImports(fth Q is IL sorts SS . SSDS OPDS MAS EQS endfth) = IL . eq getImports(th Q is IL sorts SS . SSDS OPDS MAS EQS RLS endth) = IL . eq getImports(smod Q is IL sorts SS . SSDS OPDS MAS EQS RLS STDS STDFS endsm) = IL . eq getImports(sth Q is IL sorts SS . SSDS OPDS MAS EQS RLS STDS STDFS endsth) = IL . op getSorts : Module -> SortSet . eq getSorts(fmod H is IL sorts SS . SSDS OPDS MAS EQS endfm) = SS . eq getSorts(mod H is IL sorts SS . SSDS OPDS MAS EQS RLS endm) = SS . eq getSorts(fth Q is IL sorts SS . SSDS OPDS MAS EQS endfth) = SS . eq getSorts(th Q is IL sorts SS . SSDS OPDS MAS EQS RLS endth) = SS . eq getSorts(smod Q is IL sorts SS . SSDS OPDS MAS EQS RLS STDS STDFS endsm) = SS . eq getSorts(sth Q is IL sorts SS . SSDS OPDS MAS EQS RLS STDS STDFS endsth) = SS . op getSubsorts : Module -> SubsortDeclSet . eq getSubsorts(fmod H is IL sorts SS . SSDS OPDS MAS EQS endfm) = SSDS . eq getSubsorts(mod H is IL sorts SS . SSDS OPDS MAS EQS RLS endm) = SSDS . eq getSubsorts(fth Q is IL sorts SS . SSDS OPDS MAS EQS endfth) = SSDS . eq getSubsorts(th Q is IL sorts SS . SSDS OPDS MAS EQS RLS endth) = SSDS . eq getSubsorts(smod Q is IL sorts SS . SSDS OPDS MAS EQS RLS STDS STDFS endsm) = SSDS . eq getSubsorts(sth Q is IL sorts SS . SSDS OPDS MAS EQS RLS STDS STDFS endsth) = SSDS . op getOps : Module -> OpDeclSet . eq getOps(fmod H is IL sorts SS . SSDS OPDS MAS EQS endfm) = OPDS . eq getOps(mod H is IL sorts SS . SSDS OPDS MAS EQS RLS endm) = OPDS . eq getOps(fth Q is IL sorts SS . SSDS OPDS MAS EQS endfth) = OPDS . eq getOps(th Q is IL sorts SS . SSDS OPDS MAS EQS RLS endth) = OPDS . eq getOps(smod Q is IL sorts SS . SSDS OPDS MAS EQS RLS STDS STDFS endsm) = OPDS . eq getOps(sth Q is IL sorts SS . SSDS OPDS MAS EQS RLS STDS STDFS endsth) = OPDS . op getMbs : Module -> MembAxSet . eq getMbs(fmod H is IL sorts SS . SSDS OPDS MAS EQS endfm) = MAS . eq getMbs(mod H is IL sorts SS . SSDS OPDS MAS EQS RLS endm) = MAS . eq getMbs(fth Q is IL sorts SS . SSDS OPDS MAS EQS endfth) = MAS . eq getMbs(th Q is IL sorts SS . SSDS OPDS MAS EQS RLS endth) = MAS . eq getMbs(smod Q is IL sorts SS . SSDS OPDS MAS EQS RLS STDS STDFS endsm) = MAS . eq getMbs(sth Q is IL sorts SS . SSDS OPDS MAS EQS RLS STDS STDFS endsth) = MAS . op getEqs : Module -> EquationSet . eq getEqs(fmod H is IL sorts SS . SSDS OPDS MAS EQS endfm) = EQS . eq getEqs(mod H is IL sorts SS . SSDS OPDS MAS EQS RLS endm) = EQS . eq getEqs(fth Q is IL sorts SS . SSDS OPDS MAS EQS endfth) = EQS . eq getEqs(th Q is IL sorts SS . SSDS OPDS MAS EQS RLS endth) = EQS . eq getEqs(smod Q is IL sorts SS . SSDS OPDS MAS EQS RLS STDS STDFS endsm) = EQS . eq getEqs(sth Q is IL sorts SS . SSDS OPDS MAS EQS RLS STDS STDFS endsth) = EQS . op getRls : Module -> RuleSet . eq getRls(fmod H is IL sorts SS . SSDS OPDS MAS EQS endfm) = none . eq getRls(mod H is IL sorts SS . SSDS OPDS MAS EQS RLS endm) = RLS . eq getRls(fth Q is IL sorts SS . SSDS OPDS MAS EQS endfth) = none . eq getRls(th Q is IL sorts SS . SSDS OPDS MAS EQS RLS endth) = RLS . eq getRls(smod Q is IL sorts SS . SSDS OPDS MAS EQS RLS STDS STDFS endsm) = RLS . eq getRls(sth Q is IL sorts SS . SSDS OPDS MAS EQS RLS STDS STDFS endsth) = RLS . op getStrats : Module -> StratDeclSet . eq getStrats(fmod H is IL sorts SS . SSDS OPDS MAS EQS endfm) = none . eq getStrats(mod H is IL sorts SS . SSDS OPDS MAS EQS RLS endm) = none . eq getStrats(fth Q is IL sorts SS . SSDS OPDS MAS EQS endfth) = none . eq getStrats(th Q is IL sorts SS . SSDS OPDS MAS EQS RLS endth) = none . eq getStrats(smod Q is IL sorts SS . SSDS OPDS MAS EQS RLS STDS STDFS endsm) = STDS . eq getStrats(sth Q is IL sorts SS . SSDS OPDS MAS EQS RLS STDS STDFS endsth) = STDS . op getSds : Module -> StratDefSet . eq getSds(fmod H is IL sorts SS . SSDS OPDS MAS EQS endfm) = none . eq getSds(mod H is IL sorts SS . SSDS OPDS MAS EQS RLS endm) = none . eq getSds(fth Q is IL sorts SS . SSDS OPDS MAS EQS endfth) = none . eq getSds(th Q is IL sorts SS . SSDS OPDS MAS EQS RLS endth) = none . eq getSds(smod Q is IL sorts SS . SSDS OPDS MAS EQS RLS STDS STDFS endsm) = STDFS . eq getSds(sth Q is IL sorts SS . SSDS OPDS MAS EQS RLS STDS STDFS endsth) = STDFS . endfm fmod META-VIEW is protecting META-MODULE . *** sort mappings sorts SortMapping SortMappingSet . subsort SortMapping < SortMappingSet . op sort_to_. : Sort Sort -> SortMapping [ctor] . op none : -> SortMappingSet [ctor] . op __ : SortMappingSet SortMappingSet -> SortMappingSet [ctor assoc comm id: none format (d ni d)] . eq S:SortMapping S:SortMapping = S:SortMapping . *** operator mappings sorts OpMapping OpMappingSet . subsort OpMapping < OpMappingSet . op (op_to_.) : Qid Qid -> OpMapping [ctor] . op (op_:_->_to_.) : Qid TypeList Type Qid -> OpMapping [ctor] . op (op_to term_.) : Term Term -> OpMapping [ctor] . op none : -> OpMappingSet [ctor] . op __ : OpMappingSet OpMappingSet -> OpMappingSet [ctor assoc comm id: none format (d ni d)] . eq O:OpMapping O:OpMapping = O:OpMapping . *** strat mappings sorts StratMapping StratMappingSet . subsort StratMapping < StratMappingSet . op (strat_to_.) : Qid Qid -> StratMapping [ctor] . op (strat_:_@_to_.) : Qid TypeList Type Qid -> StratMapping [ctor] . op (strat_to expr_.) : CallStrategy Strategy -> StratMapping [ctor] . op none : -> StratMappingSet [ctor] . op __ : StratMappingSet StratMappingSet -> StratMappingSet [ctor assoc comm id: none format (d ni d)] . eq S:StratMapping S:StratMapping = S:StratMapping . sort View . op view_from_to_is___endv : Header ModuleExpression ModuleExpression SortMappingSet OpMappingSet StratMappingSet -> View [ctor gather (& & & & & &) format (d d d d d d d n++i ni ni n--i d)] . *** projection functions var Q : Qid . var PDL : ParameterDeclList . vars ME ME' : ModuleExpression . var SMS : SortMappingSet . var OMS : OpMappingSet . var TMS : StratMappingSet . op getName : View -> Qid . eq getName(view Q from ME to ME' is SMS OMS TMS endv) = Q . eq getName(view Q{PDL} from ME to ME' is SMS OMS TMS endv) = Q . op getFrom : View -> ModuleExpression . eq getFrom(view Q from ME to ME' is SMS OMS TMS endv) = ME . op getTo : View -> ModuleExpression . eq getTo(view Q from ME to ME' is SMS OMS TMS endv) = ME' . op getSortMappings : View -> SortMappingSet . eq getSortMappings(view Q from ME to ME' is SMS OMS TMS endv) = SMS . op getOpMappings : View -> OpMappingSet . eq getOpMappings(view Q from ME to ME' is SMS OMS TMS endv) = OMS . op getStratMappings : View -> StratMappingSet . eq getStratMappings(view Q from ME to ME' is SMS OMS TMS endv) = TMS . endfm fmod META-LEVEL is protecting META-VIEW . protecting BOUND . *** variable sets sorts NeVariableSet VariableSet . subsort Variable < NeVariableSet < VariableSet < QidSet . subsort NeVariableSet < NeQidSet . subsort EmptyQidSet < VariableSet . op _;_ : VariableSet VariableSet -> VariableSet [ctor ditto] . op _;_ : NeVariableSet VariableSet -> NeVariableSet [ctor ditto] . *** parents sort Parent . subsort Nat < Parent . op none : -> Parent . *** argument values sort Type? . subsort Type < Type? . op anyType : -> Type? [ctor] . *** options for metaPrettyPrint() sorts PrintOption PrintOptionSet . subsort PrintOption < PrintOptionSet . ops mixfix with-parens flat format number rat : -> PrintOption [ctor] . op none : -> PrintOptionSet [ctor] . op __ : PrintOptionSet PrintOptionSet -> PrintOptionSet [ctor assoc comm id: none] . *** options for various variant based functionality sorts VariantOption VariantOptionSet . subsort VariantOption < VariantOptionSet . ops delay filter : -> VariantOption [ctor] . op none : -> VariantOptionSet [ctor] . op __ : VariantOptionSet VariantOptionSet -> VariantOptionSet [ctor assoc comm id: none] . *** options for metaSrewrite() sort SrewriteOption . ops breadthFirst depthFirst : -> SrewriteOption [ctor] . *** unification problems sorts UnificandPair UnificationProblem . subsort UnificandPair < UnificationProblem . op _=?_ : Term Term -> UnificandPair [ctor prec 71] . op _/\_ : UnificationProblem UnificationProblem -> UnificationProblem [ctor assoc comm prec 73] . *** matching problems sorts PatternSubjectPair MatchingProblem . subsort PatternSubjectPair < MatchingProblem . op _<=?_ : Term Term -> PatternSubjectPair [ctor prec 71] . op _/\_ : MatchingProblem MatchingProblem -> MatchingProblem [ctor assoc comm prec 73] . *** success results sorts ResultPair ResultTriple Result4Tuple MatchPair TraceStep Trace UnificationPair UnificationTriple Variant MatchOrUnificationPair NarrowingApplyResult NarrowingSearchResult NarrowingSearchPathResult NarrowingStep NarrowingTrace SmtResult . subsort MatchPair UnificationPair < MatchOrUnificationPair . subsort TraceStep < Trace . subsort NarrowingStep < NarrowingTrace . op {_,_} : Term Type -> ResultPair [ctor] . op {_,_,_} : Term Type Substitution -> ResultTriple [ctor] . op {_,_,_,_} : Term Type Substitution Context -> Result4Tuple [ctor] . op {_,_} : Substitution Context -> MatchPair [ctor] . op {_,_} : Substitution Qid -> UnificationPair [ctor] . op {_,_,_} : Substitution Substitution Qid -> UnificationTriple [ctor] . op {_,_,_,_,_} : Term Substitution Qid Parent Bool -> Variant [ctor] . op {_,_,_} : Term Type Rule -> TraceStep [ctor] . op nil : -> Trace [ctor] . op __ : Trace Trace -> Trace [ctor assoc id: nil format (d n d)] . op {_,_,_,_} : Term Substitution Term Nat -> SmtResult [ctor] . op {_,_,_,_,_,_,_} : Term Type Context Qid Substitution Substitution Qid -> NarrowingApplyResult [ctor format (d n++i d d d ni d ni d d d d d ni n--i d)] . op {_,_,_,_,_,_} : Term Type Substitution Qid Substitution Qid -> NarrowingSearchResult [ctor format (d n++i d d d d d ni d d d ni n--i d)] . op {_,_,_,_,_,_} : Term Type Substitution NarrowingTrace Substitution Qid -> NarrowingSearchPathResult [ctor format (d n++i d d d d d d d d d ni n--i d)] . op {_,_,_,_,_,_,_} : Context Qid Substitution Qid Term Type Substitution -> NarrowingStep [ctor format (ni n++i d ni d d d ni d ni d d d d n--i d)] . op nil : -> NarrowingTrace [ctor] . op __ : NarrowingTrace NarrowingTrace -> NarrowingTrace [ctor assoc id: nil] . *** failure results sorts ResultPair? ResultTriple? Result4Tuple? MatchPair? Substitution? Trace? UnificationPair? UnificationTriple? Variant? NarrowingApplyResult? NarrowingSearchResult? NarrowingSearchPathResult? SmtResult? Strategy? . subsort ResultPair < ResultPair? . subsort ResultTriple < ResultTriple? . subsort Result4Tuple < Result4Tuple? . subsort MatchPair < MatchPair? . subsort UnificationPair < UnificationPair? . subsort UnificationTriple < UnificationTriple? . subsort NarrowingApplyResult < NarrowingApplyResult? . subsort NarrowingSearchResult < NarrowingSearchResult? . subsort NarrowingSearchPathResult < NarrowingSearchPathResult? . subsort Variant < Variant? . subsort Substitution < Substitution? . subsort Trace < Trace? . subsort SmtResult < SmtResult? . subsort Strategy < Strategy? . op noParse : Nat -> ResultPair? [ctor] . op ambiguity : ResultPair ResultPair -> ResultPair? [ctor] . op failure : -> ResultPair? [ctor] . op failure : -> ResultTriple? [ctor] . op failureIncomplete : -> ResultTriple? [ctor] . op failure : -> Result4Tuple? [ctor] . op noUnifier : -> UnificationPair? [ctor] . op noUnifier : -> UnificationTriple? [ctor] . op noUnifierIncomplete : -> UnificationPair? [ctor] . op noUnifierIncomplete : -> UnificationTriple? [ctor] . op noVariant : -> Variant? [ctor] . op noVariantIncomplete : -> Variant? [ctor] . op failure : -> NarrowingApplyResult? [ctor] . op failureIncomplete : -> NarrowingApplyResult? [ctor] . op failure : -> NarrowingSearchResult? [ctor] . op failureIncomplete : -> NarrowingSearchResult? [ctor] . op failure : -> NarrowingSearchPathResult? [ctor] . op failureIncomplete : -> NarrowingSearchPathResult? [ctor] . op noMatch : -> Substitution? [ctor] . op noMatchIncomplete : -> Substitution? [ctor] . op noMatch : -> MatchPair? [ctor] . op failure : -> Trace? [ctor] . op failure : -> SmtResult? [ctor] . op noStratParse : Nat -> Strategy? [ctor] . op ambiguity : Strategy Strategy -> Strategy? [ctor] . *** projection functions op getTerm : ResultPair -> Term . eq getTerm({T:Term, T:Type}) = T:Term . op getType : ResultPair -> Type . eq getType({T:Term, T:Type}) = T:Type . op getTerm : ResultTriple -> Term . eq getTerm({T:Term, T:Type, S:Substitution}) = T:Term . op getType : ResultTriple -> Type . eq getType({T:Term, T:Type, S:Substitution}) = T:Type . op getSubstitution : ResultTriple -> Substitution . eq getSubstitution({T:Term, T:Type, S:Substitution}) = S:Substitution . op getTerm : Result4Tuple -> Term . eq getTerm({T:Term, T:Type, S:Substitution, C:Context}) = T:Term . op getType : Result4Tuple -> Type . eq getType({T:Term, T:Type, S:Substitution, C:Context}) = T:Type . op getSubstitution : Result4Tuple -> Substitution . eq getSubstitution({T:Term, T:Type, S:Substitution, C:Context}) = S:Substitution . op getContext : Result4Tuple -> Context . eq getContext({T:Term, T:Type, S:Substitution, C:Context}) = C:Context . op getSubstitution : MatchPair -> Substitution . eq getSubstitution({S:Substitution, C:Context}) = S:Substitution . op getContext : MatchPair -> Context . eq getContext({S:Substitution, C:Context}) = C:Context . op getSubstitution : UnificationPair -> Substitution . eq getSubstitution({S:Substitution, V:Qid}) = S:Substitution . op getVariableFamily : UnificationPair -> Qid . eq getVariableFamily({S:Substitution, V:Qid}) = V:Qid . op getLhsSubstitution : UnificationTriple -> Substitution . eq getLhsSubstitution({LS:Substitution, RS:Substitution, V:Qid}) = LS:Substitution . op getRhsSubstitution : UnificationTriple -> Substitution . eq getRhsSubstitution({LS:Substitution, RS:Substitution, V:Qid}) = RS:Substitution . op getVariableFamily : UnificationTriple -> Qid . eq getVariableFamily({LS:Substitution, RS:Substitution, V:Qid}) = V:Qid . op getTerm : Variant -> Term . eq getTerm({T:Term, S:Substitution, Q:Qid, P:Parent, B:Bool}) = T:Term . op getSubstitution : Variant -> Substitution . eq getSubstitution({T:Term, S:Substitution, Q:Qid, P:Parent, B:Bool}) = S:Substitution . op getVariableFamily : Variant -> Qid . eq getVariableFamily({T:Term, S:Substitution, Q:Qid, P:Parent, B:Bool}) = Q:Qid . op getParent : Variant -> Parent . eq getParent({T:Term, S:Substitution, Q:Qid, P:Parent, B:Bool}) = P:Parent . op getMoreVariantsInLayerFlag : Variant -> Bool . eq getMoreVariantsInLayerFlag({T:Term, S:Substitution, Q:Qid, P:Parent, B:Bool}) = B:Bool . op getTerm : TraceStep -> Term . eq getTerm({T:Term, T:Type, R:Rule}) = T:Term . op getType : TraceStep -> Type . eq getType({T:Term, T:Type, R:Rule}) = T:Type . op getRule : TraceStep -> Rule . eq getRule({T:Term, T:Type, R:Rule}) = R:Rule . op getTerm : NarrowingApplyResult -> Term . eq getTerm({T:Term, T:Type, C:Context, L:Qid, TS:Substitution, RS:Substitution, V:Qid}) = T:Term . op getType : NarrowingApplyResult -> Type . eq getType({T:Term, T:Type, C:Context, L:Qid, TS:Substitution, RS:Substitution, V:Qid}) = T:Type . op getContext : NarrowingApplyResult -> Context . eq getContext({T:Term, T:Type, C:Context, L:Qid, TS:Substitution, RS:Substitution, V:Qid}) = C:Context . op getLabel : NarrowingApplyResult -> Qid . eq getLabel({T:Term, T:Type, C:Context, L:Qid, TS:Substitution, RS:Substitution, V:Qid}) = L:Qid . op getTermSubstitution : NarrowingApplyResult -> Substitution . eq getTermSubstitution({T:Term, T:Type, C:Context, L:Qid, TS:Substitution, RS:Substitution, V:Qid}) = TS:Substitution . op getRuleSubstitution : NarrowingApplyResult -> Substitution . eq getRuleSubstitution({T:Term, T:Type, C:Context, L:Qid, TS:Substitution, RS:Substitution, V:Qid}) = RS:Substitution . op getVariableFamily : NarrowingApplyResult -> Qid . eq getVariableFamily({T:Term, T:Type, C:Context, L:Qid, TS:Substitution, RS:Substitution, V:Qid}) = V:Qid . op getTerm : NarrowingSearchResult -> Term . eq getTerm({T:Term, T:Type, A:Substitution, SV:Qid, U:Substitution, UV:Qid}) = T:Term . op getType : NarrowingSearchResult -> Type . eq getType({T:Term, T:Type, A:Substitution, SV:Qid, U:Substitution, UV:Qid}) = T:Type . op getAccumulatedSubstitution : NarrowingSearchResult -> Substitution . eq getAccumulatedSubstitution({T:Term, T:Type, A:Substitution, SV:Qid, U:Substitution, UV:Qid}) = A:Substitution . op getStateVariableFamily : NarrowingSearchResult -> Qid . eq getStateVariableFamily({T:Term, T:Type, A:Substitution, SV:Qid, U:Substitution, UV:Qid}) = SV:Qid . op getUnifier : NarrowingSearchResult -> Substitution . eq getUnifier({T:Term, T:Type, A:Substitution, SV:Qid, U:Substitution, UV:Qid}) = U:Substitution . op getUnifierVariableFamily : NarrowingSearchResult -> Qid . eq getUnifierVariableFamily({T:Term, T:Type, A:Substitution, SV:Qid, U:Substitution, UV:Qid}) = UV:Qid . op getInitialTerm : NarrowingSearchPathResult -> Term . eq getInitialTerm({T:Term, T:Type, S:Substitution, T:NarrowingTrace, U:Substitution, UV:Qid}) = T:Term . op getInitialType : NarrowingSearchPathResult -> Type . eq getInitialType({T:Term, T:Type, S:Substitution, T:NarrowingTrace, U:Substitution, UV:Qid}) = T:Type . op getInitialSubstitution : NarrowingSearchPathResult -> Substitution . eq getInitialSubstitution({T:Term, T:Type, S:Substitution, T:NarrowingTrace, U:Substitution, UV:Qid}) = S:Substitution . op getTrace : NarrowingSearchPathResult -> NarrowingTrace . eq getTrace({T:Term, T:Type, S:Substitution, T:NarrowingTrace, U:Substitution, UV:Qid}) = T:NarrowingTrace . op getUnifier : NarrowingSearchPathResult -> Substitution . eq getUnifier({T:Term, T:Type, S:Substitution, T:NarrowingTrace, U:Substitution, UV:Qid}) = U:Substitution . op getUnifierVariableFamily : NarrowingSearchPathResult -> Qid . eq getUnifierVariableFamily({T:Term, T:Type, S:Substitution, T:NarrowingTrace, U:Substitution, UV:Qid}) = UV:Qid . op getContext : NarrowingStep -> Context . eq getContext({C:Context, L:Qid, U:Substitution, UV:Qid, T:Term, T:Type, A:Substitution}) = C:Context . op getLabel : NarrowingStep -> Qid . eq getLabel({C:Context, L:Qid, U:Substitution, UV:Qid, T:Term, T:Type, A:Substitution}) = L:Qid . op getUnifier : NarrowingStep -> Substitution . eq getUnifier({C:Context, L:Qid, U:Substitution, UV:Qid, T:Term, T:Type, A:Substitution}) = U:Substitution . op getUnifierVariableFamily : NarrowingStep -> Qid . eq getUnifierVariableFamily({C:Context, L:Qid, U:Substitution, UV:Qid, T:Term, T:Type, A:Substitution}) = UV:Qid . op getTerm : NarrowingStep -> Term . eq getTerm({C:Context, L:Qid, U:Substitution, UV:Qid, T:Term, T:Type, A:Substitution}) = T:Term . op getType : NarrowingStep -> Type . eq getType({C:Context, L:Qid, U:Substitution, UV:Qid, T:Term, T:Type, A:Substitution}) = T:Type . op getAccumulatedSubstitution : NarrowingStep -> Substitution . eq getAccumulatedSubstitution({C:Context, L:Qid, U:Substitution, UV:Qid, T:Term, T:Type, A:Substitution}) = A:Substitution . *** utility function op applySubstitution : Module Term Substitution -> Term . eq applySubstitution(M:Module, T:Term, S:Substitution) = getTerm(metaNormalize(M:Module, $applySubstitution(T:Term, S:Substitution))) . op $applySubstitution : NeTermList Substitution -> Term . eq $applySubstitution(V:Variable, (V:Variable <- T:Term ; S:Substitution)) = T:Term . eq $applySubstitution(Q:Qid[TL:NeTermList], S:Substitution) = Q:Qid[$applySubstitution(TL:NeTermList, S:Substitution)] . eq $applySubstitution((T:Term, TL:NeTermList), S:Substitution) = $applySubstitution(T:Term, S:Substitution), $applySubstitution(TL:NeTermList, S:Substitution) . eq $applySubstitution(Q:Qid, S:Substitution) = Q:Qid [owise] . *** descent functions op metaReduce : Module Term ~> ResultPair [special ( id-hook MetaLevelOpSymbol (metaReduce) op-hook qidSymbol ( : ~> Qid) op-hook metaTermSymbol (_[_] : Qid NeTermList ~> Term) op-hook metaArgSymbol (_,_ : NeTermList NeTermList ~> NeTermList) op-hook emptyTermListSymbol (empty : ~> GroundTermList) op-hook assignmentSymbol (_<-_ : Qid Term ~> Assignment) op-hook substitutionSymbol (_;_ : Substitution Substitution ~> Substitution) op-hook emptySubstitutionSymbol (none : ~> Substitution) op-hook holeSymbol ([] : ~> Context) op-hook failStratSymbol (fail : ~> Strategy) op-hook idleStratSymbol (idle : ~> Strategy) op-hook allStratSymbol (all : ~> Strategy) op-hook applicationStratSymbol (_[_]{_} : Qid Substitution StrategyList ~> RuleApplication) op-hook topStratSymbol (top : RuleApplication ~> Strategy) op-hook matchStratSymbol (match_s.t._ : Term EqCondition ~> Strategy) op-hook xmatchStratSymbol (xmatch_s.t._ : Term EqCondition ~> Strategy) op-hook amatchStratSymbol (amatch_s.t._ : Term EqCondition ~> Strategy) op-hook unionStratSymbol (_|_ : Strategy Strategy ~> Strategy) op-hook concatStratSymbol (_;_ : Strategy Strategy ~> Strategy) op-hook orelseStratSymbol (_or-else_ : Strategy Strategy ~> Strategy) op-hook plusStratSymbol (_+ : Strategy ~> Strategy) op-hook conditionalStratSymbol (_?_:_ : Strategy Strategy Strategy ~> Strategy) op-hook matchrewStratSymbol (matchrew_s.t._by_ : Term EqCondition UsingPairSet ~> Strategy) op-hook xmatchrewStratSymbol (xmatchrew_s.t._by_ : Term EqCondition UsingPairSet ~> Strategy) op-hook amatchrewStratSymbol (amatchrew_s.t._by_ : Term EqCondition UsingPairSet ~> Strategy) op-hook callStratSymbol (_[[_]] : Qid TermList ~> Strategy) op-hook oneStratSymbol (one : Strategy ~> Strategy) op-hook starStratSymbol (_* : Strategy ~> Strategy) op-hook normalizationStratSymbol (_! : Strategy ~> Strategy) op-hook notStratSymbol (not : Strategy ~> Strategy) op-hook testStratSymbol (test : Strategy ~> Strategy) op-hook tryStratSymbol (try : Strategy ~> Strategy) op-hook usingStratSymbol (_using_ : Variable Strategy ~> UsingPair) op-hook usingListStratSymbol (_,_ : UsingPairSet UsingPairSet ~> UsingPairSet) op-hook emptyStratListSymbol (empty : ~> StrategyList) op-hook stratListSymbol (_,_ : StrategyList StrategyList ~> StrategyList) op-hook headerSymbol (_{_} : Qid ParameterDeclList ~> Header) op-hook parameterDeclSymbol (_::_ : Sort ModuleExpression ~> ParameterDecl) op-hook parameterDeclListSymbol (_,_ : ParameterDeclList ParameterDeclList ~> ParameterDeclList) op-hook emptyAttrSetSymbol (none : ~> AttrSet) op-hook attrSetSymbol (__ : AttrSet AttrSet ~> AttrSet) op-hook sortRenamingSymbol (sort_to_ : Qid Qid ~> Renaming) op-hook opRenamingSymbol (op_to_[_] : Qid Qid AttrSet ~> Renaming) op-hook opRenamingSymbol2 (op_:_->_to_[_] : Qid TypeList Type Qid AttrSet ~> Renaming) op-hook labelRenamingSymbol (label_to_ : Qid Qid ~> Renaming) op-hook stratRenamingSymbol (strat_to_ : Qid Qid ~> Renaming) op-hook stratRenamingSymbol2 (strat_:_@_to_ : Qid Qid TypeList Type ~> Renaming) op-hook renamingSetSymbol (_,_ : RenamingSet RenamingSet ~> RenamingSet) op-hook sumSymbol (_+_ : ModuleExpression ModuleExpression ~> ModuleExpression) op-hook renamingSymbol (_*(_) : ModuleExpression RenamingSet ~> ModuleExpression) op-hook instantiationSymbol (_{_} : Expression ParameterList ~> Expression) op-hook protectingSymbol (protecting_. : ModuleExpression ~> Import) op-hook extendingSymbol (extending_. : ModuleExpression ~> Import) op-hook includingSymbol (including_. : ModuleExpression ~> Import) op-hook nilImportListSymbol (nil : ~> ImportList) op-hook importListSymbol (__ : ImportList ImportList ~> ImportList) op-hook emptySortSetSymbol (none : ~> SortSet) op-hook sortSetSymbol (_;_ : SortSet SortSet ~> SortSet) op-hook subsortSymbol (subsort_<_. : Sort Sort ~> SubsortDecl) op-hook emptySubsortDeclSetSymbol (none : ~> SubsortDeclSet) op-hook subsortDeclSetSymbol (__ : SubsortDeclSet SubsortDeclSet ~> SubsortDeclSet) op-hook nilQidListSymbol (nil : ~> QidList) op-hook qidListSymbol (__ : QidList QidList ~> QidList) op-hook emptyQidSetSymbol (none : ~> QidSet) op-hook qidSetSymbol (_;_ : QidSet QidSet ~> QidSet) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook natListSymbol (__ : NeNatList NeNatList ~> NeNatList) op-hook unboundedSymbol (unbounded : ~> Bound) op-hook noParentSymbol (none : ~> Parent) op-hook stringSymbol ( : ~> String) op-hook idHookSymbol (id-hook : Qid QidList ~> Hook) op-hook opHookSymbol (op-hook : Qid Qid QidList Qid ~> Hook) op-hook termHookSymbol (term-hook : Qid Term ~> Hook) op-hook hookListSymbol (__ : HookList HookList ~> HookList) op-hook assocSymbol (assoc : ~> Attr) op-hook commSymbol (comm : ~> Attr) op-hook idemSymbol (idem : ~> Attr) op-hook iterSymbol (iter : ~> Attr) op-hook idSymbol (id : Term ~> Attr) op-hook leftIdSymbol (left-id : Term ~> Attr) op-hook rightIdSymbol (right-id : Term ~> Attr) op-hook stratSymbol (strat : NeNatList ~> Attr) op-hook memoSymbol (memo : ~> Attr) op-hook precSymbol (prec : Nat ~> Attr) op-hook gatherSymbol (gather : QidList ~> Attr) op-hook formatSymbol (format : QidList ~> Attr) op-hook ctorSymbol (ctor : ~> Attr) op-hook frozenSymbol (frozen : NeNatList ~> Attr) op-hook polySymbol (poly : NeNatList ~> Attr) op-hook configSymbol (config : ~> Attr) op-hook objectSymbol (object : ~> Attr) op-hook msgSymbol (msg : ~> Attr) op-hook specialSymbol (special : NeHookList ~> Attr) op-hook labelSymbol (label : Qid ~> Attr) op-hook metadataSymbol (metadata : String ~> Attr) op-hook owiseSymbol (owise : ~> Attr) op-hook variantAttrSymbol (variant : ~> Attr) op-hook narrowingSymbol (narrowing : ~> Attr) op-hook nonexecSymbol (nonexec : ~> Attr) op-hook printSymbol (print : QidList ~> Attr) op-hook opDeclSymbol (op_:_->_[_]. : Qid TypeList Type AttrSet ~> OpDecl) op-hook emptyOpDeclSetSymbol (none : ~> OpDeclSet) op-hook opDeclSetSymbol (__ : OpDeclSet OpDeclSet ~> OpDeclSet) op-hook noConditionSymbol (nil : ~> EqCondition) op-hook equalityConditionSymbol (_=_ : Term Term ~> EqCondition) op-hook sortTestConditionSymbol (_:_ : Term Sort ~> EqCondition) op-hook matchConditionSymbol (_:=_ : Term Term ~> EqCondition) op-hook rewriteConditionSymbol (_=>_ : Term Term ~> Condition) op-hook conjunctionSymbol (_/\_ : Condition Condition ~> Condition) op-hook mbSymbol (mb_:_[_]. : Term Sort AttrSet ~> MembAx) op-hook cmbSymbol (cmb_:_if_[_]. : Term Sort EqCondition AttrSet ~> MembAx) op-hook emptyMembAxSetSymbol (none : ~> MembAxSet) op-hook membAxSetSymbol (__ : MembAxSet MembAxSet ~> MembAxSet) op-hook eqSymbol (eq_=_[_]. : Term Term AttrSet ~> Equation) op-hook ceqSymbol (ceq_=_if_[_]. : Term Term EqCondition AttrSet ~> Equation) op-hook emptyEquationSetSymbol (none : ~> EquationSet) op-hook equationSetSymbol (__ : EquationSet EquationSet ~> EquationSet) op-hook rlSymbol (rl_=>_[_]. : Term Term AttrSet ~> Rule) op-hook crlSymbol (crl_=>_if_[_]. : Term Term Condition AttrSet ~> Rule) op-hook emptyRuleSetSymbol (none : ~> RuleSet) op-hook ruleSetSymbol (__ : RuleSet RuleSet ~> RuleSet) op-hook stratDeclSymbol (strat_:_@_[_]. : Qid TypeList Type AttrSet ~> StratDecl) op-hook emptyStratDeclSetSymbol (none : ~> StratDeclSet) op-hook stratDeclSetSymbol (__ : StratDeclSet StratDeclSet ~> StratDeclSet) op-hook sdSymbol (sd_:=_[_]. : CallStrategy Strategy AttrSet ~> StratDefinition) op-hook csdSymbol (csd_:=_if_[_]. : CallStrategy Strategy Condition AttrSet ~> StratDefinition) op-hook emptyStratDefSetSymbol (none : ~> StratDefSet) op-hook stratDefSetSymbol (__ : StratDefSet StratDefSet ~> StratDefSet) op-hook fmodSymbol (fmod_is_sorts_.____endfm : Qid ImportList SortSet SubsortDeclSet OpDeclSet MembAxSet EquationSet ~> FModule) op-hook fthSymbol (fth_is_sorts_.____endfth : Qid ImportList SortSet SubsortDeclSet OpDeclSet MembAxSet EquationSet ~> FModule) op-hook modSymbol (mod_is_sorts_._____endm : Qid ImportList SortSet SubsortDeclSet OpDeclSet MembAxSet EquationSet RuleSet ~> Module) op-hook thSymbol (th_is_sorts_._____endth : Qid ImportList SortSet SubsortDeclSet OpDeclSet MembAxSet EquationSet RuleSet ~> Module) op-hook smodSymbol (smod_is_sorts_._______endsm : Qid ImportList SortSet SubsortDeclSet OpDeclSet MembAxSet EquationSet RuleSet StratDeclSet StratDefSet ~> StratModule) op-hook sthSymbol (sth_is_sorts_._______endsth : Qid ImportList SortSet SubsortDeclSet OpDeclSet MembAxSet EquationSet RuleSet StratDeclSet StratDefSet ~> StratModule) op-hook sortMappingSymbol (sort_to_. : Sort Sort ~> SortMapping [ctor] .) op-hook emptySortMappingSetSymbol (none : ~> SortMappingSet) op-hook sortMappingSetSymbol (__ : SortMappingSet SortMappingSet ~> SortMappingSet) op-hook opMappingSymbol (op_to_. : Qid Qid ~> OpMapping) op-hook opSpecificMappingSymbol (op_:_->_to_. : Qid TypeList Type Qid ~> OpMapping) op-hook opTermMappingSymbol (op_to`term_. : Term Term ~> OpMapping) op-hook emptyOpMappingSetSymbol (none : ~> OpMappingSet) op-hook opMappingSetSymbol (__ : OpMappingSet OpMappingSet ~> OpMappingSet) op-hook stratMappingSymbol (strat_to_. : Qid Qid ~> StratMapping) op-hook stratSpecificMappingSymbol (strat_:_@_to_. : Qid TypeList Type Qid ~> StratMapping) op-hook stratExprMappingSymbol (strat_to expr_. : CallStrategy Strategy ~> StratMapping) op-hook emptyStratMappingSetSymbol (none : ~> StratMappingSet) op-hook stratMappingSetSymbol (__ : StratMappingSet StratMappingSet ~> StratMappingSet) op-hook viewSymbol (view_from_to_is___endv : Header ModuleExpression ModuleExpression SortMappingSet OpMappingSet StratMappingSet ~> View) op-hook anyTypeSymbol (anyType : ~> Type?) op-hook unificandPairSymbol (_=?_ : Term Term ~> UnificandPair) op-hook unificationConjunctionSymbol (_/\_ : UnificationProblem UnificationProblem ~> UnificationProblem) op-hook patternSubjectPairSymbol (_<=?_ : Term Term ~> PatternSubjectPair) op-hook matchingConjunctionSymbol (_/\_ : MatchingProblem MatchingProblem ~> MatchingProblem) op-hook resultPairSymbol ({_,_} : Term Type ~> ResultPair) op-hook resultTripleSymbol ({_,_,_} : Term Type Substitution ~> ResultTriple) op-hook result4TupleSymbol ({_,_,_,_} : Term Type Substitution Context ~> Result4Tuple) op-hook matchPairSymbol ({_,_} : Substitution Context ~> MatchPair) op-hook unificationTripleSymbol ({_,_,_} : Substitution Substitution Qid ~> UnificationTriple) op-hook variantSymbol ({_,_,_,_,_} : Term Substitution Qid Parent Bool ~> Variant) op-hook narrowingApplyResultSymbol ({_,_,_,_,_,_,_} : Term Type Context Qid Substitution Substitution Qid ~> NarrowingApplyResult) op-hook narrowingSearchResultSymbol ({_,_,_,_,_,_} : Term Type Substitution Qid Substitution Qid ~> NarrowingSearchResult) op-hook narrowingSearchPathResultSymbol ({_,_,_,_,_,_} : Term Type Substitution NarrowingTrace Substitution Qid ~> NarrowingSearchPathResult) op-hook narrowingStepSymbol ({_,_,_,_,_,_,_} : Context Qid Substitution Qid Term Type Substitution ~> NarrowingStep) op-hook nilNarrowingTraceSymbol (nil : ~> NarrowingTrace) op-hook narrowingTraceSymbol (__ : NarrowingTrace NarrowingTrace ~> NarrowingTrace) op-hook smtResultSymbol ({_,_,_,_} : Term Substitution Term Nat ~> SmtResult) op-hook traceStepSymbol ({_,_,_} : Term Type Rule ~> TraceStep) op-hook nilTraceSymbol (nil : ~> Trace) op-hook traceSymbol (__ : Trace Trace ~> Trace) op-hook noParseSymbol (noParse : Nat ~> ResultPair?) op-hook ambiguitySymbol (ambiguity : ResultPair ResultPair ~> ResultPair?) op-hook failure2Symbol (failure : ~> ResultPair?) op-hook failure3Symbol (failure : ~> ResultTriple?) op-hook failureIncomplete3Symbol (failureIncomplete : ~> ResultTriple?) op-hook failure4Symbol (failure : ~> Result4Tuple?) op-hook noUnifierPairSymbol (noUnifier : ~> UnificationPair?) op-hook noUnifierTripleSymbol (noUnifier : ~> UnificationTriple?) op-hook noUnifierIncompletePairSymbol (noUnifierIncomplete : ~> UnificationPair?) op-hook noUnifierIncompleteTripleSymbol (noUnifierIncomplete : ~> UnificationTriple?) op-hook noVariantSymbol (noVariant : ~> Variant?) op-hook noVariantIncompleteSymbol (noVariantIncomplete : ~> Variant?) op-hook narrowingApplyFailureSymbol (failure : ~> NarrowingApplyResult?) op-hook narrowingApplyFailureIncompleteSymbol (failureIncomplete : ~> NarrowingApplyResult?) op-hook narrowingSearchFailureSymbol (failure : ~> NarrowingSearchResult?) op-hook narrowingSearchFailureIncompleteSymbol (failureIncomplete : ~> NarrowingSearchResult?) op-hook narrowingSearchPathFailureSymbol (failure : ~> NarrowingSearchPathResult?) op-hook narrowingSearchPathFailureIncompleteSymbol (failureIncomplete : ~> NarrowingSearchPathResult?) op-hook noMatchSubstSymbol (noMatch : ~> Substitution?) op-hook noMatchIncompleteSubstSymbol (noMatchIncomplete : ~> Substitution?) op-hook noMatchPairSymbol (noMatch : ~> MatchPair?) op-hook failureTraceSymbol (failure : ~> Trace?) op-hook smtFailureSymbol (failure : ~> SmtResult?) op-hook noStratParseSymbol (noStratParse : Nat ~> Strategy?) op-hook stratAmbiguitySymbol (ambiguity : Strategy Strategy ~> Strategy?) op-hook mixfixSymbol (mixfix : ~> PrintOption) op-hook withParensSymbol (with-parens : ~> PrintOption) op-hook flatSymbol (flat : ~> PrintOption) op-hook formatPrintOptionSymbol (format : ~> PrintOption) op-hook numberSymbol (number : ~> PrintOption) op-hook ratSymbol (rat : ~> PrintOption) op-hook emptyPrintOptionSetSymbol (none : ~> PrintOptionSet) op-hook printOptionSetSymbol (__ : PrintOptionSet PrintOptionSet ~> PrintOptionSet) op-hook delaySymbol (delay : ~> VariantOption) op-hook filterSymbol (filter : ~> VariantOption) op-hook emptyVariantOptionSetSymbol (none : ~> VariantOptionSet) op-hook variantOptionSetSymbol (__ : VariantOptionSet VariantOptionSet ~> VariantOptionSet) op-hook breadthFirstSymbol (breadthFirst : ~> SrewriteOption) op-hook depthFirstSymbol (depthFirst : ~> SrewriteOption) op-hook legacyUnificationPairSymbol ({_,_} : Substitution Nat ~> UnificationPair) op-hook legacyUnificationTripleSymbol ({_,_,_} : Substitution Substitution Nat ~> UnificationTriple) op-hook legacyVariantSymbol ({_,_,_,_,_} : Term Substitution Nat Parent Bool ~> Variant) term-hook trueTerm (true) term-hook falseTerm (false))] . op metaNormalize : Module Term ~> ResultPair [special ( id-hook MetaLevelOpSymbol (metaNormalize) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaRewrite : Module Term Bound ~> ResultPair [special ( id-hook MetaLevelOpSymbol (metaRewrite) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaFrewrite : Module Term Bound Nat ~> ResultPair [special ( id-hook MetaLevelOpSymbol (metaFrewrite) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaApply : Module Term Qid Substitution Nat ~> ResultTriple? [special ( id-hook MetaLevelOpSymbol (metaApply) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaXapply : Module Term Qid Substitution Nat Bound Nat ~> Result4Tuple? [special ( id-hook MetaLevelOpSymbol (metaXapply) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaMatch : Module Term Term Condition Nat ~> Substitution? [special ( id-hook MetaLevelOpSymbol (metaMatch) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaXmatch : Module Term Term Condition Nat Bound Nat ~> MatchPair? [special ( id-hook MetaLevelOpSymbol (metaXmatch) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaUnify : Module UnificationProblem Qid Nat ~> UnificationPair? [special ( id-hook MetaLevelOpSymbol (metaUnify) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaDisjointUnify : Module UnificationProblem Qid Nat ~> UnificationTriple? [special ( id-hook MetaLevelOpSymbol (metaDisjointUnify) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaIrredundantUnify : Module UnificationProblem Qid Nat ~> UnificationPair? [special ( id-hook MetaLevelOpSymbol (metaIrredundantUnify) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaIrredundantDisjointUnify : Module UnificationProblem Qid Nat ~> UnificationTriple? [special ( id-hook MetaLevelOpSymbol (metaIrredundantDisjointUnify) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaSearch : Module Term Term Condition Qid Bound Nat ~> ResultTriple? [special ( id-hook MetaLevelOpSymbol (metaSearch) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaSearchPath : Module Term Term Condition Qid Bound Nat ~> Trace? [special ( id-hook MetaLevelOpSymbol (metaSearchPath) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaNarrow : Module Term Term Qid Bound Nat ~> ResultTriple? [special ( id-hook MetaLevelOpSymbol (metaNarrow) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaNarrow : Module Term Qid Bound Bool Nat ~> ResultPair? [special ( id-hook MetaLevelOpSymbol (metaNarrow2) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaGetVariant : Module Term TermList Qid Nat ~> Variant? [special ( id-hook MetaLevelOpSymbol (metaGetVariant) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaGetIrredundantVariant : Module Term TermList Qid Nat ~> Variant? [special ( id-hook MetaLevelOpSymbol (metaGetIrredundantVariant) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaVariantUnify : Module UnificationProblem TermList Qid VariantOptionSet Nat ~> UnificationPair? [special ( id-hook MetaLevelOpSymbol (metaVariantUnify) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaVariantDisjointUnify : Module UnificationProblem TermList Qid VariantOptionSet Nat ~> UnificationTriple? [special ( id-hook MetaLevelOpSymbol (metaVariantDisjointUnify) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaVariantMatch : Module MatchingProblem TermList Qid VariantOptionSet Nat ~> Substitution? [special ( id-hook MetaLevelOpSymbol (metaVariantMatch) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaNarrowingApply : Module Term TermList Qid VariantOptionSet Nat -> NarrowingApplyResult? [special ( id-hook MetaLevelOpSymbol (metaNarrowingApply) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaNarrowingSearch : Module Term Term Qid Bound Qid VariantOptionSet Nat -> NarrowingSearchResult? [special ( id-hook MetaLevelOpSymbol (metaNarrowingSearch) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaNarrowingSearchPath : Module Term Term Qid Bound Qid VariantOptionSet Nat -> NarrowingSearchPathResult? [special ( id-hook MetaLevelOpSymbol (metaNarrowingSearchPath) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaSrewrite : Module Term Strategy SrewriteOption Nat ~> ResultPair? [special ( id-hook MetaLevelOpSymbol (metaSrewrite) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaParseStrategy : Module VariableSet QidList ~> Strategy? [special ( id-hook MetaLevelOpSymbol (metaParseStrategy) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaPrettyPrintStrategy : Module VariableSet Strategy PrintOptionSet ~> QidList [special ( id-hook MetaLevelOpSymbol (metaPrettyPrintStrategy) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op sortLeq : Module Type Type ~> Bool [special ( id-hook MetaLevelOpSymbol (metaSortLeq) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op sameKind : Module Type Type ~> Bool [special ( id-hook MetaLevelOpSymbol (metaSameKind) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op lesserSorts : Module Type ~> SortSet [special ( id-hook MetaLevelOpSymbol (metaLesserSorts) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op glbSorts : Module Type Type ~> TypeSet [special ( id-hook MetaLevelOpSymbol (metaGlbSorts) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op leastSort : Module Term ~> Type [special ( id-hook MetaLevelOpSymbol (metaLeastSort) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op completeName : Module Type ~> Type [special ( id-hook MetaLevelOpSymbol (metaCompleteName) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaParse : Module VariableSet QidList Type? ~> ResultPair? [special ( id-hook MetaLevelOpSymbol (metaParse) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaPrettyPrint : Module VariableSet Term PrintOptionSet ~> QidList [special ( id-hook MetaLevelOpSymbol (metaPrettyPrint) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaCheck : Module Term ~> Bool [special ( id-hook MetaLevelOpSymbol (metaCheck) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaSmtSearch : Module Term Term Condition Qid Nat Bound Nat ~> SmtResult? [special ( id-hook MetaLevelOpSymbol (metaSmtSearch) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op wellFormed : Module -> Bool [special ( id-hook MetaLevelOpSymbol (metaWellFormedModule) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op wellFormed : Module Term ~> Bool [special ( id-hook MetaLevelOpSymbol (metaWellFormedTerm) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op wellFormed : Module Substitution ~> Bool [special ( id-hook MetaLevelOpSymbol (metaWellFormedSubstitution) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op getKind : Module Type ~> Kind [special ( id-hook MetaLevelOpSymbol (metaGetKind) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op getKinds : Module ~> KindSet [special ( id-hook MetaLevelOpSymbol (metaGetKinds) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op maximalSorts : Module Kind ~> SortSet [special ( id-hook MetaLevelOpSymbol (metaMaximalSorts) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op minimalSorts : Module Kind ~> SortSet [special ( id-hook MetaLevelOpSymbol (metaMinimalSorts) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op maximalAritySet : Module Qid TypeList Sort ~> TypeListSet [special ( id-hook MetaLevelOpSymbol (metaMaximalAritySet) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op upModule : Qid Bool ~> Module [special ( id-hook MetaLevelOpSymbol (metaUpModule) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op upImports : Qid ~> ImportList [special ( id-hook MetaLevelOpSymbol (metaUpImports) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op upSorts : Qid Bool ~> SortSet [special ( id-hook MetaLevelOpSymbol (metaUpSorts) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op upSubsortDecls : Qid Bool ~> SubsortDeclSet [special ( id-hook MetaLevelOpSymbol (metaUpSubsortDecls) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op upOpDecls : Qid Bool ~> OpDeclSet [special ( id-hook MetaLevelOpSymbol (metaUpOpDecls) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op upMbs : Qid Bool ~> MembAxSet [special ( id-hook MetaLevelOpSymbol (metaUpMbs) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op upEqs : Qid Bool ~> EquationSet [special ( id-hook MetaLevelOpSymbol (metaUpEqs) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op upRls : Qid Bool ~> RuleSet [special ( id-hook MetaLevelOpSymbol (metaUpRls) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op upStratDecls : Qid Bool ~> StratDeclSet [special ( id-hook MetaLevelOpSymbol (metaUpStratDecls) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op upSds : Qid Bool ~> StratDefSet [special ( id-hook MetaLevelOpSymbol (metaUpSds) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op upView : Qid ~> View [special ( id-hook MetaLevelOpSymbol (metaUpView) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op upTerm : Universal -> Term [poly (1) special ( id-hook MetaLevelOpSymbol (metaUpTerm) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op downTerm : Term Universal -> Universal [poly (2 0) special ( id-hook MetaLevelOpSymbol (metaDownTerm) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . *** *** For backward compatibility only. *** These operators are deprecated - do not use in new code. *** op {_,_} : Substitution Nat -> UnificationPair [ctor] . op {_,_,_} : Substitution Substitution Nat -> UnificationTriple [ctor] . op {_,_,_,_,_} : Term Substitution Nat Parent Bool -> Variant [ctor] . op metaParse : Module QidList Type? ~> ResultPair? . eq metaParse(M:Module, Q:QidList, T:Type?) = metaParse(M:Module, none, Q:QidList, T:Type?) . op metaPrettyPrint : Module Term PrintOptionSet ~> QidList . eq metaPrettyPrint(M:Module, T:Term, P:PrintOptionSet) = metaPrettyPrint(M:Module, none, T:Term, P:PrintOptionSet) . op metaPrettyPrint : Module Term ~> QidList . eq metaPrettyPrint(M:Module, T:Term) = metaPrettyPrint(M:Module, none, T:Term, mixfix flat format number rat) . op metaVariantUnify : Module UnificationProblem TermList Qid Nat ~> UnificationPair? . eq metaVariantUnify(M:Module, U:UnificationProblem, TL:TermList, Q:Qid, N:Nat) = metaVariantUnify(M:Module, U:UnificationProblem, TL:TermList, Q:Qid, none, N:Nat) . op metaVariantDisjointUnify : Module UnificationProblem TermList Qid Nat ~> UnificationTriple? . eq metaVariantDisjointUnify(M:Module, U:UnificationProblem, TL:TermList, Q:Qid, N:Nat) = metaVariantDisjointUnify(M:Module, U:UnificationProblem, TL:TermList, Q:Qid, none, N:Nat) . op metaNarrowingApply : Module Term TermList Qid Nat -> NarrowingApplyResult? . eq metaNarrowingApply(M:Module, T:Term, TL:TermList, Q:Qid, N:Nat) = metaNarrowingApply(M:Module, T:Term, TL:TermList, Q:Qid, none, N:Nat) . op metaNarrowingSearch : Module Term Term Qid Bound Qid Nat -> NarrowingSearchResult? . eq metaNarrowingSearch(M:Module, T:Term, T2:Term, S:Qid, B:Bound, F:Qid, N:Nat) = metaNarrowingSearch(M:Module, T:Term, T2:Term, S:Qid, B:Bound, F:Qid, none, N:Nat) . op metaNarrowingSearchPath : Module Term Term Qid Bound Qid Nat -> NarrowingSearchPathResult? . eq metaNarrowingSearchPath(M:Module, T:Term, T2:Term, S:Qid, B:Bound, F:Qid, N:Nat) = metaNarrowingSearchPath(M:Module, T:Term, T2:Term, S:Qid, B:Bound, F:Qid, none, N:Nat) . op metaUnify : Module UnificationProblem Nat Nat ~> UnificationPair? [special ( id-hook MetaLevelOpSymbol (legacyMetaUnify) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaDisjointUnify : Module UnificationProblem Nat Nat ~> UnificationTriple? [special ( id-hook MetaLevelOpSymbol (legacyMetaDisjointUnify) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaGetVariant : Module Term TermList Nat Nat ~> Variant? [special ( id-hook MetaLevelOpSymbol (legacyMetaGetVariant) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaGetIrredundantVariant : Module Term TermList Nat Nat ~> Variant? [special ( id-hook MetaLevelOpSymbol (legacyMetaGetIrredundantVariant) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaVariantUnify : Module UnificationProblem TermList Nat Nat ~> UnificationPair? [special ( id-hook MetaLevelOpSymbol (legacyMetaVariantUnify) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . op metaVariantDisjointUnify : Module UnificationProblem TermList Nat Nat ~> UnificationTriple? [special ( id-hook MetaLevelOpSymbol (legacyMetaVariantDisjointUnify) op-hook shareWith (metaReduce : Module Term ~> ResultPair))] . endfm *** *** Lexical module. *** fmod LEXICAL is protecting QID-LIST . op printTokens : QidList -> String [special (id-hook QuotedIdentifierOpSymbol (printTokens) op-hook stringSymbol ( : ~> String) op-hook quotedIdentifierSymbol ( : ~> Qid) op-hook nilQidListSymbol (nil : ~> QidList) op-hook qidListSymbol (__ : QidList QidList ~> QidList))] . op tokenize : String -> QidList [special (id-hook QuotedIdentifierOpSymbol (tokenize) op-hook stringSymbol ( : ~> String) op-hook quotedIdentifierSymbol ( : ~> Qid) op-hook nilQidListSymbol (nil : ~> QidList) op-hook qidListSymbol (__ : QidList QidList ~> QidList))] . endfm *** *** System modules. *** mod COUNTER is protecting NAT . op counter : -> [Nat] [special (id-hook CounterSymbol op-hook succSymbol (s_ : Nat ~> NzNat))] . endm mod LOOP-MODE is protecting QID-LIST . sorts State System . op [_,_,_] : QidList State QidList -> System [ctor special ( id-hook LoopSymbol op-hook qidSymbol ( : ~> Qid) op-hook nilQidListSymbol (nil : ~> QidList) op-hook qidListSymbol (__ : QidList QidList ~> QidList))] . endm mod CONFIGURATION is sorts Attribute AttributeSet . subsort Attribute < AttributeSet . op none : -> AttributeSet [ctor] . op _,_ : AttributeSet AttributeSet -> AttributeSet [ctor assoc comm id: none] . sorts Oid Cid Object Msg Portal Configuration . subsort Object Msg Portal < Configuration . op <_:_|_> : Oid Cid AttributeSet -> Object [ctor object] . op none : -> Configuration [ctor] . op __ : Configuration Configuration -> Configuration [ctor config assoc comm id: none] . op <> : -> Portal [ctor] . endm set include BOOL on . set omod include CONFIGURATION on . select CONVERSION . maude-3.1/src/Main/Makefile.am0000755000175200017520000000413513635322044013114 00000000000000bin_PROGRAMS = maude if BUILD_COMPILER FULL_COMPILER_LIB = ../FullCompiler/libfullCompiler.a endif maude_CPPFLAGS = \ -I$(top_srcdir)/src/Utility \ -I$(top_srcdir)/src/Temporal \ -I$(top_srcdir)/src/Interface \ -I$(top_srcdir)/src/Core \ -I$(top_srcdir)/src/Variable \ -I$(top_srcdir)/src/FullCompiler \ -I$(top_srcdir)/src/Higher \ -I$(top_srcdir)/src/CUI_Theory \ -I$(top_srcdir)/src/S_Theory \ -I$(top_srcdir)/src/NA_Theory \ -I$(top_srcdir)/src/FreeTheory \ -I$(top_srcdir)/src/ObjectSystem \ -I$(top_srcdir)/src/Mixfix \ -I$(top_srcdir)/src/BuiltIn \ -I$(top_srcdir)/src/SMT \ -I$(top_srcdir)/src/IO_Stuff \ -I$(top_srcdir)/src/ACU_Persistent \ -I$(top_srcdir)/src/ACU_Theory \ -I$(top_srcdir)/src/AU_Persistent \ -I$(top_srcdir)/src/AU_Theory \ -I$(top_srcdir)/src/Meta \ -I$(top_srcdir)/src/3rdParty \ -I$(top_srcdir)/src/FullCompiler \ -I$(top_srcdir)/src/StrategyLanguage \ -I$(top_srcdir)/src/Mixfix maude_LDADD = \ ../Mixfix/libmixfix.a \ ../StrategyLanguage/libstrategyLanguage.a \ ../Meta/libmeta.a \ ../ObjectSystem/libobjectSystem.a \ ../BuiltIn/libbuiltIn.a \ ../SMT/libSMT.a \ ../Higher/libhigher.a \ ../FreeTheory/libfreeTheory.a \ ../AU_Theory/libAU_Theory.a \ ../AU_Persistent/libAU_Persistent.a \ ../ACU_Theory/libACU_Theory.a \ ../ACU_Persistent/libACU_Persistent.a \ ../CUI_Theory/libCUI_Theory.a \ ../S_Theory/libS_Theory.a \ ../NA_Theory/libNA_Theory.a \ ../Variable/libvariable.a \ ../Interface/libinterface.a \ ../Core/libcore.a \ ../Parser/libparser.a \ ../Temporal/libtemporal.a \ ../IO_Stuff/libIO_Stuff.a \ $(FULL_COMPILER_LIB) \ ../Utility/libutility.a \ $(CVC4_LIB) \ $(YICES2_LIB) \ $(GMP_LIBS) \ $(BUDDY_LIB) \ $(TECLA_LIBS) \ $(LIBSIGSEGV_LIB) maude_SOURCES = \ main.cc data_DATA = \ prelude.maude \ model-checker.maude \ socket.maude \ linear.maude \ machine-int.maude \ term-order.maude \ metaInterpreter.maude \ smt.maude \ file.maude EXTRA_DIST = \ prelude.maude \ model-checker.maude \ socket.maude \ linear.maude \ machine-int.maude \ term-order.maude \ metaInterpreter.maude \ smt.maude \ file.maude \ process.maude maude-3.1/src/Main/model-checker.maude0000644000175200017520000002306013741217774014605 00000000000000***( This file is part of the Maude 2 interpreter. Copyright 1997-2006 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ) *** *** Maude LTL satisfiability solver and model checker. *** Version 2.3. *** fmod LTL is protecting BOOL . sort Formula . *** primitive LTL operators ops True False : -> Formula [ctor format (g o)] . op ~_ : Formula -> Formula [ctor prec 53 format (r o d)] . op _/\_ : Formula Formula -> Formula [comm ctor gather (E e) prec 55 format (d r o d)] . op _\/_ : Formula Formula -> Formula [comm ctor gather (E e) prec 59 format (d r o d)] . op O_ : Formula -> Formula [ctor prec 53 format (r o d)] . op _U_ : Formula Formula -> Formula [ctor prec 63 format (d r o d)] . op _R_ : Formula Formula -> Formula [ctor prec 63 format (d r o d)] . *** defined LTL operators op _->_ : Formula Formula -> Formula [gather (e E) prec 65 format (d r o d)] . op _<->_ : Formula Formula -> Formula [prec 65 format (d r o d)] . op <>_ : Formula -> Formula [prec 53 format (r o d)] . op []_ : Formula -> Formula [prec 53 format (r d o d)] . op _W_ : Formula Formula -> Formula [prec 63 format (d r o d)] . op _|->_ : Formula Formula -> Formula [prec 63 format (d r o d)] . *** leads-to op _=>_ : Formula Formula -> Formula [gather (e E) prec 65 format (d r o d)] . op _<=>_ : Formula Formula -> Formula [prec 65 format (d r o d)] . vars f g : Formula . eq f -> g = ~ f \/ g . eq f <-> g = (f -> g) /\ (g -> f) . eq <> f = True U f . eq [] f = False R f . eq f W g = (f U g) \/ [] f . eq f |-> g = [](f -> (<> g)) . eq f => g = [] (f -> g) . eq f <=> g = [] (f <-> g) . *** negative normal form eq ~ True = False . eq ~ False = True . eq ~ ~ f = f . eq ~ (f \/ g) = ~ f /\ ~ g . eq ~ (f /\ g) = ~ f \/ ~ g . eq ~ O f = O ~ f . eq ~(f U g) = (~ f) R (~ g) . eq ~(f R g) = (~ f) U (~ g) . endfm fmod LTL-SIMPLIFIER is including LTL . *** The simplifier is based on: *** Kousha Etessami and Gerard J. Holzman, *** "Optimizing Buchi Automata", p153-167, CONCUR 2000, LNCS 1877. *** We use the Maude sort system to do much of the work. sorts TrueFormula FalseFormula PureFormula PE-Formula PU-Formula . subsort TrueFormula FalseFormula < PureFormula < PE-Formula PU-Formula < Formula . op True : -> TrueFormula [ctor ditto] . op False : -> FalseFormula [ctor ditto] . op _/\_ : PE-Formula PE-Formula -> PE-Formula [ctor ditto] . op _/\_ : PU-Formula PU-Formula -> PU-Formula [ctor ditto] . op _/\_ : PureFormula PureFormula -> PureFormula [ctor ditto] . op _\/_ : PE-Formula PE-Formula -> PE-Formula [ctor ditto] . op _\/_ : PU-Formula PU-Formula -> PU-Formula [ctor ditto] . op _\/_ : PureFormula PureFormula -> PureFormula [ctor ditto] . op O_ : PE-Formula -> PE-Formula [ctor ditto] . op O_ : PU-Formula -> PU-Formula [ctor ditto] . op O_ : PureFormula -> PureFormula [ctor ditto] . op _U_ : PE-Formula PE-Formula -> PE-Formula [ctor ditto] . op _U_ : PU-Formula PU-Formula -> PU-Formula [ctor ditto] . op _U_ : PureFormula PureFormula -> PureFormula [ctor ditto] . op _U_ : TrueFormula Formula -> PE-Formula [ctor ditto] . op _U_ : TrueFormula PU-Formula -> PureFormula [ctor ditto] . op _R_ : PE-Formula PE-Formula -> PE-Formula [ctor ditto] . op _R_ : PU-Formula PU-Formula -> PU-Formula [ctor ditto] . op _R_ : PureFormula PureFormula -> PureFormula [ctor ditto] . op _R_ : FalseFormula Formula -> PU-Formula [ctor ditto] . op _R_ : FalseFormula PE-Formula -> PureFormula [ctor ditto] . vars p q r s : Formula . var pe : PE-Formula . var pu : PU-Formula . var pr : PureFormula . *** Rules 1, 2 and 3; each with its dual. eq (p U r) /\ (q U r) = (p /\ q) U r . eq (p R r) \/ (q R r) = (p \/ q) R r . eq (p U q) \/ (p U r) = p U (q \/ r) . eq (p R q) /\ (p R r) = p R (q /\ r) . eq True U (p U q) = True U q . eq False R (p R q) = False R q . *** Rules 4 and 5 do most of the work. eq p U pe = pe . eq p R pu = pu . *** An extra rule in the same style. eq O pr = pr . *** We also use the rules from: *** Fabio Somenzi and Roderick Bloem, *** "Efficient Buchi Automata from LTL Formulae", *** p247-263, CAV 2000, LNCS 1633. *** that are not subsumed by the previous system. *** Four pairs of duals. eq O p /\ O q = O (p /\ q) . eq O p \/ O q = O (p \/ q) . eq O p U O q = O (p U q) . eq O p R O q = O (p R q) . eq True U O p = O (True U p) . eq False R O p = O (False R p) . eq (False R (True U p)) \/ (False R (True U q)) = False R (True U (p \/ q)) . eq (True U (False R p)) /\ (True U (False R q)) = True U (False R (p /\ q)) . *** <= relation on formula op _<=_ : Formula Formula -> Bool [prec 75] . eq p <= p = true . eq False <= p = true . eq p <= True = true . ceq p <= (q /\ r) = true if (p <= q) /\ (p <= r) . ceq p <= (q \/ r) = true if p <= q . ceq (p /\ q) <= r = true if p <= r . ceq (p \/ q) <= r = true if (p <= r) /\ (q <= r) . ceq p <= (q U r) = true if p <= r . ceq (p R q) <= r = true if q <= r . ceq (p U q) <= r = true if (p <= r) /\ (q <= r) . ceq p <= (q R r) = true if (p <= q) /\ (p <= r) . ceq (p U q) <= (r U s) = true if (p <= r) /\ (q <= s) . ceq (p R q) <= (r R s) = true if (p <= r) /\ (q <= s) . *** condition rules depending on <= relation ceq p /\ q = p if p <= q . ceq p \/ q = q if p <= q . ceq p /\ q = False if p <= ~ q . ceq p \/ q = True if ~ p <= q . ceq p U q = q if p <= q . ceq p R q = q if q <= p . ceq p U q = True U q if p =/= True /\ ~ q <= p . ceq p R q = False R q if p =/= False /\ q <= ~ p . ceq p U (q U r) = q U r if p <= q . ceq p R (q R r) = q R r if q <= p . endfm fmod SAT-SOLVER is protecting LTL . *** formula lists and results sorts FormulaList SatSolveResult TautCheckResult . subsort Formula < FormulaList . subsort Bool < SatSolveResult TautCheckResult . op nil : -> FormulaList [ctor] . op _;_ : FormulaList FormulaList -> FormulaList [ctor assoc id: nil] . op model : FormulaList FormulaList -> SatSolveResult [ctor] . op satSolve : Formula ~> SatSolveResult [special ( id-hook SatSolverSymbol op-hook trueSymbol (True : ~> Formula) op-hook falseSymbol (False : ~> Formula) op-hook notSymbol (~_ : Formula ~> Formula) op-hook nextSymbol (O_ : Formula ~> Formula) op-hook andSymbol (_/\_ : Formula Formula ~> Formula) op-hook orSymbol (_\/_ : Formula Formula ~> Formula) op-hook untilSymbol (_U_ : Formula Formula ~> Formula) op-hook releaseSymbol (_R_ : Formula Formula ~> Formula) op-hook formulaListSymbol (_;_ : FormulaList FormulaList ~> FormulaList) op-hook nilFormulaListSymbol (nil : ~> FormulaList) op-hook modelSymbol (model : FormulaList FormulaList ~> SatSolveResult) term-hook falseTerm (false) )] . op counterexample : FormulaList FormulaList -> TautCheckResult [ctor] . op tautCheck : Formula ~> TautCheckResult . op $invert : SatSolveResult -> TautCheckResult . var F : Formula . vars L C : FormulaList . eq tautCheck(F) = $invert(satSolve(~ F)) . eq $invert(false) = true . eq $invert(model(L, C)) = counterexample(L, C) . endfm fmod SATISFACTION is protecting BOOL . sorts State Prop . op _|=_ : State Prop -> Bool [frozen] . endfm fmod MODEL-CHECKER is protecting QID . including SATISFACTION . including LTL . subsort Prop < Formula . *** transitions and results sorts RuleName Transition TransitionList ModelCheckResult . subsort Qid < RuleName . subsort Transition < TransitionList . subsort Bool < ModelCheckResult . ops unlabeled deadlock : -> RuleName . op {_,_} : State RuleName -> Transition [ctor] . op nil : -> TransitionList [ctor] . op __ : TransitionList TransitionList -> TransitionList [ctor assoc id: nil] . op counterexample : TransitionList TransitionList -> ModelCheckResult [ctor] . op modelCheck : State Formula ~> ModelCheckResult [special ( id-hook ModelCheckerSymbol op-hook trueSymbol (True : ~> Formula) op-hook falseSymbol (False : ~> Formula) op-hook notSymbol (~_ : Formula ~> Formula) op-hook nextSymbol (O_ : Formula ~> Formula) op-hook andSymbol (_/\_ : Formula Formula ~> Formula) op-hook orSymbol (_\/_ : Formula Formula ~> Formula) op-hook untilSymbol (_U_ : Formula Formula ~> Formula) op-hook releaseSymbol (_R_ : Formula Formula ~> Formula) op-hook satisfiesSymbol (_|=_ : State Formula ~> Bool) op-hook qidSymbol ( : ~> Qid) op-hook unlabeledSymbol (unlabeled : ~> RuleName) op-hook deadlockSymbol (deadlock : ~> RuleName) op-hook transitionSymbol ({_,_} : State RuleName ~> Transition) op-hook transitionListSymbol (__ : TransitionList TransitionList ~> TransitionList) op-hook nilTransitionListSymbol (nil : ~> TransitionList) op-hook counterexampleSymbol (counterexample : TransitionList TransitionList ~> ModelCheckResult) term-hook trueTerm (true) )] . endfm maude-3.1/src/Main/main.cc0000755000175200017520000002274313734515251012324 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2010 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // main() function and misc functions. // #include "sys/param.h" #ifdef ALPHA #include #endif // utility stuff #include "macros.hh" #include "vector.hh" #include "tty.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "higher.hh" #include "freeTheory.hh" #include "builtIn.hh" #include "objectSystem.hh" #include "strategyLanguage.hh" #include "mixfix.hh" // interface class definitions #include "term.hh" // core class definitions #include "lineNumber.hh" // built class definitions #include "randomOpSymbol.hh" // object system class definitions #include "processManagerSymbol.hh" #include "fileManagerSymbol.hh" // system class definitions #include "IO_Manager.hh" // mixfix frontend definitions #include "token.hh" #include "userLevelRewritingContext.hh" #include "fileTable.hh" #include "directoryManager.hh" #include "mixfixModule.hh" #include "interpreter.hh" #include "global.hh" int main(int argc, char* argv[]) { // // Global function declatations // void printBanner(ostream& s); void printHelp(const char* name); void printVersion(); void createRootBuffer(FILE* fp, bool forceInteractive); bool includeFile(const string& directory, const string& fileName, bool silent, int lineNr); extern Vector pendingFiles; const char* isFlag(const char* arg, const char* flag); bool findExecutableDirectory(string& directory, string& executable); bool findPrelude(string& directory, string& fileName); void checkForPending(); bool lineWrapping = true; bool handleCtrlC = true; bool readPrelude = true; bool forceInteractive = false; bool outputBanner = true; int ansiColor = UNDECIDED; int useTecla = UNDECIDED; for (int i = 1; i < argc; i++) { char* arg = argv[i]; if (arg[0] == '-') { if (const char* s = isFlag(arg, "-xml-log=")) interpreter.beginXmlLog(s); else if (const char* s = isFlag(arg, "-random-seed=")) RandomOpSymbol::setGlobalSeed(strtoul(s, 0, 0)); else if (strcmp(arg, "--help") == 0) printHelp(argv[0]); else if (strcmp(arg, "--version") == 0) printVersion(); else if (strcmp(arg, "-no-mixfix") == 0) interpreter.setPrintFlag(Interpreter::PRINT_MIXFIX, false); else if (strcmp(arg, "-ansi-color") == 0) ansiColor = true; else if (strcmp(arg, "-no-ansi-color") == 0) ansiColor = false; else if (strcmp(arg, "-tecla") == 0) useTecla = true; else if (strcmp(arg, "-no-tecla") == 0) useTecla = false; else if (strcmp(arg, "-no-prelude") == 0) readPrelude = false; else if (strcmp(arg, "-no-banner") == 0) outputBanner = false; else if (strcmp(arg, "-no-advise") == 0) { if (!alwaysAdviseFlag) globalAdvisoryFlag = false; } else if (strcmp(arg, "-always-advise") == 0) { alwaysAdviseFlag = true; globalAdvisoryFlag = true; } else if (strcmp(arg, "-no-wrap") == 0) lineWrapping = false; else if (strcmp(arg, "-batch") == 0) handleCtrlC = false; else if (strcmp(arg, "-interactive") == 0) forceInteractive = true; else if (strcmp(arg, "-print-to-stderr") == 0) UserLevelRewritingContext::setPrintAttributeStream(&cerr); else if (strcmp(arg, "-show-pid") == 0) cerr << getpid() << endl; else if (strcmp(arg, "-erewrite-loop-mode") == 0) interpreter.setFlag(Interpreter::EREWRITE_LOOP_MODE, true); else if (strcmp(arg, "-allow-processes") == 0) ProcessManagerSymbol::setAllowProcesses(true); else if (strcmp(arg, "-allow-files") == 0) FileManagerSymbol::setAllowFiles(true); else if (strcmp(arg, "-trust") == 0) { FileManagerSymbol::setAllowFiles(true); ProcessManagerSymbol::setAllowProcesses(true); } else { IssueWarning(LineNumber(FileTable::COMMAND_LINE) << ": unrecognised flag: " << QUOTE(arg)); } } else pendingFiles.append(arg); } if (lineWrapping) ioManager.setAutoWrap(); if (ansiColor == UNDECIDED) { // // By default we allow ANSI escape codes unless // environment variable TERM is set to dumb; or // our standard output is not a terminal. // ansiColor = true; const char* term = getenv("TERM"); if ((term != 0 && strcmp("dumb", term) == 0) || isatty(STDOUT_FILENO) == 0) ansiColor = false; } Tty::setEscapeSequencesAllowed(ansiColor); bool inputIsTerminal = (isatty(STDIN_FILENO) == 1); if (useTecla == UNDECIDED) { // // By default we use tecla for input unless // environment variable TERM is set to emacs or dumb; // or our standard input is not a terminal. // useTecla = true; const char* term = getenv("TERM"); if ((term != 0 && (strcmp("emacs", term) == 0 || strcmp("dumb", term) == 0)) || !inputIsTerminal) useTecla = false; } // // Make sure we flush cout before we output any error messages so things hit the tty in a consistent order. // (void) cerr.tie(&cout); if (outputBanner) printBanner(cout); createRootBuffer(stdin, forceInteractive); UserLevelRewritingContext::setHandlers(handleCtrlC); if (useTecla) ioManager.setCommandLineEditing(); if (inputIsTerminal || forceInteractive) { // // Prompt for input from stdio, even if useTecla == false, or Tecla is not linked // ioManager.setUsePromptsAnyway(); } directoryManager.initialize(); string executable(argv[0]); findExecutableDirectory(executableDirectory, executable); if (readPrelude) { string directory; string fileName(PRELUDE_NAME); if (findPrelude(directory, fileName)) includeFile(directory, fileName, true, FileTable::AUTOMATIC); } else checkForPending(); // because we won't hit an EOF (void) UserLevelRewritingContext::commandLoop(); return 0; } ostream& operator<<(ostream& s, const LineNumber& lineNumber) { fileTable.printLineNumber(s, lineNumber.getLineNumber()); return s; } const char* isFlag(const char* arg, const char* flag) { char f; do { f = *flag++; if (f == 0) return arg; } while (f == *arg++); return 0; } void printHelp(const char* name) { cout << "Maude interpreter\n" << "Usage: " << name << " [options] [files]\n" << "Options:\n" << " --help\t\tDisplay this information\n" << " --version\t\tDisplay version number\n" << " -no-prelude\t\tDo not read in the standard prelude\n" << " -no-banner\t\tDo not output banner on startup\n" << " -no-advise\t\tNo advisories on startup\n" << " -always-advise\tAlways show advisories regardless\n" << " -no-mixfix\t\tDo not use mixfix notation for output\n" << " -no-wrap\t\tDo not automatic line wrapping for output\n" << " -ansi-color\t\tUse ANSI control sequences\n" << " -no-ansi-color\tDo not use ANSI control sequences\n" << " -tecla\t\tUse tecla command line editing\n" << " -no-tecla\t\tDo not use tecla command line editing\n" << " -batch\t\tRun in batch mode\n" << " -interactive\t\tRun in interactive mode\n" << " -print-to-stderr\tPrint attribute should use stderr rather than stdout\n" << " -random-seed=\tSet seed for random number generator\n" << " -xml-log=\tSet file in which to produce an xml log\n" << " -show-pid\t\tPrint process id to stderr before printing banner\n" << " -erewrite-loop-mode\tUse external object rewriting for loop mode\n" << " -allow-processes\tAllow running arbitrary executables\n" << " -allow-files\t\tAllow operations on files\n" << " -trust\t\tAllow all potentially risky capabilities\n" << "\n" << "Send bug reports to: " << PACKAGE_BUGREPORT << endl; exit(0); } void printVersion() { cout << PACKAGE_VERSION << endl; exit(0); } bool findExecutableDirectory(string& directory, string& executable) { string::size_type p = executable.rfind('/'); if (p == string::npos) return directoryManager.searchPath("PATH", directory, executable, X_OK); else { directoryManager.realPath(executable.substr(0, p), directory); return directoryManager.checkAccess(directory, executable, X_OK); } } bool findPrelude(string& directory, string& fileName) { if (directoryManager.searchPath(MAUDE_LIB, directory, fileName, R_OK)) return true; if (!(executableDirectory.empty()) && directoryManager.checkAccess(executableDirectory, fileName, R_OK)) { directory = executableDirectory; return true; } if (directoryManager.checkAccess(".", fileName, R_OK)) { directory = "."; return true; } IssueWarning(LineNumber(FileTable::AUTOMATIC) << ": unable to locate file: " << QUOTE(fileName)); return false; } maude-3.1/src/Main/term-order.maude0000644000175200017520000000312313741220000014131 00000000000000***( This file is part of the Maude 2 interpreter. Copyright 1997-2006 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ) *** *** Strict total ordering on terms of a given kind. *** Version 2.3. *** fmod TERM-ORDER{X :: TRIV} is protecting EXT-BOOL . protecting CONVERSION . protecting META-LEVEL . vars E F : [X$Elt] . vars Q P : Qid . vars A B : NeTermList . vars C D : TermList . vars T U : Term . op lt : [X$Elt] [X$Elt] -> Bool . eq lt(E, F) = $lt(upTerm(E), upTerm(F)) . op $lt : TermList TermList -> Bool . eq $lt(Q, P) = string(Q) < string(P) . eq $lt(Q[A], P) = $lt(Q, P) . eq $lt(Q, P[B]) = $lt(Q, P) or-else Q == P . eq $lt(Q[A], P[B]) = if Q == P then $lt(A, B) else $lt(Q, P) fi . eq $lt(empty, B) = true . eq $lt(C, empty) = false . eq $lt((T, C), (U, D)) = if T == U then $lt(C, D) else $lt(T, U) fi . endfm maude-3.1/src/Main/machine-int.maude0000644000175200017520000000757513741217773014313 00000000000000***( This file is part of the Maude 2 interpreter. Copyright 1997-2006 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ) *** *** Approximation of Maude 1.0 MachineInts. *** Version 2.3. *** *** Note that 0 lives in MachineZero. Also using out of range *** integer constants may cause incorrect results. MACHINE-INT may *** be instanciated using a view that maps $nrBits to any power of *** 2 that is >= 2. *** fmod RENAMED-INT is protecting INT * ( sort Zero to MachineZero, sort NzNat to NzMachineNat, sort Nat to MachineNat, sort NzInt to NzMachineInt, sort Int to MachineInt, op s_ : Nat -> NzNat to $succ, op sd : Nat Nat -> Nat to $sd, op -_ : Int -> Int to $neg, op _+_ : Int Int -> Int to $add, op _-_ : Int Int -> Int to $sub, op _*_ : NzInt NzInt -> NzInt to $mult, op _quo_ : Int NzInt -> Int to $quo, op _rem_ : Int NzInt -> Int to $rem, op _^_ : Int Nat -> Int to $pow, op abs : NzInt -> NzNat to $abs, op gcd : NzInt Int -> NzNat to $gcd, op lcm : NzInt NzInt -> NzNat to $lcm, op min : NzInt NzInt -> NzInt to $min, op max : NzInt NzInt -> NzInt to $max, op _xor_ : Int Int -> Int to $xor, op _>>_ : Int Nat -> Int to $shr, op _<<_ : Int Nat -> Int to $shl, op _divides_ : NzInt Int -> Bool to $divides ) . endfm fth BIT-WIDTH is protecting RENAMED-INT . op $nrBits : -> NzMachineNat . var N : NzMachineNat . eq $divides(2, $nrBits) = true [nonexec] . ceq $divides(2, N) = true if $divides(N, $nrBits) /\ N > 1 [nonexec] . endfth view 32-BIT from BIT-WIDTH to RENAMED-INT is op $nrBits to term 32 . endv view 64-BIT from BIT-WIDTH to RENAMED-INT is op $nrBits to term 64 . endv fmod MACHINE-INT{X :: BIT-WIDTH} is *** *** Note that operations *** ~_ _&_ _|_ _<_ _<=_ _>_ _=>_ *** are inherited unmodified. *** vars I J : MachineInt . var K : NzMachineInt . op $mask : -> NzMachineInt [memo] . eq $mask = $sub($nrBits, 1) . op $sign : -> NzMachineInt [memo] . eq $sign = $pow(2, $mask) . op maxMachineInt : -> NzMachineInt [memo] . eq maxMachineInt = $sub($sign, 1) . op minMachineInt : -> NzMachineInt [memo] . eq minMachineInt = $neg($sign) . op $wrap : MachineInt -> MachineInt . eq $wrap(I) = (I & maxMachineInt) | $neg(I & $sign) . op _+_ : MachineInt MachineInt -> MachineInt [assoc comm prec 33] . eq I + J = $wrap($add(I, J)) . op -_ : MachineInt -> MachineInt . eq - I = $wrap($neg(I)) . op _-_ : MachineInt MachineInt -> MachineInt [prec 33 gather (E e)] . eq I - J = $wrap($sub(I, J)) . op _*_ : MachineInt MachineInt -> MachineInt [assoc comm prec 31] . eq I * J = $wrap($mult(I, J)) . op _/_ : MachineInt NzMachineInt -> MachineInt [prec 31 gather (E e)] . eq I / K = $wrap($quo(I, K)) . op _%_ : MachineInt NzMachineInt -> MachineInt [prec 31 gather (E e)] . eq I % K = $rem(I, K) . op _^_ : MachineInt MachineInt -> MachineInt [prec 55 gather (E e)] . eq I ^ J = $xor(I, J) . op _>>_ : MachineInt MachineInt -> MachineInt [prec 35 gather (E e)] . eq I >> J = $shr(I, ($mask & J)) . op _<<_ : MachineInt MachineInt -> MachineInt [prec 35 gather (E e)] . eq I << J = $wrap($shl(I, ($mask & J))) . endfm maude-3.1/src/Main/process.maude0000644000175200017520000000573213741217776013571 00000000000000***( This file is part of the Maude 3 interpreter. Copyright 2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ) *** *** Maude process creation and control. *** Version 3.1. *** sload socket fmod STRING-LIST is protecting LIST{String} * (sort NeList{String} to NeStringList, sort List{String} to StringList) . endfm mod PROCESS is including SOCKET . protecting STRING-LIST . sorts ProcessOption ProcessOptionSet . subsort ProcessOption < ProcessOptionSet . op none : -> ProcessOptionSet [ctor] . sort ExitStatus . op normalExit : Nat -> ExitStatus [ctor] . op terminatedBySignal : String -> ExitStatus [ctor] . op process : Nat -> Oid [ctor] . op createProcess : Oid Oid String StringList ProcessOptionSet -> Msg [ctor msg format (b o)] . op createdProcess : Oid Oid Oid Oid Oid -> Msg [ctor msg format (m o)] . op signalProcess : Oid Oid String -> Msg [ctor msg format (b o)] . op signaledProcess : Oid Oid -> Msg [ctor msg format (m o)] . op waitForExit : Oid Oid -> Msg [ctor msg format (b o)] . op exited : Oid Oid ExitStatus -> Msg [ctor msg format (m o)] . op processError : Oid Oid String -> Msg [ctor msg format (r o)] . op processManager : -> Oid [special ( id-hook ProcessManagerSymbol op-hook socketManagerSymbol (socketManager : ~> Oid) op-hook succSymbol (s_ : Nat ~> NzNat) op-hook stringSymbol ( : ~> String) op-hook nilStringListSymbol (nil : ~> StringList) op-hook stringListSymbol (__ : StringList StringList ~> StringList) op-hook emptyProcessOptionSetSymbol (none : ~> ProcessOptionSet) op-hook normalExitSymbol (normalExit : Nat ~> ExitStatus) op-hook terminatedBySignalSymbol (terminatedBySignal : String ~> ExitStatus) op-hook processOidSymbol (process : Nat ~> Oid) op-hook createProcessMsg (createProcess : Oid Oid String StringList ProcessOptionSet ~> Msg) op-hook createdProcessMsg (createdProcess : Oid Oid Oid Oid Oid ~> Msg) op-hook signalProcessMsg (signalProcess : Oid Oid String ~> Msg) op-hook signaledProcessMsg (signaledProcess : Oid Oid ~> Msg) op-hook waitForExitMsg (waitForExit : Oid Oid ~> Msg) op-hook exitedMsg (exited : Oid Oid ExitStatus ~> Msg) op-hook processErrorMsg (processError : Oid Oid String ~> Msg))] . endm maude-3.1/src/Main/file.maude0000644000175200017520000001042613741217771013021 00000000000000***( This file is part of the Maude 3 interpreter. Copyright 2019 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ) *** *** Maude file and standard stream external objects. *** Version 3.0. *** mod COMMON-MESSAGES is protecting STRING . including CONFIGURATION . op gotLine : Oid Oid String -> Msg [ctor msg format (m o)] . op write : Oid Oid String -> Msg [ctor msg format (b o)] . op wrote : Oid Oid -> Msg [ctor msg format (m o)] . endm mod FILE is including COMMON-MESSAGES . protecting INT . sort Base . ops start current end : -> Base [ctor] . op file : Nat -> Oid [ctor] . op openFile : Oid Oid String String -> Msg [ctor msg format (b o)] . op openedFile : Oid Oid Oid -> Msg [ctor msg format (m o)] . op getLine : Oid Oid -> Msg [ctor msg format (b o)] . op getChars : Oid Oid Nat -> Msg [ctor msg format (b o)] . op gotChars : Oid Oid String -> Msg [ctor msg format (m o)] . op flush : Oid Oid -> Msg [ctor msg format (b o)] . op flushed : Oid Oid -> Msg [ctor msg format (m o)] . op setPosition : Oid Oid Int Base -> Msg [ctor msg format (b o)] . op positionSet : Oid Oid -> Msg [ctor msg format (m o)] . op getPosition : Oid Oid -> Msg [ctor msg format (b o)] . op positionGot : Oid Oid Nat -> Msg [ctor msg format (m o)] . op closeFile : Oid Oid -> Msg [ctor msg format (b o)] . op closedFile : Oid Oid -> Msg [ctor msg format (m o)] . op fileError : Oid Oid String -> Msg [ctor msg format (m o)] . op fileManager : -> Oid [special ( id-hook FileManagerSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook minusSymbol (-_ : NzNat ~> Int) op-hook stringSymbol ( : ~> String) op-hook fileOidSymbol (file : Nat ~> Oid) op-hook currentSymbol (current : ~> Base) op-hook endSymbol (end : ~> Base) op-hook openFileMsg (openFile : Oid Oid String String ~> Msg) op-hook openedFileMsg (openedFile : Oid Oid Oid ~> Msg) op-hook getLineMsg (getLine : Oid Oid ~> Msg) op-hook gotLineMsg (gotLine : Oid Oid String ~> Msg) op-hook getCharsMsg (getChars : Oid Oid Nat ~> Msg) op-hook gotCharsMsg (gotChars : Oid Oid String ~> Msg) op-hook writeMsg (write : Oid Oid String ~> Msg) op-hook wroteMsg (wrote : Oid Oid ~> Msg) op-hook flushMsg (flush : Oid Oid ~> Msg) op-hook flushedMsg (flushed : Oid Oid ~> Msg) op-hook setPositionMsg (setPosition : Oid Oid Int Base ~> Msg) op-hook positionSetMsg (positionSet : Oid Oid ~> Msg) op-hook getPositionMsg (getPosition : Oid Oid ~> Msg) op-hook positionGotMsg (positionGot : Oid Oid Nat ~> Msg) op-hook closeFileMsg (closeFile : Oid Oid ~> Msg) op-hook closedFileMsg (closedFile : Oid Oid ~> Msg) op-hook fileErrorMsg (fileError : Oid Oid String ~> Msg))] . endm mod STD-STREAM is including COMMON-MESSAGES . op getLine : Oid Oid String -> Msg [ctor msg format (b o)] . op stdin : -> Oid [special ( id-hook StreamManagerSymbol (stdin) op-hook stringSymbol ( : ~> String) op-hook getLineMsg (getLine : Oid Oid String ~> Msg) op-hook gotLineMsg (gotLine : Oid Oid String ~> Msg))] . op stdout : -> Oid [special ( id-hook StreamManagerSymbol (stdout) op-hook stringSymbol ( : ~> String) op-hook writeMsg (write : Oid Oid String ~> Msg) op-hook wroteMsg (wrote : Oid Oid ~> Msg))] . op stderr : -> Oid [special ( id-hook StreamManagerSymbol (stderr) op-hook stringSymbol ( : ~> String) op-hook writeMsg (write : Oid Oid String ~> Msg) op-hook wroteMsg (wrote : Oid Oid ~> Msg))] . endm maude-3.1/src/Main/socket.maude0000644000175200017520000000543213741217777013401 00000000000000***( This file is part of the Maude 2 interpreter. Copyright 2004-2006 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ) *** *** Maude internet socket external objects. *** Version 2.3. *** mod SOCKET is protecting STRING . including CONFIGURATION . op socket : Nat -> Oid [ctor] . op createClientTcpSocket : Oid Oid String Nat -> Msg [ctor msg format (b o)] . op createServerTcpSocket : Oid Oid Nat Nat -> Msg [ctor msg format (b o)] . op createdSocket : Oid Oid Oid -> Msg [ctor msg format (m o)] . op acceptClient : Oid Oid -> Msg [ctor msg format (b o)] . op acceptedClient : Oid Oid String Oid -> Msg [ctor msg format (m o)] . op send : Oid Oid String -> Msg [ctor msg format (b o)] . op sent : Oid Oid -> Msg [ctor msg format (m o)] . op receive : Oid Oid -> Msg [ctor msg format (b o)] . op received : Oid Oid String -> Msg [ctor msg format (m o)] . op closeSocket : Oid Oid -> Msg [ctor msg format (b o)] . op closedSocket : Oid Oid String -> Msg [ctor msg format (m o)] . op socketError : Oid Oid String -> Msg [ctor msg format (r o)] . op socketManager : -> Oid [special ( id-hook SocketManagerSymbol op-hook succSymbol (s_ : Nat ~> NzNat) op-hook stringSymbol ( : ~> String) op-hook socketOidSymbol (socket : Nat ~> Oid) op-hook createClientTcpSocketMsg (createClientTcpSocket : Oid Oid String Nat ~> Msg) op-hook createServerTcpSocketMsg (createServerTcpSocket : Oid Oid Nat Nat ~> Msg) op-hook createdSocketMsg (createdSocket : Oid Oid Oid ~> Msg) op-hook acceptClientMsg (acceptClient : Oid Oid ~> Msg) op-hook acceptedClientMsg (acceptedClient : Oid Oid String Oid ~> Msg) op-hook sendMsg (send : Oid Oid String ~> Msg) op-hook sentMsg (sent : Oid Oid ~> Msg) op-hook receiveMsg (receive : Oid Oid ~> Msg) op-hook receivedMsg (received : Oid Oid String ~> Msg) op-hook closeSocketMsg (closeSocket : Oid Oid ~> Msg) op-hook closedSocketMsg (closedSocket : Oid Oid String ~> Msg) op-hook socketErrorMsg (socketError : Oid Oid String ~> Msg))] . endm maude-3.1/src/Main/metaInterpreter.maude0000644000175200017520000004317013741217773015260 00000000000000***( This file is part of the Maude 3 interpreter. Copyright 2009-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. ) *** *** Maude meta-interpreters. *** Version 3.1. *** mod META-INTERPRETER is protecting META-LEVEL . including CONFIGURATION . sort RewriteCount . subsort Nat < RewriteCount . sorts InterpreterOption InterpreterOptionSet . subsort InterpreterOption < InterpreterOptionSet . op none : -> InterpreterOptionSet [ctor] . op interpreter : Nat -> Oid [ctor] . op createInterpreter : Oid Oid InterpreterOptionSet -> Msg [ctor msg format (b o)] . op createdInterpreter : Oid Oid Oid -> Msg [ctor msg format (m o)] . op insertModule : Oid Oid Module -> Msg [ctor msg format (b o)] . op insertedModule : Oid Oid -> Msg [ctor msg format (m o)] . op insertView : Oid Oid View -> Msg [ctor msg format (b o)] . op insertedView : Oid Oid -> Msg [ctor msg format (m o)] . op showModule : Oid Oid Qid Bool -> Msg [ctor msg format (b o)] . op showingModule : Oid Oid Module -> Msg [ctor msg format (m o)] . op showView : Oid Oid Qid -> Msg [ctor msg format (b o)] . op showingView : Oid Oid View -> Msg [ctor msg format (m o)] . op printTerm : Oid Oid Qid VariableSet Term PrintOptionSet -> Msg [ctor msg format (b o)] . op printedTerm : Oid Oid QidList -> Msg [ctor msg format (m o)] . op parseTerm : Oid Oid Qid VariableSet QidList Type? -> Msg [ctor msg format (b o)] . op parsedTerm : Oid Oid ResultPair? -> Msg [ctor msg format (m o)] . op getLesserSorts : Oid Oid Qid Type -> Msg [ctor msg format (b o)] . op gotLesserSorts : Oid Oid SortSet -> Msg [ctor msg format (m o)] . op getMaximalSorts : Oid Oid Qid Kind -> Msg [ctor msg format (b o)] . op gotMaximalSorts : Oid Oid SortSet -> Msg [ctor msg format (m o)] . op getMinimalSorts : Oid Oid Qid Kind -> Msg [ctor msg format (b o)] . op gotMinimalSorts : Oid Oid SortSet -> Msg [ctor msg format (m o)] . op compareTypes : Oid Oid Qid Type Type -> Msg [ctor msg format (b o)] . op comparedTypes : Oid Oid Bool Bool Bool -> Msg [ctor msg format (m o)] . op getKind : Oid Oid Qid Type -> Msg [ctor msg format (b o)] . op gotKind : Oid Oid Kind -> Msg [ctor msg format (m o)] . op getKinds : Oid Oid Qid -> Msg [ctor msg format (b o)] . op gotKinds : Oid Oid KindSet -> Msg [ctor msg format (m o)] . op getGlbTypes : Oid Oid Qid TypeSet -> Msg [ctor msg format (b o)] . op gotGlbTypes : Oid Oid TypeSet -> Msg [ctor msg format (m o)] . op getMaximalAritySet : Oid Oid Qid Qid TypeList Sort -> Msg [ctor msg format (b o)] . op gotMaximalAritySet : Oid Oid TypeListSet -> Msg [ctor msg format (m o)] . op normalizeTerm : Oid Oid Qid Term -> Msg [ctor msg format (b o)] . op normalizedTerm : Oid Oid Term Type -> Msg [ctor msg format (m o)] . op reduceTerm : Oid Oid Qid Term -> Msg [ctor msg format (b o)] . op reducedTerm : Oid Oid RewriteCount Term Type -> Msg [ctor msg format (m o)] . op rewriteTerm : Oid Oid Bound Qid Term -> Msg [ctor msg format (b o)] . op rewroteTerm : Oid Oid RewriteCount Term Type -> Msg [ctor msg format (m o)] . op frewriteTerm : Oid Oid Bound Nat Qid Term -> Msg [ctor msg format (b o)] . op frewroteTerm : Oid Oid RewriteCount Term Type -> Msg [ctor msg format (m o)] . op erewriteTerm : Oid Oid Bound Nat Qid Term -> Msg [ctor msg format (b o)] . op erewroteTerm : Oid Oid RewriteCount Term Type -> Msg [ctor msg format (m o)] . op srewriteTerm : Oid Oid Qid Term Strategy SrewriteOption Nat -> Msg [ctor msg format (b o)] . op srewroteTerm : Oid Oid RewriteCount Term Type -> Msg [ctor msg format (m o)] . op getSearchResult : Oid Oid Qid Term Term Condition Qid Bound Nat -> Msg [ctor msg format (b o)] . op gotSearchResult : Oid Oid RewriteCount Term Type Substitution -> Msg [ctor msg format (m o)] . op getSearchResultAndPath : Oid Oid Qid Term Term Condition Qid Bound Nat -> Msg [ctor msg format (b o)] . op gotSearchResultAndPath : Oid Oid RewriteCount Term Type Substitution Trace -> Msg [ctor msg format (m o)] . op getMatch : Oid Oid Qid Term Term Condition Nat -> Msg [ctor msg format (b o)] . op gotMatch : Oid Oid RewriteCount Substitution -> Msg [ctor msg format (m o)] . op getXmatch : Oid Oid Qid Term Term Condition Nat Bound Nat -> Msg [ctor msg format (b o)] . op gotXmatch : Oid Oid RewriteCount Substitution Context -> Msg [ctor msg format (m o)] . op applyRule : Oid Oid Qid Term Qid Substitution Nat -> Msg [ctor msg format (b o)] . op appliedRule : Oid Oid RewriteCount Term Type Substitution -> Msg [ctor msg format (m o)] . op applyRule : Oid Oid Qid Term Qid Substitution Nat Bound Nat -> Msg [ctor msg format (b o)] . op appliedRule : Oid Oid RewriteCount Term Type Substitution Context -> Msg [ctor msg format (m o)] . op getUnifier : Oid Oid Qid UnificationProblem Qid Nat -> Msg [ctor msg format (b o)] . op gotUnifier : Oid Oid Substitution Qid -> Msg [ctor msg format (m o)] . op getDisjointUnifier : Oid Oid Qid UnificationProblem Qid Nat -> Msg [ctor msg format (b o)] . op gotDisjointUnifier : Oid Oid Substitution Substitution Qid -> Msg [ctor msg format (m o)] . op getIrredundantUnifier : Oid Oid Qid UnificationProblem Qid Nat -> Msg [ctor msg format (b o)] . op gotIrredundantUnifier : Oid Oid Substitution Qid -> Msg [ctor msg format (m o)] . op getIrredundantDisjointUnifier : Oid Oid Qid UnificationProblem Qid Nat -> Msg [ctor msg format (b o)] . op gotIrredundantDisjointUnifier : Oid Oid Substitution Substitution Qid -> Msg [ctor msg format (m o)] . op getVariant : Oid Oid Qid Term TermList Bool Qid Nat -> Msg [ctor msg format (b o)] . op gotVariant : Oid Oid RewriteCount Term Substitution Qid Parent Bool -> Msg [ctor msg format (m o)] . op getVariantUnifier : Oid Oid Qid UnificationProblem TermList Qid VariantOptionSet Nat -> Msg [ctor msg format (b o)] . op gotVariantUnifier : Oid Oid RewriteCount Substitution Qid -> Msg [ctor msg format (m o)] . op getDisjointVariantUnifier : Oid Oid Qid UnificationProblem TermList Qid VariantOptionSet Nat -> Msg [ctor msg format (b o)] . op gotDisjointVariantUnifier : Oid Oid RewriteCount Substitution Substitution Qid -> Msg [ctor msg format (m o)] . op getVariantMatcher : Oid Oid Qid MatchingProblem TermList Qid VariantOptionSet Nat -> Msg [ctor msg format (b o)] . op gotVariantMatcher : Oid Oid RewriteCount Substitution -> Msg [ctor msg format (m o)] . op getOneStepNarrowing : Oid Oid Qid Term TermList Qid VariantOptionSet Nat -> Msg [ctor msg format (b o)] . op gotOneStepNarrowing : Oid Oid RewriteCount Term Type Context Qid Substitution Substitution Qid -> Msg [ctor msg format (m o)] . op getNarrowingSearchResult : Oid Oid Qid Term Term Qid Bound Qid VariantOptionSet Nat -> Msg [ctor msg format (b o)] . op gotNarrowingSearchResult : Oid Oid RewriteCount Term Type Substitution Qid Substitution Qid -> Msg [ctor msg format (m o)] . op getNarrowingSearchResultAndPath : Oid Oid Qid Term Term Qid Bound Qid VariantOptionSet Nat -> Msg [ctor msg format (b o)] . op gotNarrowingSearchResultAndPath : Oid Oid RewriteCount Term Type Substitution NarrowingTrace Substitution Qid -> Msg [ctor msg format (m o)] . op noSuchResult : Oid Oid RewriteCount -> Msg [ctor msg format (m o)] . op noSuchResult : Oid Oid Bool -> Msg [ctor msg format (m o)] . op noSuchResult : Oid Oid RewriteCount Bool -> Msg [ctor msg format (m o)] . op quit : Oid Oid -> Msg [ctor msg format (b o)] . op bye : Oid Oid -> Msg [ctor msg format (m o)] . op interpreterManager : -> Oid [special ( id-hook InterpreterManagerSymbol op-hook emptyInterpereterOptionSetSymbol (none : ~> InterpreterOptionSet) op-hook interpreterOidSymbol (interpreter : Nat ~> Oid) op-hook createInterpreterMsg (createInterpreter : Oid Oid InterpreterOptionSet ~> Msg) op-hook createdInterpreterMsg (createdInterpreter : Oid Oid Oid ~> Msg) op-hook insertModuleMsg (insertModule : Oid Oid Module ~> Msg) op-hook insertedModuleMsg (insertedModule : Oid Oid ~> Msg) op-hook insertViewMsg (insertView : Oid Oid View ~> Msg) op-hook insertedViewMsg (insertedView : Oid Oid ~> Msg) op-hook showModuleMsg (showModule : Oid Oid Qid Bool ~> Msg) op-hook showingModuleMsg (showingModule : Oid Oid Module ~> Msg) op-hook showViewMsg (showView : Oid Oid Qid ~> Msg) op-hook showingViewMsg (showingView : Oid Oid View ~> Msg) op-hook printTermMsg (printTerm : Oid Oid Qid VariableSet Term PrintOptionSet ~> Msg) op-hook printedTermMsg (printedTerm : Oid Oid QidList ~> Msg) op-hook parseTermMsg (parseTerm : Oid Oid Qid VariableSet QidList Type? ~> Msg) op-hook parsedTermMsg (parsedTerm : Oid Oid ResultPair? ~> Msg) op-hook getLesserSortsMsg (getLesserSorts : Oid Oid Qid Type ~> Msg) op-hook gotLesserSortsMsg (gotLesserSorts : Oid Oid SortSet ~> Msg) op-hook getMaximalSortsMsg (getMaximalSorts : Oid Oid Qid Kind ~> Msg) op-hook gotMaximalSortsMsg (gotMaximalSorts : Oid Oid SortSet ~> Msg) op-hook getMinimalSortsMsg (getMinimalSorts : Oid Oid Qid Kind ~> Msg) op-hook gotMinimalSortsMsg (gotMinimalSorts : Oid Oid SortSet ~> Msg) op-hook compareTypesMsg (compareTypes : Oid Oid Qid Type Type ~> Msg) op-hook comparedTypesMsg (comparedTypes : Oid Oid Bool Bool Bool ~> Msg) op-hook getKindMsg (getKind : Oid Oid Qid Type ~> Msg) op-hook gotKindMsg (gotKind : Oid Oid Kind ~> Msg) op-hook getKindsMsg (getKinds : Oid Oid Qid ~> Msg) op-hook gotKindsMsg (gotKinds : Oid Oid KindSet ~> Msg) op-hook getGlbTypesMsg (getGlbTypes : Oid Oid Qid TypeSet ~> Msg) op-hook gotGlbTypesMsg (gotGlbTypes : Oid Oid TypeSet ~> Msg) op-hook getMaximalAritySetMsg (getMaximalAritySet : Oid Oid Qid Qid TypeList Sort ~> Msg) op-hook gotMaximalAritySetMsg (gotMaximalAritySet : Oid Oid TypeListSet ~> Msg) op-hook normalizeTermMsg (normalizeTerm : Oid Oid Qid Term ~> Msg) op-hook normalizedTermMsg (normalizedTerm : Oid Oid Term Type ~> Msg) op-hook reduceTermMsg (reduceTerm : Oid Oid Qid Term ~> Msg) op-hook reducedTermMsg (reducedTerm : Oid Oid RewriteCount Term Type ~> Msg) op-hook rewriteTermMsg (rewriteTerm : Oid Oid Bound Qid Term ~> Msg) op-hook rewroteTermMsg (rewroteTerm : Oid Oid RewriteCount Term Type ~> Msg) op-hook frewriteTermMsg (frewriteTerm : Oid Oid Bound Nat Qid Term ~> Msg) op-hook frewroteTermMsg (frewroteTerm : Oid Oid RewriteCount Term Type ~> Msg) op-hook erewriteTermMsg (erewriteTerm : Oid Oid Bound Nat Qid Term ~> Msg) op-hook erewroteTermMsg (erewroteTerm : Oid Oid RewriteCount Term Type ~> Msg) op-hook srewriteTermMsg (srewriteTerm : Oid Oid Qid Term Strategy SrewriteOption Nat ~> Msg) op-hook srewroteTermMsg (srewroteTerm : Oid Oid RewriteCount Term Type ~> Msg) op-hook getSearchResultMsg (getSearchResult : Oid Oid Qid Term Term Condition Qid Bound Nat ~> Msg) op-hook gotSearchResultMsg (gotSearchResult : Oid Oid RewriteCount Term Type Substitution ~> Msg) op-hook getSearchResultAndPathMsg (getSearchResultAndPath : Oid Oid Qid Term Term Condition Qid Bound Nat ~> Msg) op-hook gotSearchResultAndPathMsg (gotSearchResultAndPath : Oid Oid RewriteCount Term Type Substitution Trace ~> Msg) op-hook applyRuleMsg (applyRule : Oid Oid Qid Term Qid Substitution Nat ~> Msg) op-hook appliedRuleMsg (appliedRule : Oid Oid RewriteCount Term Type Substitution ~> Msg) op-hook applyRule2Msg (applyRule : Oid Oid Qid Term Qid Substitution Nat Bound Nat ~> Msg) op-hook appliedRule2Msg (appliedRule : Oid Oid RewriteCount Term Type Substitution Context ~> Msg) op-hook getMatchMsg (getMatch : Oid Oid Qid Term Term Condition Nat ~> Msg) op-hook gotMatchMsg (gotMatch : Oid Oid RewriteCount Substitution ~> Msg) op-hook getXmatchMsg (getXmatch : Oid Oid Qid Term Term Condition Nat Bound Nat ~> Msg) op-hook gotXmatchMsg (gotXmatch : Oid Oid RewriteCount Substitution Context ~> Msg) op-hook getUnifierMsg (getUnifier : Oid Oid Qid UnificationProblem Qid Nat ~> Msg) op-hook gotUnifierMsg (gotUnifier : Oid Oid Substitution Qid ~> Msg) op-hook getDisjointUnifierMsg (getDisjointUnifier : Oid Oid Qid UnificationProblem Qid Nat ~> Msg) op-hook gotDisjointUnifierMsg (gotDisjointUnifier : Oid Oid Substitution Substitution Qid ~> Msg) op-hook getIrredundantUnifierMsg (getIrredundantUnifier : Oid Oid Qid UnificationProblem Qid Nat ~> Msg) op-hook gotIrredundantUnifierMsg (gotIrredundantUnifier : Oid Oid Substitution Qid ~> Msg) op-hook getIrredundantDisjointUnifierMsg (getIrredundantDisjointUnifier : Oid Oid Qid UnificationProblem Qid Nat ~> Msg) op-hook gotIrredundantDisjointUnifierMsg (gotIrredundantDisjointUnifier : Oid Oid Substitution Substitution Qid ~> Msg) op-hook getVariantMsg (getVariant : Oid Oid Qid Term TermList Bool Qid Nat ~> Msg) op-hook gotVariantMsg (gotVariant : Oid Oid RewriteCount Term Substitution Qid Parent Bool ~> Msg) op-hook getVariantUnifierMsg (getVariantUnifier : Oid Oid Qid UnificationProblem TermList Qid VariantOptionSet Nat ~> Msg) op-hook gotVariantUnifierMsg (gotVariantUnifier : Oid Oid RewriteCount Substitution Qid ~> Msg) op-hook getDisjointVariantUnifierMsg (getDisjointVariantUnifier : Oid Oid Qid UnificationProblem TermList Qid VariantOptionSet Nat ~> Msg) op-hook gotDisjointVariantUnifierMsg (gotDisjointVariantUnifier : Oid Oid RewriteCount Substitution Substitution Qid ~> Msg) op-hook getVariantMatcherMsg (getVariantMatcher : Oid Oid Qid MatchingProblem TermList Qid VariantOptionSet Nat ~> Msg) op-hook gotVariantMatcherMsg (gotVariantMatcher : Oid Oid RewriteCount Substitution ~> Msg) op-hook getOneStepNarrowingMsg (getOneStepNarrowing : Oid Oid Qid Term TermList Qid VariantOptionSet Nat ~> Msg) op-hook gotOneStepNarrowingMsg (gotOneStepNarrowing : Oid Oid RewriteCount Term Type Context Qid Substitution Substitution Qid ~> Msg) op-hook getNarrowingSearchResultMsg (getNarrowingSearchResult : Oid Oid Qid Term Term Qid Bound Qid VariantOptionSet Nat ~> Msg) op-hook gotNarrowingSearchResultMsg (gotNarrowingSearchResult : Oid Oid RewriteCount Term Type Substitution Qid Substitution Qid ~> Msg) op-hook getNarrowingSearchResultAndPathMsg (getNarrowingSearchResultAndPath : Oid Oid Qid Term Term Qid Bound Qid VariantOptionSet Nat ~> Msg) op-hook gotNarrowingSearchResultAndPathMsg (gotNarrowingSearchResultAndPath : Oid Oid RewriteCount Term Type Substitution NarrowingTrace Substitution Qid ~> Msg) op-hook noSuchResultMsg (noSuchResult : Oid Oid RewriteCount ~> Msg) op-hook noSuchResult2Msg (noSuchResult : Oid Oid Bool ~> Msg) op-hook noSuchResult3Msg (noSuchResult : Oid Oid RewriteCount Bool ~> Msg) op-hook quitMsg (quit : Oid Oid ~> Msg) op-hook byeMsg (bye : Oid Oid ~> Msg) op-hook shareWith (metaReduce : Module Term ~> ResultPair) )] . *** *** For backward compatibility only. *** These operators are deprecated - do not use in new code. *** op getVariantUnifier : Oid Oid Qid UnificationProblem TermList Qid Nat -> Msg [ctor msg format (b o)] . eq getVariantUnifier(T:Oid, M:Oid, Q:Qid, U:UnificationProblem, TL:TermList, F:Qid, N:Nat) = getVariantUnifier(T:Oid, M:Oid, Q:Qid, U:UnificationProblem, TL:TermList, F:Qid, none, N:Nat) . op getDisjointVariantUnifier : Oid Oid Qid UnificationProblem TermList Qid Nat -> Msg [ctor msg format (b o)] . eq getDisjointVariantUnifier(T:Oid, M:Oid, Q:Qid, U:UnificationProblem, TL:TermList, F:Qid, N:Nat) = getDisjointVariantUnifier(T:Oid, M:Oid, Q:Qid, U:UnificationProblem, TL:TermList, F:Qid, none, N:Nat) . op getOneStepNarrowing : Oid Oid Qid Term TermList Qid Nat -> Msg [ctor msg format (b o)] . eq getOneStepNarrowing(T:Oid, M:Oid, Q:Qid, T:Term, TL:TermList, F:Qid, N:Nat) = getOneStepNarrowing(T:Oid, M:Oid, Q:Qid, T:Term, TL:TermList, F:Qid, none, N:Nat) . op getNarrowingSearchResult : Oid Oid Qid Term Term Qid Bound Qid Nat -> Msg . eq getNarrowingSearchResult(T:Oid, M:Oid, Q:Qid, T:Term, T2:Term, S:Qid, B:Bound, F:Qid, N:Nat) = getNarrowingSearchResult(T:Oid, M:Oid, Q:Qid, T:Term, T2:Term, S:Qid, B:Bound, F:Qid, none, N:Nat) . op getNarrowingSearchResultAndPath : Oid Oid Qid Term Term Qid Bound Qid Nat -> Msg . eq getNarrowingSearchResultAndPath(T:Oid, M:Oid, Q:Qid, T:Term, T2:Term, S:Qid, B:Bound, F:Qid, N:Nat) = getNarrowingSearchResultAndPath(T:Oid, M:Oid, Q:Qid, T:Term, T2:Term, S:Qid, B:Bound, F:Qid, none, N:Nat) . endm maude-3.1/src/Main/Makefile.in0000644000175200017520000006051613741175702013134 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = maude$(EXEEXT) subdir = src/Main ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_have_poll.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(datadir)" PROGRAMS = $(bin_PROGRAMS) am_maude_OBJECTS = maude-main.$(OBJEXT) maude_OBJECTS = $(am_maude_OBJECTS) am__DEPENDENCIES_1 = maude_DEPENDENCIES = ../Mixfix/libmixfix.a \ ../StrategyLanguage/libstrategyLanguage.a ../Meta/libmeta.a \ ../ObjectSystem/libobjectSystem.a ../BuiltIn/libbuiltIn.a \ ../SMT/libSMT.a ../Higher/libhigher.a \ ../FreeTheory/libfreeTheory.a ../AU_Theory/libAU_Theory.a \ ../AU_Persistent/libAU_Persistent.a \ ../ACU_Theory/libACU_Theory.a \ ../ACU_Persistent/libACU_Persistent.a \ ../CUI_Theory/libCUI_Theory.a ../S_Theory/libS_Theory.a \ ../NA_Theory/libNA_Theory.a ../Variable/libvariable.a \ ../Interface/libinterface.a ../Core/libcore.a \ ../Parser/libparser.a ../Temporal/libtemporal.a \ ../IO_Stuff/libIO_Stuff.a $(FULL_COMPILER_LIB) \ ../Utility/libutility.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/maude-main.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(maude_SOURCES) DIST_SOURCES = $(maude_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } DATA = $(data_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs ChangeLog DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ BUDDY_LIB = @BUDDY_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CVC4_LIB = @CVC4_LIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FLEX = @FLEX@ GCC_LIBS = @GCC_LIBS@ GMP_LIBS = @GMP_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSIGSEGV_LIB = @LIBSIGSEGV_LIB@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TECLA_LIBS = @TECLA_LIBS@ VERSION = @VERSION@ YICES2_LIB = @YICES2_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @BUILD_COMPILER_TRUE@FULL_COMPILER_LIB = ../FullCompiler/libfullCompiler.a maude_CPPFLAGS = \ -I$(top_srcdir)/src/Utility \ -I$(top_srcdir)/src/Temporal \ -I$(top_srcdir)/src/Interface \ -I$(top_srcdir)/src/Core \ -I$(top_srcdir)/src/Variable \ -I$(top_srcdir)/src/FullCompiler \ -I$(top_srcdir)/src/Higher \ -I$(top_srcdir)/src/CUI_Theory \ -I$(top_srcdir)/src/S_Theory \ -I$(top_srcdir)/src/NA_Theory \ -I$(top_srcdir)/src/FreeTheory \ -I$(top_srcdir)/src/ObjectSystem \ -I$(top_srcdir)/src/Mixfix \ -I$(top_srcdir)/src/BuiltIn \ -I$(top_srcdir)/src/SMT \ -I$(top_srcdir)/src/IO_Stuff \ -I$(top_srcdir)/src/ACU_Persistent \ -I$(top_srcdir)/src/ACU_Theory \ -I$(top_srcdir)/src/AU_Persistent \ -I$(top_srcdir)/src/AU_Theory \ -I$(top_srcdir)/src/Meta \ -I$(top_srcdir)/src/3rdParty \ -I$(top_srcdir)/src/FullCompiler \ -I$(top_srcdir)/src/StrategyLanguage \ -I$(top_srcdir)/src/Mixfix maude_LDADD = \ ../Mixfix/libmixfix.a \ ../StrategyLanguage/libstrategyLanguage.a \ ../Meta/libmeta.a \ ../ObjectSystem/libobjectSystem.a \ ../BuiltIn/libbuiltIn.a \ ../SMT/libSMT.a \ ../Higher/libhigher.a \ ../FreeTheory/libfreeTheory.a \ ../AU_Theory/libAU_Theory.a \ ../AU_Persistent/libAU_Persistent.a \ ../ACU_Theory/libACU_Theory.a \ ../ACU_Persistent/libACU_Persistent.a \ ../CUI_Theory/libCUI_Theory.a \ ../S_Theory/libS_Theory.a \ ../NA_Theory/libNA_Theory.a \ ../Variable/libvariable.a \ ../Interface/libinterface.a \ ../Core/libcore.a \ ../Parser/libparser.a \ ../Temporal/libtemporal.a \ ../IO_Stuff/libIO_Stuff.a \ $(FULL_COMPILER_LIB) \ ../Utility/libutility.a \ $(CVC4_LIB) \ $(YICES2_LIB) \ $(GMP_LIBS) \ $(BUDDY_LIB) \ $(TECLA_LIBS) \ $(LIBSIGSEGV_LIB) maude_SOURCES = \ main.cc data_DATA = \ prelude.maude \ model-checker.maude \ socket.maude \ linear.maude \ machine-int.maude \ term-order.maude \ metaInterpreter.maude \ smt.maude \ file.maude EXTRA_DIST = \ prelude.maude \ model-checker.maude \ socket.maude \ linear.maude \ machine-int.maude \ term-order.maude \ metaInterpreter.maude \ smt.maude \ file.maude \ process.maude all: all-am .SUFFIXES: .SUFFIXES: .cc .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Main/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Main/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) maude$(EXEEXT): $(maude_OBJECTS) $(maude_DEPENDENCIES) $(EXTRA_maude_DEPENDENCIES) @rm -f maude$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(maude_OBJECTS) $(maude_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maude-main.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` maude-main.o: main.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(maude_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT maude-main.o -MD -MP -MF $(DEPDIR)/maude-main.Tpo -c -o maude-main.o `test -f 'main.cc' || echo '$(srcdir)/'`main.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/maude-main.Tpo $(DEPDIR)/maude-main.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='main.cc' object='maude-main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(maude_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o maude-main.o `test -f 'main.cc' || echo '$(srcdir)/'`main.cc maude-main.obj: main.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(maude_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT maude-main.obj -MD -MP -MF $(DEPDIR)/maude-main.Tpo -c -o maude-main.obj `if test -f 'main.cc'; then $(CYGPATH_W) 'main.cc'; else $(CYGPATH_W) '$(srcdir)/main.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/maude-main.Tpo $(DEPDIR)/maude-main.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='main.cc' object='maude-main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(maude_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o maude-main.obj `if test -f 'main.cc'; then $(CYGPATH_W) 'main.cc'; else $(CYGPATH_W) '$(srcdir)/main.cc'; fi` install-dataDATA: $(data_DATA) @$(NORMAL_INSTALL) @list='$(data_DATA)'; test -n "$(datadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(datadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(datadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(datadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(datadir)" || exit $$?; \ done uninstall-dataDATA: @$(NORMAL_UNINSTALL) @list='$(data_DATA)'; test -n "$(datadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(datadir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(datadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/maude-main.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/maude-main.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dataDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic cscopelist-am ctags ctags-am \ distclean distclean-compile distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-binPROGRAMS install-data install-data-am \ install-dataDATA install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dataDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: maude-3.1/src/Higher/0000755000175200017520000000000013741222370011453 500000000000000maude-3.1/src/Higher/narrowingFolder.hh0000644000175200017520000001425313726504220015063 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2017 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for folding and maintaining the history of a narrowing search. // Both folding and keeping the history are optional. If neither are used, // we simply keep track of unexplored states. // // The caller gives each state an index, and for each new state, holds the // index of the parent state or NONE if it is the initial state of the narrowing // search. A states index is required to be larger than that of its parent. // When an existing state is ejected by the arrival of a new state that is more // general, all of its descendents are likewise ejected, just as if the search // that has already taken place had been pruned. // #ifndef _narrowingFolder_hh_ #define _narrowingFolder_hh_ #include #include #include "simpleRootContainer.hh" #include "narrowingVariableInfo.hh" class NarrowingFolder : private SimpleRootContainer { NO_COPYING(NarrowingFolder); public: NarrowingFolder(bool fold, bool keepHistory); ~NarrowingFolder(); bool insertState(int index, DagNode* state, int parentIndex); void addAccumulatedSubstitution(int index, int variableFamily, Substitution* accumulatedSubstitution); void addHistory(int index, Rule* rule, DagNode* narrowingContext, DagNode* narrowingPosition, const Substitution& unifier, const NarrowingVariableInfo& variableInfo); bool keepingHistory() const; void getState(int index, DagNode*& state, int& variableFamily, Substitution*& accumulatedSubstitution) const; int getDepth(int index) const; void getHistory(int index, DagNode*& root, DagNode*& position, Rule*& rule, const Substitution*& unifier, const NarrowingVariableInfo*& unifierVariableInfo, int& variableFamily, DagNode*& newDag, const Substitution*& accumulatedSubstitution, int& parentIndex) const; // // Returns NONE if there is no next surviving state. // int getNextSurvivingState(DagNode*& nextState, Substitution*& nextStateAccumulatedSubstitution, int& nextStateVariableFamily, int& nextStateDepth); private: struct RetainedState { RetainedState(DagNode* state, int parentIndex, bool fold); ~RetainedState(); bool subsumes(DagNode* state) const; DagNode* const state; Substitution* accumulatedSubstitution; const int parentIndex; int variableFamily; int depth; // // Only used for folding. // Term* stateTerm; LhsAutomaton* matchingAutomaton; int nrMatchingVariables; // number of variables needed for matching; includes // any abstraction variables // // Only used for history. // Rule* rule; // rule used for narrowing step that created this state DagNode* narrowingContext; DagNode* narrowingPosition; // pointer into old state Substitution* unifier; // variant unifier between parent state and rule lhs NarrowingVariableInfo variableInfo; // variable info for the parent state part of the unifier // // Only used for history if we are not folding. // int nrDescendants; }; typedef map RetainedStateMap; typedef set StateSet; void markReachableNodes(); void cleanGraph(); const bool fold; // we do folding to prune less general states const bool keepHistory; // we keep the history of how we arrived at each state RetainedStateMap mostGeneralSoFar; int currentStateIndex; }; inline void NarrowingFolder::addAccumulatedSubstitution(int index, int variableFamily, Substitution* accumulatedSubstitution) { RetainedStateMap::iterator i = mostGeneralSoFar.find(index); Assert(i != mostGeneralSoFar.end(), "couldn't find state with index " << index); i->second->variableFamily = variableFamily; i->second->accumulatedSubstitution = accumulatedSubstitution; } inline bool NarrowingFolder::keepingHistory() const { return keepHistory; } inline void NarrowingFolder::getState(int index, DagNode*& state, int& variableFamily, Substitution*& accumulatedSubstitution) const { RetainedStateMap::const_iterator i = mostGeneralSoFar.find(index); Assert(i != mostGeneralSoFar.end(), "couldn't find state with index " << index); state = i->second->state; variableFamily = i->second->variableFamily; accumulatedSubstitution = i->second->accumulatedSubstitution; } inline int NarrowingFolder::getDepth(int index) const { RetainedStateMap::const_iterator i = mostGeneralSoFar.find(index); Assert(i != mostGeneralSoFar.end(), "couldn't find state with index " << index); return i->second->depth; } inline void NarrowingFolder::getHistory(int index, DagNode*& root, DagNode*& position, Rule*& rule, const Substitution*& unifier, const NarrowingVariableInfo*& unifierVariableInfo, int& variableFamily, DagNode*& newDag, const Substitution*& accumulatedSubstitution, int& parentIndex) const { RetainedStateMap::const_iterator i = mostGeneralSoFar.find(index); Assert(i != mostGeneralSoFar.end(), "couldn't find state with index " << index); root = i->second->narrowingContext; position = i->second->narrowingPosition; rule = i->second->rule; unifier = i->second->unifier; unifierVariableInfo = &(i->second->variableInfo); variableFamily = i->second->variableFamily; newDag = i->second->state; accumulatedSubstitution = i->second->accumulatedSubstitution; parentIndex = i->second->parentIndex; } #endif maude-3.1/src/Higher/ChangeLog0000755000175200017520000042536213736751720013176 000000000000002020-10-05 Steven Eker * variantSearch.cc: fill out problemOkay * variantSearch.hh (class VariantSearch): added decl for problemOK() (VariantSearch::problemOK):added (class VariantSearch): added data member problemOkay 2020-09-28 Steven Eker * variantFolder.cc (VariantFolder::insertVariant): deleted commented out code (3 places) 2020-09-18 Steven Eker * variantSearch.cc: removed BUG comment from reduce() call and added a detailed explanation of why the potential bug is in fact avoided by DagNode::indexVariables(NarrowingVariableInfo& indices, int baseIndex) 2020-09-15 Steven Eker * narrowingSequenceSearch3.cc (NarrowingSequenceSearch3): deleted fold and keepHistory arguments; take and store variantFlags argument (NarrowingSequenceSearch3::findNextInterestingState): pass variantFlags to NarrowingSearchState3 * narrowingSequenceSearch3.hh (class NarrowingSequenceSearch3): added enum flags; delete ctor fold and keepHistory arguments; added variantFlags argument (class NarrowingSequenceSearch3): added variantFlags data member * narrowingSearchState3.cc (NarrowingSearchState3::markReachableNodes): deleted because blockerDags vector is always empty * narrowingSearchState3.hh (class NarrowingSearchState3): make blockerDags const since it will always be empty; delete SimpleRootContainer private base class; delete decl for markReachableNodes() * narrowingSearchState3.cc (NarrowingSearchState2): take and store variantFlags (NarrowingSearchState3::findNextNarrowing): pass variantFlags to VariantUnificationProblem() * narrowingSearchState3.hh (class NarrowingSearchState3): added variantFlags argument to ctor; added data member variantFlags * narrowingSearchState2.hh (class NarrowingSearchState2): added data member variantFlags * narrowingSearchState2.cc (NarrowingSearchState2): take and store variantFlags argument (NarrowingSearchState2::findNextNarrowing): pass variantFlags to VariantUnificationProblem() * narrowingSearchState2.hh (class NarrowingSearchState2): added variantFlags argument to ctor * variantUnificationProblem.cc: take variantFlags and use them to decide between FilteredVariantUnifierSearch() and VariantSearch(); pass them on to the chosen constructor * variantUnificationProblem.hh (class VariantUnificationProblem): added variantFlags argument to ctor; added enum Flags 2020-09-14 Steven Eker * filteredVariantUnifierSearch.cc: updated comments 2020-09-11 Steven Eker * variantFolder.hh (class VariantFolder): deleted decls for getNextSurvivingVariant(), getLastReturnedVariant() * variantFolder.cc (VariantFolder::getNextSurvivingVariant): deleted (VariantFolder::getLastReturnedVariant): deleted * variantSearch.hh (class VariantSearch): deleted decls for getNextVariant(), getLastReturnedVariant() * variantSearch.cc (VariantSearch::getNextVariant): deleted (VariantSearch::getLastReturnedVariant): deleted * variantSearch.hh (VariantSearch::getCurrentVariant): translate parentNumber to external numbering scheme (class VariantSearch): data member nrVariantsReturned becomes nrVariantsFound * variantSearch.cc (VariantSearch::getNextVariant): deleted (VariantSearch::findNextVariant): increment nrVariantsFound (VariantSearch): initialize nrVariantsFound rather than nrVariantsReturned (VariantSearch::findNextVariant): build internal to external variant numbering map * variantSearch.hh (class VariantSearch): added decl for findNextVariant() * variantSearch.cc (VariantSearch::findNextVariant): added * variantSearch.hh (VariantSearch::getCurrentVariant): added 2020-09-10 Steven Eker * narrowingUnificationProblem.cc (NarrowingUnificationProblem::bindFreeVariables): use range-based for loop (NarrowingUnificationProblem::findOrderSortedUnifiers): use range-based loop (3 places) * unificationProblem.cc (UnificationProblem::bindFreeVariables): use range-based for loop * narrowingSearchState3.cc (NarrowingSearchState3::markReachableNodes): use range-based for loop * narrowingSearchState2.hh (class NarrowingSearchState2): rearrange data members for more compact layout * narrowingSearchState2.cc (NarrowingSearchState2::markReachableNodes): use range-based for loop * narrowingSequenceSearch3.cc (NarrowingSequenceSearch3::findNextInterestingState): updated call to NarrowingSearchState3() * narrowingSearchState3.hh (class NarrowingSearchState3): updated decl for ctor * narrowingSearchState3.cc: switch order of freshVariableGenerator and incomingVariableFamily for consistancy with other classes * narrowingSearchState3.hh (class NarrowingSearchState3): don't derive from CacheableState since we're not caching these * narrowingFolder.cc (NarrowingFolder::insertState): use StateSet * narrowingFolder.hh (class NarrowingFolder): added typedef StateSet * narrowingFolder.cc (~NarrowingFolder): use range-based for loop (NarrowingFolder::markReachableNodes): use range-based for loop (NarrowingFolder::insertState): use range-based for loop ===================================Maude130=========================================== 2020-09-04 Steven Eker * variantSearch.hh (VariantSearch::makeVariantMatchingProblem): take subject as a RewritingContext * variantMatchingProblem.cc (VariantMatchingProblem): take subject as a RewritingContext; don't index subject variables here (~VariantMatchingProblem): delete subject (VariantMatchingProblem::checkVariablesInSubject): access subject as a RewritingContext (VariantMatchingProblem::markReachableNodes): don't mark subject (VariantMatchingProblem::findNextMatcher): access subject as a RewritingContext * variantMatchingProblem.hh (VariantMatchingProblem::freshVariablesNeeded): added (class VariantMatchingProblem): take and store subject as a RewritingContext * variantFolder.hh (class VariantFolder): better explained the semantics of findNextVariantThatMatches() * variantFolder.cc (VariantFolder::findNextVariantThatMatches): need to clear matcher on failure so caller doesn't try to double delete it 2020-09-02 Steven Eker * variantUnifierFilter.cc (VariantUnifierFilter::markReachableNodes): deleted (VariantUnifierFilter::insertUnifier): use setNode()/getNode() for encodedUnifier (VariantUnifierFilter): don't initialize encodedUnifier * variantUnifierFilter.hh (class VariantUnifierFilter): remove SimpleRootContainer as a base class (class VariantUnifierFilter): deleted decl for markReachableNodes(); make encodedUnifier a DagRoot * variantUnifierFilter.cc (VariantUnifierFilter::findNextSurvivingUnifier): moved here; no longer inline (VariantUnifierFilter): initialize currentUnifierSubsumed; currentUnifier (VariantUnifierFilter::findNextSurvivingUnifier): delete currentUnifier if it was subsumed and we move the iterator past it (VariantUnifierFilter::insertUnifier): don't waste time trying to subsume new unifier with current unifier if the currentUnifierSubsumed flag is set; set flag rather the deleting the currentUnifier if new unifier subsumes it * variantUnifierFilter.hh (class VariantUnifierFilter): added data member currentUnifierSubsumed 2020-09-01 Steven Eker * variantUnifierFilter.hh (VariantUnifierFilter::findNextSurvivingUnifier): support extraction even as new unifiers may be added * filteredVariantUnifierSearch.cc (FilteredVariantUnifierSearch::findNextUnifier): support incremental extraction * variantUnifierFilter.cc (VariantUnifierFilter::insertUnifier): allow unifiers to be added after extraction started * filteredVariantUnifierSearch.cc (FilteredVariantUnifierSearch): init flags; don't pass IRREDUNDANT_MODE by default * filteredVariantUnifierSearch.hh (class FilteredVariantUnifierSearch): added data member flags 2020-08-28 Steven Eker * filteredVariantUnifierSearch.hh (FilteredVariantUnifierSearch::filteringIncomplete()): added * variantUnifierFilter.cc: initialize filteringIncompleteFlag (VariantUnifierFilter::insertUnifier): check for incompleteness of subsumption variant set * variantUnifierFilter.hh (VariantUnifierFilter::filteringIncomplete): added (class VariantUnifierFilter): added data member filteringIncompleteFlag * variantMatchingProblem.cc (VariantMatchingProblem::checkVariablesInSubject): added (VariantMatchingProblem::findNextMatcher): call checkVariablesInSubject() and avoid used variables * variantMatchingProblem.hh (class VariantMatchingProblem): added decl for checkVariablesInSubject() (class VariantMatchingProblem): added decl for data member indicesToAvoid, checkedVariablesInSubject 2020-08-27 Steven Eker * variantSearch.cc (VariantSearch): use range-based for loop (VariantSearch::markReachableNodes): use range-based for loop (VariantSearch::expandLayer): use range-based for loop * unifierFilter.cc (~UnifierFilter): use range-based for loop (UnifierFilter::markReachableNodes): use range-based for loop (UnifierFilter::insertUnifier): use range-based for loop * variantFolder.cc (VariantFolder::insertVariant): deleted commented out code * narrowingSequenceSearch.cc (~NarrowingSequenceSearch): use range based for loop * narrowingSequenceSearch3.cc (NarrowingSequenceSearch3): simplified and eliminated call to getBaseVariableSymbol(); deleted commented out code * narrowingSequenceSearch.cc (NarrowingSequenceSearch): simplified and eliminated call to getBaseVariableSymbol() * narrowingSearchState2.cc (NarrowingSearchState2): simplified and eliminated call to getBaseVariableSymbol() * variantUnificationProblem.cc (VariantUnificationProblem::findNextUnifier): simplified and eliminated calls to getBaseVariableSymbol() * unificationProblem.cc (UnificationProblem::findOrderSortedUnifiers): only use getBaseVariableSymbol() for fresh variables 2020-08-26 Steven Eker * variantMatchingProblem.cc (VariantMatchingProblem::findNextMatcher): handle null returned by instantiate() * variantSearch.cc (VariantSearch): use original variable symbol directly rather than getting sort and using getBaseVariableSymbol() * variantMatchingProblem.cc (VariantMatchingProblem::findNextMatcher): pass variableInfo rather than nrFreeVariables to findNextVariantThatMatches() (VariantMatchingProblem::findNextMatcher): bind unbound variables to fresh variables * variantFolder.hh (class VariantFolder): updated decl for findNextVariantThatMatches() * variantFolder.cc (VariantFolder::findNextVariantThatMatches): pass back variableInfo rather than nrFreeVariables * variantSearch.hh (VariantSearch::makeVariantMatchingProblem): pass freshVariableGenerator to VariantMatchingProblem() * variantMatchingProblem.hh (class VariantMatchingProblem): updated decl for ctor; added data member freshVariableGenerator * variantMatchingProblem.cc (VariantMatchingProblem): take freshVariableGenerator * variantFolder.cc (VariantFolder::findNextVariantThatMatches): take and fill out nrFreeVaraibles * variantFolder.hh (class VariantFolder): updated decl for findNextVariantThatMatches() * variantMatchingProblem.cc (VariantMatchingProblem::findNextMatcher): pass nrFreeVariables to findNextVariantThatMatches() * variantSearch.cc (VariantSearch): warning for MATCH_MODE problems with unsafe variable names 2020-08-25 Steven Eker * variantMatchingProblem.cc (VariantMatchingProblem::findNextMatcher): apply matcher to current variant substitution to get variant matcher (VariantMatchingProblem::findNextMatcher): null out matcher and subprobem after we delete them * variantFolder.hh (class VariantFolder): updated decl for findNextVariantThatMatches() * variantFolder.cc (VariantFolder::findNextVariantThatMatches): pass indexOfLastUsedVariant by reference so we can update it * variantMatchingProblem.cc (VariantMatchingProblem::markReachableNodes): don't use auto& since a reference is the same size as the thing refered to 2020-08-21 Steven Eker * variantSearch.hh (class VariantSearch): added DELETE_LAST_VARIANT_MATCHING_PROBLEM to enum Flags (VariantSearch::getLastVariantMatchingProblem): added (VariantSearch::makeVariantMatchingProblem): moved here * variantSearch.cc (VariantSearch): initialize lastVariantMatchingProblem (~VariantSearch): delete lastVariantMatchingProblem if requested * variantSearch.hh (class VariantSearch): added data member lastVariantMatchingProblem (class VariantSearch): added decl for makeVariantMatchingProblem() * variantSearch.cc (VariantSearch::makeVariantMatchingProblem): added 2020-08-19 Steven Eker * variantFolder.hh (class VariantFolder): added decl for prepareForVariantMatching() * variantFolder.cc: use data member variableInfo rather than a local variable (VariantFolder::prepareForVariantMatching): added * variantFolder.hh (class VariantFolder): added data member variableInfo to struct RetainedVariant * variantSearch.cc: hande MATCH_MODE; call VariantFolder::prepareForVariantMatching() * variantSearch.hh (class VariantSearch): added MATCH_MODE to enum Flags * variantFolder.hh (class VariantFolder): added decl for findNextVariantThatMatches() * variantFolder.cc (VariantFolder::findNextVariantThatMatches): added 2020-08-14 Steven Eker * higher.hh: added class VariantMatchingProblem * variantMatchingProblem.cc (VariantMatchingProblem::VariantMatchingProblem): init matcher, currentVariant (~VariantMatchingProblem): delete matcher, subproblem * variantMatchingProblem.hh (class VariantMatchingProblem): added data members matcher, currentVariant * variantMatchingProblem.cc (VariantMatchingProblem::VariantMatchingProblem): init indexOfLastUsedVariant, subproblem * variantMatchingProblem.hh (class VariantMatchingProblem): added data members indexOfLastUsedVariant, subproblem 2020-08-13 Steven Eker * variantFolder.cc (VariantFolder::markReachableNodes): use range based for loop (2 places) (~VariantFolder): use range based for loop * variantMatchingProblem.cc: created * variantMatchingProblem.hh: created 2020-08-06 Steven Eker * variantUnifierFilter.cc: initialize encodedUnifier (VariantUnifierFilter::insertUnifier): use object data member encodedUnifier rather than local pointer (VariantUnifierFilter::insertUnifier): add in the rewrite counts from the variant searchs done for subsumption * variantUnifierFilter.hh (class VariantUnifierFilter): added data member encodedUnifier * variantUnifierFilter.cc (VariantUnifierFilter::markReachableNodes): implemented 2020-08-05 Steven Eker * variantUnifierFilter.cc (VariantUnifierFilter::getNextSurvivingUnifier): deleted stub (VariantUnifierFilter::insertUnifier): added Assert() (VariantUnifierFilter::~VariantUnifierFilter): implemented * variantUnifierFilter.hh (class VariantUnifierFilter): data member nextUnifer becomes currentUnifier (VariantUnifierFilter::findNextSurvivingUnifier): added (VariantUnifierFilter::getCurrentSurvivingUnifier): added (class VariantUnifierFilter): deleted decl for getNextSurvivingUnifier() * filteredVariantUnifierSearch.cc (FilteredVariantUnifierSearch::findNextUnifier): implemented (FilteredVariantUnifierSearch::getCurrentUnifier): implemented 2020-08-04 Steven Eker * filteredVariantUnifierSearch.cc (FilteredVariantUnifierSearch::findNextUnifier): added stub (FilteredVariantUnifierSearch::getCurrentUnifier): added stub * filteredVariantUnifierSearch.hh (class FilteredVariantUnifierSearch): added decls for findNextUnifier(), getCurrentUnifier() * variantSearch.cc (VariantSearch::getNextUnifier): deleted * variantSearch.hh (VariantSearch::getLastReturnedUnifier): deleted (class VariantSearch): deleted decls for getNextUnifier(), getLastReturnedUnifier() * filteredVariantUnifierSearch.hh (class FilteredVariantUnifierSearch): deleted decls for getNextUnifier(), getLastReturnedUnifier() * filteredVariantUnifierSearch.cc: rewritten to use findNextUnifier()/getCurrentUnifier() rather than getNextUnifier() (FilteredVariantUnifierSearch::getNextUnifier): deleted (FilteredVariantUnifierSearch::getLastReturnedUnifier): deleted * narrowingSequenceSearch3.cc (NarrowingSequenceSearch3::findNextUnifier): use findNextUnifier()/getCurrentUnifier() rather than getNextUnifier() * variantUnificationProblem.cc (VariantUnificationProblem::findNextUnifier): use findNextUnifier()/getCurrentUnifier() rather than getNextUnifier() * variantFolder.hh (VariantFolder::getCurrentVariantSize): added * variantSearch.hh (class VariantSearch): added decls for findNextUnifier(), getCurrentUnifier() * variantSearch.cc (VariantSearch::findNextUnifier): added (VariantSearch::getCurrentUnifier): added * variantFolder.hh (class VariantFolder): added decls for findNextSurvivingVariant() and getCurrentVariant() * variantFolder.cc (VariantFolder::findNextSurvivingVariant): added (VariantFolder::getCurrentVariant()): added * variantFolder.hh (class VariantFolder): added data member currentVariant 2020-08-03 Steven Eker * higher.hh: added class FilteredVariantUnifierSearch * filteredVariantUnifierSearch.cc: created * filteredVariantUnifierSearch.hh: created * variantUnifierFilter.cc (VariantUnifierFilter::insertUnifier): handle nrFreeVariables argument (VariantUnifierFilter::getNextSurvivingUnifier): take nrFreeVariables argument * variantUnifierFilter.hh (class VariantUnifierFilter): added nrFreeVariables data member to struct RetainedUnifier (VariantUnifierFilter::RetainedUnifier::RetainedUnifier): take and store nrFreeVariables (class VariantUnifierFilter): updated decl for insertUnifier() and getNextSurvivingUnifier() * variantSearch.hh (class VariantSearch): reorganized member functions and comments; made getNextUnifier(), getLastReturnedUnifier() virtual * variantUnifierFilter.hh (class VariantUnifierFilter): updated decl for ctor; deleted data member blockerDags * variantUnifierFilter.cc (VariantUnifierFilter::insertUnifier): pass dummy vector instead of blockerDags (VariantUnifierFilter::VariantUnifierFilter): don't take blockerDags argument 2020-07-29 Steven Eker * irredundantUnificationProblem.hh (class IrredundantUnificationProblem): commented out decl for markReachableNodes() * irredundantUnificationProblem.cc (IrredundantUnificationProblem::markReachableNodes): commented out - UnifierFilter protects the unifiers it returns 2020-07-28 Steven Eker * higher.hh: added class VariantUnifierFilter * variantUnifierFilter.hh (class VariantUnifierFilter): updated decl for ctor * variantUnifierFilter.cc (VariantUnifierFilter::insertUnifier): finished * variantUnifierFilter.hh (VariantUnifierFilter::RetainedUnifier::RetainedUnifier): added (VariantUnifierFilter::RetainedUnifier::~RetainedUnifier): added * variantUnifierFilter.cc (VariantUnifierFilter::VariantUnifierFilter): take and initialize freshVariableGenerator * variantUnifierFilter.hh (VariantUnifierFilter::RetainedUnifier::subsumes): added 2020-07-24 Steven Eker * variantUnifierFilter.hh: created * variantUnifierFilter.cc: created * variantNarrowingSearchState.cc (VariantNarrowingSearchState::VariantNarrowingSearchState): updated comments; use range-based for loop for indexing variant substitution; use range-based for loop for iterating over equations (VariantNarrowingSearchState::findNextVariant): use range-based for loop for iterating over blocker dags (VariantNarrowingSearchState::findNextVariant): replaced commned out print statements with DebugInfo()s (VariantNarrowingSearchState::VariantNarrowingSearchState): replaced commented out print statement with DebugEnter() 2020-07-23 Steven Eker * variantFolder.hh (class VariantFolder): updated decl for subsumes() * variantFolder.cc (VariantFolder::subsumes): made const * variantSearch.hh (class VariantSearch): added decl for isSubsumed() * variantSearch.cc: added * variantFolder.hh (class VariantFolder): added decl for isSubsumed( * variantFolder.cc (VariantFolder::isSubsumed): added (VariantFolder::insertVariant): use isSubsumed() * variantSearch.cc (VariantSearch::VariantSearch): in SUBSUMPTION_MODE we don't keep the variant substitution and we generate a minimal complete set of variants upfront so we can be done with blockerDags which some other subsumption search may neeed to use 2020-07-22 Steven Eker * variantSearch.hh (class VariantSearch): added SUBSUMPTION_MODE to Flags * variantUnificationProblem.cc: use new VariantSearch calling conventions * narrowingSequenceSearch3.cc (NarrowingSequenceSearch3::findNextUnifier): use new VariantSearch calling conventions * variantSearch.cc (VariantSearch::VariantSearch): added argument flags; deleted arguments unificationMode, irredundantMode, deleteFreshVariableGenerator, checkVariableNames; use flags rather than unificationMode (2 places) (VariantSearch::expandVariant): use flags rather that unificationMode (2 places) (VariantSearch::VariantSearch): use flags instead of checkVariableNames (2 places); use flags instead of irredundantMode; updated comment to explain why we expect to get redundant unifiers even with irredundant variants (VariantSearch::~VariantSearch): use flags instead of deleteFreshVariableGenerator * variantSearch.hh (class VariantSearch): added enum Flags (class VariantSearch): updated ctor decl (class VariantSearch): added data member flags; deleted data members unificationMode, irredundantMode, deleteFreshVariableGenerator (VariantSearch::getIrredundantMode): use flags 2020-07-15 Steven Eker * irredundantUnificationProblem.cc (IrredundantUnificationProblem::findNextUnifier): don't pass argument to RewritingContext ctor 2020-07-14 Steven Eker * higher.hh: added forward decl for class IrredundantUnificationProblem 2020-07-10 Steven Eker (IrredundantUnificationProblem::findNextUnifier): fill out sorts of each binding using dummy RewritingContext * irredundantUnificationProblem.hh: created * irredundantUnificationProblem.cc: created * unificationProblem.cc (UnificationProblem::getSolution): moved here because it can no longer be inline, having become virtual (getNrFreeVariables): ditto * unificationProblem.hh (class UnificationProblem): make markReachableNodes() protected so derived class can override it * unifierFilter.hh (class UnifierFilter): provide default values for postionIndex, equationIndex * unificationProblem.hh (class UnificationProblem): made dtor, findNextUnifier(), getSolution(), getNrFreeVariables() virtual * unifierFilter.hh (class UnifierFilter): added comment to explain that posistionIndex and equationIndex are opaque and can be use to store whatever integers the caller finds useful to maintain along side a unifier ===================================Maude129=========================================== 2020-06-11 Steven Eker * variantNarrowingSearchState.cc (VariantNarrowingSearchState::collectUnifiers): make message printed out every thousand unifier depend on globalVerboseFlag rather than on DEBUG mode so we can get the same result in test suite whether we are debugging or not 2020-06-10 Steven Eker * variantFolder.cc (VariantFolder::RetainedVariant::RetainedVariant) fixed symmetric bug * unifierFilter.cc (UnifierFilter::RetainedUnifier::RetainedUnifier): fix bug where we were compiling matching using one variable count and then running matching with a higher variable count because we added abstraction variables for a later binding. Compilation has to be a separate pass after all abstraction variables have been added 2020-06-09 Steven Eker * narrowingSequenceSearch.cc (NarrowingSequenceSearch::findNextNormalForm): added DebugInfo() for duplicate states (NarrowingSequenceSearch::findNextInterestingState) (NarrowingSequenceSearch::findNextNormalForm): added DebugInfo() for replacement and narrowedDag (NarrowingSequenceSearch::findNextNormalForm) (NarrowingSequenceSearch::findNextInterestingState): make dup state DebugInfo() more prominent 2020-04-15 Steven Eker * cacheableState.hh (class CacheableState): delete stray ; ===================================Maude128a=========================================== 2019-11-11 Steven Eker * unificationProblem.cc (UnificationProblem): pass true to warnAboutUnimplemented (2 places) ===================================Maude125=========================================== 2018-11-05 Steven Eker * searchState.hh (PositionState): added comment on setInitialSubstitution() convention 2018-11-02 Steven Eker * positionState.hh (P): added and explanation of why DagPair exists ===================================Maude120=========================================== 2018-10-23 Steven Eker * positionState.cc (exploreNextPosition): use stackPhysicalArguments() 2018-09-28 Steven Eker * variantSearch.hh (getLastReturnedUnifier): take and pass variableFamily * variantSearch.cc (getLastReturnedVariant): pass variableFamily to VariantFolder::getLastReturnedVariant() * variantFolder.hh (SimpleRootContainer): updated decl for getLastReturnedVariant() * variantFolder.cc (getLastReturnedVariant): take variableFamily argument (getNextSurvivingVariant): code cleaning * variantSearch.hh (SimpleRootContainer): updated decls for getNextVariant() and getLastReturnedVariant() * variantSearch.cc (getNextVariant): take variableFamily argument (getLastReturnedVariant): take variableFamily argument * narrowingSequenceSearch.cc (findNextMatch): delete commented out matchState->transferCount(*(getContext())) and add comment to explain * searchState.hh (transferCount): becomes transferCountTo() (transferCount): use transferCountFrom() * variantUnificationProblem.cc (findNextUnifier): transferCount() -> transferCountFrom() * stateTransitionGraph.cc (getNextState): transferCount() -> transferCountTo() * rewriteSequenceSearch.cc (findNextMatch): transferCount() -> transferCountTo() * rewriteConditionState.cc (solve): transferCount() -> transferCountTo() * narrowingSequenceSearch3.cc (NarrowingSequenceSearch3): transferCount() -> transferCountFrom() (findNextUnifier, findNextInterestingState): transferCount() -> transferCountFrom() * narrowingSearchState2.cc (findNextNarrowing): transferCount() -> transferCountFrom() (2 places) * stateTransitionGraph.hh (transferCount): becomes transferCountTo() (transferCountTo): use transferCountFrom() 2018-09-27 Steven Eker * variantSearch.hh (SimpleRootContainer): changed default value for incomingVariableFamily from 2 to NONE so we still report @ variables as a problem if no incomingVariableFamily is specified * variantSearch.cc (VariantSearch): change secondVariableFamily calculation to handle NONE correctly * variantSearch.hh (SimpleRootContainer): disallowedVariableFamily -> incomingVariableFamily * variantSearch.cc (VariantSearch): disallowedVariableFamily -> incomingVariableFamily (VariantSearch): pass incomingVariableFamily to variableNameConflict() 2018-09-25 Steven Eker * unificationProblem.hh (getVariableFamily): added 2018-09-21 Steven Eker * unificationProblem.cc (UnificationProblem): initialize variableFamilyToUse (UnificationProblem): pass variableFamilyToUse to UnificationContext (findOrderSortedUnifiers): pass variableFamilyToUse to getFreshVariableName() * unificationProblem.hh (SimpleRootContainer): updated decl for ctor (SimpleRootContainer): added data member variableFamilyToUse * unificationProblem.cc (UnificationProblem): take incomingVariableFamily and pass it to variableNameConflict() 2018-09-19 Steven Eker * narrowingSearchState2.hh (SimpleRootContainer): deleted decl for simpler ctor * narrowingSearchState2.cc (NarrowingSearchState2): deleted simpler version since nothing calls it ===================================Maude119=========================================== 2018-03-23 Rubén Rubio * pattern.cc (prepare): added (Pattern): allow pattern processing to be postponed (for their use in SubtermStrategy) * pattern.hh (prepare): added, and two new attributes prepared and withExtension (Pattern): allow pattern processing to be postponed 2017-12-05 Steven Eker * narrowingFolder.cc (RetainedState):getNrRealVariables() -> getNrProtecctedVariables() to fix symmetric bug * variantFolder.cc (RetainedVariant): getNrRealVariables() -> getNrProtecctedVariables() to fix symmetric bug 2017-12-04 Steven Eker * unifierFilter.cc (RetainedUnifier): us getNrProtectedVariables() rather than getNrRealVariables() to fix bug where we weren't accounting for abstraction variables ===================================Maude116=========================================== 2017-05-26 Steven Eker * narrowingSequenceSearch3.cc (NarrowingSequenceSearch3): fixed bug where we were not deleting stateBeingExpanded 2017-05-25 Steven Eker * narrowingFolder.cc (addHistory): added Assert() to catch null values in unifier (addHistory): reverted - nulls in a unifier are legal between the rule variables and the dag variables (markReachableNodes): check for null pointers in the unifier (addHistory): added comment to explain why we don't need to protect our variableInfo copy * higher.hh: deleted class NarrowingSequenceSearch2 2017-05-24 Steven Eker * narrowingFolder.hh (getHistory): handle unifierVariableInfo * narrowingSequenceSearch3.hh (getHistory): handle unifierVariableInfo * narrowingSequenceSearch3.cc (findNextInterestingState): pass variableInfo to addHistory(); don't make a copy of the unifier * narrowingFolder.hh (SimpleRootContainer): updated decl for addHistory(); added variableInfo data member to struct RetainedState * narrowingFolder.cc (addHistory): moved here (addHistory): take variableInfo argument; make copies of unifier and variableInfo * narrowingFolder.hh (SimpleRootContainer): deleted decl for getState() * narrowingFolder.cc (insertState): check that ther is a parent state before incrementing its descendant count (getState): deleted 2017-05-23 Steven Eker * narrowingFolder.hh (getHistory): added (getDepth): added * narrowingSequenceSearch3.hh (getExtraStateInfo): added (getHistory): added 2017-05-19 Steven Eker * narrowingSequenceSearch2.cc: deleted * narrowingSequenceSearch2.hh: deleted * narrowingFolder.cc (RetainedState): call determineContextVariables() and insertAbstractionVariables() * narrowingSequenceSearch3.hh (getUnifierVariableFamily): added (getStateDag): deleted 2017-05-18 Steven Eker * narrowingSearchState2.cc (NarrowingSearchState2): fix bug that we didn't hande the ground case (NarrowingSearchState2): fix similar bug with blocker dags * narrowingSequenceSearch3.cc (NarrowingSequenceSearch3): rename user variables to #variables; this side steps a bug where original variables could be lost due to reduce and then garbage collected 2017-05-17 Steven Eker * narrowingSequenceSearch3.cc (findNextInterestingState): use replacementContextProtector to protect replacementContext across a reduce() call * narrowingSequenceSearch3.hh (SequenceSearch): added data member replacementContextProtector * narrowingFolder.cc (insertState): increment the nrDescendants in the not folding but keeping history case * narrowingFolder.hh (SimpleRootContainer): added decl for cleanGraph() * narrowingFolder.cc (cleanGraph): added * narrowingFolder.hh (SimpleRootContainer): added nrDescendants field to RetainedState * narrowingFolder.cc (RetainedState): initialize nrDescendants 2017-05-16 Steven Eker * narrowingSequenceSearch3.cc (NarrowingSequenceSearch3): initialize stateBeingExpandedDepth, expansionSuccessful * narrowingSequenceSearch3.hh (SequenceSearch): added data members stateBeingExpandedDepth, expansionSuccessful * narrowingSequenceSearch3.cc (findNextInterestingState): support =>! 2017-05-12 Steven Eker * narrowingSequenceSearch3.hh (getStateInfo): added (getVariableInfo): becomes getUnifierVariableInfo() (getInitialVariableInfo): added * narrowingSequenceSearch3.cc (findNextInterestingState): test for != depth to treat -1 as unbounded * narrowingFolder.cc (subsumes): initialize subproblem to 0 * narrowingSequenceSearch3.hh (SequenceSearch): added data member nextInterestingState (getStateDag): added * narrowingSequenceSearch3.cc (NarrowingSequenceSearch3): initialize nextInterestingState (findNextUnifier): nextInterestingState is no longer local * narrowingSequenceSearch3.hh (getUnifier, getVariableInfo): added 2017-05-11 Steven Eker * narrowingSearchState3.cc (makeAccumulatedSubstitution): implemented * narrowingFolder.hh (keepingHistory): added * narrowingFolder.cc (RetainedState): zero out narrowingContext and narrowingPosition (markReachableNodes): mark narrowingContext if non-null * narrowingFolder.hh (SimpleRootContainer): added data member narrowingContext to struct RetainedState (addHistory): take and save narrowingContext * narrowingSearchState3.hh (SimpleRootContainer): updated decl for getNarrowedDag() (getSubstitution): becomes getUnifier() * narrowingSearchState3.cc (getNarrowedDag): implemented 2017-05-10 Steven Eker * narrowingSearchState3.cc (NarrowingSearchState3): implemented (~NarrowingSearchState3): implemented (markReachableNodes): implemented (findNextNarrowing): implemented * narrowingSequenceSearch3.cc (findNextUnifier): handle instantiation of goal correctly (NarrowingSequenceSearch3): index goal 2017-05-09 Steven Eker * higher.hh: added class NarrowingSearchState3 and class NarrowingSequenceSearch3 * narrowingSequenceSearch3.cc: created * narrowingSequenceSearch3.hh: created * narrowingSearchState3.hh: created * narrowingSearchState3.cc: created * narrowingFolder.hh (SimpleRootContainer): added data member currentStateIndex * narrowingFolder.cc (NarrowingFolder): initialize currentStateIndex * narrowingFolder.hh (SimpleRootContainer): updated decl for getNextSurvivingState() * narrowingFolder.cc (getNextSurvivingState): added 2017-05-05 Steven Eker * narrowingFolder.cc (insertState): fill out depth field * narrowingFolder.hh (SimpleRootContainer): added depth field to struct RetainedState 2017-05-04 Steven Eker * narrowingFolder.hh (getState): added 2017-05-03 Steven Eker * narrowingFolder.hh (SimpleRootContainer): added field narrowingPosition (addHistory): handle narrowingPosition 2017-05-02 Steven Eker * narrowingSearchState2.hh (SimpleRootContainer): updated decl for complex ctor * narrowingSearchState2.cc (NarrowingSearchState2): deleted label arg 2017-05-01 Steven Eker * narrowingSearchState2.cc (NarrowingSearchState2): don't initialize label (both versions) * narrowingSearchState2.hh (SimpleRootContainer): deleted label data member * narrowingSearchState2.cc (findNextNarrowing): check narrowing attribute rather than label * narrowingFolder.cc (markReachableNodes): protect accumulatedSubstitution and unifier from garbage collection * narrowingFolder.hh (addHistory, addAccumulatedSubstitution): added * narrowingFolder.cc (RetainedState): default initialization of variableFamily, accumulatedSubstitution, rule, unifier 2017-04-28 Steven Eker * higher.hh: added class NarrowingFolder * narrowingFolder.hh: created * narrowingFolder.cc: created ===================================Maude113=========================================== 2017-04-25 Steven Eker * positionState.cc (rebuildAndInstantiateDag): deleted commented out code ===================================Maude112b=========================================== 2017-03-30 Steven Eker * variantSearch.hh (SimpleRootContainer): added data member irredundantMode (getIrredundantMode): added * variantSearch.cc (VariantSearch): initialize irredundantMode ===================================Maude112a=========================================== 2017-03-10 Steven Eker * narrowingSequenceSearch.hh (getContext): don't Assert() that stateStack.size() > 0 * narrowingSequenceSearch.cc (findNextInterestingState): call incrementNarrowingCount() 2017-03-09 Steven Eker * narrowingSequenceSearch2.cc (NarrowingSequenceSearch2): initialize currentDepth (findNextInterestingState): respect maxDepth in the non-normal form case (findNextInterestingState): respect maxDepth in normal form case 2017-03-03 Steven Eker * narrowingSequenceSearch2.hh (getUnifierVariableFamily): added * narrowingSequenceSearch2.cc (findNextUnifier): use getStateDag(), getStateVariableFamily() * narrowingSequenceSearch2.hh (SequenceSearch): added data members expansionSuccessful, expansionFinished (getStateDag, getVariableFamily): handle normalFormNeeded flag (getStateVariableFamily): renamed from getVariableFamily() * narrowingSequenceSearch2.cc (NarrowingSequenceSearch2): set expansionFinished = true so we don't expand a nonexistent state (findNextInterestingState): reorganized using expansionSuccessful and expansionFinished flags; handle normalFormNeeded (~NarrowingSequenceSearch2): hand responsibility for deleting context of state just expanded to stateBeingExpanded object * narrowingSequenceSearch2.hh (isIncomplete): added (getVariableFamily): added * narrowingSequenceSearch2.cc (findNextUnifier): propagate incompleteness from VariantSearch object (findNextInterestingState): propagate incompleteness from NarrowingSearchState2 object 2017-03-02 Steven Eker * narrowingSequenceSearch2.cc (allVariablesBelongToIncomingFamily): added (NarrowingSequenceSearch2): support renaming if variables from outside of family are detected (findNextInterestingState): transfer reduce and narrowing step counts to initial (NarrowingSequenceSearch2): transfer reduce count to initial (findNextInterestingState): call incrementNarrowingCount() after each successful narrowing step (findNextUnifier): transfer count from context in VariantSearch object (NarrowingSequenceSearch2): fix bug where we weren't initializing nextToExpand 2017-03-01 Steven Eker * narrowingSequenceSearch2.cc (findNextInterestingState): added support for tracing and abort 2017-02-28 Steven Eker * narrowingSequenceSearch2.hh (getVariableInfo): added 2017-02-27 Steven Eker * narrowingSequenceSearch2.hh: created * narrowingSequenceSearch2.cc: created * higher.hh: added class NarrowingSequenceSearch2 2017-02-21 Steven Eker * positionState.cc (rebuildAndInstantiateDag): use new instantiateWithReplacement() convention 2017-02-17 Steven Eker * positionState.cc (exploreNextPosition): use Symbol version of stackArguments() (PositionState): pass eager flag to RedexPosition (exploreNextPosition): pass eagerContext flag to stackArguments() (rebuildAndInstantiateDag): use eager flag to decide which bindings to pass to instantiateWithReplacement() 2017-01-27 Steven Eker * narrowingSearchState2.hh (SimpleRootContainer): added GC_VAR_GEN to enum Flags; pass it by default * positionState.hh (P): made flags an int for safety * narrowingSearchState2.cc (NarrowingSearchState2): added simplified ctor that assumes all variables are in-family and there are no blocker dags (NarrowingSearchState2): only delete the variable generator if the flag was passed 2017-01-11 Steven Eker * rewriteConditionFragment.cc (solve): stack<> -> Stack<> * rewriteConditionFragment.hh: stack<> -> Stack<> * assignmentConditionFragment.cc (solve): stack<> -> Stack<> * assignmentConditionFragment.hh: stack<> -> Stack<> * sortTestConditionFragment.cc (solve): stack<> -> Stack<> * sortTestConditionFragment.hh: stack<> -> Stack<> * equalityConditionFragment.cc (solve): stack<> -> Stack<> * equalityConditionFragment.hh: stack<> -> Stack<> * searchState.hh: stack<> -> Stack<> ===================================Maude111b=========================================== 2017-01-06 Steven Eker * narrowingSearchState2.cc (NarrowingSearchState2): index blockerDags * narrowingSearchState2.hh (SimpleRootContainer): blockerDags no longer const * narrowingSearchState2.cc (getNarrowedDag): fix bug where we had an assignment inside ?: (NarrowingSearchState2): rename variables blockerDags * variantUnificationProblem.cc (findNextUnifier): use unifier size to know how many bindings to extract from unifier - this makes a difference if there are other variables in the context or blocker terms 2017-01-05 Steven Eker * variantSearch.cc (VariantSearch): check for unsafe variables names in blocker dags 2017-01-03 Steven Eker * narrowingSearchState2.hh (SimpleRootContainer): added data member reverseMapping * narrowingSearchState2.cc (NarrowingSearchState2): fill out reverseMapping (getNarrowedDag): use reverseMapping (~NarrowingSearchState2): delete reverseMapping * narrowingSearchState2.hh (SimpleRootContainer): updated decl for getNarrowedDag() * narrowingSearchState2.cc (getNarrowedDag): pass back a replacementContext ===================================Maude111a=========================================== 2016-12-20 Steven Eker * variantUnificationProblem.cc (findNextUnifier): undo change - we introduced a suble bug by moving a necessary side effect into an Assert() * narrowingSearchState2.cc (NarrowingSearchState2): rearrange Assert() to avoid unused variable warning 2016-12-19 Steven Eker * narrowingSearchState2.cc (findNextNarrowing): transfer counts from newContext to context if they differ (2 places) * variantUnificationProblem.cc (VariantUnificationProblem): initialize context (VariantUnificationProblem): new data member rather than local variable for newContext (findNextUnifier): tranfer counts from newContext to context * variantUnificationProblem.hh (SimpleRootContainer): added data members context and newContext 2016-12-16 Steven Eker * narrowingSearchState2.hh (getNrOfVariablesInSubject): deleted * narrowingSearchState2.cc (getNarrowedDag): use stored module pointer * narrowingSearchState2.hh (getReplacedDag): added (getActiveContext): added (getActiveVariableInfo): added 2016-12-15 Steven Eker * narrowingSearchState2.hh (SimpleRootContainer): added decl for allVariablesBelongToIncomingFamily(); disallowedVariableFamily ->incomingVariableFamily throughout (getRule, getSubstitution): moved here * narrowingSearchState2.cc: disallowedVariableFamily -> incomingVariableFamily throughout (allVariablesBelongToIncomingFamily): added 2016-12-14 Steven Eker * narrowingSearchState2.cc (NarrowingSearchState2): fill out freshVariableInfo as we create fresh variables. (findNextNarrowing): pass freshVariableInfo rather than variableInfo to VariantUnificationProblem() * narrowingSearchState2.hh (SimpleRootContainer): added data member freshVariableInfo * narrowingSearchState2.cc (NarrowingSearchState2): don't initialize PositionState; dynamically create a PositionState object (~NarrowingSearchState2): delete positionState (findNextNarrowing, getNarrowedDag): use positionState * narrowingSearchState2.hh (SimpleRootContainer): removed PositionState as a base class; added data member positionState * narrowingSearchState2.cc (~NarrowingSearchState2): delete freshVariableGenerator 2016-12-12 Steven Eker * narrowingSequenceSearch.cc (NarrowingSequenceSearch): clear incompleteFlag (findNextInterestingState): update incompleteFlag * narrowingSequenceSearch.hh (SequenceSearch): added data member incompleteFlag (isIncomplete): added * narrowingSearchState.hh (PositionState): added data member incompleteFlag (isIncomplete): added * narrowingSearchState.cc (findNextNarrowing): update incompleteFlag (NarrowingSearchState): clear completeFlag * narrowingSearchState2.hh (SimpleRootContainer): added data member incompleteFlag * narrowingSearchState2.cc (findNextNarrowing): update incompleteFlag (NarrowingSearchState2): clear incompleteFlag * narrowingSearchState2.hh (isIncomplete): added 2016-12-09 Steven Eker * narrowingSearchState2.cc (NarrowingSearchState2): use newContext (findNextNarrowing): use newContext (NarrowingSearchState2): delete newContext * narrowingSearchState2.hh (SimpleRootContainer): added data member newContext * narrowingSearchState2.cc (getNarrowedDag): make a clone of replacement so metaContexts work 2016-12-08 Steven Eker * narrowingSearchState2.cc (NarrowingSearchState2): new implementation that handles variable renaming and initial reduction 2016-11-23 Steven Eker * narrowingSearchState2.hh (SimpleRootContainer): derive from CacheableState 2016-11-22 Steven Eker * variantUnificationProblem.cc (VariantUnificationProblem): don't clear incompleteFlag * narrowingSearchState2.cc (findNextNarrowing): pass blockerDags to VariantUnificationProblem() * variantUnificationProblem.cc (findNextUnifier): don't update incompleteFlag * variantUnificationProblem.hh (isIncomplete): use variantSearch incomplete flag rather than local one * variantUnificationProblem.cc (VariantUnificationProblem): handle blockerDags argument * variantUnificationProblem.hh (SimpleRootContainer): updated ctor * variantSearch.hh (SimpleRootContainer): updated comments * narrowingSearchState2.hh (SimpleRootContainer): added decl for markReachableNodes() * narrowingSearchState2.cc (NarrowingSearchState2): take blockerDags argument * variantSearch.hh (SimpleRootContainer): updated decl for ctor * narrowingSearchState2.hh (SimpleRootContainer): private derivation from SimpleRootContainer (SimpleRootContainer): added data member blockerDags * narrowingSearchState2.cc (markReachableNodes): added 2016-11-21 Steven Eker * variantUnificationProblem.cc (VariantUnificationProblem): pass checkVariableNames = false to avoid checks that are unneeded and might cause an issue * variantSearch.cc (VariantSearch): handle checkVariableNames argument * variantSearch.hh (SimpleRootContainer): updated decl for ctor 2016-11-18 Steven Eker * variantUnificationProblem.cc (VariantUnificationProblem): pass false to VariantSearch deleteFreshVariableGenerator arg * variantSearch.cc (VariantSearch): handle deleteFreshVariableGenerator arg (VariantSearch): conditionally delete freshVariableGenerator * variantSearch.hh (SimpleRootContainer): added data member deleteFreshVariableGenerator; updated decl for ctor 2016-11-17 Steven Eker * narrowingSearchState2.hh (PositionState): default to REPECT_FROZEN * variantUnificationProblem.cc (findNextUnifier): fix bug where we weren't creating fresh variables to bind to unbound variables from the preEquation (findNextUnifier): increment nrFreeVariables after, rather than before fresh variable is created so that numbering is correct 2016-11-16 Steven Eker * narrowingSearchState2.cc (findNextNarrowing): don't narrow at variable positions (findNextNarrowing): check that rule has the right kind on top * narrowingSearchState.cc (findNextNarrowing): don't narrow at variable positions 2016-11-15 Steven Eker * variantUnificationProblem.cc (findNextUnifier): use new VariableInfo::variable2Index() member function to translate variable from preEquation (VariantUnificationProblem): save pointer to preEquation (findNextUnifier): fix multiple bugs in manipulation of indices 2016-11-14 Steven Eker * higher.hh: added class VariantUnificationProblem, class NarrowingSearchState2 2016-11-11 Steven Eker * narrowingSearchState2.hh: created * narrowingSearchState2.cc: created * variantSearch.hh (SimpleRootContainer): added data member targetCopy * variantSearch.cc (markReachableNodes): mark targetCopy (VariantSearch): use copyAll() to make a complete copy of the target dag 2016-11-09 Steven Eker * variantUnificationProblem.hh (SimpleRootContainer): added data member nrPreEquationVariables * variantUnificationProblem.cc (findNextUnifier): avoid binding slots that fall in the hole between preEquation variables and target variables (VariantUnificationProblem): store nrPreEquationVariables 2016-11-08 Steven Eker * variantUnificationProblem.hh: created * variantUnificationProblem.cc: created 2016-11-04 Steven Eker * variantSearch.hh (SimpleRootContainer): updated decl for ctor * variantSearch.cc (VariantSearch): take disallowedVariableFamily arg rather than firstVariableFamily, secondVariableFamily args * variantFolder.cc: deleted commented out version of getNextSurvivingVariant() 2016-11-03 Steven Eker * variantSearch.cc (VariantSearch): need to pass firstVariableFamily when we create fresh variables for initial substitution 2016-11-02 Steven Eker * variantSearch.cc (expandVariant): pass variableFamily to insertVariant() (VariantSearch): pass UNDEFINED as variableFamily to insertVariant() (getNextUnifier): Assert() check for UNDEFINED variableFamily * variantFolder.hh (SimpleRootContainer): updated decl for insertVariant() * variantFolder.cc (getNextSurvivingVariant): fill out variableFamily (insertVariant): take variableFamily argument and copy it into RetainedVariant * variantFolder.hh (SimpleRootContainer): added data member variableFamily to struct RetainedVariant * variantSearch.cc (getNextUnifier): pass variableFamily argument to getNextSurvivingVariant() (getNextVariant): pass dummy variableFamily argument to getNextSurvivingVariant() * variantFolder.cc (getNextSurvivingVariant): added variableFamily argument * variantFolder.hh (SimpleRootContainer): updaed decl for getNextSurvivingVariant() 2016-11-01 Steven Eker * variantSearch.hh (SimpleRootContainer): updated decl for getNextUnifier() 2016-10-28 Steven Eker * variantSearch.hh (SimpleRootContainer): updated ctor; odd -> useFirstVariableFamily * variantSearch.cc (VariantSearch): take arguments firstVariableFamily, secondVariableFamily (expandVariant, VariantSearch): odd -> useFirstVariableFamily * variantSearch.hh (SimpleRootContainer): added data members firstVariableFamily, secondVariableFamily * variantNarrowingSearchState.hh (PositionState): updated decl for ctor * variantNarrowingSearchState.cc (VariantNarrowingSearchState): odd becomes variableFamily throughout 2016-10-26 Steven Eker * narrowingUnificationProblem.cc: odd -> variableFamily throughout * narrowingUnificationProblem.hh (SimpleRootContainer): data member odd becomes int variableFamily; updated ctor decls 2016-10-19 Steven Eker * narrowingUnificationProblem.cc (classifyVariables): simplified to make use of the invariant that variables occuring in a binding to an original variable must themselves be unbound (otherwise they would have been instiatiated away by PendingUnificationStack) (findNextUnifier): removed commented out code ===================================Maude111=========================================== 2016-05-17 Steven Eker * equalityConditionFragment.hh (normalize): added 2016-04-08 Steven Eker * unificationProblem.cc (findOrderSortedUnifiers): use getCachedPairing() * narrowingUnificationProblem.hh (SimpleRootContainer): deleted data members order, done, pending; deleted decls for explore(), extractUnifier() * narrowingUnificationProblem.cc (explore, extractUnifier): deleted * narrowingUnificationProblem.hh (SimpleRootContainer): added decl for classifyVariables() * narrowingUnificationProblem.cc (classifyVariables): added (findNextUnifier): use classifyVariables() * unificationProblem.cc (bindFreeVariables): added * unificationProblem.hh (SimpleRootContainer): added decl for bindFredVariables() * unificationProblem.cc (findNextUnifier): code cleaning (findNextUnifier): re-organization 2016-04-07 Steven Eker * narrowingUnificationProblem.hh (SimpleRootContainer): updated comments * narrowingUnificationProblem.cc (NarrowingUnificationProblem): code cleaning 2016-04-06 Steven Eker * narrowingUnificationProblem.cc (findOrderSortedUnifiers): code cleaning * unificationProblem.cc (findOrderSortedUnifiers): code cleaning 2016-04-01 Steven Eker * narrowingUnificationProblem.cc (findOrderSortedUnifiers): deleted commented out code 2016-03-31 Steven Eker * narrowingUnificationProblem.cc (findOrderSortedUnifiers): undo last change as it introduced a bug where we were expecting identities mappings on other BDD variables (findOrderSortedUnifiers): use cached pairing for secondArgToReal and explicitly add needed identity mappings 2016-03-30 Steven Eker * narrowingUnificationProblem.cc (findOrderSortedUnifiers): use cached pairing for realTofirstArg 2016-03-25 Steven Eker * narrowingUnificationProblem.cc (findOrderSortedUnifiers): use computeGeneralizedSort2() * unificationProblem.cc (findOrderSortedUnifiers): use computeGeneralizedSort2() ===================================Maude110=========================================== 2016-02-05 Steven Eker * variantSearch.cc (getLastReturnedVariant): pass pointers rather than references to VariantFolder::getLastReturnedVariant() (getNextVariant): pass pointers rather than references to VariantFolder::getLastReturnedVariant() * variantSearch.hh (getLastReturnedUnifier): removed dummy variables now that we've changed interface to VariantFolder::getNextSurvivingVariant() * variantSearch.cc (getNextUnifier): removed dummy variables now that we've changed interface to VariantFolder::getNextSurvivingVariant() * variantFolder.hh (SimpleRootContainer): updated decls for getNextSurvivingVariant() and getLastReturnedVariant() * variantFolder.cc (getNextSurvivingVariant): variantNumber, parentNumber and moreInLayer are now pointers rather than references so that they can be null if the information isn't wanted by the caller (getLastReturnedVariant): symmetric changes to above, for parentNumber and moreInLayer 2016-02-04 Steven Eker * variantSearch.hh (getLastReturnedUnifier): pass dummy args to VariantFolder::getLastReturnedVariant() * variantSearch.cc (getLastReturnedVariant): added Assert() to insist that there is actuualy a variant to return * variantFolder.cc (getLastReturnedVariant): moved here; no longer inline * variantSearch.cc (getLastReturnedVariant): moved here; no longer inline * variantFolder.hh (getLastReturnedVariant): take parentNumber and moreInLayer arguments * variantSearch.hh (getLastReturnedVariant): take parentIndex and moreInLayer args; updated decl for getNextVariant() * variantSearch.cc (getNextVariant): return parentIndex and moreInLayer 2016-01-28 Steven Eker * variantFolder.hh (SimpleRootContainer): updated decl for getNextSurvivingVariant() * variantFolder.cc (getNextSurvivingVariant): pass back variantNumber and variantIndex * variantSearch.cc (getNextVariant): use new getNextSurvivingVariant() convention; track nrVariantReturned (getNextUnifier): use new getNextSurvivingVariant() convention * variantSearch.hh (SimpleRootContainer): added data members nrVariantsReturned, internalIndexToExternalIndex 2016-01-22 Steven Eker * variantSearch.cc (getNextUnifier, getNextVariant): pass dummy argument to getNextSurvivingVariant() * variantFolder.hh (SimpleRootContainer): updated decl for getNextSurvivingVariant() * variantFolder.cc (insertVariant): manage layerNumber field (getNextSurvivingVariant): rewritten to check for a next variant in the same layer as the one we just found * variantFolder.hh (SimpleRootContainer): added layerNumber field to struct RetainedVariant ===================================Maude109=========================================== 2015-10-16 Steven Eker * unifierFilter.cc (subsumes): symmetric change to below * variantFolder.cc (subsumes): allocate at least one slot, but clear the correct number of variables (even if it is 0) so that we don't get a size mismatch with local substitutions in matching automata ===================================Maude108a=========================================== 2015-09-17 Steven Eker * variantNarrowingSearchState.cc (VariantNarrowingSearchState): fixed nasty bug where we were narrowing with variant equations from the wrong component * narrowingUnificationProblem.cc (findOrderSortedUnifiers): use getRemappedLeqRelation() for fresh variables (findOrderSortedUnifiers): use applyLeqRelation() and getRemappedLeqRelation() for original variables 2015-08-21 Steven Eker * variantSearch.hh (SimpleRootContainer): get rid of default values for arguments 2015-08-13 Steven Eker * variantSearch.hh (SimpleRootContainer): added data member incompleteFlag (isIncomplete): added * variantSearch.cc (expandVariant): update incompleteFlag (VariantSearch): clear incompleteFlag * narrowingUnificationProblem.hh (isIncomplete): added * variantNarrowingSearchState.hh (PositionState): added data member incompleteFlag (isIncomplete): added * variantNarrowingSearchState.cc (VariantNarrowingSearchState): check unification problems for incompleteness and update incompleteFlag (VariantNarrowingSearchState): clear incompleteFlag 2015-07-23 Steven Eker * unificationProblem.cc: deleted commented out variable order stuff * unificationProblem.hh (isIncomplete): added (SimpleRootContainer): deleted commented out variable order stuff that is now done in PendingUnficationStack as part of the cycle breaking code ===================================Maude108=========================================== 2015-02-23 Steven Eker * variantSearch.hh (getLastReturnedVariant) (getLastReturnedUnifier): added * variantFolder.hh (getLastReturnedVariant): added ===================================Maude107=========================================== 2014-11-18 Steven Eker * unificationProblem.cc (UnificationProblem): added instrumentation * narrowingUnificationProblem.cc (NarrowingUnificationProblem): use DebugAdvisory() ===================================Maude106=========================================== 2014-08-06 Steven Eker * equalityConditionFragment.hh (ConditionFragment): added decl for buildInstances() * equalityConditionFragment.cc (buildInstances): added ===================================Maude104=========================================== 2014-03-03 Steven Eker * variantSearch.cc (VariantSearch): don't initialize irredundantMode mode (expandLayer): clear both frontiers if we abort * variantSearch.hh (SimpleRootContainer): deleted data members unifierCollection, irredundantMode, unifierIndex (SimpleRootContainer): added data member nrVariantVariables (SimpleRootContainer): updated decl for expandLayer() * variantSearch.cc (expandVariant): rewritten to place variants corresponding to unifiers in the common VariantFolder (expandLayer): swap frontiers even if newFrontier empty so we don't revisit old frontier (getNextUnifier): rewritten to handle combined variant/unifier collection (VariantSearch): don't rely on expandLayer() return value (getNextVariant): don't rely on expandLayer() return value (expandLayer): don't return a value * variantFolder.cc (RetainedVariant): added comments (subsumes): allow comparison of variants of different sizes, with instant failure 2014-02-28 Steven Eker * variantSearch.cc (getNextVariant): use irredundantMode flag (getNextUnifier): use irredundantMode flag * variantSearch.hh (SimpleRootContainer): added data member irredundantMode * variantSearch.cc (VariantSearch): use expandLayer() (getNextVariant): rewritten to be incemental and moved here (getNextUnifier): rewritten to be incemental and moved here (VariantSearch): no longer call expandLayer() here * variantSearch.hh (SimpleRootContainer): added decl expandLayer(); decl for expand() becomes expandVariant() * variantSearch.cc (expandLayer): added (expand): becomes expandVariant(), loses odd arg * variantSearch.hh (SimpleRootContainer): added data member odd * variantFolder.hh (SimpleRootContainer): deleted data members startedExtractingVariants, nextVariant; added data member currentVariantIndex * variantFolder.cc (getNextSurvivingVariant): rewritten to allow variants to be extracted, even though fresh variants may still be inserted (VariantFolder): init currentVariantIndex; don't init startedExtractingVariants ===================================Maude101=========================================== 2014-02-06 Steven Eker * variantSearch.cc (expand): #if out debugging code 2013-12-20 Steven Eker * variantNarrowingSearchState.cc (collectUnifiers): wrap informational code in #ifndef NO_ASSERT ===================================Maude100a=========================================== 2013-03-22 Steven Eker * narrowingUnificationProblem.cc (findOrderSortedUnifiers): added DebugAdvisory()s to examine the growth of BDD variables ===================================Maude97=========================================== 2012-12-13 Steven Eker * unificationProblem.cc (findNextUnifier): added Assert() and removed "breaking here" comment * unificationProblem.hh (SimpleRootContainer): commented out decls for extractUnifier() and explore(), and data members order, done and pending * unificationProblem.cc (extractUnifier, explore): commented out (findNextUnifier): commented out call to extractUnifier - pendingStack.solve() should do this work as part of cycle resolution ===================================Maude96c=========================================== 2012-08-22 Steven Eker * variantFolder.cc (subsumes): call okToCollectGarbage() * unifierFilter.cc (subsumes): call okToCollectGarbage() * variantNarrowingSearchState.cc (collectUnifiers): can't use getDagNode() if we using the built in variant unification equations because find next position won't have been called 2012-08-21 Steven Eker * variantNarrowingSearchState.cc (collectUnifiers): added code to print out message if excessive number of unifiers seen * variantSearch.cc (expand): added code to print variants as they are added to collection for debugging purposes 2012-08-13 Steven Eker * variantNarrowingSearchState.cc (VariantNarrowingSearchState): don't clear() zero number of variables 2012-08-07 Steven Eker * narrowingSequenceSearch.cc (findNextNormalForm) (NarrowingSequenceSearch): pass odd argument to NarrowingSearchState() (findNextInterestingState): pass odd argument to NarrowingSearchState() * narrowingSearchState.cc (NarrowingSearchState): deal with odd argument (findNextNarrowing): pass odd to NarrowingUnificationProblem() (getNarrowedDag): uncomment code that clears slots between rule variables and start of dag variables; use getNrProtectedVariables() rather than getNrRealVariables() since abstraction variables won't be written over by rhs construction * narrowingSearchState.hh (isOdd): added (PositionState): updated ctor; added data member odd * narrowingSequenceSearch.cc (NarrowingSequenceSearch): rename variables in initial state so that they don't clash with variables in rules (NarrowingSequenceSearch): delete initial 2012-07-30 Steven Eker * variantNarrowingSearchState.hh (PositionState): deleted data member unificationMode * variantNarrowingSearchState.cc (VariantNarrowingSearchState): support unfication mode (VariantNarrowingSearchState): don't initialize unificationMode * narrowingUnificationProblem.hh (SimpleRootContainer): added decl for new ctor * narrowingUnificationProblem.cc (NarrowingUnificationProblem): don't initialize target (NarrowingUnificationProblem): added ctor for lhs vs rhs version * narrowingUnificationProblem.hh (SimpleRootContainer): deleted data member target * variantSearch.cc (VariantSearch): code cleaning; no longer count notional rewrites * variantNarrowingSearchState.cc (findNextVariant): handle virtual narrowing step in unification mode * variantNarrowingSearchState.hh (PositionState): added decl for collectUnifier() * variantNarrowingSearchState.cc (collectUnifiers): added (VariantNarrowingSearchState): use collectUnifiers * variantSearch.cc (expand): pass unificationMode to VariantNarrowingSearchState() * variantNarrowingSearchState.cc (VariantNarrowingSearchState): store unificationMode * variantNarrowingSearchState.hh (PositionState): updated ctor decl (PositionState): added data member unificationMode * variantSearch.hh (SimpleRootContainer): added data member unifierIndex * variantSearch.cc (expand): handle null variant terms indicating unifiers (VariantSearch): initialize unifierIndex 2012-07-27 Steven Eker * variantSearch.cc (VariantSearch): support unificationMode * variantSearch.hh (getNextUnifier): added (SimpleRootContainer): added data members unificationMode and unifierCollection; updated decl for ctor 2012-07-26 Steven Eker * variantNarrowingSearchState.cc (findNextVariant): check instantiated block dag to see that it isn't null * narrowingUnificationProblem.cc (findOrderSortedUnifiers): use variableIndexToSort() (3 places) (bindFreeVariables): use findOrderSortedUnifiers() * narrowingUnificationProblem.hh (SimpleRootContainer): added data member nrPreEquationVariables; added decl for variableIndexToSort() * narrowingUnificationProblem.cc (NarrowingUnificationProblem): initialize nrPreEquationVariables (bindFreeVariables): dispense with local nrPreEquationVariables (findOrderSortedUnifiers): dispense with local nrPreEquationVariables (extractUnifier): dispense with local nrPreEquationVariables (variableIndexToSort): added 2012-07-20 Steven Eker * variantSearch.cc (expand): fixed bug where we using a local blockerDags variable 2012-07-19 Steven Eker * variantSearch.cc (VariantSearch): index, normalize, sort and check blocker dags 2012-07-18 Steven Eker * variantSearch.cc (VariantSearch): take blockerDags argument (markReachableNodes): protect blockerDags * variantSearch.hh (SimpleRootContainer): added data member blockerDags; update decl for ctor * variantNarrowingSearchState.cc (VariantNarrowingSearchState): clear blockerSubstitution to ensure any variables that only occur in blocker dags are assigned 0 * variantNarrowingSearchState.hh (PositionState): store a reference rather than a shallow copy of variantSubstitution * variantNarrowingSearchState.cc (findNextVariant): check for blocker dags becoming reducible * variantSearch.cc (VariantSearch): try indexing varriables in start dag from 0 since everything gets reindexed by VariantNarrowingSearchState() anyway (expand): pass blockerDags to VariantNarrowingSearchState() * variantNarrowingSearchState.hh (PositionState): added data member blockerDags; updated decl for ctor (PositionState): added data member blockerSubstitution * variantNarrowingSearchState.cc (VariantNarrowingSearchState): take blockerDags argument 2012-07-13 Steven Eker * variantNarrowingSearchState.hh (PositionState): delete decl for reducibleByVariantEquation() * variantNarrowingSearchState.cc (VariantNarrowingSearchState): code cleaning (reducibleByVariantEquation): deleted (findNextVariant): use DagNode version of reducibleByVariantEquation() (VariantNarrowingSearchState): use DagNode version of reducibleByVariantEquation() * variantNarrowingSearchState.hh (PositionState): removed data members firstTargetSlot and nrInterestingVariables 2012-07-12 Steven Eker * variantNarrowingSearchState.cc (VariantNarrowingSearchState): try doing reducibility check on interesting variables * variantNarrowingSearchState.hh (PositionState): added data members firstTargetSlot and nrInterestingVariables * variantNarrowingSearchState.cc (reducibleByVariantEquation): use isIrreducibleByVariantEquations() and setIrreducibleByVariantEquations() (findNextVariant): try checking bindings to interesting variables for reducibility first * variantFolder.cc (RetainedVariant): changed comment on call to normalize() * unifierFilter.cc (~UnifierFilter): RetainedUniferList replaces RetainedUnifierMultimap (markReachableNodes): RetainedUniferList replaces RetainedUnifierMultimap; fix loop variable masking issue (insertUnifier): RetainedUniferList replaces RetainedUnifierMultimap (getNextSurvivingUnifier): RetainedUniferList replaces RetainedUnifierMultimap (RetainedUnifier): changed comment on call to normalize() * unifierFilter.hh (SimpleRootContainer): added positionIndex to struct RetainedUnifier; RetainedUnifierMultimap becomes RetainedUniferList 2012-07-10 Steven Eker * narrowingSearchState.cc (getNarrowedDag): use new rebuildAndInstantiateDag() return value * variantNarrowingSearchState.cc (findNextVariant): use new rebuildAndInstantiateDag() return value * positionState.hh (P): updated decl for rebuildAndInstantiateDag() * positionState.cc (rebuildAndInstantiateDag): don't both returning replacement because it can't change - we don't support extension for narrowing * narrowingUnificationProblem.hh (SimpleRootContainer): updated decl for findOrderSortedUnifiers() * narrowingUnificationProblem.cc (findNextUnifier): use bindFreeVariables() (findOrderSortedUnifiers): removed commented out code (findOrderSortedUnifiers): now return bool (findNextUnifier): rewritten * narrowingUnificationProblem.hh (SimpleRootContainer): added decl for bindFreeVariables() * narrowingUnificationProblem.cc (bindFreeVariables): added 2012-07-09 Steven Eker * narrowingUnificationProblem.cc (NarrowingUnificationProblem): pass odd argument to UnificationContext 2012-07-06 Steven Eker * variantNarrowingSearchState.cc (findNextVariant): clear slots in unifier that might have been trample by rhs construction * variantSearch.cc (expand): newFrontier is now a VariantIndexVec (VariantSearch): frontier is now a VariantIndexVec * variantSearch.hh (SimpleRootContainer): replace VariantIndexSet with VariantIndexVec * variantSearch.cc (expand): hack to trace expansion of variants * variantFolder.cc (getNextSurvivingVariant): hack to trace parentage of variants 2012-07-03 Steven Eker * unifierFilter.hh (SimpleRootContainer): deleted commented out code * unifierFilter.cc (RetainedUnifier): code cleaning and add comments (subsumes): code cleaning * variantNarrowingSearchState.cc (VariantNarrowingSearchState): fix bug where we were passing the wrong number of interesting variables to UnificationFilter (but this should only be an efficiency issue) (VariantNarrowingSearchState): code cleaning; fix comments * variantSearch.hh (SimpleRootContainer): updated decl for getContext(); ifdef'd decl for dumpVariant() * variantSearch.cc (VariantSearch): code cleaning; fix out of date comments (markReachableNodes): remove commented out code; added comment (expand): code cleaning and fix comments (dumpVariant): ifdef'd 2012-05-31 Steven Eker * variantFolder.cc (RetainedVariant): compile dags in reverse order (subsumes): match dags in reverse order * narrowingUnificationProblem.hh (SimpleRootContainer): added data member sortConstrainedVariables * narrowingUnificationProblem.cc (extractUnifier): don't call explore() on unbound variables (explore): fill out sortConstraintVariables (extractUnifier): clear sortConstrainedVariables (findOrderSortedUnifiers): only assign BDD variables to sort constrained free variables rather than all free variables (findNextUnifier): don't do BDD lookup for free variables which are not sort constrained * variantNarrowingSearchState.cc (VariantNarrowingSearchState): only variable occuring in the term part of the variant being narrowing are considered to be interesting for unifier filtering purposes 2012-05-29 Steven Eker * variantFolder.hh (SimpleRootContainer): updated decl for subsumes() * variantFolder.cc (subsumes): fix performance bug where we were passing the variant by copy rather than by reference ===================================Maude96a=========================================== 2012-05-23 Steven Eker * variantNarrowingSearchState.cc (VariantNarrowingSearchState): need to delete unificationProblem after we're done with it 2012-05-22 Steven Eker * unifierFilter.hh (SimpleRootContainer): commented out previous changes * unifierFilter.cc (insertUnifier): commented out previous changes (getNextSurvivingUnifier): commented out previous changes * variantNarrowingSearchState.cc (findNextVariant) (VariantNarrowingSearchState): commented out previous changes * variantNarrowingSearchState.hh (PositionState): commented out previous decl change * variantSearch.hh (getNextVariant): pass back nrFreeVariables * variantSearch.cc (expand): commented out nrFreeVariables change (VariantSearch): check for unsafe variable names * variantFolder.hh (SimpleRootContainer): updated decl for getNextSurvivingVariant() * variantFolder.cc (RetainedVariant): fill out nrFreeVariables (getNextSurvivingVariant): return nrFreeVariables * variantNarrowingSearchState.hh (PositionState): updated decl for findNextVariant() * variantNarrowingSearchState.cc (VariantNarrowingSearchState): pass nrFreeVariables to insertUnifier() (findNextVariant): get nrFreeVariables from getNextSurvivingUnifier() * unifierFilter.hh (SimpleRootContainer): add nrFreeVariables to struct RetainedUnifier; updated decls for insertUnifier() and getNextSurvivingUnifier() * unifierFilter.cc (getNextSurvivingUnifier): return nrFreeVariables (insertUnifier): store nrFreeVariables 2012-05-21 Steven Eker * narrowingSequenceSearch.cc (findNextNormalForm): check for abort after reducing; use incrementNarrowingCount() and addInCount() * variantSearch.hh (SimpleRootContainer): derive from CacheableState * higher.hh: added classes UnifierFilter, VariantNarrowingSearchState, VariantSearch, VariantFolder * variantSearch.hh (SimpleRootContainer): adde decl for dtor * variantSearch.cc (~NarrowingSequenceSearch): added * variantSearch.hh (getNextVariant): check for traceAbort() (getContext): added * variantSearch.cc (VariantSearch): repostition traceAbort() test * variantNarrowingSearchState.cc (findNextVariant): call incrementVariantNarrowingCount() * variantSearch.cc (markReachableNodes): don't protect VariableDagNodes in variableInfo now that we notice they will be reachable from original dag which itself is protected * variantNarrowingSearchState.cc (findNextVariant): pass originalVariables to traceVariantNarrowingStep() * variantNarrowingSearchState.hh (PositionState): updated decl for ctor; added data member originalVariables * variantNarrowingSearchState.cc (VariantNarrowingSearchState): take extra argument and initialize originalVariables * variantSearch.cc (expand): add in subcontext counts (VariantSearch): delete redContext; add in count from redContext (expand): pass variableInfo to VariantNarrowingSearchState ctor 2012-05-18 Steven Eker * variantNarrowingSearchState.cc (findNextVariant): add tracing 2012-05-17 Steven Eker * variantSearch.cc (VariantSearch): reduce initial term after rather than before replacement of variables with fresh variables; this fixes a bug where reduction was introducing new ground terms without their ground flags set which broke instantiation. (VariantSearch): check for abort * variantNarrowingSearchState.cc (reducibleByVariantEquation): fix multiple problems with the deletion of subproblems 2012-05-11 Steven Eker * variantSearch.hh (SimpleRootContainer): added data member protectedVariant * variantSearch.cc (expand): use protectedVariant to avoid substitution part of new variant being garbage collected when term part is reduced * variantSearch.hh (V): updated decl for expand() (SimpleRootContainer): inherit from SimpleRootContainer (SimpleRootContainer): added decl for markReachableNodes() * variantSearch.cc (expand): handle odd flag and pass it to VariantNarrowingSearchState (VariantSearch): maintain odd flag and pass it to expand() * variantNarrowingSearchState.hh (PositionState): updated decl for ctor * variantNarrowingSearchState.cc (VariantNarrowingSearchState): pass odd flag to NarrowingUnificationProblem() * narrowingUnificationProblem.cc (NarrowingUnificationProblem): handle odd flag (findNextUnifier): pass odd flag to getFreshVariableName * narrowingUnificationProblem.hh (SimpleRootContainer): added odd ctor argument and data member * narrowingUnificationProblem.cc (findNextUnifier): removed commented out call to freshVariableGenerator->reset(); * variantNarrowingSearchState.cc (reducibleByVariantEquation): delete subproblems * variantSearch.cc (VariantSearch): handle the case where instantiate() returns null 2012-05-10 Steven Eker * variantNarrowingSearchState.cc (findNextVariant): fix bug where we were not handling null returned by instantiate() * variantSearch.cc: added * variantSearch.hh: added 2012-05-09 Steven Eker * variantFolder.cc: created * variantFolder.hh: created 2012-05-04 Steven Eker * variantNarrowingSearchState.cc (findNextVariant): use reducibleByVariantEquation() (findNextVariant): normalize and compute sorts for instantiated substition before checking for reducibility * variantNarrowingSearchState.hh (PositionState): added decl for reducibleByVariantEquation() * variantNarrowingSearchState.cc (reducibleByVariantEquation): added 2012-05-03 Steven Eker * variantNarrowingSearchState.cc (VariantNarrowingSearchState): only use equations with the variant attribute (VariantNarrowingSearchState): use equations indexed under symbol for stable symbols 2012-04-30 Steven Eker * unifierFilter.cc (subsumes): don't create zero size substitutions as this breaks stuff 2012-04-27 Steven Eker * unificationProblem.cc (UnificationProblem): use getNrRealVariables() rather than getNrProtectedVariables() - more a cleanliness issue here (findNextUnifier): ditto (findOrderSortedUnifiers): ditto (extractUnifier): dirrot * narrowingUnificationProblem.cc (findNextUnifier): use getNrRealVariables() rather than getNrProtectedVariables(); this fixes a nasty problem that we were treating slots introduced for purposes such as variable abstraction during matching as real variables in the preEquation being used for narrowing, resulting in memory corruption (extractUnifier): ditto (findOrderSortedUnifiers): ditto * narrowingSearchState.cc (getNarrowedDag): don't clear slots used by rhsBuilder - unification code should never look at these 2012-04-26 Steven Eker * unifierFilter.hh (SimpleRootContainer): updated decl for getNextSurvivingUnifier() * unifierFilter.cc (getNextSurvivingUnifier): remove const from unifier * variantNarrowingSearchState.hh: created * variantNarrowingSearchState.cc: created * positionState.hh (P): updated decl for rebuildAndInstantiateDag() * positionState.cc (rebuildAndInstantiateDag): turned CantHappen() into an Assert() (rebuildAndInstantiateDag): take PositionIndex * unifierFilter.cc (getNextSurvivingUnifier): moved here 2012-04-19 Steven Eker * unifierFilter.cc: rewritten * unifierFilter.hh (SimpleRootContainer): rewritten to index retained unifiers by positionIndex and to store equationIndex 2012-04-18 Steven Eker * narrowingUnificationProblem.hh: updated comment to reflect change below * narrowingUnificationProblem.cc (findNextUnifier): rewritten so that we don't modify previously generated unifiers to make new unifiers 2012-04-13 Steven Eker * narrowingSearchState.cc (getNarrowedDag): new rebuildAndInstantiateDag() calling convention * positionState.hh (P): updated decl for rebuildAndInstantiateDag() * positionState.cc (rebuildAndInstantiateDag): rewritten to take an eager copy of the part the substitution we will use if there is any instatiation going to happen 2012-04-05 Steven Eker * unifierFilter.hh: created * unifierFilter.cc: created 2012-03-28 Steven Eker * narrowingUnificationProblem.hh (SimpleRootContainer): switched rule for preEquation * narrowingUnificationProblem.cc: switched rule for preEquation thoughout file * pattern.hh (PreEquation): adde decl for print() * pattern.cc (print): added ===================================Maude96=========================================== 2011-01-06 Steven Eker * unificationProblem.cc (UnificationProblem::findOrderSortedUnifiers): simplifed constraining free fresh variables by using getRemappedLeqRelation() (UnificationProblem::findOrderSortedUnifiers): simplified constraining of free original variable using getRemappedLeqRelation() (UnificationProblem::findOrderSortedUnifiers): simplied constraining of bound original variables using applyLeqRelation() (UnificationProblem::findOrderSortedUnifiers): removed a DebugAdvisory() since leqRelation does have a meaningful value at this point ===================================Maude95c=========================================== 2010-11-30 Steven Eker * pattern.cc (Pattern::Pattern): call setModuleInfo() to set null info so we can identify PreEquations that don't belong to modules ===================================Maude95b=========================================== 2010-09-16 Steven Eker * modelCheckerSymbol.cc (SystemAutomaton::checkProposition): reverted * satSolverSymbol.cc: reverted * satSolverSymbol.hh (class SatSolverSymbol): reverted * temporalSymbol.cc (TemporalSymbol::build): reverted - we need proposition indices to be contiguous which is not guaranteed by HashConsSet * temporalSymbol.hh (class TemporalSymbol): reverted * modelCheckerSymbol.cc (SystemAutomaton::checkProposition): use HashConsSet * modelCheckerSymbol.hh (class ModelCheckerSymbol): DagNodeSet -> HashConsSet * satSolverSymbol.cc (SatSolverSymbol::eqRewrite) (SatSolverSymbol::makeModel, SatSolverSymbol::makeFormulaList) (SatSolverSymbol::makeFormula): use HashConsSet * satSolverSymbol.hh (class SatSolverSymbol): DagNodeSet -> HashConsSet * temporalSymbol.cc (TemporalSymbol::build): simplified using HashConsSet * temporalSymbol.hh (class TemporalSymbol): DagNodeSet -> HashConsSet * stateTransitionGraph.cc (StateTransitionGraph::markReachableNodes): deleted * stateTransitionGraph.hh (class StateTransitionGraph): remove derivation from SimpleRootContainer (class StateTransitionGraph): deleted decl for markReachableNodes() ===================================Maude95=========================================== 2010-07-20 Steven Eker * unificationProblem.cc (UnificationProblem::findNextUnifier): use solve() 2010-07-16 Steven Eker * unificationProblem.cc (UnificationProblem::findNextUnifier): use solve2(); don't use extractUnifier() 2010-05-21 Steven Eker * rewriteConditionState.hh (class RewriteConditionState): use StateTransitionGraph in place of StateTransitionGraph3 * stateTransitionGraph3.cc: deleted * stateTransitionGraph3.hh: deleted * rewriteSequenceSearch.cc (RewriteSequenceSearch::RewriteSequenceSearch): removed mention of StateTransitionGraph3 * rewriteSequenceSearch.hh (class RewriteSequenceSearch): removed mention of StateTransitionGraph3 * modelCheckerSymbol.cc: use StateTransitionGraph in place of StateTransistionGraph3 throughout * modelCheckerSymbol.hh (class ModelCheckerSymbol): use StateTransitionGraph in place of StateTransistionGraph3 ===================================Maude94=========================================== 2010-04-01 Steven Eker * unificationProblem.cc (UnificationProblem::markReachableNodes): deleted commented out unsortedSolution marking code * narrowingUnificationProblem.cc (NarrowingUnificationProblem::markReachableNodes): deleted commented out unsortedSolution marking code * narrowingSearchState.cc (NarrowingSearchState::findNextNarrowing): don't pass extensionInfo to NarrowingUnificationProblem() * narrowingUnificationProblem.hh (class NarrowingUnificationProblem): updated ctor decl; deleted extensionInfo data member; deleted subproblem commented out data member * narrowingUnificationProblem.cc (NarrowingUnificationProblem::NarrowingUnificationProblem): deleted commented out subproblem and extension unification code (~NarrowingUnificationProblem): deleted commented out subproblem code (NarrowingUnificationProblem::findNextUnifier): deleted commented out subproblem code (NarrowingUnificationProblem::NarrowingUnificationProblem): deleted extensionInfo argument * unificationProblem.cc (UnificationProblem::UnificationProblem): remove withExtension arg (UnificationProblem::UnificationProblem): deleted commented out subproblem code (UnificationProblem::findNextUnifier): ditto * unificationProblem.hh (class UnificationProblem): remove withExtension arg from ctor * unificationProblem.cc (UnificationProblem::UnificationProblem): deleted extension handling code (~UnificationProblem): don't delete extensionInfo (UnificationProblem::makeContext): deleted * unificationProblem.hh (class UnificationProblem): deleted decls for makeContext(), getExtensionInfo(), getLeftHandSides(); deleted data member extensionInfo and commented out data member subproblem (UnificationProblem::getExtensionInfo, Vector): deleted ===================================Maude93a=========================================== 2009-12-24 Steven Eker * stateTransitionGraph.cc (getNextState): pass SET_UNREWRITABLE and SET_UNSTACKABLE flags * rewriteSearchState.cc (RewriteSearchState): don't pass SET_UNSTACKABLE flag * rewriteSearchState.hh (class RewriteSearchState): added SET_UNREWRITABLE to enum Flags 2009-12-11 Steven Eker * rewriteSearchState.cc (RewriteSearchState): pass SET_UNSTACKABLE flag * positionState.cc (PositionState): make sure we have SET_UNSTACKABLE set without also setting RESPECT_FROZEN (exploreNextPosition): handle SET_UNSTACKABLE * positionState.hh (class PositionState): added SET_UNSTACKABLE to Flags 2009-12-09 Steven Eker * rewriteSearchState.cc (findNextRewrite): use setUnrewritable()/isUnrewritable() 2009-12-08 Steven Eker * stateTransitionGraph3.cc (getNextState): fix symmetric bug where we weren't allowing garbage collection 2009-12-03 Steven Eker * stateTransitionGraph.cc (getNextState): allow garbage collection in the success case 2009-11-25 Steven Eker * stateTransitionGraph.cc: created * higher.hh: added class StateTransitionGraph 2009-11-24 Steven Eker * stateTransitionGraph.hh: created ===================================Maude92b=========================================== 2009-11-06 Steven Eker * narrowingUnificationProblem.cc (findOrderSortedUnifiers): constrain free fresh variables to have sort indices in valid range * unificationProblem.cc (findOrderSortedUnifiers): move constraints on free fresh variables to after the BDD variables have been allocate, using a separate loop 2009-10-29 Steven Eker * unificationProblem.cc (findOrderSortedUnifiers): fix a critical bug in the algorithm - notion of a sort index being valid cannot be carried through generalized sort computations, and therefore for free variables that are also fresh variables, and won't otherwise be constrained, additional constraints must be added to ensure they only range over valid sort indices 2009-09-23 Steven Eker * unificationProblem.cc (findOrderSortedUnifiers): added DebugAdvisory() to investigate the BDD variable bug ===================================Maude92a=========================================== 2008-09-11 Steven Eker * narrowingUnificationProblem.cc (findOrderSortedUnifiers): use & rather that /\ in comment to avoid multi-line comment warning (findOrderSortedUnifiers): delete nrFreeVariable (findNextUnifier): added #if NO_ASSERT to avoid compiler warning (2 places) * unificationProblem.cc (findOrderSortedUnifiers): use & rather that /\ in comment to avoid multi-line comment warning (findNextUnifier): added #if NO_ASSERT to avoid compiler warning (2 places) ===================================Maude91a=========================================== 2008-04-10 Steven Eker * unificationProblem.cc (UnificationProblem): change variable name warning ===================================Maude91=========================================== 2008-02-12 Steven Eker * narrowingUnificationProblem.cc (markReachableNodes): symmetric with below * unificationProblem.cc (markReachableNodes): comment out unsortedSolution now that UnificationContext handles this 2008-02-05 Steven Eker * narrowingUnificationProblem.cc (findNextUnifier): use pendingStack rather than subproblem * narrowingUnificationProblem.hh (class NarrowingUnificationProblem): pendingStack replaces subproblem * narrowingUnificationProblem.cc (NarrowingUnificationProblem): use new computeSolvedForm() convention * unificationProblem.hh (class UnificationProblem): pendingStack replaces subproblem * unificationProblem.cc (UnificationProblem): use new computeSolvedForm() convention (findNextUnifier): use pendingStack rather than subproblem 2008-01-21 Steven Eker * narrowingSequenceSearch.cc (NarrowingSequenceSearch): handle narrowingFlags arg (NarrowingSequenceSearch, findNextNormalForm) (findNextInterestingState): pass narrowingFlags to NarrowingSearchState() * narrowingSequenceSearch.hh (class NarrowingSequenceSearch): added data member narrowing flags; updated decl for ctor * narrowingSearchState.cc (NarrowingSearchState): initialize noFurtherPositions (findNextNarrowing): support SINGLE_POSITION flag * narrowingSearchState.hh (class NarrowingSearchState): added SINGLE_POSITION flag (class NarrowingSearchState): added data member noFurtherPositions * narrowingSequenceSearch.cc (findNextNormalForm): use new getNarrowedDag() and traceNarrowingStep() conventions (findNextInterestingState): ditto * narrowingSearchState.hh (class NarrowingSearchState): updated decl for getNarrowedDag() * narrowingSearchState.cc (getNarrowedDag): return replacement via a reference arg 2008-01-18 Steven Eker * narrowingSequenceSearch.cc (findNextInterestingState): support tracing (findNextNormalForm): support tracing 2008-01-17 Steven Eker * narrowingSearchState.hh (getVariableInfo): added ===================================Maude90=========================================== 2007-12-04 Steven Eker * narrowingSequenceSearch.hh (getVariableCounter) (setVariableCounter): deleted (getVariableTotalForPreviouslyReturnedStates): added * narrowingSequenceSearch.cc (findNextMatch): do variableTotal accounting (NarrowingSequenceSearch): clear variableTotalForPreviouslyReturnedStates and variableTotalForAllReturnedStates * narrowingSequenceSearch.hh (class NarrowingSequenceSearch): deleted data member variableCounter * narrowingSearchState.hh (getNrOfVariablesInSubject): added * narrowingSearchState.cc (NarrowingSearchState): comment out whole info loop * narrowingSequenceSearch.hh (getStateDag): use stateStack and getContext() in place of contextStack() * narrowingSearchState.hh (getContext): added * narrowingSequenceSearch.hh (class NarrowingSequenceSearch): deleted data member context stack (getContext): added Assert() to protect against empty stack * narrowingSequenceSearch.cc (NarrowingSequenceSearch): don't use contextStack (NarrowingSequenceSearch): don't delete stuff from contextStack (findNextNormalForm, findNextInterestingState): don't use contextStack * narrowingSearchState.hh (class NarrowingSearchState): added data member context * narrowingSearchState.cc (NarrowingSearchState): save context (NarrowingSearchState): delete context * narrowingSequenceSearch.cc (findNextInterestingState): fix bug where we weren't deleting state and context afte during backtracking * narrowingSearchState.cc (findNextNarrowing): fix bug where we weren't deleting a UnificationProblem after it fails to provide another solution 2007-12-03 Steven Eker * narrowingSequenceSearch.hh (getFreshVariableGenerator): added (class NarrowingSequenceSearch): added data member variableCounter (getVariableCounter, setVariableCounter): added * narrowingSequenceSearch.cc (findNextMatch): handle null goal 2007-11-29 Steven Eker * higher.hh: added class CacheableState * searchState.hh (class SearchState): derive from CacheableState * sequenceSearch.hh: derive from CacheableState * unificationProblem.hh (class UnificationProblem): derive from CacheableState * cacheableState.hh: created 2007-11-21 Steven Eker * narrowingSearchState.cc (findNextNarrowing): pass 0 as extensionInfo to NarrowingUnificationProblem() 2007-11-20 Steven Eker * sortTestConditionFragment.cc (check): allow for the case that normalize() deletes the original term due to collapse * rewriteConditionFragment.cc (check): allow for the case that normalize() deletes the original term due to collapse * assignmentConditionFragment.cc (check): allow for the case that normalize() deletes the original term due to collapse * equalityConditionFragment.cc (check): allow for the case that normalize() deletes the original term due to collapse 2007-11-19 Steven Eker * narrowingSequenceSearch.cc (findNextMatch): use getStateDag() * narrowingSequenceSearch.hh (getContext): added (getStateDag): added * higher.hh: added class SequenceSearch * rewriteSequenceSearch.hh (class RewriteSequenceSearch): derive from SequenceSearch * narrowingSequenceSearch.hh (class NarrowingSequenceSearch): derive from SequenceSearch * sequenceSearch.hh (class SequenceSearch): created 2007-11-16 Steven Eker * narrowingSearchState.hh (class NarrowingSearchState): added decl for ~NarrowingSearchState() * narrowingSearchState.cc (~NarrowingSearchState): added * narrowingSequenceSearch.cc (~NarrowingSequenceSearch): delete any pending states and contexts on the stacks (~NarrowingSequenceSearch): delete freshVariableGenerator 2007-11-15 Steven Eker * narrowingSequenceSearch.cc (findNextNormalForm): use seenSet (NarrowingSequenceSearch): initialize seenSet (findNextInterestingState): use seenSet (findNextNormalForm): falsify topOfStackFresh after detecting a dup 2007-11-14 Steven Eker * narrowingSequenceSearch.hh (class NarrowingSequenceSearch): added data member seenSet * narrowingSequenceSearch.cc (findNextMatch): call findNextNormalForm() from here (findNextInterestingState): don't call findNextNormalForm() from here * narrowingSequenceSearch.hh (class NarrowingSequenceSearch): replace firstCall flag with topOfStackFresh flag * narrowingSequenceSearch.cc (findNextNormalForm): handle maxDepth (findNextNormalForm): reorganized (findNextNormalForm): simplified; get rid of firstCall flag (NarrowingSequenceSearch): initialize topOfStackFresh flag 2007-11-13 Steven Eker * narrowingSequenceSearch.cc (NarrowingSequenceSearch): initialize firstCall * narrowingSequenceSearch.hh (class NarrowingSequenceSearch): added decl for findNextNormalForm(); added data member firstCall * narrowingSequenceSearch.cc (findNextNormalForm): added * narrowingSequenceSearch.hh (class NarrowingSequenceSearch): deleted data member reachingInitialStateOK * narrowingSequenceSearch.cc (NarrowingSequenceSearch): don't initialize reachingInitialStateOK 2007-11-06 Steven Eker * narrowingSearchState.hh (class NarrowingSearchState): pass ALLOW_NONEXEC as default flags argument 2007-10-31 Steven Eker * narrowingSequenceSearch.cc (findNextInterestingState): handle maxDepth == NONE (findNextInterestingState): handle trying of initial state 2007-10-30 Steven Eker * narrowingSequenceSearch.cc (findNextInterestingState): use contextStack (findNextMatch): use contextStack (NarrowingSequenceSearch): initialize contextStack (findNextInterestingState): start backtracking if current depth reached. * narrowingSequenceSearch.hh (class NarrowingSequenceSearch): added data member contextStack 2007-10-29 Steven Eker * narrowingSequenceSearch.hh: created * narrowingSequenceSearch.cc: created * rewriteSequenceSearch.hh: #define _rewriteSequenceSearchState_hh_ becomes _rewriteSequenceSearch_hh_ 2007-10-24 Steven Eker * positionState.hh (class PositionState): added decl for rebuildAndInstantiateDag() * positionState.cc (rebuildAndInstantiateDag): added 2007-10-19 Steven Eker * narrowingSearchState.cc (findNextNarrowing): pass extension info to NarrowingUnificationProblem() 2007-10-17 Steven Eker * higher.hh: added classes NarrowingUnificationProblem and NarrowingSearchState * narrowingSearchState.cc (getSubstitution): added (findNextNarrowing): implemented * narrowingSearchState.hh (class NarrowingSearchState): added data member unificationProblem; added decl for getSubstitution() 2007-10-16 Steven Eker * narrowingSearchState.hh (class NarrowingSearchState): added data member variableInfo * narrowingSearchState.cc: created (NarrowingSearchState): use variableInfo * narrowingSearchState.hh: created * narrowingUnificationProblem.cc: created * narrowingUnificationProblem.hh: created 2007-10-11 Steven Eker * unificationProblem.cc (UnificationProblem): use data member variableInfo (findNextUnifier): use variableInfo (findOrderSortedUnifiers): use variableInfo (extractUnifier): use variableInfo * unificationProblem.hh (class UnificationProblem): added many commments (getVariableInfo): added (class UnificationProblem): made VariableInfo base class private (class UnificationProblem): made VariableInfo a data member rather than a base class ===================================Maude89h=========================================== 2007-08-24 Steven Eker * unificationProblem.cc (~UnificationProblem): varsOK -> problemOkay (UnificationProblem): varsOK -> problemOkay (UnificationProblem): check for unimplemented theories * unificationProblem.hh (variablesOK): becomes problemOK (class UnificationProblem): varsOK becomes problemOkay 2007-08-06 Steven Eker * unificationProblem.cc (UnificationProblem): fix bug where we were failing but leaving old subproblem ptr around for a double deletion ===================================Maude89e=========================================== 2007-07-23 Steven Eker * unificationProblem.cc (findOrderSortedUnifiers): fix bug where we were not telling the BDD package about the BDD variables we allocate to represent the sorts of real variables ===================================Maude89d=========================================== 2007-07-09 Steven Eker * unificationProblem.cc (UnificationProblem): fix bug where we we're initializing subproblem in the case that we returned early 2007-07-06 Steven Eker * unificationProblem.cc (UnificationProblem): pass extensionInfo 2007-06-28 Steven Eker * unificationProblem.cc (~UnificationProblem): delete extensionInfo 2007-06-27 Steven Eker * unificationProblem.hh (class UnificationProblem): added decl for makeContext() (class UnificationProblem): added data member extensionInfo (getLeftHandSides): added (getExtensionInfo): added * unificationProblem.cc (UnificationProblem): added withExtension arg (but not implementation yet) (makeContext): added * unificationProblem.hh (class UnificationProblem): added withExtension arg to ctor 2007-06-19 Steven Eker * unificationProblem.hh (class UnificationProblem): updated decl for ctor (class UnificationProblem): added data members leftHandDags, rightHandDags, leftHandSides, rightHandSides; deleted data members lhs, rhs, lhsDag, rhsDag * unificationProblem.cc (~UnificationProblem): fix memory leak where we weren't deleting terms if variables weren't ok (UnificationProblem): rewritten to do simultaneous unification (~UnificationProblem): destruct vectors of terms (markReachableNodes): mark vectors of dags 2007-06-14 Steven Eker * unificationProblem.hh (variablesOK): added (class UnificationProblem): added data member varsOK * unificationProblem.cc (UnificationProblem): check variable names for safety (UnificationProblem): don't delete uninitialized pointers if variables names are not OK 2007-06-11 Steven Eker * unificationProblem.cc (UnificationProblem): removed lastVariableIndex argument (findOrderSortedUnifiers): don't use lastVariableIndex * unificationProblem.hh (class UnificationProblem): updated ctor decl (class UnificationProblem): removed lastVariableIndex data member 2007-06-08 Steven Eker * unificationProblem.cc (UnificationProblem): handle lastVariableIndex arg (findOrderSortedUnifiers): use lastVariableIndex ===================================Maude89c=========================================== 2007-04-19 Steven Eker * unificationProblem.cc (UnificationProblem): fix bug where subproblem was not being initialized in failure case with resulting memory corruption in dtor ===================================Maude89b=========================================== 2007-03-16 Steven Eker * unificationProblem.cc (UnificationProblem): removed support for Robinson style unification (findNextUnifier): removed support for Robinson style unification 2007-03-15 Steven Eker * unificationProblem.cc (UnificationProblem): need to delete subproblem ===================================Maude89a=========================================== 2007-03-14 Steven Eker * unificationProblem.cc (UnificationProblem): don't call Substitution::notify(); make sortedSolution a specific size (findOrderSortedUnifiers): use actual variables rather than original variables to determine the number of free variables (extractUnifier): nrRealVariables -> nrOriginalVariables (findOrderSortedUnifiers): use acutal variables rather than original variables when binding free variables to fresh variables (findOrderSortedUnifiers): use getFreshVariableSort() to get the sort of fresh variables so we know how many BDD variables to allocate them (findOrderSortedUnifiers): same fix in two other places (UnificationProblem): don't use Substitution::clear() since we may have a large subsitution than has been notified (markReachableNodes): split marking of sortedSolution and unsortedSolution for safety (UnificationProblem): zero sortedSolution to prevent barfing on GC 2007-03-13 Steven Eker * unificationProblem.cc (findNextUnifier): don't call FreshVariableGenerator::reset() (findOrderSortedUnifiers): new FreshVariableGenerator semantics 2007-03-09 Steven Eker * unificationProblem.hh (class UnificationProblem): unsortedSolution becomes a UnificationContext* * unificationProblem.cc (findNextUnifier): use unificationSolve() (UnificationProblem): use UnificationContext (markReachableNodes): mark lhsDag and unsortedSolution 2007-02-28 Steven Eker * unificationProblem.cc (extractUnifier): need to bind unsortedSolution * unificationProblem.hh (class UnificationProblem): decl for extractUnifier() replaces decl for orderVariables() * unificationProblem.cc (orderVariables): becomes extractUnifier() (findNextUnifier, UnificationProblem): support solved form 2007-02-27 Steven Eker * unificationProblem.cc (findNextUnifier): fix bug in that we are not looking for another unsorted solution if our current unsorted solution fails to have at least on sorted solution * unificationProblem.hh (class UnificationProblem): added data members order, done and pending (class UnificationProblem): added decls for orderVariables() and explore() * unificationProblem.cc (orderVariables): added (explore): added 2007-02-26 Steven Eker * unificationProblem.cc (UnificationProblem): added solved form hack for experimentation ===================================Maude89=========================================== 2007-02-13 Steven Eker * unificationProblem.cc (findOrderSortedUnifiers): use sortedSolution (~UnificationProblem): delete sortedSolution (markReachableNodes): use sortedSolution (findNextUnifier): use sortedSolution (UnificationProblem): call Substitution::notify() * unificationProblem.hh (class UnificationProblem): removed Substitution as a base class (class UnificationProblem): added data member sortedSolution (getSolution): added 2007-02-09 Steven Eker * unificationProblem.cc (findNextUnifier): use reset() * unificationProblem.hh (class UnificationProblem): added reset function to class FreshVariableGenerator * unificationProblem.cc (findOrderSortedUnifiers): only do the instantiation step if we actually have free variables 2007-02-08 Steven Eker * unificationProblem.cc (findNextUnifier): second call to solve() needs to have false flag (findOrderSortedUnifiers): clear free variables from previous unsorted unifier 2007-02-07 Steven Eker * unificationProblem.cc (markReachableNodes): no need to mark unsortedSolution now that it is a RewritingContext * unificationProblem.hh (class UnificationProblem): added data member unsortedSolution * unificationProblem.cc (findOrderSortedUnifiers): clone unsortedSolution (findNextUnifier): handle looking for solutions to subproblems (markReachableNodes): mark unsortedSolution (UnificationProblem): build solution in unsortedSolution; don't call findOrderSortedUnifiers() 2007-01-30 Steven Eker * unificationProblem.cc (UnificationProblem): use computeBaseSortForGroundSubterms() (findOrderSortedUnifiers): use DagNode version of computeGeneralizedSort() ===================================Maude88e=========================================== 2007-01-17 Steven Eker * unificationProblem.cc (~UnificationProblem): delete freshVariableGenerator (findOrderSortedUnifiers, findNextUnifier): use freshVariableGenerator as a ptr rather than as a ref (UnificationProblem): take freshVariableGenerator as a ptr rather than as a ref * unificationProblem.hh (class UnificationProblem): added virtual dtor to FreshVariableGenerator; freshVariableGenerator now passed as a ptr (class UnificationProblem): freshVariableGenerator data member now a ptr * higher.hh: added class UnificationProblem * unificationProblem.cc: moved here * unificationProblem.hh: moved here ===================================Maude88d=========================================== 2006-11-14 Steven Eker * rewriteSequenceSearch.cc (findNextInterestingState): rewritten to use new flags and to allow cycles to the initial state in the =>1 and =>+ cases * rewriteSequenceSearch.hh (class RewriteSequenceSearch): deleted data member searchType; added data members reachingInitialStateOK and normalFormNeeded * rewriteSequenceSearch.cc (RewriteSequenceSearch): don't save searchType; initialize reachingInitialStateOK and normalFormNeeded ===================================Maude88c=========================================== 2006-11-09 Steven Eker * equalityConditionFragment.cc (solve): comment out state variable * sortTestConditionFragment.cc (solve): comment out state variable 2006-11-06 Steven Eker * assignmentConditionFragment.cc (makeRhsInstance): take Substitution& rather than RewritingContext& * assignmentConditionFragment.hh (class AssignmentConditionFragment): updated decl for makeRhsInstance() * rewriteConditionFragment.hh (class RewriteConditionFragment): updated decl for makeLhsInstance() * rewriteConditionFragment.cc (makeLhsInstance): take Substitution& rather than RewritingContext& 2006-10-30 Steven Eker * rewriteConditionFragment.cc (makeLhsInstance): added (matchRoot): added * rewriteConditionFragment.hh (class RewriteConditionFragment): added decls for makeLhsInstance() and matchRoot() 2006-10-26 Steven Eker * stateTransitionGraph3.cc (getNextState): fix trace bug using new rebuildDag() semantics * positionState.cc (rebuildDag): now return DagPair * positionState.hh (class PositionState): added typedef DagPair; both rebuildDag() functions now return DagPair 2006-10-25 Steven Eker * positionState.hh (getDagNode): added PositionIndex version 2006-10-23 Steven Eker * assignmentConditionFragment.cc (makeRhsInstance, matchRoot): moved here 2006-10-20 Steven Eker * assignmentConditionFragment.hh (matchRoot): added (makeRhsInstance): added 2006-10-18 Steven Eker * equalityConditionFragment.cc (dump): added * equalityConditionFragment.hh (class EqualityConditionFragment): added decl for dump() ===================================Maude88b=========================================== 2006-10-05 Steven Eker * searchState.cc (findFirstSolution): check that pattern and subject are in the same component 2006-09-29 Steven Eker * positionState.hh (rebuildDag): added simplified version (getPositionIndex): added (class PositionState): added typedef for PositionIndex * positionState.cc (rebuildDag): rewritten to take external extension info and position index 2006-09-25 Steven Eker * searchState.cc (hasCondition): added (findNextSolution): use local version of hasCondition() (findFirstSolution): use local version of hasCondition() (hasCondition): use getFlags() * searchState.hh (class SearchState): added decl for hasCondition() * rewriteSearchState.hh (class RewriteSearchState): renumbered ALLOW_NONEXEC in enum Flags * matchSearchState.hh (class MatchSearchState): renumbered GC_PATTERN in enum Flags * searchState.hh (class SearchState): added IGNORE_CONDITION to enum Flags 2006-09-14 Steven Eker * positionState.hh (class PositionState): added explanation of maxDepth edge cases ===================================Maude88a=========================================== 2006-04-05 Steven Eker * rewriteSearchState.hh (class RewriteSearchState): add default label arg for ctor * rewriteSequenceSearch.cc: fix comment ===================================Maude87a=========================================== 2003-11-06 Steven Eker * satSolverSymbol.cc (attachData): use NULL_DATA() (getDataAttachments): added (getSymbolAttachments): added (getTermAttachments): added * satSolverSymbol.hh (class SatSolverSymbol): added decls for getDataAttachments(), getSymbolAttachments(), getTermAttachments() * modelCheckerSymbol.cc (attachData): use NULL_DATA() (getDataAttachments): added (getSymbolAttachments): added (getTermAttachments): added * modelCheckerSymbol.hh (class ModelCheckerSymbol): added decls for getDataAttachments(), getSymbolAttachments(), getTermAttachments() * temporalSymbol.cc (getSymbolAttachments): added * temporalSymbol.hh (class TemporalSymbol): added decl for getSymbolAttachments() 2003-07-14 Steven Eker * temporalSymbol.cc (build): TRUE -> LTL_TRUE, FALSE -> LTL_FALSE ===================================Maude81=========================================== 2003-05-23 Steven Eker * rewriteSearchState.cc (findNextRewrite): use isNonexec() * rewriteSearchState.hh (class RewriteSearchState): added enum Flags containing ALLOW_NONEXEC 2003-04-25 Steven Eker * positionState.hh (getExtensionInfo): no longer const * positionState.cc (PositionState): init extensionInfoValid (findNextPosition): don't call makeExtensionInfo() here; set extensionInfoValid false if we're working with extension * positionState.hh (class PositionState): added data member extensionInfoValid (getExtensionInfo): call makeExtensionInfo() on demand ===================================Maude80=========================================== 2003-02-26 Steven Eker * equalityConditionFragment.cc (preprocess): updated Assert() * assignmentConditionFragment.cc (preprocess): updated Assert() * rewriteSearchState.cc: removed #pragma * rewriteSearchState.hh: removed #pragma * temporalSymbol.cc: removed #pragma * temporalSymbol.hh: removed #pragma * stateTransitionGraph3.cc: removed #pragma * stateTransitionGraph3.hh: removed #pragma * sortTestConditionFragment.cc: removed #pragma (preprocess): updated Assert() * sortTestConditionFragment.hh: removed #pragma * searchState.cc: removed #pragma * searchState.hh: removed #pragma * satSolverSymbol.cc: removed #pragma (eqRewrite): updated Assert() (makeFormula): updated Assert()s * satSolverSymbol.hh: removed #pragma * rewriteSequenceSearch.cc: removed #pragma * rewriteSequenceSearch.hh: removed #pragma * rewriteConditionState.cc: removed #pragma * rewriteConditionState.hh: removed #pragma * rewriteConditionFragment.cc: removed #pragma (preprocess): updated Assert() * rewriteConditionFragment.hh: removed #pragma * positionState.cc: removed #pragma * positionState.hh: removed #pragma (getDagNode): updated Assert() (getExtensionInfo): updated Assert() * pattern.cc: removed #pragma * pattern.hh: removed #pragma * modelCheckerSymbol.cc: removed #pragma (eqRewrite): updated Assert() * modelCheckerSymbol.hh: removed #pragma * matchSearchState.cc: removed #pragma * matchSearchState.hh: removed #pragma * equalityConditionFragment.cc: removed #pragma * equalityConditionFragment.hh: removed #pragma * assignmentConditionState.cc: removed #pragma * assignmentConditionState.hh: removed #pragma * assignmentConditionFragment.cc: removed #pragma * assignmentConditionFragment.hh: removed #pragma ===================================Maude79=========================================== 2003-02-20 Steven Eker * modelCheckerSymbol.hh (class ModelCheckerSymbol): parentSymbol -> satisfiesSymbol in struct SystemAutomaton; added data member satisfiesSymbol * modelCheckerSymbol.cc (ModelCheckerSymbol): clear satisfiesSymbol (attachSymbol): handle satisfiesSymbol (copyAttachments): handle satisfiesSymbol (checkProposition): removed hacks that were needed because same symbol was used for model checking and satisfaction (checkProposition): use satisfiesSymbol (eqRewrite): use satisfiesSymbol ===================================Maude78===================================== 2002-11-25 Steven Eker * positionState.cc (PositionState): switch initializer order to placate g++3.2 2002-11-15 Steven Eker * modelCheckerSymbol.cc (eqRewrite): use new style IssueAdvisory() * satSolverSymbol.cc (eqRewrite): use new style IssueAdvisory() 2002-10-03 Steven Eker * positionState.cc (exploreNextPosition): pass respectFrozen arg to stackArguments() ===================================Maude76================================================== 2002-08-23 Steven Eker * sortTestConditionFragment.cc (compileBuild): call useIndex() on lhsIndex; don't set nrIndicesToProtect * sortTestConditionFragment.hh (class SortTestConditionFragment): deleted data member nrIndicesToProtect * rewriteConditionFragment.cc (compileBuild): call useIndex() on lhsIndex; don't set nrIndicesToProtect * rewriteConditionFragment.hh (class RewriteConditionFragment): deleted data member nrIndicesToProtect * equalityConditionFragment.cc (compileBuild): don't set nrIndicesToProtect * equalityConditionFragment.hh (class EqualityConditionFragment): deleted data member nrIndicesToProtect * assignmentConditionFragment.hh (class AssignmentConditionFragment): deleted data member nrIndicesToProtect * assignmentConditionFragment.cc (compileBuild): call useIndex() on rhsIndex, since we are now changing who is responsible for caling useIndex() (compileBuild): don't set nrIndicesToProtect 2002-08-21 Steven Eker * equalityConditionFragment.cc (compileBuild): fixed nasty bug introduced by the coloring of constrcution indices: we need to call useIndex() to stop lhsIndex and rhsIndex from being shared via index coloring ===================================Maude75================================================== 2002-06-12 Steven Eker * pattern.cc (Pattern): pass NONE as PreEquation() label arg (Pattern): withExtensionconst -> withExtension (dunno how withExtensionconst ever came about!) 2002-04-03 Steven Eker * sortTestConditionFragment.cc (check): simplified normalize() call * rewriteConditionFragment.cc (check): simplified normalize() call (2 places) * equalityConditionFragment.cc (check): simplified normalize() call (2 places) * assignmentConditionFragment.cc (check): simplified normalize() call (2 places) * modelCheckerSymbol.cc (makeTransition): simplified now that makeDagNode() takes a default argument ===================================Maude71a================================================== 2002-02-28 Steven Eker * modelCheckerSymbol.cc (eqRewrite): use pluralize() in Verbose() call * satSolverSymbol.cc (postInterSymbolPass): call TemporalSymbol::postInterSymbolPass(); (eqRewrite): fix mistake in advisory - we don't compute negation here (eqRewrite): added Verbose() * modelCheckerSymbol.cc (eqRewrite): findCounterExample() -> findCounterexample() * modelCheckerSymbol.hh (class ModelCheckerSymbol): makeCounterExample() -> makeCounterexample() counterExampleSymbol -> counterexampleSymbol * higher.hh: ModelSymbol -> ModelCheckerSymbol * modelCheckerSymbol.cc: was modelSymbol.cc * modelSymbol.cc: ModelSymbol -> ModelCheckerSymbol (ModelCheckerSymbol): counterExampleSymbol -> counterexampleSymbol (attachSymbol): counterExampleSymbol -> counterexampleSymbol (copyAttachments): counterExampleSymbol -> counterexampleSymbol (makeCounterExample): counterExampleSymbol -> counterexampleSymbol (attachSymbol): don't bind LTL symbols (copyAttachments): don't copy LTL symbols (checkProposition): FreeSymbol -> TemporalSymbol (attachData): FreeSymbol -> TemporalSymbol (attachSymbol): FreeSymbol -> TemporalSymbol (attachTerm): FreeSymbol -> TemporalSymbol (copyAttachments): FreeSymbol -> TemporalSymbol (reset): FreeSymbol -> TemporalSymbol (build): deleted (ModelCheckerSymbol): don't initialize LTL symbols (postInterSymbolPass): call TemporalSymbol::postInterSymbolPass() (makeCounterExample): becomes makeCounterexample() (eqRewrite): makeCounterExample() -> makeCounterexample() (eqRewrite): use negate() (eqRewrite): use safeCast() * modelCheckerSymbol.hh: ModelSymbol -> ModelCheckerSymbol (class ModelCheckerSymbol): derive from TemporalSymbol rather than FreeSymbol (class ModelCheckerSymbol): removed all the LTL Symbo, data members (class ModelCheckerSymbol): delete decl for build() (class ModelCheckerSymbol): counterExampleSymbol -> counterexampleSymbol 2002-02-25 Steven Eker * temporalSymbol.cc (conjunct): rewritten since andSymbol may not be assoc and therefore we can only pass 2 args at a time to makeDagNode() * satSolverSymbol.cc (makeFormula): added (makeFormulaList): use makeFormula() * temporalSymbol.cc (conjunct): added * temporalSymbol.hh: added decl for conjunct() 2002-02-22 Steven Eker * higher.hh: added fwd decls for class TemporalSymbol and class SatSolverSymbol * satSolverSymbol.cc: created * temporalSymbol.cc: created * temporalSymbol.hh: created * satSolverSymbol.hh: created 2002-02-11 Steven Eker * rewriteConditionState.cc (solve): use transferCount() for StateTransitionGraph3 * stateTransitionGraph3.hh (transferCount): added * rewriteSequenceSearch.cc (findNextMatch): use transferCount() in place of addInCount() for MatchSearchState * stateTransitionGraph3.cc (getNextState): use transferCount() in place of addInCount() for RewriteSearchState * rewriteSearchState.cc (findNextRewrite): don't call clearCount() * matchSearchState.cc (findNextMatch): don't call clearCount() * searchState.hh (transferCount): added 2002-02-08 Steven Eker * rewriteConditionState.hh (class RewriteConditionState): updated data members * rewriteConditionState.cc (findNextState): simplified (RewriteConditionState): new initialization 2002-02-07 Steven Eker * higher.hh: added forward decls for new classes * rewriteConditionState.cc: created * rewriteConditionState.hh: created * rewriteConditionFragment.cc (solve): replaced stub with implementation * assignmentConditionFragment.cc (solve): use AssignmentConditionState * assignmentConditionState.cc: created * assignmentConditionState.hh: created * rewriteConditionFragment.hh: created * rewriteConditionFragment.cc: created 2002-02-06 Steven Eker * assignmentConditionFragment.hh: created * assignmentConditionFragment.cc: created * sortTestConditionFragment.hh: created * sortTestConditionFragment.cc: created * equalityConditionFragment.hh: created * equalityConditionFragment.cc: created 2002-02-05 Steven Eker * modelSymbol.cc (ModelSymbol): deleted strategy argument passed to FreeSymbol() * modelSymbol.hh (class ModelSymbol): deleted static data member eagerStrategy ===================================Maude70================================================== 2002-01-25 Steven Eker * modelSymbol.cc (eqRewrite): fixed a nasty bug where we were deleting newContext to early; this left proposition dags that may have been copied by a collapse equation unprotected from the garbage collector and caused havoc when testing propositions; the bug must have been introduced by code cleaning since Alpha68 2002-01-24 Steven Eker * modelSymbol.cc (eqRewrite): Added Verbose() call to print number of system states examined 2002-01-22 Steven Eker * rewriteSequenceSearch.cc (findNextInterestingState): yet another rewrite: we now avoid examining more than one arc from each maximum depth state if we are looking for normal forms - the existence of a single state means we don't have a normal form and since we are at max depth we will not explore children (RewriteSequenceSearch): handle ONE_STEP by setting maxDepth = 1 * rewriteSequenceSearch.hh (class RewriteSequenceSearch): nextIndex -> nextArc * rewriteSequenceSearch.cc (findNextInterestingState): rewritten to return exactly those states we should try matching against; nextIndex -> nextArc throughout * rewriteSequenceSearch.hh (class RewriteSequenceSearch): added data member needToTryInitialState * rewriteSequenceSearch.cc (RewriteSequenceSearch): added maxDepth arg, init maxDepth, exploreDepth, firstDeeperNodeNr (findNextMatch): rewritten, assuming smarter findNextInterestingState() * rewriteSequenceSearch.hh (class RewriteSequenceSearch): added data members maxDepth, exploreDepth, firstDeeperNodeNr; add maxDepth arg to ctor decl 2002-01-21 Steven Eker * rewriteSequenceSearch.cc (findNextMatch): add rewrites from matchState to initial rewriting context (findNextInterestingState): check for traceAbort() when we fail to find a next arc from current explore state * rewriteSequenceSearch.hh (class RewriteSequenceSearch): updated decls * rewriteSequenceSearch.cc (findNextInterestingState): added (findNextMatch): rewritten using findNextInterestingState() (findNextMatch): don't use startMatch() (startMatch): deleted (RewriteSequenceSearch): don't use startMatch() 2002-01-18 Steven Eker * rewriteSequenceSearch.cc: complete rewrite based on StateTransitionGraph3 * rewriteSequenceSearch.hh: complete rewrite based on StateTransitionGraph3 * stateTransitionGraph3.hh (getContext): added (getStateParent): added * modelSymbol.cc (eqRewrite): check for bad LTL formula * stateTransitionGraph3.hh (getStateFwdArcs): added * modelSymbol.cc (makeCounterExample): pass last target to makeTransitionList() (makeTransitionList): pass target to makeTransition() (makeTransition): include label in transition (build): check that formula under LogicFormula::NOT is a proposition 2002-01-17 Steven Eker * modelSymbol.cc (makeCounterExample): use makeTransitionList() * modelSymbol.hh (class ModelSymbol): updated decls; changed data members to symbols need for new style counter-examples * modelSymbol.cc (ModelSymbol): handle symbols for new style counter-examples (attachSymbol): handle symbols for new style counter-examples (copyAttachments): handle symbols for new style counter-examples (makeStateList): becomes makeTransitionList() (makeTransitionList): added 2002-01-16 Steven Eker * modelSymbol.cc: use StateTransitionGraph3 throughout * modelSymbol.hh (class ModelSymbol): use StateTransitionGraph3 * stateTransitionGraph3.cc: created * stateTransitionGraph3.hh: created 2001-12-21 Steven Eker * modelSymbol.hh (class ModelSymbol): use StateTransitionGraph2 * stateTransitionGraph2.hh: created * stateTransitionGraph2.cc: created 2001-12-19 Steven Eker * positionState.hh (class PositionState): use NO_COPYING() macro * searchState.hh (class SearchState): updated decl for initSubstitution() * searchState.cc (initSubstitution): made arg const VariableInfo& * searchState.hh (class SearchState): updated decl for findFirstSolution(), made data member preEquation, const PreEquation* * searchState.cc (findFirstSolution): make first arg const PreEquation* 2001-12-12 Steven Eker * modelChecker.cc: deleted * modelChecker.hh: deleted * modelSymbol.cc: cleaned up includes * modelSymbol.hh: cleaned up includes; delete class LogicFormula hack ===================================Maude69================================================== 2001-12-06 Steven Eker * stateTransitionGraph.cc (getNextState): use addInCount() and clearCount() to move rewrites counts from reducing new states to initil rewriting context * modelSymbol.cc (check): commented out (checkProposition): add in test rewrite count to parent rewrite count 2001-12-05 Steven Eker * modelSymbol.hh (class ModelSymbol): added data members stateListSymbol, nilStateListSymbol, counterExampleSymbol; added decls for makeStateList() and makeCounterExample() * modelSymbol.cc (ModelSymbol): handle stateListSymbol, nilStateListSymbol and counterExampleSymbol (attachSymbol): handle stateListSymbol, nilStateListSymbol and counterExampleSymbol (copyAttachments): handle stateListSymbol, nilStateListSymbol and counterExampleSymbol (makeStateList): added (makeCounterExample): added (eqRewrite): use makeCounterExample() * modelSymbol.hh (class ModelSymbol): added decl for dump() * modelSymbol.cc (dump): added (eqRewrite): use getLeadIn(), getCycle() 2001-12-04 Steven Eker * modelSymbol.cc (getNextState): added (checkProposition): added (eqRewrite): rewritten using ModelChecker2 * modelSymbol.hh (class ModelSymbol): added struct SystemAutomaton 2001-12-03 Steven Eker * modelChecker.cc (explorePropertyTransitions): use BuchiAutomaton2 (explorePropertyTransitions): fixed nasty state ref bug to intersectionStates - stale after call to exploreSystemTransitions() beacuse intersectionStates vector may expand * modelChecker.hh (class ModelChecker): use BuchiAutomaton2 * modelChecker.cc (findCounterExample): deal with multiple initial states 2001-11-27 Steven Eker * modelSymbol.cc (eqRewrite): added hack to test BuchiAutomaton2 2001-11-14 Steven Eker * modelSymbol.cc (eqRewrite): added hack to test GenBuchiAutomaton class 2001-11-02 Steven Eker * modelSymbol.cc (eqRewrite): added hack to test VeryWeakAlternatingAutomaton class 2001-10-26 Steven Eker * modelSymbol.cc (check): fixed nasty bug where we were not deleting testContext; this is more than a memory leak since we keep dag roots that point to dagNodes whose symbol pointers can become stale when a module is deleted, leading to seg faults and bus error in the mark pahse of garbage collection (eqRewrite): fixed similar bug with newContext; note that sysContext will be deleted by ModelChecker via StateTransitionGraph 2001-10-24 Steven Eker * modelChecker.cc (findCounterExample): need to make intersectionStates of length 1 before starting (exploreSystemTransitions): need to increase size of intersectionStates if we find a new state; (exploreSystemTransitions): added code to fake a loop transition if we arrive a a dealocked system state (no other transitions available) * modelSymbol.cc (eqRewrite): use the ModelChecker class to do the model check (check): call index2DagNode() 2001-10-23 Steven Eker * modelSymbol.hh (class ModelSymbol): added decls for attachTerm(), postInterSymbolPass() and reset(); added data members trueTerm and falseTerm * modelSymbol.cc (postInterSymbolPass): added (copyAttachments): copy trueTerm and falseTerm (attachTerm): added (reset): added * modelChecker.cc (explorePropertyTransitions): look for accepting cycles; handle returning bool (exploreSystemTransitions): handle returning bool 2001-10-22 Steven Eker * modelChecker.hh (class ModelChecker): added decls for explorePropertyTransitions() and exploreSystemTransitions() (class ModelChecker): added typedef StatePair and data member searchStack * modelChecker.cc (explorePropertyTransitions): created (exploreSystemTransitions): created 2001-10-19 Steven Eker * modelChecker.hh: rewritten * modelChecker.cc: created 2001-09-28 Steven Eker * modelSymbol.hh (class ModelSymbol): updated decl for build() * modelSymbol.cc (build): convert propositions to indices before inserting them into LogicFormula (eqRewrite): pass propositions set to build() ===================================Maude68================================================== 2001-08-09 Steven Eker * rewriteSequenceSearch.cc (RewriteSequenceSearch): need to make a new ArcMap for initial node of search graph (findNextMatch): fixed bug where we were eclipsing data member stateNr by a local variable and thus getting uninitialized memory reads 2001-08-08 Steven Eker * rewriteSequenceSearch.cc (findNextMatch): rewritten (~RewriteSequenceSearch): delete fwdArcs * rewriteSequenceSearch.hh (class RewriteSequenceSearch): deleted fwdRules field, made fwdArcs a map >* (getStateFwdRules): deleted * rewriteSequenceSearch.cc (findNextMatch): keep track of forward arcs and their rules * rewriteSequenceSearch.hh (class RewriteSequenceSearch): added fwdArcs and fwdRules fields to struct State (getStateFwdArcs): added (getStateFwdRules): added 2001-06-22 Steven Eker * buchiAutomaton.cc (dump): dump accepting sets * buchiAutomaton.hh (class BuchiAutomaton): added decls for findUntilSubformulae(), findAcceptingStates(); deleted decls for SI(), SI_Neg(), containsNegation() * buchiAutomaton.cc (contradiction): use structuallyContradicts() instead if SI_Neg() (redundant): added LTL2AUT optimization (SI_Neg): deleted (SI): deleted (containsNegation): deleted (findUntilSubformulae): added (findAcceptingStates): added (BuchiAutomaton): do accepting states calculation * logicFormula.cc (isNegation): rewritten 2001-06-21 Steven Eker * logicFormula.hh (class LogicFormula): added decls for structuallyImplies(), structuallyContradicts(), containsNegation() and isNegation() * logicFormula.cc (isNegation): added (containsNegation): added (structuallyContradicts): added (structuallyImplies): added 2001-06-20 Steven Eker * buchiAutomaton.cc (contradiction): use SI_Neg() (hasToBeStored): return false always (SI_Neg): fixed bug in TRUE case * buchiAutomaton.hh (class BuchiAutomaton): added decl for SI_Neg() * buchiAutomaton.cc (SI_Neg): added * buchiAutomaton.hh (class BuchiAutomaton): added decls for add(), SI(), containsNegation() * buchiAutomaton.cc (cover): use approach similar to published algorithm to avoid re-covering subformulae; added Assert() to check that we do it correctly (add): added (SI): added (containsNegation): added 2001-06-19 Steven Eker * buchiAutomaton.cc (cover): quick hack to check if we've found to cause of the extra states. 2001-06-18 Steven Eker * buchiAutomaton.cc (contradiction): implemented (BuchiAutomaton): do breadth-first search (contradiction): fixed bugs in PROPOSITION case: need to examine upto _and_ including max and we need to check that covered actually contains i 2001-06-15 Steven Eker * buchiAutomaton.hh: complete rewrite * buchiAutomaton.cc: complete rewrite using Daniele, Giunchilia & Vardi approach 2001-06-06 Steven Eker * buchiAutomaton.hh (class BuchiAutomaton): added decls for dump() and dumpNatSet() * buchiAutomaton.cc (dump): added (dumpNatSet): added * logicFormula.cc (dump): added * modelSymbol.hh (class ModelSymbol): added decl for build() * buchiAutomaton.cc (BuchiAutomaton): call expand() * modelSymbol.cc (build): added 2001-06-05 Steven Eker * modelSymbol.cc (attachData): added * higher.hh: added forward decl for class ModelSymbol * modelSymbol.hh: created * modelSymbol.cc: created * higher.hh: added forward decls for classes LogicFormula, BuchiAutomaton and StateTransitionGraph * buchiAutomaton.cc: created * buchiAutomaton.hh: created 2001-05-11 Steven Eker * rewriteSequenceSearch.cc (findNextMatch): crude support for tracing and traceAbort() 2001-05-10 Steven Eker * rewriteSequenceSearch.hh (getStateNr): added (getStateParent): added (getStateDag): added * rewriteSequenceSearch.cc (RewriteSequenceSearch): use new definition of seen (~RewriteSequenceSearch): use new definition of seen (findNextMatch): store parent states and rules used * rewriteSequenceSearch.hh (class RewriteSequenceSearch): added struct State * rewriteSequenceSearch.cc (findNextMatch): set stateNt whenever we create a new matchState * rewriteSequenceSearch.hh (getStateNr): added stateNr (class RewriteSequenceSearch): added data member * positionState.hh (class PositionState): fixed a nasty bug where flags was a bool rather than an int 2001-05-02 Steven Eker * rewriteSequenceSearch.hh (getNrStates): added * rewriteSequenceSearch.cc: created * rewriteSequenceSearch.hh: created 2001-04-30 Steven Eker * searchState.cc (initSubstitution): if there is no substition, check that the set of unbound variables is empty 2001-04-25 Steven Eker * rewriteSearchState.hh (class RewriteSearchState): updated ctor decl * rewriteSearchState.cc (RewriteSearchState): handle flags arg * matchSearchState.cc (MatchSearchState): take and pass flags arg (~MatchSearchState): delete pattern only if flag set * matchSearchState.hh (class MatchSearchState): added enum Flags; added flags arg to ctor * searchState.hh (class SearchState): added enum Flags * searchState.cc (SearchState): take flags arg rather than respectFrozen arg (~SearchState): delete substitution and context only if flags set * searchState.hh (class SearchState): flags replace respectFrozen in ctor decl * positionState.cc (PositionState): take flags arg rather than respectFrozen arg (exploreNextPosition): test flags rather than respectFrozen * positionState.hh (class PositionState): delete respectFrozen data member; added enum Flags and flags data member; added flags arg to ctor decl (getFlags): added maude-3.1/src/Higher/positionState.hh0000644000175200017520000000766213576050635014605 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for storing position and extension information during a breadth-first search. // // Note that position indicies are persistent and can be saved, along with // a copy of extension info for a rebuildDag() after more searching. // #ifndef _positionState_hh_ #define _positionState_hh_ #include #include "redexPosition.hh" class PositionState { NO_COPYING(PositionState); public: enum Flags { RESPECT_FROZEN = 1, SET_UNSTACKABLE = 128 }; typedef int PositionIndex; // // For returning a pair of dags. First dag is the rebuilt dag up to the root, // second dag is the replacement, possibily extended by extension information // when only part of the redex is replaced (useful for tracing). // typedef pair DagPair; // // maxDepth = -1 means at top, no extension // maxDepth = 0 means at top, with extension // maxDepth = UNBOUNDED means all the way down to the leaf nodes, with extension // PositionState(DagNode* top, int flags = 0, int minDepth = 0, int maxDepth = -1); ~PositionState(); bool findNextPosition(); // should this be protected? DagNode* getDagNode() const; DagNode* getDagNode(PositionIndex index) const; ExtensionInfo* getExtensionInfo(); PositionIndex getPositionIndex() const; DagPair rebuildDag(DagNode* replacement) const; DagPair rebuildDag(DagNode* replacement, ExtensionInfo* extInfo, PositionIndex index) const; DagNode* rebuildAndInstantiateDag(DagNode* replacement, Substitution& substitution, int firstVariable, int lastVariable, PositionIndex = DEFAULT) const; int getFlags() const; private: bool exploreNextPosition(); const int flags; const int minDepth; const int maxDepth; bool extensionInfoValid; // need separate flag because 0 is a valid extensionInfo value ExtensionInfo* extensionInfo; // // For breathfirst traversal over positions. // Vector positionQueue; Vector depth; PositionIndex nextToExplore; PositionIndex nextToReturn; }; inline int PositionState::getFlags() const { return flags; } inline DagNode* PositionState::getDagNode() const { Assert(nextToReturn >= 0, "findNextPosition() not called"); return positionQueue[nextToReturn].node(); } inline DagNode* PositionState::getDagNode(PositionIndex index) const { Assert(index >= 0 && index <= nextToReturn, "bad index " << index << " nextToReturn = " << nextToReturn); return positionQueue[index].node(); } inline ExtensionInfo* PositionState::getExtensionInfo() { Assert(nextToReturn >= 0, "findNextPosition() not called"); if (!extensionInfoValid) { extensionInfo = getDagNode()->makeExtensionInfo(); extensionInfoValid = true; } return extensionInfo; } inline PositionState::PositionIndex PositionState::getPositionIndex() const { Assert(nextToReturn >= 0, "findNextPosition() not called"); return nextToReturn; } inline PositionState::DagPair PositionState::rebuildDag(DagNode* replacement) const { Assert(nextToReturn >= 0, "findNextPosition() not called"); return rebuildDag(replacement, extensionInfo, nextToReturn); } #endif maude-3.1/src/Higher/narrowingSequenceSearch.hh0000644000175200017520000000726413722121437016553 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for depthfirst searching for sequences of narrowing steps. // #ifndef _narrowingSequenceSearch_hh_ #define _narrowingSequenceSearch_hh_ #include "sequenceSearch.hh" #include "matchSearchState.hh" #include "protectedDagNodeSet.hh" #include "narrowingSearchState.hh" class NarrowingSequenceSearch : public SequenceSearch { NO_COPYING(NarrowingSequenceSearch); public: // // We take responsibility for deleting initial, goal and freshVariableGenerator. // A null goal can be passed to accept all states whose reachability is consistent // with searchType and maxDepth. // In the null goal case a count is available of the number of variables in all // the previously returned states. // This number is needed by the metalevel. // NarrowingSequenceSearch(RewritingContext* initial, SearchType searchType, Pattern* goal, int maxDepth, int narrowingFlags, FreshVariableGenerator* freshVariableGenerator); ~NarrowingSequenceSearch(); bool findNextMatch(); const Pattern* getGoal() const; FreshVariableGenerator* getFreshVariableGenerator() const; NarrowingSearchState* getState() const; const Substitution* getSubstitution() const; RewritingContext* getContext() const; DagNode* getStateDag() const; int getVariableTotalForPreviouslyReturnedStates() const; bool isIncomplete() const; private: bool findNextInterestingState(); bool findNextNormalForm(); RewritingContext* initial; Pattern* const goal; const int maxDepth; const int narrowingFlags; FreshVariableGenerator* freshVariableGenerator; bool needToTryInitialState; //bool reachingInitialStateOK; bool normalFormNeeded; bool topOfStackFresh; Vector stateStack; MatchSearchState* matchState; ProtectedDagNodeSet seenSet; int variableTotalForPreviouslyReturnedStates; int variableTotalForAllReturnedStates; bool incompleteFlag; }; inline const Pattern* NarrowingSequenceSearch::getGoal() const { return goal; } inline FreshVariableGenerator* NarrowingSequenceSearch::getFreshVariableGenerator() const { return freshVariableGenerator; } inline const Substitution* NarrowingSequenceSearch::getSubstitution() const { return matchState->getContext(); } inline NarrowingSearchState* NarrowingSequenceSearch::getState() const { return stateStack[stateStack.size() - 1]; } inline RewritingContext* NarrowingSequenceSearch::getContext() const { return initial; } inline DagNode* NarrowingSequenceSearch::getStateDag() const { return stateStack[stateStack.size() - 1]->getContext()->root(); } inline int NarrowingSequenceSearch::getVariableTotalForPreviouslyReturnedStates() const { return variableTotalForPreviouslyReturnedStates; } inline bool NarrowingSequenceSearch::isIncomplete() const { // // Returns true if any incompleteness has been encountered so far. // return incompleteFlag; } #endif maude-3.1/src/Higher/narrowingSearchState3.hh0000644000175200017520000000735013730244470016144 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2017-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for searching for single narrowing step using variant unification. // This version is used for sequence search. // #ifndef _narrowingSearchState3_hh_ #define _narrowingSearchState3_hh_ #include "positionState.hh" #include "simpleRootContainer.hh" #include "narrowingVariableInfo.hh" #include "variantUnificationProblem.hh" class NarrowingSearchState3 : public PositionState { NO_COPYING(NarrowingSearchState3); public: enum Flags { ALLOW_NONEXEC = 32, // allow narrowing with nonexecutable rules, unbound // variables being treated as fresh GC_VAR_GEN = 64, // delete freshVariableGenerator in dtor }; // // Narrowing is done without extension and maxDepth may be // UNBOUNDED to indicate no bound. // // Takes over responsibility for deleting context and on destruction. // Can also take responsibility for deleting variable generator if flag given. // NarrowingSearchState3(RewritingContext* context, Substitution* accumulatedSubstitution, FreshVariableGenerator* freshVariableGenerator, int incomingVariableFamily, int flags, int minDepth = 0, int maxDepth = UNBOUNDED, int variantFlags = 0); ~NarrowingSearchState3(); bool findNextNarrowing(); RewritingContext* getContext() const; // // Get information about last narrowing step. // Rule* getRule() const; DagNode* getNarrowedDag(DagNode*& replacement, DagNode*& replacementContext) const; const Substitution& getUnifier() const; const NarrowingVariableInfo& getVariableInfo() const; int getVariableFamily() const; DagNode* getReplacedDag() const; Substitution* makeAccumulatedSubstitution(); bool isIncomplete() const; private: RewritingContext* const context; Substitution* const accumulatedSubstitution; const Vector blockerDags; // always an empty vector FreshVariableGenerator* const freshVariableGenerator; const int incomingVariableFamily; const int variantFlags; Module* const module; NarrowingVariableInfo variableInfo; int ruleIndex; // index of current rule being tried VariantUnificationProblem* unificationProblem; int variableFamily; bool incompleteFlag; }; inline RewritingContext* NarrowingSearchState3::getContext() const { return context; } inline const NarrowingVariableInfo& NarrowingSearchState3::getVariableInfo() const { return variableInfo; } inline bool NarrowingSearchState3::isIncomplete() const { // // Returns true if any incompleteness has been encountered so far. // return incompleteFlag; } inline Rule* NarrowingSearchState3::getRule() const { return module->getRules()[ruleIndex]; } inline int NarrowingSearchState3::getVariableFamily() const { return unificationProblem->getVariableFamily(); } inline const Substitution& NarrowingSearchState3::getUnifier() const { return unificationProblem->getSolution(); } inline DagNode* NarrowingSearchState3::getReplacedDag() const { return getDagNode(); } #endif maude-3.1/src/Higher/filteredVariantUnifierSearch.hh0000644000175200017520000000435313723621005017512 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class to search for a minimal complete set of variant unifiers. // // We derive it from VariantSearch although it only specializes the // variant unification functionality of VariantSearch. This is so // we can use it as a drop-in replacement for VariantSearch in code // that uses VariantSearch to do variant unification. // #ifndef _filteredVariantUnifierSearch_hh_ #define _filteredVariantUnifierSearch_hh_ #include "variantSearch.hh" #include "variantUnifierFilter.hh" class FilteredVariantUnifierSearch : public VariantSearch { NO_COPYING(FilteredVariantUnifierSearch); public: // // Only flags that can reasonably be passed are DELETE_FRESH_VARIABLE_GENERATOR // and CHECK_VARIABLE_NAMES. UNIFICATION_MODE and IRREDUNDANT_MODE are always // passed to the VariantSearch base object. // FilteredVariantUnifierSearch(RewritingContext* context, const Vector& blockerDags, FreshVariableGenerator* freshVariableGenerator, int flags = DELETE_FRESH_VARIABLE_GENERATOR | CHECK_VARIABLE_NAMES, int incomingVariableFamily = NONE); bool findNextUnifier(); const Vector& getCurrentUnifier(int& nrFreeVariables, int& variableFamily); bool filteringIncomplete() const; private: const int flags; VariantUnifierFilter unifiers; }; inline bool FilteredVariantUnifierSearch::filteringIncomplete() const { return unifiers.filteringIncomplete(); } #endif maude-3.1/src/Higher/sortTestConditionFragment.cc0000644000175200017520000000606413576050735017104 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class SortTestConditionFragment. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" //#include "variable.hh" // interface class definitions //#include "symbol.hh" //#include "dagNode.hh" #include "term.hh" #include "lhsAutomaton.hh" #include "rhsAutomaton.hh" #include "subproblem.hh" // core class definitions #include "rewritingContext.hh" #include "variableInfo.hh" //#include "conditionState.hh" #include "sortTestConditionFragment.hh" SortTestConditionFragment::SortTestConditionFragment(Term* lhs, Sort* sort) : lhs(lhs), sort(sort) { lhsIndex = NONE; } SortTestConditionFragment::~SortTestConditionFragment() { lhs->deepSelfDestruct(); } void SortTestConditionFragment::check(VariableInfo& variableInfo, NatSet& boundVariables) { NatSet unboundVariables; lhs = lhs->normalize(false); lhs->indexVariables(variableInfo); variableInfo.addConditionVariables(lhs->occursBelow()); unboundVariables.insert(lhs->occursBelow()); unboundVariables.subtract(boundVariables); variableInfo.addUnboundVariables(unboundVariables); } void SortTestConditionFragment::preprocess() { lhs->symbol()->fillInSortInfo(lhs); Assert(lhs->getComponent() == sort->component(), "component clash"); } void SortTestConditionFragment::compileBuild(VariableInfo& variableInfo, TermBag& availableTerms) { lhsIndex = lhs->compileRhs(builder, variableInfo, availableTerms, true); variableInfo.useIndex(lhsIndex); variableInfo.endOfFragment(); } void SortTestConditionFragment::compileMatch(VariableInfo& variableInfo, NatSet& boundUniquely) { builder.remapIndices(variableInfo); lhsIndex = variableInfo.remapIndex(lhsIndex); } bool SortTestConditionFragment::solve(bool findFirst, RewritingContext& solution, Stack& /* state */) { if (!findFirst) return false; builder.safeConstruct(solution); RewritingContext* lhsContext = solution.makeSubcontext(solution.value(lhsIndex), RewritingContext::CONDITION_EVAL); lhsContext->reduce(); solution.addInCount(*lhsContext); // // Check for low enough sort axioms. // bool success = lhsContext->root()->leq(sort); delete lhsContext; return success; } maude-3.1/src/Higher/modelCheckerSymbol.cc0000644000175200017520000002313113576050735015467 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class ModelCheckerSymbol. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "temporal.hh" #include "interface.hh" #include "core.hh" #include "freeTheory.hh" #include "builtIn.hh" #include "higher.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "term.hh" // core class definitions #include "dagArgumentIterator.hh" #include "substitution.hh" #include "rewritingContext.hh" #include "symbolMap.hh" #include "rule.hh" // free theory class definitions #include "freeDagNode.hh" // built in class definitions #include "bindingMacros.hh" // temporal class definitions #include "logicFormula.hh" //HACK #include "quotedIdentifierSymbol.hh" #include "quotedIdentifierDagNode.hh" // higher class definitions #include "modelCheckerSymbol.hh" ModelCheckerSymbol::ModelCheckerSymbol(int id) : TemporalSymbol(id, 2) { satisfiesSymbol = 0; qidSymbol = 0; unlabeledSymbol = 0; deadlockSymbol = 0; transitionSymbol = 0; transitionListSymbol = 0; nilTransitionListSymbol = 0; counterexampleSymbol = 0; } bool ModelCheckerSymbol::attachData(const Vector& opDeclaration, const char* purpose, const Vector& data) { NULL_DATA(purpose, ModelCheckerSymbol, data); return TemporalSymbol::attachData(opDeclaration, purpose, data); } bool ModelCheckerSymbol::attachSymbol(const char* purpose, Symbol* symbol) { BIND_SYMBOL(purpose, symbol, satisfiesSymbol, Symbol*); BIND_SYMBOL(purpose, symbol, qidSymbol, QuotedIdentifierSymbol*); BIND_SYMBOL(purpose, symbol, unlabeledSymbol, Symbol*); BIND_SYMBOL(purpose, symbol, deadlockSymbol, Symbol*); BIND_SYMBOL(purpose, symbol, transitionSymbol, Symbol*); BIND_SYMBOL(purpose, symbol, transitionListSymbol, Symbol*); BIND_SYMBOL(purpose, symbol, nilTransitionListSymbol, Symbol*); BIND_SYMBOL(purpose, symbol, counterexampleSymbol, Symbol*); return TemporalSymbol::attachSymbol(purpose, symbol); } bool ModelCheckerSymbol::attachTerm(const char* purpose, Term* term) { BIND_TERM(purpose, term, trueTerm); return TemporalSymbol::attachTerm(purpose, term); } void ModelCheckerSymbol::copyAttachments(Symbol* original, SymbolMap* map) { ModelCheckerSymbol* orig = safeCast(ModelCheckerSymbol*, original); COPY_SYMBOL(orig, satisfiesSymbol, map, Symbol*); COPY_SYMBOL(orig, qidSymbol, map, QuotedIdentifierSymbol*); COPY_SYMBOL(orig, unlabeledSymbol, map, Symbol*); COPY_SYMBOL(orig, deadlockSymbol, map, Symbol*); COPY_SYMBOL(orig, transitionSymbol, map, Symbol*); COPY_SYMBOL(orig, transitionListSymbol, map, Symbol*); COPY_SYMBOL(orig, nilTransitionListSymbol, map, Symbol*); COPY_SYMBOL(orig, counterexampleSymbol, map, Symbol*); COPY_TERM(orig, trueTerm, map); TemporalSymbol::copyAttachments(original, map); } void ModelCheckerSymbol::getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data) { APPEND_DATA(purposes, data, ModelCheckerSymbol); TemporalSymbol::getDataAttachments(opDeclaration, purposes, data); } void ModelCheckerSymbol::getSymbolAttachments(Vector& purposes, Vector& symbols) { APPEND_SYMBOL(purposes, symbols, satisfiesSymbol); APPEND_SYMBOL(purposes, symbols, qidSymbol); APPEND_SYMBOL(purposes, symbols, unlabeledSymbol); APPEND_SYMBOL(purposes, symbols, deadlockSymbol); APPEND_SYMBOL(purposes, symbols, transitionSymbol); APPEND_SYMBOL(purposes, symbols, transitionListSymbol); APPEND_SYMBOL(purposes, symbols, nilTransitionListSymbol); APPEND_SYMBOL(purposes, symbols, counterexampleSymbol); TemporalSymbol::getSymbolAttachments(purposes, symbols); } void ModelCheckerSymbol::getTermAttachments(Vector& purposes, Vector& terms) { APPEND_TERM(purposes, terms, trueTerm); TemporalSymbol::getTermAttachments(purposes, terms); } void ModelCheckerSymbol::postInterSymbolPass() { PREPARE_TERM(trueTerm); TemporalSymbol::postInterSymbolPass(); } void ModelCheckerSymbol::reset() { trueTerm.reset(); // so true dag can be garbage collected TemporalSymbol::reset(); // parents reset() tasks } void ModelCheckerSymbol::dump(const StateTransitionGraph& states, const list& path) { cout << "begin{StateList}\n"; for (list::const_iterator i = path.begin(); i != path.end(); i++) { cout << states.getStateDag(*i) << '\n'; } cout << "end{StateList}\n"; } DagNode* ModelCheckerSymbol::makeTransition(const StateTransitionGraph& states, int stateNr, int targetNr) { static Vector args(2); args[0] = states.getStateDag(stateNr); const StateTransitionGraph::ArcMap& fwdArcs = states.getStateFwdArcs(stateNr); StateTransitionGraph::ArcMap::const_iterator i = fwdArcs.find(targetNr); if (i == fwdArcs.end()) args[1] = deadlockSymbol->makeDagNode(); else { int id = (*(i->second.begin()))->getLabel().id(); args[1] = (id == NONE) ? unlabeledSymbol->makeDagNode() : new QuotedIdentifierDagNode(qidSymbol, id); } return transitionSymbol->makeDagNode(args); } DagNode* ModelCheckerSymbol::makeTransitionList(const StateTransitionGraph& states, const list& path, int lastTarget) { Vector args; if (path.empty()) return nilTransitionListSymbol->makeDagNode(args); const list::const_iterator e = path.end(); for (list::const_iterator i = path.begin();;) { int stateNr = *i; if (++i == e) { args.append(makeTransition(states, stateNr, lastTarget)); break; } else args.append(makeTransition(states, stateNr, *i)); } return (args.length() == 1) ? args[0] : transitionListSymbol->makeDagNode(args); } DagNode* ModelCheckerSymbol::makeCounterexample(const StateTransitionGraph& states, const ModelChecker2& mc) { Vector args(2); int junction = mc.getCycle().front(); args[0] = makeTransitionList(states, mc.getLeadIn(), junction); args[1] = makeTransitionList(states, mc.getCycle(), junction); return counterexampleSymbol->makeDagNode(args); } bool ModelCheckerSymbol::eqRewrite(DagNode* subject, RewritingContext& context) { Assert(this == subject->symbol(), "bad symbol"); // // Compute normalization of negated formula. // FreeDagNode* d = safeCast(FreeDagNode*, subject); RewritingContext* newContext = context.makeSubcontext(negate(d->getArgument(1))); newContext->reduce(); #ifdef TDEBUG cout << "Negated formula: " << newContext->root() << endl; #endif // // Convert Dag into a LogicFormula. // SystemAutomaton system; LogicFormula formula; int top = build(formula, system.propositions, newContext->root()); if (top == NONE) { IssueAdvisory("negated LTL formula " << QUOTE(newContext->root()) << " did not reduce to a valid negative normal form."); return TemporalSymbol::eqRewrite(subject, context); } context.addInCount(*newContext); #ifdef TDEBUG cout << "top = " << top << endl; formula.dump(cout); #endif // // Do the model check using a ModelChecker2 object. // system.satisfiesSymbol = satisfiesSymbol; system.parentContext = &context; system.trueTerm = trueTerm.getDag(); RewritingContext* sysContext = context.makeSubcontext(d->getArgument(0)); system.systemStates = new StateTransitionGraph(sysContext); ModelChecker2 mc(system, formula, top); bool result = mc.findCounterexample(); int nrSystemStates = system.systemStates->getNrStates(); Verbose("ModelCheckerSymbol: Examined " << nrSystemStates << " system state" << pluralize(nrSystemStates) << '.'); #ifdef TDEBUG if (result == true) { dump(*(system.systemStates), mc.getLeadIn()); dump(*(system.systemStates), mc.getCycle()); } #endif delete newContext; DagNode* resultDag = result ? makeCounterexample(*(system.systemStates), mc) : trueTerm.getDag(); context.addInCount(*sysContext); delete system.systemStates; // deletes sysContext via ~StateTransitionGraph() return context.builtInReplace(subject, resultDag); } int ModelCheckerSymbol::SystemAutomaton::getNextState(int stateNr, int transitionNr) { int n = systemStates->getNextState(stateNr, transitionNr); if (n == NONE && transitionNr == 0) return stateNr; // fake a self loop for deadlocked state return n; } bool ModelCheckerSymbol::SystemAutomaton::checkProposition(int stateNr, int propositionIndex) const { Vector args(2); args[0] = systemStates->getStateDag(stateNr); args[1] = propositions.index2DagNode(propositionIndex); RewritingContext* testContext = parentContext->makeSubcontext(satisfiesSymbol->makeDagNode(args)); testContext->reduce(); bool result = trueTerm->equal(testContext->root()); parentContext->addInCount(*testContext); delete testContext; return result; } maude-3.1/src/Higher/searchState.hh0000644000175200017520000000562213576050635014200 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for finding a sequence of matches and condition solutions. // #ifndef _SearchState_hh_ #define _SearchState_hh_ #include "stack.hh" #include "cacheableState.hh" #include "positionState.hh" #include "rewritingContext.hh" class SearchState : public CacheableState, public PositionState { NO_COPYING(SearchState); public: enum Flags { GC_CONTEXT = 2, // delete context in our dtor GC_SUBSTITUTION = 4, // delete substitution in our dtor IGNORE_CONDITION = 8 // ignore conditions of conditional PreEquations }; // // SearchState uses the provided context for constructing matches, // resolving conditions and accumulating rewrite counts. // SearchState(RewritingContext* context, int flags = 0, int minDepth = 0, int maxDepth = -1); virtual ~SearchState(); bool findFirstSolution(const PreEquation* preEqn, LhsAutomaton* automaton); bool findNextSolution(); RewritingContext* getContext() const; void transferCountTo(RewritingContext& recipient); // // Takes responsibility for deleting the Term and DagRoot objects, // if instance was created with GC_SUBSTITUTION flag. // void setInitialSubstitution(Vector& variables, Vector& values); private: bool initSubstitution(const VariableInfo& varInfo); bool hasCondition(const PreEquation* preEqn); RewritingContext* const context; const PreEquation* preEquation; // // Initial (partial) substitution. // Vector substVariables; Vector substValues; // // For backtracking over matches. // Subproblem* matchingSubproblem; // // For backtracking of solutions to a rule condition. // int trialRef; Stack conditionStack; }; inline RewritingContext* SearchState::getContext() const { return context; } inline void SearchState::transferCountTo(RewritingContext& recipient) { recipient.transferCountFrom(*context); } inline void SearchState::setInitialSubstitution(Vector& variables, Vector& values) { substVariables.swap(variables); substValues.swap(values); } #endif maude-3.1/src/Higher/rewriteSearchState.cc0000644000175200017520000000614413576050735015531 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class RewriteSearchState. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" // core class definitions #include "rewritingContext.hh" #include "rhsAutomaton.hh" #include "rule.hh" #include "rewriteSearchState.hh" RewriteSearchState::RewriteSearchState(RewritingContext* context, int label, int flags, int minDepth, int maxDepth) : SearchState(context, flags | RESPECT_FROZEN, minDepth, maxDepth), label(label), withExtension(maxDepth >= 0) { Assert(label == NONE || !(getFlags() & SET_UNREWRITABLE), "shouldn't set unrewritable flag if only looking at rules with a given label"); ruleIndex = -1; } bool RewriteSearchState::findNextRewrite() { bool rewriteSeenAtCurrentPosition; if (ruleIndex > -1) { if (findNextSolution()) return true; rewriteSeenAtCurrentPosition = true; } else { if (!findNextPosition()) return false; rewriteSeenAtCurrentPosition = false; } ++ruleIndex; bool allowNonexec = getFlags() & ALLOW_NONEXEC; do { DagNode* d = getDagNode(); if (!(d->isUnrewritable())) { const Vector& rules = d->symbol()->getRules(); for (int nrRules = rules.length(); ruleIndex < nrRules; ruleIndex++) { Rule* rl = rules[ruleIndex]; if ((allowNonexec || !(rl->isNonexec())) && (label == UNDEFINED || rl->getLabel().id() == label)) { LhsAutomaton* a = withExtension ? rl->getExtLhsAutomaton() : rl->getNonExtLhsAutomaton(); //cerr << "trying " << rl << " at " << " positionIndex " << getPositionIndex() << " dagNode " << getDagNode() << endl; if (findFirstSolution(rl, a)) return true; } } if (!rewriteSeenAtCurrentPosition && (getFlags() & SET_UNREWRITABLE)) d->setUnrewritable(); } rewriteSeenAtCurrentPosition = false; ruleIndex = 0; } while (findNextPosition()); return false; } Rule* RewriteSearchState::getRule() const { return (getDagNode()->symbol()->getRules())[ruleIndex]; } DagNode* RewriteSearchState::getReplacement() const { return getRule()->getRhsBuilder().construct(*(getContext())); } maude-3.1/src/Higher/variantUnifierFilter.cc0000644000175200017520000001355713724034030016044 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class VariantUnifierFilter. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "variable.hh" #include "higher.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "term.hh" #include "lhsAutomaton.hh" #include "subproblem.hh" // core class definitions #include "module.hh" #include "sort.hh" #include "connectedComponent.hh" #include "rewritingContext.hh" #include "subproblemAccumulator.hh" #include "variableInfo.hh" #include "freshVariableGenerator.hh" #include "dagArgumentIterator.hh" // variable class definitions #include "variableDagNode.hh" // higher class definitions #include "variantSearch.hh" #include "variantUnifierFilter.hh" VariantUnifierFilter::VariantUnifierFilter(RewritingContext* context, FreshVariableGenerator* freshVariableGenerator) : context(context), freshVariableGenerator(freshVariableGenerator) { tupleSymbol = 0; startedExtractingUnifiers = false; currentUnifierSubsumed = false; filteringIncompleteFlag = false; currentUnifier = mostGeneralSoFar.end(); // will never compare equal to an actual unifier entry } VariantUnifierFilter::~VariantUnifierFilter() { for (RetainedUnifier* i : mostGeneralSoFar) delete i; } bool VariantUnifierFilter::findNextSurvivingUnifier() { if (startedExtractingUnifiers) { RetainedUnifierList::const_iterator nextUnifier = currentUnifier; ++nextUnifier; if (nextUnifier == mostGeneralSoFar.end()) return false; // no unifier past the last one we returned if (currentUnifierSubsumed) { // // Current unifier was subsumed, but we didn't delete it, // because it was the current unifier. So we delete it now. // delete *currentUnifier; mostGeneralSoFar.erase(currentUnifier); currentUnifierSubsumed = false; } currentUnifier = nextUnifier; return true; } if (mostGeneralSoFar.empty()) return false; // can't start extracting unifiers currentUnifier = mostGeneralSoFar.begin(); startedExtractingUnifiers = true; return true; } void VariantUnifierFilter::insertUnifier(const Vector& unifier, int nrFreeVariables, int variableFamily) { if (tupleSymbol == 0) { int nrAssignments = unifier.size(); Vector domain(nrAssignments); for (int i = 0; i < nrAssignments; ++i) domain[i] = unifier[i]->symbol()->rangeComponent(); ConnectedComponent* range = domain[0]; // really any connected component will do Module* module = range->getModule(); tupleSymbol = module->createInternalTupleSymbol(domain, range); } // // We need this to protect the encoded unifier during subsumption checks // because solve phase of matching can call the garbage collector and the // encoded unifier isn't protected by a context until is has survived the // subsumption checks. // encodedUnifier.setNode(tupleSymbol->makeDagNode(unifier)); for (RetainedUnifierList::iterator i = mostGeneralSoFar.begin(); i != mostGeneralSoFar.end(); ++i) { // // If the current unifier has been subsumed, we don't bother with it. // if (!(currentUnifierSubsumed && i == currentUnifier) && (*i)->subsumes(encodedUnifier.getNode())) { encodedUnifier.setNode(0); return; } } // // Not subsumed by any existing variant unifier - need to make a set of // most general variants for it. // RewritingContext* newContext = context->makeSubcontext(encodedUnifier.getNode()); Vector dummy; // subsumption mode can't use blocker dags because there is no substitution VariantSearch* variants = new VariantSearch(newContext, dummy, freshVariableGenerator, VariantSearch::SUBSUMPTION_MODE, variableFamily); context->addInCount(*newContext); if (variants->isIncomplete()) filteringIncompleteFlag = true; RetainedUnifier* newUnifier = new RetainedUnifier(unifier, nrFreeVariables, variableFamily, encodedUnifier.getNode(), variants); encodedUnifier.setNode(0); // now protected by its context // // See if this variant unifier can evict an existing unifier. // RetainedUnifierList::iterator i = mostGeneralSoFar.begin(); while (i != mostGeneralSoFar.end()) { RetainedUnifierList::iterator next = i; ++next; if (!(currentUnifierSubsumed && i == currentUnifier)) { RetainedUnifier* potentialVictim = *i; if (newUnifier->subsumes(potentialVictim->encodedUnifier)) { DebugInfo("new variant unifier evicted an older variant unifier"); if (i == currentUnifier) { // // We don't delete the current unifier. This allows new unifiers // to be inserted even as we extract unifiers. // currentUnifierSubsumed = true; } else { delete potentialVictim; mostGeneralSoFar.erase(i); } } } i = next; } // // Add to the mostGeneralSoFar collection of unifiers. // mostGeneralSoFar.push_back(newUnifier); } maude-3.1/src/Higher/assignmentConditionState.cc0000644000175200017520000000425213576050735016737 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class AssignmentConditionState. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" // interface class definitions //#include "symbol.hh" //#include "dagNode.hh" #include "term.hh" #include "lhsAutomaton.hh" #include "subproblem.hh" // core class definitions #include "rewritingContext.hh" // higher class definitions #include "assignmentConditionState.hh" AssignmentConditionState::AssignmentConditionState(RewritingContext& original, LhsAutomaton* matcher, DagNode* rhsInstance) : saved(original.nrFragileBindings()) { saved.copy(original); rhsContext = original.makeSubcontext(rhsInstance, RewritingContext::CONDITION_EVAL); rhsContext->reduce(); original.addInCount(*rhsContext); subproblem = 0; succeeded = matcher->match(rhsContext->root(), original, subproblem); } AssignmentConditionState::~AssignmentConditionState() { delete subproblem; delete rhsContext; } bool AssignmentConditionState::solve(bool findFirst, RewritingContext& solution) { if (succeeded) { if (subproblem == 0) { if (findFirst) return true; } else { if (subproblem->solve(findFirst, solution)) return true; } } solution.copy(saved); // restore substitution to pre-match condition return false; } maude-3.1/src/Higher/higher.hh0000644000175200017520000000367013724034357013177 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Forward declarations for higher level functionality classes. // #ifndef _higher_hh_ #define _higher_hh_ class Pattern; class PositionState; class SearchState; class RewriteSearchState; class MatchSearchState; class CacheableState; class SequenceSearch; class RewriteSequenceSearch; class StateTransitionGraph3; class StateTransitionGraph; class EqualityConditionFragment; class SortTestConditionFragment; class AssignmentConditionFragment; class RewriteConditionFragment; class AssignmentConditionState; class RewriteConditionState; class TemporalSymbol; class ModelCheckerSymbol; class SatSolverSymbol; class UnificationProblem; class IrredundantUnificationProblem; class NarrowingUnificationProblem; class NarrowingSearchState; class NarrowingSequenceSearch; class UnifierFilter; class VariantNarrowingSearchState; class VariantSearch; class VariantFolder; class VariantUnificationProblem; class NarrowingSearchState2; class NarrowingSearchState3; class NarrowingSequenceSearch3; class NarrowingFolder; class VariantUnifierFilter; class FilteredVariantUnifierSearch; class VariantMatchingProblem; #endif maude-3.1/src/Higher/rewriteConditionState.hh0000644000175200017520000000277713576050635016273 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for to hold state for solving an rewrite condition fragment. // #ifndef _rewriteConditionState_hh_ #define _rewriteConditionState_hh_ #include "conditionState.hh" #include "stateTransitionGraph.hh" #include "substitution.hh" class RewriteConditionState : public ConditionState { public: RewriteConditionState(RewritingContext& original, DagNode* lhsInstance, LhsAutomaton* matcher); ~RewriteConditionState(); bool solve(bool findFirst, RewritingContext& solution); private: int findNextState(); StateTransitionGraph stateGraph; LhsAutomaton* const matcher; Substitution saved; Subproblem* subproblem; int explore; int arcNr; }; #endif maude-3.1/src/Higher/matchSearchState.cc0000644000175200017520000000356113576050735015144 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class MatchSearchState. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" // core class definitions #include "rewritingContext.hh" #include "pattern.hh" #include "matchSearchState.hh" MatchSearchState::MatchSearchState(RewritingContext* context, Pattern* pattern, int flags, int minDepth, int maxDepth) : SearchState(context, flags, minDepth, maxDepth), pattern(pattern) { firstMatch = true; } MatchSearchState::~MatchSearchState() { // // Delete stuff entrusted to us by our creator. // if (getFlags() & GC_PATTERN) delete pattern; } bool MatchSearchState::findNextMatch() { if (firstMatch) firstMatch = false; else { if (findNextSolution()) return true; } while (findNextPosition()) { if (findFirstSolution(pattern, pattern->getLhsAutomaton())) return true; } return false; } maude-3.1/src/Higher/variantSearch.cc0000755000175200017520000003735513736752556014536 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2012 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class VariantSearch. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "variable.hh" #include "higher.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "term.hh" #include "lhsAutomaton.hh" #include "subproblem.hh" // core class definitions #include "rewritingContext.hh" #include "freshVariableGenerator.hh" #include "dagArgumentIterator.hh" // variable class definitions #include "variableDagNode.hh" // higher class definitions #include "variantSearch.hh" #include "variantNarrowingSearchState.hh" #include "variantMatchingProblem.hh" bool VariantSearch::findNextUnifier() { // // We need to find a surviving variant that is the right length. // while (!(context->traceAbort())) { if (variantCollection.findNextSurvivingVariant() == NONE) { if (frontier.empty()) break; // // Must be in incremental mode - try exanding current frontier. // expandLayer(); if (variantCollection.findNextSurvivingVariant() == NONE) break; // no new variants immediately following a expandLayer() means we're done } if (variantCollection.getCurrentVariantSize() == nrVariantVariables) return true; } return false; } const Vector& VariantSearch::getCurrentUnifier(int& nrFreeVariables, int& variableFamily) { return variantCollection.getCurrentVariant(nrFreeVariables, variableFamily); } bool VariantSearch::findNextVariant() { // // We need to find a surviving variant. // if (context->traceAbort()) return false; int variantNumber = variantCollection.findNextSurvivingVariant(); if (variantNumber == NONE) { if (frontier.empty()) return false; // // Must be in incremental mode - try exanding current frontier. // expandLayer(); variantNumber = variantCollection.findNextSurvivingVariant(); if (variantNumber == NONE) return false; // no new variants immediately following a expandLayer() means we're done } // // We build a mapping from internal variant indices to the indices of surviving // variants so we can translate parent indices from the internal numbering used for // folding variants to the external numbering used at the metalevel. // internalIndexToExternalIndex.insert(IntMap::value_type(variantNumber, nrVariantsFound)); ++nrVariantsFound; return true; } VariantSearch::VariantSearch(RewritingContext* context, const Vector& blockerDags, FreshVariableGenerator* freshVariableGenerator, int flags, int incomingVariableFamily) : context(context), blockerDags(blockerDags), // shallow copy freshVariableGenerator(freshVariableGenerator), flags(flags), firstVariableFamily((incomingVariableFamily == 0) ? 1 : 0), secondVariableFamily((incomingVariableFamily == 2 || incomingVariableFamily == NONE) ? 1 : 2) { problemOkay = false; // until we have verified it is ok incompleteFlag = false; nrVariantsFound = 0; // we only track this in variant mode lastVariantMatchingProblem = 0; // we only use this in matching mode // // We make a clean copy of the initial dag for several reasons: // (1) If the variables have aready been indexed by a parent computation, we don't // want to overwrite this indexing. // (2) We don't want to reduce any ground dags that may be lying around. // targetCopy = context->root()->copyAll(); context->root()->clearCopyPointers(); // // Index variables in target dag. We don't want to do reduction on target dag for two reasons: // (1) We rely on variable dags not going away to protect variable dags in variableInfo from GC. // (2) Rewriting could introduce new ground terms that don't have their ground flag set, // breaking instantiation. // targetCopy->indexVariables(variableInfo, 0); nrVariantVariables = variableInfo.getNrVariables(); if (flags & CHECK_VARIABLE_NAMES) { // // Check that variable names don't clash with the range we're going to use for // fresh variables. If we are being called under system controlled circumstances // to do variant unfication, variable clashes are avoided using multiple variable // families and this check could cause false errors if the number of variables in // place gets larger that freshVariableGenerator base. // for (int i = 0; i < nrVariantVariables; ++i) { VariableDagNode* v = variableInfo.index2Variable(i); if (freshVariableGenerator->variableNameConflict(v->id(), incomingVariableFamily)) { DagNode* d = v; IssueWarning("unsafe variable name " << QUOTE(d) << " in variant " << ((flags & UNIFICATION_MODE) ? "unification" : ((flags & MATCH_MODE) ? "matching" : "narrowing")) << " problem."); return; } } } { // // Index and normalize and compute sorts for blocker dags. They could conceivable have // previously unseen variables, but we don't care about the actual names of such variables // since they will only be used in the subject side of matching and will behave as fresh // constants. If one of the blocker dags is already reducible, we count that as an // immediate fail. // for (DagNode* d : blockerDags) { d->indexVariables(variableInfo, 0); d->computeTrueSort(*context); // also handles theory normalization if (d->reducibleByVariantEquation(*context)) { IssueAdvisory("Irreducibility constraint " << d << " is itself reducible by a variant equation."); return; } } if (flags & CHECK_VARIABLE_NAMES) { int nrVariables = variableInfo.getNrVariables(); for (int i = nrVariantVariables; i < nrVariables; ++i) { VariableDagNode* v = variableInfo.index2Variable(i); if (freshVariableGenerator->variableNameConflict(v->id())) { DagNode* d = v; IssueWarning("unsafe variable name " << QUOTE(d) << " in irreducibility constraint."); return; } } } } problemOkay = true; // // Allocate a fresh firstVariableFamily variable for each original variable. // protectedVariant.resize(nrVariantVariables); Substitution s(nrVariantVariables); for (int i = 0; i < nrVariantVariables; ++i) { Symbol* vs = variableInfo.index2Variable(i)->symbol(); VariableDagNode* v = new VariableDagNode(vs, freshVariableGenerator->getFreshVariableName(i, firstVariableFamily), i); protectedVariant[i] = v; s.bind(i, v); } // // Make a copy of the initial dag with the variables replaced by fresh ones. // DagNode* newDag = targetCopy->instantiate(s); // indexVariables will have marked any ground dags if (newDag == 0) newDag = targetCopy; // // Now we can safely reduce newDag - we have replaced all the variables and // we no longer care about in place rewriting on ground terms. // RewritingContext* redContext = context->makeSubcontext(newDag); // // Note that reduce() does in-place replacement so subterms marked as ground // could potentially have their own subterms replaced with subterms containing // variables. Thus we can no longer trust the ground flags and indeed // DagNode::indexVariables(NarrowingVariableInfo& indices, int baseIndex) // which reindexes and sets ground flags prior to narrowing steps makes // a point of distrusting existing ground flags. // redContext->reduce(); DagNode* r = redContext->root(); if (flags & UNIFICATION_MODE) { // // Check for the identity unification problem, t =? t // DagArgumentIterator a(r); Assert(a.valid(), "bad 1st argument in unification mode"); DagNode* lhs = a.argument(); a.next(); Assert(a.valid(), "bad 2nd argument in unification mode"); if (lhs->equal(a.argument())) { // // We pretend to do a notional narrowing step to true that yields // the trivial unifier. // variantCollection.insertVariant(protectedVariant, 0, NONE, firstVariableFamily); protectedVariant.clear(); // remove GC protection context->addInCount(*redContext); //context->incrementEqCount(); // notional equational rewrite to true delete redContext; return; // no point in looking for other unifiers } } if (flags & SUBSUMPTION_MODE) { // // In subsumption mode we only care about the variant term; we don't // need to drag the variant substitution around, especially since // distinct variants could have the same variant term but different // variants substitutions. // protectedVariant.clear(); } protectedVariant.append(r); context->addInCount(*redContext); delete redContext; // // Insert this initial variant in to collection, and initialize variables for search. // variantCollection.insertVariant(protectedVariant, 0, NONE, firstVariableFamily); protectedVariant.clear(); // remove GC protection frontier.append(0); currentIndex = 1; // // Breadthfirst search for new variants. Variants indexed by the frontier can // disappear if they become covered by later variants, or were descendents of // variants that became covered. // useFirstVariableFamily = false; if (flags & (IRREDUNDANT_MODE | SUBSUMPTION_MODE | MATCH_MODE)) { // // Since later variants can cover earlier variants on different branches // (not ancestors) if we want to avoid returning redundant variants, we // have to generate them all up front. This is less useful for variant // unification, because even without redundant variants we still expect // redundant unifiers, because variant subsumption is modulo axioms not // axioms plus variant equations. // // If we're in subsumption mode, then we are using variant narrowing to // compute subsumption modulo axioms plus variants for some larger // problem. In this case we only have temporary use of blocker dags // since they may be needed for some other subsumption problem so we // want to compute a minimal complete set of variants upfront, and // then we're done variant narrowing. // // If we're in match mode we want a minimal complete set of variants and // then we will use the matching automata in VariantFolder to do the // matching. // do expandLayer(); while (!(frontier.empty())); if (flags & MATCH_MODE) variantCollection.prepareForVariantMatching(); } } VariantSearch::~VariantSearch() { if (flags & DELETE_FRESH_VARIABLE_GENERATOR) delete freshVariableGenerator; if (flags & DELETE_LAST_VARIANT_MATCHING_PROBLEM) delete lastVariantMatchingProblem; delete context; } void VariantSearch::markReachableNodes() { // // We don't mark the variable dag nodes in variableInfo - we rely on these existing in the // original dag protected by the original context. // int substSize = protectedVariant.size(); for (int i = 0; i < substSize; ++i) protectedVariant[i]->mark(); for (DagNode* d : blockerDags) d->mark(); targetCopy->mark(); } bool VariantSearch::isSubsumed(DagNode* target) const { Assert(flags & SUBSUMPTION_MODE, "not in SUBSUMPTION_MODE"); Vector variant(1); variant[0] = target; return variantCollection.isSubsumed(variant); } void VariantSearch::expandLayer() { // // Look at each variant in the current frontier, and if it // still exists, expand it by one step variant narrowing. // for (int index : frontier) { const Vector* variant = variantCollection.getVariant(index); if (variant != 0) { expandVariant(*variant, index); if (context->traceAbort()) { frontier.clear(); newFrontier.clear(); return; } } } frontier.swap(newFrontier); newFrontier.clear(); useFirstVariableFamily = !useFirstVariableFamily; } void VariantSearch::expandVariant(const Vector& variant, int index) { // // The last member of variant is the variant term and not part of the variant substitution. // int substSize = variant.size() - 1; RewritingContext* newContext = context->makeSubcontext(variant[substSize]); // // We don't need to protect the DagNodes in this local copy since the are already protected // by the VariantCollection. // Vector variantSubstitution(substSize); for (int i = 0; i < substSize; ++i) variantSubstitution[i] = variant[i]; // // Create a search state for one step variant narrowings. We pass variableInfo because // original variable names are needed for tracing, and total number of variables is // needed for unification. // int variableFamily = useFirstVariableFamily ? firstVariableFamily : secondVariableFamily; VariantNarrowingSearchState vnss(newContext, variantSubstitution, blockerDags, freshVariableGenerator, variableFamily, variableInfo, (flags & UNIFICATION_MODE)); // // Extract each new variant. // DagNode* variantTerm; Vector newVariantSubstitution; while (vnss.findNextVariant(variantTerm, newVariantSubstitution)) { // // Deep copy to protect variant substitution from GC during the folding and reduction. // protectedVariant = newVariantSubstitution; // // Allocate a unique index for the new variant. // int newIndex = currentIndex; ++currentIndex; // // Check to see if we generated a unifier. // if (variantTerm == 0) { Assert((flags & UNIFICATION_MODE), "null variant term and we're not in unification mode"); variantCollection.insertVariant(protectedVariant, newIndex, index, variableFamily); } else { // // Reduce dag part of new variant, and append it the the substitution. // RewritingContext* redContext = context->makeSubcontext(variantTerm); redContext->reduce(); protectedVariant.append(redContext->root()); // // Insert new variant in to collection and if it sticks, insert its index // into the new frontier. // if (variantCollection.insertVariant(protectedVariant, newIndex, index, variableFamily)) newFrontier.append(newIndex); // // Move rewrite count from reduction context to original context. // context->addInCount(*redContext); delete redContext; } // // Removed protection from variant substitution. // protectedVariant.clear(); } incompleteFlag |= vnss.isIncomplete(); // // Move rewrite count from narrowing context to original context. // context->addInCount(*newContext); delete newContext; } #ifdef DUMP void VariantSearch::dumpVariant(const Vector& variant, int index, int parentIndex) { int nrVariables = variant.size() - 1; cout << "\nInserted variant\n"; cout << "index = " << index << endl; cout << "parentIndex = " << parentIndex << endl; cout << "term = " << variant[nrVariables] << endl; for (int i = 0; i < nrVariables; ++i) { DagNode* v = variableInfo.index2Variable(i); cout << v << " |-> " << variant[i] << endl; } cout << endl; } #endif maude-3.1/src/Higher/assignmentConditionFragment.hh0000644000175200017520000000405313576050635017432 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for condition fragment supporting assignment via pattern matching. // #ifndef _assignmentConditionFragment_hh_ #define _assignmentConditionFragment_hh_ #include "conditionFragment.hh" #include "rhsBuilder.hh" class AssignmentConditionFragment : public ConditionFragment { NO_COPYING(AssignmentConditionFragment); public: AssignmentConditionFragment(Term* lhs, Term* rhs); ~AssignmentConditionFragment(); void check(VariableInfo& varInfo, NatSet& boundVariables); void preprocess(); void compileBuild(VariableInfo& variableInfo, TermBag& availableTerms); void compileMatch(VariableInfo& variableInfo, NatSet& boundUniquely); bool solve(bool findFirst, RewritingContext& solution, Stack& state); Term* getLhs() const; Term* getRhs() const; // // Needed for strategy language. // DagNode* makeRhsInstance(Substitution& solution); bool matchRoot(RewritingContext& context, Subproblem*& subproblem); private: Term* lhs; Term* rhs; RhsBuilder builder; LhsAutomaton* lhsMatcher; int rhsIndex; }; inline Term* AssignmentConditionFragment::getLhs() const { return lhs; } inline Term* AssignmentConditionFragment::getRhs() const { return rhs; } #endif maude-3.1/src/Higher/assignmentConditionFragment.cc0000644000175200017520000001016113576050735017416 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class AssignmentConditionFragment. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" //#include "variable.hh" // interface class definitions //#include "symbol.hh" //#include "dagNode.hh" #include "term.hh" #include "lhsAutomaton.hh" #include "rhsAutomaton.hh" #include "subproblem.hh" // core class definitions #include "rewritingContext.hh" #include "variableInfo.hh" // higher class definitions #include "assignmentConditionState.hh" #include "assignmentConditionFragment.hh" AssignmentConditionFragment::AssignmentConditionFragment(Term* lhs, Term* rhs) : lhs(lhs), rhs(rhs) { lhsMatcher = 0; rhsIndex = NONE; } AssignmentConditionFragment::~AssignmentConditionFragment() { lhs->deepSelfDestruct(); rhs->deepSelfDestruct(); delete lhsMatcher; } void AssignmentConditionFragment::check(VariableInfo& variableInfo, NatSet& boundVariables) { NatSet unboundVariables; lhs = lhs->normalize(true); lhs->indexVariables(variableInfo); variableInfo.addConditionVariables(lhs->occursBelow()); rhs = rhs->normalize(false); rhs->indexVariables(variableInfo); variableInfo.addConditionVariables(rhs->occursBelow()); unboundVariables.insert(rhs->occursBelow()); unboundVariables.subtract(boundVariables); variableInfo.addUnboundVariables(unboundVariables); boundVariables.insert(lhs->occursBelow()); } void AssignmentConditionFragment::preprocess() { lhs->symbol()->fillInSortInfo(lhs); lhs->analyseCollapses(); rhs->symbol()->fillInSortInfo(rhs); Assert(lhs->getComponent() == rhs->getComponent(), "component clash"); } void AssignmentConditionFragment::compileBuild(VariableInfo& variableInfo, TermBag& availableTerms) { rhsIndex = rhs->compileRhs(builder, variableInfo, availableTerms, true); variableInfo.useIndex(rhsIndex); lhs->findAvailableTerms(availableTerms, true); lhs->determineContextVariables(); lhs->insertAbstractionVariables(variableInfo); variableInfo.endOfFragment(); } void AssignmentConditionFragment::compileMatch(VariableInfo& variableInfo, NatSet& boundUniquely) { builder.remapIndices(variableInfo); rhsIndex = variableInfo.remapIndex(rhsIndex); bool subproblemLikely; lhsMatcher = lhs->compileLhs(false, variableInfo, boundUniquely, subproblemLikely); boundUniquely.insert(lhs->occursBelow()); } bool AssignmentConditionFragment::solve(bool findFirst, RewritingContext& solution, Stack& state) { if (findFirst) { builder.safeConstruct(solution); AssignmentConditionState* cs = new AssignmentConditionState(solution, lhsMatcher, solution.value(rhsIndex)); if (cs->solve(true, solution)) { state.push(cs); return true; } delete cs; } else { AssignmentConditionState* cs = safeCast(AssignmentConditionState*, state.top()); if (cs->solve(false, solution)) return true; delete cs; state.pop(); } return false; } DagNode* AssignmentConditionFragment::makeRhsInstance(Substitution& solution) { builder.safeConstruct(solution); return solution.value(rhsIndex); } bool AssignmentConditionFragment::matchRoot(RewritingContext& context, Subproblem*& subproblem) { subproblem = 0; return lhsMatcher->match(context.root(), context, subproblem); } maude-3.1/src/Higher/narrowingSequenceSearch.cc0000644000175200017520000002156113722121401016524 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class NarrowingSequenceSearch. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "higher.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" // variable class definitions #include "variableDagNode.hh" // core class definitions #include "rewritingContext.hh" // higher class definitions #include "pattern.hh" #include "narrowingSequenceSearch.hh" #include "freshVariableGenerator.hh" #include "narrowingVariableInfo.hh" NarrowingSequenceSearch::NarrowingSequenceSearch(RewritingContext* initial, SearchType searchType, Pattern* goal, int maxDepth, int narrowingFlags, FreshVariableGenerator* freshVariableGenerator) : initial(initial), goal(goal), maxDepth((searchType == ONE_STEP) ? 1 : maxDepth), narrowingFlags(narrowingFlags), freshVariableGenerator(freshVariableGenerator) { // // First we replace all the variables in our initial term so they can't clash with // variables in the rules. // NarrowingVariableInfo variableInfo; initial->root()->indexVariables(variableInfo, 0); int nrVariables = variableInfo.getNrVariables(); Substitution s(nrVariables); for (int i = 0; i < nrVariables; ++i) { Symbol* baseSymbol = variableInfo.index2Variable(i)->symbol(); int name = freshVariableGenerator->getFreshVariableName(i, 0); VariableDagNode* v = new VariableDagNode(baseSymbol, name, i); s.bind(i, v); } DagNode* newDag = initial->root()->instantiate(s); // not safe if we haven't determined ground terms in context->root() if (newDag == 0) newDag = initial->root(); RewritingContext* redContext = initial->makeSubcontext(newDag); redContext->reduce(); seenSet.insert(redContext->root()); matchState = 0; // // initialState becomes responsible for deleting redContext // NarrowingSearchState* initialState = new NarrowingSearchState(redContext, freshVariableGenerator, true, UNDEFINED, narrowingFlags); stateStack.append(initialState); needToTryInitialState = (searchType == ANY_STEPS); //reachingInitialStateOK = (searchType == AT_LEAST_ONE_STEP || searchType == ONE_STEP); normalFormNeeded = (searchType == NORMAL_FORM); topOfStackFresh = true; variableTotalForPreviouslyReturnedStates = 0; variableTotalForAllReturnedStates = 0; incompleteFlag = false; } NarrowingSequenceSearch::~NarrowingSequenceSearch() { delete matchState; delete goal; delete freshVariableGenerator; for (NarrowingSearchState* s : stateStack) delete s; delete initial; } bool NarrowingSequenceSearch::findNextMatch() { if (matchState != 0) goto tryMatch; // non-startup case for(;;) { if (!(normalFormNeeded ? findNextNormalForm() : findNextInterestingState())) break; if (goal == 0) { // // No pattern case: we do some extra accounting needed by metalevel. // variableTotalForPreviouslyReturnedStates = variableTotalForAllReturnedStates; variableTotalForAllReturnedStates += stateStack[stateStack.size() - 1]->getNrOfVariablesInSubject(); /* cout << variableTotalForPreviouslyReturnedStates << '\n' << variableTotalForAllReturnedStates << '\n' << stateStack[stateStack.size() - 1]->getNrOfVariablesInSubject() << '\n'; */ return true; // no pattern case } matchState = new MatchSearchState(initial->makeSubcontext(getStateDag()), // CHECK: could we just use existing context? goal, MatchSearchState::GC_CONTEXT); tryMatch: bool foundMatch = matchState->findNextMatch(); // // We don't transfer the rewrite count from matchState since there is // no condition, and there should be no membership axioms so count must // be zero. // if (foundMatch) return true; delete matchState; matchState = 0; } return false; } bool NarrowingSequenceSearch::findNextNormalForm() { int currentIndex = stateStack.size() - 1; NarrowingSearchState* currentState; if (!topOfStackFresh) { backtrack: // // Backtrack. // incompleteFlag |= stateStack[currentIndex]->isIncomplete(); delete stateStack[currentIndex]; stateStack.resize(currentIndex); --currentIndex; if (currentIndex < 0) return false; topOfStackFresh = false; } // // Forward. // currentState = stateStack[currentIndex]; while (currentState->findNextNarrowing()) { if (currentIndex == maxDepth) goto backtrack; DagNode* replacement; // will be set by getNarrowedDag() DagNode* narrowedDag = currentState->getNarrowedDag(replacement); DebugInfo("replacement = " << replacement << " narrowedDag = " << narrowedDag); if (RewritingContext::getTraceStatus()) { RewritingContext* context = currentState->getContext(); context->traceNarrowingStep(currentState->getRule(), currentState->getDagNode(), replacement, &(currentState->getVariableInfo()), &(currentState->getSubstitution()), narrowedDag); if (context->traceAbort()) return false; } initial->incrementNarrowingCount(); RewritingContext* newContext = initial->makeSubcontext(narrowedDag); newContext->reduce(); if (newContext->traceAbort()) { delete newContext; return false; } initial->addInCount(*newContext); if (seenSet.dagNode2Index(newContext->root()) != NONE) { DebugInfo(Tty(Tty::RED) << "--------------------------------\nDUP state " << newContext->root() << "--------------------------------" << Tty(Tty::RESET)); delete newContext; topOfStackFresh = false; continue; } seenSet.insert(newContext->root()); currentState = new NarrowingSearchState(newContext, freshVariableGenerator, !(currentState->isOdd()), UNDEFINED, narrowingFlags); stateStack.append(currentState); ++currentIndex; topOfStackFresh = true; } if (!topOfStackFresh) goto backtrack; topOfStackFresh = false; // top of stack will be stale next time we're called return true; } bool NarrowingSequenceSearch::findNextInterestingState() { if (needToTryInitialState) { // // Special case: return the initial state. // needToTryInitialState = false; // don't do this again return true; } int currentIndex = stateStack.size() - 1; while (currentIndex >= 0) { NarrowingSearchState* currentState = stateStack[currentIndex]; if ((maxDepth == NONE || currentIndex < maxDepth) && currentState->findNextNarrowing()) { DagNode* replacement; // will be set by getNarrowedDag() DagNode* narrowedDag = currentState->getNarrowedDag(replacement); DebugNew("replacement = " << replacement << " narrowedDag = " << narrowedDag); if (RewritingContext::getTraceStatus()) { RewritingContext* context = currentState->getContext(); context->traceNarrowingStep(currentState->getRule(), currentState->getDagNode(), replacement, &(currentState->getVariableInfo()), &(currentState->getSubstitution()), narrowedDag); if (context->traceAbort()) return false; } initial->incrementNarrowingCount(); RewritingContext* newContext = initial->makeSubcontext(narrowedDag); newContext->reduce(); ////cout << "which reduced to " << newContext->root() << endl; if (seenSet.dagNode2Index(newContext->root()) != NONE) { DebugInfo(Tty(Tty::RED) << "\n--------------------------------\nDUP state " << newContext->root() << "\n--------------------------------" << Tty(Tty::RESET)); delete newContext; continue; } seenSet.insert(newContext->root()); stateStack.append(new NarrowingSearchState(newContext, freshVariableGenerator, !(currentState->isOdd()), UNDEFINED, narrowingFlags)); return true; } // // Backtrack. // incompleteFlag |= stateStack[currentIndex]->isIncomplete(); delete stateStack[currentIndex]; stateStack.resize(currentIndex); --currentIndex; } return false; } maude-3.1/src/Higher/variantNarrowingSearchState.hh0000755000175200017520000000604513576050635017417 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2012 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for searching for single variant narrowing steps. // #ifndef _varientNarrowingSearchState_hh_ #define _varientNarrowingSearchState_hh_ #include "positionState.hh" #include "narrowingVariableInfo.hh" #include "unifierFilter.hh" class VariantNarrowingSearchState : public PositionState { NO_COPYING(VariantNarrowingSearchState); public: // // We assume that we are the only process working on the DagNodes in context and variantSubsitution and // we can therefore write what values we like into the indices of reachable VariableDagNodes. // VariantNarrowingSearchState(RewritingContext* context, // contains the variant term const Vector& variantSubstitution, const Vector& blockerDags, FreshVariableGenerator* freshVariableGenerator, int variableFamily, const NarrowingVariableInfo& originalVariables, bool unificationMode = false); ~VariantNarrowingSearchState(); // // Variant passed back is not GC protected by us. // bool findNextVariant(DagNode*& variantTerm, Vector& variantSubstitution /*, int& nrFreeVariables */); bool isIncomplete() const; private: void collectUnifiers(NarrowingUnificationProblem* unificationProblem, int positionIndex, int equationIndex); RewritingContext* const context; // has own GC protection const Vector& variantSubstitution; // assumed to be protected from GC by whatever passed it to us const Vector& blockerDags; // assumed to be protected from GC by whatever passed it to us FreshVariableGenerator* const freshVariableGenerator; const NarrowingVariableInfo& originalVariables; // assumed to be protected from GC by whatever passed it to us; only needed for tracing Module* const module; bool incompleteFlag; NarrowingVariableInfo variableInfo; // // We can't create the UnifierFilter until we have indexed the variables in our variant // dag and variant substitution, so this can't be a member object. // UnifierFilter* unifiers; // has own GC protection Substitution blockerSubstitution; // filled out and done with before GC happens }; inline bool VariantNarrowingSearchState::isIncomplete() const { return incompleteFlag; } #endif maude-3.1/src/Higher/pattern.hh0000644000175200017520000000307213576050635013404 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Patterns for matching. // #ifndef _pattern_hh_ #define _pattern_hh_ #include "preEquation.hh" class Pattern : public PreEquation { public: /** * Patterns can be defined lazy to postpone their sort information filling * and compilation after the theory has been closed (pattern appear in strategy * definitions within a module). * * Pattern::prepare must be called before using the pattern. */ Pattern(Term* patternTerm, bool withExtension, const Vector& condition = noCondition, bool lazy = false); void prepare(); void print(ostream& s) const; private: int traceBeginTrial(DagNode* subject, RewritingContext& context) const; bool withExtension; bool prepared; }; #endif maude-3.1/src/Higher/pattern.cc0000644000175200017520000000441413576050735013374 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class Pattern. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" // interface class definitions #include "term.hh" #include "lhsAutomaton.hh" // core class definitions #include "termBag.hh" #include "substitution.hh" #include "pattern.hh" Pattern::Pattern(Term* patternTerm, bool withExtension, const Vector& condition, bool lazy) : PreEquation(NONE, patternTerm, condition), withExtension(withExtension), prepared(false) { // // Patterns belong to commands and descent function invocations; they // don't belong to modules - we set null information here so we don't // have uninitialized data and other things can recognize we don't belong // to a module. // setModuleInfo(0, NONE); NatSet boundVariables; // variables bound by matching check(boundVariables); if (!lazy) prepare(); } void Pattern::prepare() { if (!isBad() && !prepared) { preprocess(); addConditionVariables(getLhs()->occursBelow()); TermBag availableTerms; // terms available for reuse compileBuild(availableTerms, false); compileMatch(true, withExtension); prepared = true; } } int Pattern::traceBeginTrial(DagNode* subject, RewritingContext& context) const { return UNDEFINED; } void Pattern::print(ostream& s) const { // FIXME This is an infinite loop s << this; } maude-3.1/src/Higher/Makefile.am0000644000175200017520000000431113715375140013433 00000000000000noinst_LIBRARIES = libhigher.a libhigher_a_CPPFLAGS = \ -I$(top_srcdir)/src/Utility \ -I$(top_srcdir)/src/Interface \ -I$(top_srcdir)/src/Core \ -I$(top_srcdir)/src/Variable \ -I$(top_srcdir)/src/FullCompiler \ -I$(top_srcdir)/src/Temporal \ -I$(top_srcdir)/src/FreeTheory \ -I$(top_srcdir)/src/NA_Theory \ -I$(top_srcdir)/src/BuiltIn \ -I$(top_srcdir)/src/Mixfix libhigher_a_SOURCES = \ rewriteSearchState.cc \ matchSearchState.cc \ positionState.cc \ pattern.cc \ searchState.cc \ rewriteSequenceSearch.cc \ modelCheckerSymbol.cc \ stateTransitionGraph.cc \ rewriteConditionFragment.cc \ assignmentConditionFragment.cc \ sortTestConditionFragment.cc \ equalityConditionFragment.cc \ assignmentConditionState.cc \ rewriteConditionState.cc \ temporalSymbol.cc \ satSolverSymbol.cc \ unificationProblem.cc \ narrowingSearchState.cc \ narrowingUnificationProblem.cc \ narrowingSequenceSearch.cc \ unifierFilter.cc \ variantNarrowingSearchState.cc \ variantFolder.cc \ variantSearch.cc \ variantUnificationProblem.cc \ narrowingSearchState2.cc \ narrowingFolder.cc \ narrowingSearchState3.cc \ narrowingSequenceSearch3.cc \ irredundantUnificationProblem.cc \ variantUnifierFilter.cc \ filteredVariantUnifierSearch.cc \ variantMatchingProblem.cc noinst_HEADERS = \ assignmentConditionFragment.hh \ assignmentConditionState.hh \ equalityConditionFragment.hh \ higher.hh \ matchSearchState.hh \ modelCheckerSymbol.hh \ pattern.hh \ positionState.hh \ rewriteConditionFragment.hh \ rewriteConditionState.hh \ rewriteSearchState.hh \ rewriteSequenceSearch.hh \ satSolverSymbol.hh \ searchState.hh \ sortTestConditionFragment.hh \ stateTransitionGraph.hh \ temporalSymbol.hh \ unificationProblem.hh \ narrowingSearchState.hh \ narrowingUnificationProblem.hh \ narrowingSequenceSearch.hh \ sequenceSearch.hh \ cacheableState.hh \ unifierFilter.hh \ variantNarrowingSearchState.hh \ variantFolder.hh \ variantSearch.hh \ variantUnificationProblem.hh \ narrowingSearchState2.hh \ narrowingFolder.hh \ narrowingSearchState3.hh \ narrowingSequenceSearch3.hh \ irredundantUnificationProblem.hh \ variantUnifierFilter.hh \ filteredVariantUnifierSearch.hh \ variantMatchingProblem.hh maude-3.1/src/Higher/sortTestConditionFragment.hh0000644000175200017520000000350713576050635017114 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for condition fragment supporting sort test. // #ifndef _sortTestConditionFragment_hh_ #define _sortTestConditionFragment_hh_ #include "conditionFragment.hh" #include "rhsBuilder.hh" class SortTestConditionFragment : public ConditionFragment { NO_COPYING(SortTestConditionFragment); public: SortTestConditionFragment(Term* lhs, Sort* sort); ~SortTestConditionFragment(); void check(VariableInfo& varInfo, NatSet& boundVariables); void preprocess(); void compileBuild(VariableInfo& variableInfo, TermBag& availableTerms); void compileMatch(VariableInfo& variableInfo, NatSet& boundUniquely); bool solve(bool findFirst, RewritingContext& solution, Stack& state); Term* getLhs() const; Sort* getSort() const; private: Term* lhs; Sort* sort; RhsBuilder builder; int lhsIndex; }; inline Term* SortTestConditionFragment::getLhs() const { return lhs; } inline Sort* SortTestConditionFragment::getSort() const { return sort; } #endif maude-3.1/src/Higher/stateTransitionGraph.cc0000644000175200017520000001172413576050735016076 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class StateTransitionGraph. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "higher.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" // core class definitions #include "rewriteSearchState.hh" #include "stateTransitionGraph.hh" StateTransitionGraph::StateTransitionGraph(RewritingContext* initial) : initial(initial) { initial->reduce(); int hashConsIndex = hashConsSet.insert(initial->root()); hashCons2seen.resize(hashConsIndex + 1); for (int i = 0; i < hashConsIndex; ++i) hashCons2seen[i] = NONE; hashCons2seen[hashConsIndex] = seen.size(); seen.append(new State(hashConsIndex, NONE)); } StateTransitionGraph::~StateTransitionGraph() { int nrStates = seen.length(); for (int i = 0; i < nrStates; i++) { delete seen[i]->rewriteState; delete seen[i]; } delete initial; } int StateTransitionGraph::getNextState(int stateNr, int index) { State* n = seen[stateNr]; int nrNextStates = n->nextStates.length(); if (index < nrNextStates) return n->nextStates[index]; if (n->fullyExplored) return NONE; if (n->rewriteState == 0) { DagNode* canonicalStateDag = hashConsSet.getCanonical(seen[stateNr]->hashConsIndex); RewritingContext* newContext = initial->makeSubcontext(canonicalStateDag); n->rewriteState = new RewriteSearchState(newContext, NONE, RewriteSearchState::GC_CONTEXT | RewriteSearchState::SET_UNREWRITABLE | PositionState::SET_UNSTACKABLE, 0, UNBOUNDED); } RewriteSearchState* rewriteState = n->rewriteState; RewritingContext *context = rewriteState->getContext(); while (nrNextStates <= index) { bool success = rewriteState->findNextRewrite(); rewriteState->transferCountTo(*initial); if (success) { Rule* rule = rewriteState->getRule(); bool trace = RewritingContext::getTraceStatus(); if (trace) { context->tracePreRuleRewrite(rewriteState->getDagNode(), rule); if (context->traceAbort()) return NONE; } DagNode* replacement = rewriteState->getReplacement(); RewriteSearchState::DagPair r = rewriteState->rebuildDag(replacement); RewritingContext* c = context->makeSubcontext(r.first); initial->incrementRlCount(); if (trace) { c->tracePostRuleRewrite(r.second); if (c->traceAbort()) { delete c; return NONE; } } c->reduce(); if (c->traceAbort()) { delete c; return NONE; } initial->addInCount(*c); delete c; int nextState; int hashConsIndex = hashConsSet.insert(r.first); int mapSize = hashCons2seen.size(); //DebugAdvisory("replacement dag = " << r.first << "hashConsIndex = " << hashConsIndex); if (hashConsIndex >= mapSize) { // // Definitely a new state. // hashCons2seen.resize(hashConsIndex + 1); for (int i = mapSize; i < hashConsIndex; ++i) hashCons2seen[i] = NONE; nextState = seen.size(); hashCons2seen[hashConsIndex] = nextState; seen.append(new State(hashConsIndex, stateNr)); DebugAdvisory("new state dag = " << r.first << " hashConsIndex = " << hashConsIndex << " collisionCounter = " << hashConsSet.collisionCounter); } else { // // Seen before. // nextState = hashCons2seen[hashConsIndex]; if (nextState == NONE) { // // But only as a subdag, not as a state dag, so it counts as a new state. // nextState = seen.size(); hashCons2seen[hashConsIndex] = nextState; seen.append(new State(hashConsIndex, stateNr)); } } n->nextStates.append(nextState); n->fwdArcs[nextState].insert(rule); ++nrNextStates; // // If we didn't do any equational rewriting we will not have had a chance to // collect garbage. // MemoryCell::okToCollectGarbage(); } else { delete rewriteState; n->fullyExplored = true; n->rewriteState = 0; return NONE; } } return n->nextStates[index]; } maude-3.1/src/Higher/irredundantUnificationProblem.hh0000644000175200017520000000334413710444027017752 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for searching for a minimal set complete set of order-sorted unifiers. // #ifndef _irredundantUnificationProblem_hh_ #define _irredundantUnificationProblem_hh_ #include "unificationProblem.hh" class IrredundantUnificationProblem : public UnificationProblem { NO_COPYING(IrredundantUnificationProblem); public: IrredundantUnificationProblem(Vector& lhs, Vector& rhs, FreshVariableGenerator* freshVariableGenerator, int incomingVariableFamily = NONE); ~IrredundantUnificationProblem(); // // We override these functions from the base class that are specific to // individual unifiers. // virtual bool findNextUnifier(); virtual const Substitution& getSolution() const; virtual int getNrFreeVariables() const; protected: //void markReachableNodes(); private: UnifierFilter* unifierFilter; Substitution* currentUnifier; int nrFreeVariables; }; #endif maude-3.1/src/Higher/unificationProblem.hh0000755000175200017520000000646213702227240015556 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for searching for order-sorted unifiers. // #ifndef _unificationProblem_hh_ #define _unificationProblem_hh_ #include "cacheableState.hh" #include "simpleRootContainer.hh" #include "variableInfo.hh" #include "substitution.hh" #include "pendingUnificationStack.hh" class UnificationProblem : public CacheableState, private SimpleRootContainer { NO_COPYING(UnificationProblem); public: UnificationProblem(Vector& lhs, Vector& rhs, FreshVariableGenerator* freshVariableGenerator, int incomingVariableFamily = NONE); virtual ~UnificationProblem(); bool problemOK() const; const VariableInfo& getVariableInfo() const; int getVariableFamily() const; bool isIncomplete() const; // // These are specific to unifiers and can be overriden by a derived class. // virtual bool findNextUnifier(); virtual const Substitution& getSolution() const; virtual int getNrFreeVariables() const; protected: // // Derived class can override this function if it needs to mark nodes during // the mark phase of garbage collection, but in this case the overriding // function must also call this version. // void markReachableNodes(); private: void findOrderSortedUnifiers(); void bindFreeVariables(); Vector leftHandSides; Vector rightHandSides; FreshVariableGenerator* const freshVariableGenerator; const int variableFamilyToUse; VariableInfo variableInfo; const SortBdds* sortBdds; // sort computation BDDs for our module Vector leftHandDags; Vector rightHandDags; UnificationContext* unsortedSolution; // for accumulating solved forms and constructing unsorted unifiers PendingUnificationStack pendingStack; bool problemOkay; // true if problem didn't violate ctor invariants bool viable; // true if problem didn't fail computeSolvedForm() pass Vector freeVariables; // indices (slots) of unbound variables in unsorted unifier AllSat* orderSortedUnifiers; // satisfiability problem encoding sorts for order-sorted unifiers Substitution* sortedSolution; // for construction order-sorted unifiers }; inline bool UnificationProblem::problemOK() const { return problemOkay; } inline const VariableInfo& UnificationProblem::getVariableInfo() const { return variableInfo; } inline bool UnificationProblem::isIncomplete() const { return pendingStack.isIncomplete(); } inline int UnificationProblem::getVariableFamily() const { return variableFamilyToUse; } #endif maude-3.1/src/Higher/rewriteSequenceSearch.cc0000644000175200017520000001017713576050735016222 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class RewriteSequenceSearch. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "higher.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" // core class definitions #include "rewritingContext.hh" #include "pattern.hh" #include "rewriteSearchState.hh" #include "rewriteSequenceSearch.hh" RewriteSequenceSearch::RewriteSequenceSearch(RewritingContext* initial, SearchType searchType, Pattern* goal, int maxDepth) : StateTransitionGraph(initial), goal(goal), maxDepth((searchType == ONE_STEP) ? 1 : maxDepth) { matchState = 0; explore = -1; exploreDepth = -1; firstDeeperNodeNr = 0; needToTryInitialState = (searchType == ANY_STEPS); reachingInitialStateOK = (searchType == AT_LEAST_ONE_STEP || searchType == ONE_STEP); normalFormNeeded = (searchType == NORMAL_FORM); nextArc = NONE; } RewriteSequenceSearch::~RewriteSequenceSearch() { delete matchState; delete goal; } bool RewriteSequenceSearch::findNextMatch() { if (matchState != 0) goto tryMatch; // non-startup case for(;;) { stateNr = findNextInterestingState(); if (stateNr == NONE) break; matchState = new MatchSearchState(getContext()->makeSubcontext(getStateDag(stateNr)), goal, MatchSearchState::GC_CONTEXT); tryMatch: bool foundMatch = matchState->findNextMatch(); matchState->transferCountTo(*(getContext())); if (foundMatch) return true; delete matchState; } matchState = 0; return false; } int RewriteSequenceSearch::findNextInterestingState() { if (needToTryInitialState) { // // Special case: return the initial state. // needToTryInitialState = false; // don't do this again return 0; } if (nextArc != NONE) goto exploreArcs; for(;;) { // // Get next state to explore. // ++explore; if (explore == getNrStates()) break; if (explore == firstDeeperNodeNr) { ++exploreDepth; if (normalFormNeeded) { if (maxDepth > 0 && exploreDepth > maxDepth) break; } else { if (exploreDepth == maxDepth) break; } firstDeeperNodeNr = getNrStates(); } nextArc = 0; exploreArcs: int nrStates = getNrStates(); int nextStateNr; while ((nextStateNr = getNextState(explore, nextArc)) != NONE) { ++nextArc; if (normalFormNeeded) { if (exploreDepth == maxDepth) break; // no point looking for further arcs } else { if (nextStateNr == nrStates) // new state reached return nextStateNr; if (nextStateNr == 0 && reachingInitialStateOK) { // // We have arrived back at our initial state, but because // we didn't try matching the initial state, we do it now. // reachingInitialStateOK = false; // don't do this again return 0; } } } if (getContext()->traceAbort()) return NONE; if (normalFormNeeded && nextArc == 0) { nextArc = NONE; return explore; } } return NONE; } Rule* RewriteSequenceSearch::getStateRule(int stateNr) const { const ArcMap& fwdArcs = getStateFwdArcs(getStateParent(stateNr)); return *(fwdArcs.find(stateNr)->second.begin()); } maude-3.1/src/Higher/narrowingSearchState2.hh0000644000175200017520000001270113730243356016141 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for searching for single narrowing step using variant unification. // This version is used for one step search. // #ifndef _narrowingSearchState2_hh_ #define _narrowingSearchState2_hh_ #include "cacheableState.hh" #include "positionState.hh" #include "simpleRootContainer.hh" #include "narrowingVariableInfo.hh" #include "variantUnificationProblem.hh" class NarrowingSearchState2 : public CacheableState, private SimpleRootContainer { NO_COPYING(NarrowingSearchState2); public: enum Flags { ALLOW_NONEXEC = 32, // allow narrowing with nonexecutable rules, unbound // variables being treated as fresh GC_VAR_GEN = 64, // delete freshVariableGenerator in dtor }; // // Narrowing is done without extension and maxDepth may be // UNBOUNDED to indicate no bound. // // Takes over responsibility for deleting context and on destruction. // Can also take responsibility for deleting variable generator if flag given. // NarrowingSearchState2(RewritingContext* context, const Vector& blockerDagsArg, FreshVariableGenerator* freshVariableGenerator, int incomingVariableFamily, int flags = ALLOW_NONEXEC | GC_VAR_GEN | PositionState::RESPECT_FROZEN, int minDepth = 0, int maxDepth = UNBOUNDED, int variantFlags = 0); ~NarrowingSearchState2(); bool findNextNarrowing(); // // This is the original context we passed in. // RewritingContext* getContext() const; // // This is either the original context, or a child context if we did // a variable renaming. // RewritingContext* getActiveContext() const; // // Get information about last narrowing step. // Rule* getRule() const; DagNode* getNarrowedDag(DagNode*& replacement, DagNode*& replacementContext) const; const Substitution& getSubstitution() const; const NarrowingVariableInfo& getVariableInfo() const; const NarrowingVariableInfo& getActiveVariableInfo() const; int getVariableFamily() const; DagNode* getReplacedDag() const; bool isIncomplete() const; private: void markReachableNodes(); bool allVariablesBelongToIncomingFamily(); RewritingContext* const context; Vector blockerDags; FreshVariableGenerator* const freshVariableGenerator; const int incomingVariableFamily; const int variantFlags; Module* const module; // // We keep two maps between substitution slots and variables. // The first hold the original variables. // The second is either emty or holds their renamings. // NarrowingVariableInfo variableInfo; NarrowingVariableInfo freshVariableInfo; // // If we did a renaming, we keep a substitution that gets us back to // the original variables, for reconstructing the context around replaced // subdag. // Substitution* reverseMapping; // // We might need to rename variables before we give the dag to // PositionState to handle the traversal, so we can't have PositionState // as a base class as we normally do. // PositionState *positionState; int ruleIndex; // index of current rule being tried int variableFamily; VariantUnificationProblem* unificationProblem; RewritingContext* newContext; bool incompleteFlag; }; inline RewritingContext* NarrowingSearchState2::getContext() const { return context; } inline RewritingContext* NarrowingSearchState2::getActiveContext() const { // // If we didn't replace variables with fresh variables, this // will be the same as context. // return newContext; } inline const NarrowingVariableInfo& NarrowingSearchState2::getVariableInfo() const { // // We return the NarrowingVariableInfo containing the original // variables, even if we renamed them to do the narrowing. // return variableInfo; } inline const NarrowingVariableInfo& NarrowingSearchState2::getActiveVariableInfo() const { // // We return the NarrowingVariableInfo containing the variables actually // used during the narrowing step - these may be fresh. // bool variablesReplaced = (freshVariableInfo.getNrVariables() != 0); return variablesReplaced ? freshVariableInfo : variableInfo; } inline bool NarrowingSearchState2::isIncomplete() const { // // Returns true if any incompleteness has been encountered so far. // return incompleteFlag; } inline Rule* NarrowingSearchState2::getRule() const { return module->getRules()[ruleIndex]; } inline int NarrowingSearchState2::getVariableFamily() const { return unificationProblem->getVariableFamily(); } inline const Substitution& NarrowingSearchState2::getSubstitution() const { return unificationProblem->getSolution(); } inline DagNode* NarrowingSearchState2::getReplacedDag() const { return positionState->getDagNode(); } #endif maude-3.1/src/Higher/satSolverSymbol.cc0000644000175200017520000001526213576050735015072 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class SatSolverSymbol. // #include // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "temporal.hh" #include "interface.hh" #include "core.hh" #include "freeTheory.hh" #include "builtIn.hh" #include "higher.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "term.hh" // core class definitions #include "dagArgumentIterator.hh" //#include "substitution.hh" #include "rewritingContext.hh" #include "symbolMap.hh" // free theory class definitions #include "freeDagNode.hh" // built in class definitions #include "bindingMacros.hh" // temporal class definitions #include "logicFormula.hh" #include "genBuchiAutomaton.hh" // higher class definitions #include "satSolverSymbol.hh" SatSolverSymbol::SatSolverSymbol(int id) : TemporalSymbol(id, 1) { formulaListSymbol = 0; nilFormulaListSymbol = 0; modelSymbol = 0; } bool SatSolverSymbol::attachData(const Vector& opDeclaration, const char* purpose, const Vector& data) { NULL_DATA(purpose, SatSolverSymbol, data); return TemporalSymbol::attachData(opDeclaration, purpose, data); } bool SatSolverSymbol::attachSymbol(const char* purpose, Symbol* symbol) { BIND_SYMBOL(purpose, symbol, formulaListSymbol, Symbol*); BIND_SYMBOL(purpose, symbol, nilFormulaListSymbol, Symbol*); BIND_SYMBOL(purpose, symbol, modelSymbol, Symbol*); return TemporalSymbol::attachSymbol(purpose, symbol); } bool SatSolverSymbol::attachTerm(const char* purpose, Term* term) { BIND_TERM(purpose, term, falseTerm); return TemporalSymbol::attachTerm(purpose, term); } void SatSolverSymbol::copyAttachments(Symbol* original, SymbolMap* map) { SatSolverSymbol* orig = safeCast(SatSolverSymbol*, original); COPY_SYMBOL(orig, formulaListSymbol, map, Symbol*); COPY_SYMBOL(orig, nilFormulaListSymbol, map, Symbol*); COPY_SYMBOL(orig, modelSymbol, map, Symbol*); COPY_TERM(orig, falseTerm, map); TemporalSymbol::copyAttachments(original, map); } void SatSolverSymbol::getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data) { APPEND_DATA(purposes, data, SatSolverSymbol); TemporalSymbol::getDataAttachments(opDeclaration, purposes, data); } void SatSolverSymbol::getSymbolAttachments(Vector& purposes, Vector& symbols) { APPEND_SYMBOL(purposes, symbols, formulaListSymbol); APPEND_SYMBOL(purposes, symbols, nilFormulaListSymbol); APPEND_SYMBOL(purposes, symbols, modelSymbol); TemporalSymbol::getSymbolAttachments(purposes, symbols); } void SatSolverSymbol::getTermAttachments(Vector& purposes, Vector& terms) { APPEND_TERM(purposes, terms, falseTerm); TemporalSymbol::getTermAttachments(purposes, terms); } void SatSolverSymbol::postInterSymbolPass() { PREPARE_TERM(falseTerm); TemporalSymbol::postInterSymbolPass(); } void SatSolverSymbol::reset() { falseTerm.reset(); // so false dag can be garbage collected TemporalSymbol::reset(); // parents reset() tasks } bool SatSolverSymbol::eqRewrite(DagNode* subject, RewritingContext& context) { Assert(this == subject->symbol(), "bad symbol"); FreeDagNode* f = safeCast(FreeDagNode*, subject); DagNode* formulaDag = f->getArgument(0); formulaDag->reduce(context); DagNodeSet propositions; LogicFormula formula; int top = build(formula, propositions, formulaDag); if (top == NONE) { IssueAdvisory("LTL formula " << QUOTE(formulaDag) << " did not reduce to a valid negative normal form."); return TemporalSymbol::eqRewrite(subject, context); } #ifdef TDEBUG cout << "top = " << top << endl; formula.dump(cout); #endif GenBuchiAutomaton gba(&formula, top); list leadIn; list cycle; DagNode* resultDag = gba.satSolve(leadIn, cycle) ? makeModel(propositions, leadIn, cycle) : falseTerm.getDag(); int nrStates = gba.getNrStates(); int nrFairnessSets = gba.getNrFairnessSets(); Verbose("SatSolverSymbol: Generalized Buchi automaton has " << nrStates << " state" << pluralize(nrStates) << " and " << nrFairnessSets << " fairness set" << pluralize(nrFairnessSets) << '.'); return context.builtInReplace(subject, resultDag); } DagNode* SatSolverSymbol::makeModel(const DagNodeSet& propositions, const list& leadIn, const list& cycle) const { static Vector args(2); args[0] = makeFormulaList(propositions, leadIn); args[1] = makeFormulaList(propositions, cycle); return modelSymbol->makeDagNode(args); } DagNode* SatSolverSymbol::makeFormulaList(const DagNodeSet& propositions, const list& bddList) const { static Vector args; args.contractTo(0); list::const_iterator e = bddList.end(); for (list::const_iterator i = bddList.begin(); i != e; ++i) args.append(makeFormula(propositions, *i)); int length = args.length(); if (length == 0) return nilFormulaListSymbol->makeDagNode(args); else if (length == 1) return args[0]; else return formulaListSymbol->makeDagNode(args); } DagNode* SatSolverSymbol::makeFormula(const DagNodeSet& propositions, const Bdd& formula) const { #ifdef TDEBUG BddUser::dump(cout, formula); cout << endl; #endif static Vector args; args.contractTo(0); Bdd pi = formula.extractPrimeImplicant(); #ifdef TDEBUG BddUser::dump(cout, pi); cout << endl; #endif Assert(pi != bdd_false(), "bad formula"); while (pi != bdd_true()) { int var = bdd_var(pi); Bdd lo = bdd_low(pi); if (lo == bdd_false()) { args.append(propositions.index2DagNode(var)); pi = bdd_high(pi); } else { Assert(bdd_high(pi) == bdd_false(), "bad formula"); args.append(negate(propositions.index2DagNode(var))); pi = lo; } } return conjunct(args); } maude-3.1/src/Higher/narrowingSequenceSearch3.cc0000644000175200017520000002747513730253051016627 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2017 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class NarrowingSequenceSearch3. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "higher.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" // variable class definitions #include "variableSymbol.hh" #include "variableDagNode.hh" // core class definitions #include "rewritingContext.hh" // higher class definitions #include "freshVariableGenerator.hh" #include "narrowingVariableInfo.hh" #include "narrowingSearchState3.hh" #include "variantSearch.hh" #include "narrowingSequenceSearch3.hh" NarrowingSequenceSearch3::NarrowingSequenceSearch3(RewritingContext* initial, SearchType searchType, DagNode* goal, int maxDepth, FreshVariableGenerator* freshVariableGenerator, int variantFlags) : initial(initial), goal(goal), maxDepth((searchType == ONE_STEP) ? 1 : maxDepth), needToTryInitialState(searchType == ANY_STEPS), normalFormNeeded(searchType == NORMAL_FORM), freshVariableGenerator(freshVariableGenerator), variantFlags(variantFlags), stateCollection(variantFlags & FOLD, variantFlags & KEEP_HISTORY) { incompleteFlag = false; unificationProblem = 0; stateBeingExpanded = 0; stateBeingExpandedIndex = NONE; stateBeingExpandedDepth = 0; expansionSuccessful = false; nextInterestingState = NONE; counter = 0; // // Index variables occurring in the initial term and create a fresh // #variable for each original variable and an accumulated substitution // that maps fresh original variables to fresh variables. // DagNode* dagToNarrow = initial->root(); dagToNarrow->indexVariables(initialVariableInfo, 0); int nrInitialVariables = initialVariableInfo.getNrVariables(); Substitution* accumulatedSubstitution = new Substitution(nrInitialVariables); for (int i = 0; i < nrInitialVariables; ++i) { Symbol* baseSymbol = initialVariableInfo.index2Variable(i)->symbol(); int name = freshVariableGenerator->getFreshVariableName(i, 0); VariableDagNode* v = new VariableDagNode(baseSymbol, name, i); accumulatedSubstitution->bind(i, v); } // // We also want to index goal variables so we can apply the accumulated // substitution, but we do not want to carry around the extra variables // since they cannot play a role in narrowing, as they don't occur in // the initial term. // goal->indexVariables(initialVariableInfo, 0); // // Reduction could lose variables. But initial variables will be protected // from garbage collection by initial RewritingContext, and goal only // variables will be protected by goal. // if (DagNode* renamedDagToNarrow = dagToNarrow->instantiate(*accumulatedSubstitution)) dagToNarrow = renamedDagToNarrow; RewritingContext* reduceContext = initial->makeSubcontext(dagToNarrow); reduceContext->reduce(); initial->transferCountFrom(*reduceContext); // // Create initial state in state collection. // (void) stateCollection.insertState(0, reduceContext->root(), -1); stateCollection.addAccumulatedSubstitution(0, 0, accumulatedSubstitution); delete reduceContext; // // Need to make internal symbol for variant unification with goal. // Symbol* goalSymbol = goal->symbol(); Module* module = goalSymbol->getModule(); ConnectedComponent* range = goal->symbol()->rangeComponent(); Vector domain(2); domain[0] = range; domain[1] = range; unificationPairSymbol = module->createInternalTupleSymbol(domain, range); } NarrowingSequenceSearch3::~NarrowingSequenceSearch3() { delete unificationProblem; delete stateBeingExpanded; delete freshVariableGenerator; delete initial; } bool NarrowingSequenceSearch3::findNextUnifier() { for (;;) { if (unificationProblem != 0) { bool moreUnifiers = unificationProblem->findNextUnifier(); initial->transferCountFrom(*(unificationProblem->getContext())); if (unificationProblem->isIncomplete()) incompleteFlag = true; if (moreUnifiers) { currentUnifier = &(unificationProblem->getCurrentUnifier(nrFreeVariablesInUnifier, variableFamilyInUnifier)); return true; } delete unificationProblem; unificationProblem = 0; } nextInterestingState = findNextInterestingState(); if (nextInterestingState == NONE) break; DagNode* stateDag; int variableFamily; Substitution* accumulatedSubstitution; stateCollection.getState(nextInterestingState, stateDag, variableFamily, accumulatedSubstitution); // // Because the goal dag might include some of the variables from the initial state // we need to instantiate it. // DagNode* instantiatedGoal; int nrInitialVariables = accumulatedSubstitution->nrFragileBindings(); int totalNrVariables = initialVariableInfo.getNrVariables(); if (totalNrVariables > nrInitialVariables) { // // Need to make a bigger substitution with extra variables zero'd out. // Substitution bigger(totalNrVariables); for (int i = 0; i < nrInitialVariables; ++i) bigger.bind(i, accumulatedSubstitution->value(i)); for (int i = nrInitialVariables; i < totalNrVariables; ++i) bigger.bind(i, 0); instantiatedGoal = goal.getNode()->instantiate(bigger); } else instantiatedGoal = goal.getNode()->instantiate(*accumulatedSubstitution); if (instantiatedGoal == 0) instantiatedGoal = goal.getNode(); // no change under instantiation // // Need to variant unify the narrrowed dag in this state with the goal dag. // Vector args(2); args[0] = instantiatedGoal; args[1] = stateDag; DagNode* pairDag = unificationPairSymbol->makeDagNode(args); RewritingContext* pairContext = initial->makeSubcontext(pairDag); const Vector dummy; unificationProblem = new VariantSearch(pairContext, // will be deleted by VariantSearch dummy, freshVariableGenerator, VariantSearch::UNIFICATION_MODE, variableFamily); } return false; } int NarrowingSequenceSearch3::findNextInterestingState() { if (needToTryInitialState) { // // Special case: return the initial state; only happens for =>* // needToTryInitialState = false; // don't do this again return 0; } if (stateBeingExpanded != 0) { tryToExpand: // // Try to get a descendant of the state being expanded. // for (;;) { bool success = stateBeingExpanded->findNextNarrowing(); initial->transferCountFrom(*(stateBeingExpanded->getContext())); if (stateBeingExpanded->isIncomplete()) incompleteFlag = true; if (!success) { delete stateBeingExpanded; stateBeingExpanded = 0; if (normalFormNeeded && !expansionSuccessful) { // // stateBeingExpanded was a normalForm. // return stateBeingExpandedIndex; } break; } if (normalFormNeeded && stateBeingExpandedDepth == maxDepth) { // // The new state will be at maxDepth + 1 so need not be considered. It's // enough to know that the parent state has a successor and thus isn't // in normal form. // delete stateBeingExpanded; stateBeingExpanded = 0; break; } expansionSuccessful = true; // stateBeingExpanded can't be a normal form // // Get the details fo the new state we reached. // DagNode* replacement; DagNode* replacementContext; DagNode* newState = stateBeingExpanded->getNarrowedDag(replacement, replacementContext); // // Do tracing if we care about it. // if (RewritingContext::getTraceStatus()) { RewritingContext* context = stateBeingExpanded->getContext(); context->traceNarrowingStep(stateBeingExpanded->getRule(), stateBeingExpanded->getReplacedDag(), replacement, &(stateBeingExpanded->getVariableInfo()), &(stateBeingExpanded->getUnifier()), newState); if (context->traceAbort()) return NONE; } initial->incrementNarrowingCount(); // // Reduce new state dag. // RewritingContext* reduceContext = initial->makeSubcontext(newState); replacementContextProtector.setNode(replacementContext); // protect replacementContext from GC during reduce() reduceContext->reduce(); // can call GC replacementContextProtector.setNode(0); // withdraw protection initial->transferCountFrom(*reduceContext); // // Does new state survive folding? // int newStateIndex = ++counter; bool survived = stateCollection.insertState(newStateIndex, reduceContext->root(), stateBeingExpandedIndex); delete reduceContext; if (survived) { stateCollection.addAccumulatedSubstitution(newStateIndex, stateBeingExpanded->getVariableFamily(), stateBeingExpanded->makeAccumulatedSubstitution()); if (stateCollection.keepingHistory()) { // // We rely on addHistory() to make copies of unifier // and variableInfo since originals will disappear in // due course. // stateCollection.addHistory(newStateIndex, stateBeingExpanded->getRule(), replacementContext, replacement, stateBeingExpanded->getUnifier(), stateBeingExpanded->getVariableInfo()); } if (!normalFormNeeded) return newStateIndex; } } } // // Need to find a new state to expand. // DagNode* nextState; Substitution* nextStateAccumulatedSubstitution; int nextStateVariableFamily; stateBeingExpandedIndex = stateCollection.getNextSurvivingState(nextState, nextStateAccumulatedSubstitution, nextStateVariableFamily, stateBeingExpandedDepth); //cout << "next surviving state is " << stateBeingExpandedIndex << endl; if (stateBeingExpandedIndex != NONE) { //cout << nextStateDepth << " : " << maxDepth << endl; // // If we are looking for normalForms, we only put states of depths <= maxDepth // in the stateCollection, and we need to expand states of maxDepth to check for // successors. // // If we are not looking for normalForms, we only spend states from // stateCollection that have depth < maxDepth. // // Note that in both cases we need to do equality checks rather than less-than // checks because we might have maxDepth = NONE to indicate no bound. // if (normalFormNeeded || stateBeingExpandedDepth != maxDepth) { //cout << "expanding state is " << stateBeingExpandedIndex << " : " << nextState << endl; RewritingContext* narrowingContext = initial->makeSubcontext(nextState); stateBeingExpanded = new NarrowingSearchState3(narrowingContext, nextStateAccumulatedSubstitution, freshVariableGenerator, nextStateVariableFamily, NarrowingSearchState3::ALLOW_NONEXEC | PositionState::RESPECT_FROZEN, 0, UNBOUNDED, variantFlags); expansionSuccessful = false; goto tryToExpand; } } return NONE; } maude-3.1/src/Higher/stateTransitionGraph.hh0000644000175200017520000000554113576050635016107 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2009 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for building a state transition graph on-the-fly, with hash consing. // #ifndef _stateTransitionGraph_hh_ #define _stateTransitionGraph_hh_ #include #include #include "hashConsSet.hh" #include "rewritingContext.hh" class StateTransitionGraph { NO_COPYING(StateTransitionGraph); public: typedef map > ArcMap; StateTransitionGraph(RewritingContext* initial); ~StateTransitionGraph(); int getNrStates() const; int getNextState(int stateNr, int index); DagNode* getStateDag(int stateNr) const; const ArcMap& getStateFwdArcs(int stateNr) const; // // Stuff needed for search. // RewritingContext* getContext(); void transferCountTo(RewritingContext& recipient); int getStateParent(int stateNr) const; private: struct State { State(int hashConsIndex, int parent); const int hashConsIndex; const int parent; Vector nextStates; RewriteSearchState* rewriteState; bool fullyExplored; ArcMap fwdArcs; }; void insertNewState(int parent); RewritingContext* initial; Vector seen; Vector hashCons2seen; // partial map of hashCons indices to state indices HashConsSet hashConsSet; }; inline StateTransitionGraph::State::State(int hashConsIndex, int parent) : hashConsIndex(hashConsIndex), parent(parent) { rewriteState = 0; fullyExplored = false; } inline int StateTransitionGraph::getNrStates() const { return seen.length(); } inline DagNode* StateTransitionGraph::getStateDag(int stateNr) const { return hashConsSet.getCanonical(seen[stateNr]->hashConsIndex); } inline const StateTransitionGraph::ArcMap& StateTransitionGraph::getStateFwdArcs(int stateNr) const { return seen[stateNr]->fwdArcs; } inline RewritingContext* StateTransitionGraph::getContext() { return initial; } inline void StateTransitionGraph::transferCountTo(RewritingContext& recipient) { recipient.transferCountFrom(*initial); } inline int StateTransitionGraph::getStateParent(int stateNr) const { return seen[stateNr]->parent; } #endif maude-3.1/src/Higher/variantSearch.hh0000755000175200017520000001364013736751513014527 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class to search for a complete set of variants from a given dag. // // It can also do variant unification, with UNIFICATION_MODE flag. // It can also do variant subsumption, with SUBSUMPTION_MODE flag. // It can also do variant MATCHING, with MATCH_MODE flag. // #ifndef _variantSearch_hh_ #define _variantSearch_hh_ #include #include "cacheableState.hh" #include "simpleRootContainer.hh" #include "narrowingVariableInfo.hh" #include "variantFolder.hh" #include "variantMatchingProblem.hh" class VariantSearch : public CacheableState, private SimpleRootContainer { NO_COPYING(VariantSearch); public: enum Flags { UNIFICATION_MODE = 0x0001, IRREDUNDANT_MODE = 0x0002, DELETE_FRESH_VARIABLE_GENERATOR = 0x0004, CHECK_VARIABLE_NAMES = 0x0008, SUBSUMPTION_MODE = 0x0010, MATCH_MODE = 0x0020, DELETE_LAST_VARIANT_MATCHING_PROBLEM = 0x0040 }; // // Initial dag is the root of context. This context should not go away nor should the // initial dag be rewritten in place while the VariantSearch object is in existence // because we rely in the variable dag nodes in the dag being protected from garbage // collection. This context is deleted on destruction. // // Blocker dags are protected from garbage collection. // // Fresh variable generator can optionally be deleted on destruction (for use in a // cached metalevel object). // VariantSearch(RewritingContext* context, const Vector& blockerDags, FreshVariableGenerator* freshVariableGenerator, int flags = DELETE_FRESH_VARIABLE_GENERATOR | CHECK_VARIABLE_NAMES, int incomingVariableFamily = NONE); ~VariantSearch(); bool problemOK() const; bool getIrredundantMode() const; const NarrowingVariableInfo& getVariableInfo() const; RewritingContext* getContext() const; bool isIncomplete() const; // // Only works in SUBSUMPTION_MODE // bool isSubsumed(DagNode* target) const; // // Only works in UNIFICATION_MODE // virtual bool findNextUnifier(); virtual const Vector& getCurrentUnifier(int& nrFreeVariables, int& variableFamily); // // Only works if not in SUBSUMPTION_MODE or UNIFICATION_MODE // const Vector* getNextVariant(int& nrFreeVariables, int& variableFamily, int& parentIndex, bool& moreInLayer); const Vector* getLastReturnedVariant(int& nrFreeVariables, int& variableFamily, int& parentIndex, bool& moreInLayer); bool findNextVariant(); const Vector& getCurrentVariant(int& nrFreeVariables, int& variableFamily, int* parentNumber = 0, bool* moreInLayer = 0); // // Only works in MATCH_MODE // VariantMatchingProblem* makeVariantMatchingProblem(RewritingContext* subject); VariantMatchingProblem* getLastVariantMatchingProblem() const; private: typedef map IntMap; typedef Vector VariantIndexVec; void markReachableNodes(); void expandLayer(); void expandVariant(const Vector& variant, int index); #ifdef DUMP void dumpVariant(const Vector& variant, int index, int parentIndex); #endif RewritingContext* const context; const Vector blockerDags; FreshVariableGenerator* const freshVariableGenerator; const int flags; const int firstVariableFamily; const int secondVariableFamily; DagNode* targetCopy; bool problemOkay; bool incompleteFlag; NarrowingVariableInfo variableInfo; int nrVariantVariables; VariantFolder variantCollection; VariantIndexVec frontier; VariantIndexVec newFrontier; int currentIndex; bool useFirstVariableFamily; int nrVariantsFound; IntMap internalIndexToExternalIndex; Vector protectedVariant; VariantMatchingProblem* lastVariantMatchingProblem; }; inline bool VariantSearch::problemOK() const { return problemOkay; } inline bool VariantSearch::getIrredundantMode() const { return flags & IRREDUNDANT_MODE; } inline const NarrowingVariableInfo& VariantSearch::getVariableInfo() const { return variableInfo; } inline RewritingContext* VariantSearch::getContext() const { return context; } inline bool VariantSearch::isIncomplete() const { return incompleteFlag; } inline const Vector& VariantSearch::getCurrentVariant(int& nrFreeVariables, int& variableFamily, int* parentNumber, bool* moreInLayer) { const Vector& variant = variantCollection.getCurrentVariant(nrFreeVariables, variableFamily, parentNumber, moreInLayer); // // Need to translate parentNumber to the external numbering scheme. // if (parentNumber) *parentNumber = (*parentNumber == NONE) ? NONE : internalIndexToExternalIndex[*parentNumber]; return variant; } inline VariantMatchingProblem* VariantSearch::makeVariantMatchingProblem(RewritingContext* subject) { lastVariantMatchingProblem = new VariantMatchingProblem(&variantCollection, subject, freshVariableGenerator); return lastVariantMatchingProblem; } inline VariantMatchingProblem* VariantSearch::getLastVariantMatchingProblem() const { return lastVariantMatchingProblem; } #endif maude-3.1/src/Higher/variantMatchingProblem.cc0000644000175200017520000001331113724604147016350 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class VariantMatchingProblem. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "variable.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "term.hh" #include "lhsAutomaton.hh" #include "subproblem.hh" // core class definitions #include "rewritingContext.hh" #include "subproblemAccumulator.hh" #include "variableInfo.hh" #include "freshVariableGenerator.hh" #include "narrowingVariableInfo.hh" // variable class definitions #include "variableDagNode.hh" // higher class definitions #include "variantFolder.hh" #include "variantMatchingProblem.hh" VariantMatchingProblem::VariantMatchingProblem(VariantFolder* pattern, RewritingContext* subject, FreshVariableGenerator* freshVariableGenerator) : pattern(pattern), subject(subject), freshVariableGenerator(freshVariableGenerator) { checkedVariablesInSubject = false; indexOfLastUsedVariant = -1; matcher = 0; subproblem = 0; currentVariant = 0; } VariantMatchingProblem::~VariantMatchingProblem() { delete matcher; delete subproblem; delete subject; } void VariantMatchingProblem::checkVariablesInSubject() { // // We examine any variables that appear in the subject. We're treating // them as constants but because we need fresh variables we need to worry // about any fresh variable names that appear here to avoid confusion. // NarrowingVariableInfo variableInfo; subject->root()->indexVariables(variableInfo, 0); int nrVariables = variableInfo.getNrVariables(); for (int i = 0; i < nrVariables; ++i) { int variableName = variableInfo.index2Variable(i)->id(); int index; int family; if (freshVariableGenerator->isFreshVariableName(variableName, index, family) && family == 0) { // // This is one of the # variables that we use so we must avoid it. // indicesToAvoid.insert(index); } } checkedVariablesInSubject = true; } void VariantMatchingProblem::markReachableNodes() { for (DagNode* i : currentMatcher) i->mark(); } bool VariantMatchingProblem::findNextMatcher() { if (subproblem != 0 && subproblem->solve(false, *matcher)) { // // We found another solution to the matching problem with the // last used variant. // } else { // // Delete any old results. // nextVariant: delete matcher; delete subproblem; matcher = 0; subproblem = 0; const VariableInfo* variableInfo; currentVariant = pattern->findNextVariantThatMatches(indexOfLastUsedVariant, subject->root(), variableInfo, matcher, subproblem); if (currentVariant == 0) return false; // no more variants match if (subproblem != 0 && !(subproblem->solve(true, *matcher))) goto nextVariant; // // Need to worry about unbound entries in matcher - should get fresh variables. // int nrFreeVariables = variableInfo->getNrRealVariables(); int variableIndex = 0; for (int i = 0; i < nrFreeVariables; ++i) { if (matcher->value(i) == 0) { // // We have a free variable in the variant substitution that did // not appear in the variant term, and hence did not get a value // when the variant term was matched against the subject. // This happens when we do variant narrowing with non-regular variant // equations such as: // eq X xor X = 0 . // Here whatever unified with X, including any variables it might // contain, will disappear from the new variant term. // We treat such variables as fresh variables. // We always use # family for such variables. // // We need to check what # variables appear in subject so we can // avoid them. // if (!checkedVariablesInSubject) checkVariablesInSubject(); Term* variableInVariantSubstitution = variableInfo->index2Variable(i); Symbol* variableSymbol = variableInVariantSubstitution->symbol(); // // Find a # variable that doesn't appear in the subject. // while (indicesToAvoid.find(variableIndex) != indicesToAvoid.end()) ++variableIndex; int freshName = freshVariableGenerator->getFreshVariableName(variableIndex, 0); ++variableIndex; VariableDagNode* v = new VariableDagNode(variableSymbol, freshName, i); matcher->bind(i, v); } } } // // Apply matcher to the current variant substitution to create the current variant matcher. // int nrPatternVariables = currentVariant->size() - 1; currentMatcher.resize(nrPatternVariables); for (int i = 0; i < nrPatternVariables; ++i) { DagNode* d = (*currentVariant)[i]; DagNode* inst = d->instantiate(*matcher); currentMatcher[i] = (inst == 0) ? d : inst; } return true; } maude-3.1/src/Higher/narrowingSequenceSearch3.hh0000644000175200017520000001335513730555244016642 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2017-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for breadth-first searching for sequences of narrowing steps using variant unification. // #ifndef _narrowingSequenceSearch3_hh_ #define _narrowingSequenceSearch3_hh_ #include "sequenceSearch.hh" #include "narrowingFolder.hh" #include "narrowingSearchState3.hh" #include "dagRoot.hh" class NarrowingSequenceSearch3 : public SequenceSearch { NO_COPYING(NarrowingSequenceSearch3); public: // // This extends VariantSearch::Flags and VariantUnificationProblem::Flags. // enum Flags { FOLD = 0x2000, KEEP_HISTORY = 0x4000, }; // // We take responsibility for protecting goal and deleting initial and freshVariableGenerator. // NarrowingSequenceSearch3(RewritingContext* initial, SearchType searchType, DagNode* goal, int maxDepth, FreshVariableGenerator* freshVariableGenerator, int variantFlags); ~NarrowingSequenceSearch3(); bool findNextUnifier(); // // This is the mapping between original variable names and slot numbers // in the various accumulated substitutions. It doesn't change. // const NarrowingVariableInfo& getInitialVariableInfo() const; // // Get information about current state. // void getStateInfo(DagNode*& stateDag, int& variableFamily, Substitution*& accumulatedSubstitution) const; void getExtraStateInfo(int& index, int& depth) const; // // Get information about some state in the history. // void getHistory(int index, DagNode*& root, DagNode*& position, Rule*& rule, const Substitution*& unifier, const NarrowingVariableInfo*& unifierVariableInfo, int& variableFamily, DagNode*& newDag, const Substitution*& accumulatedSubstitution, int& parentIndex) const; // // Get information about the current variant unifier between the current state and the (instantiated) goal. // const Vector* getUnifier() const; int getUnifierVariableFamily() const; const NarrowingVariableInfo& getUnifierVariableInfo() const; RewritingContext* getContext() const; bool isIncomplete() const; private: int findNextInterestingState(); bool findNextNormalForm(); // // Initial stuff. // RewritingContext* initial; DagRoot goal; const int maxDepth; bool needToTryInitialState; const bool normalFormNeeded; FreshVariableGenerator* freshVariableGenerator; const int variantFlags; NarrowingFolder stateCollection; // // Maps variables occurring in initial state which will be the // from variables for the accumulated substitution. // NarrowingVariableInfo initialVariableInfo; // // Pairing symbol for variant unification of state vs pattern. // Symbol* unificationPairSymbol; // // State of search. // NarrowingSearchState3* stateBeingExpanded; int stateBeingExpandedIndex; int stateBeingExpandedDepth; bool expansionSuccessful; int nextInterestingState; int counter; DagRoot replacementContextProtector; // to protect replacementContext during reduce() // // Final variant unification between goal and state. // VariantSearch* unificationProblem; const Vector* currentUnifier; int nrFreeVariablesInUnifier; int variableFamilyInUnifier; bool incompleteFlag; }; inline const Vector* NarrowingSequenceSearch3::getUnifier() const { return currentUnifier; } inline const NarrowingVariableInfo& NarrowingSequenceSearch3::getUnifierVariableInfo() const { return unificationProblem->getVariableInfo(); } inline const NarrowingVariableInfo& NarrowingSequenceSearch3::getInitialVariableInfo() const { return initialVariableInfo; } inline void NarrowingSequenceSearch3::getStateInfo(DagNode*& stateDag, int& variableFamily, Substitution*& accumulatedSubstitution) const { stateCollection.getState(nextInterestingState, stateDag, variableFamily, accumulatedSubstitution); } inline void NarrowingSequenceSearch3::getExtraStateInfo(int& index, int& depth) const { index = nextInterestingState; depth = stateCollection.getDepth(nextInterestingState); } inline void NarrowingSequenceSearch3::getHistory(int index, DagNode*& root, DagNode*& position, Rule*& rule, const Substitution*& unifier, const NarrowingVariableInfo*& unifierVariableInfo, int& variableFamily, DagNode*& newDag, const Substitution*& accumulatedSubstitution, int& parentIndex) const { stateCollection.getHistory(index, root, position, rule, unifier, unifierVariableInfo, variableFamily, newDag, accumulatedSubstitution, parentIndex); } inline int NarrowingSequenceSearch3::getUnifierVariableFamily() const { return variableFamilyInUnifier; } inline RewritingContext* NarrowingSequenceSearch3::getContext() const { return initial; } inline bool NarrowingSequenceSearch3::isIncomplete() const { // // Returns true if any incompleteness has been encountered so far. // return incompleteFlag; } #endif maude-3.1/src/Higher/positionState.cc0000644000175200017520000001253713576050735014571 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class PositionState. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "extensionInfo.hh" #include "substitution.hh" // core class definitions #include "positionState.hh" PositionState::PositionState(DagNode* top, int flags, int minDepth, int maxDepth) : flags(flags), minDepth(minDepth), maxDepth(maxDepth) { Assert(!(flags & SET_UNSTACKABLE) || (flags & RESPECT_FROZEN), "can't set unstackable if not respecting frozen"); positionQueue.append(RedexPosition(top, UNDEFINED, UNDEFINED, true)); depth.append(0); extensionInfo = 0; extensionInfoValid = true; // in case maxDepth = -1 for no extension nextToReturn = -1; nextToExplore = -1; } PositionState::~PositionState() { delete extensionInfo; } local_inline bool PositionState::exploreNextPosition() { int finish = positionQueue.length(); for(;;) { if (++nextToExplore >= finish) return false; int ourDepth = depth[nextToExplore]; if (ourDepth >= maxDepth) return false; const RedexPosition& rp = positionQueue[nextToExplore]; DagNode* d = rp.node(); // // We only consider repeated arguments once, where supported by // theory. // d->symbol()->stackPhysicalArguments(d, positionQueue, nextToExplore, flags & RESPECT_FROZEN, rp.isEager()); int newFinish = positionQueue.length(); if (finish < newFinish) { ++ourDepth; depth.expandTo(newFinish); for (; finish < newFinish; finish++) depth[finish] = ourDepth; break; } else { // // d didn't stack any arguments - check if we should make it // unstackable. // if ((flags & SET_UNSTACKABLE) && d->isUnrewritable()) d->setUnstackable(); } } return true; } bool PositionState::findNextPosition() { do { if (++nextToReturn >= positionQueue.length() && !exploreNextPosition()) return false; } while (depth[nextToReturn] < minDepth); if (maxDepth >= 0) { delete extensionInfo; extensionInfo = 0; // // Force makeExtensionInfo() if getExtensionInfo() called. // extensionInfoValid = false; } return true; } PositionState::DagPair PositionState::rebuildDag(DagNode* replacement, ExtensionInfo* extInfo, PositionIndex index) const { // // Extend the replacement term if needed. // if (extInfo != 0 && !(extInfo->matchedWhole())) replacement = positionQueue[index].node()->partialConstruct(replacement, extInfo); // // Walk up the stack rebuilding. // DagNode* newDag = replacement; int argIndex = positionQueue[index].argIndex(); for (PositionIndex i = positionQueue[index].parentIndex(); i != UNDEFINED;) { const RedexPosition& rp = positionQueue[i]; newDag = rp.node()->copyWithReplacement(argIndex, newDag); argIndex = rp.argIndex(); i = rp.parentIndex(); } // // We return the rebuilt dag, and the extended replacement term since the caller may // need the latter for tracing purposes. // return DagPair(newDag, replacement); } DagNode* PositionState::rebuildAndInstantiateDag(DagNode* replacement, Substitution& substitution, int firstVariable, int lastVariable, PositionIndex index) const { // // We don't support extension for narrowing. // Assert(extensionInfo == 0 || extensionInfo->matchedWhole(), "Extension not supported"); // // Walk up the stack rebuilding. // DagNode* newDag = replacement; if (index == DEFAULT) index = nextToReturn; int argIndex = positionQueue[index].argIndex(); PositionIndex i = positionQueue[index].parentIndex(); if (i != UNDEFINED) { // // Make eager copies of bindings we will use to avoid sharing dags that // might rewrite between eager and lazy positions. // Vector eagerCopies(lastVariable + 1); for (int j = firstVariable; j <= lastVariable; ++j) eagerCopies[j] = substitution.value(j)->copyEagerUptoReduced(); for (int j = firstVariable; j <= lastVariable; ++j) substitution.value(j)->clearCopyPointers(); while (i != UNDEFINED) { const RedexPosition& rp = positionQueue[i]; const Vector* bindings = rp.isEager() ? &eagerCopies : 0; newDag = rp.node()->instantiateWithReplacement(substitution, bindings, argIndex, newDag); argIndex = rp.argIndex(); i = rp.parentIndex(); } } // // We return the rebuilt dag. // return newDag; } maude-3.1/src/Higher/unifierFilter.hh0000644000175200017520000000505713706731173014541 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2016-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for filtering unifiers, keeping a minimal set that are most general on a range // of variables: // firstInterestingVariable,..., firstInterestingVariable + nrInterestingVariables -1 // #ifndef _unifierFilter_hh_ #define _unifierFilter_hh_ #include #include "simpleRootContainer.hh" #include "substitution.hh" class UnifierFilter : private SimpleRootContainer { NO_COPYING(UnifierFilter); public: UnifierFilter(int firstInterestingVariable, int nrInterestingVariables); ~UnifierFilter(); // // posistionIndex and equationIndex are just opaque integers that are // stored along side the unifier. The names suggest the way they are used // during variantNarrowing but the caller can use them to store other // information if desired. // void insertUnifier(const Substitution& unifier, int positionIndex = 0, int equationIndex = 0); bool getNextSurvivingUnifier(Substitution*& unifier, int& positionIndex, int& equationIndex); private: struct RetainedUnifier { RetainedUnifier(const Substitution& original, int firstInterestingVariable, int nrInterestingVariables); ~RetainedUnifier(); Substitution unifier; Vector interestingBindings; Vector matchingAutomata; int nrVariablesInBindings; int positionIndex; int equationIndex; }; typedef list RetainedUnifierList; void markReachableNodes(); bool subsumes(const RetainedUnifier* retainedUnifier, const Substitution& unifier); const int firstInterestingVariable; const int nrInterestingVariables; RetainedUnifierList mostGeneralSoFar; // on interestingVariables; bool startedExtractingUnifiers; RetainedUnifierList::const_iterator nextUnifier; }; #endif maude-3.1/src/Higher/temporalSymbol.hh0000644000175200017520000000402213576050635014734 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Abstract base class for symbols that need to manipulate LTL formulae. // #ifndef _temporalSymbol_hh_ #define _temporalSymbol_hh_ #include "freeSymbol.hh" #include "dagNodeSet.hh" #include "bddUser.hh" class TemporalSymbol : public FreeSymbol { NO_COPYING(TemporalSymbol); public: TemporalSymbol(int id, int arity); bool attachSymbol(const char* purpose, Symbol* symbol); void copyAttachments(Symbol* original, SymbolMap* map); void getSymbolAttachments(Vector& purposes, Vector& symbols); protected: int build(LogicFormula& formula, DagNodeSet& propositions, DagNode* dagNode) const; // DagNode* formula2Dag(Bdd formula, DagNodeSet& propositions) const; DagNode* negate(DagNode* original) const; DagNode* conjunct(Vector& args) const; private: // // Symbols needed for LTL formulae. // Symbol* trueSymbol; Symbol* falseSymbol; Symbol* notSymbol; Symbol* nextSymbol; Symbol* andSymbol; Symbol* orSymbol; Symbol* untilSymbol; Symbol* releaseSymbol; }; inline DagNode* TemporalSymbol::negate(DagNode* original) const { static Vector arg(1); arg[0] = original; return notSymbol->makeDagNode(arg); } #endif maude-3.1/src/Higher/searchState.cc0000644000175200017520000001000213576050735014153 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class SearchState. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "subproblem.hh" // core class definitions #include "rewritingContext.hh" #include "lhsAutomaton.hh" #include "preEquation.hh" #include "conditionState.hh" #include "dagRoot.hh" #include "searchState.hh" local_inline bool SearchState::hasCondition(const PreEquation* preEqn) { // // First test most likely to fail so we do it first. // return preEqn->hasCondition() && !(getFlags() & IGNORE_CONDITION); } SearchState::SearchState(RewritingContext* context, int flags, int minDepth, int maxDepth) : PositionState(context->root(), flags, minDepth, maxDepth), context(context) { matchingSubproblem = 0; } SearchState::~SearchState() { // // Delete stuff we created. // while (!conditionStack.empty()) { delete conditionStack.top(); conditionStack.pop(); } delete matchingSubproblem; // // Delete stuff entrusted to us by our creator. // if (getFlags() & GC_SUBSTITUTION) { int nrUserVars = substVariables.length(); for (int i = 0; i < nrUserVars; i++) { substVariables[i]->deepSelfDestruct(); delete substValues[i]; } } if (getFlags() & GC_CONTEXT) delete context; } bool SearchState::findFirstSolution(const PreEquation* preEqn, LhsAutomaton* automaton) { delete matchingSubproblem; matchingSubproblem = 0; DagNode* subject = getDagNode(); // // If we're searching with nonzero maxDepth it is reasonable for pattern // and subject to be in different components. // if (preEqn->getLhs()->getComponent() == subject->symbol()->rangeComponent()) { context->clear(preEqn->getNrProtectedVariables()); if (initSubstitution(*preEqn) && automaton->match(subject, *context, matchingSubproblem, getExtensionInfo()) && (matchingSubproblem == 0 || matchingSubproblem->solve(true, *context)) && (!hasCondition(preEqn) || preEqn->checkCondition(true, subject, *context, matchingSubproblem, trialRef, conditionStack))) { preEquation = preEqn; return true; } } return false; } bool SearchState::findNextSolution() { if (hasCondition(preEquation)) { return preEquation->checkCondition(false, getDagNode(), *context, matchingSubproblem, trialRef, conditionStack); } else return matchingSubproblem != 0 && matchingSubproblem->solve(false, *context); } bool SearchState::initSubstitution(const VariableInfo& varInfo) { if (substVariables.length() == 0) return varInfo.getUnboundVariables().empty(); int nrUserVars = substVariables.length(); int nrVars = varInfo.getNrRealVariables(); NatSet bound; for (int i = 0; i < nrUserVars; i++) { Term* userVar = substVariables[i]; for (int j = 0; j < nrVars; j++) { if (userVar->equal(varInfo.index2Variable(j))) { context->bind(j, substValues[i]->getNode()); bound.insert(j); break; } } } return bound.contains(varInfo.getUnboundVariables()); } maude-3.1/src/Higher/narrowingSearchState2.cc0000644000175200017520000002725413730306331016131 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class NarrowingSearchState2. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "variable.hh" #include "higher.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" // core class definitions #include "rewritingContext.hh" #include "rhsAutomaton.hh" #include "rule.hh" #include "freshVariableGenerator.hh" // variable class definitions #include "variableDagNode.hh" // higher class definitions #include "variantUnificationProblem.hh" #include "narrowingSearchState2.hh" bool NarrowingSearchState2::allVariablesBelongToIncomingFamily() { int nrVariables = variableInfo.getNrVariables(); for (int i = 0; i < nrVariables; ++i) { VariableDagNode* v = variableInfo.index2Variable(i); if (!freshVariableGenerator->belongsToFamily(v->id(), incomingVariableFamily)) return false; } return true; } NarrowingSearchState2::NarrowingSearchState2(RewritingContext* context, const Vector& blockerDagsArg, FreshVariableGenerator* freshVariableGenerator, int incomingVariableFamily, int flags, int minDepth, int maxDepth, int variantFlags) : context(context), blockerDags(blockerDagsArg), // shallow copy freshVariableGenerator(freshVariableGenerator), incomingVariableFamily(incomingVariableFamily), variantFlags(variantFlags), module(context->root()->symbol()->getModule()) { //DebugAlways("variantFlags = " << variantFlags); ruleIndex = -1; // not yet started incompleteFlag = false; unificationProblem = 0; reverseMapping = 0; DagNode* dagToNarrow = context->root(); newContext = context; // unless we do a renaming // // Each variable occurring in the target dag needs an index // different from any that occurs in a variable occurring in a // rule lhs. // // Indexing the variables will convert any persistent representations into // regular representations suitable for unification and instantiation. // int firstTargetSlot = module->getMinimumSubstitutionSize(); dagToNarrow->indexVariables(variableInfo, firstTargetSlot); int nrVariablesInDagToNarrow = variableInfo.getNrVariables(); // // We also index variables in blockerDags. // int nrBlockerDags = blockerDags.size(); for (int i = 0; i < nrBlockerDags; ++i) blockerDags[i]->indexVariables(variableInfo, firstTargetSlot); if (!allVariablesBelongToIncomingFamily()) { // // We saw at least one variable that didn't belong to incomingVariableFamily. // We need to do a full renaming for safety, since those other variables may // occur in a rule used for narrowing. // // This renaming will preserve the slots we just assigned by indexVariables. // We also need to build freshVariableInfo so VariantUnificationProblem // will be able to recover slots from just the fresh variable names. // // We also build a substitution, reverseMapping, that takes us from slots to // the original variables names, so we can build a replacement context using // original variable names. // int nrVariables = variableInfo.getNrVariables(); int nrSlots = firstTargetSlot + nrVariables; Substitution s(nrSlots); // // We only build a reverse mapping for variables that actually occur in the dag // we're going to narrow; variables that only occur in blocker dags don't count. // int nrSlotsForDagToNarrow = firstTargetSlot + nrVariablesInDagToNarrow; reverseMapping = new Substitution(nrSlotsForDagToNarrow); reverseMapping->clear(nrSlotsForDagToNarrow); // // Make a renaming for each variable. // for (int i = 0; i < nrVariables; ++i) { int slotNr = firstTargetSlot + i; Symbol* baseSymbol = variableInfo.index2Variable(i)->symbol(); int name = freshVariableGenerator->getFreshVariableName(i, incomingVariableFamily); VariableDagNode* v = new VariableDagNode(baseSymbol, name, slotNr); s.bind(slotNr, v); if (i < nrVariablesInDagToNarrow) { // // We only track variables that appear in the dag we're going to narrow // even though all variables need to be renamed. // reverseMapping->bind(slotNr, variableInfo.index2Variable(i)); DebugSave(j, freshVariableInfo.variable2Index(v)); Assert(j == i, "indexing clash " << i << " vs " << j); } } // // Make a copy of the dag we want to narrow, with variable replacements. // DebugAdvisory("old dagToNarrow = " << dagToNarrow); if (DagNode* renamedDagToNarrow = dagToNarrow->instantiate(s)) // just in case dagToNarrow was ground dagToNarrow = renamedDagToNarrow; DebugAdvisory("new dagToNarrow = " << dagToNarrow); newContext = context->makeSubcontext(dagToNarrow); // // Likewise renaming variables in blockerDags. // for (int i = 0; i < nrBlockerDags; ++i) { if (DagNode* b = blockerDags[i]->instantiate(s)) blockerDags[i] = b; } } // // Forget any variables that only occur in blocker dags. // This avoids generating bindings for variables that don't occur in the dag // we're going to narrow. It also means that the caller won't see these in // getVariableInfo(). // variableInfo.forgetAllBut(nrVariablesInDagToNarrow); // // Make a PositionState object to traverse it. // positionState = new PositionState(dagToNarrow, flags, minDepth, maxDepth); } NarrowingSearchState2::~NarrowingSearchState2() { bool gcVarGen = positionState->getFlags() & GC_VAR_GEN; // // Stuff we created. // delete reverseMapping; delete unificationProblem; delete positionState; if (newContext != context) delete newContext; // // Stuff we took responsibility for deleting. // if (gcVarGen) delete freshVariableGenerator; delete context; } void NarrowingSearchState2::markReachableNodes() { // // Protect blocker dags; don't rely on VariantSearch object within // any particular VariantUnificationProblem. // for (DagNode* d : blockerDags) d->mark(); } bool NarrowingSearchState2::findNextNarrowing() { if (ruleIndex > -1) { // // Already underway; check for another unifier between the current position and // with the current rule. // bool nextUnifier = unificationProblem->findNextUnifier(); if (context != newContext) context->transferCountFrom(*newContext); if (nextUnifier) return true; // need to make substitution from variant unifier incompleteFlag |= unificationProblem->isIncomplete(); delete unificationProblem; } else { // // First call - find an initial position. // if (!(positionState->findNextPosition())) return false; } // // Move to the next rule. // ++ruleIndex; // // Check if we are allowed to use nonexecutable rules. A nonexecutable rule may have // unbound variables in the rhs which we will bind to fresh variables. // bool allowNonexec = positionState->getFlags() & ALLOW_NONEXEC; // // Check whether we should use the original variableInfo or the congruent one // we created with fresh variables. // const NarrowingVariableInfo& varInfo = (freshVariableInfo.getNrVariables() == 0) ? variableInfo : freshVariableInfo; // // Look at all positions (respecting depth bounds and, depending on flags, frozenness) // in state dag. // do { DagNode* d = positionState->getDagNode(); DebugAdvisory("trying to narrow at " << d); if (dynamic_cast(d) == 0) // only consider non-variable positions { ConnectedComponent* kind = d->symbol()->rangeComponent(); // // Look at all rules with the correct kind; since we are using variant // unification, we can't easily know in advance which rule lhs might unify. // const Vector& rules = module->getRules(); for (int nrRules = rules.length(); ruleIndex < nrRules; ruleIndex++) { Rule* rl = rules[ruleIndex]; if (!(rl->hasCondition()) && // we don't attempt narrowing with conditional rules (allowNonexec || !(rl->isNonexec())) && // check executability rl->isNarrowing() && // check narrowing attribute rl->getLhs()->symbol()->rangeComponent() == kind) // check kind { DebugAdvisory("trying rule " << ruleIndex << " " << rl << " at " << d); unificationProblem = new VariantUnificationProblem(newContext, blockerDags, rl, d, varInfo, freshVariableGenerator, incomingVariableFamily, variantFlags); bool nextUnifier = unificationProblem->findNextUnifier(); if (context != newContext) context->transferCountFrom(*newContext); if (nextUnifier) return true; incompleteFlag |= unificationProblem->isIncomplete(); delete unificationProblem; } } } ruleIndex = 0; } while (positionState->findNextPosition()); unificationProblem = 0; return false; } DagNode* NarrowingSearchState2::getNarrowedDag(DagNode*& replacement, DagNode*& replacementContext) const { Rule* r = getRule(); Substitution& s = unificationProblem->getSolution(); replacement = r->getRhsBuilder().construct(s); // // It's possible r could have a bare rhs and thus replacement could be a dagNode // that is the binding of variable that appears in the larger dag being narrowed. // Thus we might have replacement appearing multiple times in the larger narrowed dag. // This would screw up context generation, which relies on a unique DagNode* marking // the hole. Thus for safety we make a clone and use that. // replacement = replacement->makeClone(); // // Need to clear unused entries in solution that we may have touched during rhs build // to avoid confusing unification algorithm. // int nrSlots = module->getMinimumSubstitutionSize(); for (int i = r->getNrProtectedVariables(); i < nrSlots; ++i) s.bind(i,0); // // In order to return the context at when the narrowing happened we need to // make a copy of the original dag, with the replacement clone at the location of the // narrowing. // // One complexity is we may have renamed the variables in the dag we actually traversed // in order to avoid variable clashes. If that happened, we use the reverseMapping // to renaming them back when we rebuild the context. // replacementContext = reverseMapping ? positionState->rebuildAndInstantiateDag(replacement, *reverseMapping, nrSlots, nrSlots + variableInfo.getNrVariables() - 1) : positionState->rebuildDag(replacement).first; // // Finally we compute the actual dag created by the narrowing step by rebuilding // using the unifier. // return positionState->rebuildAndInstantiateDag(replacement, s, nrSlots, nrSlots + variableInfo.getNrVariables() - 1); } maude-3.1/src/Higher/variantMatchingProblem.hh0000644000175200017520000000423013724603535016362 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for variant matching, given that a complete set of folded // variants for the pattern has already been computed. // #ifndef _variantMatchingProblem_hh_ #define _variantMatchingProblem_hh_ #include #include "simpleRootContainer.hh" class VariantMatchingProblem : private SimpleRootContainer { public: // // VariantMatchingProblem takes responsibility for deleting subject // on destruction. // VariantMatchingProblem(VariantFolder* pattern, RewritingContext* subject, FreshVariableGenerator* freshVariableGenerator); ~VariantMatchingProblem(); bool findNextMatcher(); const Vector& getCurrentMatcher() const; bool freshVariablesNeeded() const; private: void markReachableNodes(); void checkVariablesInSubject(); VariantFolder* const pattern; RewritingContext* const subject; FreshVariableGenerator* const freshVariableGenerator; set indicesToAvoid; bool checkedVariablesInSubject; int indexOfLastUsedVariant; RewritingContext* matcher; Subproblem* subproblem; const Vector* currentVariant; Vector currentMatcher; }; inline const Vector& VariantMatchingProblem::getCurrentMatcher() const { return currentMatcher; } inline bool VariantMatchingProblem::freshVariablesNeeded() const { return checkedVariablesInSubject; } #endif maude-3.1/src/Higher/narrowingSearchState3.cc0000644000175200017520000001664113730244544016137 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2017-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class NarrowingSearchState3. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "variable.hh" #include "higher.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" // core class definitions #include "rewritingContext.hh" #include "rhsAutomaton.hh" #include "rule.hh" #include "freshVariableGenerator.hh" // variable class definitions #include "variableDagNode.hh" // higher class definitions #include "variantUnificationProblem.hh" #include "narrowingSearchState3.hh" NarrowingSearchState3::NarrowingSearchState3(RewritingContext* context, Substitution* accumulatedSubstitution, FreshVariableGenerator* freshVariableGenerator, int incomingVariableFamily, int flags, int minDepth, int maxDepth, int variantFlags) : PositionState(context->root(), flags, minDepth, maxDepth), context(context), accumulatedSubstitution(accumulatedSubstitution), freshVariableGenerator(freshVariableGenerator), incomingVariableFamily(incomingVariableFamily), variantFlags(variantFlags), module(context->root()->symbol()->getModule()) { ruleIndex = -1; // not yet started incompleteFlag = false; unificationProblem = 0; // // Need to index the dag we're narrowing and the bindings // in the accumulated substitution using a common scheme since // the variant unifiers we find are going to be accumulated. // The indices must start above those used by statements in the module. // DagNode* dagToNarrow = context->root(); int firstTargetSlot = module->getMinimumSubstitutionSize(); dagToNarrow->indexVariables(variableInfo, firstTargetSlot); int nrBindings = accumulatedSubstitution->nrFragileBindings(); for (int i = 0; i < nrBindings; ++i) accumulatedSubstitution->value(i)->indexVariables(variableInfo, firstTargetSlot); } NarrowingSearchState3:: ~NarrowingSearchState3() { delete unificationProblem; if (getFlags() & GC_VAR_GEN) delete freshVariableGenerator; delete context; } bool NarrowingSearchState3::findNextNarrowing() { if (ruleIndex > -1) { // // Already underway; check for another unifier between the current position and // with the current rule. // bool nextUnifier = unificationProblem->findNextUnifier(); if (nextUnifier) return true; // need to make substitution from variant unifier incompleteFlag |= unificationProblem->isIncomplete(); delete unificationProblem; } else { // // First call - find an initial position. // if (!(findNextPosition())) return false; } // // Move to the next rule, at current position; if we are forced to move to another // position we will start again at 0. // ++ruleIndex; // // Check if we are allowed to use nonexecutable rules. A nonexecutable rule may have // unbound variables in the rhs which we will bind to fresh variables. // bool allowNonexec = getFlags() & ALLOW_NONEXEC; // // Look at all positions (respecting depth bounds and, depending on flags, frozenness) in state dag. // do { DagNode* d = getDagNode(); DebugAdvisory("trying to narrow at " << d); if (dynamic_cast(d) == 0) // only consider non-variable positions { ConnectedComponent* kind = d->symbol()->rangeComponent(); // // Look at all rules with the correct kind; since we are using variant unification, we can't // easily know in advance which rule lhs might unify with. // const Vector& rules = module->getRules(); for (int nrRules = rules.length(); ruleIndex < nrRules; ++ruleIndex) { Rule* rl = rules[ruleIndex]; if (!(rl->hasCondition()) && // we don't attempt narrowing with conditional rules (allowNonexec || !(rl->isNonexec())) && // check executability rl->isNarrowing() && // check narrowing attribute rl->getLhs()->symbol()->rangeComponent() == kind) // check kind { DebugAdvisory("trying rule " << ruleIndex << " " << rl << " at " << d); unificationProblem = new VariantUnificationProblem(context, blockerDags, rl, d, variableInfo, freshVariableGenerator, incomingVariableFamily, variantFlags); bool nextUnifier = unificationProblem->findNextUnifier(); if (nextUnifier) return true; incompleteFlag |= unificationProblem->isIncomplete(); delete unificationProblem; } } } ruleIndex = 0; } while (findNextPosition()); unificationProblem = 0; return false; } DagNode* NarrowingSearchState3::getNarrowedDag(DagNode*& replacement, DagNode*& replacementContext) const { Rule* r = getRule(); Substitution& s = unificationProblem->getSolution(); replacement = r->getRhsBuilder().construct(s); // // It's possible r could have a bare rhs and thus replacement could be a dagNode // that is the binding of variable that appears in the larger dag being narrowed. // Thus we might have replacement appearing multiple times in the larger narrowed dag. // This would screw up context generation, which relies on a unique DagNode* marking // the hole. Thus for safety we make a clone and use that. // replacement = replacement->makeClone(); // // Need to clear unused entries in solution that we may have touched during rhs build // to avoid confusing unification algorithm. // int nrSlots = module->getMinimumSubstitutionSize(); for (int i = r->getNrProtectedVariables(); i < nrSlots; ++i) s.bind(i,0); // // In order to return the context at when the narrowing happened we need to // make a copy of the original dag, with the replacement clone at the location of the // narrowing. // replacementContext = rebuildDag(replacement).first; // // Finally we compute the actual dag created by the narrowing step by rebuilding // using the unifier. // return rebuildAndInstantiateDag(replacement, s, nrSlots, nrSlots + variableInfo.getNrVariables() - 1); } Substitution* NarrowingSearchState3::makeAccumulatedSubstitution() { int nrBindings = accumulatedSubstitution->nrFragileBindings(); Substitution* newAccumulatedSubstitution = new Substitution(nrBindings); Substitution& s = unificationProblem->getSolution(); for (int i = 0; i < nrBindings; ++i) { DagNode* oldBinding = accumulatedSubstitution->value(i); DagNode* newBinding = oldBinding->instantiate(s); newAccumulatedSubstitution->bind(i, (newBinding == 0) ? oldBinding : newBinding); } return newAccumulatedSubstitution; } maude-3.1/src/Higher/satSolverSymbol.hh0000644000175200017520000000446713576050635015110 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for symbols for built in LTL satisfiability solving. // #ifndef _satSolverSymbol_hh_ #define _satSolverSymbol_hh_ #include "temporalSymbol.hh" #include "cachedDag.hh" class SatSolverSymbol : public TemporalSymbol { NO_COPYING(SatSolverSymbol); public: SatSolverSymbol(int id); bool attachData(const Vector& opDeclaration, const char* purpose, const Vector& data); bool attachSymbol(const char* purpose, Symbol* symbol); bool attachTerm(const char* purpose, Term* term); void copyAttachments(Symbol* original, SymbolMap* map); void getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data); void getSymbolAttachments(Vector& purposes, Vector& symbols); void getTermAttachments(Vector& purposes, Vector& terms); bool eqRewrite(DagNode* subject, RewritingContext& context); void postInterSymbolPass(); void reset(); private: DagNode* makeModel(const DagNodeSet& propositions, const list& leadIn, const list& cycle) const; DagNode* makeFormulaList(const DagNodeSet& propositions, const list& bddList) const; DagNode* makeFormula(const DagNodeSet& propositions, const Bdd& formula) const; // // Symbols needed for returning models. // Symbol* formulaListSymbol; Symbol* nilFormulaListSymbol; Symbol* modelSymbol; CachedDag falseTerm; }; #endif maude-3.1/src/Higher/irredundantUnificationProblem.cc0000644000175200017520000000666413710444007017746 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class IrredundantUnificationProblem. // // utility stuff #include "macros.hh" #include "vector.hh" #include "allSat.hh" #include "bddUser.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "higher.hh" // interface class definitions #include "dagNode.hh" // core class definitions #include "rewritingContext.hh" // higher class definitions #include "unifierFilter.hh" #include "irredundantUnificationProblem.hh" IrredundantUnificationProblem::IrredundantUnificationProblem(Vector& lhs, Vector& rhs, FreshVariableGenerator* freshVariableGenerator, int incomingVariableFamily) : UnificationProblem(lhs, rhs, freshVariableGenerator, incomingVariableFamily) { unifierFilter = 0; } IrredundantUnificationProblem::~IrredundantUnificationProblem() { delete unifierFilter; } /* void IrredundantUnificationProblem::markReachableNodes() { int nrFragile = currentUnifier->nrFragileBindings(); for (int i = 0; i < nrFragile; i++) { DagNode* d = currentUnifier->value(i); if (d != 0) d->mark(); } // // Must mark nodes in base class. // UnificationProblem::markReachableNodes(); } */ bool IrredundantUnificationProblem::findNextUnifier() { if (unifierFilter == 0) { if (UnificationProblem::findNextUnifier()) { int nrOriginalVariables = getVariableInfo().getNrRealVariables(); unifierFilter = new UnifierFilter(0, nrOriginalVariables - 1); // // We need a RewritingContext& to call computeTrueSort() even // though we're not able to deal with sort constraints. // RewritingContext dummyContext; do { const Substitution& unifier = UnificationProblem::getSolution(); int nrFreeVariables = UnificationProblem::getNrFreeVariables(); // // UnifierFilter expects all bindings to have their // all their sorts computed so we can match them. // for (int i = 0; i < nrOriginalVariables; ++i) unifier.value(i)->computeTrueSort(dummyContext); unifierFilter->insertUnifier(unifier, nrFreeVariables); } while (UnificationProblem::findNextUnifier()); } else return false; } // // UnifierFilter stores two ints along with each unifier but we're only using // the first one to hold the number of free variables. // int dummy; return unifierFilter->getNextSurvivingUnifier(currentUnifier, nrFreeVariables, dummy); } const Substitution& IrredundantUnificationProblem::getSolution() const { return *currentUnifier; } int IrredundantUnificationProblem::getNrFreeVariables() const { return nrFreeVariables; } maude-3.1/src/Higher/narrowingUnificationProblem.cc0000755000175200017520000004304713726575047017454 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class NarrowingUnificationProblem. // // utility stuff #include "macros.hh" #include "vector.hh" #include "allSat.hh" #include "bddUser.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "variable.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "extensionInfo.hh" // core class definitions #include "module.hh" #include "sortBdds.hh" #include "connectedComponent.hh" #include "unificationContext.hh" #include "freshVariableGenerator.hh" #include "preEquation.hh" // variable class definitions #include "variableDagNode.hh" #include "variableTerm.hh" // higher class definitions #include "narrowingVariableInfo.hh" #include "narrowingUnificationProblem.hh" NarrowingUnificationProblem::NarrowingUnificationProblem(PreEquation* preEquation, DagNode* target, const NarrowingVariableInfo& variableInfo, FreshVariableGenerator* freshVariableGenerator, int variableFamily) : preEquation(preEquation), nrPreEquationVariables(preEquation->getNrRealVariables()), variableInfo(variableInfo), freshVariableGenerator(freshVariableGenerator), variableFamily(variableFamily) { DebugAdvisory(Tty(Tty::MAGENTA) << "==== NarrowingUnificationProblem ====" << Tty(Tty::RESET)); DebugAdvisory("preEquation->getLhsDag() = " << preEquation->getLhsDag()); DebugAdvisory("target = " << target); DebugAdvisory(Tty(Tty::MAGENTA) << "=========================================" << Tty(Tty::RESET)); // // This is the normal constructor where we are trying to narrow target with a rule or equation // given by preEquation. // Module* module = preEquation->getModule(); firstTargetSlot = module->getMinimumSubstitutionSize(); // first slot after variables reserved for preEquation substitutionSize = firstTargetSlot + variableInfo.getNrVariables(); // add the number of variables in target sortBdds = module->getSortBdds(); // // Initialize the sorted and unsorted solutions. // orderSortedUnifiers = 0; sortedSolution = new Substitution(substitutionSize); unsortedSolution = new UnificationContext(freshVariableGenerator, substitutionSize, variableFamily); for (int i = 0; i < substitutionSize; ++i) { sortedSolution->bind(i, 0); // so GC doesn't barf // // At very least the gap between the preEquation variables and the target variables // must be zero'd out so that PendingUnificationStack cycle detection doesn't look // at garbage. // Also UnificationContext protects its slots from GC so they need to be safe values. // unsortedSolution->bind(i, 0); } // // Solve the underlying many-sorted unification problem. // viable = preEquation->getLhsDag()->computeSolvedForm(target, *unsortedSolution, pendingStack); } NarrowingUnificationProblem::NarrowingUnificationProblem(DagNode* lhs, DagNode* rhs, const NarrowingVariableInfo& variableInfo, FreshVariableGenerator* freshVariableGenerator, int variableFamily) : preEquation(0), nrPreEquationVariables(0), variableInfo(variableInfo), freshVariableGenerator(freshVariableGenerator), variableFamily(variableFamily) { DebugAdvisory(Tty(Tty::GREEN) << "==== NarrowingUnificationProblem ====" << Tty(Tty::RESET)); DebugAdvisory("lhs = " << lhs); DebugAdvisory("rhs = " << rhs); DebugAdvisory(Tty(Tty::GREEN) << "=========================================" << Tty(Tty::RESET)); // // This is a special constructor used for the final lhs =? rhs step in variant unification. // There is no rule or equation here. However we have indexed dagnodes rather than terms, and // need the non-destructive unifier generation and variable family fresh variable naming capabilities // of this class. Thus we can't use class UnificationProblem. // Module* module = lhs->symbol()->getModule(); firstTargetSlot = module->getMinimumSubstitutionSize(); // we start allocating slots past those reserved for preEquation //cout << "firstTargetSlot: " << firstTargetSlot << endl; //cout << "nr unification variables: " << variableInfo.getNrVariables() << endl; substitutionSize = firstTargetSlot + variableInfo.getNrVariables(); sortBdds = module->getSortBdds(); // // Initialize the sorted and unsorted solutions. // orderSortedUnifiers = 0; sortedSolution = new Substitution(substitutionSize); unsortedSolution = new UnificationContext(freshVariableGenerator, substitutionSize, variableFamily); for (int i = 0; i < substitutionSize; ++i) { sortedSolution->bind(i, 0); // so GC doesn't barf unsortedSolution->bind(i, 0); // HACK } // // Solve the underlying many-sorted unification problem. // viable = lhs->computeSolvedForm(rhs, *unsortedSolution, pendingStack); } NarrowingUnificationProblem::~NarrowingUnificationProblem() { delete orderSortedUnifiers; delete unsortedSolution; delete sortedSolution; } void NarrowingUnificationProblem::markReachableNodes() { { int nrFragile = sortedSolution->nrFragileBindings(); for (int i = 0; i < nrFragile; i++) { DagNode* d = sortedSolution->value(i); if (d != 0) d->mark(); } } } bool NarrowingUnificationProblem::findNextUnifier() { if (!viable) return false; bool first = true; // // Do we already have an unsorted solution that we can find another of assigning sorts to. // if (orderSortedUnifiers != 0) { if (orderSortedUnifiers->nextAssignment()) goto good; else { delete orderSortedUnifiers; orderSortedUnifiers = 0; first = false; } } // // Keep extracting solved forms until we find one which has no cycles and which order-sortable. // If we run out solved forms, we're done. // for(;;) { if (!pendingStack.solve(first, *unsortedSolution)) return false; classifyVariables(); if (findOrderSortedUnifiers()) { #ifdef NO_ASSERT (void) orderSortedUnifiers->nextAssignment(); #else bool t = orderSortedUnifiers->nextAssignment(); Assert(t, "no first order sorted unifier"); #endif break; } first = false; } good: if (!freeVariables.empty()) bindFreeVariables(); return true; } Sort* NarrowingUnificationProblem::variableIndexToSort(int index) { if (index < nrPreEquationVariables) { // // Original PreEquation variable. // return safeCast(VariableSymbol*, preEquation->index2Variable(index)->symbol())->getSort(); } if (index < substitutionSize) { Assert(index >= firstTargetSlot, "variable index in no man's land " << index); // // Original dag variable. // return safeCast(VariableSymbol*, variableInfo.index2Variable(index - firstTargetSlot)->symbol())->getSort(); } // // Fresh variable introduced by unification. // return unsortedSolution->getFreshVariableSort(index); } void NarrowingUnificationProblem::bindFreeVariables() { // // We go through the variables that were free in the unsorted unifier and bind // each to a fresh variable, whose sort is either that calculated by the BDDs // for a constrained variables, or the sort of the original variable for an // unconstrained variable. // const Vector& assignment = orderSortedUnifiers->getCurrentAssignment(); int bddVar = sortBdds->getFirstAvailableVariable(); int freshVariableCount = 0; for (int fv : freeVariables) { // // Get original sort of variable and its connected component. // Sort* sort = variableIndexToSort(fv); ConnectedComponent* component = sort->component(); Sort* newSort; if (sortConstrainedVariables.contains(fv)) { // // The index of the new sort is binary encoded by the assignments to the // BDD variables for this free variable. // int nrBddVariables = sortBdds->getNrVariables(component->getIndexWithinModule()); int newSortIndex = 0; for (int j = nrBddVariables - 1; j >= 0; --j) { newSortIndex <<= 1; if (assignment[bddVar + j]) ++newSortIndex; } bddVar += nrBddVariables; newSort = component->sort(newSortIndex); } else { // // We have a free variable that didn't occur in any other variables binding; // therefore its sort isn't constrained and remains the same. // newSort = sort; } // // Make a new fresh variable with correct sort and name. // // By giving fv as the slot, we ensure that we can reinstantiate users of this variable // for second and subsequent sorted solutions corresponding to our unsorted solution. // DagNode* newVariable = new VariableDagNode(freshVariableGenerator->getBaseVariableSymbol(newSort), freshVariableGenerator->getFreshVariableName(freshVariableCount, variableFamily), fv); // // Bind slot to new variable. // sortedSolution->bind(fv, newVariable); ++freshVariableCount; } // // Now go through the substitution, instantiating anything that is bound to something // other than a free variable on the new free variables. // for (int i = 0; i < substitutionSize; ++i) { if (DagNode* d = sortedSolution->value(i)) // might be an unused slot { if (!(freeVariables.contains(i))) // not a free variable { if (DagNode* d2 = d->instantiate(*sortedSolution)) sortedSolution->bind(i, d2); } } } } bool NarrowingUnificationProblem::findOrderSortedUnifiers() { // // We use clone() rather than copy() because addNewVariable() may have // increased the number of variables above the number of original variables. // sortedSolution->clone(*unsortedSolution); // // For each free variable allocate a block of BDD variables based on the // size of the connected component of its sort. // // We may have a bigger substitution than we started with due to fresh variables // being created to express unifiers in theories such as AC. // int newSubstitutionSize = sortedSolution->nrFragileBindings(); // // We keep track of the first BDD variable used for each free variable. // Vector realToBdd(newSubstitutionSize); int nextBddVariable = sortBdds->getFirstAvailableVariable(); { // // Each variable that was noted as being sort constrained when the unsorted // unifier was extract now gets allocated a vector of BDD variables to encode its // sort. // for (int scv : sortConstrainedVariables) { realToBdd[scv] = nextBddVariable; Sort* sort = variableIndexToSort(scv); nextBddVariable += sortBdds->getNrVariables(sort->component()->getIndexWithinModule()); } } DebugAdvisory("allocated " << nextBddVariable << " BDD variables" << " sc vars " << sortConstrainedVariables.size() << " freeVariables " << freeVariables.size()); // // Make sure BDD package has enough variables allocated. // BddUser::setNrVariables(nextBddVariable); // // Constrain fresh sort constrained variables to have sort indices in valid range. // Bdd unifier = bddtrue; { for (int fv : sortConstrainedVariables) { if (fv >= substitutionSize) { Sort* sort = unsortedSolution->getFreshVariableSort(fv); Bdd leqRelation = sortBdds->getRemappedLeqRelation(sort, realToBdd[fv]); unifier = bdd_and(unifier, leqRelation); DebugAdvisory("NarrowingUnificationProblem::findOrderSortedUnifiers() : Adding constraint for free, non-original variable; nodes in new bdd = " << bdd_nodecount(unifier) << " unifier = " << unifier); DebugAdvisory("NarrowingUnificationProblem::findOrderSortedUnifiers() : Adding constraint for free, non-original variable: " << leqRelation << " unifier becomes " << unifier); } } } // // Now compute a BDD which tells us if a given assignment of sorts to free // variables yields an order-sorted unifier. // for (int i = 0; i < substitutionSize; ++i) // consider original variables only { // // We don't even look at fresh variables - they are not subject to original // constraints - they get implicitly constrained by where they show up if // they are free. Therefore each slot we examine corresponds to: // (1) an original variable that was bound; // (2) an original variable that is free but sort constrained by its occurrence // in bindings to other variables; // (3) an original variable that is free and doesn't occur in bindings to other // variables; or // (4) an unused slot lying between the preEquation variables and the dag // variables (no man's land). // // Cases (3) and (4) play no role in the BDD based sort computations. // DagNode* d = sortedSolution->value(i); if (d != 0 || sortConstrainedVariables.contains(i)) { Sort* sort = variableIndexToSort(i); Bdd leqRelation; if (d != 0) { // // (1) Bound variable: term must have sort <= variables sort. // Vector genSort; d->computeGeneralizedSort2(*sortBdds, realToBdd, genSort); leqRelation = sortBdds->applyLeqRelation(sort, genSort); DebugAdvisory("bound to " << d << " induces leqRelation " << leqRelation); } else { // // (2) Free, sort constrained variable: sort assigned to free variable // must be <= variables original sort. // leqRelation = sortBdds->getRemappedLeqRelation(sort, realToBdd[i]); DebugAdvisory("free variable induces leqRelation " << leqRelation); } unifier = bdd_and(unifier, leqRelation); DebugAdvisory("unifier = " << unifier); if (unifier == bddfalse) return false; } } // // Now compute a BDD that tells us if a unifier has maximal sort assignments to free // variables. // // maximal(X1,..., Xn) = unifier(X1,..., Xn) & // for each i in 1 ... n // not(exists Yi .[gt(Yi,Xi) & unifier(X1,..., Y1,...., Xn)]) // Bdd maximal = unifier; int secondBase = sortBdds->getFirstAvailableVariable(); for (int fv : sortConstrainedVariables) { Sort* sort = variableIndexToSort(fv); int nrBddVariables = sortBdds->getNrVariables(sort->component()->getIndexWithinModule()); // // Replace the bdd variables allocated to the real variable in unifier with // 0...nrBddVariables-1. // Replace the bdd variables firstAvail,..., firstAvail+nrBddVariables-1 in // gtRelation with the variables allocated to real variable. // bddPair* realTofirstArg = bdd_newpair(); bddPair* secondArgToReal = BddUser::getCachedPairing(); int firstVar = realToBdd[fv]; for (int j = 0; j < nrBddVariables; ++j) { int bddVariable = firstVar + j; bdd_setpair(realTofirstArg, bddVariable, j); bdd_setpair(secondArgToReal, j, j); bdd_setpair(secondArgToReal, secondBase + j, bddVariable); } Bdd gtRelation = sortBdds->getGtRelation(sort->component()->getIndexWithinModule()); Bdd modifiedGtRelation = bdd_replace(gtRelation, secondArgToReal); Bdd modifiedUnifier = bdd_replace(unifier, realTofirstArg); bdd_freepair(realTofirstArg); maximal = bdd_and(maximal, bdd_appall(modifiedGtRelation, modifiedUnifier, bddop_nand, sortBdds->makeVariableBdd(0, nrBddVariables))); Assert(maximal != bddfalse, "maximal false even though unifier isn't"); } orderSortedUnifiers = new AllSat(maximal, secondBase, nextBddVariable - 1); return true; } void NarrowingUnificationProblem::classifyVariables() { // // A narrowing unification problem may contain original variables // that are neither bound nor show up in a binding to an original variable. // This is because while they occur in the target term, they don't occur below // the position being narrowed. // Thus we need to be careful about what unbound variables we treat as free // variables and which variables get sorts represented by BDD variables. // // We are interested in two sets of variables: // Those which must be bound to a fresh variable under our final numbering scheme. // Those for which a sort must be calculated based on the their occurances in bindings. // The former is a superset of the latter. // // Look at original variables. We compute two sets: // freeVariables is intially the set of unbound original variables. // sortConstrainedVariables is the set of variables appearing in a binding // to an original variable. // freeVariables.clear(); sortConstrainedVariables.clear(); for (int i = 0; i < substitutionSize; ++i) { if (i < nrPreEquationVariables || i >= firstTargetSlot) { DagNode* value = unsortedSolution->value(i); if (value == 0) freeVariables.insert(i); else value->insertVariables(sortConstrainedVariables); } } // // Sort constrained variables are also treated as free variables // in that they will be bound to a fresh variable in the final unifier. // freeVariables.insert(sortConstrainedVariables); } maude-3.1/src/Higher/narrowingSearchState.hh0000644000175200017520000000624713576050635016073 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for searching for single narrowing steps within a DAG. // #ifndef _narrowingSearchState_hh_ #define _narrowingSearchState_hh_ #include "positionState.hh" #include "narrowingVariableInfo.hh" class NarrowingSearchState : public PositionState { NO_COPYING(NarrowingSearchState); public: enum Flags { ALLOW_NONEXEC = 32, // allow narrowing with nonexecutable rules, unbound variables being treated as fresh SINGLE_POSITION = 64 // once we've found a position to narrow, don't consider other positions }; // // // label may be UNDEFINED to make any rule usable. // // maxDepth may be NONE to force at top narrowing steps without extension; // otherwise narrowing is done with extension and maxDepth may be // UNBOUNDED to indicate no bound. // // FIXME: need to handle variable names and substitution slots // NarrowingSearchState(RewritingContext* context, FreshVariableGenerator* freshVariableGenerator, bool odd, int label = UNDEFINED, int flags = ALLOW_NONEXEC, int minDepth = 0, int maxDepth = UNBOUNDED); ~NarrowingSearchState(); RewritingContext* getContext() const; Rule* getRule() const; DagNode* getNarrowedDag(DagNode*& replacement) const; bool findNextNarrowing(); const Substitution& getSubstitution() const; int getNrOfVariablesInSubject() const; const NarrowingVariableInfo& getVariableInfo() const; bool isOdd() const; bool isIncomplete() const; private: RewritingContext* context; FreshVariableGenerator* freshVariableGenerator; const bool odd; const int label; const bool withExtension; NarrowingVariableInfo variableInfo; int ruleIndex; // index of current rule being tried NarrowingUnificationProblem* unificationProblem; bool noFurtherPositions; bool incompleteFlag; }; inline bool NarrowingSearchState::isOdd() const { return odd; } inline RewritingContext* NarrowingSearchState::getContext() const { return context; } inline int NarrowingSearchState::getNrOfVariablesInSubject() const { return variableInfo.getNrVariables(); } inline const NarrowingVariableInfo& NarrowingSearchState::getVariableInfo() const { return variableInfo; } inline bool NarrowingSearchState::isIncomplete() const { // // Returns true if any incompleteness has been encountered so far. // return incompleteFlag; } #endif maude-3.1/src/Higher/assignmentConditionState.hh0000644000175200017520000000265713576050635016757 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for to hold state for solving an assignment condition fragment. // #ifndef _assignmentConditionState_hh_ #define _assignmentConditionState_hh_ #include "conditionState.hh" #include "substitution.hh" class AssignmentConditionState : public ConditionState { public: AssignmentConditionState(RewritingContext& original, LhsAutomaton* matcher, DagNode* rhsInstance); ~AssignmentConditionState(); bool solve(bool findFirst, RewritingContext& solution); private: Substitution saved; RewritingContext* rhsContext; Subproblem* subproblem; bool succeeded; }; #endif maude-3.1/src/Higher/rewriteSearchState.hh0000644000175200017520000000347613576050635015547 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for searching for one step rewrites within a DAG. // #ifndef _rewriteSearchState_hh_ #define _rewriteSearchState_hh_ #include "searchState.hh" class RewriteSearchState : public SearchState { NO_COPYING(RewriteSearchState); public: enum Flags { ALLOW_NONEXEC = 32, SET_UNREWRITABLE = 256 }; // // context is passed through to SearchState where it is used to construct // matching substitutions in. // // label may be UNDEFINED to make any rule usable. // // maxDepth may be NONE to force at top rewrites without extension; // otherwise rewriting is done with extension and maxDepth may be // UNBOUNDED to indicate no bound. // RewriteSearchState(RewritingContext* context, int label = UNDEFINED, int flags = 0, int minDepth = 0, int maxDepth = NONE); Rule* getRule() const; DagNode* getReplacement() const; bool findNextRewrite(); private: const int label; const bool withExtension; int ruleIndex; }; #endif maude-3.1/src/Higher/variantUnificationProblem.hh0000644000175200017520000001111413730244704017073 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class to solve a variant unification problem between the lhs of a rule and // a subdag of a dag being narrowed. This is essentially a wrapper around // VariantSearch that translates variant unifiers that are expressed by // vector of dags and a NarrowingVariableInfo object into a substitution // for a potentially larger class of variables described by the given // NarrowingVariableInfo object, and which may include variables that // only appear the larger dag. // #ifndef _variantUnificationProblem_hh_ #define _variantUnificationProblem_hh_ #include "simpleRootContainer.hh" #include "variantSearch.hh" class VariantUnificationProblem : private SimpleRootContainer { NO_COPYING(VariantUnificationProblem); public: // // This extends VariantSearch::Flags and one day maybe merged into // such if FilteredVariantUnifierSearch is merged into VariantSearch. // enum Flags { FILTER_VARIANT_UNIFIERS = 0x1000, }; // // context is just used to create a new context to work in. // // blockerDags are indirectly protected from GC by internal VariantSearch object. // // The unificands are the lhs of the preEquation and the target. Note that the sets // of variables in these two unificands must be disjoint. The variables in the lhs // of the preEquations will have slots starting from 0 while the variables in target // must be given indices >= getMinimumSubstitutionSize() // target should not be rewritten in place while VariantUnificationProblem object exists. // // Solutions have bindings for every variable in the preEquation (even those not in the lhs) // and every variable mentioned in variableInfo (even those not in target). In those // cases binding is just a fresh variable not mentioned anywhere else. // // Fresh variables used to express a unifier belong to a family other than // disallowedVariableFamily, but different solutions may be expressed in variables // from different families. // VariantUnificationProblem(RewritingContext* context, const Vector& blockerDags, PreEquation* preEquation, DagNode* target, const NarrowingVariableInfo& variableInfo, FreshVariableGenerator* freshVariableGenerator, int disallowedVariableFamily, int variantFlags); ~VariantUnificationProblem(); bool isIncomplete() const; // // These are specific to unifiers and can be overriden by a derived class. // bool findNextUnifier(); Substitution& getSolution() const; int getNrFreeVariables() const; int getVariableFamily() const; private: void markReachableNodes(); RewritingContext* const context; PreEquation* preEquation; const NarrowingVariableInfo& variableInfo; int firstTargetSlot; int substitutionSize; int nrPreEquationVariables; RewritingContext* newContext; VariantSearch* variantSearch; FreshVariableGenerator* freshVariableGenerator; // // Information about the current unifier. // Substitution* solution; int nrFreeVariables; int variableFamily; }; inline Substitution& VariantUnificationProblem::getSolution() const { return *solution; } inline int VariantUnificationProblem::getNrFreeVariables() const { // // Return number of free variables used to express a unifier; includes // any fresh variables created for preEquation variables and variableInfo variables // that didn't occur in the actual unfication problem. // return nrFreeVariables; } inline int VariantUnificationProblem::getVariableFamily() const { // // Returns index of variable family used to express current solutions. // return variableFamily; } inline bool VariantUnificationProblem::isIncomplete() const { // // Returns true if any incompleteness has been encountered so far. // return variantSearch->isIncomplete(); } #endif maude-3.1/src/Higher/equalityConditionFragment.cc0000755000175200017520000001116413576050735017112 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class EqualityConditionFragment. // // utility stuff #include "macros.hh" #include "vector.hh" #include "indent.hh" // forward declarations #include "interface.hh" #include "core.hh" //#include "variable.hh" // interface class definitions //#include "symbol.hh" //#include "dagNode.hh" #include "term.hh" #include "lhsAutomaton.hh" #include "rhsAutomaton.hh" #include "subproblem.hh" // core class definitions #include "rewritingContext.hh" #include "variableInfo.hh" //#include "conditionState.hh" // higher class definitions #include "equalityConditionFragment.hh" EqualityConditionFragment::EqualityConditionFragment(Term* lhs, Term* rhs) : lhs(lhs), rhs(rhs) { lhsIndex = NONE; rhsIndex = NONE; } EqualityConditionFragment::~EqualityConditionFragment() { lhs->deepSelfDestruct(); rhs->deepSelfDestruct(); } void EqualityConditionFragment::check(VariableInfo& variableInfo, NatSet& boundVariables) { NatSet unboundVariables; lhs = lhs->normalize(false); lhs->indexVariables(variableInfo); variableInfo.addConditionVariables(lhs->occursBelow()); unboundVariables.insert(lhs->occursBelow()); rhs = rhs->normalize(false); rhs->indexVariables(variableInfo); variableInfo.addConditionVariables(rhs->occursBelow()); unboundVariables.insert(rhs->occursBelow()); unboundVariables.subtract(boundVariables); variableInfo.addUnboundVariables(unboundVariables); } void EqualityConditionFragment::preprocess() { lhs->symbol()->fillInSortInfo(lhs); rhs->symbol()->fillInSortInfo(rhs); Assert(lhs->getComponent() == rhs->getComponent(), "component clash"); } void EqualityConditionFragment::compileBuild(VariableInfo& variableInfo, TermBag& availableTerms) { lhsIndex = lhs->compileRhs(builder, variableInfo, availableTerms, true); rhsIndex = rhs->compileRhs(builder, variableInfo, availableTerms, true); variableInfo.useIndex(lhsIndex); variableInfo.useIndex(rhsIndex); variableInfo.endOfFragment(); } void EqualityConditionFragment::compileMatch(VariableInfo& variableInfo, NatSet& boundUniquely) { builder.remapIndices(variableInfo); lhsIndex = variableInfo.remapIndex(lhsIndex); rhsIndex = variableInfo.remapIndex(rhsIndex); } bool EqualityConditionFragment::solve(bool findFirst, RewritingContext& solution, Stack& /* state */) { if (!findFirst) return false; builder.safeConstruct(solution); RewritingContext* lhsContext = solution.makeSubcontext(solution.value(lhsIndex), RewritingContext::CONDITION_EVAL); RewritingContext* rhsContext = solution.makeSubcontext(solution.value(rhsIndex), RewritingContext::CONDITION_EVAL); lhsContext->reduce(); solution.addInCount(*lhsContext); rhsContext->reduce(); solution.addInCount(*rhsContext); // // Check for equality modulo axioms. // bool success = lhsContext->root()->equal(rhsContext->root()); delete lhsContext; delete rhsContext; return success; } void EqualityConditionFragment::buildInstances(Substitution& substitution, DagNode*& lhs, DagNode*& rhs) { // // Equality fragments have a very different operational semantics when rewriting module SMT. // All we do here is return the instantiated lhs and rhs terms. // builder.safeConstruct(substitution); lhs = substitution.value(lhsIndex); rhs = substitution.value(rhsIndex); } #ifdef DUMP void EqualityConditionFragment::dump(ostream& s, const VariableInfo& variableInfo, int indentLevel) { s << Indent(indentLevel) << "Begin{EqualityConditionFragment}\n"; ++indentLevel; s << Indent(indentLevel) << "lhs = " << lhs << '\n'; s << Indent(indentLevel) << "rhs = " << rhs << '\n'; s << Indent(indentLevel) << "lhsIndex = " << lhsIndex << '\n'; s << Indent(indentLevel) << "rhsIndex = " << rhsIndex << '\n'; s << Indent(indentLevel - 1) << "End{EqualityConditionFragment}\n"; } #endif maude-3.1/src/Higher/rewriteConditionState.cc0000644000175200017520000000617013576050735016251 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class RewriteConditionState. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "higher.hh" // interface class definitions //#include "symbol.hh" //#include "dagNode.hh" #include "term.hh" #include "lhsAutomaton.hh" #include "subproblem.hh" // core class definitions #include "rewritingContext.hh" // higher class definitions #include "rewriteConditionState.hh" RewriteConditionState::RewriteConditionState(RewritingContext& original, DagNode* lhsInstance, LhsAutomaton* matcher) : stateGraph(original.makeSubcontext(lhsInstance, RewritingContext::CONDITION_EVAL)), matcher(matcher), saved(original.nrFragileBindings()) { saved.copy(original); subproblem = 0; explore = -1; arcNr = -1; } RewriteConditionState::~RewriteConditionState() { delete subproblem; } bool RewriteConditionState::solve(bool findFirst, RewritingContext& solution) { // // See if there is another solution to last match. // if (!findFirst) { if (subproblem != 0) { if (subproblem->solve(false, solution)) return true; delete subproblem; subproblem = 0; } solution.copy(saved); // restore substitution to pre-match condition } // // Look for other reachable states to match. // for(;;) { int stateNr = findNextState(); stateGraph.transferCountTo(solution); if (stateNr == NONE) break; if (matcher->match(stateGraph.getStateDag(stateNr), solution, subproblem)) { if (subproblem == 0 || subproblem->solve(true, solution)) return true; delete subproblem; subproblem = 0; } solution.copy(saved); // restore substitution to pre-match condition } return false; } int RewriteConditionState::findNextState() { if (explore == -1) // special case - return initial state { explore = 0; return 0; } int nrStates = stateGraph.getNrStates(); for(; explore != nrStates; explore++) { for (;;) { ++arcNr; int stateNr = stateGraph.getNextState(explore, arcNr); if (stateNr == NONE) { if (stateGraph.getContext()->traceAbort()) return NONE; break; } if (stateNr == nrStates) return stateNr; } arcNr = -1; } return NONE; } maude-3.1/src/Higher/narrowingFolder.cc0000644000175200017520000002417013726570412015056 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2017-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class NarrowingFolder. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "term.hh" #include "lhsAutomaton.hh" #include "subproblem.hh" // core class definitions #include "rewritingContext.hh" #include "subproblemAccumulator.hh" #include "variableInfo.hh" // higher class definitions #include "narrowingFolder.hh" NarrowingFolder::NarrowingFolder(bool fold, bool keepHistory) : fold(fold), keepHistory(keepHistory) { currentStateIndex = -1; } NarrowingFolder::~NarrowingFolder() { for (auto& i : mostGeneralSoFar) delete i.second; } void NarrowingFolder::markReachableNodes() { for (auto& i : mostGeneralSoFar) { i.second->state->mark(); if (DagNode* d = i.second->narrowingContext) d->mark(); if (Substitution* subst = i.second->accumulatedSubstitution) { int nrBindings = subst->nrFragileBindings(); for (int j = 0; j < nrBindings; ++j) subst->value(j)->mark(); } if (Substitution* subst = i.second->unifier) { int nrBindings = subst->nrFragileBindings(); for (int j = 0; j < nrBindings; ++j) { // // The unifier has a zero'd out gap between // the rule variables and the dag variables. // if (DagNode* d = subst->value(j)) d->mark(); } } } } bool NarrowingFolder::insertState(int index, DagNode* state, int parentIndex) { if (fold) { // // See if state is subsumed by an existing state. // for (auto& i : mostGeneralSoFar) { if (i.second->subsumes(state)) { DebugAdvisory("new state " << index << " subsumed by " << i.first); return false; } } } DebugAdvisory("new state " << index << " added"); RetainedState* newState = new RetainedState(state, parentIndex, fold); int depth = 0; if (parentIndex != NONE) { RetainedStateMap::const_iterator j = mostGeneralSoFar.find(parentIndex); Assert(j != mostGeneralSoFar.end(), "couldn't find state with index " << parentIndex); depth = j->second->depth + 1; } newState->depth = depth; if (fold) { // // Compute ancestor set. // StateSet ancestors; for (int i = parentIndex; i != NONE; ) { ancestors.insert(i); RetainedStateMap::const_iterator j = mostGeneralSoFar.find(i); Assert(j != mostGeneralSoFar.end(), "couldn't find state with index " << i); i = j->second->parentIndex; } // // See if newState can evict an existing state. // StateSet existingStatesSubsumed; RetainedStateMap::iterator i = mostGeneralSoFar.begin(); while (i != mostGeneralSoFar.end()) { RetainedStateMap::iterator next = i; ++next; if (ancestors.find(i->first) == ancestors.end()) // can't mess with ancestors of new state { RetainedState* potentialVictim = i->second; if (existingStatesSubsumed.find(potentialVictim->parentIndex) != existingStatesSubsumed.end()) { // // Our parent was subsumed so we are also subsumed. // DebugAdvisory("new state evicted descendent of an older state " << i->first); existingStatesSubsumed.insert(i->first); delete potentialVictim; mostGeneralSoFar.erase(i); } else if (newState->subsumes(potentialVictim->state)) { // // Direct subsumption by new state. // DebugAdvisory("new state evicted an older state " << i->first); existingStatesSubsumed.insert(i->first); delete potentialVictim; mostGeneralSoFar.erase(i); } } i = next; } } else { // // Since we're not folding, if we are keeping history we // need to keep track of number of descendant to know when // a state will never appear in the history of a returned // state. // if (keepHistory && parentIndex != NONE) ++(mostGeneralSoFar[parentIndex]->nrDescendants); } mostGeneralSoFar.insert(RetainedStateMap::value_type(index, newState)); return true; } void NarrowingFolder::addHistory(int index, Rule* rule, DagNode* narrowingContext, DagNode* narrowingPosition, const Substitution& unifier, const NarrowingVariableInfo& variableInfo) { RetainedStateMap::iterator i = mostGeneralSoFar.find(index); Assert(i != mostGeneralSoFar.end(), "couldn't find state with index " << index); i->second->rule = rule; i->second->narrowingContext = narrowingContext; i->second->narrowingPosition = narrowingPosition; // // We make a copy of the unifier and the variableInfo. // int nrBindings = unifier.nrFragileBindings(); Substitution* unifierCopy = new Substitution(nrBindings); for (int i = 0; i < nrBindings; ++i) unifierCopy->bind(i, unifier.value(i)); i->second->unifier = unifierCopy; // // We rely in the variable dag nodes originally coming from the previous // state which is preserved and protected from GC in keepHistory mode. // i->second->variableInfo.copy(variableInfo); } int NarrowingFolder::getNextSurvivingState(DagNode*& nextState, Substitution*& nextStateAccumulatedSubstitution, int& nextStateVariableFamily, int& nextStateDepth) { cleanGraph(); RetainedStateMap::const_iterator nextStateIterator = mostGeneralSoFar.upper_bound(currentStateIndex); if (nextStateIterator == mostGeneralSoFar.end()) return NONE; currentStateIndex = nextStateIterator->first; nextState = nextStateIterator->second->state; nextStateAccumulatedSubstitution = nextStateIterator->second->accumulatedSubstitution; nextStateVariableFamily = nextStateIterator->second->variableFamily; nextStateDepth = nextStateIterator->second->depth; return currentStateIndex; } void NarrowingFolder::cleanGraph() { // // Clear the state graph, on the assumption that the current state has already // been fully expanded. // if (fold) return; // folding takes care of state deletions if (currentStateIndex == NONE) return; // no current state to consider for deletion RetainedStateMap::iterator stateIterator = mostGeneralSoFar.find(currentStateIndex); if (!keepHistory) { // // Since we are not keeping history, we should not need the // current state again since we are moving on to the next state. // delete stateIterator->second; mostGeneralSoFar.erase(stateIterator); return; } // // We are keeping history and so we need to determine whether the // current state and its ancestors sill appear on an active path. // while (stateIterator->second->nrDescendants == 0) { // // No desendant left in graph so we will never // be asked for this state on a path and can delete it. // int parentIndex = stateIterator->second->parentIndex; delete stateIterator->second; mostGeneralSoFar.erase(stateIterator); if (parentIndex == NONE) break; // // This may have left the parent state without descendants // and subject to deletion. // stateIterator = mostGeneralSoFar.find(parentIndex); --(stateIterator->second->nrDescendants); } } NarrowingFolder::RetainedState::RetainedState(DagNode* state, int parentIndex, bool fold) : state(state), parentIndex(parentIndex) { if (fold) { // // Make term version of state. // Term* t = state->symbol()->termify(state); // // Even thoug t should be in normal form we need to set hash values. // t = t->normalize(true); VariableInfo variableInfo; t->indexVariables(variableInfo); t->symbol()->fillInSortInfo(t); t->analyseCollapses(); NatSet boundUniquely; bool subproblemLikely; t->determineContextVariables(); t->insertAbstractionVariables(variableInfo); matchingAutomaton = t->compileLhs(false, variableInfo, boundUniquely, subproblemLikely); stateTerm = t; nrMatchingVariables = variableInfo.getNrProtectedVariables(); // may also have some // abstraction variables } else { stateTerm = 0; matchingAutomaton = 0; nrMatchingVariables = 0; } // // These will be filled out later. // variableFamily = NONE; accumulatedSubstitution = 0; // // These will be filled out later if we're keeping the history. // rule = 0; unifier = 0; narrowingContext = 0; narrowingPosition = 0; // // This may be updated if we are keeping the history and we aren't folding. // nrDescendants = 0; } NarrowingFolder::RetainedState::~RetainedState() { delete accumulatedSubstitution; delete unifier; delete matchingAutomaton; if (stateTerm) stateTerm->deepSelfDestruct(); } bool NarrowingFolder::RetainedState::subsumes(DagNode* state) const { MemoryCell::okToCollectGarbage(); // otherwise we have huge accumulation of junk from matching int nrSlotsToAllocate = nrMatchingVariables; if (nrSlotsToAllocate == 0) nrSlotsToAllocate = 1; // substitutions subject to clear() must always have at least one slot RewritingContext matcher(nrSlotsToAllocate); matcher.clear(nrMatchingVariables); Subproblem* subproblem = 0; bool result = matchingAutomaton->match(state, matcher, subproblem) && (subproblem == 0 || subproblem->solve(true, matcher)); delete subproblem; return result; } maude-3.1/src/Higher/rewriteSequenceSearch.hh0000644000175200017520000000410413576050635016224 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for searching for sequences of rewrites within a DAG. // #ifndef _rewriteSequenceSearch_hh_ #define _rewriteSequenceSearch_hh_ #include "sequenceSearch.hh" #include "stateTransitionGraph.hh" #include "matchSearchState.hh" class RewriteSequenceSearch : public SequenceSearch, public StateTransitionGraph { NO_COPYING(RewriteSequenceSearch); public: RewriteSequenceSearch(RewritingContext* initial, SearchType searchType, Pattern* goal, int maxDepth = -1); ~RewriteSequenceSearch(); bool findNextMatch(); const Pattern* getGoal() const; Rule* getStateRule(int stateNr) const; int getStateNr() const; const Substitution* getSubstitution() const; private: int findNextInterestingState(); Pattern* const goal; const int maxDepth; int explore; int exploreDepth; int firstDeeperNodeNr; int nextArc; bool needToTryInitialState; bool reachingInitialStateOK; bool normalFormNeeded; MatchSearchState* matchState; int stateNr; }; inline const Pattern* RewriteSequenceSearch::getGoal() const { return goal; } inline const Substitution* RewriteSequenceSearch::getSubstitution() const { return matchState->getContext(); } inline int RewriteSequenceSearch::getStateNr() const { return stateNr; } #endif maude-3.1/src/Higher/rewriteConditionFragment.hh0000644000175200017520000000400213576050635016735 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for condition fragment supporting rewrite search. // #ifndef _rewriteConditionFragment_hh_ #define _rewriteConditionFragment_hh_ #include "conditionFragment.hh" #include "rhsBuilder.hh" class RewriteConditionFragment : public ConditionFragment { NO_COPYING(RewriteConditionFragment); public: RewriteConditionFragment(Term* lhs, Term* rhs); ~RewriteConditionFragment(); void check(VariableInfo& varInfo, NatSet& boundVariables); void preprocess(); void compileBuild(VariableInfo& variableInfo, TermBag& availableTerms); void compileMatch(VariableInfo& variableInfo, NatSet& boundUniquely); bool solve(bool findFirst, RewritingContext& solution, Stack& state); Term* getLhs() const; Term* getRhs() const; // // Needed for strategy language. // DagNode* makeLhsInstance(Substitution& solution); bool matchRoot(RewritingContext& context, Subproblem*& subproblem); private: Term* lhs; Term* rhs; RhsBuilder builder; int lhsIndex; LhsAutomaton* rhsMatcher; }; inline Term* RewriteConditionFragment::getLhs() const { return lhs; } inline Term* RewriteConditionFragment::getRhs() const { return rhs; } #endif maude-3.1/src/Higher/cacheableState.hh0000755000175200017520000000212213645750472014620 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2006 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Base class for large chunks of state that can be cached. // #ifndef _cacheableState_hh_ #define _cacheableState_hh_ class CacheableState { public: // // A cache needs to be able to delete a state. // virtual ~CacheableState() {} }; #endif maude-3.1/src/Higher/variantUnifierFilter.hh0000644000175200017520000000770313724033262016060 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for filtering variant unifiers, keeping a minimal set that cannot // be shown to be subsumed (variant subsumption could potentially be // incomplete because of incomplete unifications algorithms). // #ifndef _variantUnifierFilter_hh_ #define _variantUnifierFilter_hh_ #include #include "dagRoot.hh" #include "substitution.hh" class VariantUnifierFilter { NO_COPYING(VariantUnifierFilter); public: // // We just use the context to make new contexts to call VariantSearch on. // VariantUnifierFilter(RewritingContext* context, FreshVariableGenerator* freshVariableGenerator); ~VariantUnifierFilter(); // // Unifiers must have the same number of assignments, and kinds must match for // the ith family. Variables in the assignments of a unifier must be drawn from // a single variable family but variable families can differ between unifers. // void insertUnifier(const Vector& unifier,int nrFreeVariables, int variableFamily); bool findNextSurvivingUnifier(); const Vector& getCurrentSurvivingUnifier(int& nrFreeVariables, int& variableFamily); bool filteringIncomplete() const; private: struct RetainedUnifier { RetainedUnifier(const Vector& unifier, int nrFreeVariables, int variableFamily, DagNode* encodedUnifier, VariantSearch* variants); ~RetainedUnifier(); bool subsumes(DagNode* otherUnifier); Vector unifier; int nrFreeVariables; int variableFamily; DagNode* const encodedUnifier; VariantSearch* variants; }; typedef list RetainedUnifierList; bool subsumes(const RetainedUnifier* retainedUnifier, DagNode* otherEncodedUnifier); RewritingContext* const context; FreshVariableGenerator* const freshVariableGenerator; Symbol* tupleSymbol; DagRoot encodedUnifier; RetainedUnifierList mostGeneralSoFar; bool startedExtractingUnifiers; bool currentUnifierSubsumed; bool filteringIncompleteFlag; RetainedUnifierList::const_iterator currentUnifier; }; inline VariantUnifierFilter::RetainedUnifier::RetainedUnifier(const Vector& unifier, int nrFreeVariables, int variableFamily, DagNode* encodedUnifier, VariantSearch* variants) : unifier(unifier), // shallow copy nrFreeVariables(nrFreeVariables), variableFamily(variableFamily), encodedUnifier(encodedUnifier), variants(variants) { } inline VariantUnifierFilter::RetainedUnifier::~RetainedUnifier() { delete variants; } inline bool VariantUnifierFilter::RetainedUnifier::subsumes(DagNode* otherEncodedUnifier) { return variants->isSubsumed(otherEncodedUnifier); } inline const Vector& VariantUnifierFilter::getCurrentSurvivingUnifier(int& nrFreeVariables, int& variableFamily) { Assert(startedExtractingUnifiers == true, "didn't call findNextSurvivingUnifier()"); nrFreeVariables = (*currentUnifier)->nrFreeVariables; variableFamily = (*currentUnifier)->variableFamily; return (*currentUnifier)->unifier; } inline bool VariantUnifierFilter::filteringIncomplete() const { return filteringIncompleteFlag; } #endif maude-3.1/src/Higher/modelCheckerSymbol.hh0000644000175200017520000000567313576050635015513 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for symbols for built in model checking. // #ifndef _modelCheckerSymbol_hh_ #define _modelCheckerSymbol_hh_ #include "temporalSymbol.hh" #include "cachedDag.hh" #include "modelChecker2.hh" #include "stateTransitionGraph.hh" class ModelCheckerSymbol : public TemporalSymbol { NO_COPYING(ModelCheckerSymbol); public: ModelCheckerSymbol(int id); bool attachData(const Vector& opDeclaration, const char* purpose, const Vector& data); bool attachSymbol(const char* purpose, Symbol* symbol); bool attachTerm(const char* purpose, Term* term); void copyAttachments(Symbol* original, SymbolMap* map); void getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data); void getSymbolAttachments(Vector& purposes, Vector& symbols); void getTermAttachments(Vector& purposes, Vector& terms); bool eqRewrite(DagNode* subject, RewritingContext& context); void postInterSymbolPass(); void reset(); private: struct SystemAutomaton : public ModelChecker2::System { int getNextState(int stateNr, int transitionNr); bool checkProposition(int stateNr, int propositionIndex) const; DagNodeSet propositions; Symbol* satisfiesSymbol; RewritingContext* parentContext; DagNode* trueTerm; StateTransitionGraph* systemStates; }; void dump(const StateTransitionGraph& states, const list& path); DagNode* makeTransition(const StateTransitionGraph& states, int stateNr, int target); DagNode* makeTransitionList(const StateTransitionGraph& states, const list& path, int lastTarget); DagNode* makeCounterexample(const StateTransitionGraph& states, const ModelChecker2& mc); Symbol* satisfiesSymbol; // // Symbols needed for returning counterexamples. // QuotedIdentifierSymbol* qidSymbol; Symbol* unlabeledSymbol; Symbol* deadlockSymbol; Symbol* transitionSymbol; Symbol* transitionListSymbol; Symbol* nilTransitionListSymbol; Symbol* counterexampleSymbol; CachedDag trueTerm; }; #endif maude-3.1/src/Higher/sequenceSearch.hh0000644000175200017520000000221313576050635014661 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2007 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Base class for rewrite and narrowing sequence searches. // #ifndef _sequenceSearch_hh_ #define _sequenceSearch_hh_ #include "cacheableState.hh" class SequenceSearch : public CacheableState { public: enum SearchType { ONE_STEP, AT_LEAST_ONE_STEP, ANY_STEPS, NORMAL_FORM }; }; #endif maude-3.1/src/Higher/filteredVariantUnifierSearch.cc0000644000175200017520000000651113730237506017505 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class FilteredVariantUnifierSearch. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "variable.hh" #include "higher.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "term.hh" // core class definitions #include "rewritingContext.hh" // higher class definitions #include "filteredVariantUnifierSearch.hh" FilteredVariantUnifierSearch::FilteredVariantUnifierSearch(RewritingContext* context, const Vector& blockerDags, FreshVariableGenerator* freshVariableGenerator, int flags, int incomingVariableFamily) : VariantSearch(context, blockerDags, freshVariableGenerator, flags | UNIFICATION_MODE, incomingVariableFamily), flags(flags), unifiers(context, freshVariableGenerator) { if (flags & IRREDUNDANT_MODE) { // // Extract and filter all unifiers before returning one. // // This means that later unifiers can subsume earlier unifiers // and remove them from the returned set of unifiers. // // In practice, because variants are expanded breathfirst, it // seems rare that a later (and hence more narrowed) unifier // can subsume an earlier one, but sometimes one just wants // to be sure that no subsumed unifiers are returned. // while (VariantSearch::findNextUnifier()) { int nrFreeVariables; int variableFamily; const Vector& unifier = VariantSearch::getCurrentUnifier(nrFreeVariables, variableFamily); unifiers.insertUnifier(unifier, nrFreeVariables, variableFamily); } } } bool FilteredVariantUnifierSearch::findNextUnifier() { if (flags & IRREDUNDANT_MODE) return unifiers.findNextSurvivingUnifier(); // // Incremental extraction. // Each time we insert a unifier, we check to see if we have a survivor. // do { if (VariantSearch::findNextUnifier()) { int nrFreeVariables; int variableFamily; const Vector& unifier = VariantSearch::getCurrentUnifier(nrFreeVariables, variableFamily); unifiers.insertUnifier(unifier, nrFreeVariables, variableFamily); } else return false; } while (!(unifiers.findNextSurvivingUnifier())); return true; } const Vector& FilteredVariantUnifierSearch::getCurrentUnifier(int& nrFreeVariables, int& variableFamily) { return unifiers.getCurrentSurvivingUnifier(nrFreeVariables, variableFamily); } maude-3.1/src/Higher/unifierFilter.cc0000755000175200017520000002031613722122436014517 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for subproblemsmore details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class UnifierFilter. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" //#include "variable.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "term.hh" #include "lhsAutomaton.hh" #include "subproblem.hh" // core class definitions #include "rewritingContext.hh" #include "subproblemAccumulator.hh" #include "variableInfo.hh" // higher class definitions #include "unifierFilter.hh" UnifierFilter::UnifierFilter(int firstInterestingVariable, int nrInterestingVariables) : firstInterestingVariable(firstInterestingVariable), nrInterestingVariables(nrInterestingVariables) { startedExtractingUnifiers = false; } UnifierFilter::~UnifierFilter() { for (RetainedUnifier* r : mostGeneralSoFar) delete r; } void UnifierFilter::markReachableNodes() { for (RetainedUnifier* r : mostGeneralSoFar) { const Substitution& unifier = r->unifier; int nrFragile = unifier.nrFragileBindings(); for (int j = 0; j < nrFragile; ++j) { DagNode* d = unifier.value(j); if (d != 0) d->mark(); } } } void UnifierFilter::insertUnifier(const Substitution& unifier, int positionIndex, int equationIndex) { // // First we check if it is subsumed by one of the existing unifiers. // for (RetainedUnifier* r : mostGeneralSoFar) { if (subsumes(r, unifier)) { DebugAdvisory("new unifier subsumed"); return; } } DebugAdvisory("new unifier added"); // // Compile a set of matching automata for this unifier. // RetainedUnifier* newUnifier = new RetainedUnifier(unifier, firstInterestingVariable, nrInterestingVariables); // // See if this unifier can evict an existing unifier. // RetainedUnifierList::iterator i = mostGeneralSoFar.begin(); while (i != mostGeneralSoFar.end()) { RetainedUnifierList::iterator next = i; ++next; RetainedUnifier* potentialVictim = *i; if (subsumes(newUnifier, potentialVictim->unifier)) { DebugAdvisory("new unifier evicted an older unifier"); delete potentialVictim; mostGeneralSoFar.erase(i); } i = next; } // // Add to the mostGeneralSoFar collection of unifiers. // newUnifier->positionIndex = positionIndex; newUnifier->equationIndex = equationIndex; mostGeneralSoFar.push_back(newUnifier); //cout << "nr unifiers = " << mostGeneralSoFar.size() << ' '; } bool UnifierFilter::getNextSurvivingUnifier(Substitution*& unifier, int& positionIndex, int& equationIndex) { if (startedExtractingUnifiers) ++nextUnifier; else { startedExtractingUnifiers = true; nextUnifier = mostGeneralSoFar.begin(); } if (nextUnifier == mostGeneralSoFar.end()) return false; RetainedUnifier* r = *nextUnifier; unifier = &(r->unifier); positionIndex = r->positionIndex; equationIndex = r->equationIndex; return true; } bool UnifierFilter::subsumes(const RetainedUnifier* retainedUnifier, const Substitution& unifier) { MemoryCell::okToCollectGarbage(); // otherwise we have huge accumulation of junk from matching // // We check if retained unifier is at least as general as unifier on variables of interest. // int nrVariablesToUse = retainedUnifier->nrVariablesInBindings; int nrSlotsToAllocate = nrVariablesToUse; if (nrSlotsToAllocate == 0) nrSlotsToAllocate = 1; // substitutions subject to clear() must always have at least one slot RewritingContext matcher(nrSlotsToAllocate); SubproblemAccumulator subproblems; matcher.clear(nrVariablesToUse); for (int i = 0; i < nrInterestingVariables; ++i) { Subproblem* subproblem; DebugInfo("Considering interesting variable " << i); DebugInfo("Pattern has " << retainedUnifier->unifier.value(firstInterestingVariable + i)); DebugInfo("Pattern term is " << retainedUnifier->interestingBindings[i]); DebugInfo("Subject has " << unifier.value(firstInterestingVariable + i)); if (retainedUnifier->matchingAutomata[i]->match(unifier.value(firstInterestingVariable + i), matcher, subproblem)) subproblems.add(subproblem); else { DebugAdvisory("non subsumption declared on variable " << i); return false; } } Subproblem* final = subproblems.extractSubproblem(); if (final == 0) { DebugAdvisory("no subproblem so declaring subsumption"); return true; } bool result = final->solve(true, matcher); DebugAdvisory("solve result = " << result); delete final; return result; } UnifierFilter::RetainedUnifier::RetainedUnifier(const Substitution& original, int firstInterestingVariable, int nrInterestingVariables) : unifier(original.nrFragileBindings()), interestingBindings(nrInterestingVariables), matchingAutomata(nrInterestingVariables) { unifier.clone(original); // // Convert bindings of interesting variables to terms, index their variables, fill in // sort information and look for potential collapses. // VariableInfo variableInfo; // does this need to be retained? for (int i = 0; i < nrInterestingVariables; ++i) { DagNode* d = unifier.value(firstInterestingVariable + i); Term* t = d->symbol()->termify(d); t = t->normalize(true); // needed even though we're in normal form, in order to set hash value t->indexVariables(variableInfo); t->symbol()->fillInSortInfo(t); t->analyseCollapses(); interestingBindings[i] = t; } // // Now go through them again, inserting context variable information, inserting abstraction // variables where needed to handle potential collapses. // for (int i = 0; i < nrInterestingVariables; ++i) { Term* t = interestingBindings[i]; for (int j = 0; j < nrInterestingVariables; ++j) { if (j != i) { // // Variables from other bindings are in our context. // t->addContextVariables(interestingBindings[j]->occursBelow()); } } // // Recursively compute the context variables for each subterm. // t->determineContextVariables(); // // Insert abstraction variables for subterms that could collapse into // their enclosing theory; such subterms will need to be treated like // variables and then their binding subject to an extra match. // t->insertAbstractionVariables(variableInfo); } // // This may also include some abstraction variables. // nrVariablesInBindings = variableInfo.getNrProtectedVariables(); // // Now we know how many variables we will need to save in branching, we // can safely compile. // NatSet boundUniquely; bool subproblemLikely; for (int i = 0; i < nrInterestingVariables; ++i) { Term* t = interestingBindings[i]; DebugInfo("Compiling " << t); matchingAutomata[i] = t->compileLhs(false, variableInfo, boundUniquely, subproblemLikely); //matchingAutomata[i]->dump(cerr, variableInfo); } DebugInfo("compiled retained unifier has " << variableInfo.getNrRealVariables() << " real variables"); DebugInfo("compiled retained unifier has " << variableInfo.getNrProtectedVariables() << " protected variables"); } UnifierFilter::RetainedUnifier::~RetainedUnifier() { int nrInterestingVariables = interestingBindings.size(); for (int i = 0; i < nrInterestingVariables; ++i) { delete matchingAutomata[i]; interestingBindings[i]->deepSelfDestruct(); } } maude-3.1/src/Higher/unificationProblem.cc0000755000175200017520000003531713726574060015560 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class UnificationProblem. // // utility stuff #include "macros.hh" #include "vector.hh" #include "allSat.hh" #include "bddUser.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "variable.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" // variable class definitions #include "variableDagNode.hh" #include "variableTerm.hh" // core class definitions #include "module.hh" #include "sortBdds.hh" #include "connectedComponent.hh" #include "unificationContext.hh" #include "freshVariableGenerator.hh" // higher class definitions #include "unificationProblem.hh" UnificationProblem::UnificationProblem(Vector& lhs, Vector& rhs, FreshVariableGenerator* freshVariableGenerator, int incomingVariableFamily) : freshVariableGenerator(freshVariableGenerator), variableFamilyToUse(incomingVariableFamily == 0) // use 0 unless it's the incoming family, // then use 1 { #ifndef NO_ASSERT if (globalAdvisoryFlag) { cerr << Tty(Tty::RED) << "==== UnificationProblem ====" << Tty(Tty::RESET) << endl; for (int i = 0; i < lhs.length(); ++i) cerr << "lhs[" << i << "] = " << lhs[i] << endl; for (int i = 0; i < rhs.length(); ++i) cerr << "rhs[" << i << "] = " << rhs[i] << endl; cerr << Tty(Tty::RED) << "=========================================" << Tty(Tty::RESET) << endl; } #endif problemOkay = false; // until we have verified it is ok Assert(lhs.size() == rhs.size(), "lhs/rhs size clash"); leftHandSides.swap(lhs); rightHandSides.swap(rhs); sortBdds = leftHandSides[0]->symbol()->getModule()->getSortBdds(); // // Preprocess terms. // int nrEquations = leftHandSides.size(); for (int i = 0; i < nrEquations; ++i) { Term*& lhs = leftHandSides[i]; lhs = lhs->normalize(true); lhs->indexVariables(variableInfo); Term*& rhs = rightHandSides[i]; rhs = rhs->normalize(true); rhs->indexVariables(variableInfo); } // // Check that variables have safe names. // int nrOriginalVariables = variableInfo.getNrRealVariables(); for (int i = 0; i < nrOriginalVariables; ++i) { Term* v = variableInfo.index2Variable(i); if (freshVariableGenerator->variableNameConflict(safeCast(VariableTerm*, v)->id(), incomingVariableFamily)) { IssueWarning("unsafe variable name " << QUOTE(v) << " in unification problem."); return; } } // // Create corresponding dags. // leftHandDags.resize(nrEquations); rightHandDags.resize(nrEquations); for (int i = 0; i < nrEquations; ++i) { leftHandDags[i] = leftHandSides[i]->term2Dag(); if (leftHandDags[i]->computeBaseSortForGroundSubterms(true) == DagNode::UNIMPLEMENTED) return; rightHandDags[i] = rightHandSides[i]->term2Dag(); if (rightHandDags[i]->computeBaseSortForGroundSubterms(true) == DagNode::UNIMPLEMENTED) return; } problemOkay = true; // // Initialize the sorted and unsorted solutions. // orderSortedUnifiers = 0; sortedSolution = new Substitution(nrOriginalVariables); unsortedSolution = new UnificationContext(freshVariableGenerator, nrOriginalVariables, variableFamilyToUse); for (int i = 0; i < nrOriginalVariables; ++i) { sortedSolution->bind(i, 0); // so GC doesn't barf unsortedSolution->bind(i, 0); // HACK } // // Solve the underlying many-sorted unification problem. // #if 0 cout << "%%%%%UnificationProblem:\n"; for (int i = 0; i < nrEquations; ++i) cout << leftHandDags[i] << " =? " << rightHandDags[i] << endl; #endif for (int i = 0; i < nrEquations; ++i) { if (!(leftHandDags[i]->computeSolvedForm(rightHandDags[i], *unsortedSolution, pendingStack))) { #if 0 cout << "NO SOLVED FORM" << endl; #endif viable = false; return; } } viable = true; } UnificationProblem::~UnificationProblem() { //cerr << this << " ~UnificationProblem()" << endl; delete freshVariableGenerator; if (problemOkay) { delete orderSortedUnifiers; delete unsortedSolution; delete sortedSolution; } // // Only now can we safely destruct these as they are needed by VariableInfo. // int nrEquations = leftHandSides.size(); for (int i = 0; i < nrEquations; ++i) { leftHandSides[i]->deepSelfDestruct(); rightHandSides[i]->deepSelfDestruct(); } } void UnificationProblem::markReachableNodes() { //cerr << this << " markReachableNodes()" << endl; { int nrEquations = leftHandSides.size(); for (int i = 0; i < nrEquations; ++i) { leftHandDags[i]->mark(); rightHandDags[i]->mark(); } } { int nrFragile = sortedSolution->nrFragileBindings(); for (int i = 0; i < nrFragile; i++) { DagNode* d = sortedSolution->value(i); if (d != 0) d->mark(); } } } bool UnificationProblem::findNextUnifier() { if (!viable) return false; bool first = (orderSortedUnifiers == 0); // // Do we already have an unsorted solution that we can find another of assigning sorts to. // if (!first) { if (orderSortedUnifiers->nextAssignment()) goto good; delete orderSortedUnifiers; orderSortedUnifiers = 0; } // // Keep extracting solved forms until we find one which has no cycles and which order-sortable. // If we run out solved forms, we're done. // do { if (!pendingStack.solve(first, *unsortedSolution)) return false; findOrderSortedUnifiers(); first = false; } while (orderSortedUnifiers == 0); orderSortedUnifiers->nextAssignment(); // can't fail good: bindFreeVariables(); return true; } const Substitution& UnificationProblem::getSolution() const { return *sortedSolution; } int UnificationProblem::getNrFreeVariables() const { return freeVariables.size(); } void UnificationProblem::bindFreeVariables() { // // We go through the variables that were free in the unsorted unifier. // const Vector& assignment = orderSortedUnifiers->getCurrentAssignment(); int bddVar = sortBdds->getFirstAvailableVariable(); for (int i : freeVariables) { DagNode* variable = sortedSolution->value(i); DebugAdvisory("findNextUnifier(): finding sort of free variable " << variable); ConnectedComponent* component = variable->symbol()->rangeComponent(); // // Compute the index of the new sort for this variable from the // value of the BDD variables in the current satisfying assignment. // int nrBddVariables = sortBdds->getNrVariables(component->getIndexWithinModule()); int index = 0; for (int j = nrBddVariables - 1; j >= 0; --j) { index <<= 1; if (assignment[bddVar + j]) ++index; } bddVar += nrBddVariables; DebugAdvisory("index = " << index); // // Replace each variable symbol in a free variable with the // variable symbol corresponding to its newly calculated sort. // Assert(index < component->nrSorts(), "bad sort index " << index << " computed for free variable" << variable); variable->replaceSymbol(freshVariableGenerator->getBaseVariableSymbol(component->sort(index))); } } void UnificationProblem::findOrderSortedUnifiers() { // // We use clone() rather than copy() because addNewVariable() may have // increased the number of variables above the number of original variables. // sortedSolution->clone(*unsortedSolution); // // For each free variable allocate a block of BDD variables based on the // size of the connected component of its sort. // freeVariables.clear(); int nrActualVariables = sortedSolution->nrFragileBindings(); Vector realToBdd(nrActualVariables); int nextBddVariable = sortBdds->getFirstAvailableVariable(); int nrOriginalVariables = variableInfo.getNrRealVariables(); for (int i = 0; i < nrActualVariables; ++i) { //cout << "variable with index " << i << endl; if (sortedSolution->value(i) == 0) { DebugAdvisory("allocated BDD variables starting at " << nextBddVariable << " for variable with slot " << i); freeVariables.append(i); realToBdd[i] = nextBddVariable; Sort* sort = (i < nrOriginalVariables) ? safeCast(VariableSymbol*, variableInfo.index2Variable(i)->symbol())->getSort() : unsortedSolution->getFreshVariableSort(i); nextBddVariable += sortBdds->getNrVariables(sort->component()->getIndexWithinModule()); //cout << "allocated bdds" << endl; } else DebugAdvisory("variable with index " << i << " bound to " << sortedSolution->value(i)); } //cout << "allocated " << nextBddVariable << " BDD variables" << endl; // // Make sure BDD package has enough variables allocated. // DebugAdvisory("setting " << nextBddVariable << " BDD variables"); BddUser::setNrVariables(nextBddVariable); // // Constrain free fresh variables to have indices in valid range. // Bdd unifier = bddtrue; for (int i = nrOriginalVariables; i < nrActualVariables; ++i) { if (sortedSolution->value(i) == 0) { Sort* sort = unsortedSolution->getFreshVariableSort(i); Bdd leqRelation = sortBdds->getRemappedLeqRelation(sort, realToBdd[i]); unifier = bdd_and(unifier, leqRelation); DebugAdvisory("Adding constraint for free, non-original variable: " << leqRelation << " unifier becomes " << unifier); } } // // Now compute a BDD which tells us if a given assignment of sorts to free // variables yields an order-sorted unifier. // // Bdd unifier = bddtrue; for (int i = 0; i < nrOriginalVariables; ++i) { DebugAdvisory("Considering variable " << variableInfo.index2Variable(i)); Sort* sort = safeCast(VariableSymbol*, variableInfo.index2Variable(i)->symbol())->getSort(); Bdd leqRelation; DagNode* d = sortedSolution->value(i); if (d != 0) { // // Bound variable: term must have sort <= variables sort. // Vector genSort; //d->computeGeneralizedSort(*sortBdds, realToBdd, genSort); d->computeGeneralizedSort2(*sortBdds, realToBdd, genSort); leqRelation = sortBdds->applyLeqRelation(sort, genSort); DebugAdvisory("bound to " << d << " induces leqRelation " << leqRelation); } else { // // Free variable: sort assigned to free variable must be <= variables original sort. // leqRelation = sortBdds->getRemappedLeqRelation(sort, realToBdd[i]); DebugAdvisory("free variable induces leqRelation " << leqRelation); } unifier = bdd_and(unifier, leqRelation); DebugAdvisory("findOrderSortedUnifiers(): unifier = " << unifier); if (unifier == bddfalse) return; } // // Now compute a BDD that tells us if a unifier has maximal sort assignments to free // variables. // // maximal(X1,..., Xn) = unifier(X1,..., Xn) & // for each i in 1 ... n // not(exists Y .[gt(Y,Xi) & unifier(X1,..., Y,...., Xn)]) // // We actually evaluate this subterm as // forall Y .[not(gt(Y,Xi) & unifier(X1,..., Y,...., Xn))] // pushing the not inside the quantifier. // Bdd maximal = unifier; int nrFreeVariables = freeVariables.size(); int secondBase = sortBdds->getFirstAvailableVariable(); for (int i = 0; i < nrFreeVariables; ++i) { int fv = freeVariables[i]; Sort* sort = (fv < nrOriginalVariables) ? safeCast(VariableSymbol*, variableInfo.index2Variable(fv)->symbol())->getSort() : unsortedSolution->getFreshVariableSort(fv); int nrBddVariables = sortBdds->getNrVariables(sort->component()->getIndexWithinModule()); // // Replace the bdd variables allocated to the real variable in unifier with // 0...nrBddVariables-1. // Replace the bdd variables firstAvail,..., firstAvail+nrBddVariables-1 in gtOp with the // variables allocated to real variable. // bddPair* realTofirstArg = bdd_newpair(); bddPair* secondArgToReal = BddUser::getCachedPairing(); int firstVar = realToBdd[fv]; for (int j = 0; j < nrBddVariables; ++j) { int bddVariable = firstVar + j; bdd_setpair(realTofirstArg, bddVariable, j); bdd_setpair(secondArgToReal, j, j); bdd_setpair(secondArgToReal, secondBase + j, bddVariable); } Bdd gtRelation = sortBdds->getGtRelation(sort->component()->getIndexWithinModule()); Bdd modifiedGtRelation = bdd_replace(gtRelation, secondArgToReal); Bdd modifiedUnifier = bdd_replace(unifier, realTofirstArg); bdd_freepair(realTofirstArg); maximal = bdd_and(maximal, bdd_appall(modifiedGtRelation, modifiedUnifier, bddop_nand, sortBdds->makeVariableBdd(0, nrBddVariables))); Assert(maximal != bddfalse, "maximal false even though unifier isn't"); } DebugAdvisory("findOrderSortedUnifiers(): maximal = " << maximal); orderSortedUnifiers = new AllSat(maximal, secondBase, nextBddVariable - 1); if (nrFreeVariables > 0) { int freshVariableCount = 0; // // Finally we bind each free variable to a fresh variable of the appropriate sort and // instantiate all bindings to replace all occurences of the (formerly) free variables. // for (int i = 0; i < nrActualVariables; ++i) { if (sortedSolution->value(i) == 0) { // // If we have an original variable, we take the base symbol from the original // variable, otherwise if it is a fresh variable, we get the kind from the // UnificationContext where it was created and look up the appropriate base // symbol. // Symbol* baseSymbol = (i < nrOriginalVariables) ? variableInfo.index2Variable(i)->symbol() : freshVariableGenerator->getBaseVariableSymbol(unsortedSolution->getFreshVariableSort(i)); int newVariableName = freshVariableGenerator->getFreshVariableName(freshVariableCount, variableFamilyToUse); sortedSolution->bind(i, new VariableDagNode(baseSymbol, newVariableName, i)); ++freshVariableCount; } } for (int i = 0; i < nrOriginalVariables; ++i) { if (DagNode* d = sortedSolution->value(i)->instantiate(*sortedSolution)) sortedSolution->bind(i, d); } } } maude-3.1/src/Higher/narrowingSearchState.cc0000644000175200017520000001323213576050735016052 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class NarrowingSearchState. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "variable.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" // core class definitions #include "rewritingContext.hh" #include "rhsAutomaton.hh" #include "rule.hh" #include "freshVariableGenerator.hh" // variable class definitions #include "variableDagNode.hh" // higher class definitions #include "narrowingUnificationProblem.hh" #include "narrowingSearchState.hh" NarrowingSearchState::NarrowingSearchState(RewritingContext* context, FreshVariableGenerator* freshVariableGenerator, bool odd, int label, int flags, int minDepth, int maxDepth) : PositionState(context->root(), flags, minDepth, maxDepth), context(context), freshVariableGenerator(freshVariableGenerator), odd(odd), label(label), withExtension(maxDepth >= 0) { ruleIndex = -1; DagNode* target = context->root(); Module* module = target->symbol()->getModule(); int firstTargetSlot = module->getMinimumSubstitutionSize(); // // Indexing the variables will convert any persistent representations into // regular representations suitable for unification and instantiation. // context->root()->indexVariables(variableInfo, firstTargetSlot); //cout << context->root() << " has " << variableInfo.getNrVariables() << " variables\n"; /* int nrVariables = variableInfo.getNrVariables(); for (int i = 0; i < nrVariables; ++i) { VariableDagNode* v = variableInfo.index2Variable(i); cout << i << '\t' << static_cast(v) << '\t' << v->getIndex() << endl; } */ incompleteFlag = false; unificationProblem = 0; noFurtherPositions = false; } NarrowingSearchState::~NarrowingSearchState() { delete unificationProblem; delete context; } bool NarrowingSearchState::findNextNarrowing() { if (ruleIndex > -1) { // // Already underway; check for another unifier between the current position and // with the current rule. // if (unificationProblem->findNextUnifier()) return true; incompleteFlag |= unificationProblem->isIncomplete(); delete unificationProblem; } else { // // First call - find an initial position. // if (!findNextPosition()) return false; } // // Move to the next rule. // ++ruleIndex; // // Check if we are allowed to use nonexecutable rules. A nonexecutable rule may have // unbound variables in the rhs which we will bind to fresh variables. // bool allowNonexec = getFlags() & ALLOW_NONEXEC; do { // // We don't consider the possibility that our current position, // getDagNode(), might collapse into another theory under unification. // // //cout << " at " << getDagNode() << endl; DagNode* d = getDagNode(); if (dynamic_cast(d) == 0) // only consider non-variable positions { const Vector& rules = d->symbol()->getRules(); for (int nrRules = rules.length(); ruleIndex < nrRules; ruleIndex++) { Rule* rl = rules[ruleIndex]; if (!(rl->hasCondition()) && // we don't attempt narrowing with conditional rules (allowNonexec || !(rl->isNonexec())) && // check executability (label == UNDEFINED || rl->getLabel().id() == label)) // check label { ////cout << "trying rule " << ruleIndex << " " << rl << " at " << getDagNode() << endl; unificationProblem = new NarrowingUnificationProblem(rl, getDagNode(), variableInfo, freshVariableGenerator, odd); if (unificationProblem->findNextUnifier()) { noFurtherPositions = getFlags() & SINGLE_POSITION; return true; } incompleteFlag |= unificationProblem->isIncomplete(); delete unificationProblem; } } } ruleIndex = 0; } while (!noFurtherPositions && findNextPosition()); unificationProblem = 0; return false; } Rule* NarrowingSearchState::getRule() const { return (getDagNode()->symbol()->getRules())[ruleIndex]; } DagNode* NarrowingSearchState::getNarrowedDag(DagNode*& replacement) const { Rule* r = getRule(); Substitution& s = unificationProblem->getSolution(); replacement = r->getRhsBuilder().construct(s); int nrSlots = r->getModule()->getMinimumSubstitutionSize(); // // Need to clear unused entries in solution that we may have touched to avoid confusing // unification algorithm. // for (int i = r->getNrProtectedVariables(); i < nrSlots; ++i) s.bind(i,0); return rebuildAndInstantiateDag(replacement, s, nrSlots, nrSlots + variableInfo.getNrVariables() - 1); } const Substitution& NarrowingSearchState::getSubstitution() const { return unificationProblem->getSolution(); } maude-3.1/src/Higher/matchSearchState.hh0000644000175200017520000000271113576050635015151 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for searching for matches within a DAG. // #ifndef _matchSearchState_hh_ #define _matchSearchState_hh_ #include "searchState.hh" class MatchSearchState : public SearchState { NO_COPYING(MatchSearchState); public: enum Flags { GC_PATTERN = 16 }; MatchSearchState(RewritingContext* context, Pattern* pattern, int flags = 0, int minDepth = 0, int maxDepth = -1); ~MatchSearchState(); Pattern* getPattern() const; bool findNextMatch(); private: Pattern* const pattern; bool firstMatch; }; inline Pattern* MatchSearchState::getPattern() const { return pattern; } #endif maude-3.1/src/Higher/variantUnificationProblem.cc0000644000175200017520000002041613730306264017066 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class NarrowingUnificationProblem. // // utility stuff #include "macros.hh" #include "vector.hh" #include "allSat.hh" #include "bddUser.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "variable.hh" #include "higher.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "extensionInfo.hh" // core class definitions #include "module.hh" #include "sort.hh" #include "freshVariableGenerator.hh" #include "preEquation.hh" #include "substitution.hh" #include "narrowingVariableInfo.hh" #include "rewritingContext.hh" // variable class definitions #include "variableDagNode.hh" #include "variableTerm.hh" // higher class definitions #include "variantSearch.hh" #include "filteredVariantUnifierSearch.hh" #include "variantUnificationProblem.hh" VariantUnificationProblem::VariantUnificationProblem(RewritingContext* context, const Vector& blockerDags, PreEquation* preEquation, DagNode* target, const NarrowingVariableInfo& variableInfo, FreshVariableGenerator* freshVariableGenerator, int disallowedVariableFamily, int variantFlags) : context(context), preEquation(preEquation), variableInfo(variableInfo), freshVariableGenerator(freshVariableGenerator) { //DebugAlways("variantFlags = " << variantFlags); DebugAdvisory(Tty(Tty::RED) << "VariantUnificationProblem(): lhsDag = " << preEquation->getLhsDag() << " target = " << target << Tty(Tty::RESET)); // // We assume that the variables in the target term have been indexed using variableInfo // such that the indices start above those used in preEquation. // // The unifiers we want to generate will be substitutions using this scheme into // dags over fresh variables from a family other than disallowedVariableFamily. // Module* module = preEquation->getModule(); // // Create a dag correspond to < preEquation lhs, target > tuple. // Vector args(2); args[0] = preEquation->getLhsDag(); args[1] = target; ConnectedComponent* range = target->symbol()->rangeComponent(); Assert(range == args[0]->symbol()->rangeComponent(), "kind mismatch"); Vector domain(2); domain[0] = range; domain[1] = range; Symbol* tupleSymbol = module->createInternalTupleSymbol(domain, range); DagNode* unificationDag = tupleSymbol->makeDagNode(args); // // VariantSearch is responsible for deleting this new rewriting context. // newContext = context->makeSubcontext(unificationDag); // // VariantSearch actually does the work. It can trigger garbage collection // via reduce so we need to set substitutionSize to ensure solution won't // be read. // substitutionSize = 0; variantSearch = (variantFlags & FILTER_VARIANT_UNIFIERS) ? new FilteredVariantUnifierSearch(newContext, blockerDags, freshVariableGenerator, variantFlags, disallowedVariableFamily) : new VariantSearch(newContext, blockerDags, freshVariableGenerator, variantFlags | VariantSearch::UNIFICATION_MODE, disallowedVariableFamily); firstTargetSlot = module->getMinimumSubstitutionSize(); // first slot after variables reserved for preEquation substitutionSize = firstTargetSlot + variableInfo.getNrVariables(); // add the number of variables in target solution = new Substitution(substitutionSize); solution->clear(substitutionSize); // so GC doesn't barf nrPreEquationVariables = preEquation->getNrRealVariables(); } VariantUnificationProblem::~VariantUnificationProblem() { delete solution; delete variantSearch; // will delete newContext } void VariantUnificationProblem::markReachableNodes() { // // Protect our current solution from garbage collection. // for (int i = 0; i < substitutionSize; i++) { DagNode* d = solution->value(i); if (d != 0) d->mark(); } } bool VariantUnificationProblem::findNextUnifier() { bool moreUnifiers = variantSearch->findNextUnifier(); context->transferCountFrom(*newContext); if (!moreUnifiers) return false; // // We got a unifier; we need to translate it into the indices used in preEquations and // variableInfo. Also we generate fresh variables from the appropriate family with // suitable variable indices for any variables mentioned in preEquation or variableInfo // but not mentioned in the unifier. // const Vector& unifier = variantSearch->getCurrentUnifier(nrFreeVariables, variableFamily); // // Start by zeroing out any old substitution. // solution->clear(substitutionSize); // // Go through bindings in unifier, inserting them into substitution. // const NarrowingVariableInfo& unifierVariableInfo = variantSearch->getVariableInfo(); // // We can't take the number of unifier variables from unifierVariableInfo because // this also includes variables from blocker terms that may not have bindings. // int nrUnifierVariables = unifier.size(); DebugAdvisory("variant unifier:\n"); for (int i = 0; i < nrUnifierVariables; ++i) { // // Get the variable that has been bound. // VariableDagNode* variable = unifierVariableInfo.index2Variable(i); // // See if it belongs to the target's variableInfo. // int indexInOriginalProblem = variableInfo.variable2IndexNoAdd(variable); if (indexInOriginalProblem == NONE) indexInOriginalProblem = preEquation->variable2Index(variable); // from preEquation else indexInOriginalProblem += firstTargetSlot; // from target; move to post preEquation indices solution->bind(indexInOriginalProblem, unifier[i]); DebugAdvisory(" " << (DagNode*) variable << " |-> " << unifier[i] << " using index " << indexInOriginalProblem); } // // Go through the substitution, binding any unbound variables to fresh variables. // for (int i = 0; i < substitutionSize; ++i) { // // Either a slot belongs to the preEquation, or to the target's variableInfo // (whether or not the corresponding variable actually appears in the target), or // to no man's land in between these two blocks of slots. No man's land is // left zero'd out. // if (i < nrPreEquationVariables) { // // Variable belongs to the preEquation. // if (solution->value(i) == 0) { // // Not bound by VariantSearch so it must be a preEquation variable // that doesn't occur in the lhs. // Symbol* baseSymbol = preEquation->index2Variable(i)->symbol(); int name = freshVariableGenerator->getFreshVariableName(nrFreeVariables, variableFamily); VariableDagNode* v = new VariableDagNode(baseSymbol, name, nrFreeVariables); solution->bind(i, v); ++nrFreeVariables; } } else if (i >= firstTargetSlot) { // // Variable belongs to dag being narrowed. // if (solution->value(i) == 0) { // // Not bound by VariantSearch so it must exist only in a larger dag being // narrowed and not in the subdag being unified. // int indexInTarget = i - firstTargetSlot; Symbol* baseSymbol = variableInfo.index2Variable(indexInTarget)->symbol(); int name = freshVariableGenerator->getFreshVariableName(nrFreeVariables, variableFamily); VariableDagNode* v = new VariableDagNode(baseSymbol, name, nrFreeVariables); solution->bind(i, v); ++nrFreeVariables; } } } return true; } maude-3.1/src/Higher/variantFolder.hh0000755000175200017520000001264213727051457014536 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2012-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for folding variants. We keep a collection of variants that are most general // so far and test each inserted variant so that caller knows whether to keep exanding // the variant. // // To simpify the code we treat a variant as a vector of dags; we don't distinguish // between the term and the substitution since both will be checked for subsumption. // // The caller gives each variant an index, and for each new variant gives the index // of the parent variant or NONE if it is the root variant search. A variants index // is required to be larger than that of its parent. // When an existing variant is ejected by the arrival of a new variant that is more // general, all of its descendents are likewise ejected, just as if the search that // has already taken place had been pruned. // #ifndef _variantFolder_hh_ #define _variantFolder_hh_ #include #include "simpleRootContainer.hh" #include "variableInfo.hh" class VariantFolder : private SimpleRootContainer { NO_COPYING(VariantFolder); public: VariantFolder(); ~VariantFolder(); bool insertVariant(const Vector& variant, int index, int parentIndex, int variableFamily); // // Returns the internal index of the next surviving variant or // NONE if there are no more. // int findNextSurvivingVariant(); // // Get the details of the variant found by findNextSurvivingVariant() // Can only be safely called after findNextSurvivingVariant() has return // an index other than NONE and before an intervening call to insertVariant() // has taken place (which could purge it). parentNumber and moreInLayer can // be passed null pointers if this information isn't wanted. // const Vector& getCurrentVariant(int& nrFreeVariables, int& variableFamily, int* parentNumber = 0, bool* moreInLayer = 0); // // Same requirements as above; just returns the variant size (so caller can // determine if it is a variant unifier). // int getCurrentVariantSize(); // // Returns 0 if variant wasn't retained or was later purged. // const Vector* getVariant(int index) const; // // Check if variant is subsumed by existing variants without inserting it // or using it to evict older variants. // bool isSubsumed(const Vector& variant) const; // // For variant matching. // // This is needed in order to make the indices in the variant substitution // dags agree with those used by the matching automata. // void prepareForVariantMatching(); // // We start looking at variants with index > indexOfLastUsedVariant // (could be -1 to look at the first variant), to find a potential match // against subject. On success, indexOfLastUsedVariant is updated to the // index of the variant we used, and a (partial) match and unresolved // matching subproblem (could be null) is returned, along with a pointer // to the variant and a pointer to the internal VariableInfo object. // Responsibility for deleting matcher and subproblem is passed to the caller. // On failure a null pointer is returned, matcher is set to // 0 and subproblem and variableInfo are untouched. // const Vector* findNextVariantThatMatches(int& indexOfLastUsedVariant, DagNode* subject, const VariableInfo*& variableInfo, RewritingContext*& matcher, Subproblem*& subproblem); private: struct RetainedVariant { RetainedVariant(const Vector original); ~RetainedVariant(); void dump(); VariableInfo variableInfo; int nrVariables; // number of variables needed for matching; includes any abstraction variables int nrFreeVariables; // number of variables occuring in variant int variableFamily; int parentIndex; Vector variant; Vector terms; Vector matchingAutomata; int layerNumber; }; typedef map RetainedVariantMap; void markReachableNodes(); bool subsumes(const RetainedVariant* retainedVariant, const Vector& variant) const; RetainedVariantMap mostGeneralSoFar; RetainedVariantMap::const_iterator currentVariant; int currentVariantIndex; }; inline const Vector* VariantFolder::getVariant(int index) const { RetainedVariantMap::const_iterator i = mostGeneralSoFar.find(index); if (i == mostGeneralSoFar.end()) return 0; // purged return &(i->second->variant); } inline int VariantFolder::getCurrentVariantSize() { Assert(mostGeneralSoFar.find(currentVariantIndex) == currentVariant, "current variant purged"); return currentVariant->second->variant.size(); } #endif maude-3.1/src/Higher/temporalSymbol.cc0000644000175200017520000001322513576050735014730 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class TemporalSymbol. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "temporal.hh" #include "interface.hh" #include "core.hh" #include "freeTheory.hh" #include "builtIn.hh" #include "higher.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "term.hh" // core class definitions #include "dagArgumentIterator.hh" #include "rewritingContext.hh" #include "symbolMap.hh" // free theory class definitions #include "freeDagNode.hh" // built in class definitions #include "bindingMacros.hh" // temporal class definitions #include "logicFormula.hh" // higher class definitions #include "temporalSymbol.hh" TemporalSymbol::TemporalSymbol(int id, int arity) : FreeSymbol(id, arity) { trueSymbol = 0; falseSymbol = 0; notSymbol = 0; nextSymbol = 0; andSymbol = 0; orSymbol = 0; untilSymbol = 0; releaseSymbol = 0; } bool TemporalSymbol::attachSymbol(const char* purpose, Symbol* symbol) { BIND_SYMBOL(purpose, symbol, trueSymbol, Symbol*); BIND_SYMBOL(purpose, symbol, falseSymbol, Symbol*); BIND_SYMBOL(purpose, symbol, notSymbol, Symbol*); BIND_SYMBOL(purpose, symbol, nextSymbol, Symbol*); BIND_SYMBOL(purpose, symbol, andSymbol, Symbol*); BIND_SYMBOL(purpose, symbol, orSymbol, Symbol*); BIND_SYMBOL(purpose, symbol, untilSymbol, Symbol*); BIND_SYMBOL(purpose, symbol, releaseSymbol, Symbol*); return FreeSymbol::attachSymbol(purpose, symbol); } void TemporalSymbol::copyAttachments(Symbol* original, SymbolMap* map) { TemporalSymbol* orig = safeCast(TemporalSymbol*, original); COPY_SYMBOL(orig, trueSymbol, map, Symbol*); COPY_SYMBOL(orig, falseSymbol, map, Symbol*); COPY_SYMBOL(orig, notSymbol, map, Symbol*); COPY_SYMBOL(orig, nextSymbol, map, Symbol*); COPY_SYMBOL(orig, andSymbol, map, Symbol*); COPY_SYMBOL(orig, orSymbol, map, Symbol*); COPY_SYMBOL(orig, untilSymbol, map, Symbol*); COPY_SYMBOL(orig, releaseSymbol, map, Symbol*); FreeSymbol::copyAttachments(original, map); } void TemporalSymbol::getSymbolAttachments(Vector& purposes, Vector& symbols) { APPEND_SYMBOL(purposes, symbols, trueSymbol); APPEND_SYMBOL(purposes, symbols, falseSymbol); APPEND_SYMBOL(purposes, symbols, notSymbol); APPEND_SYMBOL(purposes, symbols, nextSymbol); APPEND_SYMBOL(purposes, symbols, andSymbol); APPEND_SYMBOL(purposes, symbols, orSymbol); APPEND_SYMBOL(purposes, symbols, untilSymbol); APPEND_SYMBOL(purposes, symbols, releaseSymbol); FreeSymbol::getSymbolAttachments(purposes, symbols); } int TemporalSymbol::build(LogicFormula& formula, DagNodeSet& propositions, DagNode* dagNode) const { Symbol* s = dagNode->symbol(); if (s == trueSymbol) return formula.makeOp(LogicFormula::LTL_TRUE); if (s == falseSymbol) return formula.makeOp(LogicFormula::LTL_FALSE); if (s == notSymbol || s == nextSymbol) { LogicFormula::Op op = (s == notSymbol) ? LogicFormula::NOT : LogicFormula::NEXT; DagArgumentIterator i(*dagNode); if (i.valid()) { int a = build(formula, propositions, i.argument()); if (a != NONE && (op != LogicFormula::NOT || formula.getOp(a) == LogicFormula::PROPOSITION)) return formula.makeOp(op, a); } return NONE; } if (s == andSymbol || s == orSymbol) { LogicFormula::Op op = (s == andSymbol) ? LogicFormula::AND : LogicFormula::OR; DagArgumentIterator i(*dagNode); if (i.valid()) { int a = build(formula, propositions, i.argument()); i.next(); if (a != NONE && i.valid()) { int b; for (;;) { b = build(formula, propositions, i.argument()); if (b == NONE) break; a = formula.makeOp(op, a, b); i.next(); if (!(i.valid())) return a; } } } return NONE; } if (s == untilSymbol || s == releaseSymbol) { LogicFormula::Op op = (s == untilSymbol) ? LogicFormula::UNTIL : LogicFormula::RELEASE; DagArgumentIterator i(*dagNode); if (i.valid()) { int a = build(formula, propositions, i.argument()); i.next(); if (a != NONE && i.valid()) { int b = build(formula, propositions, i.argument()); if (b != NONE) return formula.makeOp(op, a, b); } } return NONE; } int propIndex = propositions.dagNode2Index(dagNode); if (propIndex == NONE) { propIndex = propositions.cardinality(); propositions.insert(dagNode); } return formula.makeProp(propIndex); } DagNode* TemporalSymbol::conjunct(Vector& args) const { int last = args.length() - 1; if (last < 0) return trueSymbol->makeDagNode(args); static Vector pair(2); pair[1] = args[last]; for (int i = last - 1; i >= 0; --i) { pair[0] = args[i]; pair[1] = andSymbol->makeDagNode(pair); } return pair[1]; } maude-3.1/src/Higher/equalityConditionFragment.hh0000755000175200017520000000446613576050635017132 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for condition fragment supporting equality test. // #ifndef _equalityConditionFragment_hh_ #define _equalityConditionFragment_hh_ #include "conditionFragment.hh" #include "rhsBuilder.hh" class EqualityConditionFragment : public ConditionFragment { NO_COPYING(EqualityConditionFragment); public: EqualityConditionFragment(Term* lhs, Term* rhs); ~EqualityConditionFragment(); void check(VariableInfo& varInfo, NatSet& boundVariables); void preprocess(); void compileBuild(VariableInfo& variableInfo, TermBag& availableTerms); void compileMatch(VariableInfo& variableInfo, NatSet& boundUniquely); bool solve(bool findFirst, RewritingContext& solution, Stack& state); Term* getLhs() const; Term* getRhs() const; void normalize(bool full); // // This function exists to enable equality condition fragments to have // a special operational semantics under rewriting modulo SMT. // void buildInstances(Substitution& substitution, DagNode*& lhs, DagNode*& rhs); #ifdef DUMP void dump(ostream& s, const VariableInfo& variableInfo, int indentLevel); #endif private: Term* lhs; Term* rhs; RhsBuilder builder; int lhsIndex; int rhsIndex; }; inline Term* EqualityConditionFragment::getLhs() const { return lhs; } inline Term* EqualityConditionFragment::getRhs() const { return rhs; } inline void EqualityConditionFragment::normalize(bool full) { lhs = lhs->normalize(full); rhs = rhs->normalize(full); } #endif maude-3.1/src/Higher/variantNarrowingSearchState.cc0000755000175200017520000002675713712101662017406 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class VariantNarrowingSearchState. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "variable.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "rhsAutomaton.hh" #include "lhsAutomaton.hh" #include "subproblem.hh" // core class definitions #include "rewritingContext.hh" #include "equation.hh" #include "freshVariableGenerator.hh" #include "dagArgumentIterator.hh" #include "extensionInfo.hh" // variable class definitions #include "variableDagNode.hh" // higher class definitions #include "narrowingUnificationProblem.hh" #include "variantNarrowingSearchState.hh" VariantNarrowingSearchState::VariantNarrowingSearchState(RewritingContext* context, const Vector& variantSubstitution, const Vector& blockerDags, FreshVariableGenerator* freshVariableGenerator, int variableFamily, const NarrowingVariableInfo& originalVariables, bool unificationMode) : PositionState(context->root(), 0, 0, UNBOUNDED), context(context), variantSubstitution(variantSubstitution), blockerDags(blockerDags), freshVariableGenerator(freshVariableGenerator), originalVariables(originalVariables), module(context->root()->symbol()->getModule()), blockerSubstitution(originalVariables.getNrVariables()) { DebugEnter("variant term = " << context->root()); // // The variant term is contained in the context. // The variant substitution could be empty vector if we don't care about it. // The blocker substitution can have entries for variables that are peculiar to the blocker dags. // incompleteFlag = false; if (originalVariables.getNrVariables() > 0) { // // Make sure that all variables that appeared in the original problem, including // those that only appear in blocker dags are cleared. // blockerSubstitution.clear(originalVariables.getNrVariables()); } // // Index all variables occuring in the variant term and the variant substitution. // These VariableDagNodes are coming from dags that are assumed to be protected by the // caller and thus we assume are safe from garbage collection. // // Indexing the variables will convert any persistent representations into // regular representations suitable for unification and instantiation. // // We allocate indices above any that may be used by variant equations in the module. // int firstTargetSlot = module->getMinimumSubstitutionSize(); context->root()->indexVariables(variableInfo, firstTargetSlot); // // Only variables that occur in the term part of the variant are considered interesting. // int nrInterestingVariables = variableInfo.getNrVariables(); // // Now we can index the variant substitution. // for (DagNode* d : variantSubstitution) d->indexVariables(variableInfo, firstTargetSlot); // // We filter unifiers by subsumption on interesting variables. // unifiers = new UnifierFilter(firstTargetSlot, nrInterestingVariables); // // Generate all unifiers between non-variable subterms in our variant term and variant // equations in our module and insert them in our unifier filter. // if (unificationMode) { // // If we are in unification mode, get the lhs and rhs from under the pairing // symbol and try to unify them. // DagArgumentIterator a(context->root()); Assert(a.valid(), "bad 1st argument in unification mode"); DagNode* lhs = a.argument(); a.next(); Assert(a.valid(), "bad 2nd argument in unification mode"); //for (int i = 0; i < variableInfo.getNrVariables(); ++i) // cout << "var index " << i << " is " << (DagNode*) variableInfo.index2Variable(i) << endl; NarrowingUnificationProblem* unificationProblem = new NarrowingUnificationProblem(lhs, a.argument(), variableInfo, freshVariableGenerator, variableFamily); collectUnifiers(unificationProblem, 0, NONE); incompleteFlag |= unificationProblem->isIncomplete(); delete unificationProblem; } while (findNextPosition()) { DagNode* d = getDagNode(); //cout << "looking at subterm: " << d << endl; if (dynamic_cast(d) == 0) // only consider non-variable positions { int positionIndex = getPositionIndex(); //cout << "has position " << positionIndex << endl; // // If the top symbol is unstable, we need to consider all the equations, // rather than just the ones indexed under the top symbol. // Symbol* s = d->symbol(); const Vector& equations = s->isStable() ? s->getEquations() : module->getEquations(); const ConnectedComponent* topComponent = s->rangeComponent(); for (Equation* eq : equations) { if (eq->isVariant() && // only consider equations with the variant attribute eq->getLhs()->getComponent() == topComponent) // and with lhs in the correct component { NarrowingUnificationProblem* unificationProblem = new NarrowingUnificationProblem(eq, d, variableInfo, freshVariableGenerator, variableFamily); collectUnifiers(unificationProblem, positionIndex, eq->getIndexWithinModule()); incompleteFlag |= unificationProblem->isIncomplete(); delete unificationProblem; } } } } } void VariantNarrowingSearchState::collectUnifiers(NarrowingUnificationProblem* unificationProblem, int positionIndex, int equationIndex) { int firstTargetSlot = module->getMinimumSubstitutionSize(); int nrInterestingVariables = variableInfo.getNrVariables(); long nrUnifiersFound = 0; while (unificationProblem->findNextUnifier()) { ++nrUnifiersFound; if (globalVerboseFlag) { // // Because this can take a very long time, if the user // has switch on the verbose flag, we print a message // every thousand unifiers we look at, so they know something // is happening. // if (nrUnifiersFound >= 1000 && (nrUnifiersFound % 1000) == 0) { cout << "Variant Narrowing, term = " << context->root(); if (equationIndex == NONE) cout << "(unifying of subterms) for variant unfication\n"; else cout << ", subterm = " << getDagNode() << " equation = " << module->getEquations()[equationIndex] << '\n'; cout << "number of unifiers seen = " << nrUnifiersFound << endl; } } const Substitution& solution = unificationProblem->getSolution(); // // Check for reducibility on interesting variables. // for (int j = 0; j < nrInterestingVariables; ++j) { DagNode* d = solution.value(firstTargetSlot + j); d->computeTrueSort(*context); // needed for matching // // If a unifier fails this check, since anything it might have subsumed will be // an instance of it and also fail the check, we lose nothing by tossing it now. // if (d->reducibleByVariantEquation(*context)) goto nextUnifier; } unifiers->insertUnifier(solution, positionIndex, equationIndex); nextUnifier: ; } } VariantNarrowingSearchState::~VariantNarrowingSearchState() { delete unifiers; } bool VariantNarrowingSearchState::findNextVariant(DagNode*& newVariantTerm, Vector& newVariantSubstitution) { int variantSubstitutionSize = variantSubstitution.size(); newVariantSubstitution.resize(variantSubstitutionSize); Substitution* survivor; int positionIndex; int equationIndex; while (unifiers->getNextSurvivingUnifier(survivor, positionIndex, equationIndex)) { // // Compute accumulated substitution and check for reducibility. // for (int i = 0; i < variantSubstitutionSize; ++i) { DagNode* d = variantSubstitution[i]->instantiate(*survivor); if (d == 0) d = variantSubstitution[i]; // no change d->computeTrueSort(*context); // also handles theory normalization if (d->reducibleByVariantEquation(*context)) goto nextUnifier; newVariantSubstitution[i] = d; blockerSubstitution.bind(i, d); } // // Check if this variant causes any of the blocker dags to become reducible. // { for (DagNode* b : blockerDags) { DebugInfo("checking blocker dag " << b); DagNode* d = b->instantiate(blockerSubstitution); if (d != 0) { DebugInfo("instantiated to " << d); d->computeTrueSort(*context); // also handles theory normalization if (d->reducibleByVariantEquation(*context)) { DebugInfo("blocked"); goto nextUnifier; } } DebugInfo("irreducible"); } } if (equationIndex == NONE) { // // Virtual rewrite; this means we're in unificationMode and just found a // solution to the variant unification problem. // newVariantTerm = 0; return true; } { Equation* eq = module->getEquations()[equationIndex]; // // Variant equations are compiled in such a way that all variable bindings // are copied upto eager. // DagNode* replacement = eq->getRhsBuilder().construct(*survivor); // // Any slots we touched while building at right hand instance we don't care // about; they occur after the binding to the variables in the equation and // before the bindings to the variables in the original variant. // int firstVariantVariable = module->getMinimumSubstitutionSize(); int lastVariantVariable = firstVariantVariable + variableInfo.getNrVariables() - 1; // // rebuildAndInstantiateDag() will copy upto eager the unifier bindings. // newVariantTerm = rebuildAndInstantiateDag(replacement, *survivor, firstVariantVariable, lastVariantVariable, positionIndex); // // However we still need to clear those slots because the unifier belongs to // the UnifierFilter that will do GC protection on it. // // The variables belonging to the equation are in slots // 0,..., eq->getNrRealVariables() - 1 // Protected variables needed for matching are in slots // eq->getNrRealVariables(),..., eq->getNrProtectedVariables() - 1 // Construction slots start from eq->getNrProtectedVariables() and must end // by firstVariantVariable - 1 // for (int i = eq->getNrProtectedVariables(); i < firstVariantVariable; ++i) survivor->bind(i, 0); if (RewritingContext::getTraceStatus()) { context->traceVariantNarrowingStep(eq, variantSubstitution, getDagNode(positionIndex), replacement, variableInfo, survivor, newVariantTerm, newVariantSubstitution, originalVariables); if (context->traceAbort()) return false; } context->incrementVariantNarrowingCount(); return true; } nextUnifier: ; } return false; } maude-3.1/src/Higher/variantFolder.cc0000755000175200017520000003143513734516616014526 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class VariantFolder. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "term.hh" #include "lhsAutomaton.hh" #include "subproblem.hh" // core class definitions #include "rewritingContext.hh" #include "subproblemAccumulator.hh" #include "variableInfo.hh" // higher class definitions #include "variantFolder.hh" VariantFolder::VariantFolder() { currentVariantIndex = -1; } VariantFolder::~VariantFolder() { for (auto& i : mostGeneralSoFar) delete i.second; } void VariantFolder::markReachableNodes() { for (auto& i : mostGeneralSoFar) { for (auto& j : i.second->variant) j->mark(); } } bool VariantFolder::isSubsumed(const Vector& variant) const { for (auto& i : mostGeneralSoFar) { if (subsumes(i.second, variant)) return true; } return false; } bool VariantFolder::insertVariant(const Vector& variant, int index, int parentIndex, int variableFamily) { //cerr << " i" << index << "p" << parentIndex; // // First we check if it is subsumed by one of the existing variants. // if (isSubsumed(variant)) { DebugAdvisory("new variant subsumed"); return false; } DebugAdvisory("new variant added"); // // Compile a set of matching automata for this variant. // RetainedVariant* newVariant = new RetainedVariant(variant); // // Compute ancestor set. // set ancestors; for (int i = parentIndex; i != NONE; ) { ancestors.insert(i); RetainedVariantMap::const_iterator j = mostGeneralSoFar.find(i); Assert(j != mostGeneralSoFar.end(), "couldn't find variant with index " << i); i = j->second->parentIndex; } // // See if this variant can evict an existing variant. // set existingVariantsSubsumed; RetainedVariantMap::iterator i = mostGeneralSoFar.begin(); while (i != mostGeneralSoFar.end()) { RetainedVariantMap::iterator next = i; ++next; if (ancestors.find(i->first) == ancestors.end()) // can't mess with ancestors of new variant { RetainedVariant* potentialVictim = i->second; if (existingVariantsSubsumed.find(potentialVictim->parentIndex) != existingVariantsSubsumed.end()) { // // Our parent was subsumed so we are also subsumed. // DebugAdvisory("new variant evicted descendent of an older variant " << i->first); existingVariantsSubsumed.insert(i->first); delete potentialVictim; mostGeneralSoFar.erase(i); } else if (subsumes(newVariant, potentialVictim->variant)) { // // Direct subsumption by new variant. // DebugAdvisory("new variant evicted an older variant " << i->first); existingVariantsSubsumed.insert(i->first); delete potentialVictim; mostGeneralSoFar.erase(i); } } i = next; } // // Add to the mostGeneralSoFar collection of variants. // newVariant->parentIndex = parentIndex; newVariant->variableFamily = variableFamily; newVariant->layerNumber = 0; if (parentIndex != NONE) { RetainedVariantMap::iterator parentVariant = mostGeneralSoFar.find(parentIndex); Assert(parentVariant != mostGeneralSoFar.end(), "parent " << parentIndex << " of variant " << index << " has been deleted"); newVariant->layerNumber = parentVariant->second->layerNumber + 1; } mostGeneralSoFar.insert(RetainedVariantMap::value_type(index, newVariant)); return true; } bool VariantFolder::subsumes(const RetainedVariant* retainedVariant, const Vector& variant) const { int nrDagsToCheck = variant.size(); int nrDagsInRetainedVariant = retainedVariant->matchingAutomata.size(); if (nrDagsToCheck != nrDagsInRetainedVariant) return false; // different sized variants are trivially incomparable MemoryCell::okToCollectGarbage(); // otherwise we have huge accumulation of junk from matching // // We check if retained variant is at least as general as a new variant. // int nrVariablesToUse = retainedVariant->nrVariables; int nrSlotsToAllocate = nrVariablesToUse; if (nrSlotsToAllocate == 0) nrSlotsToAllocate = 1; // substitutions subject to clear() must always have at least one slot RewritingContext matcher(nrSlotsToAllocate); matcher.clear(nrVariablesToUse); SubproblemAccumulator subproblems; for (int i = nrDagsToCheck - 1; i >= 0; --i) { Subproblem* subproblem; DebugAdvisory("Considering dag " << i); DebugAdvisory("Pattern has " << retainedVariant->variant[i]); DebugAdvisory("Pattern term is " << retainedVariant->terms[i]); DebugAdvisory("Subject has " << variant[i]); if (retainedVariant->matchingAutomata[i]->match(variant[i], matcher, subproblem)) subproblems.add(subproblem); else { DebugAdvisory("non subsumption declared on dag " << i); return false; } } Subproblem* final = subproblems.extractSubproblem(); if (final == 0) { DebugAdvisory("no subproblem so declaring subsumption"); return true; } bool result = final->solve(true, matcher); DebugAdvisory("solve result = " << result); delete final; return result; } int VariantFolder::findNextSurvivingVariant() { // // Look for the next variant that has an index larger than the current varaint index. // currentVariant = mostGeneralSoFar.upper_bound(currentVariantIndex); if (currentVariant == mostGeneralSoFar.end()) return NONE; // no variants available so change nothing currentVariantIndex = currentVariant->first; return currentVariantIndex; } const Vector& VariantFolder::getCurrentVariant(int& nrFreeVariables, int& variableFamily, int* parentNumber, bool* moreInLayer) { Assert(mostGeneralSoFar.find(currentVariantIndex) == currentVariant, "current variant purged"); nrFreeVariables = currentVariant->second->nrFreeVariables; variableFamily = currentVariant->second->variableFamily; // // Optional information - non-null pointers means caller wants this information // returned. // if (parentNumber) *parentNumber = currentVariant->second->parentIndex; // variant's parent (or NONE if root) if (moreInLayer) { // // Flag to indicate whether next call to findNextSurvivingVariant() // will find another variant in the same layer. // RetainedVariantMap::const_iterator nextVariant = mostGeneralSoFar.upper_bound(currentVariantIndex); *moreInLayer = (nextVariant != mostGeneralSoFar.end() && nextVariant->second->layerNumber == currentVariant->second->layerNumber); } return currentVariant->second->variant; } void VariantFolder::prepareForVariantMatching() { // // The VariableDagNodes in RetainedVariant::variant should have been indexed // when we were looking for unifiers to do variant narrowing steps. But now we // want to reindex them using the scheme that was used during the generation of // RetainedVariant::matchingAutomata so that we can compute instantiations // of them by matchers. Because the indexing schemes depend on the order the // variant term and variant substitution were indexed as well as any peculiarities // of indexing dags with NarrowingVariableInfo vs indexing terms with VariableInfo, // we can't rely on the indexing schemes being identical. // for (auto& i : mostGeneralSoFar) { // // We don't bother reindexing the term part of the variant, // just the substitution. // int nrBindings = i.second->variant.size() - 1; for (int j = 0; j < nrBindings; ++j) i.second->variant[j]->indexVariables(i.second->variableInfo); } } const Vector* VariantFolder::findNextVariantThatMatches(int& indexOfLastUsedVariant, DagNode* subject, const VariableInfo*& variableInfo, RewritingContext*& matcher, Subproblem*& subproblem) { for (RetainedVariantMap::const_iterator i = mostGeneralSoFar.upper_bound(indexOfLastUsedVariant); i != mostGeneralSoFar.end(); ++i) { const RetainedVariant* retainedVariant = i->second; int termPartIndex = retainedVariant->matchingAutomata.size() - 1; // // We use the number of variables in the whole variant, even // though we're only going to match the term part. In particular there // may exist variables in the bindings of the substitution part that // don't appear in the term part (because of nonregular equations) and // that won't be bound by this matchings. // int nrVariablesToUse = retainedVariant->nrVariables; int nrSlotsToAllocate = nrVariablesToUse; if (nrSlotsToAllocate == 0) nrSlotsToAllocate = 1; // substitutions subject to clear() must always have at least one slot matcher = new RewritingContext(nrSlotsToAllocate); matcher->clear(nrVariablesToUse); // // // if (retainedVariant->matchingAutomata[termPartIndex]->match(subject, *matcher, subproblem)) { indexOfLastUsedVariant = i->first; variableInfo = &(retainedVariant->variableInfo); // // Responsibility for deleting matcher and any subproblem generated // is passed to caller. // return &(retainedVariant->variant); } delete matcher; matcher = 0; } return 0; } VariantFolder::RetainedVariant::RetainedVariant(const Vector original) : variant(original), terms(original.size()), matchingAutomata(original.size()) { int nrDags = original.size(); for (int i = 0; i < nrDags; ++i) { DagNode* d = original[i]; Term* t = d->symbol()->termify(d); t = t->normalize(true); // needed even though we should have a normal form, in order to set hash value t->indexVariables(variableInfo); t->symbol()->fillInSortInfo(t); t->analyseCollapses(); terms[i] = t; } nrFreeVariables = variableInfo.getNrRealVariables(); // // Variant dags are compiled and matched in reverse order because the term part of the variant // will be at the end, and it is most likely to cause early match failure. // for (int i = nrDags - 1; i >= 0; --i) { Term* t = terms[i]; // // Accumuate the context variables for this term. // for (int j = 0; j < nrDags; ++j) { if (j != i) { // // Variables from other terms are in our context // t->addContextVariables(terms[j]->occursBelow()); } } // // Recursively compute the context variables for each subterm. // t->determineContextVariables(); // // Insert abstraction variables for subterms that could collapse into // their enclosing theory; such subterms will need to be treated like // variables and then their binding subject to an extra match. // t->insertAbstractionVariables(variableInfo); } // // This may also include some abstraction variables. // nrVariables = variableInfo.getNrProtectedVariables(); // // Now we know how many variables we will need to save in branching, we // can safely compile. // NatSet boundUniquely; bool subproblemLikely; for (int i = nrDags - 1; i >= 0; --i) { Term* t = terms[i]; DebugAdvisory("Compiling " << t); matchingAutomata[i] = t->compileLhs(false, variableInfo, boundUniquely, subproblemLikely); //matchingAutomata[i]->dump(cerr, variableInfo); } DebugInfo("compiled retained variant has " << variableInfo.getNrRealVariables() << " real variables"); DebugInfo("compiled retained variant has " << variableInfo.getNrProtectedVariables() << " protected variables"); } VariantFolder::RetainedVariant::~RetainedVariant() { int nrTerms = terms.size(); for (int i = 0; i < nrTerms; ++i) { delete matchingAutomata[i]; terms[i]->deepSelfDestruct(); } } void VariantFolder::RetainedVariant::dump() { int nrTerms = terms.size(); for (int i = 0; i < nrTerms; ++i) { cerr << terms[i] << endl; } } maude-3.1/src/Higher/narrowingUnificationProblem.hh0000755000175200017520000001162113576050635017451 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2006 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Hacked up version of UnificationProblem to support narrowing. This should ultimately // refactored with UnificationProblem. The reason for having a separate class at the moment is: // // (1) Narrowing unification problems start with a pair of dag nodes rather than a pair of vectors of terms. // (2) Narrowing unification gets its variable info from the rule being used // (3) Narrowing unification uses a non-standard allocation of slots within substitutions: // // (rule variables) (rule rhs temporaries) (unused) (narrowing term variables) // ^ ^ ^ // 0 #protected for rule size of substitution for module // // (4) Narrowing unification allow extra variables that may not occur in the unification problem // but that might occur in the larger term being narrowed. These get fresh variables in the unifiers. // (5) Unifiers should be expressed in terms of "fresh" variables that reuse the variable name and // substitution slot space. // (6) Narrowing unification does not corrupt previously generated unifiers when making the next unifier, at // the cost of more copying if an unsorted unifier corresponds to multiple order-sorted unifiers. // (7) Narrowing unification supports the idea of variables families to avoid clashing variable // names on successive steps of narrowing. // #ifndef _narrowingUnificationProblem_hh_ #define _narrowingUnificationProblem_hh_ #include "variableInfo.hh" #include "substitution.hh" #include "simpleRootContainer.hh" #include "pendingUnificationStack.hh" class NarrowingUnificationProblem : private SimpleRootContainer { NO_COPYING(NarrowingUnificationProblem); public: // // The usual case is that we are unifying the lhs of a rule or variant equation against a DagNode* target. // NarrowingUnificationProblem(PreEquation* preEquation, DagNode* target, const NarrowingVariableInfo& variableInfo, FreshVariableGenerator* freshVariableGenerator, int variableFamily = 0); // // However for variant unification, we also need to unify a pair of DagNode* arguments. // NarrowingUnificationProblem(DagNode* lhs, DagNode* rhs, const NarrowingVariableInfo& variableInfo, FreshVariableGenerator* freshVariableGenerator, int variableFamily); ~NarrowingUnificationProblem(); bool findNextUnifier(); Substitution& getSolution() const; int getNrFreeVariables() const; bool isIncomplete() const; private: void markReachableNodes(); Sort* variableIndexToSort(int index); void bindFreeVariables(); bool findOrderSortedUnifiers(); void classifyVariables(); PreEquation* const preEquation; const int nrPreEquationVariables; const NarrowingVariableInfo& variableInfo; FreshVariableGenerator* const freshVariableGenerator; const int variableFamily; int firstTargetSlot; // start of slots for variables in target int substitutionSize; // initial substitution size (before any fresh variables are added) const SortBdds* sortBdds; // sort computation BDDs for our module UnificationContext* unsortedSolution; // for accumulating solved forms and constructing unsorted unifiers PendingUnificationStack pendingStack; bool viable; // true if problem didn't fail computeSolvedForm() pass NatSet freeVariables; // indices (slots) of unbound variables in unsorted unifier NatSet sortConstrainedVariables; // subset of the above whose sorts are constrained by their appearence in bindings of other variables AllSat* orderSortedUnifiers; // satisfiability problem encoding sorts for order-sorted unifiers Substitution* sortedSolution; // for construction order-sorted unifiers }; inline Substitution& NarrowingUnificationProblem::getSolution() const { return *sortedSolution; } inline int NarrowingUnificationProblem::getNrFreeVariables() const { return freeVariables.size(); } inline bool NarrowingUnificationProblem::isIncomplete() const { //cout << "NarrowingUnificationProblem::isIncomplete() returned " << pendingStack.isIncomplete() << endl; return pendingStack.isIncomplete(); } #endif maude-3.1/src/Higher/Makefile.in0000644000175200017520000031536413741175702013462 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/Higher ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_have_poll.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libhigher_a_AR = $(AR) $(ARFLAGS) libhigher_a_LIBADD = am_libhigher_a_OBJECTS = libhigher_a-rewriteSearchState.$(OBJEXT) \ libhigher_a-matchSearchState.$(OBJEXT) \ libhigher_a-positionState.$(OBJEXT) \ libhigher_a-pattern.$(OBJEXT) \ libhigher_a-searchState.$(OBJEXT) \ libhigher_a-rewriteSequenceSearch.$(OBJEXT) \ libhigher_a-modelCheckerSymbol.$(OBJEXT) \ libhigher_a-stateTransitionGraph.$(OBJEXT) \ libhigher_a-rewriteConditionFragment.$(OBJEXT) \ libhigher_a-assignmentConditionFragment.$(OBJEXT) \ libhigher_a-sortTestConditionFragment.$(OBJEXT) \ libhigher_a-equalityConditionFragment.$(OBJEXT) \ libhigher_a-assignmentConditionState.$(OBJEXT) \ libhigher_a-rewriteConditionState.$(OBJEXT) \ libhigher_a-temporalSymbol.$(OBJEXT) \ libhigher_a-satSolverSymbol.$(OBJEXT) \ libhigher_a-unificationProblem.$(OBJEXT) \ libhigher_a-narrowingSearchState.$(OBJEXT) \ libhigher_a-narrowingUnificationProblem.$(OBJEXT) \ libhigher_a-narrowingSequenceSearch.$(OBJEXT) \ libhigher_a-unifierFilter.$(OBJEXT) \ libhigher_a-variantNarrowingSearchState.$(OBJEXT) \ libhigher_a-variantFolder.$(OBJEXT) \ libhigher_a-variantSearch.$(OBJEXT) \ libhigher_a-variantUnificationProblem.$(OBJEXT) \ libhigher_a-narrowingSearchState2.$(OBJEXT) \ libhigher_a-narrowingFolder.$(OBJEXT) \ libhigher_a-narrowingSearchState3.$(OBJEXT) \ libhigher_a-narrowingSequenceSearch3.$(OBJEXT) \ libhigher_a-irredundantUnificationProblem.$(OBJEXT) \ libhigher_a-variantUnifierFilter.$(OBJEXT) \ libhigher_a-filteredVariantUnifierSearch.$(OBJEXT) \ libhigher_a-variantMatchingProblem.$(OBJEXT) libhigher_a_OBJECTS = $(am_libhigher_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = \ ./$(DEPDIR)/libhigher_a-assignmentConditionFragment.Po \ ./$(DEPDIR)/libhigher_a-assignmentConditionState.Po \ ./$(DEPDIR)/libhigher_a-equalityConditionFragment.Po \ ./$(DEPDIR)/libhigher_a-filteredVariantUnifierSearch.Po \ ./$(DEPDIR)/libhigher_a-irredundantUnificationProblem.Po \ ./$(DEPDIR)/libhigher_a-matchSearchState.Po \ ./$(DEPDIR)/libhigher_a-modelCheckerSymbol.Po \ ./$(DEPDIR)/libhigher_a-narrowingFolder.Po \ ./$(DEPDIR)/libhigher_a-narrowingSearchState.Po \ ./$(DEPDIR)/libhigher_a-narrowingSearchState2.Po \ ./$(DEPDIR)/libhigher_a-narrowingSearchState3.Po \ ./$(DEPDIR)/libhigher_a-narrowingSequenceSearch.Po \ ./$(DEPDIR)/libhigher_a-narrowingSequenceSearch3.Po \ ./$(DEPDIR)/libhigher_a-narrowingUnificationProblem.Po \ ./$(DEPDIR)/libhigher_a-pattern.Po \ ./$(DEPDIR)/libhigher_a-positionState.Po \ ./$(DEPDIR)/libhigher_a-rewriteConditionFragment.Po \ ./$(DEPDIR)/libhigher_a-rewriteConditionState.Po \ ./$(DEPDIR)/libhigher_a-rewriteSearchState.Po \ ./$(DEPDIR)/libhigher_a-rewriteSequenceSearch.Po \ ./$(DEPDIR)/libhigher_a-satSolverSymbol.Po \ ./$(DEPDIR)/libhigher_a-searchState.Po \ ./$(DEPDIR)/libhigher_a-sortTestConditionFragment.Po \ ./$(DEPDIR)/libhigher_a-stateTransitionGraph.Po \ ./$(DEPDIR)/libhigher_a-temporalSymbol.Po \ ./$(DEPDIR)/libhigher_a-unificationProblem.Po \ ./$(DEPDIR)/libhigher_a-unifierFilter.Po \ ./$(DEPDIR)/libhigher_a-variantFolder.Po \ ./$(DEPDIR)/libhigher_a-variantMatchingProblem.Po \ ./$(DEPDIR)/libhigher_a-variantNarrowingSearchState.Po \ ./$(DEPDIR)/libhigher_a-variantSearch.Po \ ./$(DEPDIR)/libhigher_a-variantUnificationProblem.Po \ ./$(DEPDIR)/libhigher_a-variantUnifierFilter.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(libhigher_a_SOURCES) DIST_SOURCES = $(libhigher_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs ChangeLog DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ BUDDY_LIB = @BUDDY_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CVC4_LIB = @CVC4_LIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FLEX = @FLEX@ GCC_LIBS = @GCC_LIBS@ GMP_LIBS = @GMP_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSIGSEGV_LIB = @LIBSIGSEGV_LIB@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TECLA_LIBS = @TECLA_LIBS@ VERSION = @VERSION@ YICES2_LIB = @YICES2_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libhigher.a libhigher_a_CPPFLAGS = \ -I$(top_srcdir)/src/Utility \ -I$(top_srcdir)/src/Interface \ -I$(top_srcdir)/src/Core \ -I$(top_srcdir)/src/Variable \ -I$(top_srcdir)/src/FullCompiler \ -I$(top_srcdir)/src/Temporal \ -I$(top_srcdir)/src/FreeTheory \ -I$(top_srcdir)/src/NA_Theory \ -I$(top_srcdir)/src/BuiltIn \ -I$(top_srcdir)/src/Mixfix libhigher_a_SOURCES = \ rewriteSearchState.cc \ matchSearchState.cc \ positionState.cc \ pattern.cc \ searchState.cc \ rewriteSequenceSearch.cc \ modelCheckerSymbol.cc \ stateTransitionGraph.cc \ rewriteConditionFragment.cc \ assignmentConditionFragment.cc \ sortTestConditionFragment.cc \ equalityConditionFragment.cc \ assignmentConditionState.cc \ rewriteConditionState.cc \ temporalSymbol.cc \ satSolverSymbol.cc \ unificationProblem.cc \ narrowingSearchState.cc \ narrowingUnificationProblem.cc \ narrowingSequenceSearch.cc \ unifierFilter.cc \ variantNarrowingSearchState.cc \ variantFolder.cc \ variantSearch.cc \ variantUnificationProblem.cc \ narrowingSearchState2.cc \ narrowingFolder.cc \ narrowingSearchState3.cc \ narrowingSequenceSearch3.cc \ irredundantUnificationProblem.cc \ variantUnifierFilter.cc \ filteredVariantUnifierSearch.cc \ variantMatchingProblem.cc noinst_HEADERS = \ assignmentConditionFragment.hh \ assignmentConditionState.hh \ equalityConditionFragment.hh \ higher.hh \ matchSearchState.hh \ modelCheckerSymbol.hh \ pattern.hh \ positionState.hh \ rewriteConditionFragment.hh \ rewriteConditionState.hh \ rewriteSearchState.hh \ rewriteSequenceSearch.hh \ satSolverSymbol.hh \ searchState.hh \ sortTestConditionFragment.hh \ stateTransitionGraph.hh \ temporalSymbol.hh \ unificationProblem.hh \ narrowingSearchState.hh \ narrowingUnificationProblem.hh \ narrowingSequenceSearch.hh \ sequenceSearch.hh \ cacheableState.hh \ unifierFilter.hh \ variantNarrowingSearchState.hh \ variantFolder.hh \ variantSearch.hh \ variantUnificationProblem.hh \ narrowingSearchState2.hh \ narrowingFolder.hh \ narrowingSearchState3.hh \ narrowingSequenceSearch3.hh \ irredundantUnificationProblem.hh \ variantUnifierFilter.hh \ filteredVariantUnifierSearch.hh \ variantMatchingProblem.hh all: all-am .SUFFIXES: .SUFFIXES: .cc .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Higher/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Higher/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libhigher.a: $(libhigher_a_OBJECTS) $(libhigher_a_DEPENDENCIES) $(EXTRA_libhigher_a_DEPENDENCIES) $(AM_V_at)-rm -f libhigher.a $(AM_V_AR)$(libhigher_a_AR) libhigher.a $(libhigher_a_OBJECTS) $(libhigher_a_LIBADD) $(AM_V_at)$(RANLIB) libhigher.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-assignmentConditionFragment.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-assignmentConditionState.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-equalityConditionFragment.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-filteredVariantUnifierSearch.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-irredundantUnificationProblem.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-matchSearchState.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-modelCheckerSymbol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-narrowingFolder.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-narrowingSearchState.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-narrowingSearchState2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-narrowingSearchState3.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-narrowingSequenceSearch.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-narrowingSequenceSearch3.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-narrowingUnificationProblem.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-pattern.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-positionState.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-rewriteConditionFragment.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-rewriteConditionState.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-rewriteSearchState.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-rewriteSequenceSearch.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-satSolverSymbol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-searchState.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-sortTestConditionFragment.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-stateTransitionGraph.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-temporalSymbol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-unificationProblem.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-unifierFilter.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-variantFolder.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-variantMatchingProblem.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-variantNarrowingSearchState.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-variantSearch.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-variantUnificationProblem.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhigher_a-variantUnifierFilter.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` libhigher_a-rewriteSearchState.o: rewriteSearchState.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-rewriteSearchState.o -MD -MP -MF $(DEPDIR)/libhigher_a-rewriteSearchState.Tpo -c -o libhigher_a-rewriteSearchState.o `test -f 'rewriteSearchState.cc' || echo '$(srcdir)/'`rewriteSearchState.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-rewriteSearchState.Tpo $(DEPDIR)/libhigher_a-rewriteSearchState.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rewriteSearchState.cc' object='libhigher_a-rewriteSearchState.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-rewriteSearchState.o `test -f 'rewriteSearchState.cc' || echo '$(srcdir)/'`rewriteSearchState.cc libhigher_a-rewriteSearchState.obj: rewriteSearchState.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-rewriteSearchState.obj -MD -MP -MF $(DEPDIR)/libhigher_a-rewriteSearchState.Tpo -c -o libhigher_a-rewriteSearchState.obj `if test -f 'rewriteSearchState.cc'; then $(CYGPATH_W) 'rewriteSearchState.cc'; else $(CYGPATH_W) '$(srcdir)/rewriteSearchState.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-rewriteSearchState.Tpo $(DEPDIR)/libhigher_a-rewriteSearchState.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rewriteSearchState.cc' object='libhigher_a-rewriteSearchState.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-rewriteSearchState.obj `if test -f 'rewriteSearchState.cc'; then $(CYGPATH_W) 'rewriteSearchState.cc'; else $(CYGPATH_W) '$(srcdir)/rewriteSearchState.cc'; fi` libhigher_a-matchSearchState.o: matchSearchState.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-matchSearchState.o -MD -MP -MF $(DEPDIR)/libhigher_a-matchSearchState.Tpo -c -o libhigher_a-matchSearchState.o `test -f 'matchSearchState.cc' || echo '$(srcdir)/'`matchSearchState.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-matchSearchState.Tpo $(DEPDIR)/libhigher_a-matchSearchState.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='matchSearchState.cc' object='libhigher_a-matchSearchState.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-matchSearchState.o `test -f 'matchSearchState.cc' || echo '$(srcdir)/'`matchSearchState.cc libhigher_a-matchSearchState.obj: matchSearchState.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-matchSearchState.obj -MD -MP -MF $(DEPDIR)/libhigher_a-matchSearchState.Tpo -c -o libhigher_a-matchSearchState.obj `if test -f 'matchSearchState.cc'; then $(CYGPATH_W) 'matchSearchState.cc'; else $(CYGPATH_W) '$(srcdir)/matchSearchState.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-matchSearchState.Tpo $(DEPDIR)/libhigher_a-matchSearchState.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='matchSearchState.cc' object='libhigher_a-matchSearchState.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-matchSearchState.obj `if test -f 'matchSearchState.cc'; then $(CYGPATH_W) 'matchSearchState.cc'; else $(CYGPATH_W) '$(srcdir)/matchSearchState.cc'; fi` libhigher_a-positionState.o: positionState.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-positionState.o -MD -MP -MF $(DEPDIR)/libhigher_a-positionState.Tpo -c -o libhigher_a-positionState.o `test -f 'positionState.cc' || echo '$(srcdir)/'`positionState.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-positionState.Tpo $(DEPDIR)/libhigher_a-positionState.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='positionState.cc' object='libhigher_a-positionState.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-positionState.o `test -f 'positionState.cc' || echo '$(srcdir)/'`positionState.cc libhigher_a-positionState.obj: positionState.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-positionState.obj -MD -MP -MF $(DEPDIR)/libhigher_a-positionState.Tpo -c -o libhigher_a-positionState.obj `if test -f 'positionState.cc'; then $(CYGPATH_W) 'positionState.cc'; else $(CYGPATH_W) '$(srcdir)/positionState.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-positionState.Tpo $(DEPDIR)/libhigher_a-positionState.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='positionState.cc' object='libhigher_a-positionState.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-positionState.obj `if test -f 'positionState.cc'; then $(CYGPATH_W) 'positionState.cc'; else $(CYGPATH_W) '$(srcdir)/positionState.cc'; fi` libhigher_a-pattern.o: pattern.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-pattern.o -MD -MP -MF $(DEPDIR)/libhigher_a-pattern.Tpo -c -o libhigher_a-pattern.o `test -f 'pattern.cc' || echo '$(srcdir)/'`pattern.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-pattern.Tpo $(DEPDIR)/libhigher_a-pattern.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='pattern.cc' object='libhigher_a-pattern.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-pattern.o `test -f 'pattern.cc' || echo '$(srcdir)/'`pattern.cc libhigher_a-pattern.obj: pattern.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-pattern.obj -MD -MP -MF $(DEPDIR)/libhigher_a-pattern.Tpo -c -o libhigher_a-pattern.obj `if test -f 'pattern.cc'; then $(CYGPATH_W) 'pattern.cc'; else $(CYGPATH_W) '$(srcdir)/pattern.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-pattern.Tpo $(DEPDIR)/libhigher_a-pattern.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='pattern.cc' object='libhigher_a-pattern.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-pattern.obj `if test -f 'pattern.cc'; then $(CYGPATH_W) 'pattern.cc'; else $(CYGPATH_W) '$(srcdir)/pattern.cc'; fi` libhigher_a-searchState.o: searchState.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-searchState.o -MD -MP -MF $(DEPDIR)/libhigher_a-searchState.Tpo -c -o libhigher_a-searchState.o `test -f 'searchState.cc' || echo '$(srcdir)/'`searchState.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-searchState.Tpo $(DEPDIR)/libhigher_a-searchState.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='searchState.cc' object='libhigher_a-searchState.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-searchState.o `test -f 'searchState.cc' || echo '$(srcdir)/'`searchState.cc libhigher_a-searchState.obj: searchState.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-searchState.obj -MD -MP -MF $(DEPDIR)/libhigher_a-searchState.Tpo -c -o libhigher_a-searchState.obj `if test -f 'searchState.cc'; then $(CYGPATH_W) 'searchState.cc'; else $(CYGPATH_W) '$(srcdir)/searchState.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-searchState.Tpo $(DEPDIR)/libhigher_a-searchState.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='searchState.cc' object='libhigher_a-searchState.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-searchState.obj `if test -f 'searchState.cc'; then $(CYGPATH_W) 'searchState.cc'; else $(CYGPATH_W) '$(srcdir)/searchState.cc'; fi` libhigher_a-rewriteSequenceSearch.o: rewriteSequenceSearch.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-rewriteSequenceSearch.o -MD -MP -MF $(DEPDIR)/libhigher_a-rewriteSequenceSearch.Tpo -c -o libhigher_a-rewriteSequenceSearch.o `test -f 'rewriteSequenceSearch.cc' || echo '$(srcdir)/'`rewriteSequenceSearch.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-rewriteSequenceSearch.Tpo $(DEPDIR)/libhigher_a-rewriteSequenceSearch.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rewriteSequenceSearch.cc' object='libhigher_a-rewriteSequenceSearch.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-rewriteSequenceSearch.o `test -f 'rewriteSequenceSearch.cc' || echo '$(srcdir)/'`rewriteSequenceSearch.cc libhigher_a-rewriteSequenceSearch.obj: rewriteSequenceSearch.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-rewriteSequenceSearch.obj -MD -MP -MF $(DEPDIR)/libhigher_a-rewriteSequenceSearch.Tpo -c -o libhigher_a-rewriteSequenceSearch.obj `if test -f 'rewriteSequenceSearch.cc'; then $(CYGPATH_W) 'rewriteSequenceSearch.cc'; else $(CYGPATH_W) '$(srcdir)/rewriteSequenceSearch.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-rewriteSequenceSearch.Tpo $(DEPDIR)/libhigher_a-rewriteSequenceSearch.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rewriteSequenceSearch.cc' object='libhigher_a-rewriteSequenceSearch.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-rewriteSequenceSearch.obj `if test -f 'rewriteSequenceSearch.cc'; then $(CYGPATH_W) 'rewriteSequenceSearch.cc'; else $(CYGPATH_W) '$(srcdir)/rewriteSequenceSearch.cc'; fi` libhigher_a-modelCheckerSymbol.o: modelCheckerSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-modelCheckerSymbol.o -MD -MP -MF $(DEPDIR)/libhigher_a-modelCheckerSymbol.Tpo -c -o libhigher_a-modelCheckerSymbol.o `test -f 'modelCheckerSymbol.cc' || echo '$(srcdir)/'`modelCheckerSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-modelCheckerSymbol.Tpo $(DEPDIR)/libhigher_a-modelCheckerSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='modelCheckerSymbol.cc' object='libhigher_a-modelCheckerSymbol.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-modelCheckerSymbol.o `test -f 'modelCheckerSymbol.cc' || echo '$(srcdir)/'`modelCheckerSymbol.cc libhigher_a-modelCheckerSymbol.obj: modelCheckerSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-modelCheckerSymbol.obj -MD -MP -MF $(DEPDIR)/libhigher_a-modelCheckerSymbol.Tpo -c -o libhigher_a-modelCheckerSymbol.obj `if test -f 'modelCheckerSymbol.cc'; then $(CYGPATH_W) 'modelCheckerSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/modelCheckerSymbol.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-modelCheckerSymbol.Tpo $(DEPDIR)/libhigher_a-modelCheckerSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='modelCheckerSymbol.cc' object='libhigher_a-modelCheckerSymbol.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-modelCheckerSymbol.obj `if test -f 'modelCheckerSymbol.cc'; then $(CYGPATH_W) 'modelCheckerSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/modelCheckerSymbol.cc'; fi` libhigher_a-stateTransitionGraph.o: stateTransitionGraph.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-stateTransitionGraph.o -MD -MP -MF $(DEPDIR)/libhigher_a-stateTransitionGraph.Tpo -c -o libhigher_a-stateTransitionGraph.o `test -f 'stateTransitionGraph.cc' || echo '$(srcdir)/'`stateTransitionGraph.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-stateTransitionGraph.Tpo $(DEPDIR)/libhigher_a-stateTransitionGraph.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stateTransitionGraph.cc' object='libhigher_a-stateTransitionGraph.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-stateTransitionGraph.o `test -f 'stateTransitionGraph.cc' || echo '$(srcdir)/'`stateTransitionGraph.cc libhigher_a-stateTransitionGraph.obj: stateTransitionGraph.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-stateTransitionGraph.obj -MD -MP -MF $(DEPDIR)/libhigher_a-stateTransitionGraph.Tpo -c -o libhigher_a-stateTransitionGraph.obj `if test -f 'stateTransitionGraph.cc'; then $(CYGPATH_W) 'stateTransitionGraph.cc'; else $(CYGPATH_W) '$(srcdir)/stateTransitionGraph.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-stateTransitionGraph.Tpo $(DEPDIR)/libhigher_a-stateTransitionGraph.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stateTransitionGraph.cc' object='libhigher_a-stateTransitionGraph.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-stateTransitionGraph.obj `if test -f 'stateTransitionGraph.cc'; then $(CYGPATH_W) 'stateTransitionGraph.cc'; else $(CYGPATH_W) '$(srcdir)/stateTransitionGraph.cc'; fi` libhigher_a-rewriteConditionFragment.o: rewriteConditionFragment.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-rewriteConditionFragment.o -MD -MP -MF $(DEPDIR)/libhigher_a-rewriteConditionFragment.Tpo -c -o libhigher_a-rewriteConditionFragment.o `test -f 'rewriteConditionFragment.cc' || echo '$(srcdir)/'`rewriteConditionFragment.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-rewriteConditionFragment.Tpo $(DEPDIR)/libhigher_a-rewriteConditionFragment.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rewriteConditionFragment.cc' object='libhigher_a-rewriteConditionFragment.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-rewriteConditionFragment.o `test -f 'rewriteConditionFragment.cc' || echo '$(srcdir)/'`rewriteConditionFragment.cc libhigher_a-rewriteConditionFragment.obj: rewriteConditionFragment.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-rewriteConditionFragment.obj -MD -MP -MF $(DEPDIR)/libhigher_a-rewriteConditionFragment.Tpo -c -o libhigher_a-rewriteConditionFragment.obj `if test -f 'rewriteConditionFragment.cc'; then $(CYGPATH_W) 'rewriteConditionFragment.cc'; else $(CYGPATH_W) '$(srcdir)/rewriteConditionFragment.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-rewriteConditionFragment.Tpo $(DEPDIR)/libhigher_a-rewriteConditionFragment.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rewriteConditionFragment.cc' object='libhigher_a-rewriteConditionFragment.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-rewriteConditionFragment.obj `if test -f 'rewriteConditionFragment.cc'; then $(CYGPATH_W) 'rewriteConditionFragment.cc'; else $(CYGPATH_W) '$(srcdir)/rewriteConditionFragment.cc'; fi` libhigher_a-assignmentConditionFragment.o: assignmentConditionFragment.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-assignmentConditionFragment.o -MD -MP -MF $(DEPDIR)/libhigher_a-assignmentConditionFragment.Tpo -c -o libhigher_a-assignmentConditionFragment.o `test -f 'assignmentConditionFragment.cc' || echo '$(srcdir)/'`assignmentConditionFragment.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-assignmentConditionFragment.Tpo $(DEPDIR)/libhigher_a-assignmentConditionFragment.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='assignmentConditionFragment.cc' object='libhigher_a-assignmentConditionFragment.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-assignmentConditionFragment.o `test -f 'assignmentConditionFragment.cc' || echo '$(srcdir)/'`assignmentConditionFragment.cc libhigher_a-assignmentConditionFragment.obj: assignmentConditionFragment.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-assignmentConditionFragment.obj -MD -MP -MF $(DEPDIR)/libhigher_a-assignmentConditionFragment.Tpo -c -o libhigher_a-assignmentConditionFragment.obj `if test -f 'assignmentConditionFragment.cc'; then $(CYGPATH_W) 'assignmentConditionFragment.cc'; else $(CYGPATH_W) '$(srcdir)/assignmentConditionFragment.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-assignmentConditionFragment.Tpo $(DEPDIR)/libhigher_a-assignmentConditionFragment.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='assignmentConditionFragment.cc' object='libhigher_a-assignmentConditionFragment.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-assignmentConditionFragment.obj `if test -f 'assignmentConditionFragment.cc'; then $(CYGPATH_W) 'assignmentConditionFragment.cc'; else $(CYGPATH_W) '$(srcdir)/assignmentConditionFragment.cc'; fi` libhigher_a-sortTestConditionFragment.o: sortTestConditionFragment.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-sortTestConditionFragment.o -MD -MP -MF $(DEPDIR)/libhigher_a-sortTestConditionFragment.Tpo -c -o libhigher_a-sortTestConditionFragment.o `test -f 'sortTestConditionFragment.cc' || echo '$(srcdir)/'`sortTestConditionFragment.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-sortTestConditionFragment.Tpo $(DEPDIR)/libhigher_a-sortTestConditionFragment.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='sortTestConditionFragment.cc' object='libhigher_a-sortTestConditionFragment.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-sortTestConditionFragment.o `test -f 'sortTestConditionFragment.cc' || echo '$(srcdir)/'`sortTestConditionFragment.cc libhigher_a-sortTestConditionFragment.obj: sortTestConditionFragment.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-sortTestConditionFragment.obj -MD -MP -MF $(DEPDIR)/libhigher_a-sortTestConditionFragment.Tpo -c -o libhigher_a-sortTestConditionFragment.obj `if test -f 'sortTestConditionFragment.cc'; then $(CYGPATH_W) 'sortTestConditionFragment.cc'; else $(CYGPATH_W) '$(srcdir)/sortTestConditionFragment.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-sortTestConditionFragment.Tpo $(DEPDIR)/libhigher_a-sortTestConditionFragment.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='sortTestConditionFragment.cc' object='libhigher_a-sortTestConditionFragment.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-sortTestConditionFragment.obj `if test -f 'sortTestConditionFragment.cc'; then $(CYGPATH_W) 'sortTestConditionFragment.cc'; else $(CYGPATH_W) '$(srcdir)/sortTestConditionFragment.cc'; fi` libhigher_a-equalityConditionFragment.o: equalityConditionFragment.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-equalityConditionFragment.o -MD -MP -MF $(DEPDIR)/libhigher_a-equalityConditionFragment.Tpo -c -o libhigher_a-equalityConditionFragment.o `test -f 'equalityConditionFragment.cc' || echo '$(srcdir)/'`equalityConditionFragment.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-equalityConditionFragment.Tpo $(DEPDIR)/libhigher_a-equalityConditionFragment.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='equalityConditionFragment.cc' object='libhigher_a-equalityConditionFragment.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-equalityConditionFragment.o `test -f 'equalityConditionFragment.cc' || echo '$(srcdir)/'`equalityConditionFragment.cc libhigher_a-equalityConditionFragment.obj: equalityConditionFragment.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-equalityConditionFragment.obj -MD -MP -MF $(DEPDIR)/libhigher_a-equalityConditionFragment.Tpo -c -o libhigher_a-equalityConditionFragment.obj `if test -f 'equalityConditionFragment.cc'; then $(CYGPATH_W) 'equalityConditionFragment.cc'; else $(CYGPATH_W) '$(srcdir)/equalityConditionFragment.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-equalityConditionFragment.Tpo $(DEPDIR)/libhigher_a-equalityConditionFragment.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='equalityConditionFragment.cc' object='libhigher_a-equalityConditionFragment.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-equalityConditionFragment.obj `if test -f 'equalityConditionFragment.cc'; then $(CYGPATH_W) 'equalityConditionFragment.cc'; else $(CYGPATH_W) '$(srcdir)/equalityConditionFragment.cc'; fi` libhigher_a-assignmentConditionState.o: assignmentConditionState.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-assignmentConditionState.o -MD -MP -MF $(DEPDIR)/libhigher_a-assignmentConditionState.Tpo -c -o libhigher_a-assignmentConditionState.o `test -f 'assignmentConditionState.cc' || echo '$(srcdir)/'`assignmentConditionState.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-assignmentConditionState.Tpo $(DEPDIR)/libhigher_a-assignmentConditionState.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='assignmentConditionState.cc' object='libhigher_a-assignmentConditionState.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-assignmentConditionState.o `test -f 'assignmentConditionState.cc' || echo '$(srcdir)/'`assignmentConditionState.cc libhigher_a-assignmentConditionState.obj: assignmentConditionState.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-assignmentConditionState.obj -MD -MP -MF $(DEPDIR)/libhigher_a-assignmentConditionState.Tpo -c -o libhigher_a-assignmentConditionState.obj `if test -f 'assignmentConditionState.cc'; then $(CYGPATH_W) 'assignmentConditionState.cc'; else $(CYGPATH_W) '$(srcdir)/assignmentConditionState.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-assignmentConditionState.Tpo $(DEPDIR)/libhigher_a-assignmentConditionState.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='assignmentConditionState.cc' object='libhigher_a-assignmentConditionState.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-assignmentConditionState.obj `if test -f 'assignmentConditionState.cc'; then $(CYGPATH_W) 'assignmentConditionState.cc'; else $(CYGPATH_W) '$(srcdir)/assignmentConditionState.cc'; fi` libhigher_a-rewriteConditionState.o: rewriteConditionState.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-rewriteConditionState.o -MD -MP -MF $(DEPDIR)/libhigher_a-rewriteConditionState.Tpo -c -o libhigher_a-rewriteConditionState.o `test -f 'rewriteConditionState.cc' || echo '$(srcdir)/'`rewriteConditionState.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-rewriteConditionState.Tpo $(DEPDIR)/libhigher_a-rewriteConditionState.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rewriteConditionState.cc' object='libhigher_a-rewriteConditionState.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-rewriteConditionState.o `test -f 'rewriteConditionState.cc' || echo '$(srcdir)/'`rewriteConditionState.cc libhigher_a-rewriteConditionState.obj: rewriteConditionState.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-rewriteConditionState.obj -MD -MP -MF $(DEPDIR)/libhigher_a-rewriteConditionState.Tpo -c -o libhigher_a-rewriteConditionState.obj `if test -f 'rewriteConditionState.cc'; then $(CYGPATH_W) 'rewriteConditionState.cc'; else $(CYGPATH_W) '$(srcdir)/rewriteConditionState.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-rewriteConditionState.Tpo $(DEPDIR)/libhigher_a-rewriteConditionState.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rewriteConditionState.cc' object='libhigher_a-rewriteConditionState.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-rewriteConditionState.obj `if test -f 'rewriteConditionState.cc'; then $(CYGPATH_W) 'rewriteConditionState.cc'; else $(CYGPATH_W) '$(srcdir)/rewriteConditionState.cc'; fi` libhigher_a-temporalSymbol.o: temporalSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-temporalSymbol.o -MD -MP -MF $(DEPDIR)/libhigher_a-temporalSymbol.Tpo -c -o libhigher_a-temporalSymbol.o `test -f 'temporalSymbol.cc' || echo '$(srcdir)/'`temporalSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-temporalSymbol.Tpo $(DEPDIR)/libhigher_a-temporalSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='temporalSymbol.cc' object='libhigher_a-temporalSymbol.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-temporalSymbol.o `test -f 'temporalSymbol.cc' || echo '$(srcdir)/'`temporalSymbol.cc libhigher_a-temporalSymbol.obj: temporalSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-temporalSymbol.obj -MD -MP -MF $(DEPDIR)/libhigher_a-temporalSymbol.Tpo -c -o libhigher_a-temporalSymbol.obj `if test -f 'temporalSymbol.cc'; then $(CYGPATH_W) 'temporalSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/temporalSymbol.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-temporalSymbol.Tpo $(DEPDIR)/libhigher_a-temporalSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='temporalSymbol.cc' object='libhigher_a-temporalSymbol.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-temporalSymbol.obj `if test -f 'temporalSymbol.cc'; then $(CYGPATH_W) 'temporalSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/temporalSymbol.cc'; fi` libhigher_a-satSolverSymbol.o: satSolverSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-satSolverSymbol.o -MD -MP -MF $(DEPDIR)/libhigher_a-satSolverSymbol.Tpo -c -o libhigher_a-satSolverSymbol.o `test -f 'satSolverSymbol.cc' || echo '$(srcdir)/'`satSolverSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-satSolverSymbol.Tpo $(DEPDIR)/libhigher_a-satSolverSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='satSolverSymbol.cc' object='libhigher_a-satSolverSymbol.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-satSolverSymbol.o `test -f 'satSolverSymbol.cc' || echo '$(srcdir)/'`satSolverSymbol.cc libhigher_a-satSolverSymbol.obj: satSolverSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-satSolverSymbol.obj -MD -MP -MF $(DEPDIR)/libhigher_a-satSolverSymbol.Tpo -c -o libhigher_a-satSolverSymbol.obj `if test -f 'satSolverSymbol.cc'; then $(CYGPATH_W) 'satSolverSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/satSolverSymbol.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-satSolverSymbol.Tpo $(DEPDIR)/libhigher_a-satSolverSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='satSolverSymbol.cc' object='libhigher_a-satSolverSymbol.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-satSolverSymbol.obj `if test -f 'satSolverSymbol.cc'; then $(CYGPATH_W) 'satSolverSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/satSolverSymbol.cc'; fi` libhigher_a-unificationProblem.o: unificationProblem.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-unificationProblem.o -MD -MP -MF $(DEPDIR)/libhigher_a-unificationProblem.Tpo -c -o libhigher_a-unificationProblem.o `test -f 'unificationProblem.cc' || echo '$(srcdir)/'`unificationProblem.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-unificationProblem.Tpo $(DEPDIR)/libhigher_a-unificationProblem.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='unificationProblem.cc' object='libhigher_a-unificationProblem.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-unificationProblem.o `test -f 'unificationProblem.cc' || echo '$(srcdir)/'`unificationProblem.cc libhigher_a-unificationProblem.obj: unificationProblem.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-unificationProblem.obj -MD -MP -MF $(DEPDIR)/libhigher_a-unificationProblem.Tpo -c -o libhigher_a-unificationProblem.obj `if test -f 'unificationProblem.cc'; then $(CYGPATH_W) 'unificationProblem.cc'; else $(CYGPATH_W) '$(srcdir)/unificationProblem.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-unificationProblem.Tpo $(DEPDIR)/libhigher_a-unificationProblem.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='unificationProblem.cc' object='libhigher_a-unificationProblem.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-unificationProblem.obj `if test -f 'unificationProblem.cc'; then $(CYGPATH_W) 'unificationProblem.cc'; else $(CYGPATH_W) '$(srcdir)/unificationProblem.cc'; fi` libhigher_a-narrowingSearchState.o: narrowingSearchState.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-narrowingSearchState.o -MD -MP -MF $(DEPDIR)/libhigher_a-narrowingSearchState.Tpo -c -o libhigher_a-narrowingSearchState.o `test -f 'narrowingSearchState.cc' || echo '$(srcdir)/'`narrowingSearchState.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-narrowingSearchState.Tpo $(DEPDIR)/libhigher_a-narrowingSearchState.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='narrowingSearchState.cc' object='libhigher_a-narrowingSearchState.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-narrowingSearchState.o `test -f 'narrowingSearchState.cc' || echo '$(srcdir)/'`narrowingSearchState.cc libhigher_a-narrowingSearchState.obj: narrowingSearchState.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-narrowingSearchState.obj -MD -MP -MF $(DEPDIR)/libhigher_a-narrowingSearchState.Tpo -c -o libhigher_a-narrowingSearchState.obj `if test -f 'narrowingSearchState.cc'; then $(CYGPATH_W) 'narrowingSearchState.cc'; else $(CYGPATH_W) '$(srcdir)/narrowingSearchState.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-narrowingSearchState.Tpo $(DEPDIR)/libhigher_a-narrowingSearchState.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='narrowingSearchState.cc' object='libhigher_a-narrowingSearchState.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-narrowingSearchState.obj `if test -f 'narrowingSearchState.cc'; then $(CYGPATH_W) 'narrowingSearchState.cc'; else $(CYGPATH_W) '$(srcdir)/narrowingSearchState.cc'; fi` libhigher_a-narrowingUnificationProblem.o: narrowingUnificationProblem.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-narrowingUnificationProblem.o -MD -MP -MF $(DEPDIR)/libhigher_a-narrowingUnificationProblem.Tpo -c -o libhigher_a-narrowingUnificationProblem.o `test -f 'narrowingUnificationProblem.cc' || echo '$(srcdir)/'`narrowingUnificationProblem.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-narrowingUnificationProblem.Tpo $(DEPDIR)/libhigher_a-narrowingUnificationProblem.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='narrowingUnificationProblem.cc' object='libhigher_a-narrowingUnificationProblem.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-narrowingUnificationProblem.o `test -f 'narrowingUnificationProblem.cc' || echo '$(srcdir)/'`narrowingUnificationProblem.cc libhigher_a-narrowingUnificationProblem.obj: narrowingUnificationProblem.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-narrowingUnificationProblem.obj -MD -MP -MF $(DEPDIR)/libhigher_a-narrowingUnificationProblem.Tpo -c -o libhigher_a-narrowingUnificationProblem.obj `if test -f 'narrowingUnificationProblem.cc'; then $(CYGPATH_W) 'narrowingUnificationProblem.cc'; else $(CYGPATH_W) '$(srcdir)/narrowingUnificationProblem.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-narrowingUnificationProblem.Tpo $(DEPDIR)/libhigher_a-narrowingUnificationProblem.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='narrowingUnificationProblem.cc' object='libhigher_a-narrowingUnificationProblem.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-narrowingUnificationProblem.obj `if test -f 'narrowingUnificationProblem.cc'; then $(CYGPATH_W) 'narrowingUnificationProblem.cc'; else $(CYGPATH_W) '$(srcdir)/narrowingUnificationProblem.cc'; fi` libhigher_a-narrowingSequenceSearch.o: narrowingSequenceSearch.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-narrowingSequenceSearch.o -MD -MP -MF $(DEPDIR)/libhigher_a-narrowingSequenceSearch.Tpo -c -o libhigher_a-narrowingSequenceSearch.o `test -f 'narrowingSequenceSearch.cc' || echo '$(srcdir)/'`narrowingSequenceSearch.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-narrowingSequenceSearch.Tpo $(DEPDIR)/libhigher_a-narrowingSequenceSearch.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='narrowingSequenceSearch.cc' object='libhigher_a-narrowingSequenceSearch.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-narrowingSequenceSearch.o `test -f 'narrowingSequenceSearch.cc' || echo '$(srcdir)/'`narrowingSequenceSearch.cc libhigher_a-narrowingSequenceSearch.obj: narrowingSequenceSearch.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-narrowingSequenceSearch.obj -MD -MP -MF $(DEPDIR)/libhigher_a-narrowingSequenceSearch.Tpo -c -o libhigher_a-narrowingSequenceSearch.obj `if test -f 'narrowingSequenceSearch.cc'; then $(CYGPATH_W) 'narrowingSequenceSearch.cc'; else $(CYGPATH_W) '$(srcdir)/narrowingSequenceSearch.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-narrowingSequenceSearch.Tpo $(DEPDIR)/libhigher_a-narrowingSequenceSearch.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='narrowingSequenceSearch.cc' object='libhigher_a-narrowingSequenceSearch.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-narrowingSequenceSearch.obj `if test -f 'narrowingSequenceSearch.cc'; then $(CYGPATH_W) 'narrowingSequenceSearch.cc'; else $(CYGPATH_W) '$(srcdir)/narrowingSequenceSearch.cc'; fi` libhigher_a-unifierFilter.o: unifierFilter.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-unifierFilter.o -MD -MP -MF $(DEPDIR)/libhigher_a-unifierFilter.Tpo -c -o libhigher_a-unifierFilter.o `test -f 'unifierFilter.cc' || echo '$(srcdir)/'`unifierFilter.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-unifierFilter.Tpo $(DEPDIR)/libhigher_a-unifierFilter.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='unifierFilter.cc' object='libhigher_a-unifierFilter.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-unifierFilter.o `test -f 'unifierFilter.cc' || echo '$(srcdir)/'`unifierFilter.cc libhigher_a-unifierFilter.obj: unifierFilter.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-unifierFilter.obj -MD -MP -MF $(DEPDIR)/libhigher_a-unifierFilter.Tpo -c -o libhigher_a-unifierFilter.obj `if test -f 'unifierFilter.cc'; then $(CYGPATH_W) 'unifierFilter.cc'; else $(CYGPATH_W) '$(srcdir)/unifierFilter.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-unifierFilter.Tpo $(DEPDIR)/libhigher_a-unifierFilter.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='unifierFilter.cc' object='libhigher_a-unifierFilter.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-unifierFilter.obj `if test -f 'unifierFilter.cc'; then $(CYGPATH_W) 'unifierFilter.cc'; else $(CYGPATH_W) '$(srcdir)/unifierFilter.cc'; fi` libhigher_a-variantNarrowingSearchState.o: variantNarrowingSearchState.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-variantNarrowingSearchState.o -MD -MP -MF $(DEPDIR)/libhigher_a-variantNarrowingSearchState.Tpo -c -o libhigher_a-variantNarrowingSearchState.o `test -f 'variantNarrowingSearchState.cc' || echo '$(srcdir)/'`variantNarrowingSearchState.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-variantNarrowingSearchState.Tpo $(DEPDIR)/libhigher_a-variantNarrowingSearchState.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='variantNarrowingSearchState.cc' object='libhigher_a-variantNarrowingSearchState.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-variantNarrowingSearchState.o `test -f 'variantNarrowingSearchState.cc' || echo '$(srcdir)/'`variantNarrowingSearchState.cc libhigher_a-variantNarrowingSearchState.obj: variantNarrowingSearchState.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-variantNarrowingSearchState.obj -MD -MP -MF $(DEPDIR)/libhigher_a-variantNarrowingSearchState.Tpo -c -o libhigher_a-variantNarrowingSearchState.obj `if test -f 'variantNarrowingSearchState.cc'; then $(CYGPATH_W) 'variantNarrowingSearchState.cc'; else $(CYGPATH_W) '$(srcdir)/variantNarrowingSearchState.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-variantNarrowingSearchState.Tpo $(DEPDIR)/libhigher_a-variantNarrowingSearchState.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='variantNarrowingSearchState.cc' object='libhigher_a-variantNarrowingSearchState.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-variantNarrowingSearchState.obj `if test -f 'variantNarrowingSearchState.cc'; then $(CYGPATH_W) 'variantNarrowingSearchState.cc'; else $(CYGPATH_W) '$(srcdir)/variantNarrowingSearchState.cc'; fi` libhigher_a-variantFolder.o: variantFolder.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-variantFolder.o -MD -MP -MF $(DEPDIR)/libhigher_a-variantFolder.Tpo -c -o libhigher_a-variantFolder.o `test -f 'variantFolder.cc' || echo '$(srcdir)/'`variantFolder.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-variantFolder.Tpo $(DEPDIR)/libhigher_a-variantFolder.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='variantFolder.cc' object='libhigher_a-variantFolder.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-variantFolder.o `test -f 'variantFolder.cc' || echo '$(srcdir)/'`variantFolder.cc libhigher_a-variantFolder.obj: variantFolder.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-variantFolder.obj -MD -MP -MF $(DEPDIR)/libhigher_a-variantFolder.Tpo -c -o libhigher_a-variantFolder.obj `if test -f 'variantFolder.cc'; then $(CYGPATH_W) 'variantFolder.cc'; else $(CYGPATH_W) '$(srcdir)/variantFolder.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-variantFolder.Tpo $(DEPDIR)/libhigher_a-variantFolder.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='variantFolder.cc' object='libhigher_a-variantFolder.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-variantFolder.obj `if test -f 'variantFolder.cc'; then $(CYGPATH_W) 'variantFolder.cc'; else $(CYGPATH_W) '$(srcdir)/variantFolder.cc'; fi` libhigher_a-variantSearch.o: variantSearch.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-variantSearch.o -MD -MP -MF $(DEPDIR)/libhigher_a-variantSearch.Tpo -c -o libhigher_a-variantSearch.o `test -f 'variantSearch.cc' || echo '$(srcdir)/'`variantSearch.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-variantSearch.Tpo $(DEPDIR)/libhigher_a-variantSearch.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='variantSearch.cc' object='libhigher_a-variantSearch.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-variantSearch.o `test -f 'variantSearch.cc' || echo '$(srcdir)/'`variantSearch.cc libhigher_a-variantSearch.obj: variantSearch.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-variantSearch.obj -MD -MP -MF $(DEPDIR)/libhigher_a-variantSearch.Tpo -c -o libhigher_a-variantSearch.obj `if test -f 'variantSearch.cc'; then $(CYGPATH_W) 'variantSearch.cc'; else $(CYGPATH_W) '$(srcdir)/variantSearch.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-variantSearch.Tpo $(DEPDIR)/libhigher_a-variantSearch.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='variantSearch.cc' object='libhigher_a-variantSearch.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-variantSearch.obj `if test -f 'variantSearch.cc'; then $(CYGPATH_W) 'variantSearch.cc'; else $(CYGPATH_W) '$(srcdir)/variantSearch.cc'; fi` libhigher_a-variantUnificationProblem.o: variantUnificationProblem.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-variantUnificationProblem.o -MD -MP -MF $(DEPDIR)/libhigher_a-variantUnificationProblem.Tpo -c -o libhigher_a-variantUnificationProblem.o `test -f 'variantUnificationProblem.cc' || echo '$(srcdir)/'`variantUnificationProblem.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-variantUnificationProblem.Tpo $(DEPDIR)/libhigher_a-variantUnificationProblem.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='variantUnificationProblem.cc' object='libhigher_a-variantUnificationProblem.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-variantUnificationProblem.o `test -f 'variantUnificationProblem.cc' || echo '$(srcdir)/'`variantUnificationProblem.cc libhigher_a-variantUnificationProblem.obj: variantUnificationProblem.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-variantUnificationProblem.obj -MD -MP -MF $(DEPDIR)/libhigher_a-variantUnificationProblem.Tpo -c -o libhigher_a-variantUnificationProblem.obj `if test -f 'variantUnificationProblem.cc'; then $(CYGPATH_W) 'variantUnificationProblem.cc'; else $(CYGPATH_W) '$(srcdir)/variantUnificationProblem.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-variantUnificationProblem.Tpo $(DEPDIR)/libhigher_a-variantUnificationProblem.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='variantUnificationProblem.cc' object='libhigher_a-variantUnificationProblem.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-variantUnificationProblem.obj `if test -f 'variantUnificationProblem.cc'; then $(CYGPATH_W) 'variantUnificationProblem.cc'; else $(CYGPATH_W) '$(srcdir)/variantUnificationProblem.cc'; fi` libhigher_a-narrowingSearchState2.o: narrowingSearchState2.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-narrowingSearchState2.o -MD -MP -MF $(DEPDIR)/libhigher_a-narrowingSearchState2.Tpo -c -o libhigher_a-narrowingSearchState2.o `test -f 'narrowingSearchState2.cc' || echo '$(srcdir)/'`narrowingSearchState2.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-narrowingSearchState2.Tpo $(DEPDIR)/libhigher_a-narrowingSearchState2.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='narrowingSearchState2.cc' object='libhigher_a-narrowingSearchState2.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-narrowingSearchState2.o `test -f 'narrowingSearchState2.cc' || echo '$(srcdir)/'`narrowingSearchState2.cc libhigher_a-narrowingSearchState2.obj: narrowingSearchState2.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-narrowingSearchState2.obj -MD -MP -MF $(DEPDIR)/libhigher_a-narrowingSearchState2.Tpo -c -o libhigher_a-narrowingSearchState2.obj `if test -f 'narrowingSearchState2.cc'; then $(CYGPATH_W) 'narrowingSearchState2.cc'; else $(CYGPATH_W) '$(srcdir)/narrowingSearchState2.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-narrowingSearchState2.Tpo $(DEPDIR)/libhigher_a-narrowingSearchState2.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='narrowingSearchState2.cc' object='libhigher_a-narrowingSearchState2.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-narrowingSearchState2.obj `if test -f 'narrowingSearchState2.cc'; then $(CYGPATH_W) 'narrowingSearchState2.cc'; else $(CYGPATH_W) '$(srcdir)/narrowingSearchState2.cc'; fi` libhigher_a-narrowingFolder.o: narrowingFolder.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-narrowingFolder.o -MD -MP -MF $(DEPDIR)/libhigher_a-narrowingFolder.Tpo -c -o libhigher_a-narrowingFolder.o `test -f 'narrowingFolder.cc' || echo '$(srcdir)/'`narrowingFolder.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-narrowingFolder.Tpo $(DEPDIR)/libhigher_a-narrowingFolder.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='narrowingFolder.cc' object='libhigher_a-narrowingFolder.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-narrowingFolder.o `test -f 'narrowingFolder.cc' || echo '$(srcdir)/'`narrowingFolder.cc libhigher_a-narrowingFolder.obj: narrowingFolder.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-narrowingFolder.obj -MD -MP -MF $(DEPDIR)/libhigher_a-narrowingFolder.Tpo -c -o libhigher_a-narrowingFolder.obj `if test -f 'narrowingFolder.cc'; then $(CYGPATH_W) 'narrowingFolder.cc'; else $(CYGPATH_W) '$(srcdir)/narrowingFolder.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-narrowingFolder.Tpo $(DEPDIR)/libhigher_a-narrowingFolder.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='narrowingFolder.cc' object='libhigher_a-narrowingFolder.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-narrowingFolder.obj `if test -f 'narrowingFolder.cc'; then $(CYGPATH_W) 'narrowingFolder.cc'; else $(CYGPATH_W) '$(srcdir)/narrowingFolder.cc'; fi` libhigher_a-narrowingSearchState3.o: narrowingSearchState3.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-narrowingSearchState3.o -MD -MP -MF $(DEPDIR)/libhigher_a-narrowingSearchState3.Tpo -c -o libhigher_a-narrowingSearchState3.o `test -f 'narrowingSearchState3.cc' || echo '$(srcdir)/'`narrowingSearchState3.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-narrowingSearchState3.Tpo $(DEPDIR)/libhigher_a-narrowingSearchState3.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='narrowingSearchState3.cc' object='libhigher_a-narrowingSearchState3.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-narrowingSearchState3.o `test -f 'narrowingSearchState3.cc' || echo '$(srcdir)/'`narrowingSearchState3.cc libhigher_a-narrowingSearchState3.obj: narrowingSearchState3.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-narrowingSearchState3.obj -MD -MP -MF $(DEPDIR)/libhigher_a-narrowingSearchState3.Tpo -c -o libhigher_a-narrowingSearchState3.obj `if test -f 'narrowingSearchState3.cc'; then $(CYGPATH_W) 'narrowingSearchState3.cc'; else $(CYGPATH_W) '$(srcdir)/narrowingSearchState3.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-narrowingSearchState3.Tpo $(DEPDIR)/libhigher_a-narrowingSearchState3.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='narrowingSearchState3.cc' object='libhigher_a-narrowingSearchState3.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-narrowingSearchState3.obj `if test -f 'narrowingSearchState3.cc'; then $(CYGPATH_W) 'narrowingSearchState3.cc'; else $(CYGPATH_W) '$(srcdir)/narrowingSearchState3.cc'; fi` libhigher_a-narrowingSequenceSearch3.o: narrowingSequenceSearch3.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-narrowingSequenceSearch3.o -MD -MP -MF $(DEPDIR)/libhigher_a-narrowingSequenceSearch3.Tpo -c -o libhigher_a-narrowingSequenceSearch3.o `test -f 'narrowingSequenceSearch3.cc' || echo '$(srcdir)/'`narrowingSequenceSearch3.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-narrowingSequenceSearch3.Tpo $(DEPDIR)/libhigher_a-narrowingSequenceSearch3.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='narrowingSequenceSearch3.cc' object='libhigher_a-narrowingSequenceSearch3.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-narrowingSequenceSearch3.o `test -f 'narrowingSequenceSearch3.cc' || echo '$(srcdir)/'`narrowingSequenceSearch3.cc libhigher_a-narrowingSequenceSearch3.obj: narrowingSequenceSearch3.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-narrowingSequenceSearch3.obj -MD -MP -MF $(DEPDIR)/libhigher_a-narrowingSequenceSearch3.Tpo -c -o libhigher_a-narrowingSequenceSearch3.obj `if test -f 'narrowingSequenceSearch3.cc'; then $(CYGPATH_W) 'narrowingSequenceSearch3.cc'; else $(CYGPATH_W) '$(srcdir)/narrowingSequenceSearch3.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-narrowingSequenceSearch3.Tpo $(DEPDIR)/libhigher_a-narrowingSequenceSearch3.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='narrowingSequenceSearch3.cc' object='libhigher_a-narrowingSequenceSearch3.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-narrowingSequenceSearch3.obj `if test -f 'narrowingSequenceSearch3.cc'; then $(CYGPATH_W) 'narrowingSequenceSearch3.cc'; else $(CYGPATH_W) '$(srcdir)/narrowingSequenceSearch3.cc'; fi` libhigher_a-irredundantUnificationProblem.o: irredundantUnificationProblem.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-irredundantUnificationProblem.o -MD -MP -MF $(DEPDIR)/libhigher_a-irredundantUnificationProblem.Tpo -c -o libhigher_a-irredundantUnificationProblem.o `test -f 'irredundantUnificationProblem.cc' || echo '$(srcdir)/'`irredundantUnificationProblem.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-irredundantUnificationProblem.Tpo $(DEPDIR)/libhigher_a-irredundantUnificationProblem.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='irredundantUnificationProblem.cc' object='libhigher_a-irredundantUnificationProblem.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-irredundantUnificationProblem.o `test -f 'irredundantUnificationProblem.cc' || echo '$(srcdir)/'`irredundantUnificationProblem.cc libhigher_a-irredundantUnificationProblem.obj: irredundantUnificationProblem.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-irredundantUnificationProblem.obj -MD -MP -MF $(DEPDIR)/libhigher_a-irredundantUnificationProblem.Tpo -c -o libhigher_a-irredundantUnificationProblem.obj `if test -f 'irredundantUnificationProblem.cc'; then $(CYGPATH_W) 'irredundantUnificationProblem.cc'; else $(CYGPATH_W) '$(srcdir)/irredundantUnificationProblem.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-irredundantUnificationProblem.Tpo $(DEPDIR)/libhigher_a-irredundantUnificationProblem.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='irredundantUnificationProblem.cc' object='libhigher_a-irredundantUnificationProblem.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-irredundantUnificationProblem.obj `if test -f 'irredundantUnificationProblem.cc'; then $(CYGPATH_W) 'irredundantUnificationProblem.cc'; else $(CYGPATH_W) '$(srcdir)/irredundantUnificationProblem.cc'; fi` libhigher_a-variantUnifierFilter.o: variantUnifierFilter.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-variantUnifierFilter.o -MD -MP -MF $(DEPDIR)/libhigher_a-variantUnifierFilter.Tpo -c -o libhigher_a-variantUnifierFilter.o `test -f 'variantUnifierFilter.cc' || echo '$(srcdir)/'`variantUnifierFilter.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-variantUnifierFilter.Tpo $(DEPDIR)/libhigher_a-variantUnifierFilter.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='variantUnifierFilter.cc' object='libhigher_a-variantUnifierFilter.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-variantUnifierFilter.o `test -f 'variantUnifierFilter.cc' || echo '$(srcdir)/'`variantUnifierFilter.cc libhigher_a-variantUnifierFilter.obj: variantUnifierFilter.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-variantUnifierFilter.obj -MD -MP -MF $(DEPDIR)/libhigher_a-variantUnifierFilter.Tpo -c -o libhigher_a-variantUnifierFilter.obj `if test -f 'variantUnifierFilter.cc'; then $(CYGPATH_W) 'variantUnifierFilter.cc'; else $(CYGPATH_W) '$(srcdir)/variantUnifierFilter.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-variantUnifierFilter.Tpo $(DEPDIR)/libhigher_a-variantUnifierFilter.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='variantUnifierFilter.cc' object='libhigher_a-variantUnifierFilter.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-variantUnifierFilter.obj `if test -f 'variantUnifierFilter.cc'; then $(CYGPATH_W) 'variantUnifierFilter.cc'; else $(CYGPATH_W) '$(srcdir)/variantUnifierFilter.cc'; fi` libhigher_a-filteredVariantUnifierSearch.o: filteredVariantUnifierSearch.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-filteredVariantUnifierSearch.o -MD -MP -MF $(DEPDIR)/libhigher_a-filteredVariantUnifierSearch.Tpo -c -o libhigher_a-filteredVariantUnifierSearch.o `test -f 'filteredVariantUnifierSearch.cc' || echo '$(srcdir)/'`filteredVariantUnifierSearch.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-filteredVariantUnifierSearch.Tpo $(DEPDIR)/libhigher_a-filteredVariantUnifierSearch.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='filteredVariantUnifierSearch.cc' object='libhigher_a-filteredVariantUnifierSearch.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-filteredVariantUnifierSearch.o `test -f 'filteredVariantUnifierSearch.cc' || echo '$(srcdir)/'`filteredVariantUnifierSearch.cc libhigher_a-filteredVariantUnifierSearch.obj: filteredVariantUnifierSearch.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-filteredVariantUnifierSearch.obj -MD -MP -MF $(DEPDIR)/libhigher_a-filteredVariantUnifierSearch.Tpo -c -o libhigher_a-filteredVariantUnifierSearch.obj `if test -f 'filteredVariantUnifierSearch.cc'; then $(CYGPATH_W) 'filteredVariantUnifierSearch.cc'; else $(CYGPATH_W) '$(srcdir)/filteredVariantUnifierSearch.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-filteredVariantUnifierSearch.Tpo $(DEPDIR)/libhigher_a-filteredVariantUnifierSearch.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='filteredVariantUnifierSearch.cc' object='libhigher_a-filteredVariantUnifierSearch.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-filteredVariantUnifierSearch.obj `if test -f 'filteredVariantUnifierSearch.cc'; then $(CYGPATH_W) 'filteredVariantUnifierSearch.cc'; else $(CYGPATH_W) '$(srcdir)/filteredVariantUnifierSearch.cc'; fi` libhigher_a-variantMatchingProblem.o: variantMatchingProblem.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-variantMatchingProblem.o -MD -MP -MF $(DEPDIR)/libhigher_a-variantMatchingProblem.Tpo -c -o libhigher_a-variantMatchingProblem.o `test -f 'variantMatchingProblem.cc' || echo '$(srcdir)/'`variantMatchingProblem.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-variantMatchingProblem.Tpo $(DEPDIR)/libhigher_a-variantMatchingProblem.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='variantMatchingProblem.cc' object='libhigher_a-variantMatchingProblem.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-variantMatchingProblem.o `test -f 'variantMatchingProblem.cc' || echo '$(srcdir)/'`variantMatchingProblem.cc libhigher_a-variantMatchingProblem.obj: variantMatchingProblem.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libhigher_a-variantMatchingProblem.obj -MD -MP -MF $(DEPDIR)/libhigher_a-variantMatchingProblem.Tpo -c -o libhigher_a-variantMatchingProblem.obj `if test -f 'variantMatchingProblem.cc'; then $(CYGPATH_W) 'variantMatchingProblem.cc'; else $(CYGPATH_W) '$(srcdir)/variantMatchingProblem.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhigher_a-variantMatchingProblem.Tpo $(DEPDIR)/libhigher_a-variantMatchingProblem.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='variantMatchingProblem.cc' object='libhigher_a-variantMatchingProblem.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhigher_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libhigher_a-variantMatchingProblem.obj `if test -f 'variantMatchingProblem.cc'; then $(CYGPATH_W) 'variantMatchingProblem.cc'; else $(CYGPATH_W) '$(srcdir)/variantMatchingProblem.cc'; fi` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/libhigher_a-assignmentConditionFragment.Po -rm -f ./$(DEPDIR)/libhigher_a-assignmentConditionState.Po -rm -f ./$(DEPDIR)/libhigher_a-equalityConditionFragment.Po -rm -f ./$(DEPDIR)/libhigher_a-filteredVariantUnifierSearch.Po -rm -f ./$(DEPDIR)/libhigher_a-irredundantUnificationProblem.Po -rm -f ./$(DEPDIR)/libhigher_a-matchSearchState.Po -rm -f ./$(DEPDIR)/libhigher_a-modelCheckerSymbol.Po -rm -f ./$(DEPDIR)/libhigher_a-narrowingFolder.Po -rm -f ./$(DEPDIR)/libhigher_a-narrowingSearchState.Po -rm -f ./$(DEPDIR)/libhigher_a-narrowingSearchState2.Po -rm -f ./$(DEPDIR)/libhigher_a-narrowingSearchState3.Po -rm -f ./$(DEPDIR)/libhigher_a-narrowingSequenceSearch.Po -rm -f ./$(DEPDIR)/libhigher_a-narrowingSequenceSearch3.Po -rm -f ./$(DEPDIR)/libhigher_a-narrowingUnificationProblem.Po -rm -f ./$(DEPDIR)/libhigher_a-pattern.Po -rm -f ./$(DEPDIR)/libhigher_a-positionState.Po -rm -f ./$(DEPDIR)/libhigher_a-rewriteConditionFragment.Po -rm -f ./$(DEPDIR)/libhigher_a-rewriteConditionState.Po -rm -f ./$(DEPDIR)/libhigher_a-rewriteSearchState.Po -rm -f ./$(DEPDIR)/libhigher_a-rewriteSequenceSearch.Po -rm -f ./$(DEPDIR)/libhigher_a-satSolverSymbol.Po -rm -f ./$(DEPDIR)/libhigher_a-searchState.Po -rm -f ./$(DEPDIR)/libhigher_a-sortTestConditionFragment.Po -rm -f ./$(DEPDIR)/libhigher_a-stateTransitionGraph.Po -rm -f ./$(DEPDIR)/libhigher_a-temporalSymbol.Po -rm -f ./$(DEPDIR)/libhigher_a-unificationProblem.Po -rm -f ./$(DEPDIR)/libhigher_a-unifierFilter.Po -rm -f ./$(DEPDIR)/libhigher_a-variantFolder.Po -rm -f ./$(DEPDIR)/libhigher_a-variantMatchingProblem.Po -rm -f ./$(DEPDIR)/libhigher_a-variantNarrowingSearchState.Po -rm -f ./$(DEPDIR)/libhigher_a-variantSearch.Po -rm -f ./$(DEPDIR)/libhigher_a-variantUnificationProblem.Po -rm -f ./$(DEPDIR)/libhigher_a-variantUnifierFilter.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/libhigher_a-assignmentConditionFragment.Po -rm -f ./$(DEPDIR)/libhigher_a-assignmentConditionState.Po -rm -f ./$(DEPDIR)/libhigher_a-equalityConditionFragment.Po -rm -f ./$(DEPDIR)/libhigher_a-filteredVariantUnifierSearch.Po -rm -f ./$(DEPDIR)/libhigher_a-irredundantUnificationProblem.Po -rm -f ./$(DEPDIR)/libhigher_a-matchSearchState.Po -rm -f ./$(DEPDIR)/libhigher_a-modelCheckerSymbol.Po -rm -f ./$(DEPDIR)/libhigher_a-narrowingFolder.Po -rm -f ./$(DEPDIR)/libhigher_a-narrowingSearchState.Po -rm -f ./$(DEPDIR)/libhigher_a-narrowingSearchState2.Po -rm -f ./$(DEPDIR)/libhigher_a-narrowingSearchState3.Po -rm -f ./$(DEPDIR)/libhigher_a-narrowingSequenceSearch.Po -rm -f ./$(DEPDIR)/libhigher_a-narrowingSequenceSearch3.Po -rm -f ./$(DEPDIR)/libhigher_a-narrowingUnificationProblem.Po -rm -f ./$(DEPDIR)/libhigher_a-pattern.Po -rm -f ./$(DEPDIR)/libhigher_a-positionState.Po -rm -f ./$(DEPDIR)/libhigher_a-rewriteConditionFragment.Po -rm -f ./$(DEPDIR)/libhigher_a-rewriteConditionState.Po -rm -f ./$(DEPDIR)/libhigher_a-rewriteSearchState.Po -rm -f ./$(DEPDIR)/libhigher_a-rewriteSequenceSearch.Po -rm -f ./$(DEPDIR)/libhigher_a-satSolverSymbol.Po -rm -f ./$(DEPDIR)/libhigher_a-searchState.Po -rm -f ./$(DEPDIR)/libhigher_a-sortTestConditionFragment.Po -rm -f ./$(DEPDIR)/libhigher_a-stateTransitionGraph.Po -rm -f ./$(DEPDIR)/libhigher_a-temporalSymbol.Po -rm -f ./$(DEPDIR)/libhigher_a-unificationProblem.Po -rm -f ./$(DEPDIR)/libhigher_a-unifierFilter.Po -rm -f ./$(DEPDIR)/libhigher_a-variantFolder.Po -rm -f ./$(DEPDIR)/libhigher_a-variantMatchingProblem.Po -rm -f ./$(DEPDIR)/libhigher_a-variantNarrowingSearchState.Po -rm -f ./$(DEPDIR)/libhigher_a-variantSearch.Po -rm -f ./$(DEPDIR)/libhigher_a-variantUnificationProblem.Po -rm -f ./$(DEPDIR)/libhigher_a-variantUnifierFilter.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-noinstLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: maude-3.1/src/Higher/rewriteConditionFragment.cc0000644000175200017520000001002413576050735016725 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class ConditionFragment. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "higher.hh" // interface class definitions //#include "symbol.hh" //#include "dagNode.hh" #include "term.hh" #include "lhsAutomaton.hh" #include "rhsAutomaton.hh" #include "subproblem.hh" // core class definitions #include "rewritingContext.hh" #include "variableInfo.hh" #include "rewriteConditionState.hh" #include "rewriteConditionFragment.hh" RewriteConditionFragment::RewriteConditionFragment(Term* lhs, Term* rhs) : lhs(lhs), rhs(rhs) { lhsIndex = NONE; rhsMatcher = 0; } RewriteConditionFragment::~RewriteConditionFragment() { lhs->deepSelfDestruct(); rhs->deepSelfDestruct(); delete rhsMatcher; } void RewriteConditionFragment::check(VariableInfo& variableInfo, NatSet& boundVariables) { NatSet unboundVariables; lhs = lhs->normalize(false); lhs->indexVariables(variableInfo); variableInfo.addConditionVariables(lhs->occursBelow()); unboundVariables.insert(lhs->occursBelow()); rhs = rhs->normalize(true); rhs->indexVariables(variableInfo); variableInfo.addConditionVariables(rhs->occursBelow()); unboundVariables.subtract(boundVariables); variableInfo.addUnboundVariables(unboundVariables); boundVariables.insert(rhs->occursBelow()); } void RewriteConditionFragment::preprocess() { lhs->symbol()->fillInSortInfo(lhs); rhs->symbol()->fillInSortInfo(rhs); Assert(lhs->getComponent() == rhs->getComponent(), "component clash"); rhs->analyseCollapses(); } void RewriteConditionFragment::compileBuild(VariableInfo& variableInfo, TermBag& availableTerms) { lhsIndex = lhs->compileRhs(builder, variableInfo, availableTerms, true); variableInfo.useIndex(lhsIndex); rhs->findAvailableTerms(availableTerms, true); rhs->determineContextVariables(); rhs->insertAbstractionVariables(variableInfo); variableInfo.endOfFragment(); } void RewriteConditionFragment::compileMatch(VariableInfo& variableInfo, NatSet& boundUniquely) { builder.remapIndices(variableInfo); lhsIndex = variableInfo.remapIndex(lhsIndex); bool subproblemLikely; rhsMatcher = rhs->compileLhs(false, variableInfo, boundUniquely, subproblemLikely); boundUniquely.insert(rhs->occursBelow()); } bool RewriteConditionFragment::solve(bool findFirst, RewritingContext& solution, Stack& state) { if (findFirst) { builder.safeConstruct(solution); RewriteConditionState* cs = new RewriteConditionState(solution, solution.value(lhsIndex), rhsMatcher); if (cs->solve(true, solution)) { state.push(cs); return true; } delete cs; } else { RewriteConditionState* cs = safeCast(RewriteConditionState*, state.top()); if (cs->solve(false, solution)) return true; delete cs; state.pop(); } return false; } DagNode* RewriteConditionFragment::makeLhsInstance(Substitution& solution) { builder.safeConstruct(solution); return solution.value(lhsIndex); } bool RewriteConditionFragment::matchRoot(RewritingContext& context, Subproblem*& subproblem) { subproblem = 0; return rhsMatcher->match(context.root(), context, subproblem); } maude-3.1/src/AU_Theory/0000755000175200017520000000000013741222370012104 500000000000000maude-3.1/src/AU_Theory/ChangeLog0000755000175200017520000024262013677210666013624 000000000000002020-07-01 Steven Eker * AU_UnificationSubproblem2.cc (AU_UnificationSubproblem2::addUnification): fix bug where inserting into markedSubterms wasn't conditional on the equation being marked 2020-06-30 Steven Eker * AU_UnificationSubproblem2.cc (AU_UnificationSubproblem2::addUnification): record marked subterms (AU_UnificationSubproblem2::makeWordSystem): require marked subterms to take at most one thing * AU_UnificationSubproblem2.hh (class AU_UnificationSubproblem2): added data member markedSubterms 2020-06-23 Steven Eker * AU_UnificationSubproblem2.cc (AU_UnificationSubproblem2::addUnification): check rhs alien in case it our identity (AU_UnificationSubproblem2::makeWordSystem): use range-base for loops for inserting assignments and equations; added DebugInfo()s * AU_UnificationSubproblem2.hh (class AU_UnificationSubproblem2): added typedef for Word * AU_UnificationSubproblem2.cc (AU_UnificationSubproblem2::makeWordSystem): insert null equation * AU_Symbol.cc (AU_Symbol::canResolveTheoryClash): added * AU_Symbol.hh (class AU_Symbol): uncomment canResolveTheoryClash() decl * AU_DagNode.cc (AU_DagNode::computeSolvedForm2): added DebugEnter() * AU_UnificationSubproblem2.hh (class AU_UnificationSubproblem2): added data member nullEquations * AU_UnificationSubproblem2.cc (AU_UnificationSubproblem2::dagToAbstract): return NONE for variables bound to our identity (AU_UnificationSubproblem2::assocToAbstract): handle NONE as an index (AU_UnificationSubproblem2::addUnification): rewritten to handle empty abstract words and NULL abstract rhs 2020-06-19 Steven Eker * AU_Symbol.cc (AU_Symbol::makeUnificationSubproblem): call computeBaseSortForGroundSubterms() for identity if it exists and it hasn't been done yet 2020-06-18 Steven Eker * AU_UnificationSubproblem2.cc (AU_UnificationSubproblem2::buildSolution): if we have the empty word, don't fall into the general case (AU_UnificationSubproblem2::buildSolution): restructure to resemble ACU version; use unificationBind() for binding unbound variables to identity * AU_DagNode.cc (AU_DagNode::computeBaseSortForGroundSubterms): warn about unimplemented for one-sided identity (AU_DagNode::computeSolvedForm2): bail on the one-sided identity case * AU_UnificationSubproblem2.cc (AU_UnificationSubproblem2::buildSolution): deal with empty assignment in solution by assigning identity dag 2020-06-12 Steven Eker * AU_UnificationSubproblem2.cc (AU_UnificationSubproblem2::makeWordSystem): call setTakeEmpty() for subterms that could possibly unify with our identity 2020-06-08 Steven Eker * AU_UnificationSubproblem2.cc (AU_UnificationSubproblem2::buildSolution): added code to reuse variables that would otherwise get assigned a single fresh variable 2020-06-06 Steven Eker * AU_UnificationSubproblem2.cc (AU_UnificationSubproblem2::dagToAbstract): added comment to explain why we can't use a variables binding because it would amount to eager replacement and potentially cause nontermination 2020-05-29 Steven Eker * AU_DagNode.cc (AU_DagNode::computeBaseSortForGroundSubterms): commented out the code warning about AU unimplemented (AU_DagNode::computeSolvedForm2): comment out code that bails on AU case ===================================Maude128a=========================================== 2019-09-11 Steven Eker * AU_UnificationSubproblem2.cc (makeWordSystem): use setUpperBound() and setTheoryConstraint() rather than addConstraint() ===================Maude124 (integrated with Maude128 on 2019-12-18)================== 2019-11-11 Steven Eker * AU_DagNode.cc (computeBaseSortForGroundSubterms): take and pass warnAboutUnimplemented; simplified (computeBaseSortForGroundSubterms): no early termination in UNIMPLEMENTED case * AU_DagNode.hh (AU_BaseDagNode): updated decl for computeBaseSortForGroundSubterms() ===================================Maude125=========================================== 2017-04-25 Steven Eker * AU_DagNode.cc (instantiateWithCopies2): fixed bug where return d was inside the ifdef'd code ===================================Maude112b=========================================== 2017-04-14 Steven Eker * AU_Matcher.cc (forcedLoneVariableCase): added comments ===================================Maude112a=========================================== 2017-02-23 Steven Eker * AU_DagNode.cc (instantiateWithCopies2): ifdef'd out normal form, sort and ground flag computation and added comment to explain why 2017-02-21 Steven Eker * AU_DagNode.hh (AU_BaseDagNode): updated decl for instantiateWithReplacement() * AU_DagNode.cc (instantiateWithReplacement): handle lazy contexts 2017-02-17 Steven Eker * AU_DequeDagNode.cc (stackArguments): deleted * AU_DequeDagNode.hh (AU_BaseDagNode): deleted decl for stackArguments() * AU_DagNode.hh (AU_BaseDagNode): deleted decl for stackArguments() * AU_DagNode.cc (stackArguments): deleted * AU_Symbol.hh (AssociativeSymbol): updated decl for stackArguments() * AU_Symbol.cc (stackArguments): support respectFrozen and eagerContext flags ===================================Maude111b=========================================== 2016-11-10 Steven Eker * AU_DequeDagNode.cc (copyEagerUptoReduced2): added commment to explain why we don't bother trying to preserve deque form * AU_DequeDagNode.hh (AU_BaseDagNode): added decl for copyAll2() * AU_DequeDagNode.cc (copyAll2): added * AU_DagNode.hh (AU_BaseDagNode): added decl for copyAll2() * AU_DagNode.cc (copyAll2): added ===================================Maude111=========================================== 2016-03-24 Steven Eker * AU_Symbol.cc (computeGeneralizedSort2): code cleaning 2016-03-23 Steven Eker * AU_Symbol.cc (computeGeneralizedSort2): added 2015-08-07 Steven Eker * AU_OldUnificationAlgorithm.cc: deleted * AU_NewUnificationAlgorithm.cc: deleted * AU_UnificationSubproblem.cc: deleted * AU_UnificationSubproblem.hh: deleted 2015-08-06 Steven Eker * AU_UnificationSubproblem2.cc (solve): pass topSymbol to flagAsIncomplete 2015-07-30 Steven Eker * AU_DagNode.cc (computeBaseSortForGroundSubterms): call setGround() in the ground case 2015-07-29 Steven Eker * AU_UnificationSubproblem2.cc (makeWordSystem): use constrained variables to abstract ground terms even when their top symbol is not stable (makeWordSystem): same trick for variables bound to ground terms 2015-07-24 Steven Eker * AU_UnificationSubproblem2.cc (solve): use new WordSystem return convention 2015-07-22 Steven Eker * AU_UnificationSubproblem2.cc (solve): call flagAsIncomplete() rather than issuing a warning 2015-07-17 Steven Eker * AU_UnificationSubproblem2.cc (solve): handle new WordSystem return value 2015-07-16 Steven Eker * AU_UnificationSubproblem2.cc (makeWordSystem): fixed a bug where we were taking the symbol from the wrong dag to check for stability when adding constraints 2015-07-10 Steven Eker * AU_UnificationSubproblem2.cc (makeWordSystem): fix code for getting the sort of a variable * AU_Symbol.cc (makeUnificationSubproblem): use AU_UnificationSubproblem2 * AU_DagNode.hh (AU_BaseDagNode): AU_UnificationSubproblem2 becomes a friend * AU_UnificationSubproblem2.hh (SimpleRootContainer): added decls for dagToAbstract(), assocToAbstract(), makeWordSystem(), unsolve(), abstractToFreshVariable(), buildSolution() * AU_UnificationSubproblem2.cc (buildSolution): implemented (makeWordSystem): insert constraints for variables bound to stable aliens 2015-07-02 Steven Eker * AU_UnificationSubproblem2.cc: created * AU_UnificationSubproblem2.hh: created ===================================Maude108=========================================== 2014-11-18 Steven Eker * AU_NewUnificationAlgorithm.cc (simplify): unify with purified lhs on first pass 2014-11-17 Steven Eker * AU_UnificationSubproblem.hh (SimpleRootContainer): added decls for constrained() and updateBounds() * AU_NewUnificationAlgorithm.cc (computeBounds): check for variables at that are bound to a term headed by our top symbol (solve): do computeBounds() first so we can make use of any known bounds when disposing of f(...) =? X type unifications (updateBounds): added (simplify): handle constrained cases first (purifyAndBind): call updateBounds() (constrained): added() 2014-11-14 Steven Eker * AU_UnificationSubproblem.hh (SimpleRootContainer): adde decls for handleNonlinearVariable() and computeBounds() * AU_NewUnificationAlgorithm.cc (computeBounds): added (findUpperBound): added new version (handleNonlinearVariable): added (solve): call computeBounds() (flattenDag): call handleNonlinearVariable() in 3 places (flattenUnifications): no need to check for null return from flattenDag() * AU_UnificationSubproblem.hh (SimpleRootContainer): added data member bounds 2014-11-07 Steven Eker * AU_NewUnificationAlgorithm.cc (solve): need to undo old solution before we look for a new one * AU_UnificationSubproblem.hh (SimpleRootContainer): added decl for dump() * AU_NewUnificationAlgorithm.cc (dump): added * AU_UnificationSubproblem.hh (SimpleRootContainer): added declarations for makeSequenceAssignmentProblems(), flattenUnifications(), flattenDag() * AU_NewUnificationAlgorithm.cc (makeSequenceAssignments): added (makeSequenceAssignmentProblems): added 2014-11-06 Steven Eker * AU_NewUnificationAlgorithm.cc (flattenUnifications): added * AU_UnificationSubproblem.cc: moved unification code from two different algorithm out in to two different files (markReachableNodes): need to protect dags in local unifications for the new algorithm since it creates new local unifications and modifies existing ones * AU_NewUnificationAlgorithm.cc: created the hold code for second associative unification algorithm * AU_OldUnificationAlgorithm.cc: created to hold code from first associative unification algorithm ===================================Maude106=========================================== 2014-06-30 Steven Eker * AU_UnificationSubproblem.cc (purifyAndBind): rewritten to no longer do flattening (simplify): use new purifyAndBind() convention (interflattenBindings): added * AU_UnificationSubproblem.hh (SimpleRootContainer): added decls for hasArgumentBoundInTheory() and flatten() * AU_UnificationSubproblem.cc (hasArgumentBoundInTheory): added (flatten): addded 2014-06-27 Steven Eker * AU_UnificationSubproblem.hh (SimpleRootContainer): added decls for purifyAndBind() and simplify() * AU_UnificationSubproblem.cc (purifyAndBind): added (simplify): added 2014-06-23 Steven Eker * AU_UnificationSubproblem.cc (resolve): added comments and DebugAdvisory() ===================================Maude104=========================================== 2014-04-04 Steven Eker * AU_UnificationSubproblem.cc (checkAndInsertVariable): check for bound variables (markReachableNodes): implemented * AU_UnificationSubproblem.hh (SimpleRootContainer): added decls for checkAndInsertVariable(), checkArgumentList(), checkForCollapseAndNonLinearVariables() * AU_UnificationSubproblem.cc (checkAndInsertVariable) (checkArgumentList, checkForCollapseAndNonLinearVariables): added (solve): call checkForCollapseAndNonLinearVariables() 2014-04-03 Steven Eker * AU_DagNode.cc (computeSolvedForm2): bail in the case we have an identity element * AU_UnificationSubproblem.hh (SimpleRootContainer): added data member preSolveState * AU_UnificationSubproblem.cc (solve): support unifications of the form f(...) = X (solve): save and restore preSolveState - this is because purification may create problems on the pending stack that must retracted 2014-04-01 Steven Eker * AU_UnificationSubproblem.hh (SimpleRootContainer): added decls for findNextSolution() and new buildSolution() * AU_UnificationSubproblem.cc (AU_UnificationSubproblem): delete problems from struct Unification and not main object (AU_UnificationSubproblem): don't clear problem field (addUnification): clear problem field (buildSolution): added 3 arg version (findNextSolution): added * AU_UnificationSubproblem.hh (SimpleRootContainer): added problem member to struct Unification; removed problem field from class * AU_UnificationSubproblem.cc (solve): pass findFirst to findNextSolution() (resolve): avoid binding a variable to itself 2014-03-31 Steven Eker * AU_UnificationSubproblem.cc (resolve): added (buildSolution): added * AU_UnificationSubproblem.hh (SimpleRootContainer): added decls for buildSolution(), resolve(); added data members savesSubstitution, preSolveSubstitution, savedPendingState 2014-03-28 Steven Eker * AU_UnificationSubproblem.cc (findUpperBound): added * AU_UnificationSubproblem.hh (SimpleRootContainer): added decl for findUpperBound() * AU_DagNode.cc (computeBaseSortForGroundSubterms): added (computeSolvedForm2): added (insertVariables2): added * AU_DagNode.hh (AU_BaseDagNode): added decls for computeBaseSortForGroundSubterms(), computeSolvedForm2(), insertVariables2() * AU_UnificationSubproblem.cc: created a stub * AU_Symbol.hh (AssociativeSymbol): added decls for computeGeneralizedSort(), makeUnificationSubproblem() * AU_Theory.hh: added AU_UnificationSubproblem * AU_UnificationSubproblem.hh: created a stub * AU_Symbol.cc (computeGeneralizedSort): added (makeUnificationSubproblem): added ===================================Maude102=========================================== 2012-04-13 Steven Eker * AU_DagNode.hh (AU_BaseDagNode): added decl for instantiateWithCopies2(); updated decl for instantiateWithReplacement() * AU_DagNode.cc (instantiateWithCopies2): added (instantiateWithReplacement): rewritten to respect eager positions 2012-03-30 Steven Eker * AU_Symbol.hh (AssociativeSymbol): added decl for termify() * AU_Symbol.cc (termify): added ===================================Maude96=========================================== 2010-10-19 Steven Eker * AU_Symbol.cc (AU_Symbol::makeCanonicalCopyEagerUptoReduced): becomes makeCanonicalCopy() with change of semantics * AU_Symbol.hh (class AU_Symbol): makeCanonicalCopyEagerUptoReduced() -> makeCanonicalCopy() ===================================Maude95a=========================================== 2010-09-29 Steven Eker * AU_Symbol.cc (AU_Symbol::makeCanonicalCopyEagerUptoReduced): simplified now that we only deal with unreduced dag nodes; use getCanonicalCopyEagerUptoReduced() * AU_Symbol.hh (class AU_Symbol): added decl for makeCanonicalCopyEagerUptoReduced() * AU_Symbol.cc (AU_Symbol::makeCanonicalCopyEagerUptoReduced): added ===================================Maude95=========================================== 2010-03-17 Steven Eker * AU_DagNode.hh (AU_DagNode::setProducedByAssignment): clean up check for bug below * AU_BaseDagNode.hh (AU_BaseDagNode::isProducedByAssignment): added * AU_DagNode.cc (AU_DagNode::partialReplace): fix nasty bug where we had are normlization status set to ASSIGNMENT but replacement violated the guarantees offered by this status 2010-03-16 Steven Eker * AU_DagNode.cc (AU_DagNode::overwriteWithClone) (AU_DagNode::makeClone): use setNormalizationStatus()/getNormalizationStatus() instead of setTheoryByte()/getTheoryByte() * AU_Symbol.cc (AU_Symbol::makeCanonical): don't call setProducedByAssignment() until we have filled out arguements (AU_Symbol::makeCanonical): ditto * AU_Matcher.cc (AU_LhsAutomaton::forcedLoneVariableCase): don't call setProducedByAssignment() until we have filled out arguements * AU_Symbol.cc (AU_Symbol::eqRewrite): added look to check for Riesco 1/18/10 buga * AU_FullMatcher.cc (AU_LhsAutomaton::fullMatchFixedLengthBlock): added Assert() to check for argument with missing sort information 2010-03-12 Steven Eker * AU_RhsAutomaton.cc (AU_RhsAutomaton::replace) (AU_RhsAutomaton::construct): use nrArguments (AU_RhsAutomaton::buildArguments): use nrArguments * AU_RhsAutomaton.hh (class AU_RhsAutomaton): added data member nrArguments (AU_RhsAutomaton::close): set nrArguments * AU_RhsAutomaton.cc (AU_RhsAutomaton::buildArguments): rewrite to use iterators; made local_inline * AU_Term.cc (AU_Term::compileRhs2): rewritten to compile/build largest arguments first - this fixes a potential compilation performance issue ===================================Maude93=========================================== 2009-12-22 Steven Eker * AU_Symbol.hh (class AU_Symbol): added decl for makeCanonical() * AU_Symbol.cc (makeCanonical): added ===================================Maude92b=========================================== 2009-11-04 Steven Eker * AU_LhsCompiler.cc (findConstraintPropagationSequence): added DebugAdvisory()'s to both versions to try and locate serious performance bug (findConstraintPropagationSequence): added an optimization where we don't bother looking at the right alien if we forced all or all but one arguments using the left alien (unitVariable): added comment ===================================Maude92a=========================================== 2008-11-06 Steven Eker * AU_Term.cc (normalize): fix a nasty bug where we were collapsing to a subterm that had already been self destructed in the all identity case ===================================Maude91d=========================================== 2008-09-11 Steven Eker * AU_Matcher.cc (determineRigidBlocks): initialized firstMatch field to avoid compiler warning ===================================Maude91a=========================================== 2007-11-20 Steven Eker * AU_Term.cc (normalize): fix memory leak by calling deepSelfDestruct() on removed identities 2007-11-15 Steven Eker * AU_Normalize.cc (normalizeAtTop): don't allow garbage collection when we're in dumb mode 2007-11-09 Steven Eker * AU_DagNode.cc (instantiate2): pass dumb=true to normalizeAtTop(); call setGround() * AU_DagNode.hh (class AU_DagNode): updated decl for normalizeAtTop() with dumb flag defaulting to false * AU_Normalize.cc (normalizeAtTop): take dumb flag; only use deques when dumb flag is false 2007-11-07 Steven Eker * AU_DagNode.cc (instantiateWithReplacement): fix bug where we were making a cyclic dag * AU_DequeDagNode.hh (class AU_DequeDagNode): added decl for indexVariables2() * AU_DequeDagNode.cc (indexVariables2): added 2007-11-05 Steven Eker * AU_DagNode.cc (copyEagerUptoReduced2): remove unneeded cast (indexVariables2, instantiateWithReplacement): added * AU_DagNode.hh (class AU_DagNode): added declarations for instantiate2(), indexVariables2(), instantiateWithReplacement() ===================================Maude89h=========================================== 2006-09-26 Steven Eker * AU_CollapseMatcher.cc (uniqueCollapseMatch): we have to bind an unbound variable that can take identity in the rigid part otherwise it could be bound to something other than identity later on (we know it will be bound later on because it is in the rigid part). 2006-09-25 Steven Eker * AU_CollapseMatcher.cc (uniqueCollapseMatch): handle the case where a variable that can take identity ends up in the rigid part because we expect it to be bound by some other term in the rigid part 2005-07-28 Steven Eker * AU_Term.cc (deepCopy2): rewritten to handle translation to non-AU_Symbol * AU_Term.hh (class AU_Term): updated decl for SymbolMap* version of ctor * AU_Term.cc (AU_Term): SymbolMap* version: require symbol to be an AU_Symbol 2005-07-01 Steven Eker * AU_Term.hh (class AU_Term): updated decls for deepCopy2() and SymbolMap* version of ctor * AU_Term.cc (deepCopy2): rewritten (AU_Term): rewritten ===================================Maude86b=========================================== 2005-02-18 Steven Eker * AU_GreedyMatcher.cc (greedyMatchVariableBlock): commented out 4 DebugAdvisory()s ===================================Maude86=========================================== 2003-08-29 Steven Eker * AU_Symbol.hh (class AU_Symbol): added decl for rewriteAtTopNoOwise() * AU_Symbol.cc (rewriteAtTopNoOwise): added (complexStrategy): rewritten using rewriteAtTopNoOwise() (memoStrategy): rewritten using rewriteAtTopNoOwise() ===================================Maude82=========================================== 2003-05-28 Steven Eker * AU_Layer.cc (solveVariables): use MemoryCell::okToCollectGarbage() ===================================Maude80b=========================================== 2003-05-01 Steven Eker * AU_Matcher.cc (determineRigidBlocks): use clear() * AU_DequeDagNode.cc (overwriteWithClone): use copySetRewritingFlags() (makeClone): use copySetRewritingFlags() * AU_DagNode.cc (overwriteWithClone): use copySetRewritingFlags() (makeClone): use copySetRewritingFlags() 2003-04-30 Steven Eker * AU_LhsCompiler.cc (addFixedLengthBlock): fixed (invisible) bug where we had the earlyMatchFailOnInstanceOf() the wrong way around (addFixedLengthBlock): rewrote shift calculation inner loop to make it more understandable (addFixedLengthBlock): rewrote shift calculation inner loop to fix bug where the metalevel binds a variable that invalidates the subsumption and we end up with too big of a shift * AU_Layer.cc (bindVariables): use safeCast() on result of makeFragment() * AU_Matcher.cc (match): use safeCast() 2003-04-29 Steven Eker * AU_GreedyMatcher.cc (greedyMatchVariableBlock): fix bug in the case where a variable has to take the identity by setting it to [pos, pos-1] rather than [pos+1, pos]; this is important since last variable in bloack can have its lastSubject set to pos-1 in the code that assigns spare subterms * AU_Symbol.cc (calculateNrSubjectsMatched): fixed bug where we weren't handling the case that d points to a AU_DequeDagNode; use safeCast() * AU_GreedyMatcher.cc (greedyBindVariables): added Assert() to catch -ve number of subjects assigned to a variable * AU_LhsAutomaton.hh (class AU_LhsAutomaton): deleted decl for calculateNrSubjectsMatched() * AU_DequeMatcher.cc (dequeMatch): fixed bug wherewe weren't checking that there was enough arguments before handling a variable bound to an alien (dequeMatch): changed way of keeping track of bounds 2003-04-28 Steven Eker * AU_Symbol.cc (stackArguments): handle deque case properly rather than converting to AU_DagNode (normalizeAndComputeTrueSort): only do arg sort computations and normalizeAtTop() if the subject is fresh (computeBaseSort): rewritten using FOR_EACH_CONST() * AU_DequeDagNode.cc (stackArguments): fixed bug where we weren't initializing j * AU_Term.cc (deepSelfDestruct): use FOR_EACH_CONST() (normalize): use FOR_EACH_CONST() (findEagerVariables): use FOR_EACH_CONST() (markEagerArguments): use FOR_EACH_CONST() (analyseCollapses2): use FOR_EACH_CONST() (2 places) (dump): use FOR_EACH_CONST() (findAvailableTerms): use FOR_EACH_CONST() (compileRhs2): use FOR_EACH_CONST() (2 places) * AU_ExtensionInfo.cc (copy): use safeCast() * AU_DagNode.cc (partialReplace): use safeCast() (partialConstruct): use safeCast() (matchVariableWithExtension): use safeCast() * AU_Term.cc (normalize): use safeCast() (2 places) 2003-04-25 Steven Eker * AU_Symbol.cc (complexStrategy): simplified using rewriteAtTop() (complexStrategy): simplified using rewriteAtTop() * AU_Symbol.hh (class AU_Symbol): updated decl for complexStrategy() * AU_Symbol.cc (makeDagNode): use STL copy() (eqRewrite): need to check for equationFree() even in assignment case because reduce flag may not have be set because sort was not known because of an mb. (ruleRewrite): check for ruleFree() (AU_Symbol): set useDequeFlag only if we have standardStrategy() (eqRewrite): safeCast() to AU_DagNode* in the complexStrategy() case * AU_DagNode.cc (overwriteWithClone): use STL copy() (makeClone): use STL copy() (copyEagerUptoReduced2): use STL copy() 2003-04-24 Steven Eker * AU_Term.hh (symbol): use safeCast() * AU_DagNode.hh (class AU_DagNode): added decl for disappear() * AU_Normalize.cc (normalizeAtTop): rewritten (disappear): added * AU_BaseDagNode.cc: deleted * AU_DagNode.hh (class AU_DagNode): class AU_BaseDagNode no longer a friend * AU_BaseDagNode.cc (makeExtensionInfo): deleted (getSize): deleted * AU_BaseDagNode.hh (class AU_BaseDagNode): deleted decls for makeExtensionInfo() and getSize() * AU_DequeDagNode.cc (matchVariableWithExtension): deleted (makeExtensionInfo): added * AU_DequeDagNode.hh (class AU_DequeDagNode): added decl for makeExtensionInfo(); deleted decl for matchVariableWithExtension() * AU_Matcher.cc (matchRigidPart): use FOR_EACH_CONST * AU_DagNode.cc (overwriteWithClone): fixed bug where we weren't incrementing j (makeClone): fix symmetric bug 2003-04-23 Steven Eker * AU_DequeDagNode.cc (getHashValue): implemented properly * AU_Normalize.cc (normalizeAtTop): use AU_Deque ctor * AU_Symbol.hh (class AU_Symbol): added decl for rewriteAtTop() * AU_Symbol.cc (rewriteAtTop): added (eqRewrite): use rewriteAtTop(); assume deque form never needs to be rewritten * AU_Normalize.cc (normalizeAtTop): use useDeque() * AU_DagNode.cc (getHashValue): use FOR_EACH_CONST() (compareArguments): use FOR_EACH_CONST() (clearCopyPointers2): use FOR_EACH_CONST() (overwriteWithClone): use FOR_EACH_CONST() (makeClone): use FOR_EACH_CONST() * AU_DagNode.hh (setProducedByAssignment): use setNormalizationStatus() (producedByAssignment): deleted (nrArgs): deleted (getArgument): deleted (AU_BaseDagNode): use setNormalizationStatus() * AU_Symbol.hh (class AU_Symbol): added decl for compileEquations() * AU_Symbol.cc (AU_Symbol): init useDequeFlag (compileEquations): added * AU_Symbol.hh (class AU_Symbol): added data member useDequeFlag (useDeque): added * AU_DagNode.cc (markArguments): rewritten to avoid recursing on the first arg that shares our symbol 2003-04-22 Steven Eker * AU_DequeMatcher.cc (dequeMatch): fixed bug where we weren't assigning to returnedSubproblem in the success case 2003-04-21 Steven Eker * AU_DagOperations.cc (eliminateBackward): first arg no longer const (eliminateForward): first arg no longer const * AU_DagNode.hh (class AU_DagNode): updated decls for eliminateForward() and eliminateBackward() * AU_DequeMatcher.cc: created * AU_Normalize.cc (normalizeAtTop): use safeCast() (2 places) * AU_DagOperations.cc (eliminateForward): use getAU_DagNode() rather than static_cast - fixes a bug (eliminateBackward): ditto * AU_LhsAutomaton.hh (class AU_LhsAutomaton): added decl for dequeMatch() * AU_Matcher.cc (match): handle deque form via dequeMatch() * AU_Normalize.cc (normalizeAtTop): only convert to deque form if symbol is equationFree() * AU_Symbol.hh (class AU_Symbol): added decl for complexStrategy() * AU_Symbol.cc (complexStrategy): added (memoStrategy): use isFresh() (memoStrategy): check for DEQUED (eqRewrite): rewritten to handle deque case * AU_BaseDagNode.hh (isFresh): added 2003-04-18 Steven Eker * AU_DequeDagNode.cc (dequeToArgVec): fixed buf where we weren't preserving sort index and reduced flag * AU_Normalize.cc (normalizeAtTop): fixed bug where we were setting e to argArray.begin() 2003-04-17 Steven Eker * AU_Symbol.cc (computeBaseSort): fixed bug where we were falling into AU_DagNode* case * AU_Normalize.cc (normalizeAtTop): temporary hack to force everything into deque form for testing * AU_DequeDagNode.hh (AU_DequeDagNode): initialize deque with copy ctor rather than assignment 2003-04-16 Steven Eker * AU_Normalize.cc: created * AU_DequeDagNode.hh (AU_DequeDagNode): take AU_Deque arg * AU_DequeDagNode.cc (makeClone): use new ctor * AU_DagNode.hh (class AU_DagNode): added DEQUED to enum NormalizationResult 2003-04-15 Steven Eker * AU_Symbol.cc (ruleRewrite): use getAU_DagNode() (eqRewrite): use getAU_DagNode() (memoStrategy): use getAU_DagNode() (computeBaseSort): handle AU_DequeDagNode; use safeCast() (normalizeAndComputeTrueSort): use getAU_DagNode() (stackArguments): use getAU_DagNode() * AU_Matcher.cc (match): use getAU_DagNode() * AU_DagNode.cc (copyEagerUptoReduced2): use safeCast() * AU_Term.cc (compareArguments): code cleaning * AU_DequeDagNode.cc (compareArguments): code cleaning * AU_BaseDagNode.cc (makeExtensionInfo): use getAU_DagNode() (getSize): handle ACU_TreeDagNode * AU_DagNode.hh: added decl for getAU_DagNode() * AU_DagNode.cc (getAU_DagNode): added 2003-04-14 Steven Eker * AU_DequeDagNode.cc (arguments): use AU_DequeDagArgumentIterator() * AU_Theory.hh: added class AU_DequeDagArgumentIterator * AU_DequeDagArgumentIterator.cc: created * AU_DequeDagArgumentIterator.hh: created * AU_DequeDagNode.hh (getDeque): added * AU_Term.cc (compareArguments): (Term* version) use iterators; use new ordering (compareArguments): (DagNode* version) use iterators; use new ordering; handle AU_DequeDagNodes * AU_DagNode.cc (compareArguments): check for deque; use new ordering * AU_Theory.hh: added class AU_BaseDagNode and class AU_DequeDagNode * AU_DagNode.hh (class AU_DagNode): made AU_DequeDagNode a friend * AU_DequeDagNode.hh: created * AU_DequeDagNode.cc: created 2003-04-11 Steven Eker * AU_DagNode.hh (symbol): deleted (producedByAssignment): sue new theory byte semantics (setProducedByAssignment): use new theory byte semantics (class AU_DagNode): derive from AU_BaseDagNode (AU_BaseDagNode): call AU_BaseDagNode(); use new theory byte semantics * AU_BaseDagNode.hh (_AU_BaseDagNode_hh_): created * AU_DagNode.hh (class AU_DagNode): delete decl for ~AU_DagNode() * AU_DagNode.cc (~AU_DagNode): deleted ===================================Maude80=========================================== 2003-03-28 Steven Eker * AU_Symbol.cc (computeBaseSort): fixed bug: we can't rely on producedByAssignment() to know that we're not in the error sort in the uniform sort case, since now we can have variables and assignments at the kind level; instead we check for the uniform sorts component being errorFree() 2003-02-25 Steven Eker * AU_Layer.cc (buildPartition): updated DebugAdvisoryCheck() (bindVariables): updated Assert()s * AU_Term.cc: removed #pragma (Term): updated Assert() (normalize): updated Assert() (insertAbstractionVariables): DebugAdvisoryCheck() -> DebugAdvisory() * AU_Term.hh: removed #pragma * AU_Symbol.cc: removed #pragma (eqRewrite): updated Assert() (computeBaseSort): updated Assert()s (normalizeAndComputeTrueSort): updated Assert() * AU_Symbol.hh: removed #pragma * AU_Subproblem.cc: removed #pragma (AU_Subproblem): updated Assert() * AU_Subproblem.hh: removed #pragma * AU_RhsAutomaton.cc: removed #pragma * AU_RhsAutomaton.hh: removed #pragma * AU_Matcher.cc (match): updated Assert()s, DebugAdvisoryCheck()s (matchRigidPart): updated Assert()s (forcedLoneVariableCase): updated Assert()s (determineRigidBlocks): updated Assert()s, DebugAdvisoryCheck() * AU_LhsCompiler.cc (compileLhs2): updated Assert()s * AU_LhsAutomaton.cc: removed #pragma * AU_LhsAutomaton.hh: removed #pragma * AU_Layer.cc: removed #pragma (link): updated Assert() (solvePatterns2): updated Assert() (buildPartition): updated Assert() * AU_Layer.hh: removed #pragma * AU_GreedyMatcher.cc (greedyMatch): updated Assert() (greedyMatchRigidBlock): updated Assert()s (greedyMatchRigidBlock2): updated Assert() (greedyMatchFixedLengthBlock): updated Assert()s (greedyMatchBlocks): updated Assert() (greedyMatchVariableBlock): updated Asserts(), DebugAdvisoryCheck() * AU_FullMatcher.cc (fullMatchRigidBlock): updated Assert()s (fullMatchRigidBlock2): updated Assert() (fullMatchFixedLengthBlock): updated Assert()s (buildLeftmostPath): updated Assert() * AU_ExtensionInfo.cc: removed #pragma (buildMatchedPortion): updated Assert() * AU_ExtensionInfo.hh: removed #pragma * AU_DagOperations.cc (eliminateForward): updated Assert() (eliminateBackward): updated Assert() (makeFragment): updated Assert() * AU_DagNode.cc: removed #pragma (compareArguments): updated Assert() (markArguments): updated Assert() (normalizeAtTop): updated Assert()s * AU_DagNode.hh: removed #pragma * AU_DagArgumentIterator.cc: removed #pragma (argument): updated Assert() (next): updated Assert() * AU_DagArgumentIterator.hh: removed #pragma * AU_CollapseMatcher.cc (uniqueCollapseMatch): updated Assert() (bindUnboundVariablesToIdentity): updated Assert() (multiwayCollapseMatch): updated Assert()s (collapseMatch): updated Assert() * AU_ArgumentIterator.cc: removed #pragma (argument): updated Assert() (next): updated Assert() * AU_ArgumentIterator.hh: removed #pragma ===================================Maude79=========================================== 2003-01-31 Steven Eker * AU_Term.cc (analyseCollapses): becomes analyseCollapses2() * AU_Term.hh (class AU_Term): analyseCollapses() -> analyseCollapses2() 2002-11-20 Steven Eker * AU_Matcher.cc (forcedLoneVariableCase): replaced rawBasePointer() calls with iterators 2002-11-18 Steven Eker * AU_DagNode.cc (compareArguments): use const_iterators in place of CONST_ARG_VEC_HACK()s (markArguments): use const_iterators in place of CONST_ARG_VEC_HACK()s 2002-10-16 Steven Eker * AU_Symbol.hh (class AU_Symbol): postInterSymbolPass() -> postOpDeclarationPass() * AU_Symbol.cc (postInterSymbolPass): becomes postOpDeclarationPass() since sort tables arem't computed at postInterSymbolPass time 2002-10-04 Steven Eker * AU_DagNode.hh (class AU_DagNode): updated decl for complex version of copyWithReplacement() * AU_DagNode.cc (copyWithReplacement): complex version: deal with case where only some args are stacked * AU_Symbol.cc (stackArguments): don't stack any args in frozen case; otherwise only stack arguments that are not unstackable 2002-10-03 Steven Eker * AU_DagNode.hh (class AU_DagNode): updated decl for stackArguments() * AU_DagNode.cc (stackArguments): handle respectFrozen arg ===================================Maude76================================================== 2002-08-02 Steven Eker * AU_Term.cc (compileRhs2): added code to flag last use of each source 2002-07-24 Steven Eker * AU_LhsCompiler.cc (addFixedLengthBlock): updated call to subsumes(); this does not fix the potential bug 2002-07-22 Steven Eker * AU_LhsCompiler.cc (addFixedLengthBlock): added comment about a possible bug ===================================Maude74================================================== 2002-03-29 Steven Eker * AU_LhsAutomaton.hh (class AU_LhsAutomaton): fixed return type for greedyMatchFixedLengthBlock() decl * AU_GreedyMatcher.cc (greedyMatchFixedLengthBlock): fixed a really nasty bug where we are declared as returning bool but occasionally need to return UNDECIDED (= -1). When this happens we end up returning true, without binding variables/returning subproblems; return type becomes int ===================================Maude71a================================================== 2002-03-11 Steven Eker * AU_Term.cc: deleted explicit template instantiation * AU_Subproblem.cc: deleted explicit template instantiation * AU_LhsAutomaton.cc: deleted explicit template instantiations * AU_Layer.cc: deleted explicit template instantiations ===================================Maude71================================================== 2002-01-29 Steven Eker * AU_LhsAutomaton.hh (class AU_LhsAutomaton): added friend decl for SubtermType << function ===================================Maude70================================================== 2001-12-10 Steven Eker * AU_Term.hh (class AU_Term): make class AU_ArgumentIterator a friend ===================================Maude69================================================== 2001-04-03 Steven Eker * AU_DagNode.cc (copyWithReplacement): added (Vector version) * AU_DagNode.hh (class AU_DagNode): added decl for Vector version of copyWithReplacement() ===================================Engine66================================================== 2001-03-08 Steven Eker * AU_Symbol.hh (class AU_Symbol): added decl for stackArguments() * AU_Symbol.cc (stackArguments): added ===================================Engine65================================================== 2001-01-26 Steven Eker * AU_DagNode.hh (class AU_DagNode): updated markArguments() decl and made it private * AU_DagNode.cc (markArguments): rewritten with new semantics ===================================Engine64================================================== 2000-08-04 Steven Eker * AU_DagNode.cc (matchVariableWithExtension): don't pass inErrorSort to AU_Subproblem() * AU_Subproblem.cc (AU_Subproblem): don't handle inErrorSort arg (solveVariables): don't check inErrorSort * AU_Subproblem.hh (class AU_Subproblem): ctor no longer takes inErrorSort arg; deleted inErrorSort data member * AU_LhsCompiler.cc (compileLhs2): don't pass inErrorSort arg to AU_LhsAutomaton(); don't use it to determine greediness either * AU_FullMatcher.cc (buildLeftmostPath): don't pass inErrorSort arg to AU_Subproblem() * AU_LhsAutomaton.cc (AU_LhsAutomaton): don't handle inErrorSort arg (dump): don't dump inErrorSort * AU_LhsAutomaton.hh (class AU_LhsAutomaton): ctor decl no longer takes inErrorSort arg (class AU_LhsAutomaton): deleted inErrorSort data member 2000-08-02 Steven Eker * AU_Symbol.cc (eqRewrite): greatly simplified now that we no longer treat last strategy zero specially when term is in the error sort (memoStrategy): ditto 2000-07-31 Steven Eker * AU_Symbol.cc (computeBaseSort): don't handle union sorts ===================================Engine61================================================== 2000-07-28 Steven Eker * AU_RhsAutomaton.cc (remapIndices): added * AU_RhsAutomaton.hh (class AU_RhsAutomaton): added decl for remapIndices() 2000-07-26 Steven Eker * AU_LhsCompiler.cc (compileLhs2): use getNrProtectedVariables() instead of nrVariables() * AU_Term.cc (compileRhs2): use makeConstructionIndex() instead of allocateIndex() (insertAbstractionVariables): use makeProtectedVariable() instead of makeAbstractionVariable() 2000-07-25 Steven Eker * AU_Term.cc (findAvailableTerms): don't insert ground terms into availableTerms since we can't do left->right sharing on them * AU_RhsAutomaton.cc (construct): don't call buildAliens() (replace): don't call buildAliens() (dump): don't call RhsAutomaton::dump() * AU_Term.hh (class AU_Term): delete decl for compileRhs() * AU_Term.cc (compileRhs): deleted ===================================Engine60================================================== 2000-07-18 Steven Eker * AU_RhsAutomaton.hh (class AU_RhsAutomaton): removed extraneous decl for dump() 2000-07-11 Steven Eker * AU_Term.cc (findAvailableTerms): added (compileRhs2): added * AU_Term.hh (class AU_Term): added decls for findAvailableTerms() and compileRhs2() ===================================Engine59================================================== 2000-07-05 Steven Eker * AU_LhsCompiler.cc (compileLhs): becomes compileLhs2() * AU_Term.hh (class AU_Term): compileLhs() -> compileLhs2() 2000-06-26 Steven Eker * AU_LhsCompiler.cc (compileLhs): index() -> getIndex() (findConstraintPropagationSequence): index() -> getIndex() (unitVariable): lookupSort() -> getSort() (compileLhs): lookupSort() -> getSort() * AU_LhsAutomaton.cc (addRigidVariable): index() -> getIndex() (addRigidVariable): lookupSort() -> getSort() (addFlexVariable): lookupSort() -> getSort() (addFlexVariable): index() -> getIndex() * AU_Term.cc (compileRhs): modifiedIndex() -> getModifiedIndex() ===================================Engine58================================================== 2000-03-17 Steven Eker * AU_Term.cc (dump): ifdef'd * AU_Term.hh (class AU_Term): use NO_COPYING() macro; ifdef'd dump() decl * AU_RhsAutomaton.cc (dump): ifdef'd * AU_RhsAutomaton.hh (class AU_RhsAutomaton): use NO_COPYING() macro; ifdef'd dump() decl * AU_LhsAutomaton.cc (dump): ifdef'd * AU_LhsAutomaton.hh (class AU_LhsAutomaton): use NO_COPYING() macro; ifdef'd dump() decl * AU_Symbol.cc (eqRewrite): AdvisoryCheck() -> IssueAdvisory() (memoStrategy): AdvisoryCheck() -> IssueAdvisory() 2000-03-14 Steven Eker * AU_Layer.cc (solveVariables): call DagNode::okToCollectGarbage() after every failed call to bindVariables() to prevent build up of failed solutions ===================================Engine56================================================== 1999-11-03 Steven Eker * AU_Symbol.hh (class AU_Symbol): added decl for memoStrategy() * AU_Symbol.cc (eqRewrite): call memoStrategy() (memoStrategy): added 1999-10-29 Steven Eker * AU_Symbol.cc (AU_Symbol): use new AssociativeSymbol conventions ===================================Engine53================================================== 1999-10-26 Steven Eker * AU_LhsCompiler.cc (compileLhs): VariableTerm::dynamicCast() -> dynamic_cast() (*3) (addFixedLengthBlock): VariableTerm::dynamicCast() -> dynamic_cast() (findConstraintPropagationSequence): VariableTerm::dynamicCast() -> dynamic_cast() (*2) * AU_Term.cc (compileRhs): VariableTerm::dynamicCast() -> dynamic_cast() (insertAbstractionVariables): VariableTerm::dynamicCast() -> dynamic_cast() * AU_Symbol.cc (AU_Symbol): aded memoFlag arg * AU_Symbol.hh (class AU_Symbol): added memoFlag arg to ctor decl 1999-10-19 Steven Eker * AU_DagNode.hh (class AU_DagNode): added decl for getHashValue() * AU_DagNode.cc (getHashValue): added ===================================Engine52================================================== 1999-08-05 Steven Eker * AU_LhsAutomaton.cc (updateWholeBounds): plus() -> uplus() (updateFlexBounds): plus() -> uplus() * AU_Layer.cc (addTopVariable): plus() -> uplus() ===================================Engine51================================================== 1999-06-01 Steven Eker * AU_DagNode.cc (compareArguments): SPEED_HACK replaced by CONST_ARG_VEC_HACKs (markArguments): added CONST_ARG_VEC_HACK; turned for() loop into do while since we always have at least 2 arguments 1999-05-13 Steven Eker * AU_DagNode.cc (overwriteWithClone): copy theory byte (makeClone): copy theory byte 1999-05-12 Steven Eker * AU_Symbol.hh (class AU_Symbol): computeTrueSort() -> normalizeAndComputeTrueSort() * AU_Symbol.cc (computeTrueSort): become normalizeAndComputeTrueSort (normalizeAndComputeTrueSort): use fastComputeTrueSort() ===================================Engine49================================================== 1999-04-21 Steven Eker * AU_Term.cc (normalize): handle all identity case - fixing long standing bug ===================================Engine48================================================== ===================================Maude 1.0.2 released======================================= ===================================Maude 1.0.1 released======================================= 1999-03-02 Steven Eker * AU_Matcher.cc (forcedLoneVariableCase): fixed nasty bug in FAST_LONE_VARIABLE case where we were using wrong index var for destination * AU_LhsCompiler.cc (compileLhs): added code to generate fast lone variable case * AU_LhsAutomaton.cc (operator<<): added FAST_LONE_VARIABLE case * AU_Matcher.cc (forcedLoneVariableCase): added FAST_LONE_VARIABLE case (match): add FAST_LONE_VARIABLE to DebugAdvisoryCheck() and Assert() * AU_LhsAutomaton.hh (class AU_LhsAutomaton): added FAST_LONE_VARIABLE to MatchStrategy * AU_LhsAutomaton.cc (addRigidVariable): don't init structure field (addFlexVariable): don't init structure field (addFlexAbstractionVariable): don't init structure field (dump): don't print structure field (2 places) * AU_LhsAutomaton.hh (class AU_LhsAutomaton): deleted structure field from struct TopVariablesince in's not used - we decide at compile time whether we can use greedy algorithm based on sort structures. make index field a short so we can share space with flags and avoid hole with attendent purify warnings. 1999-02-27 Steven Eker * AU_DagNode.cc (normalizeAtTop): fixed bug in identity test (2 places) 1999-02-26 Steven Eker * AU_DagNode.cc (normalizeAtTop): need to be able to collect garbage in identity + expansion case (normalizeAtTop): added Assert to check buffer size in expansion + identities case * AU_Symbol.cc (eqRewrite): use new normalizeAtTop() semantics and return value (4 places) (computeTrueSort): use new normalizeAtTop() semantics and return value * AU_DagNode.hh (class AU_DagNode): added enum NormalizationResult (class AU_DagNode): updated decl for normalizeAtTop(); deleted decl for eliminateIdentity() * AU_DagNode.cc (normalizeAtTop): now do identity elimination (eliminateIdentity): deleted ===================================VectorExperiment========================================== Fri Nov 6 16:18:30 1998 Steven Eker * AU_Term.cc (deepCopy): -> deepCopy2() * AU_Term.hh (class AU_Term): deepCopy() -> deepCopy2() ===================================Engine43================================================== Thu Oct 8 14:00:28 1998 Steven Eker * AU_DagOperations.cc (eliminateForward): removed const_cast and added const * AU_Term.cc (compareArguments): (Term* version) added const_cast (compareArguments): (DagNode* version) added const_cast (compareArguments): removed const_cast and added const * AU_DagNode.cc (matchVariableWithExtension): static_cast -> const_cast * AU_DagOperations.cc (eliminateForward): inserted const_cast (eliminateBackward): inserted const_cast ===================================Engine41================================================== Wed Sep 23 09:50:26 1998 Steven Eker * AU_Symbol.cc (computeBaseSort): implemented lastIndex heuristic for uniSort case Fri Sep 18 14:21:32 1998 Steven Eker * AU_Symbol.cc (computeBaseSort): rewritten using setSortIndex(), lookupSortIndex(), traverse() and DagNode::leq() * AU_DagNode.cc (overwriteWithClone): use setSortIndex() (makeClone): use setSortIndex() * AU_Matcher.cc (matchRigidPart): use DagNode::leq() (checkLeftEnd): use DagNode::leq() (checkRightEnd): use DagNode::leq() (forcedLoneVariableCase): use DagNode::leq() * AU_GreedyMatcher.cc (greedyMatchFixedLengthBlock): use DagNode::leq() (greedyMatchVariableBlock): use DagNode::leq() (4 places) * AU_FullMatcher.cc (fullMatchFixedLengthBlock): use DagNode::leq() Fri Sep 11 18:11:19 1998 Steven Eker * AU_Matcher.cc (forcedLoneVariableCase): use new checkSort() convention * AU_Layer.cc (bindVariables): use new checkSort() convention * AU_Symbol.cc (computeBaseSort): use <=(DagNode*,Sort&) * AU_Matcher.cc (matchRigidPart): use <=(DagNode*,Sort&) (checkLeftEnd): use <=(DagNode*,Sort&) (checkRightEnd): use <=(DagNode*,Sort&) (forcedLoneVariableCase): use <=(DagNode*,Sort&) * AU_GreedyMatcher.cc (greedyMatchFixedLengthBlock): use <=(DagNode*,Sort&) (greedyMatchVariableBlock): use <=(DagNode*,Sort&) (4 places) * AU_FullMatcher.cc (fullMatchFixedLengthBlock): use <=(DagNode*,Sort&) ===================================Engine40================================================== Mon Jul 20 19:51:03 1998 Steven Eker * AU_Term.cc (AU_Term): new ctor added * AU_Term.hh (class AU_Term): added decls for deepCopy() and new ctor ===================================Engine39================================================== Wed Jun 10 14:31:27 1998 Steven Eker * AU_Term.cc (normalize): don't use earlyGetIdentity() * AU_Symbol.hh (class AU_Symbol): changed compileOpDeclarations() decl to postInterSymbolPass() * AU_Symbol.cc (compileOpDeclarations): changed to postInterSymbolPass() * AU_Term.hh (class AU_Term): updated normalize() decl * AU_Term.cc: IntSet -> NatSet (normalize): compute and set changed flag * AU_LhsCompiler.cc: IntSet -> NatSet * AU_Term.hh: IntSet -> NatSet ===================================Engine38================================================== Wed Jun 3 16:34:14 1998 Steven Eker * AU_Term.cc (normalize): use earlyGetIdentity() Fri Feb 20 17:31:47 1998 Steven Eker * AU_DagNode.cc (stackArguments): only stack arguments that are not flagged as unstackable ===================================Engine36================================================== Mon Feb 16 16:21:14 1998 Steven Eker * AU_LhsAutomaton.cc (AU_LhsAutomaton): fixed bug where we were deleting rigid part 2nd time instead of flex part Thu Feb 12 11:53:39 1998 Steven Eker * AU_FullMatcher.cc (determineRigidBlocks): moved to AU_Matcher.cc as this is now called only in match() * AU_LhsAutomaton.cc (~AU_LhsAutomaton): added * AU_LhsAutomaton.hh (class AU_LhsAutomaton): added decl for ~AU_LhsAutomaton() * AU_Term.cc (normalize): compare() == 0 changed to equal() * AU_Symbol.cc (calculateNrSubjectsMatched): compare() == 0 changed to equal() (3 places) * AU_Matcher.cc (matchRigidPart): compare() != 0 changed to !equal() (checkLeftEnd): compare() == 0 changed to equal() (checkRightEnd): compare() == 0 changed to equal() * AU_GreedyMatcher.cc (greedyMatchFixedLengthBlock): compare() != 0 changed to !equal() (2 places) * AU_FullMatcher.cc (fullMatchFixedLengthBlock): compare() != 0 changed to !equal() (2 places) * AU_DagOperations.cc (eliminateForward): compare() == 0 changed to equal() (4 places) (eliminateForward): compare() != 0 changed to !equal() * AU_DagNode.cc (eliminateIdentity): compare() == 0 changed to equal() * AU_CollapseMatcher.cc (uniqueCollapseMatch): compare() != 0 changed to !equal() (2 places) (multiwayCollapseMatch): compare() != 0 changed to !equal() (2 places) (multiwayCollapseMatch): compare() == 0 changed to equal() (2 places) Wed Feb 11 16:58:12 1998 Steven Eker * AU_GreedyMatcher.cc (greedyMatchFixedLengthBlock): need to call delete sp if we get a subproblem in the NON_GROUND_ALIEN case. This was a serious memory leak bug. * AU_FullMatcher.cc (buildLeftmostPath): use delete rather than calling deepSelfDestruct() * AU_Layer.cc (AU_Layer): use delete rather than calling deepSelfDestruct() * AU_Subproblem.hh (class AU_Subproblem): deleted decl for deepSelfDestruct() * AU_Subproblem.cc (deepSelfDestruct): deleted Tue Feb 10 15:24:31 1998 Steven Eker * AU_GreedyMatcher.cc (greedyMatch): don't call determineRigidBlocks() * AU_FullMatcher.cc (fullMatch): don't call determineRigidBlocks() * AU_Matcher.cc (match): call determineRigidBlocks() =============================Engine35======================================================== Fri Feb 6 11:40:28 1998 Steven Eker * AU_LhsCompiler.cc (compileLhs): avoid using greedy strategy if with are matching at top and we can collapse since greedy matcher does not ensure that enough has been matched if matching with extension. This is implicitly ensured if we cannot collapse. * AU_GreedyMatcher.cc (greedyMatchFixedLengthBlock): use scratch, not local for matching (greedyMatchRigidBlock): copy scratch back into local after success * AU_LhsAutomaton.hh (class AU_LhsAutomaton): updated greedy matcher function decls * AU_GreedyMatcher.cc (greedyMatchBlocks): if we have no rigid blocks, last and only variable can have both left and right extension (greedyMatchVariableBlock): major rewrite to handle subtleties introduced by extension Thu Feb 5 15:10:01 1998 Steven Eker * AU_GreedyMatcher.cc: created Wed Feb 4 17:59:13 1998 Steven Eker * AU_Layer.hh (class AU_Layer): added data member lastSubjectSubterm (class AU_Layer): deleted decl for computeAssignment() (class AU_Layer): updated decl for solvePartition() * AU_Layer.cc (bindVariables): no need to compute lastSubjectSubterm anymore (bindVariables): reorganization of loop; call to computeAssignment eliminated (computeAssignment): deleted (buildPartition): no need to compute lastSubjectSubterm anymore (solvePartition): removed lastSubjectSubterm arg (solvePartition): reorganized extraId calculations; now check that what a variable is already given by partition is strictly below its upperBound brefore considering it as a candidate for getting an extra identity (solveVariables): don't pass lastSubjectSubterm to solvePartition(); don't compute lastSubjectSubterm (link): simplified inner loop (initialize): initialize lastSubjectSubterm (AU_Layer): don't bother initializing oneSidedId and leftId as these will be initialized in initialize() Tue Feb 3 18:42:21 1998 Steven Eker * AU_Layer.hh (class AU_Layer): deleted decl for flagOneSidedId() (class AU_Layer): added decl for initialize() * AU_Layer.cc (flagOneSidedId): deleted * AU_Subproblem.hh (class AU_Subproblem): deleted data member subject * AU_Subproblem.cc (solveVariables): don't pass subject to AU_Layer::solveVariables() (AU_Subproblem): call AU_Layer::initialize() (complete): don't call AU_Layer::flagOneSidedId() (AU_Subproblem): don't initialize subject * AU_Layer.cc (bindVariables): don't pass subject to computeAssignment() (solveVariables): don't pass subject to bindVariables() or buildPartition() * AU_Layer.hh (class AU_Layer): update decls for solveVariables(), buildPartition(), bindVariables() and computeAssignment() * AU_Layer.cc (solveVariables): removed subject arg (buildPartition): removed subject arg (bindVariables): removed subject arg (computeAssignment): removed subject arg * AU_Layer.hh (class AU_Layer): added data member subject; reorganized data members * AU_Layer.cc (initialize): added Mon Feb 2 11:39:27 1998 Steven Eker * AU_Subproblem.cc (AU_Subproblem): don't initialize firstSubterm and lastSubterm * AU_Subproblem.hh (class AU_Subproblem): deleted data members firstSubterm and lastSubterm as they are never used one they have been copied into appropriate layers Fri Jan 30 11:36:21 1998 Steven Eker * AU_Layer.hh (firstSubtermMatched): deleted (lastSubtermMatched): deleted (class AU_Layer): deleted decls for firstSubtermMatched() and lastSubtermMatched() * AU_Subproblem.hh (class AU_Subproblem): deleted decl for fillOutExtensionInfo() * AU_Subproblem.cc (fillOutExtensionInfo): deleted * AU_DagNode.hh (class AU_DagNode): deleted decls for eliminateSubject() and checkArguments() * AU_DagNode.cc (checkArguments): deleted (eliminateSubject): deleted * AU_Layer.cc (bindVariables): deal with leftExtend/rightExtend correctly when nrVariables == 0 (bindVariables): in right extend case it need not be that firstSubterm == 0 * AU_Subproblem.cc (solveVariables): use bigEnough() and buildMatchedPortion() rather than callingfillOutExtensionInfo() * AU_ExtensionInfo.hh (bigEnough): added (class AU_ExtensionInfo): added decl for bigEnough() (setLastMatched): call setMatchedWhole(); * AU_Layer.cc (bindVariables): set left, right and extraIdentity extensionInfo * AU_Subproblem.cc (AU_Subproblem): pass extensionInfo to initializeFirst() and initializeLast() * AU_Layer.hh (class AU_Layer): updated initializeFirst() and initializeLast() decls * AU_Layer.cc (initializeFirst): set extensionInfo if needed (initializeFirst): set extensionInfo if needed * AU_Layer.hh (class AU_Layer): added data member extensionInfo * AU_DagOperations.cc (makeFragment): fixed initialization bug; greatly simplified * AU_ExtensionInfo.cc (buildMatchedPortion): greatly simplified and bug removed by using DagNode::makeFragment() * AU_Layer.cc (computeAssignment): use DagNode::makeFragment() * AU_DagNode.hh (class AU_DagNode): added decl for makeFragment() * AU_DagOperations.cc (makeFragment): added Thu Jan 29 10:17:25 1998 Steven Eker * AU_FullMatcher.cc (determineRigidBlocks): rewritten to fix horrible bug where we were incrementing r.nrSubjectsToLeave before finishing current block so we were in effect incrementing nrSubjectsToLeave for wrong block * AU_Layer.cc (computeAssignment): fixed bug that aflicted left id case * AU_Layer.hh (class AU_Layer): flagOneSidedId() decl updated * AU_Layer.cc (flagOneSidedId): name clash problem; leftId arg changed to leftIdFlag * AU_Subproblem.cc (complete): nrLayers, not nrPatternLayers for loop inserting oneSidedId info * AU_FullMatcher.cc (addVariableBlocks): awkward variables get a lower bound of 0 rather than 1 * AU_Layer.cc (bindVariables): rewritten using DagNode::eliminateForward() (computeAssignment): handle extra id case (bindVariables): deal with the case where variable can take one sided identity because it is at the wrong extreme end (solvePartition): fixed i++ instead of i-- bug * AU_Layer.hh (class AU_Layer): updated solvePartition() decl * AU_Layer.cc (solvePartition): take lastSubjectSubterm arg; use this to help determine if a variable can take an extra identity in the one sided identity case. Wed Jan 28 11:32:50 1998 Steven Eker * AU_Layer.cc (buildPartition): rewritten to take account of nasty bindings; no longer return 0 under any circumstances (solveVariables): don't bother checking for 0 partition (buildPartition): added DebugAdvisoryCheck for nast binding * AU_Layer.hh (class AU_Layer): added decl for solvePartition() (class AU_Layer): added decl for flagOneSidedId() * AU_LhsAutomaton.hh (class AU_LhsAutomaton): deleted decl for calculateNrSubjectsMatched() * AU_FullMatcher.cc (determineRigidBlocks): use AU_Symbol::calculateNrSubjectsMatched() (calculateNrSubjectsMatched): deleted * AU_Symbol.hh (class AU_Symbol): added decl for calculateNrSubjectsMatched() * AU_Symbol.cc (calculateNrSubjectsMatched): added * AU_Subproblem.cc (complete): call link() rather than complete (complete): call flagOneSidedId() * AU_Layer.cc (complete): renamed to link() (flagOneSidedId): added (AU_Layer): clear oneSidedId and leftId * AU_Layer.hh (class AU_Layer): added data members oneSidedId and leftId; (class AU_Layer): complete renamed to link() * AU_Layer.cc (solvePartition): added (solvePartition): added to handle extra identities (solveVariables): use solvePartition() * AU_Layer.hh (class AU_Layer): added extraId field to TopVariable * AU_ExtensionInfo.cc (buildMatchedPortion): simplified using oneSidedId() Tue Jan 27 11:01:55 1998 Steven Eker * AU_FullMatcher.cc (addVariableBlocks): use NOT_FIXED (determineRigidBlocks): use NOT_FIXED (fullMatchRigidBlock2): use NOT_FIXED (buildLeftmostPath): removed comment on nextSubject update since nasty binding will now never occur rigid block * AU_LhsAutomaton.cc (complete): use NOT_FIXED * AU_LhsAutomaton.hh (class AU_LhsAutomaton): added Special value NOT_FIXED = -1 * AU_FullMatcher.cc (addVariableBlocks): missing continue in nasty case added (determineRigidBlocks): Assert() that if we have a nasty binding we must have extension. (determineRigidBlocks): rewritten; make sure that in nasty case we incresse r.nrSubjectsToLeave rather than r.nrSubjectsForUs (calculateNrSubjectsMatched): return max # of subject we could match in the nasty case instead of min (addVariableBlocks): adjusted as f.variable.nastyBinding now holds max rather than min * AU_LhsAutomaton.hh (class AU_LhsAutomaton): updated calculateNrSubjectsMatched() decl * AU_FullMatcher.cc (determineRigidBlocks): handle variables with nasty binding by treating them as if they are unbound. (determineRigidBlocks): added DebugAdvisoryCheck()s for nasty bindings (calculateNrSubjectsMatched): pass back nasty flag; DebugAdvisoryCheck()s removed (addVariableBlocks): handle variables with nasty bindings * AU_LhsAutomaton.hh (class AU_LhsAutomaton): added nastyBinding field to struct TopVariable * AU_FullMatcher.cc (calculateNrSubjectsMatched): added DebugAdvisoryCheck()s for nasty bindings; now decrement nrArgs in this case Mon Jan 26 18:07:45 1998 Steven Eker * AU_FullMatcher.cc (determineRigidBlocks): assert that if last rigid block is terminated by end of (unused) flex part rather than by an unbound variable then we must have extension Fri Jan 23 18:20:51 1998 Steven Eker * AU_FullMatcher.cc (buildLeftmostPath): added Assert to check that there are unbound variable(s) before first rigid block and after last rigid block if there is no extension. (buildLeftmostPath): removed code for special case where flex part consists of a single rigid block (and no extension) since this case can no longer occur (buildLeftmostPath): removed code for adjusting min and max shifts where ther was no extension and no unbound variables before first rigid block or after last rigid block since these cases can no longer occur (addRemainingPaths): removed code for case where these are no unbound variables to the left of 1st rigid block (and no extension) since this case can no longer occur (fullMatchRigidBlock2): use eliminateForward() in place of eliminateSubject(); rather aribitrarily pass limit = rightPos to avoid triggering eliminateForward() precondition Assert() - may be we should be smarter? Thu Jan 22 11:03:55 1998 Steven Eker * AU_FullMatcher.cc (calculateNrSubjectsMatched): added (determineRigidBlocks): rewritten using calculateNrSubjectsMatched() Wed Jan 21 11:05:37 1998 Steven Eker * AU_Matcher.cc (match): added DebugAdvisoryCheck()s for match time match strategy changes (matchRigidPart): fixed compare() == 0 bug (should have been !=) * AU_FullMatcher.cc (addVariableBlocks): use flexLeftPos and flexRightPos to determine to section of flex part to be examined for variables (determineRigidBlocks): use flexLeftPos and flexRightPos to determine to section of flex part to be examined for rigid blocks and end of last rigid block if we don't end in a non-rigid variable (buildLeftmostPath): use flexRightPos rather than last Tue Jan 20 11:24:48 1998 Steven Eker * AU_LhsAutomaton.hh (class AU_LhsAutomaton): added enum Special with single constant STALLED * AU_Matcher.cc (checkLeftEnd): added (checkRightEnd): added (checkForRigidEnds): complete rewritten yet again, this time using checkLeftEnd() and checkRightEnd() to eliminate a rats nest of gotos * AU_LhsAutomaton.hh (class AU_LhsAutomaton): added data members flexLeftPos and flexRightPos * AU_Matcher.cc (match): added code to check nrArgs against whole bounds (match): Only call matchRigidPart in no extension case; tidied no extension case (matchRigidPart): removed code that checked nrArgs against whole bounds (checkForRigidEnds): heavily rewritten with stalled flags and new exit conditions for loop Mon Jan 19 10:58:34 1998 Steven Eker * AU_Matcher.cc (matchRigidPart): tidied up; nrSubtermsRemaining deleted (match): now call checkForRigidEnds() in lone variable case just in case lone variable is bound. (matchRigidPart): more tidying (forcedLoneVariableCase): assert that lone variable is unbound; lone variable bound case code deleted as this case will now be caught by checkForRigidEnds() and transformed into ground out case. * AU_LhsAutomaton.hh (class AU_LhsAutomaton): added decl for checkForRigidEnds(); deleted decl for matchRigidSubterm() * AU_Matcher.cc (match): rewritten; we now try to force ends of flex part if there is no extension (forcedLoneVariableCase): use flexPart[flexLeftPos] rather than flexPart[0]; no longer assert that flex part has length 1 (matchRigidPart): restored old version as there is not going to be enough overlap with checkForRigidInFlex() to make it worth pulling common parts into another function (checkForRigidInFlex): added (match): completely rewritten to use checkForRigidEnds() (checkForRigidInFlex): renamed to checkForRigidEnds() (matchRigidSubterm): deleted * AU_LhsAutomaton.hh (class AU_LhsAutomaton): added decl for matchRigidSubterm(); deleted decl for boundsChecks() * AU_Matcher.cc (matchRigidSubterm): added (matchRigidPart): rewrittem using matchRigidSubterm Fri Jan 16 16:23:14 1998 Steven Eker * AU_Term.cc (insertAbstractionVariables): changed AdvisoryCheck() to DebugAdvisoryCheck() * AU_Subproblem.cc (fillOutExtensionInfo): call setExtraIdentity(false) as a temporary hack * AU_LhsCompiler.cc (compileLhs): use oneSidedId() (analyseConstraintPropagation): use oneSidedId() * AU_DagNode.cc (matchVariableWithExtension): use oneSidedId() * AU_Symbol.cc (AU_Symbol): initialize oneSidedIdFlag * AU_Symbol.hh (oneSidedId): added (class AU_Symbol): added data member oneSidedIdFlag and decl for oneSidedId() * AU_DagNode.cc (partialReplace): removed Assert that we don't replace a single arg (partialConstruct): removed Assert that we don't replace a single arg (matchVariableWithExtension): allow variable to match just one thing if we have a one sided identity * AU_ExtensionInfo.cc (makeClone): copy extraIdentityFlag (copy): copy extraIdentityFlag (buildMatchedPortion): handle extra identity case * AU_ExtensionInfo.hh (setExtraIdentity): added (class AU_ExtensionInfo): added data member extraIdentityFlag and decl for setExtraIdentity() Tue Jan 13 10:57:17 1998 Steven Eker * AU_LhsCompiler.cc (compileLhs): don't employ greedy or lone variable strategies if we have a one sided identity (analyseConstraintPropagation): don't propagate constraints on a lone variable if we have a one sided identity * AU_DagOperations.cc (eliminateForward): fixed bugs where we were not testing compare result against 0 (eliminateBackward): fixed symmtric bugs * AU_Matcher.cc (matchRigidPart): rewrote bound variable case using eliminateForward() and eliminateBackward() Mon Jan 12 17:44:19 1998 Steven Eker * AU_DagNode.hh (class AU_DagNode): added decls for eliminateForward() and eliminateBackward() * AU_DagOperations.cc (eliminateForward): added; the idea is that this function will match a target (typically avariable binding) against our dag node from a given position taking into to account the following possibilities: (a) the target might be our identity (b) the target might have our top symbol (c) the target might have our top symbol and have our identity underneath it (in first or last position). This pathogical case arises if we have a one sided identity. (eliminateBackward): added; symmetric to eliminateForward() for use in matchinging the rigid part. Fri Jan 9 11:13:19 1998 Steven Eker * AU_LhsAutomaton.cc (dump): use bool() to make takeIdentity and awkward flags print correctly * AU_Layer.cc (buildPartition): handle case where variable is bound to identity (may be by previous subproblem). Thu Jan 8 11:03:26 1998 Steven Eker * AU_Subproblem.cc (fillOutExtensionInfo): rewritten; only check matched portion if pattern ws in the error sort. * AU_Layer.cc (bindVariables): don't return out of loop with anything other than false otherwise we may return a solution with unbound variables Wed Jan 7 15:25:37 1998 Steven Eker * AU_FullMatcher.cc (fullMatchRigidBlock2): implemented (fullMatchFixedLengthBlock): implemented (fullMatch): need to call AU_Subproblem::complete() after subproblem has all the nodes added to do downTarget calculations * AU_DagNode.cc (eliminateSubject): handle the possibility that the target may be our identity * AU_FullMatcher.cc (addRemainingPaths): implemented * AU_LhsAutomaton.hh (class AU_LhsAutomaton): added data member nrSubjectsForRightVars * AU_FullMatcher.cc (determineRigidBlocks): treat awkward variables bound to identity as if they were bound to an alien (buildLeftmostPath): implemented (determineRigidBlocks): calculate nrSubjectsForRightVars Fri Jan 2 14:30:02 1998 Steven Eker * AU_LhsCompiler.cc (compileLhs): chnaged code to reflect new conventions for addFlexVariable() and addRigidVariable() regarding awkward variables * AU_LhsAutomaton.hh (class AU_LhsAutomaton): updated addFlexAbstractionVariable() decl * AU_LhsAutomaton.cc (addRigidVariable): set awkward = false (addFlexVariable): set awkward flag correctly (dump): print awkward flag (addFlexAbstractionVariable): take awkward arg and set awkward flag * AU_LhsAutomaton.hh (class AU_LhsAutomaton): added awkward flag to struct TopVariable * AU_CollapseMatcher.cc (uniqueCollapseMatch): deal with rigid part since it is NOT the case that the rigid part need be empty for collapse to occur. (multiwayCollapseMatch): deal with rigid part; in particular the case where we have a matching variable in the rigid part. nrTopVariables replaced by nrFlexVariables throughout file. (bindUnboundVariablesToIdentity): assert that variables in flex part can take identity. (multiwayCollapseMatch): changed many comments to reflect that repeated variables are not a problem and that they are handled correctly implicity though in some cases inefficiently. Removed some commented out code related to repeated variables Wed Dec 24 14:26:24 1997 Steven Eker * AU_LhsAutomaton.hh (class AU_LhsAutomaton): added decls for uniqueCollapseMatch() and multiwayCollapseMatch() * AU_CollapseMatcher.cc: created * AU_FullMatcher.cc (determineRigidBlocks): take identity into account when calculating number of subjects used up by variable and rigid blocks. * AU_LhsAutomaton.hh (class AU_LhsAutomaton): struct RigidBlock now has nrSubjectsForUs rather than nrExtraSubjects since bound variable may be bound to our identity * AU_FullMatcher.cc (fullMatch): need to add our AU_Subproblem to subproblems before we let addVariableBlocks() add variable abstraction subproblems * AU_LhsAutomaton.hh (class AU_LhsAutomaton): updated decl for addVariableBlocks() * AU_FullMatcher.cc: created * AU_LhsAutomaton.cc (dump): dump uniqueCollapseAutomaton if it exists * AU_LhsCompiler.cc (compileLhs): make uniqueCollapseAutomaton if needed * AU_LhsAutomaton.cc (AU_LhsAutomaton): added uniqueCollapseAutomaton arg * AU_LhsAutomaton.hh (class AU_LhsAutomaton): added data member uniqueCollapseAutomaton (class AU_LhsAutomaton): added uniqueCollapseAutomaton arg to ctor decl Tue Dec 23 10:58:30 1997 Steven Eker * AU_LhsAutomaton.cc (addFlexAbstractionVariable): removed shiftFactor arg (dump): don't try to print name of an abstraction variable * AU_LhsAutomaton.hh (class AU_LhsAutomaton): removed shiftFactor arg from addFlexAbstractionVariable() decl * AU_LhsCompiler.cc (compileLhs): when we add a flex variable in the general case we have to pass idPossible = true if matchAtTop because of extension. (compileLhs): don't pass shiftFactor to addFlexAbstractionVariable() since this will always be UNDEFINED (2 places). (addFixedLengthBlock): always pass idPossible = false to addFlexVariable() variable in fixed part can never take identity. * AU_Term.hh (class AU_Term): updated unitVariable() decl * AU_LhsCompiler.cc (compileLhs): handle flex lengths of 0 and 1 specially. (compileLhs): use greedySafe() (compileLhs): added Asserts (findConstraintPropagationSequence): code cleaning (compileLhs): code cleaning (unitVariable): removed matchAtTop argument and simplified; made local_inline (findConstraintPropagationSequence): don't pass matchAtTop argument to unitVariable() (compileLhs): rewritten; now explicity look for awkward variables; Mon Dec 22 14:40:40 1997 Steven Eker * AU_LhsCompiler.cc (compileLhs): handle identity/variable abstraction in flex part. * AU_Term.hh (class AU_Term): added decl for unitVariable() * AU_LhsCompiler.cc (unitVariable): added (findConstraintPropagationSequence): simplified using unitVariable() Fri Dec 19 10:18:25 1997 Steven Eker * AU_Term.hh (idPossible): made const (class AU_Term): updated decl for idPossible() * AU_LhsCompiler.cc (compileLhs): simplfied using idPossible() (2 places) (addFixedLengthBlock): simplfied using idPossible() (findConstraintPropagationSequence): rewritten do deal with abstracted aliens and variables that can take identity * AU_Term.cc (normalize): use idPossible() (analyseCollapses): use idPossible() (analyseCollapses): simplified * AU_Term.hh (idPossible): added (class AU_Term): added decl for idPossible() * AU_LhsCompiler.cc (compileLhs): pass idPossible args to addRigidVariable() and addFlexVariable() (addFixedLengthBlock): pass idPossible args to addFlexVariable() * AU_LhsAutomaton.hh (class AU_LhsAutomaton): updated decls for addRigidVariable() and addFlexVariable() * AU_LhsAutomaton.cc (addRigidVariable): added idPossible arg so that we can rule out left end variable taking id if left id missing and similarly with right (addFlexVariable): added idPossible arg Thu Dec 18 11:32:31 1997 Steven Eker * AU_LhsCompiler.cc (compileLhs): pass collapsePossible flag to AU_LhsAutomaton (compileLhs): inErrorSort implies not greedy * AU_LhsAutomaton.cc (dump): updated * AU_LhsAutomaton.hh (class AU_LhsAutomaton): added decl for addFlexAbstractionVariable() * AU_LhsAutomaton.cc (AU_LhsAutomaton): take collapsePossible arg (addRigidVariable): deal with variables that may take identity; clear abstracted pointer. (addFlexVariable): deal with variables that may take identity; clear abstracted pointer. (addFlexAbstractionVariable): added * AU_LhsAutomaton.hh (class AU_LhsAutomaton): added collapsePossible arg to ctor * AU_LhsCompiler.cc: created (analyseConstraintPropagation): handle the case where flex part conatins a lone abstracted term * AU_Term.cc (normalize): handle collapse case Sun Dec 14 15:28:05 1997 Steven Eker * AU_Layer.cc (bindVariables): handle the case where a variable is already bound to our identity. * AU_Subproblem.cc (solvePatterns): use AU_Layer::reset() * AU_Layer.hh (reset): added (class AU_Layer): added reset() decl (class AU_Layer): class AU_Subproblem is no longer a friend * AU_Subproblem.cc (AU_Subproblem): use initializeFirst() and initializeLast() * AU_Layer.hh (class AU_Layer): added decls for initializeFirst() and initializeLast() * AU_Layer.cc (initializeFirst): added (initializeLast): added * AU_Subproblem.cc (fillOutExtensionInfo): use firstSubtermMatched() and lastSubtermMatched(); * AU_Layer.hh (lastSubtermMatched): added (firstSubtermMatched): added (class AU_Subproblem): added decls Sat Dec 13 17:03:07 1997 Steven Eker * AU_DagNode.cc (matchVariableWithExtension): pass Sort* rather than SortCode to addTopVariable(); (matchVariableWithExtension): call complete(); * AU_Subproblem.hh (class AU_Subproblem): added decl for fillOutExtensionInfo() * AU_Subproblem.cc (fillOutExtensionInfo): added (solveVariables): simplify using fillOutExtensionInfo() Fri Dec 12 16:49:13 1997 Steven Eker * AU_Subproblem.cc (solveVariables): check to see if matched portion in error sort (solveVariables): check to see if matched portion is too small (less than two terms). This is possible because pattern could be variable or parts of big pattern could match take identity. * AU_Subproblem.hh (class AU_Subproblem): added decl for complete() * AU_Subproblem.cc (complete): added (addNode): deleted * AU_Subproblem.hh (addNode): added * AU_Layer.cc (solvePatterns2): use Assert(d >= totalLowerBound) rather than Assert(d >= prevVariables.length()) since some variables may be able to take identity and may not need any subterm (addTopVariable): update totalLowerBound (AU_Layer): initialize totalLowerBound * AU_Layer.hh (class AU_Layer): added decls for addTopVariable(), addNode(), complete() (class AU_Layer): added data member totalLowerBound * AU_Layer.cc (addNode): added (complete): added * AU_Subproblem.hh (class AU_Subproblem): deleted ~AU_Subproblem() decl * AU_Subproblem.cc (~AU_Subproblem): deleted (addTopVariable): deleted * AU_Subproblem.hh (addTopVariable): added (class AU_Subproblem): updated addTopVariable() decl * AU_Layer.cc (addTopVariable): added Thu Dec 11 18:08:35 1997 Steven Eker * AU_DagNode.hh (class AU_DagNode): AU_Layer replaces AU_Subproblem as a friend (class AU_DagNode): checkArguments() 1st arg made const * AU_Layer.cc: heavily rewritten to handle identity case Wed Dec 10 11:12:56 1997 Steven Eker * AU_Layer.cc: created * AU_Layer.hh (class AU_Layer): created * AU_Subproblem.hh (class AU_Subproblem): redesigned using AU_Layer * AU_Subproblem.cc: created * AU_DagNode.hh (class AU_DagNode): target arg of checkArguments() should be a reference * AU_DagNode.cc (checkArguments): added Tue Dec 9 16:07:04 1997 Steven Eker * AU_DagNode.hh (class AU_DagNode): added checkArguments() decl * AU_Matcher.cc (forcedLoneVariableCase): heavily rewritten * AU_LhsAutomaton.hh (class AU_LhsAutomaton): deleted boundsChecks() decl (class AU_LhsAutomaton): added collapseMatch() decl * AU_Matcher.cc: created (boundsChecks): deleted (match): heavily rewritten (matchRigidPart): heavily rewritten; removed several bugs inherited from A_Theory version Mon Dec 8 10:59:23 1997 Steven Eker * AU_Term.cc (dump): added (analyseCollapses): added (normalize): make sure we contract argArray after deleting identity elements (insertAbstractionVariables): added * AU_Term.hh (class AU_Term): added decls for analyseCollapses() insertAbstractionVariables(), and dump() * AU_Term.cc: created (normalize): fixed serious bug that was hand over from A_Term: we use wrong argArray length for computing hash value. * AU_ArgumentIterator.hh (class AU_ArgumentIterator): use AU_Term::tuple (AU_ArgumentIterator): use AU_Term::tuple * AU_ArgumentIterator.cc (argument): use AU_Term::tuple * AU_Term.hh (class AU_Term): added struct Tuple, argArray becomes Vector Sun Dec 7 15:02:26 1997 Steven Eker * AU_DagNode.cc (overwriteWithClone): don't put symbol() in local Symbol* variable (makeClone): don't put symbol() in local Symbol* variable * AU_DagNode.hh (class AU_DagNode): ctor takes AU_Symbol* rather than Symbol* * AU_RhsAutomaton.cc: created * AU_RhsAutomaton.hh (class AU_RhsAutomaton): created * AU_ArgumentIterator.cc: created * AU_Subproblem.hh (class AU_Subproblem): created * AU_ArgumentIterator.hh (class AU_ArgumentIterator): created Fri Dec 5 10:46:19 1997 Steven Eker * AU_Term.hh (class AU_Term): created * AU_ExtensionInfo.cc: created * AU_ExtensionInfo.hh (class AU_ExtensionInfo): created * AU_DagArgumentIterator.cc: created * AU_DagNode.hh (symbol): added * AU_DagArgumentIterator.hh (class AU_DagArgumentIterator): created * AU_Theory.hh: created * AU_DagNode.cc: created * AU_Symbol.cc (eqRewrite): rewritten along the lines of ACU_Symbol::eqRewrite() (computeBaseSort): use producedByAssignment() optimization in uniform sort case * AU_DagNode.hh (class AU_DagNode): created * AU_Symbol.cc (computeBaseSort): use local static sortIndexBuffer in place of utilityBuffer deleted utilityBuffer * AU_Symbol.hh (class AU_Symbol): deleted utilityBuffer decl * AU_Symbol.cc: created * AU_Symbol.hh (class AU_Symbol): created maude-3.1/src/AU_Theory/AU_LhsCompiler.cc0000644000175200017520000003723713576050735015167 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation of match compilation for A, AUl, AUr and AU theories. // struct AU_Term::CP_Sequence { Vector sequence; // true = take left term, false = take right term NatSet bound; int cardinality; int firstFlex; }; local_inline bool AU_Term::unitVariable(VariableTerm* vt, int index) const { if (vt == 0) return false; AU_Symbol* s = symbol(); Sort* vs = vt->getSort(); // // A unit variable has a bound of one imposed by its sort and it cannot take an // identity either because a suitable left/right identity doesn't exist or // its sort is too low. // return (s->sortBound(vs) == 1 && !(idPossible(index) && s->takeIdentity(vs))); } void AU_Term::analyseConstraintPropagation(NatSet& boundUniquely) const { CP_Sequence bestSequence; findConstraintPropagationSequence(boundUniquely, bestSequence); boundUniquely = bestSequence.bound; // deep copy if (bestSequence.sequence.length() == argArray.length() - 1) { AU_Symbol* s = symbol(); // // Lone variable or abstracted term in flex part. We // can only guarentee unique binding if our top symbol // does not have a one sided identity. // if (!(s->oneSidedId())) argArray[bestSequence.firstFlex].term->analyseConstraintPropagation(boundUniquely); } } LhsAutomaton* AU_Term::compileLhs2(bool matchAtTop, const VariableInfo& variableInfo, NatSet& boundUniquely, bool& subproblemLikely) { AU_Symbol* s = symbol(); bool oneSidedIdentity = s->oneSidedId(); LhsAutomaton* uniqueCollapseAutomaton = 0; if (uniqueCollapseSubtermIndex != NONE) { // // Maybe we should add the variable(s) which will be bound to identity // to this local bound uniquely. // NatSet local(boundUniquely); bool spl; uniqueCollapseAutomaton = argArray[uniqueCollapseSubtermIndex].term-> compileLhs(matchAtTop, variableInfo, local, spl); } AU_LhsAutomaton* a = new AU_LhsAutomaton(s, matchAtTop, !(collapseSymbols().empty()), uniqueCollapseAutomaton, variableInfo.getNrProtectedVariables()); subproblemLikely = false; int leftPos = 0; int rightPos = argArray.length() - 1; if (!matchAtTop) { // // Build rigid part. // CP_Sequence bestSequence; findConstraintPropagationSequence(boundUniquely, bestSequence); int nrRigid = bestSequence.sequence.length(); for (int i = 0; i < nrRigid; i++) { bool leftEnd = bestSequence.sequence[i]; int j = leftEnd ? leftPos++ : rightPos--; Term* t = argArray[j].term; VariableTerm* v = dynamic_cast(t); if (v != 0) { a->addRigidVariable(v, leftEnd, idPossible(j)); boundUniquely.insert(v->getIndex()); } else if (t->ground()) a->addRigidGroundAlien(t, leftEnd); else { bool spl; LhsAutomaton* subAutomaton = t->compileLhs(false, variableInfo, boundUniquely, spl); a->addRigidNonGroundAlien(subAutomaton, leftEnd); subproblemLikely = subproblemLikely || spl; } } Assert(boundUniquely == bestSequence.bound, "bound clash"); // // Build flex part (special cases). // int nrFlex = rightPos - leftPos + 1; if (nrFlex == 0) { a->complete(AU_LhsAutomaton::GROUND_OUT); return a; } if (nrFlex == 1 && !oneSidedIdentity) { Assert(!matchAtTop, "shouldn't match at top"); Tuple& t = argArray[leftPos]; if (t.abstractionVariableIndex == NONE) { VariableTerm* vt = dynamic_cast(t.term); a->addFlexVariable(vt, UNDEFINED, idPossible(leftPos)); boundUniquely.insert(vt->getIndex()); a->complete((s->sortStructure(vt->getSort()) == AssociativeSymbol::PURE_SORT) ? AU_LhsAutomaton::FAST_LONE_VARIABLE : AU_LhsAutomaton::LONE_VARIABLE); } else { bool matchOurIdentity = t.matchOurIdentity && idPossible(leftPos); Assert(t.collapseToOurSymbol || matchOurIdentity, "should not use abstraction variable"); bool spl; a->addFlexAbstractionVariable (t.abstractionVariableIndex, t.term->getComponent()->sort(Sort::ERROR_SORT), t.collapseToOurSymbol ? UNBOUNDED : 1, matchOurIdentity, false, t.term->compileLhs(false, variableInfo, boundUniquely, spl)); subproblemLikely = subproblemLikely || spl; a->complete(AU_LhsAutomaton::LONE_VARIABLE); } return a; } } // // Build flex part (general case). // // Greedy matcher: // (1) does not check to see if matched portion is in error sort; // (2) cannot handle the intricacies involved in one sided identity theories; // (3) does not check that enough has been matched if extension present. // bool greedy = !oneSidedIdentity && (!matchAtTop || collapseSymbols().empty()); int fixedLengthBlockStart = NONE; for (int i = leftPos; i <= rightPos; i++) { Tuple& t = argArray[i]; greedy = greedy && t.abstractionVariableIndex == NONE && t.term->greedySafe(variableInfo, boundUniquely); // // Check if thing we match will be of fixed size. // bool fixedSize = (t.abstractionVariableIndex == NONE); VariableTerm* vt = dynamic_cast(t.term); if (vt != 0) { Sort* vs = vt->getSort(); bool ip = idPossible(i); bool ti = s->takeIdentity(vs); bool awkward = matchAtTop && !ip && ti; greedy = greedy && !awkward; if (((matchAtTop || ip) && ti) || s->sortBound(vs) > 1) { fixedSize = false; greedy = greedy && (boundUniquely.contains(vt->getIndex()) || s->sortStructure(vs) >= AssociativeSymbol::LIMIT_SORT); } } // // If not fixed size, see if we ended a fixed size block; then add // flex variable or flex abstraction variable. Otherwise see if we need // to start a fixed length block. // if (!fixedSize) { if (fixedLengthBlockStart != NONE) { bool spl; addFixedLengthBlock(a, fixedLengthBlockStart, i - fixedLengthBlockStart, variableInfo, boundUniquely, spl); greedy = greedy && !spl; fixedLengthBlockStart = NONE; } bool ip = idPossible(i); if (t.abstractionVariableIndex == NONE) a->addFlexVariable(vt, UNDEFINED, ip); else { bool matchOurIdentity = ip && t.matchOurIdentity; bool awkward = matchAtTop && !ip && t.matchOurIdentity; Assert(t.collapseToOurSymbol || matchOurIdentity || awkward, "should not use abstraction variable"); NatSet local(boundUniquely); bool spl; a->addFlexAbstractionVariable (t.abstractionVariableIndex, t.term->getComponent()->sort(Sort::ERROR_SORT), t.collapseToOurSymbol ? UNBOUNDED : 1, matchOurIdentity, awkward, t.term->compileLhs(false, variableInfo, local, spl)); } } else { if (fixedLengthBlockStart == NONE) fixedLengthBlockStart = i; } } // // Handle any remaining fixed length block. // if (fixedLengthBlockStart != NONE) { Assert(matchAtTop, "ended flex part with fixed length block"); bool spl; addFixedLengthBlock(a, fixedLengthBlockStart, argArray.length() - fixedLengthBlockStart, variableInfo, boundUniquely, spl); greedy = greedy && !spl; } // // Finish up by decideding on a match strategy. // if (!greedy) subproblemLikely = true; a->complete(greedy ? AU_LhsAutomaton::GREEDY : AU_LhsAutomaton::FULL); return a; } void AU_Term::addFixedLengthBlock(AU_LhsAutomaton* a, int blockStart, int blockLength, const VariableInfo& variableInfo, const NatSet& boundUniquely, bool& subproblemLikely) { // // For each possible shift factor sh from 1 to blockLength - 1 we // find the index of the rightmost pattern p such that if the p matches // some subject s (possibly with a subproblem that may or not be soluble), // the pattern q that is sh places to the left of p will fail early // on s, thus ruling out a shift of sh during matching. // Vector largestIndexThatFails(blockLength); for (int shift = 1; shift < blockLength; shift++) { largestIndexThatFails[shift] = -1; // default; shift is never ruled out for (int i = blockLength - 1; i >= shift; i--) { int b = blockStart + i; Term* p = argArray[b].term; // assume p matched subject Term* q = argArray[b - shift].term; // q will get p's subject after a shift if (q->earlyMatchFailOnInstanceOf(p)) { largestIndexThatFails[shift] = i; break; } } } // // For each pattern p we find the smallest shift that is not ruled out // when a match for that pattern fails and matches for all the patterns // to the right of it succeed (modulo a possible subproblem). // subproblemLikely = false; for (int i = 0; i < blockLength; i++) { int b = blockStart + i; Term* p = argArray[b].term; int shift = 1; for (; shift < blockLength; shift++) { // // A shift can be ruled out because a match to the right // of p; // if (i < largestIndexThatFails[shift]) continue; // // Or because the p is more general than the pattern // that will get it's subject after the shift. Here we need // to be careful because variables bound by an external agency // can invalidate subsumption. We rely on the convention that // the external agency adds any variables that it might bind // to the set of condition variables. // if (i >= shift && p->occursBelow().disjoint(variableInfo.getConditionVariables()) && p->subsumes(argArray[b - shift].term, true)) continue; else break; } VariableTerm* v = dynamic_cast(p); if (v != 0) a->addFlexVariable(v, shift, false); else if (p->ground()) a->addFlexGroundAlien(p, shift); else { NatSet local(boundUniquely); bool spl; LhsAutomaton* subAutomaton = p->compileLhs(false, variableInfo, local, spl); a->addFlexNonGroundAlien(subAutomaton, shift); subproblemLikely = subproblemLikely || spl; } } } void AU_Term::findConstraintPropagationSequence(const NatSet& boundUniquely, CP_Sequence& bestSequence) const { DebugAdvisory("toplevel findConstraintPropagationSequence() - array length = " << argArray.length() << " subterm = " << this); Vector currentSequence; bestSequence.cardinality = -1; findConstraintPropagationSequence(currentSequence, boundUniquely, 0, argArray.length() - 1, bestSequence); } void AU_Term::findConstraintPropagationSequence(const Vector& currentSequence, const NatSet& boundUniquely, int leftPos, int rightPos, CP_Sequence& bestSequence) const { if (leftPos <= rightPos) { // // Try to grow search tree. // // (1) If left or right term is not abstracted and grounds out // match it next and don't consider other possibilities. // const Tuple& lt = argArray[leftPos]; bool leftBad = lt.collapseToOurSymbol || (lt.matchOurIdentity && idPossible(leftPos)); if (!leftBad && boundUniquely.contains(lt.term->occursBelow())) { DebugAdvisory("lower level findConstraintPropagationSequence() - ground out left " << leftPos); Vector newSequence(currentSequence); newSequence.append(true); findConstraintPropagationSequence(newSequence, boundUniquely, leftPos + 1, rightPos, bestSequence); return; } const Tuple& rt = argArray[rightPos]; bool rightBad = (leftPos == rightPos) || rt.collapseToOurSymbol || (rt.matchOurIdentity && idPossible(rightPos)); if (!rightBad && boundUniquely.contains(rt.term->occursBelow())) { DebugAdvisory("lower level findConstraintPropagationSequence() - ground out right " << rightPos); Vector newSequence(currentSequence); newSequence.append(false); findConstraintPropagationSequence(newSequence, boundUniquely, leftPos, rightPos - 1, bestSequence); return; } // // (2) If left or right term is a variable of unit sort which cannot take // identity match it next and don't consider other possibilities. // VariableTerm* ltVar = dynamic_cast(lt.term); if (unitVariable(ltVar, leftPos)) { DebugAdvisory("lower level findConstraintPropagationSequence() - unit var left " << leftPos); Vector newSequence(currentSequence); newSequence.append(true); NatSet newBound(boundUniquely); newBound.insert(ltVar->getIndex()); findConstraintPropagationSequence(newSequence, newBound, leftPos + 1, rightPos, bestSequence); return; } VariableTerm* rtVar = dynamic_cast(rt.term); if (leftPos < rightPos && unitVariable(rtVar, rightPos)) { DebugAdvisory("lower level findConstraintPropagationSequence() - unit var right " << rightPos); Vector newSequence(currentSequence); newSequence.append(false); NatSet newBound(boundUniquely); newBound.insert(rtVar->getIndex()); findConstraintPropagationSequence(newSequence, newBound, leftPos, rightPos - 1, bestSequence); return; } // // If left or right term is a non-abstracted alien then consider // matching it next but also consider other possibilities. // bool growth = false; if (!leftBad && ltVar == 0) { DebugAdvisory("lower level findConstraintPropagationSequence() - alien left " << leftPos); Vector newSequence(currentSequence); newSequence.append(true); NatSet newBound(boundUniquely); lt.term->analyseConstraintPropagation(newBound); findConstraintPropagationSequence(newSequence, newBound, leftPos + 1, rightPos, bestSequence); growth = true; } if (bestSequence.sequence.length() >= argArray.length() - 1) { // // All arguments or all arguments but one have a forced match (with the left over argument taking what is left). // There will be no branching at match time, so considering an alternative order is a waste of time. // DebugAdvisory("lower level findConstraintPropagationSequence() - aborting right branch"); return; } if (!rightBad && rtVar == 0) { DebugAdvisory("lower level findConstraintPropagationSequence() - alien right " << rightPos); Vector newSequence(currentSequence); newSequence.append(false); NatSet newBound(boundUniquely); rt.term->analyseConstraintPropagation(newBound); findConstraintPropagationSequence(newSequence, newBound, leftPos, rightPos - 1, bestSequence); growth = true; } if (growth) return; } int n = boundUniquely.cardinality(); if (n > bestSequence.cardinality || (n == bestSequence.cardinality && currentSequence.length() > bestSequence.sequence.length())) { bestSequence.sequence = currentSequence; // deep copy bestSequence.bound = boundUniquely; // deep copy bestSequence.cardinality = n; bestSequence.firstFlex = leftPos <= rightPos ? leftPos : NONE; } } maude-3.1/src/AU_Theory/AU_DequeDagNode.hh0000644000175200017520000000515313576050635015234 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for A and AU dag nodes based on persistent deques. // #ifndef _AU_DequeDagNode_hh_ #define _AU_DequeDagNode_hh_ #include "AU_BaseDagNode.hh" #include "AU_Deque.hh" class AU_DequeDagNode : public AU_BaseDagNode { NO_COPYING(AU_DequeDagNode); public: AU_DequeDagNode(AU_Symbol* symbol, const AU_Deque& original); // // Functions required by theory interface. // RawDagArgumentIterator* arguments(); size_t getHashValue(); int compareArguments(const DagNode* other) const; void overwriteWithClone(DagNode* old); DagNode* makeClone(); DagNode* copyWithReplacement(int argIndex, DagNode* replacement); DagNode* copyWithReplacement(Vector& redexStack, int first, int last); // // Functions required to handle extension information. // ExtensionInfo* makeExtensionInfo(); // // Interface for narrowing. // // This is needed to remove any deque nodes from dag being narrowed since // unification and narrowing functionality doesn't support them. // bool indexVariables2(NarrowingVariableInfo& indices, int baseIndex); // // Functions particular to AU_DequeDagNode. // int nrArgs() const; const AU_Deque& getDeque() const; static AU_DagNode* dequeToArgVec(AU_DequeDagNode* original); private: // // Functions required by theory interface. // DagNode* markArguments(); DagNode* copyEagerUptoReduced2(); DagNode* copyAll2(); void clearCopyPointers2(); AU_Deque deque; }; inline AU_DequeDagNode::AU_DequeDagNode(AU_Symbol* symbol, const AU_Deque& original) : AU_BaseDagNode(symbol), deque(original) { setNormalizationStatus(DEQUE); } inline int AU_DequeDagNode::nrArgs() const { return deque.length(); } inline const AU_Deque& AU_DequeDagNode::getDeque() const { return deque; } #endif maude-3.1/src/AU_Theory/AU_ExtensionInfo.cc0000644000175200017520000000423313576050735015524 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class AU_ExtensionInfo. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "AU_Theory.hh" // A theory class definitions #include "AU_Symbol.hh" #include "AU_DagNode.hh" #include "AU_ExtensionInfo.hh" DagNode* AU_ExtensionInfo::buildMatchedPortion() const { if (matchedWhole()) return subject; int nrSubterms = last - first + 1; Assert(nrSubterms + extraIdentityFlag >= 2, "at least 2 subterms must be matched"); return subject->makeFragment(first, nrSubterms, extraIdentityFlag); } ExtensionInfo* AU_ExtensionInfo::makeClone() const { AU_ExtensionInfo* e = new AU_ExtensionInfo(subject); e->setValidAfterMatch(validAfterMatch()); bool whole = matchedWhole(); e->setMatchedWhole(whole); if (!whole) { e->first = first; e->last = last; e->extraIdentityFlag = extraIdentityFlag; } return e; } void AU_ExtensionInfo::copy(ExtensionInfo* extensionInfo) { AU_ExtensionInfo* e = safeCast(AU_ExtensionInfo*, extensionInfo); setValidAfterMatch(e->validAfterMatch()); bool whole = e->matchedWhole(); setMatchedWhole(whole); subject = e->subject; if (!whole) { first = e->first; last = e->last; extraIdentityFlag = e->extraIdentityFlag; } } maude-3.1/src/AU_Theory/AU_ExtensionInfo.hh0000644000175200017520000000433613576050635015541 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class to record what part of an AU theory dag node was matched. // #ifndef _AU_ExtensionInfo_hh_ #define _AU_ExtensionInfo_hh_ #include "extensionInfo.hh" class AU_ExtensionInfo : public ExtensionInfo { public: AU_ExtensionInfo(AU_DagNode* subject); DagNode* buildMatchedPortion() const; ExtensionInfo* makeClone() const; void copy(ExtensionInfo* extensionInfo); void setFirstMatched(int firstMatched); void setLastMatched(int lastMatched); void setExtraIdentity(bool flag); int firstMatched() const; int lastMatched() const; bool bigEnough() const; private: AU_DagNode* subject; int first; int last; bool extraIdentityFlag; // portion matched contains an identity not present in subject. }; inline AU_ExtensionInfo::AU_ExtensionInfo(AU_DagNode* subject) : subject(subject) { } inline void AU_ExtensionInfo::setFirstMatched(int firstMatched) { first = firstMatched; } inline void AU_ExtensionInfo::setLastMatched(int lastMatched) { last = lastMatched; setMatchedWhole(first == 0 && last == subject->argArray.length() - 1); } inline void AU_ExtensionInfo::setExtraIdentity(bool flag) { extraIdentityFlag = flag; } inline int AU_ExtensionInfo::firstMatched() const { return first; } inline int AU_ExtensionInfo::lastMatched() const { return last; } inline bool AU_ExtensionInfo::bigEnough() const { return last - first + 1 + extraIdentityFlag >= 2; } #endif maude-3.1/src/AU_Theory/AU_RhsAutomaton.cc0000644000175200017520000000563213576050735015364 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class AU_RhsAutomaton. // // utility stuff #include "macros.hh" #include "vector.hh" #include "indent.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "AU_Theory.hh" // core class definitions #include "substitution.hh" #include "variableInfo.hh" // AU theory class definitions #include "AU_Symbol.hh" #include "AU_DagNode.hh" #include "AU_RhsAutomaton.hh" AU_RhsAutomaton::AU_RhsAutomaton(AU_Symbol* symbol, int nrArgs) : topSymbol(symbol), arguments(0, nrArgs) { } void AU_RhsAutomaton::remapIndices(VariableInfo& variableInfo) { destination = variableInfo.remapIndex(destination); int nrArgs = arguments.length(); for (int i = 0; i < nrArgs; i++) arguments[i] = variableInfo.remapIndex(arguments[i]); } local_inline void AU_RhsAutomaton::buildArguments(ArgVec& argArray, Substitution& matcher) const { Vector::const_iterator j = arguments.begin(); const Vector::const_iterator e = j + nrArguments; Assert(nrArguments > 0, "no args"); ArgVec::iterator i = argArray.begin(); do { *i = matcher.value(*j); ++i; ++j; } while (j != e); Assert(i == argArray.end(), "iterator inconsistent"); } DagNode* AU_RhsAutomaton::construct(Substitution& matcher) { AU_DagNode* n = new AU_DagNode(topSymbol, nrArguments); buildArguments(n->argArray, matcher); matcher.bind(destination, n); return n; } void AU_RhsAutomaton::replace(DagNode* old, Substitution& matcher) { buildArguments((new(old) AU_DagNode(topSymbol, nrArguments))->argArray, matcher); } #ifdef DUMP void AU_RhsAutomaton::dump(ostream& s, const VariableInfo& variableInfo, int indentLevel) { s << Indent(indentLevel) << "Begin{AU_RhsAutomaton}\n"; ++indentLevel; s << Indent(indentLevel) << "[" << destination << "] <= " << topSymbol << '('; int nrArgs = arguments.length(); for (int i = 0; i < nrArgs; i++) { s << '[' << arguments[i] << "]"; if (i + 1 < nrArgs) s << ", "; } s << ")\n"; s << Indent(indentLevel - 1) << "End{AU_RhsAutomaton}\n"; } #endif maude-3.1/src/AU_Theory/AU_Layer.cc0000644000175200017520000002527313576050735014017 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class AU_Layer. // // utility stuff #include "macros.hh" #include "vector.hh" #include "sequencePartition.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "AU_Theory.hh" // interface class definitions #include "symbol.hh" #include "term.hh" #include "subproblem.hh" // core class definitions #include "rewritingContext.hh" #include "localBinding.hh" // AU theory class definitions #include "AU_Symbol.hh" // HACK #undef assert #include "AU_DagNode.hh" #include "AU_ExtensionInfo.hh" #include "AU_Layer.hh" AU_Layer::AU_Layer() { leftExtend = false; rightExtend = false; totalLowerBound = 0; totalUpperBound = 0; partition = 0; } AU_Layer::~AU_Layer() { int nrNodes = nodes.length(); for (int i = 0; i < nrNodes; i++) { Node& n = nodes[i]; delete n.difference; delete n.subproblem; } delete partition; } void AU_Layer::initialize(AU_DagNode* subjectDag) { subject = subjectDag; lastSubjectSubterm = subjectDag->argArray.length() - 1; AU_Symbol* s = subjectDag->symbol(); oneSidedId = s->oneSidedId(); leftId = s->leftId(); } void AU_Layer::initializeFirst(int first, AU_ExtensionInfo* extension) { firstSubterm = first; if (extension != 0) { extensionInfo = extension; leftExtend = true; totalUpperBound = UNBOUNDED; } } void AU_Layer::initializeLast(int last, AU_ExtensionInfo* extension) { lastSubterm = last; if (extension != 0) { extensionInfo = extension; rightExtend = true; totalUpperBound = UNBOUNDED; } } void AU_Layer::addTopVariable(int index, int lowerBound, int upperBound, Sort* sort) { int nrVariables = prevVariables.length(); prevVariables.expandBy(1); TopVariable& tv = prevVariables[nrVariables]; tv.index = index; tv.lowerBound = lowerBound; tv.upperBound = upperBound; tv.sort = sort; totalLowerBound += lowerBound; totalUpperBound = uplus(totalUpperBound, upperBound); } void AU_Layer::addNode(LocalBinding* difference, Subproblem* subproblem, int firstSubterm, int lastSubterm) { int nrNodes = nodes.length(); nodes.expandBy(1); Node& n = nodes[nrNodes]; n.difference = difference; n.subproblem = subproblem; n.firstSubterm = firstSubterm; n.lastSubterm = lastSubterm; n.downTarget = UNDEFINED; } void AU_Layer::link(AU_Layer& nextLayer) { int nrNodes = nodes.length(); int j = 0; int nextStart = nextLayer.nodes[j].firstSubterm - nextLayer.totalLowerBound; for (int i = 0; i < nrNodes; i++) { int lastSubterm = nodes[i].lastSubterm; while (nextStart <= lastSubterm) { ++j; Assert(j < nextLayer.nodes.length(), "could not find a valid target for node " << i); nextStart = nextLayer.nodes[j].firstSubterm - nextLayer.totalLowerBound; } nodes[i].downTarget = j; } } bool AU_Layer::solvePatterns(bool findFirst, RewritingContext& solution, AU_Layer& nextLayer) { if (solvePatterns2(findFirst, solution)) { Node& n = nodes[selectedNode]; lastSubterm = n.firstSubterm - 1; nextLayer.firstSubterm = n.lastSubterm + 1; nextLayer.selectedNode = n.downTarget; return true; } return false; } bool AU_Layer::solvePatterns2(bool findFirst, RewritingContext& solution) { int nrNodes = nodes.length(); for(; selectedNode < nrNodes; selectedNode++) { Node& n = nodes[selectedNode]; if (findFirst) { int d = n.firstSubterm - firstSubterm; Assert(d >= totalLowerBound, "insufficient subterms for previous variables"); if (d > totalUpperBound) break; if (n.difference != 0 && !(n.difference->assert(solution))) continue; } if (n.subproblem == 0) { if (findFirst) return true; } else { if (n.subproblem->solve(findFirst, solution)) return true; } if (n.difference != 0) n.difference->retract(solution); findFirst = true; } return false; } bool AU_Layer::solveVariables(bool findFirst, RewritingContext& solution) { if (findFirst) partition = buildPartition(solution); while (solvePartition(findFirst)) { if (bindVariables(solution)) return true; MemoryCell::okToCollectGarbage(); // to avoid build up of failed solutions findFirst = false; } unbindVariables(solution); delete partition; partition = 0; return false; } bool AU_Layer::solvePartition(bool findFirst) { if (oneSidedId) { int nrVariables = prevVariables.length(); if (!findFirst) { // // See if we can change existing solution by messing with extra // identities. // int nrVariables = prevVariables.length(); for (int i = nrVariables - 1; i >= 0; i--) { TopVariable& tv = prevVariables[i]; if (tv.boundByUs && !(tv.extraId)) { int start = firstSubterm + partition->start(i + leftExtend); int end = firstSubterm + partition->end(i + leftExtend); int nrSubterms = end - start + 1; if (nrSubterms > 0 && nrSubterms < tv.upperBound && (leftId ? (end < lastSubjectSubterm) : (start > 0))) { tv.extraId = true; for (i++; i < nrVariables; i++) { TopVariable& v = prevVariables[i]; if (v.boundByUs) v.extraId = false; } return true; } } } } for (int i = 0; i < nrVariables; i++) { TopVariable& tv = prevVariables[i]; if (tv.boundByUs) tv.extraId = false; } } return partition->solve(); } SequencePartition* AU_Layer::buildPartition(const Substitution& solution) { AU_Symbol* s = subject->symbol(); int nrVariables = prevVariables.length(); int nrParts = nrVariables + leftExtend + rightExtend; Assert(nrParts > 0, "no parts"); SequencePartition* p = new SequencePartition(lastSubterm - firstSubterm + 1, nrParts); if (leftExtend) p->insertPart(0, UNBOUNDED); for (int i = 0; i < nrVariables; i++) { TopVariable& v = prevVariables[i]; int min = v.lowerBound; int max = v.upperBound; DagNode* d = solution.value(v.index); if (d != 0) { v.boundByUs = false; bool leftExtreme = (i == 0 && firstSubterm == 0); bool rightExtreme = (i == nrVariables - 1 && lastSubterm == lastSubjectSubterm); bool nasty; min = max = s->calculateNrSubjectsMatched(d, leftExtreme, rightExtreme, nasty); DebugAdvisoryCheck(!nasty, "nasty binding of " << d << " to variable with index " << v.index << " detected in solve phase"); if (nasty && (leftId ? rightExtend : leftExtend)) { // // Because extension may take extreme end, matching one // less subterm is possible. // --min; } } else { v.boundByUs = true; // // Check for early occurrence of same variable in this block. // for (int j = 0; j < i; j++) { if (prevVariables[j].index == v.index) { v.boundByUs = false; break; } } } p->insertPart(min, max); } if (rightExtend) p->insertPart(0, UNBOUNDED); return p; } bool AU_Layer::bindVariables(RewritingContext& solution) { bool buildReducedNodes = subject->isReduced(); AU_Symbol* topSymbol = subject->symbol(); int nrVariables = prevVariables.length(); for (int i = 0; i < nrVariables; i++) { int start = firstSubterm + partition->start(i + leftExtend); int end = firstSubterm + partition->end(i + leftExtend); TopVariable& tv = prevVariables[i]; if (tv.boundByUs) { int nrSubterms = end - start + 1; if (nrSubterms == 0) { if (oneSidedId) { if (leftId ? (end == lastSubjectSubterm) : (start == 0)) return false; // can't assign one sided identity } solution.bind(tv.index, topSymbol->getIdentityDag()); } else { DagNode* d = subject->makeFragment(start, nrSubterms, oneSidedId && prevVariables[i].extraId); if (!(d->checkSort(tv.sort, solution))) return false; if (d->symbol() == topSymbol) { // // makeFragment() will have produced an AU_DagNode* // safeCast(AU_DagNode*, d)->setProducedByAssignment(); if (buildReducedNodes && d->getSortIndex() != Sort::SORT_UNKNOWN) d->setReduced(); } solution.bind(tv.index, d); } } else { DagNode* d = solution.value(tv.index); Assert(d != 0, "variable should be bound"); if (!(subject->eliminateForward(d, start, end) && start == end + 1)) return false; } } if (leftExtend) { if (!leftId) extensionInfo->setExtraIdentity(false); Assert(firstSubterm == 0, "non zero firstSubterm in left extension case"); int first = partition->end(0) + 1; extensionInfo->setFirstMatched(first); if (oneSidedId && !leftId && first != 0 && nrVariables > 0) { int nrMatched = partition->end(1) - first + 1; DagNode* d = solution.value(prevVariables[0].index); if (nrMatched == 0 || (d->symbol() == topSymbol && static_cast(d)->argArray.length() > nrMatched)) // FIX extensionInfo->setExtraIdentity(true); } } if (rightExtend) { if (leftId) extensionInfo->setExtraIdentity(false); int last = firstSubterm + partition->start(nrVariables + leftExtend) - 1; extensionInfo->setLastMatched(last); if (oneSidedId && leftId && last != lastSubjectSubterm && nrVariables > 0) { int nrMatched = partition->start(nrVariables + leftExtend) - partition->start(nrVariables - 1 + leftExtend); DagNode* d = solution.value(prevVariables[0].index); if (nrMatched == 0 || (d->symbol() == topSymbol && static_cast(d)->argArray.length() > nrMatched)) // FIX extensionInfo->setExtraIdentity(true); } } return true; } void AU_Layer::unbindVariables(RewritingContext& solution) { int nrVariables = prevVariables.length(); for (int i = 0; i < nrVariables; i++) { TopVariable& v = prevVariables[i]; if (v.boundByUs) solution.bind(v.index, 0); } } maude-3.1/src/AU_Theory/AU_Subproblem.hh0000644000175200017520000000457513576050635015070 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for subproblems in the the A, AUl, AUr and AU theories. // They consist of a directed acyclic graph and a set of sequence // partitioning problems. // #ifndef _AU_Subproblem_hh_ #define _AU_Subproblem_hh_ #include "subproblem.hh" #include "AU_Layer.hh" class AU_Subproblem : public Subproblem { public: AU_Subproblem(AU_DagNode* subject, int firstSubterm, int lastSubterm, int nrBlockPairs, AU_ExtensionInfo* extensionInfo); bool solve(bool findFirst, RewritingContext& solution); void addTopVariable(int layerNr, int index, int lowerBound, int upperBound, Sort* sort); void addNode(int layerNr, LocalBinding* difference, Subproblem* subproblem, int firstSubterm, int lastSubterm); void complete(); private: bool solvePatterns(bool findFirst, RewritingContext& solution); bool solveVariables(bool findFirst, RewritingContext& solution); AU_ExtensionInfo* const extensionInfo; // extension information object to be filled in Vector layers; // layers of directed acyclic graph }; inline void AU_Subproblem::addTopVariable(int layerNr, int index, int lowerBound, int upperBound, Sort* sort) { layers[layerNr].addTopVariable(index, lowerBound, upperBound, sort); } inline void AU_Subproblem::addNode(int layerNr, LocalBinding* difference, Subproblem* subproblem, int firstSubterm, int lastSubterm) { layers[layerNr].addNode(difference, subproblem, firstSubterm, lastSubterm); } #endif maude-3.1/src/AU_Theory/AU_CollapseMatcher.cc0000644000175200017520000002406613576050735016010 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for matching where AU top symbol collapses. // bool AU_LhsAutomaton::uniqueCollapseMatch(DagNode* subject, Substitution& solution, Subproblem*& returnedSubproblem, ExtensionInfo* extensionInfo) { // // Because one subterm cannot take the identity element we can only // collapse to that subterm. // Every other subterm will be a variable that can take identity. For a // match to be possible it either must be already bound to identity or is // now bound to identity. // Term* identity = topSymbol->getIdentity(); int rigidLength = rigidPart.length(); for (int i = 0; i < rigidLength; i++) { Subterm& r = rigidPart[i]; if (r.type == VARIABLE && r.variable.takeIdentity) { int index = r.variable.index; DagNode* d = solution.value(index); if (d == 0) { // // The only way an unbound variable that can take // identity can be in the rigid part is if it is // supposed to be bound by the unique subterm we will // collapse to. We need to bind it to identity to ensure // we don't produce a false match by binding it to // something else. // solution.bind(index, topSymbol->getIdentityDag()); } else { if(!(identity->equal(d))) return false; } Assert(!r.variable.abstracted, "abstraction varible in rigid part"); } } SubproblemAccumulator subproblems; int flexLength = flexPart.length(); for (int i = 0; i < flexLength; i++) { Subterm& f = flexPart[i]; if (f.type == VARIABLE && f.variable.takeIdentity) { // // BUG: If f is an awkward variable or awkward abstraction variable // then it could be our uniqueCollapseSubterm even though // f.variable.takeIdentity is true. Need to find a clean way of // handling awkward variables. // // 11/6/08: This probably isn't a bug since awkward variables no longer get // their takeIdentity flags set to true. // int index = f.variable.index; DagNode* d = solution.value(index); if (d == 0) solution.bind(index, topSymbol->getIdentityDag()); else { if(!(identity->equal(d))) return false; } if (f.variable.abstracted != 0) { Subproblem* subproblem; if(!(f.variable.abstracted->match(solution.value(index), solution, subproblem))) return false; subproblems.add(subproblem); } } } Subproblem* subproblem; if (!(uniqueCollapseAutomaton->match(subject,solution, subproblem, extensionInfo))) return false; subproblems.add(subproblem); returnedSubproblem = subproblems.extractSubproblem(); return true; } void AU_LhsAutomaton::bindUnboundVariablesToIdentity(Substitution& solution, int exception) { int nrFlexVariables = flexPart.length(); for (int i = 0; i < nrFlexVariables; i++) { Assert(flexPart[i].type == VARIABLE && flexPart[i].variable.takeIdentity, "non variable in multiway collapse"); if (i != exception) { int index = flexPart[i].variable.index; if (solution.value(index) == 0) solution.bind(index, topSymbol->getIdentityDag()); } } } bool AU_LhsAutomaton::multiwayCollapseMatch(DagNode* subject, Substitution& solution, Subproblem*& returnedSubproblem, ExtensionInfo* extensionInfo) { Term* identity = topSymbol->getIdentity(); int matchingVariable = NONE; bool rigidMatchingVariable = false; int rigidLength = rigidPart.length(); for (int i = 0; i < rigidLength; i++) { Assert(rigidPart[i].type == VARIABLE, "non variable in multiway collapse"); TopVariable& tv = rigidPart[i].variable; Assert(tv.takeIdentity, "variable can't take identity"); DagNode* d = solution.value(tv.index); Assert(d != 0, "unbound variable that can take identity in rigid part"); if (!(identity->equal(d))) { if (matchingVariable != NONE) // repeated variable fails 2nd time around return false; matchingVariable = i; rigidMatchingVariable = true; } } int lastViableVariable = NONE; int nrViableVariables = 0; int nrFlexVariables = flexPart.length(); for (int i = 0; i < nrFlexVariables; i++) { Assert(flexPart[i].type == VARIABLE, "non variable in multiway collapse"); TopVariable& tv = flexPart[i].variable; Assert(tv.takeIdentity, "variable can't take identity"); DagNode* d = solution.value(tv.index); if (d != 0) { if (!(identity->equal(d))) { if (matchingVariable != NONE) // repeated variable fails 2nd time around return false; matchingVariable = i; } } else { // // If variable is repeated under AU symbol then we will have // nrViableVariables >= 2 and we will get failure when we try to // match repeated variable against non-identity because it // will already be bound to identity by other instance. Somewhat // inefficient especially if alien extension is involved but // this is a rare case. // lastViableVariable = i; ++nrViableVariables; } } if (matchingVariable != NONE) { // // Exactly one variable was bound to something other than our identity. // TopVariable& mv = rigidMatchingVariable ? rigidPart[matchingVariable].variable : flexPart[matchingVariable].variable; bool r = subject->matchVariable(mv.index, mv.sort, matchAtTop, solution, returnedSubproblem, extensionInfo); if (r) bindUnboundVariablesToIdentity(solution, NONE); return r; } // // At this point all variables are either: // (a) bound to our identity; or // (b) unbound. // if (identity->equal(subject)) { // // Subject is our identity; we must still deal with alien extension. // returnedSubproblem = 0; bindUnboundVariablesToIdentity(solution, NONE); if (extensionInfo != 0) { extensionInfo->setValidAfterMatch(true); extensionInfo->setMatchedWhole(true); } return true; } if (nrViableVariables == 0) { // // All variables are bound to our identity and the subject is not // our identity. We can succeed only if we have entension and the // subject contains our identity. // if (extensionInfo == 0) return false; TopVariable& tv = flexPart[0].variable; // pick any since they are all bound to identity Assert(identity->equal(solution.value(tv.index)), "should be identity"); return subject->matchVariable(tv.index, tv.sort, matchAtTop, solution, returnedSubproblem, extensionInfo); } if (nrViableVariables == 1) { // // All variables except one are bound to our identity and the // subject is not our identity. The last viable variable must match // the subject (with extension if present). // This case need to make good on our constraint propagation // guarantee when we have no extension. // TopVariable& vv = flexPart[lastViableVariable].variable; return subject->matchVariable(vv.index, vv.sort, matchAtTop, solution, returnedSubproblem, extensionInfo); } // // General case: multiple unbound variable instances that can take identity. // Any bound variables are already bound to identity. // DisjunctiveSubproblemAccumulator alternatives(solution); for (int i = 0; i < nrFlexVariables; i++) { TopVariable& tv = flexPart[i].variable; if (solution.value(tv.index) == 0) { local.copy(solution); bindUnboundVariablesToIdentity(local, i); Subproblem* subproblem; if (subject->matchVariable(tv.index, tv.sort, matchAtTop, local, subproblem, extensionInfo)) { if (!(alternatives.empty()) && extensionInfo != 0) { // // Need to exclude the case where subject = id + ext and // we match our chosen variable against our identity // in all but the first branch to avoid duplicate solutions. // SubproblemAccumulator subproblems; subproblems.add(subproblem); subproblems.add(new EqualitySubproblem(identity, tv.index, false)); subproblem = subproblems.extractSubproblem(); } alternatives.addOption(local, subproblem, extensionInfo); continue; } } } return alternatives.extract(solution, returnedSubproblem, extensionInfo); } bool AU_LhsAutomaton::collapseMatch(DagNode* subject, Substitution& solution, Subproblem*& returnedSubproblem, ExtensionInfo* extensionInfo) { if (uniqueCollapseAutomaton != 0) return uniqueCollapseMatch(subject, solution, returnedSubproblem, extensionInfo); Subproblem* subproblem; if (!multiwayCollapseMatch(subject, solution, subproblem, extensionInfo)) return false; SubproblemAccumulator subproblems; subproblems.add(subproblem); int nrVariables = solution.nrFragileBindings(); int nrFlexVariables = flexPart.length(); for (int i = 0; i < nrFlexVariables; i++) { Assert(flexPart[i].type == VARIABLE, "non variable in multiway collapse"); TopVariable& tv = flexPart[i].variable; if (tv.abstracted != 0) { subproblems.add(new VariableAbstractionSubproblem(tv.abstracted, tv.index, nrVariables)); } } returnedSubproblem = subproblems.extractSubproblem(); return true; } maude-3.1/src/AU_Theory/AU_Term.cc0000644000175200017520000003371713576050735013654 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class AU_Term. // // utility stuff #include "macros.hh" #include "vector.hh" #include "indent.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "variable.hh" #include "AU_Persistent.hh" #include "AU_Theory.hh" // core class definitions #include "variableTerm.hh" #include "rewritingContext.hh" #include "equation.hh" #include "symbolMap.hh" #include "termBag.hh" #include "rhsBuilder.hh" // variable class definitions #include "variableTerm.hh" // AU persistent class definitions #include "AU_DequeIter.hh" // AU theory class definitions #include "AU_Symbol.hh" #include "AU_DagNode.hh" #include "AU_DequeDagNode.hh" #include "AU_Term.hh" #include "AU_ArgumentIterator.hh" #include "AU_LhsAutomaton.hh" #include "AU_RhsAutomaton.hh" // our stuff #include "AU_LhsCompiler.cc" AU_Term::AU_Term(AU_Symbol* symbol, const Vector& arguments) : Term(symbol), argArray(arguments.length()) { int nrArgs = arguments.length(); Assert(nrArgs >= 2, "insufficient arguments"); for (int i = 0; i < nrArgs; i++) argArray[i].term = arguments[i]; } AU_Term::AU_Term(const AU_Term& original, AU_Symbol* symbol, SymbolMap* translator) : Term(symbol), argArray(original.argArray.length()) { int nrArgs = original.argArray.length(); for (int i = 0; i < nrArgs; i++) argArray[i].term = original.argArray[i].term->deepCopy(translator); } RawArgumentIterator* AU_Term::arguments() { return new AU_ArgumentIterator(argArray); } void AU_Term::deepSelfDestruct() { FOR_EACH_CONST(i, Vector, argArray) i->term->deepSelfDestruct(); delete this; } Term* AU_Term::deepCopy2(SymbolMap* translator) const { AU_Symbol* s = symbol(); if (translator != 0) { Symbol* s2 = translator->translate(s); if (s2 == 0) { int nrArgs = argArray.length(); if (nrArgs == 2) return translator->translateTerm(this); // // Tricky situtation - we have to use translateTerm() since // we are translating to a term but we have more than 2 // 2 arguments. We resolve it by creating a temporary // expanded term. // Vector args(2); args[0] = argArray[0].term; for (int i = 1; i < nrArgs; ++i) { args[1] = argArray[i].term; args[0] = new AU_Term(s, args); } Term* t = args[0]; Term* r = translator->translateTerm(t); for (int i = 1; i < nrArgs; ++i) { Term* n = safeCast(AU_Term*, t)->argArray[0].term; delete t; t = n; } return r; } s = dynamic_cast(s2); if (s == 0) { // // Another tricky situation - we are translating to a non-AU_Symbol. // Vector args(2); args[0] = argArray[0].term->deepCopy(translator); int nrArgs = argArray.length(); for (int i = 1; i < nrArgs; ++i) { args[1] = argArray[i].term->deepCopy(translator); args[0] = s2->makeTerm(args); } return args[0]; } } return new AU_Term(*this, s, translator); } Term* AU_Term::normalize(bool full, bool& changed) { changed = false; AU_Symbol* s = symbol(); int nrArgs = argArray.length(); // // Pass 1: normalize arguments and calculate number of extra arguments that // will result from flattening. // int expansion = 0; for (int i = 0; i < nrArgs; i++) { bool subtermChanged; Term* t = argArray[i].term->normalize(full, subtermChanged); if (subtermChanged) changed = true; argArray[i].term = t; if (full && t->symbol() == s) expansion += safeCast(AU_Term*, t)->argArray.length() - 1; } // // Pass 2: flatten at the top. // if (expansion > 0) { changed = true; argArray.expandBy(expansion); int p = nrArgs + expansion - 1; for (int i = nrArgs - 1; i >= 0; i--) { Assert(p >= i, "loop invariant broken"); Term* t = argArray[i].term; if (t->symbol() == s) { Vector& argArray2 = safeCast(AU_Term*, t)->argArray; for (int j = argArray2.length() - 1; j >= 0; j--) argArray[p--].term = argArray2[j].term; delete t; } else argArray[p--].term = t; } nrArgs += expansion; } // // Pass 3: remove identity elements. // Term* identity = s->getIdentity(); if (identity != 0) { Term* savedId = 0; int p = 0; for (int i = 0; i < nrArgs; i++) { Term* t = argArray[i].term; if (identity->equal(t) && idPossible(i)) { if (savedId == 0) savedId = t; else t->deepSelfDestruct(); changed = true; continue; } argArray[p].term = t; ++p; } if (p == 0) { // // All arguments were identity elements so we collapse to the saved one. // delete this; return savedId; } if (savedId != 0) savedId->deepSelfDestruct(); // don't need it if (p == 1) { // // Only one non-identity argument left so collapse to it. // Term* t = argArray[0].term; delete this; return t; } argArray.contractTo(p); nrArgs = p; } // // Pass 4: compute hash value. // unsigned int hashValue = s->getHashValue(); FOR_EACH_CONST(i, Vector, argArray) hashValue = hash(hashValue, i->term->getHashValue()); setHashValue(hashValue); return this; } int AU_Term::compareArguments(const Term* other) const { const Vector& argArray2 = safeCast(const AU_Term*, other)->argArray; int r = argArray.length() - argArray2.length(); if (r != 0) return r; Vector::const_iterator j = argArray2.begin(); Vector::const_iterator i = argArray.begin(); const Vector::const_iterator e = argArray.end(); do { r = i->term->compare(j->term); if (r != 0) return r; ++j; ++i; } while (i != e); Assert(j == argArray2.end(), "iterator problem"); return 0; } int AU_Term::compareArguments(const DagNode* other) const { int len = argArray.length(); if (safeCast(const AU_BaseDagNode*, other)->isDeque()) { const AU_DequeDagNode* d2 = safeCast(const AU_DequeDagNode*, other); int r = len - d2->nrArgs(); if (r != 0) return r; AU_DequeIter j(d2->getDeque()); Vector::const_iterator i = argArray.begin(); const Vector::const_iterator e = argArray.end(); do { r = i->term->compare(j.getDagNode()); if (r != 0) return r; j.next(); ++i; } while (i != e); Assert(!j.valid(), "iterator problem"); } else { const ArgVec& argArray2 = safeCast(const AU_DagNode*, other)->argArray; int r = len - argArray2.length(); if (r != 0) return r; ArgVec::const_iterator j = argArray2.begin(); Vector::const_iterator i = argArray.begin(); const Vector::const_iterator e = argArray.end(); do { r = i->term->compare(*j); if (r != 0) return r; ++j; ++i; } while (i != e); Assert(j == argArray2.end(), "iterator problem"); } return 0; } void AU_Term::findEagerVariables(bool atTop, NatSet& eagerVariables) const { BinarySymbol::PermuteStrategy strat = symbol()->getPermuteStrategy(); if (strat == BinarySymbol::EAGER || (strat == BinarySymbol::SEMI_EAGER && !atTop)) { FOR_EACH_CONST(i, Vector, argArray) i->term->findEagerVariables(false, eagerVariables); } } void AU_Term::markEagerArguments(int nrVariables, const NatSet& eagerVariables, Vector& problemVariables) { if (symbol()->getPermuteStrategy() == BinarySymbol::EAGER) { FOR_EACH_CONST(i, Vector, argArray) i->term->markEager(nrVariables, eagerVariables, problemVariables); } } DagNode* AU_Term::dagify2() { int nrArgs = argArray.length(); AU_DagNode* d = new AU_DagNode(symbol(), nrArgs); ArgVec& p = d->argArray; for (int i = 0; i < nrArgs; i++) p[i] = argArray[i].term->dagify(); return d; } void AU_Term::analyseCollapses2() { // // (1) Analyse our subterms. // int nrArgs = argArray.length(); { FOR_EACH_CONST(i, Vector, argArray) i->term->analyseCollapses(); } // // (2) Does our top symbol have an identity? // uniqueCollapseSubtermIndex = NONE; AU_Symbol* s = symbol(); if (s->getIdentity() == 0) return; // if no identity element then we can't collapse // // (3) Can we collapse? // int firstNonIdArg = NONE; for (int i = 0; i < nrArgs; i++) { Term* t = argArray[i].term; if (idPossible(i) && s->mightMatchOurIdentity(t)) continue; if (firstNonIdArg != NONE) return; // can't collapse firstNonIdArg = i; } // // (4) If so, what to? // if (firstNonIdArg != NONE) { // // Can only collapse to firstNonIdArg. // uniqueCollapseSubtermIndex = firstNonIdArg; addCollapseSymbol(argArray[firstNonIdArg].term->symbol()); addCollapseSymbols(argArray[firstNonIdArg].term->collapseSymbols()); } else { // // Can collapse to any of our arguments. // FOR_EACH_CONST(i, Vector, argArray) { Term* t = i->term; addCollapseSymbol(t->symbol()); addCollapseSymbols(t->collapseSymbols()); } } } void AU_Term::insertAbstractionVariables(VariableInfo& variableInfo) { AU_Symbol* s = symbol(); bool honorsGroundOutMatch = true; int nrArgs = argArray.length(); for (int i = 0; i < nrArgs; i++) { Tuple& t = argArray[i]; t.term->insertAbstractionVariables(variableInfo); if (!(t.term->honorsGroundOutMatch())) honorsGroundOutMatch = false; t.abstractionVariableIndex = NONE; t.collapseToOurSymbol = false; t.matchOurIdentity = false; if (dynamic_cast(t.term) == 0) { // // We don't bother checking wether we have a left identity // or a right identity because we may end up matching with // extension. // t.matchOurIdentity = s->mightMatchOurIdentity(t.term); t.collapseToOurSymbol = s->mightCollapseToOurSymbol(t.term); if (t.matchOurIdentity || t.collapseToOurSymbol) { t.abstractionVariableIndex = variableInfo.makeProtectedVariable(); honorsGroundOutMatch = false; DebugAdvisory("Introduced abstraction variable for " << t.term << " in " << this << '.'); } } } setHonorsGroundOutMatch(honorsGroundOutMatch); } void AU_Term::findAvailableTerms(TermBag& availableTerms, bool eagerContext, bool atTop) { if (ground()) return; if (!atTop) availableTerms.insertMatchedTerm(this, eagerContext); BinarySymbol::PermuteStrategy strat = symbol()->getPermuteStrategy(); bool argEager = eagerContext && (strat == BinarySymbol::EAGER || (strat == BinarySymbol::SEMI_EAGER && !atTop)); FOR_EACH_CONST(i, Vector, argArray) i->term->findAvailableTerms(availableTerms, argEager); } int AU_Term::compileRhs2(RhsBuilder& rhsBuilder, VariableInfo& variableInfo, TermBag& availableTerms, bool eagerContext) { int nrArgs = argArray.length(); // // We want to minimize conflict between slots to avoid quadratic number of // conflict arcs on giant right hand sides. The heuristic we use is crude: // we sort in order of arguments by number of symbol occurences, and build // largest first. // typedef Vector > PairVec; PairVec order(nrArgs); for (int i = 0; i < nrArgs; i++) { order[i].first = - argArray[i].term->computeSize(); // larger terms to the front order[i].second = i; } sort(order.begin(), order.end()); // // Compile each argument in largest first order. // bool argEager = eagerContext && symbol()->getPermuteStrategy() == BinarySymbol::EAGER; Vector sources(nrArgs); FOR_EACH_CONST(i, PairVec, order) { int j = i->second; sources[j] = argArray[j].term->compileRhs(rhsBuilder, variableInfo, availableTerms, argEager); } // // Now add sources to automaton in original order, and flag last use // of each source for conflict arc generation. // AU_RhsAutomaton* automaton = new AU_RhsAutomaton(symbol(), nrArgs); for (int i = 0; i < nrArgs; i++) { int index = sources[i]; automaton->addArgument(index); variableInfo.useIndex(index); } // // Complete the automaton and add it to the rhs builder. // int destination = variableInfo.makeConstructionIndex(); automaton->close(destination); rhsBuilder.addRhsAutomaton(automaton); return destination; } #ifdef DUMP void AU_Term::dump(ostream& s, const VariableInfo& variableInfo, int indentLevel) { s << Indent(indentLevel) << "Begin{AU_Term}\n"; ++indentLevel; dumpCommon(s, variableInfo, indentLevel); s << Indent(indentLevel) << "arguments:\n"; ++indentLevel; FOR_EACH_CONST(i, Vector, argArray) { const Tuple& p = *i; s << Indent(indentLevel) << "collapseToOurSymbol = " << bool(p.collapseToOurSymbol) << "\tmatchOurIdentity = " << bool(p.matchOurIdentity); if (p.abstractionVariableIndex != NONE) s << "\tabstractionVariableIndex = " << p.abstractionVariableIndex; s << '\n'; p.term->dump(s, variableInfo, indentLevel); } s << Indent(indentLevel - 2) << "End{AU_Term}\n"; } #endif maude-3.1/src/AU_Theory/ChangeLog.A_Theory0000644000175200017520000006055407741124414015324 00000000000000Fri Dec 5 11:25:01 1997 Steven Eker * A_Symbol.cc (finalizeSortInfo): deleted * A_Symbol.hh (class A_Symbol): deleted finalizeSortInfo() decl Thu Dec 4 12:54:26 1997 Steven Eker * A_Symbol.cc (A_Symbol): deleted inert arg * A_Symbol.hh (class A_Symbol): deleted inert arg from ctor decl Tue Dec 2 16:41:48 1997 Steven Eker * A_Symbol.cc (copyAndReduceSubterms): use DagNode::copyAndReduce() Mon Dec 1 12:11:25 1997 Steven Eker * A_Symbol.cc (eqRewrite): use getPermuteStrategy() * A_GreedyMatcher.cc (greedyMatchVariableBlock): PermuteSymbol -> AssociativeSymbol (*3) * A_DagNode.cc (copyEagerUptoReduced2): use getPermuteStrategy(); PermuteSymbol -> BinarySymbol * A_LhsCompiler.cc (compileLhs): PermuteSymbol -> AssociativeSymbol * A_Term.cc (findEagerVariables): use getPermuteStrategy(); PermuteSymbol -> BinarySymbol (*3) (markEagerArguments): use getPermuteStrategy(); PermuteSymbol -> BinarySymbol * A_LhsAutomaton.hh (class A_LhsAutomaton): PermuteSymbol -> AssociativeSymbol * A_Symbol.cc (A_Symbol): PermuteSymbol -> AssociativeSymbol (eqRewrite): remove PermuteSymbol context (*3) * A_Symbol.hh (class A_Symbol): PermuteSymbol -> AssociativeSymbol Tue Nov 25 11:58:40 1997 Steven Eker * A_RhsAutomaton.cc (buildAliens): deleted (dump): implemented * A_RhsAutomaton.hh (class A_RhsAutomaton): updated dump() decl; deleted addAlien(), buildAliens() decls; deleted aliens data member (addAlien): deleted * A_LhsAutomaton.cc (dump): updated * A_LhsAutomaton.hh (class A_LhsAutomaton): updated dump() decl ===============================Engine33=================================================== Tue Nov 11 17:04:26 1997 Steven Eker * A_LhsAutomaton.cc (forcedLoneVariableCase): fixed long standing bug; in lone variable bound case if b->symbol() != topSymbol then we need to check for nrSubjects != 1 to return false and not nrSubjects == 1 ===============================Engine31=================================================== Wed Oct 29 15:35:35 1997 Steven Eker * A_Subproblem.cc (solveVariableBlocks): setWholeFlag() -> setMatchedWhole() * A_DagNode.cc (matchVariableWithExtension): call setValidAfterMatch(false) * A_GreedyMatcher.cc (greedyMatch): setWholeFlag() -> setMatchedWhole() (7 places) (greedyMatch): call setValidAfterMatch(true) if there is extension info * A_FullMatcher.cc (fullMatch): call setValidAfterMatch(false) if there is extension information * A_LhsAutomaton.cc (match): move matchAtTop == (extensionInfo != 0) assertion to after check of top symbol since caller need not know that we can't collapse and could fail to pass us extensionInfo if subject was in a theory without extension. * A_ExtensionInfo.cc (copy): use setValidAfterMatch(), validAfterMatch() and setMatchedWhole() (makeClone): use setValidAfterMatch(), validAfterMatch() and setMatchedWhole() Mon Oct 27 11:54:51 1997 Steven Eker * A_ExtensionInfo.cc (makeClone): added (copy): added * A_ExtensionInfo.hh (class A_ExtensionInfo): added decls for makeClone() and copy() (class A_ExtensionInfo): subject made non const in order to do copy Fri Oct 24 14:59:25 1997 Steven Eker * A_Symbol.cc (ruleRewrite): use new A_ExtensionInfo ctor (eqRewrite): use new A_ExtensionInfo ctor (3 places) * A_DagNode.cc (makeExtensionInfo): use new A_ExtensionInfo ctor * A_DagNode.hh (class A_DagNode): class A_ExtensionInfo is now a friend * A_Theory.cc: deleted * A_ExtensionInfo.cc: created * A_ExtensionInfo.hh (class A_ExtensionInfo): added data member subject and decls for explicit ctor and buildMatchedPortion() (A_ExtensionInfo): added Tue Oct 21 12:32:51 1997 Steven Eker * A_Term.cc (dagify2): switched to new convention * A_Term.hh (class A_Term): switched dagify2() decl to new convention Wed Oct 15 16:12:36 1997 Steven Eker * A_LhsCompiler.cc (compileLhs): use VariableTerm::dynamicCast() (2 places) (addFixedLengthBlock): use VariableTerm::dynamicCast() (findConstraintPropagationSequence): use VariableTerm::dynamicCast() (2 places) * A_Term.cc (compileRhs): use VariableTerm::dynamicCast() * A_Symbol.cc (A_Symbol): rewritten for new symbol conventions * A_Symbol.hh (class A_Symbol): removed constructor arg from ctor Fri Oct 10 18:42:16 1997 Steven Eker * A_LhsAutomaton.hh (class A_LhsAutomaton): VariableIndex -> VariableInfo * A_LhsAutomaton.cc (dump): VariableIndex -> VariableInfo (dump): index2Symbol() -> index2Variable() ===============================Engine30=================================================== Tue Oct 7 15:38:16 1997 Steven Eker * A_Symbol.cc (makeDagNode): added * A_Symbol.hh (class A_Symbol): added decl for makeDagNode() Fri Oct 3 19:35:02 1997 Steven Eker * A_Term.cc (compileRhs): DataSet -> TermSet (dagify2): DataSet -> TermSet * A_Term.hh (class A_Term): DataSet -> TermSet ===============================Engine29=================================================== Thu Oct 2 18:01:02 1997 Steven Eker * A_Term.hh (class A_Term): updated compileRhs() decl * A_Term.cc (compileRhs): adapted to use DataSet& compiled Tue Sep 30 12:39:29 1997 Steven Eker * A_Term.hh (class A_Term): dagify() decl chaged to dagify2() * A_Term.cc (normalize): now calculate hash value (dagify2): adapted from dagify() Thu Sep 25 16:49:08 1997 Steven Eker * A_Symbol.hh (class A_Symbol): deleted decl for specificRewrite() * A_Symbol.cc (specificRewrite): deleted ===============================Engine28=================================================== Tue Aug 19 12:37:48 1997 Steven Eker * A_DagNode.hh (getArgument): added (nrArgs): added (class A_DagNode): added nrArgs() and getArgument() decls as fast theory specific interface to argument list for code outside the A_Theory that is A_Theory aware (maybe classes derived from A_Symbol). Fri Jul 25 18:02:05 1997 Steven Eker * A_DagNode.cc (partialReplace): removed Assert(getSortIndex() == Sort::SORT_UNKNOWN, cerr << "shouldn't have valid sort"); since if node was original created by matcher it may well have valid sort Thu Jul 24 11:39:15 1997 Steven Eker * A_Symbol.cc (eqRewrite): added normalizeAtTop() calls after sort computation for LAZY and SEMI_EAGER cases; this fixes a bug introduced by just-in-time normalization Wed Jul 23 11:46:25 1997 Steven Eker * A_DagNode.cc (partialReplace): added call to repudiateSortInfo() * A_Term.cc (normalize): added full flag; only do flattening if full flag true * A_Term.hh (class A_Term): added full flag to normalize() Mon Jul 21 11:27:59 1997 Steven Eker * A_Symbol.cc (computeTrueSort): do normalization * A_DagNode.cc (partialReplace): simplified; no longer normalize (partialConstruct): simplified; no longer normalize (copyWithReplacement): simplified; no longer normalize (partialReplace): put in Assert to ensure we don't have a valid sort * A_RhsAutomaton.hh (class A_RhsAutomaton): updated buildAliens() decl * A_RhsAutomaton.cc (buildAliens): simplified; no longer do flattening calcs (buildArguments): simplified; no longer flatten (replace): simplified (construct): simplified ===============================Engine26b=================================================== Tue Jul 15 15:42:42 1997 Steven Eker * A_Symbol.cc (A_Symbol): added inert arg (eqRewrite): changed inert() call to equationFree() * A_Symbol.hh (class A_Symbol): added inert arg to ctor ================================Engine26==================================================== Fri Jun 27 16:13:40 1997 Steven Eker * A_DagNode.hh (class A_DagNode): copyEagerUptoReduced2() and clearCopyPointers2() made private * A_Symbol.cc (copyAndReduceSubterms): copyEagerUptoReduced() and clearCopyPointers() replaced by copyReducible() Wed Jun 25 15:16:51 1997 Steven Eker * A_Symbol.cc: added #include "variable.hh" Tue Jun 24 16:22:21 1997 Steven Eker * A_LhsAutomaton.hh (class A_LhsAutomaton): Variable* -> VariableTerm* for addRigidVariable() and addFlexVariable() decls * A_LhsAutomaton.cc (addRigidVariable): use VariableTerm* (addFlexVariable): use VariableTerm* * A_LhsCompiler.cc (analyseConstraintPropagation): use VariableTerm::downCast() (compileLhs): use VariableTerm::downCast() (addFixedLengthBlock): use VariableTerm::downCast() (findConstraintPropagationSequence): use VariableTerm::downCast() * A_Term.cc: added #include "variableTerm.hh" (compileRhs): use VariableTerm::downCast() Thu Jun 19 10:38:43 1997 Steven Eker * A_Symbol.cc: deleted #include "unionFind.hh" Tue Jun 17 16:55:43 1997 Steven Eker * A_Symbol.hh (class A_Symbol): deleted decl for compileOpDeclarations() * A_Symbol.cc (compileOpDeclarations): deleted * A_Symbol.hh (class A_Symbol): added decl for finalizeSortInfo() * A_Symbol.cc (finalizeSortInfo): added Fri Jun 6 18:44:49 1997 Steven Eker * A_DagNode.hh (class A_DagNode): matchVariableWithExtension() decl added * A_Symbol.hh (class A_Symbol): matchVariableWithExtension() decl deleted * A_DagNode.cc (matchVariableWithExtension): added * A_Symbol.cc (matchVariableWithExtension): deleted Thu Jun 5 11:55:09 1997 Steven Eker * A_DagNode.cc (copyEagerUptoReduced2): adapted from old copyEagerUptoReduced() (clearCopyPointers2): adapted from old clearCopyPointers() * A_DagNode.hh (class A_DagNode): decls for clearCopyPointers() and copyEagerUptoReduced() changed * A_Subproblem.hh (class A_Subproblem): updated computeAssignment() decl * A_Subproblem.cc (bindVariables): use checkSort() to check the sort of DagNode returned from computeAssignment(); don't pass context to computeAssignment() (computeAssignment): deleted context arg; don't compute sort of newly created DagNode * A_Symbol.cc (A_Symbol): don't pass stable arg to PermuteSymbol() ==============================Engine24==================================== Wed May 14 15:43:13 1997 Steven Eker * A_Symbol.cc (eqRewrite): changed comment on repudiate call now that inErrorSort() can leave sort info behind Tue May 13 10:41:19 1997 Steven Eker * Makefile: make libA_Theory.a instead of libAC_Theory.a * A_LhsAutomaton.cc (forcedLoneVariableCase): use DagNode::checkProblem() to simplify code Commented out "sortCheckSubproblem.hh" Thu Apr 10 16:19:35 1997 Steven Eker * A_LhsAutomaton.cc (forcedLoneVariableCase): must repudiateSort() in the case where the base sort is not small enough and the top symbol is not sort constraint free as the base sort we calculated may not be the true sort and will inhibit the calculation of the true sort during the solution of the sort check subprblem. Fri Mar 28 16:55:19 1997 Steven Eker * A_DagNode.cc (makeExtensionInfo): added * A_DagNode.hh (class A_DagNode): added decl for makeExtensionInfo() Thu Jan 9 15:45:25 1997 Steven Eker * A_DagNode.cc (overwriteWithClone): fixed serious bug where we were copying sort of overwritten node rather than overwriting node Tue Jan 7 11:39:30 1997 Steven Eker * A_Symbol.cc (eqRewrite): fixed bug in lazy case where we were computing a base sort and then returning with out repudiating it if it was not the error sort. Use new inerrorSort() function. (eqRewrite): removed superfluous repudiateSortInfo() from semi-eager case. (eqRewrite): replaced calls to repudiateSortInfo() since applyReplace() may compute true sort which may then have been invalidated by rewriting below Tue Dec 24 18:04:23 1996 Steven Eker * A_LhsAutomaton.cc (forcedLoneVariableCase): rewritten to use computeBaseSort() and sortConstraintFree() * A_Subproblem.cc (computeAssignment): computeSortWhilePreservingContext() -> computeTrueSortWhilePreservingContext() * A_Symbol.cc (eqRewrite): adapted from rewrite(); use computeTrueSort() and computeBaseSort() (computeTrueSort): adapted from computeSort() (computeBaseSort): adapted from findBaseSort() * A_Symbol.hh (class A_Symbol): computeSort() replaced by computeBaseSort() and computeTrueSort(); findBaseSort() deleted (class A_Symbol): rewrite() -> eqRewrite() Thu Dec 19 14:17:24 1996 Steven Eker * A_DagNode.cc (makeClone): copy sort information to avoid recomputation Thu Dec 12 17:49:03 1996 Steven Eker * A_DagNode.cc (overwriteWithClone): copy sort information; this is needed so then when we rewrite with a collapse equation we do not lose sort infomation with the possibility of infinite looping on foreign sort constraints Wed Dec 11 11:55:43 1996 Steven Eker * A_Symbol.cc (findBaseSort): sortConstraintFree() used in place of obsolete test (2 places) Mon Dec 9 14:40:21 1996 Steven Eker * A_Symbol.cc (computeSort): modified to use new constrainToSmallerSort() convections Mon Dec 2 11:07:58 1996 Steven Eker * A_Subproblem.cc (addTopVariable): put bounds args in the correct order! * A_Symbol.cc (rewrite): use inert() rather then checking for equations because there may be foreign equations * A_FullMatcher.cc (addVariableBlocks): updated addTopVariable() call * A_Subproblem.cc (buildPartition): make use of lowerBound in TopVariable struct (addTopVariable): store lowerBound * A_Subproblem.hh (class A_Subproblem): added lowerBound to TopVariable struct Wed Nov 27 17:10:12 1996 Steven Eker * A_Symbol.cc (matchVariableWithExtension): implemented * A_Symbol.hh (class A_Symbol): matchVariableWithExtension() added Mon Nov 25 19:01:59 1996 Steven Eker * A_Symbol.cc (A_Symbol): added constructor arg Thu Nov 14 18:07:59 1996 Steven Eker * A_DagNode.cc (makeClone): added Tue Oct 29 17:05:54 1996 Steven Eker * A_Symbol.cc (rewrite): updates to nrArgs removed as nrArgs is not used afterwards; Assert checking that sort is invalid after applyReduce() in semi-eager case removed since applyReduce() may have good reasons for computing and storing the subjects sorts (e.g. a lhs that parses to the error sort or a foreign lhs that is (or collapses to) a variable). Tue Oct 15 17:48:41 1996 Steven Eker * A_RhsAutomaton.cc (dump): added indentLevel arg * A_LhsAutomaton.cc (dump): rewritten to handle indentation Fri Oct 11 16:44:55 1996 Steven Eker * A_Symbol.cc (partialConstruct): deleted (partialReplace): deleted * A_DagNode.cc (partialReplace): added (partialConstruct): added Wed Oct 2 19:01:26 1996 Steven Eker * A_DagNode.cc (normalizeAtTop): added call to DagNode::okToCollectGarbage() Tue Oct 1 14:22:11 1996 Steven Eker * A_DagNode.cc (normalizeAtTop): removed trackStorage() call * A_Symbol.cc (partialReplace): removed trackStorage() call * A_DagNode.cc (markArguments): call to evacuate() added * A_DagNode.hh (A_DagNode): removed trackStorage() call * A_DagNode.cc (A_DagNode): removed trackStorage() call * A_Term.cc: Vector -> ArgVec * A_Symbol.cc: Vector -> ArgVec * A_Subproblem.cc: Vector -> ArgVec * A_RhsAutomaton.cc: Vector -> ArgVec * A_LhsAutomaton.cc: Vector -> ArgVec * A_GreedyMatcher.cc: Vector -> ArgVec * A_FullMatcher.cc: Vector -> ArgVec * A_DagNode.cc: Vector -> ArgVec * A_RhsAutomaton.hh (class A_RhsAutomaton): Vector -> ArgVec * A_DagNode.hh (class A_DagNode): Vector -> ArgVec * A_LhsAutomaton.hh (class A_LhsAutomaton): Vector -> ArgVec * A_DagArgumentIterator.hh (class A_DagArgumentIterator): Vector -> ArgVec Wed Sep 25 14:21:39 1996 Steven Eker * A_DagNode.cc (stackArguments): added (copyWithReplacement): added * A_Symbol.cc (ruleRewrite): added (specificRewrite): added (partialConstruct): added Tue Sep 24 14:41:39 1996 Steven Eker * A_Subproblem.cc (addNode): remember last blockPair has dummy pattern part with no targets; so we have to change test to blockNr + 1 < blockPairs.length() - 1 * A_FullMatcher.cc (buildLeftmostPath): deal with cases where first rigid block has no (unbound) variables to the left of it, last rigid block has no (unbound) variables to the right of it, and single rigid block has no (unbound) variables either side of it (addRemainingPaths): implemented * A_Subproblem.cc (bindVariables): Asserts regarding part length replaced by if statements that return false: non-linear variable blocks can cause bound variable to have wrong length part (bindVariables): fix index: i -> j * A_Subproblem.hh (class A_Subproblem): deleted boundVariablesOK() decl * A_Subproblem.cc (bindVariables): major rewrite; now does the work of boundVariablesOK() as well (buildPartition): set boundByUs flag correctly in non-linear variable block case (solveVariableBlock): removed unbindVariables() temp fix Mon Sep 23 17:50:22 1996 Steven Eker * A_Subproblem.cc (solvePatternBlock): Assert condition should be >= instead of > (deepSelfDestruct): don't deepSelfDestruct() null subproblem (solveVariableBlock): big mess regarding bound and unbound variables in different involacations on same subproblem; temp fix is to unbind variables at start of non-first invocation (solvePatternBlocks): need to initialize selectedNode first first blockPair correctly * A_FullMatcher.cc (buildLeftmostPath): nrRigid + 1 block pairs in subproblem (buildLeftmostPath): formula for nextSubject fixed Fri Sep 20 16:11:55 1996 Steven Eker * A_Subproblem.cc: finally compiled after much rewriting (addNode): added (addTopVariable): added Fri Sep 13 18:29:49 1996 Steven Eker * A_FullMatcher.cc (determineRigidBlocks): calculate rigid blocks in new way Thu Sep 12 18:24:34 1996 Steven Eker * A_Subproblem.hh (class A_Subproblem): added BlockPair struct to try to simplify VariableBlock/RigidBlock handling Wed Sep 11 19:24:04 1996 Steven Eker * A_LhsAutomaton.hh (class A_LhsAutomaton): added struct RigidBlock plus match-time storage for rigidBlocks Thu Aug 29 12:13:34 1996 Steven Eker * A_Subproblem.hh (class A_Subproblem): have at most two edges exits from each node; a down edge and a right edge. Tue Aug 6 15:58:22 1996 Steven Eker * A_LhsCompiler.cc (findConstraintPropagationSequence): matchAtTop arg removed from calls to analyseConstraintPropagation() * A_Term.hh (class A_Term): boundAbove arg removed from addFixedLengthBlock() * A_LhsCompiler.cc: created by extracting match compilation code form A_Term.cc (analyseConstraintPropagation): matchAtTop arg removed (compileLhs): boundAbove arg and code with updated it and passed it deleted (addFixedLengthBlock): boundAbove arg and code with updated it and passed it deleted * A_Term.hh (class A_Term): matchAtTop arg removed from analyseConstraintPropagation(); boundAbove arg removed from compileLhs() Wed Jul 31 17:37:28 1996 Steven Eker * A_Symbol.cc (makeTerm): added Fri Jul 26 16:49:46 1996 Steven Eker * A_GreedyMatcher.cc (greedyMatch): set extension whole flag correctly (greedyMatch): need to update spare in the case that we enf the main loop with a rigid block still to process * A_Term.cc (compileLhs): call addFixedLengthBlock() with boundAbove, boundUniquely the right way around (compileLhs): allow flex part to end with fixed length block if we have extension (compileLhs): need to compile fixed length block that ends the flex part if we have extension * A_GreedyMatcher.cc (greedyMatch): heavily revised; now store "spare" rather than "rigidBlockSubjectsNeeded" (greedyMatchVariableBlock): calculate spare correctly Thu Jul 25 11:13:37 1996 Steven Eker * A_GreedyMatcher.cc (greedyMatchFixedLengthBlock): no longer do substitution copying; pass back shift factor rather than next shift; code simplified (greedyMatchRigidBlock): do substitution copying (greedyMatch): heavily revised; variableBlockLength no longer needed * A_LhsAutomaton.cc (complete): code corrected to do blockLengths for fixed length in _flex_ part (not rigid part!) Wed Jul 24 16:44:37 1996 Steven Eker * A_LhsAutomaton.cc (dump): rewritten (complete): added code to fill in blockLength for each rigid subterm * A_Subproblem.cc: created * A_Subproblem.hh (class A_Subproblem): created Mon Jul 22 10:44:25 1996 Steven Eker * A_DagNode.cc (eliminateSubject): rewritten, now only eliminates target from fixed position (eliminateSubject): rewritten; now only examines single position Sat Jul 20 18:02:24 1996 Steven Eker * A_LhsAutomaton.hh (class A_LhsAutomaton): maxMatchable field in struct Subterm deleted * A_GreedyMatcher.cc (greedyMatchVariableBlock): extensionInfo parameter deleted (greedyMatch): rewritten yet again; now group bound variables with fixed length blocks to make rigid blocks which are matched as whoel units Fri Jul 19 10:34:55 1996 Steven Eker * A_GreedyMatcher.cc (greedyMatchVariableBlock): rewritten from scratch (greedyMatch): heavily rewritten * A_LhsAutomaton.cc: split off greedy matcher into A_GreedyMatcher.cc Thu Jul 18 14:28:16 1996 Steven Eker * A_Term.cc (addFixedLengthBlock): added * A_Term.hh (symbol): added * A_Term.cc (findConstraintPropagationSequence): when two sequences bind the same number of variables uniquely; choose the longer sequenece. Store the position of the first flex arg in bestSequence structure so we can propagate it easily in the lone variable case (analyseConstraintPropagation): add lone variable in flex part to those variables that we guarantee to bind uniquely Tue Jul 16 19:13:08 1996 Steven Eker * A_LhsAutomaton.cc (greedyMatchVariableBlock): rewritten Mon Jul 15 16:31:25 1996 Steven Eker * A_LhsAutomaton.cc (greedyMatchFixedLengthBlock2): renamed from matchFixedLengthBlock() Thu Jul 11 10:42:29 1996 Steven Eker * A_LhsAutomaton.cc (updateWholeBounds): use plus() to simplify (updateFlexBounds): use plus() to simplify * A_ExtensionInfo.hh (setMatched): deleted (setFirstMatched): added (setLastMatched): added * A_DagNode.cc (eliminateSubject): added * A_LhsAutomaton.cc (nextMatchForFixedLengthBlock): added (matchFixedLengthBlock): added (compareArgArrays): added Tue Jul 9 17:20:35 1996 Steven Eker * A_Symbol.cc (findBaseSort): added code to use uniform sort structure if it exists Sat Jul 6 17:24:21 1996 Steven Eker * A_Symbol.cc (partialReplace): dded code to track storage during expansion * A_DagNode.cc (normalizeAtTop): added code to track storage during expansion Fri Jul 5 17:46:56 1996 Steven Eker * A_LhsAutomaton.cc (A_LhsAutomaton): fixed flex bound initilaization problem * A_Term.cc (findConstraintPropagationSequence): added Wed Jul 3 11:41:32 1996 Steven Eker * A_Term.cc (compileLhs): crude implementation (analyseConstraintPropagation): implemented * A_LhsAutomaton.cc (updateWholeBounds): added (updateFlexBounds): added (addRigidVariable): added (addFlexVariable): added (addRigidGroundAlien): added (addRigidNonGroundAlien): added (addFlexGroundAlien): added (addFlexNonGroundAlien): added (complete): added Tue Jul 2 16:06:28 1996 Steven Eker * A_LhsAutomaton.cc (forcedLoneVariableCase): completed Sat Jun 29 15:31:14 1996 Steven Eker * A_LhsAutomaton.cc (matchRigidPart): added maude-3.1/src/AU_Theory/Makefile.am0000755000175200017520000000215212561260214014061 00000000000000noinst_LIBRARIES = libAU_Theory.a libAU_Theory_a_CPPFLAGS = \ -I$(top_srcdir)/src/Utility \ -I$(top_srcdir)/src/Interface \ -I$(top_srcdir)/src/Core \ -I$(top_srcdir)/src/Variable \ -I$(top_srcdir)/src/AU_Persistent \ -I$(top_srcdir)/src/FullCompiler libAU_Theory_a_SOURCES = \ AU_Symbol.cc \ AU_DagNode.cc \ AU_DequeDagNode.cc \ AU_Term.cc \ AU_DagArgumentIterator.cc \ AU_DequeDagArgumentIterator.cc \ AU_ExtensionInfo.cc \ AU_RhsAutomaton.cc \ AU_LhsAutomaton.cc \ AU_ArgumentIterator.cc \ AU_Layer.cc \ AU_Subproblem.cc \ AU_UnificationSubproblem2.cc EXTRA_DIST = \ AU_DagOperations.cc \ AU_Normalize.cc \ AU_LhsCompiler.cc \ AU_Matcher.cc \ AU_CollapseMatcher.cc \ AU_FullMatcher.cc \ AU_GreedyMatcher.cc \ AU_DequeMatcher.cc \ ChangeLog.A_Theory noinst_HEADERS = \ AU_ArgumentIterator.hh \ AU_BaseDagNode.hh \ AU_DagArgumentIterator.hh \ AU_DagNode.hh \ AU_DequeDagArgumentIterator.hh \ AU_DequeDagNode.hh \ AU_ExtensionInfo.hh \ AU_Layer.hh \ AU_LhsAutomaton.hh \ AU_RhsAutomaton.hh \ AU_Subproblem.hh \ AU_Symbol.hh \ AU_Term.hh \ AU_Theory.hh \ AU_UnificationSubproblem2.hh maude-3.1/src/AU_Theory/AU_DequeDagArgumentIterator.cc0000644000175200017520000000265413576050735017635 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class AU_DequeDagArgumentIterator. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "AU_Persistent.hh" // AU theory class definitions #include "AU_DequeDagArgumentIterator.hh" bool AU_DequeDagArgumentIterator::valid() const { return iter.valid(); } DagNode* AU_DequeDagArgumentIterator::argument() const { Assert(valid(), "no args left"); return iter.getDagNode(); } void AU_DequeDagArgumentIterator::next() { Assert(valid(), "no args left"); iter.next(); } maude-3.1/src/AU_Theory/AU_Symbol.cc0000755000175200017520000004640513674517704014216 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class AU_Symbol. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "variable.hh" #include "AU_Persistent.hh" #include "AU_Theory.hh" // core class definitions #include "hashConsSet.hh" #include "sortBdds.hh" // AU persistent class definitions #include "AU_DequeIter.hh" // AU theory class definitions #include "AU_Symbol.hh" #include "AU_DagNode.hh" #include "AU_DequeDagNode.hh" #include "AU_Term.hh" #include "AU_ExtensionInfo.hh" #include "AU_UnificationSubproblem2.hh" AU_Symbol::AU_Symbol(int id, const Vector& strategy, bool memoFlag, bool leftId, bool rightId, Term* identity) : AssociativeSymbol(id, strategy, memoFlag, identity), leftIdFlag(leftId), rightIdFlag(rightId), oneSidedIdFlag(leftId ^ rightId) { // // We only use the deque representaton for arguments if we // don't need to deal with the complexities of: // (1) a one sided identity // (2) a lazy or semi-eager strategy // (3) memoization // (4) rewriting at the top // // (1) is rare and (2) and (3) don't make sense without (4). // (4) can't be checked until the compileEquations() pass. // (4) might not be so rare but there is no fast deque based // matching algorithm that works with extension. // useDequeFlag = !oneSidedIdFlag && standardStrategy(); } void AU_Symbol::postOpDeclarationPass() { processIdentity(); if (leftIdFlag) leftIdentitySortCheck(); if (rightIdFlag) rightIdentitySortCheck(); } void AU_Symbol::compileEquations() { AssociativeSymbol::compileEquations(); if (!equationFree()) useDequeFlag = false; } DagNode* AU_Symbol::ruleRewrite(DagNode* subject, RewritingContext& context) { if (ruleFree()) return 0; AU_ExtensionInfo extensionInfo(getAU_DagNode(subject)); return applyRules(subject, context, &extensionInfo); } Term* AU_Symbol::makeTerm(const Vector& args) { return new AU_Term(this, args); } DagNode* AU_Symbol::makeDagNode(const Vector& args) { int nrArgs = args.length(); AU_DagNode* a = new AU_DagNode(this, nrArgs); copy(args.begin(), args.end(), a->argArray.begin()); return a; } bool AU_Symbol::rewriteAtTop(AU_DagNode* subject, RewritingContext& context) { // // We have a separate function for this to keep AU_ExtensionInfo // off of the eqRewrite() stack frame since recursion through // eqRewrite() can get very deep. // AU_ExtensionInfo extensionInfo(subject); return applyReplace(subject, context, &extensionInfo); } bool AU_Symbol::rewriteAtTopNoOwise(AU_DagNode* subject, RewritingContext& context) { // // Same idea as above. // AU_ExtensionInfo extensionInfo(subject); return applyReplaceNoOwise(subject, context, &extensionInfo); } bool AU_Symbol::eqRewrite(DagNode* subject, RewritingContext& context) { Assert(this == subject->symbol(), "bad symbol"); if (standardStrategy()) { if (safeCast(AU_BaseDagNode*, subject)->isDeque()) { Assert(equationFree(), "deque with equations"); return false; } else { AU_DagNode* s = safeCast(AU_DagNode*, subject); if (s->isFresh()) { int nrArgs = s->argArray.length(); for (int i = 0; i < nrArgs; i++) s->argArray[i]->reduce(context); // // We always need to renormalize at the top because // shared subterms may have rewritten. // if (s->normalizeAtTop() <= AU_DagNode::DEQUED) return false; // COLLAPSED or DEQUED } // // Even we were created by an assignment we could // be equation-free and not reduced because our true // sort was not known because of a membership axiom. // if (equationFree()) return false; #ifndef NO_ASSERT // // Look for Riesco 1/18/10 bug. // for (int i = 0; i < s->argArray.length(); i++) { DagNode* d = s->argArray[i]; Assert(d->getSortIndex() != Sort::SORT_UNKNOWN, "AU_Symbol::eqRewrite(): unknown sort for AU argument " << d << " at index " << i << " in subject " << subject << " s->getNormalizationStatus() = " << s->getNormalizationStatus()); } #endif return rewriteAtTop(s, context); } } return complexStrategy(safeCast(AU_DagNode*, subject), context); } bool AU_Symbol::complexStrategy(AU_DagNode* subject, RewritingContext& context) { if (isMemoized()) { MemoTable::SourceSet from; bool result = memoStrategy(from, subject, context); memoEnter(from, subject); // // We may need to return true in the case we collapse to // a unreduced subterm. // return result; } if (subject->isFresh()) { int nrArgs = subject->argArray.length(); for (int i = 0; i < nrArgs; i++) subject->argArray[i]->computeTrueSort(context); // // If we collapse to one of our subterms which has not been reduced // we pretend that we did a rewrite so that the reduction process // continues. // if (subject->normalizeAtTop() == AU_DagNode::COLLAPSED) return !(subject->isReduced()); } if (getPermuteStrategy() == LAZY) { if (rewriteAtTop(subject, context)) return true; return false; } // // Semi-eager case. // if (rewriteAtTopNoOwise(subject, context)) return true; copyAndReduceSubterms(subject, context); if (subject->normalizeAtTop() == AU_DagNode::COLLAPSED) return false; subject->repudiateSortInfo(); // rewriteAtTopNoOwise() might have left sort behind return rewriteAtTop(subject, context); } bool AU_Symbol::memoStrategy(MemoTable::SourceSet& from, DagNode* subject, RewritingContext& context) { AU_DagNode* s = safeCast(AU_DagNode*, subject); ArgVec& args = s->argArray; PermuteStrategy strat = getPermuteStrategy(); if (strat == EAGER) { if (s->isFresh()) { int nrArgs = args.length(); for (int i = 0; i < nrArgs; i++) args[i]->reduce(context); // // We always need to renormalize at the top because // shared subterms may have rewritten. // if (s->normalizeAtTop() == AU_DagNode::COLLAPSED) return false; } } else { if (s->isFresh()) { int nrArgs = args.length(); for (int i = 0; i < nrArgs; i++) args[i]->computeTrueSort(context); // // If we collapse to one of our subterms which has not been reduced // we pretend that we did a rewrite so that the reduction process // continues. // if (s->normalizeAtTop() == AU_DagNode::COLLAPSED) return !(s->isReduced()); // the only place we might return true } if (memoRewrite(from, subject, context)) return false; if (getPermuteStrategy() == LAZY) { if (rewriteAtTop(s, context)) subject->reduce(context); return false; } // // Semi-eager case. // if (rewriteAtTopNoOwise(s, context)) { subject->reduce(context); return false; } copyAndReduceSubterms(s, context); if (s->normalizeAtTop() == AU_DagNode::COLLAPSED) return false; s->repudiateSortInfo(); // rewriteAtTopNoOwise() might have left sort behind } if (!memoRewrite(from, subject, context) && rewriteAtTop(s, context)) subject->reduce(context); return false; } void AU_Symbol::copyAndReduceSubterms(AU_DagNode* subject, RewritingContext& context) { ArgVec& args = subject->argArray; int nrArgs = args.length(); for (int i = 0; i < nrArgs; i++) args[i] = args[i]->copyAndReduce(context); } void AU_Symbol::computeBaseSort(DagNode* subject) { Assert(this == subject->symbol(), "bad symbol"); if (safeCast(AU_BaseDagNode*, subject)->isDeque()) { subject->setSortIndex(safeCast(AU_DequeDagNode*, subject)-> getDeque().computeBaseSort(this)); return; } ArgVec& args = safeCast(AU_DagNode*, subject)->argArray; if (const Sort* uniSort = uniformSort()) { // // If symbol has a uniform sort structure do a fast sort computation. // if (!(uniSort->component()->errorFree())) { // // Check we're not in the error sort. // int lastIndex = Sort::SORT_UNKNOWN; FOR_EACH_CONST(i, ArgVec, args) { int index = (*i)->getSortIndex(); if (index != lastIndex) { if (!(leq(index, uniSort))) { subject->setSortIndex(Sort::ERROR_SORT); return; } lastIndex = index; } } } subject->setSortIndex(uniSort->index()); return; } // // Standard sort calculation. // int sortIndex = Sort::SORT_UNKNOWN; FOR_EACH_CONST(i, ArgVec, args) { int t = (*i)->getSortIndex(); Assert(t != Sort::SORT_UNKNOWN, "bad sort index"); sortIndex = (sortIndex == Sort::SORT_UNKNOWN) ? t : traverse(traverse(0, sortIndex), t); } subject->setSortIndex(sortIndex); } void AU_Symbol::normalizeAndComputeTrueSort(DagNode* subject, RewritingContext& context) { Assert(this == subject->symbol(), "bad symbol"); if (safeCast(AU_BaseDagNode*, subject)->isFresh()) { // // Make sure each subterm has its true sort. // AU_DagNode* s = safeCast(AU_DagNode*, subject); ArgVec& args = s->argArray; int nrArgs = args.length(); for (int i = 0; i < nrArgs; i++) args[i]->computeTrueSort(context); // // Put subject in normal form (could collapse to a subterm). // if (s->normalizeAtTop() == AU_DagNode::COLLAPSED) return; } // // Finally compute subjects true sort. // fastComputeTrueSort(subject, context); } int AU_Symbol::calculateNrSubjectsMatched(DagNode* d, bool leftEnd, // match starts at left extreme bool rightEnd, // match end at right extreme bool& nasty) { nasty = false; Term* identity = getIdentity(); if (d->symbol() == this) { if (safeCast(AU_BaseDagNode*, d)->isDeque()) return safeCast(AU_DequeDagNode*, d)->nrArgs(); ArgVec& args = safeCast(AU_DagNode*, d)->argArray; int nrArgs = args.length(); if (oneSidedIdFlag) { if (rightIdFlag) { if (identity->equal(args[0])) { if (leftEnd) nasty = true; else --nrArgs; // identity may not match anything } } else { if (identity->equal(args[nrArgs - 1])) { if (rightEnd) nasty = true; else --nrArgs; // identity may not match anything } } } return nrArgs; } if (identity != 0 && identity->equal(d)) { if (!(oneSidedIdFlag && (rightIdFlag ? leftEnd : rightEnd))) return 0; nasty = true; } return 1; } void AU_Symbol::stackArguments(DagNode* subject, Vector& stack, int parentIndex, bool respectFrozen, bool eagerContext) { if (respectFrozen && !(getFrozen().empty())) // under A, any frozen argument affects all return; bool eager = eagerContext && (getPermuteStrategy() == EAGER); if (safeCast(AU_BaseDagNode*, subject)->isDeque()) { // // Deque case. // //Assert(getPermuteStrategy() == EAGER, "non eager strategy with deque"); int j = 0; for (AU_DequeIter i(safeCast(AU_DequeDagNode*, subject)->getDeque()); i.valid(); i.next(), ++j) { DagNode* d = i.getDagNode(); if (!(d->isUnstackable())) stack.append(RedexPosition(d, parentIndex, j, eager)); } } else { // // ArgVec case. // ArgVec& args = safeCast(AU_DagNode*, subject)->argArray; int nrArgs = args.length(); for (int i = 0; i < nrArgs; i++) { DagNode* d = args[i]; if (!(d->isUnstackable())) stack.append(RedexPosition(d, parentIndex, i, eager)); } } } Term* AU_Symbol::termify(DagNode* dagNode) { Vector arguments; if (safeCast(AU_BaseDagNode*, dagNode)->isDeque()) { const AU_Deque& deque = safeCast(const AU_DequeDagNode*, dagNode)->getDeque(); for (AU_DequeIter i(deque); i.valid(); i.next()) { DagNode* a = i.getDagNode(); arguments.append(a->symbol()->termify(a)); } } else { const ArgVec& argArray = safeCast(const AU_DagNode*, dagNode)->argArray; FOR_EACH_CONST(i, ArgVec, argArray) { DagNode* a = *i; arguments.append(a->symbol()->termify(a)); } } return new AU_Term(this, arguments); } // // Unification code. // void AU_Symbol::computeGeneralizedSort(const SortBdds& sortBdds, const Vector& realToBdd, DagNode* subject, Vector& generalizedSort) { Assert(safeCast(AU_BaseDagNode*, subject)->isDeque() == false, "Deque case not implemented: " << subject << " " << static_cast(dynamic_cast(subject)) << " " << static_cast(dynamic_cast(subject))); const Vector& sortFunction = sortBdds.getSortFunction(this); int nrBdds = sortFunction.size(); // number of bits/bdds to represent kind ArgVec& args = safeCast(AU_DagNode*, subject)->argArray; bool firstArg = true; bddPair* argMap = bdd_newpair(); FOR_EACH_CONST(i, ArgVec, args) { // // Get generalized sort of argument. // Vector argGenSort; (*i)->computeGeneralizedSort(sortBdds, realToBdd, argGenSort); Assert((int) argGenSort.size() == nrBdds, "nrBdds clash"); if (firstArg) { firstArg = false; generalizedSort = argGenSort; // deep copy } else { // // Map input variables to BDDs for current generalized sort, and generalized sort of argument. // for (int j = 0; j < nrBdds; ++j) { bdd_setbddpair(argMap, j, generalizedSort[j]); bdd_setbddpair(argMap, nrBdds + j, argGenSort[j]); } // // Use the sort function to compute a new generalized sort. // for (int j = 0; j < nrBdds; ++j) generalizedSort[j] = bdd_veccompose(sortFunction[j], argMap); } } bdd_freepair(argMap); } // experimental code void AU_Symbol::computeGeneralizedSort2(const SortBdds& sortBdds, const Vector& realToBdd, DagNode* subject, Vector& outputBdds) { Assert(safeCast(AU_BaseDagNode*, subject)->isDeque() == false, "Deque case not implemented: " << subject << " " << static_cast(dynamic_cast(subject)) << " " << static_cast(dynamic_cast(subject))); Vector inputBdds; // assemble input to our sort function Vector middleBdds; // put our output here if we're not finished ArgVec& args = safeCast(AU_DagNode*, subject)->argArray; int lastArg = args.length() - 1; for (int i = 0;; i++) { // // Generalized sort of ith argument. // args[i]->computeGeneralizedSort2(sortBdds, realToBdd, inputBdds); if (i == lastArg) { // // Final application of our sort function with result // directly appended to outputBdds. // sortBdds.operatorCompose(this, inputBdds, outputBdds); break; } else if (i > 0) { // // Middle case - write result to middleBdds. // middleBdds.clear(); sortBdds.operatorCompose(this, inputBdds, middleBdds); // // middleBdds become first part of inputBdds. // inputBdds.swap(middleBdds); } } } bool AU_Symbol::canResolveTheoryClash() { // // We don't put this in parent class because returning true has // the obligation to handle clashing in our unification subproblems. // return getIdentity() != 0; } UnificationSubproblem* AU_Symbol::makeUnificationSubproblem() { if (getIdentity() != 0) { // // Because AU_UnificationSubproblem2 may introduce the // identity element we make sure it had its sort computed // and its ground flag set. // DagNode* id = getIdentityDag(); if (!(id->isGround())) id->computeBaseSortForGroundSubterms(false); } return new AU_UnificationSubproblem2(this); } // // Hash cons code. // DagNode* AU_Symbol::makeCanonical(DagNode* original, HashConsSet* hcs) { if (safeCast(AU_BaseDagNode*, original)->isDeque()) { // // Never use deque form as canonical. // const AU_DequeDagNode* d = safeCast(const AU_DequeDagNode*, original); const AU_Deque& deque = d->getDeque(); AU_DagNode* n = new AU_DagNode(this, deque.length()); n->copySetRewritingFlags(original); n->setSortIndex(original->getSortIndex()); ArgVec::iterator j = n->argArray.begin(); for (AU_DequeIter i(deque); i.valid(); i.next(), ++j) *j = hcs->getCanonical(hcs->insert(i.getDagNode())); n->setProducedByAssignment(); // deque form must be theory normal return n; } const AU_DagNode* d = safeCast(const AU_DagNode*, original); int nrArgs = d->argArray.size(); for (int i = 0; i < nrArgs; i++) { DagNode* b = d->argArray[i]; DagNode* c = hcs->getCanonical(hcs->insert(b)); if (c != b) { // // Detected a non-canonical argument so need to make a new node. // AU_DagNode* n = new AU_DagNode(this, nrArgs); n->copySetRewritingFlags(original); n->setSortIndex(original->getSortIndex()); for (int j = 0; j < i; ++j) n->argArray[j] = d->argArray[j]; n->argArray[i] = c; for (++i; i < nrArgs; i++) n->argArray[i] = hcs->getCanonical(hcs->insert(d->argArray[i])); n->setProducedByAssignment(); // only theory normal dags will be hash cons'd return n; } } return original; // can use the original dag node as the canonical version } DagNode* AU_Symbol::makeCanonicalCopy(DagNode* original, HashConsSet* hcs) { // // We have a unreduced node - copy forced. // if (safeCast(AU_BaseDagNode*, original)->isDeque()) { // // Never use deque form as canonical for unreduced. // const AU_DequeDagNode* d = safeCast(const AU_DequeDagNode*, original); const AU_Deque& deque = d->getDeque(); AU_DagNode* n = new AU_DagNode(this, deque.length()); n->copySetRewritingFlags(original); n->setSortIndex(original->getSortIndex()); ArgVec::iterator j = n->argArray.begin(); for (AU_DequeIter i(deque); i.valid(); i.next(), ++j) *j = hcs->getCanonical(hcs->insert(i.getDagNode())); n->setProducedByAssignment(); // deque form must be theory normal return n; } const AU_DagNode* d = safeCast(const AU_DagNode*, original); int nrArgs = d->argArray.size(); AU_DagNode* n = new AU_DagNode(this, nrArgs); n->copySetRewritingFlags(original); n->setSortIndex(original->getSortIndex()); for (int i = 0; i < nrArgs; i++) n->argArray[i] = hcs->getCanonical(hcs->insert(d->argArray[i])); n->setProducedByAssignment(); // only theory normal dags will be hash cons'd return n; } maude-3.1/src/AU_Theory/AU_FullMatcher.cc0000644000175200017520000001772713576050735015156 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for full A/AU matcher flex part. // bool AU_LhsAutomaton::fullMatch(AU_DagNode* subject, Substitution& solution, SubproblemAccumulator& subproblems, AU_ExtensionInfo* extensionInfo) { AU_Subproblem* subproblem = buildLeftmostPath(subject, solution, extensionInfo); if (subproblem == 0) return false; subproblems.add(subproblem); addVariableBlocks(solution, subproblem, subproblems); addRemainingPaths(subject, solution, subproblem); subproblem->complete(); if (extensionInfo != 0) extensionInfo->setValidAfterMatch(false); return true; } void AU_LhsAutomaton::addVariableBlocks(Substitution& solution, AU_Subproblem* subproblem, SubproblemAccumulator& subproblems) { int nrVariables = solution.nrFragileBindings(); int layerNr = 0; bool rigidEncountered = false; int skip; for (int i = flexLeftPos; i <= flexRightPos; i += skip) { Subterm& f = flexPart[i]; skip = f.blockLength; if (skip == NOT_FIXED) { skip = 1; TopVariable& tv = f.variable; int index = tv.index; DagNode* d = solution.value(index); if (d == 0) { if (rigidEncountered) { rigidEncountered = false; ++layerNr; } subproblem->addTopVariable(layerNr, index, tv.takeIdentity || tv.awkward ? 0 : 1, tv.upperBound, tv.sort); if (tv.abstracted != 0) { subproblems.add (new VariableAbstractionSubproblem(tv.abstracted, index, nrVariables)); } continue; } else if (tv.nastyBinding != NONE) { if (rigidEncountered) { rigidEncountered = false; ++layerNr; } subproblem->addTopVariable(layerNr, index, tv.nastyBinding - 1, tv.nastyBinding, tv.sort); continue; } } rigidEncountered = true; } } bool AU_LhsAutomaton::fullMatchRigidBlock(AU_DagNode* subject, Substitution& solution, RigidBlock& block, int minShift, int maxShift, int& matchShift, Subproblem*& subproblem) { Assert(minShift <= maxShift, "bad shift range"); Assert(block.start <= block.end, "bad block range"); int shiftFactor; for (int i = minShift; i <= maxShift; i += shiftFactor) { local.copy(solution); // make a local copy for matching at shift i if (fullMatchRigidBlock2(subject, block, i, subproblem, shiftFactor)) { matchShift = i; return true; } } return false; } bool AU_LhsAutomaton::fullMatchRigidBlock2(AU_DagNode* subject, RigidBlock& block, int nextSubject, Subproblem*& subproblem, int& shiftFactor) { ArgVec& args = subject->argArray; SubproblemAccumulator subproblems; shiftFactor = 1; // default shift increment int skip; for (int i = block.start; i <= block.end; i += skip) { Subterm& f = flexPart[i]; skip = f.blockLength; if (skip == NOT_FIXED) { DagNode* d = local.value(f.variable.index); Assert(d != 0, "unbound variable in rigid block"); if (!(subject->eliminateForward(d, nextSubject, rightPos))) // better limit? return false; skip = 1; } else { int sf; int t = fullMatchFixedLengthBlock(args, i, nextSubject, subproblems, sf); if (sf > shiftFactor) shiftFactor = sf; if (!t) return false; nextSubject += skip; } } subproblem = subproblems.extractSubproblem(); return true; } bool AU_LhsAutomaton::fullMatchFixedLengthBlock(ArgVec& args, int blockStart, int attemptedShift, SubproblemAccumulator& subproblems, int& shiftFactor) { // // could we merge this with greedyMatchFixedLengthBlock()? // pass subproblems as a pointer and have it 0 for greedy // // for (int i = flexPart[blockStart].blockLength - 1; i >= 0; i--) { Subterm& f = flexPart[blockStart + i]; DagNode* d = args[attemptedShift + i]; Assert(d->getSortIndex() != Sort::SORT_UNKNOWN, "unknown sort for AU argument " << d << " at index " << attemptedShift + i << " topSymbol = " << topSymbol << " blockStart = " << blockStart); shiftFactor = f.shiftFactor; switch (f.type) { case VARIABLE: { Assert(f.variable.upperBound == 1 && !f.variable.takeIdentity, "non-unit variable in fixed length block"); DagNode* v = local.value(f.variable.index); if (v == 0) { if (d->leq(f.variable.sort)) local.bind(f.variable.index, d); else return false; } else { Assert(v->symbol() != topSymbol, "illegal binding to unit variable"); if (!(v->equal(d))) return false; } break; } case GROUND_ALIEN: { if (!(f.groundAlien->equal(d))) return false; break; } case NON_GROUND_ALIEN: { Subproblem* sp; if (!(f.alienAutomaton->match(d, local, sp))) return false; subproblems.add(sp); break; } } } return true; } AU_Subproblem* AU_LhsAutomaton::buildLeftmostPath(AU_DagNode* subject, Substitution& solution, AU_ExtensionInfo* extensionInfo) { int nrRigid = rigidBlocks.length(); Assert(extensionInfo != 0 || nrRigid == 0 || (rigidBlocks[0].start > flexLeftPos && rigidBlocks[nrRigid - 1].end < flexRightPos), "missing unbound variable(s)"); int spare = rightPos - leftPos + 1 - nrSubjectsUsed; if (spare < 0) return 0; int nextSubject = leftPos; AU_Subproblem* subproblem = new AU_Subproblem(subject, leftPos, rightPos, nrRigid + 1, extensionInfo); for (int i = 0; i < nrRigid; i++) { RigidBlock& r = rigidBlocks[i]; int min = nextSubject + r.nrSubjectsToLeave; int max = min + spare; int matchShift; Subproblem* sp; if (!fullMatchRigidBlock(subject, solution, r, min, max, matchShift, sp)) { delete subproblem; return 0; } r.firstMatch = matchShift; nextSubject = matchShift + r.nrSubjectsForUs; spare -= matchShift - min; subproblem->addNode(i, local - solution, sp, matchShift, nextSubject - 1); } return subproblem; } void AU_LhsAutomaton::addRemainingPaths(AU_DagNode* subject, Substitution& solution, AU_Subproblem* subproblem) { int firstUnusable = rightPos + 1 - nrSubjectsForRightVars; for (int i = rigidBlocks.length() - 1; i >= 0; i--) { RigidBlock& r = rigidBlocks[i]; int max = firstUnusable - r.nrSubjectsForUs; int min = r.firstMatch + 1; firstUnusable = r.firstMatch; while (max >= min) { int matchShift; Subproblem* sp; if (fullMatchRigidBlock(subject, solution, r, min, max, matchShift, sp)) { subproblem->addNode(i, local - solution, sp, matchShift, matchShift + r.nrSubjectsForUs - 1); firstUnusable = matchShift; min = matchShift + 1; } else break; } firstUnusable -= r.nrSubjectsToLeave; } } maude-3.1/src/AU_Theory/AU_DagNode.cc0000755000175200017520000003416413674515271014246 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class AU_DagNode. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "variable.hh" #include "AU_Theory.hh" // interface class definitions #include "term.hh" // core class definitions #include "substitution.hh" #include "pendingUnificationStack.hh" #include "unificationContext.hh" // variable class definitions #include "variableSymbol.hh" #include "variableDagNode.hh" // AU theory class definitions #include "AU_Symbol.hh" #include "AU_DagNode.hh" #include "AU_DequeDagNode.hh" #include "AU_DagArgumentIterator.hh" #include "AU_ExtensionInfo.hh" #include "AU_Subproblem.hh" // our stuff #include "AU_Normalize.cc" #include "AU_DagOperations.cc" AU_DagNode* getAU_DagNode(DagNode* d) { if (safeCast(AU_BaseDagNode*, d)->isDeque()) return AU_DequeDagNode::dequeToArgVec(safeCast(AU_DequeDagNode*, d)); return safeCast(AU_DagNode*, d); } RawDagArgumentIterator* AU_DagNode::arguments() { return new AU_DagArgumentIterator(argArray); } size_t AU_DagNode::getHashValue() { size_t hashValue = symbol()->getHashValue(); FOR_EACH_CONST(i, ArgVec, argArray) hashValue = hash(hashValue, (*i)->getHashValue()); return hashValue; } int AU_DagNode::compareArguments(const DagNode* other) const { if (safeCast(const AU_BaseDagNode*, other)->isDeque()) return - safeCast(const AU_DequeDagNode*, other)->compare(this); const ArgVec& argArray2 = safeCast(const AU_DagNode*, other)->argArray; int r = argArray.length() - argArray2.length(); if (r != 0) return r; ArgVec::const_iterator j = argArray2.begin(); FOR_EACH_CONST(i, ArgVec, argArray) { int r = (*i)->compare(*j); if (r != 0) return r; ++j; } Assert(j == argArray2.end(), "iterator problem"); return 0; } DagNode* AU_DagNode::markArguments() { Assert(argArray.length() > 0, "no arguments"); argArray.evacuate(); // // We avoid recursing on the first subterm that shares our symbol. // Symbol* s = symbol(); DagNode* r = 0; FOR_EACH_CONST(i, ArgVec, argArray) { DagNode* d = *i; if (r == 0 && d->symbol() == s) r = d; else d->mark(); } return r; } DagNode* AU_DagNode::copyEagerUptoReduced2() { int nrArgs = argArray.length(); AU_Symbol* s = symbol(); AU_DagNode* n = new AU_DagNode(s, nrArgs); if (s->getPermuteStrategy() == BinarySymbol::EAGER) { for (int i = 0; i < nrArgs; i++) n->argArray[i] = argArray[i]->copyEagerUptoReduced(); } else copy(argArray.begin(), argArray.end(), n->argArray.begin()); return n; } DagNode* AU_DagNode::copyAll2() { int nrArgs = argArray.length(); AU_Symbol* s = symbol(); AU_DagNode* n = new AU_DagNode(s, nrArgs); for (int i = 0; i < nrArgs; i++) n->argArray[i] = argArray[i]->copyAll(); return n; } void AU_DagNode::clearCopyPointers2() { FOR_EACH_CONST(i, ArgVec, argArray) (*i)->clearCopyPointers(); } void AU_DagNode::overwriteWithClone(DagNode* old) { AU_DagNode* d = new(old) AU_DagNode(symbol(), argArray.length()); d->copySetRewritingFlags(this); d->setNormalizationStatus(getNormalizationStatus()); d->setSortIndex(getSortIndex()); copy(argArray.begin(), argArray.end(), d->argArray.begin()); } DagNode* AU_DagNode::makeClone() { int nrArgs = argArray.length(); AU_DagNode* d = new AU_DagNode(symbol(), nrArgs); d->copySetRewritingFlags(this); d->setNormalizationStatus(getNormalizationStatus()); d->setSortIndex(getSortIndex()); copy(argArray.begin(), argArray.end(), d->argArray.begin()); return d; } DagNode* AU_DagNode::copyWithReplacement(int argIndex, DagNode* replacement) { int nrArgs = argArray.length(); AU_DagNode* n = new AU_DagNode(symbol(), nrArgs); ArgVec& args2 = n->argArray; for (int i = 0; i < nrArgs; i++) args2[i] = (i == argIndex) ? replacement : argArray[i]; return n; } DagNode* AU_DagNode::copyWithReplacement(Vector& redexStack, int first, int last) { int nrArgs = argArray.length(); AU_DagNode* n = new AU_DagNode(symbol(), nrArgs); ArgVec& args = n->argArray; int nextReplacementIndex = redexStack[first].argIndex(); for (int i = 0; i < nrArgs; i++) { if (i == nextReplacementIndex) { args[i] = redexStack[first].node(); ++first; nextReplacementIndex = (first <= last) ? redexStack[first].argIndex() : NONE; } else args[i] = argArray[i]; } return n; } void AU_DagNode::partialReplace(DagNode* replacement, ExtensionInfo* extensionInfo) { AU_ExtensionInfo* e = safeCast(AU_ExtensionInfo*, extensionInfo); int first = e->firstMatched(); int last = e->lastMatched(); argArray[first++] = replacement; int nrArgs = argArray.length(); for (last++; last < nrArgs; last++) argArray[first++] = argArray[last]; argArray.contractTo(first); repudiateSortInfo(); // probably not set but be safe if (isProducedByAssignment()) // we _were_ in theory normal form { if (replacement->symbol() == symbol() || // replacement is in our theory -> we are no longer in theory normal form !(replacement->isReduced())) // replacement is not reduced -> we are no longer in theory normal form setNormalizationStatus(FRESH); } } DagNode* AU_DagNode::partialConstruct(DagNode* replacement, ExtensionInfo* extensionInfo) { AU_ExtensionInfo* e = safeCast(AU_ExtensionInfo*, extensionInfo); int first = e->firstMatched(); int last = e->lastMatched(); int nrArgs = argArray.length(); AU_DagNode* n = new AU_DagNode(symbol(), nrArgs + first - last); ArgVec& args2 = n->argArray; for (int i = 0; i < first; i++) args2[i] = argArray[i]; args2[first++] = replacement; for (last++; last < nrArgs; last++) args2[first++] = argArray[last]; return n; } ExtensionInfo* AU_DagNode::makeExtensionInfo() { return new AU_ExtensionInfo(this); } bool AU_DagNode::matchVariableWithExtension(int index, const Sort* sort, Substitution& /* solution */, Subproblem*& returnedSubproblem, ExtensionInfo* extensionInfo) { // // This code could be much more sophisticated: in particular we could look for // the variable having too smaller sort and return false; the subject having // total subterm multiplicity of 2 and return unique solution. // AU_ExtensionInfo* e = safeCast(AU_ExtensionInfo*, extensionInfo); AU_Subproblem* subproblem = new AU_Subproblem(this, 0, argArray.length() - 1, 1, e); int min = symbol()->oneSidedId() ? 1 : 2; subproblem->addTopVariable(0, index, min, UNBOUNDED, const_cast(sort)); // HACK subproblem->complete(); returnedSubproblem = subproblem; extensionInfo->setValidAfterMatch(false); return true; } // // Unification code. // DagNode::ReturnResult AU_DagNode::computeBaseSortForGroundSubterms(bool warnAboutUnimplemented) { AU_Symbol* s = symbol(); // // If we have an identity we bail to backstop version since AU/AUl/AUr is not // currently supported for unification. // if (s->oneSidedId()) return DagNode::computeBaseSortForGroundSubterms(warnAboutUnimplemented); ReturnResult result = GROUND; int nrArgs = argArray.length(); for (int i = 0; i < nrArgs; ++i) { ReturnResult r = argArray[i]->computeBaseSortForGroundSubterms(warnAboutUnimplemented); if (r > result) result = r; // NONGROUND dominates GROUND, UNIMPLEMENTED dominates NONGROUND } if (result == GROUND) { s->computeBaseSort(this); setGround(); } return result; } bool AU_DagNode::computeSolvedForm2(DagNode* rhs, UnificationContext& solution, PendingUnificationStack& pending) { DebugEnter(this << " =? " << rhs); // // If we have a one-sided identity we bail. // if (symbol()->oneSidedId()) return DagNode::computeSolvedForm2(rhs, solution, pending); if (symbol() == rhs->symbol()) { // // AU unification problems with the same top symbol need to be collected and solved // simultaneously for termination reasons. // pending.push(symbol(), this, rhs); return true; } if (VariableDagNode* v = dynamic_cast(rhs)) { VariableDagNode* r = v->lastVariableInChain(solution); if (DagNode* value = solution.value(r->getIndex())) return computeSolvedForm2(value, solution, pending); // // We now treat unification problems f(...) =? X where X's representative // variable is unbound as full AU unification problems now that the variable // theory no longer resolves such problems and we require // purification. // pending.push(symbol(), this, rhs); return true; } return pending.resolveTheoryClash(this, rhs); } void AU_DagNode::insertVariables2(NatSet& occurs) { int nrArgs = argArray.length(); for (int i = 0; i < nrArgs; i++) argArray[i]->insertVariables(occurs); } DagNode* AU_DagNode::instantiate2(const Substitution& substitution) { AU_Symbol* s = symbol(); int nrArgs = argArray.length(); for (int i = 0; i < nrArgs; ++i) { if (DagNode* n = argArray[i]->instantiate(substitution)) { // // Argument changed under instantiation - need to make a new // dagnode. // bool ground = true; AU_DagNode* d = new AU_DagNode(s, nrArgs); // // Copy the arguments we already looked at. // for (int j = 0; j < i; ++j) { if (!(argArray[j]->isGround())) ground = false; d->argArray[j] = argArray[j]; } // // Handle current argument. // d->argArray[i] = n; if (!(n->isGround())) ground = false; // // Handle remaining arguments. // for (++i; i < nrArgs; ++i) { DagNode* a = argArray[i]; if (DagNode* n = a->instantiate(substitution)) a = n; if (!(a->isGround())) ground = false; d->argArray[i] = a; } // // Normalize the new dagnode. We pass the dumb flag as true to prevent deque // formation. If it doesn't collapse and all its arguments are ground we // compute its base sort, and set ground flag. // if (d->normalizeAtTop(true) != COLLAPSED && ground) { s->computeBaseSort(d); d->setGround(); } Assert(d->isDeque() == false, "Oops we got a deque! " << d); return d; } } return 0; // unchanged } // // Narrowing code. // bool AU_DagNode::indexVariables2(NarrowingVariableInfo& indices, int baseIndex) { int nrArgs = argArray.length(); bool ground = true; for (int i = 0; i < nrArgs; i++) { if (!(argArray[i]->indexVariables(indices, baseIndex))) ground = false; } return ground; } DagNode* AU_DagNode::instantiateWithReplacement(const Substitution& substitution, const Vector* eagerCopies, int argIndex, DagNode* newDag) { int nrArgs = argArray.length(); AU_DagNode* n = new AU_DagNode(symbol(), nrArgs); ArgVec& args2 = n->argArray; bool eager = (eagerCopies != 0) && symbol()->getPermuteStrategy() == BinarySymbol::EAGER; for (int i = 0; i < nrArgs; i++) { DagNode* d; if (i == argIndex) d = newDag; else { d = argArray[i]; SAFE_INSTANTIATE(d, eager, substitution, *eagerCopies); } args2[i] = d; } return n; } DagNode* AU_DagNode::instantiateWithCopies2(const Substitution& substitution, const Vector& eagerCopies) { AU_Symbol* s = symbol(); bool eager = s->getPermuteStrategy() == BinarySymbol::EAGER; int nrArgs = argArray.length(); for (int i = 0; i < nrArgs; ++i) { DagNode* a = argArray[i]; DagNode* n = eager ? a->instantiateWithCopies(substitution, eagerCopies) : a->instantiate(substitution); if (n != 0) { // // Argument changed under instantiation - need to make a new // dagnode. // //bool ground = true; AU_DagNode* d = new AU_DagNode(s, nrArgs); // // Copy the arguments we already looked at. // for (int j = 0; j < i; ++j) { //if (!(argArray[j]->isGround())) // ground = false; d->argArray[j] = argArray[j]; } // // Handle current argument. // d->argArray[i] = n; //if (!(n->isGround())) // ground = false; // // Handle remaining arguments. // for (++i; i < nrArgs; ++i) { DagNode* a = argArray[i]; SAFE_INSTANTIATE(a, eager, substitution, eagerCopies); //if (!(a->isGround())) // ground = false; d->argArray[i] = a; } // // Currently the only user of this function is PositionState::rebuildAndInstantiateDag() // via instantiateWithCopies(), SAFE_INSTANTIATE() and instantiateWithReplacement(), // and this is only used for various kinds of narrowing steps. These are followed // by reduction so we don't need to worry about: // normal forms // sort computations // ground flags // // If this changes in the future the following will be needed: // #if 0 // // Normalize the new dagnode. We pass the dumb flag as true to prevent deque // formation. If it doesn't collapse and all its arguments are ground we // compute its base sort, and set ground flag. // if (d->normalizeAtTop(true) != COLLAPSED && ground) { s->computeBaseSort(d); d->setGround(); } Assert(d->isDeque() == false, "Oops we got a deque! " << d); #endif return d; } } return 0; // unchanged } maude-3.1/src/AU_Theory/AU_LhsAutomaton.hh0000644000175200017520000002321413576050635015363 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for left hand side automata in the A, AUl, AUr and AU theories. // #ifndef _AU_LhsAutomaton_hh_ #define _AU_LhsAutomaton_hh_ #include "lhsAutomaton.hh" class AU_LhsAutomaton : public LhsAutomaton { NO_COPYING(AU_LhsAutomaton); public: enum MatchStrategy { // // Ground out case: no extension and no flex part; everything is in // the rigid part. // GROUND_OUT, // // Lone variable case: no extension and flex part consists of a single // variable that is forced to match whatever is left after the rigid part // has been matched. // LONE_VARIABLE, // // Fast lone variable case: as above but variable has a PURE_SORT // and is not an abstraction variable. // FAST_LONE_VARIABLE, // // Greedy case: In the flex part, the intersection of each subterm's variables // with union of its context variables and the condition variables contains // only variables guaranteed to be bound once the rigid part has been matched. // None of the subautomata for the flex part are likely to return subproblems and // each variable in the subterm that is not guaranteed to be bound has either a // LIMIT_SORT or a PURE_SORT or has upperBound = 1. // GREEDY, // // Full case: if other cases don't apply; build a DAG which provides a // compact representation of the possibly exponential number of matching // possibilities and pass it back as a subproblem. // FULL }; // // Operations to build an AU_LhsAutomaton // AU_LhsAutomaton(AU_Symbol* symbol, bool matchAtTop, bool collapsePossible, LhsAutomaton* uniqueCollapseAutomaton, int nrVariables); ~AU_LhsAutomaton(); void addRigidVariable(const VariableTerm* variable, bool leftEnd, bool idPossible); void addRigidGroundAlien(Term* alien, bool leftEnd); void addRigidNonGroundAlien(LhsAutomaton* automaton, bool leftEnd); void addFlexVariable(const VariableTerm* variable, int shiftFactor, bool idPossible); void addFlexAbstractionVariable(int index, Sort* sort, int upperBound, bool takeIdentity, bool awkward, LhsAutomaton* abstracted); void addFlexGroundAlien(Term* alien, int shiftFactor); void addFlexNonGroundAlien(LhsAutomaton* automaton, int shiftFactor); void complete(MatchStrategy strategy); // // Standard LhsAutomaton operations // bool match(DagNode* subject, Substitution& solution, Subproblem*& returnedSubproblem, ExtensionInfo* extensionInfo); #ifdef DUMP void dump(ostream& s, const VariableInfo& variableInfo, int indentLevel); #endif private: enum SubtermType { VARIABLE, GROUND_ALIEN, NON_GROUND_ALIEN }; enum Special { STALLED = -1, NOT_FIXED = -1 }; struct TopVariable { short index; Bool takeIdentity; // take identity instead of piece of subject (always) Bool awkward; // take identity instead of piece of subject (special) Sort* sort; int upperBound; LhsAutomaton* abstracted; // automaton for abstracted term // // Data storage for full match time use, flex part only // int nastyBinding; // if >= 0, minimum number of subterms // that binding might match // // Data storage for greedy match time use, flex part only // int firstSubject; int lastSubject; }; struct Subterm { SubtermType type; int shiftFactor; // for flex part only union { bool leftEnd; // for rigid part only int blockLength; // for flex part only; +ve for fixed start, -1 for variable }; union { TopVariable variable; Term* groundAlien; LhsAutomaton* alienAutomaton; }; }; // // Rigid blocks within the flex part are only determined at match time // since they depend on what variables are bound. // struct RigidBlock { int start; // index into flexPart int end; // index into flexPart int nrSubjectsForUs; // needed because value of bound variable may be in our theory int nrSubjectsToLeave; // for preceeding variables int firstMatch; // first matching shift for this rigid block }; void updateWholeBounds(int min, int max); void updateFlexBounds(int min, int max); // // First rigid part matcher and preprocessing code. // bool matchRigidPart(AU_DagNode* subject, Substitution& solution, SubproblemAccumulator& subproblems); bool checkForRigidEnds(AU_DagNode* subject, Substitution& solution, SubproblemAccumulator& subproblems); int checkLeftEnd(AU_DagNode* subject, Substitution& solution, SubproblemAccumulator& subproblems, int& mustLeave, bool& rightStalled); int checkRightEnd(AU_DagNode* subject, Substitution& solution, SubproblemAccumulator& subproblems, int& mustLeave, bool& leftStalled); bool forcedLoneVariableCase(AU_DagNode* subject, Substitution& solution, Subproblem*& returnedSubproblem); void determineRigidBlocks(Substitution& solution); // // Greedy Matcher. // int greedyMatch(AU_DagNode* subject, Substitution& solution, AU_ExtensionInfo* extensionInfo); void greedyBindVariables(AU_DagNode* subject, Substitution& solution); int greedyMatchRigidBlock(AU_DagNode* subject, RigidBlock& block, int minShift, int maxShift, int& matchShift); int greedyMatchRigidBlock2(AU_DagNode* subject, RigidBlock& block, int nextSubject, int& shiftFactor); int greedyMatchFixedLengthBlock(ArgVec& args, int blockStart, int attemptedShift, int& shiftFactor); int greedyMatchBlocks(AU_DagNode* subject, AU_ExtensionInfo* extensionInfo); bool greedyMatchVariableBlock(ArgVec& args, int blockStart, int blockLength, int firstSubject, int nrSubjects, int spare, bool leftExtend, bool rightExtend, AU_ExtensionInfo* extensionInfo); // // Full Matcher. // void addVariableBlocks(Substitution& solution, AU_Subproblem* subproblem, SubproblemAccumulator& subproblems); bool fullMatchRigidBlock(AU_DagNode* subject, Substitution& solution, RigidBlock& block, int minShift, int maxShift, int& matchShift, Subproblem*& subproblem); bool fullMatchRigidBlock2(AU_DagNode* subject, RigidBlock& block, int nextSubject, Subproblem*& subproblem, int& shiftFactor); bool fullMatchFixedLengthBlock(ArgVec& args, int blockStart, int attemptedShift, SubproblemAccumulator& subproblems, int& shiftFactor); AU_Subproblem* buildLeftmostPath(AU_DagNode* subject, Substitution& solution, AU_ExtensionInfo* extensionInfo); void addRemainingPaths(AU_DagNode* subject, Substitution& solution, AU_Subproblem* subproblem); bool fullMatch(AU_DagNode* subject, Substitution& solution, SubproblemAccumulator& subproblems, AU_ExtensionInfo* extensionInfo); // // Collapse matcher. // bool collapseMatch(DagNode* subject, Substitution& solution, Subproblem*& returnedSubproblem, ExtensionInfo* extensionInfo); bool uniqueCollapseMatch(DagNode* subject, Substitution& solution, Subproblem*& returnedSubproblem, ExtensionInfo* extensionInfo); bool multiwayCollapseMatch(DagNode* subject, Substitution& solution, Subproblem*& returnedSubproblem, ExtensionInfo* extensionInfo); void bindUnboundVariablesToIdentity(Substitution& solution, int exception); int dequeMatch(AU_DequeDagNode* subject, Substitution& solution, Subproblem*& returnedSubproblem); AU_Symbol* const topSymbol; const bool matchAtTop; const bool collapsePossible; LhsAutomaton* const uniqueCollapseAutomaton; MatchStrategy matchStrategy; int wholeLowerBound; int wholeUpperBound; int flexLowerBound; int flexUpperBound; Vector rigidPart; Vector flexPart; // // Data storage for match-time use. // // Left and right limits of subject not matched by rigid part. // int leftPos; int rightPos; // // Left and right limits of flex part not used up. // int flexLeftPos; int flexRightPos; // // Rigid blocks within flex part determined by examining variable // bindings at match time. // Vector rigidBlocks; // // Minimum number of subjects needed for flex part. // int nrSubjectsUsed; // // Minimum number of subjects needed for variables to the right of // last rigid block. // int nrSubjectsForRightVars; // // Throw away substitutions for exploring match space. // Substitution local; Substitution scratch; friend ostream& operator<<(ostream& s, SubtermType type); }; #ifdef DUMP ostream& operator<<(ostream& s, AU_LhsAutomaton::MatchStrategy strategy); ostream& operator<<(ostream& s, AU_LhsAutomaton::SubtermType type); #endif #endif maude-3.1/src/AU_Theory/AU_ArgumentIterator.cc0000644000175200017520000000270113576050735016226 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class AU_ArgumentIterator. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "AU_Theory.hh" // AU theory class definitions #include "AU_ArgumentIterator.hh" bool AU_ArgumentIterator::valid() const { return position < argArray.length(); } Term* AU_ArgumentIterator::argument() const { Assert(position < argArray.length(), "no args left"); return argArray[position].term; } void AU_ArgumentIterator::next() { Assert(position < argArray.length(), "no args left"); ++position; } maude-3.1/src/AU_Theory/AU_Normalize.cc0000644000175200017520000001427113576050735014677 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Normalization for AU_DagNodes. // bool AU_DagNode::disappear(AU_Symbol* s, ArgVec::const_iterator i) { return (s->rightId() && i != argArray.begin()) || (s->leftId() && i + 1 != argArray.end()); } AU_DagNode::NormalizationResult AU_DagNode::normalizeAtTop(bool dumb) { AU_Symbol* s = symbol(); Term* identity = s->getIdentity(); int expansion = 0; int nrIdentities = 0; int maxDeque = 0; ArgVec::const_iterator maxDequeIter; // gcc gives uninitialized warning // // First examine the argument list looking for either our top symbol // or our identity. // { FOR_EACH_CONST(i, ArgVec, argArray) { DagNode* d = *i; if (d->symbol() == s) { if (safeCast(AU_BaseDagNode*, d)->isDeque()) { // // Since we have at least one deque we won't use // expansion and therefore don't waste time // updating it. // int nrArgs = safeCast(AU_DequeDagNode*, d)->nrArgs(); if (nrArgs > maxDeque) { maxDeque = nrArgs; maxDequeIter = i; } } else expansion += safeCast(AU_DagNode*, d)->argArray.length() - 1; } else if (identity != 0 && identity->equal(d) && disappear(s, i)) ++nrIdentities; } } // // Now deal efficiently with all the special cases. // if (maxDeque > 0) { // // We had at least 1 deque in argument list. We push // all the remaining arguments onto the largest such // deque. We never deal with one sided identities in this // case. // AU_Deque flat(safeCast(AU_DequeDagNode*, *maxDequeIter)->getDeque()); { // // Push stuff on the left of the largest deque. // const ArgVec::const_iterator b = argArray.begin(); for (ArgVec::const_iterator i = maxDequeIter; i != b;) { --i; DagNode* d = *i; if (d->symbol() == s) { if (safeCast(AU_BaseDagNode*, d)->isDeque()) flat.pushLeft(safeCast(AU_DequeDagNode*, d)->getDeque()); else flat.pushLeft(safeCast(AU_DagNode*, d)->argArray); } else if (!(nrIdentities > 0 && identity->equal(d))) flat.pushLeft(d); } } { // // Push stuff on the right of the largest deque. // const ArgVec::const_iterator e = argArray.end(); for (ArgVec::const_iterator i = maxDequeIter + 1; i != e; ++i) { DagNode* d = *i; if (d->symbol() == s) { if (safeCast(AU_BaseDagNode*, d)->isDeque()) flat.pushRight(safeCast(AU_DequeDagNode*, d)->getDeque()); else flat.pushRight(safeCast(AU_DagNode*, d)->argArray); } else if (!(nrIdentities > 0 && identity->equal(d))) flat.pushRight(d); } } (void) new (this) AU_DequeDagNode(symbol(), flat); Assert(!dumb, "shouldn't be here if we're in dumb mode"); MemoryCell::okToCollectGarbage(); // needed because of pathological nesting return DEQUED; } if (expansion == 0) { // // No flattening. // if (nrIdentities != 0) { // // But have to remove identities. // int p = 0; FOR_EACH_CONST(i, ArgVec, argArray) { DagNode* d = *i; if (!(identity->equal(d) && disappear(s, i))) argArray[p++] = d; } if (p < 2) { // // Eliminating identity causes AU dag node to collapse to its // remaining argument or 1st argument of all arguments were // identity. // DagNode* remaining = (s->getPermuteStrategy() == BinarySymbol::EAGER) ? argArray[0] : argArray[0]->copyReducible(); remaining->overwriteWithClone(this); return COLLAPSED; } argArray.contractTo(p); } return NORMAL; } // // We need to flatten. // int nrArgs = argArray.length(); if (nrIdentities == 0) { // // No identities: in place flattening. // argArray.expandBy(expansion); int p = nrArgs + expansion - 1; for (int i = nrArgs - 1; i >= 0; i--) { Assert(p >= i, "loop invarient failed"); DagNode* d = argArray[i]; if (d->symbol() == s) { ArgVec& argArray2 = safeCast(AU_DagNode*, d)->argArray; for (int j = argArray2.length() - 1; j >= 0; j--) argArray[p--] = argArray2[j]; } else argArray[p--] = argArray[i]; } Assert(p == -1, "bad argArray length"); } else { // // Identities: flatten into auxiliary buffer. // ArgVec buffer(nrArgs + expansion - nrIdentities); int p = 0; FOR_EACH_CONST(i, ArgVec, argArray) { DagNode* d = *i; if (d->symbol() == s) { ArgVec& argArray2 = safeCast(AU_DagNode*, d)->argArray; FOR_EACH_CONST(j, ArgVec, argArray2) buffer[p++] = *j; } else if (!(identity->equal(d) && disappear(s, i))) buffer[p++] = d; } Assert(p == nrArgs + expansion - nrIdentities, "bad buffer size"); argArray.swap(buffer); } // // If we're in dumb mode then there may be a lot of partially built // instantiated dags lying around that are vunerable to garbage collection. // if (!dumb) MemoryCell::okToCollectGarbage(); // needed because of pathological nesting // // This is the one place where deques can come into existence. // if (!dumb && s->useDeque()) { AU_Deque flat(argArray); (void) new (this) AU_DequeDagNode(symbol(), flat); return DEQUED; } return FLATTENED; } maude-3.1/src/AU_Theory/AU_DagOperations.cc0000644000175200017520000000772513576050735015504 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Code to manipulate AU argument lists taking account of // all the complexities introduced by one sided identities. // bool AU_DagNode::eliminateForward(DagNode* target, int& pos, int limit) const { int last = argArray.length() - 1; // // pos may point to 1 beyond limit to indicate that target must match nothing. // Assert(pos >= 0 && limit <= last && pos <= limit + 1, "bad pos or limit"); AU_Symbol* s = symbol(); bool leftId = s->leftId(); bool rightId = s->rightId(); Term* identity = s->getIdentity(); if (target->symbol() == s) { const ArgVec args2 = getAU_DagNode(target)->argArray; int start = 0; int finish = args2.length() - 1; if (rightId) { if (!leftId && pos > 0 && identity->equal(args2[start])) ++start; // skip over leading identity in target } else { if (leftId && pos + finish <= last && identity->equal(args2[finish])) --finish; // skip over trailing identity in target } if (pos + (finish - start) > limit) return false; for (int i = start; i <= finish; i++) { if (!(args2[i]->equal(argArray[pos]))) return false; ++pos; } return true; } else { if (((pos > 0 && rightId) || (pos <= last && leftId)) && identity->equal(target)) return true; if (pos <= limit && target->equal(argArray[pos])) { ++pos; return true; } return false; } } bool AU_DagNode::eliminateBackward(DagNode* target, int& pos, int limit) const { int last = argArray.length() - 1; // // pos may point to 1 before limit to indicate that target must match nothing. // Assert(pos <= last && limit >= 0 && pos >= limit - 1, "bad pos or limit"); AU_Symbol* s = symbol(); bool leftId = s->leftId(); bool rightId = s->rightId(); Term* identity = s->getIdentity(); if (target->symbol() == s) { const ArgVec args2 = getAU_DagNode(target)->argArray; int start = 0; int finish = args2.length() - 1; if (rightId) { if (!leftId && pos - finish >= 0 && identity->equal(args2[start])) ++start; // skip over leading identity in target } else { if (leftId && pos < last && identity->equal(args2[finish])) --finish; // skip over trailing identity in target } if (pos - (finish - start) < limit) return false; for (int i = finish; i >= start; i--) { if (!(args2[i]->equal(argArray[pos]))) return false; --pos; } return true; } else { if (((pos >= 0 && rightId) || (pos < last && leftId)) && identity->equal(target)) return true; if (pos >= limit && target->equal(argArray[pos])) { --pos; return true; } return false; } } DagNode* AU_DagNode::makeFragment(int start, int nrSubterms, bool extraId) const { Assert(nrSubterms > 0, "no subterms"); if (extraId) ++nrSubterms; if (nrSubterms == 1) return argArray[start]; AU_Symbol* s = symbol(); AU_DagNode* d = new AU_DagNode(s, nrSubterms); int i = 0; if (extraId) d->argArray[s->leftId() ? --nrSubterms : i++] = s->getIdentityDag(); for (; i < nrSubterms; i++, start++) d->argArray[i] = argArray[start]; return d; } maude-3.1/src/AU_Theory/AU_ArgumentIterator.hh0000644000175200017520000000263013576050635016240 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for argument iterator for AU terms. // #ifndef _AU_ArgumentIterator_hh_ #define _AU_ArgumentIterator_hh_ #include "rawArgumentIterator.hh" #include "AU_Term.hh" class AU_ArgumentIterator : public RawArgumentIterator { public: AU_ArgumentIterator(const Vector& arguments); bool valid() const; Term* argument() const; void next(); private: const Vector& argArray; int position; }; inline AU_ArgumentIterator::AU_ArgumentIterator(const Vector& arguments) : argArray(arguments) { position = 0; } #endif maude-3.1/src/AU_Theory/AU_UnificationSubproblem2.hh0000755000175200017520000000546313677006661017345 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2015 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for unification subproblems in the A theory. // #ifndef _AU_UnificationSubproblem2_hh_ #define _AU_UnificationSubproblem2_hh_ #include #include "unificationSubproblem.hh" #include "simpleRootContainer.hh" #include "natSet.hh" #include "dagNode.hh" #include "substitution.hh" #include "pendingUnificationStack.hh" #include "wordSystem.hh" class AU_UnificationSubproblem2 : public UnificationSubproblem, private SimpleRootContainer { NO_COPYING(AU_UnificationSubproblem2); public: AU_UnificationSubproblem2(AU_Symbol* topSymbol); ~AU_UnificationSubproblem2(); void addUnification(DagNode* lhs, DagNode* rhs, bool marked, UnificationContext& solution); bool solve(bool findFirst, UnificationContext& solution, PendingUnificationStack& pending); private: typedef WordSystem::Word Word; struct Assignment { int variable; WordSystem::Word value; }; struct Unification { WordSystem::Word lhs; WordSystem::Word rhs; }; void markReachableNodes(); int dagToAbstract(DagNode* dagNode, UnificationContext& solution); void assocToAbstract(DagNode* dagNode, WordSystem::Word& word, UnificationContext& solution); void makeWordSystem(UnificationContext& solution); void unsolve(int index, UnificationContext& solution); DagNode* abstractToFreshVariable(int variableIndex, UnificationContext& solution); bool buildSolution(UnificationContext& solution, PendingUnificationStack& pending); AU_Symbol* const topSymbol; Vector subterms; list assignments; list unifications; WordSystem* wordSystem; Vector freshVariables; // // For backtracking. // Substitution preSolveSubstitution; Substitution savedSubstitution; PendingUnificationStack::Marker preSolveState; PendingUnificationStack::Marker savedPendingState; // // Needed for identity case. // list nullEquations; NatSet markedSubterms; // indices of subterms that have been marked }; #endif maude-3.1/src/AU_Theory/AU_Subproblem.cc0000644000175200017520000000672413576050735015055 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class AU_Subproblem. // // utility stuff #include "macros.hh" #include "vector.hh" #include "sequencePartition.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "AU_Theory.hh" // interface class definitions #include "symbol.hh" // core class definitions #include "rewritingContext.hh" #include "localBinding.hh" // AU theory class definitions #include "AU_Symbol.hh" #include "AU_DagNode.hh" #include "AU_ExtensionInfo.hh" #include "AU_Subproblem.hh" AU_Subproblem::AU_Subproblem(AU_DagNode* subject, int firstSubterm, int lastSubterm, int nrLayers, AU_ExtensionInfo* extensionInfo) : extensionInfo(extensionInfo), layers(nrLayers) { Assert(extensionInfo == 0 || (firstSubterm == 0 && lastSubterm == subject->argArray.length() - 1), "extension disagreement"); for (int i = 0; i < nrLayers; i++) layers[i].initialize(subject); layers[0].initializeFirst(firstSubterm, extensionInfo); layers[nrLayers - 1].initializeLast(lastSubterm, extensionInfo); } void AU_Subproblem::complete() { int nrPatternLayers = layers.length() - 1; // last layer has no patterns for (int i = 1; i < nrPatternLayers; i++) layers[i - 1].link(layers[i]); } bool AU_Subproblem::solve(bool findFirst, RewritingContext& solution) { if (!findFirst && solveVariables(false, solution)) return true; for (;;) { if (!solvePatterns(findFirst, solution)) return false; if (solveVariables(true, solution)) return true; findFirst = false; } } bool AU_Subproblem::solvePatterns(bool findFirst, RewritingContext& solution) { int nrPatternLayers = layers.length() - 1; // last layer has no patterns if (nrPatternLayers == 0) return findFirst; int i = findFirst ? 0 : nrPatternLayers - 1; if (findFirst) layers[0].reset(); for(;;) { findFirst = layers[i].solvePatterns(findFirst, solution, layers[i + 1]); if (findFirst) { if (++i == nrPatternLayers) break; } else { if (--i < 0) break; } } return findFirst; } bool AU_Subproblem::solveVariables(bool findFirst, RewritingContext& solution) { int nrVariableLayers = layers.length(); int i = findFirst ? 0 : nrVariableLayers - 1; for(;;) { findFirst = layers[i].solveVariables(findFirst, solution); if (findFirst) { if (++i == nrVariableLayers) { if (extensionInfo == 0 ||extensionInfo->bigEnough()) return true; --i; findFirst = false; } } else { if (--i < 0) break; } } return false; } maude-3.1/src/AU_Theory/AU_BaseDagNode.hh0000644000175200017520000000512013576050635015035 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Base class for DAG nodes in the A, AU, AUl and theories. // #ifndef _AU_BaseDagNode_hh_ #define _AU_BaseDagNode_hh_ #include "dagNode.hh" class AU_BaseDagNode : public DagNode { NO_COPYING(AU_BaseDagNode); public: enum NormalizationStatus { // // Default: no guarantees. // FRESH = 0, // // Node was produced by an assignment in AU matcher: // (a) all arguments are reduced up to strategy of our symbol // (this only holds if it was true of subject before matching); // (b) all arguments have their true sort; and // (c) argument list in theory normal form. // ASSIGNMENT = 1, // // As above but arguments are stored in a deque (AU_DequeNode) // rather than in an ArgVec (AU_DagNode). // DEQUE = 2 }; AU_BaseDagNode(AU_Symbol* symbol); AU_Symbol* symbol() const; NormalizationStatus getNormalizationStatus() const; void setNormalizationStatus(NormalizationStatus status); bool isDeque() const; bool isFresh() const; bool isProducedByAssignment() const; }; inline AU_BaseDagNode::AU_BaseDagNode(AU_Symbol* symbol) : DagNode(symbol) { } inline AU_Symbol* AU_BaseDagNode::symbol() const { return safeCast(AU_Symbol*, DagNode::symbol()); } inline AU_BaseDagNode::NormalizationStatus AU_BaseDagNode::getNormalizationStatus() const { return static_cast(getTheoryByte()); } inline bool AU_BaseDagNode::isDeque() const { return getTheoryByte() == DEQUE; } inline bool AU_BaseDagNode::isFresh() const { return getTheoryByte() == FRESH; } inline bool AU_BaseDagNode::isProducedByAssignment() const { return getTheoryByte() == ASSIGNMENT; } inline void AU_BaseDagNode::setNormalizationStatus(NormalizationStatus status) { setTheoryByte(status); } #endif maude-3.1/src/AU_Theory/AU_LhsAutomaton.cc0000644000175200017520000002425713576050735015362 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class AU_LhsAutomaton. // // utility stuff #include "macros.hh" #include "vector.hh" #include "indent.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "variable.hh" #include "AU_Persistent.hh" #include "AU_Theory.hh" // interface class definitions #include "associativeSymbol.hh" #include "dagNode.hh" #include "term.hh" // core class definitions #include "variableSymbol.hh" #include "variableTerm.hh" #include "variableInfo.hh" #include "subproblemSequence.hh" #include "subproblemDisjunction.hh" #include "subproblemAccumulator.hh" #include "disjunctiveSubproblemAccumulator.hh" #include "substitution.hh" #include "localBinding.hh" #include "variableAbstractionSubproblem.hh" #include "equalitySubproblem.hh" // AU theory class definitions #include "AU_Symbol.hh" #include "AU_DagNode.hh" #include "AU_DequeDagNode.hh" #include "AU_LhsAutomaton.hh" #include "AU_Subproblem.hh" #include "AU_ExtensionInfo.hh" // our stuff #include "AU_DequeMatcher.cc" #include "AU_GreedyMatcher.cc" #include "AU_Matcher.cc" #include "AU_CollapseMatcher.cc" #include "AU_FullMatcher.cc" AU_LhsAutomaton::AU_LhsAutomaton(AU_Symbol* symbol, bool matchAtTop, bool collapsePossible, LhsAutomaton* uniqueCollapseAutomaton, int nrVariables) : topSymbol(symbol), matchAtTop(matchAtTop), collapsePossible(collapsePossible), uniqueCollapseAutomaton(uniqueCollapseAutomaton), local(nrVariables), scratch(nrVariables) { wholeLowerBound = 0; wholeUpperBound = matchAtTop ? UNBOUNDED : 0; flexLowerBound = 0; flexUpperBound = matchAtTop ? UNBOUNDED : 0; } AU_LhsAutomaton::~AU_LhsAutomaton() { delete uniqueCollapseAutomaton; int nrRigid = rigidPart.length(); for (int i = 0; i < nrRigid; i++) { Subterm& r = rigidPart[i]; if (r.type == NON_GROUND_ALIEN) delete r.alienAutomaton; } int nrFlex = flexPart.length(); for (int i = 0; i < nrFlex; i++) { Subterm& f = flexPart[i]; if (f.type == VARIABLE) delete f.variable.abstracted; else if (f.type == NON_GROUND_ALIEN) delete f.alienAutomaton; } } void AU_LhsAutomaton::updateWholeBounds(int min, int max) { wholeLowerBound += min; wholeUpperBound = uplus(wholeUpperBound, max); } void AU_LhsAutomaton::updateFlexBounds(int min, int max) { flexLowerBound += min; flexUpperBound = uplus(flexUpperBound, max); } void AU_LhsAutomaton::addRigidVariable(const VariableTerm* variable, bool leftEnd, bool idPossible) { Sort* s = variable->getSort(); int upperBound = topSymbol->sortBound(s); bool takeIdentity = idPossible && topSymbol->takeIdentity(s); updateWholeBounds(takeIdentity ? 0 : 1, upperBound); int nrRigid = rigidPart.length(); rigidPart.expandBy(1); Subterm& r = rigidPart[nrRigid]; r.type = VARIABLE; r.leftEnd = leftEnd; r.variable.index = variable->getIndex(); r.variable.sort = s; r.variable.upperBound = upperBound; r.variable.takeIdentity = takeIdentity; r.variable.awkward = false; r.variable.abstracted = 0; } void AU_LhsAutomaton::addRigidGroundAlien(Term* alien, bool leftEnd) { updateWholeBounds(1, 1); int nrRigid = rigidPart.length(); rigidPart.expandBy(1); Subterm& r = rigidPart[nrRigid]; r.type = GROUND_ALIEN; r.leftEnd = leftEnd; r.groundAlien = alien; } void AU_LhsAutomaton::addRigidNonGroundAlien(LhsAutomaton* automaton, bool leftEnd) { updateWholeBounds(1, 1); int nrRigid = rigidPart.length(); rigidPart.expandBy(1); Subterm& r = rigidPart[nrRigid]; r.type = NON_GROUND_ALIEN; r.leftEnd = leftEnd; r.alienAutomaton = automaton; } void AU_LhsAutomaton::addFlexVariable(const VariableTerm* variable, int shiftFactor, bool idPossible) { Sort* s = variable->getSort(); int upperBound = topSymbol->sortBound(s); bool takeIdentity = idPossible && topSymbol->takeIdentity(s); int lowerBound = takeIdentity ? 0 : 1; updateWholeBounds(lowerBound, upperBound); updateFlexBounds(lowerBound, upperBound); int nrFlex = flexPart.length(); flexPart.expandBy(1); Subterm& f = flexPart[nrFlex]; f.type = VARIABLE; f.shiftFactor = shiftFactor; f.variable.index = variable->getIndex(); f.variable.sort = s; f.variable.upperBound = upperBound; f.variable.takeIdentity = takeIdentity; f.variable.awkward = matchAtTop && !idPossible && topSymbol->takeIdentity(s); f.variable.abstracted = 0; } void AU_LhsAutomaton::addFlexAbstractionVariable(int index, Sort* sort, int upperBound, bool takeIdentity, bool awkward, LhsAutomaton* abstracted) { int lowerBound = takeIdentity ? 0 : 1; updateWholeBounds(lowerBound, upperBound); updateFlexBounds(lowerBound, upperBound); int nrFlex = flexPart.length(); flexPart.expandBy(1); Subterm& f = flexPart[nrFlex]; f.type = VARIABLE; f.shiftFactor = UNDEFINED; f.variable.index = index; f.variable.sort = sort; f.variable.upperBound = upperBound; f.variable.takeIdentity = takeIdentity; f.variable.awkward = awkward; f.variable.abstracted = abstracted; } void AU_LhsAutomaton::addFlexGroundAlien(Term* alien, int shiftFactor) { updateWholeBounds(1, 1); updateFlexBounds(1, 1); int nrFlex = flexPart.length(); flexPart.expandBy(1); Subterm& f = flexPart[nrFlex]; f.type = GROUND_ALIEN; f.shiftFactor = shiftFactor; f.groundAlien = alien; } void AU_LhsAutomaton::addFlexNonGroundAlien(LhsAutomaton* automaton, int shiftFactor) { updateWholeBounds(1, 1); updateFlexBounds(1, 1); int nrFlex = flexPart.length(); flexPart.expandBy(1); Subterm& f = flexPart[nrFlex]; f.type = NON_GROUND_ALIEN; f.shiftFactor = shiftFactor; f.alienAutomaton = automaton; } void AU_LhsAutomaton::complete(MatchStrategy strategy) { int nrFixed = 0; for(int i = flexPart.length() - 1; i >= 0; i--) { Subterm& f = flexPart[i]; if (f.shiftFactor < 0) { f.blockLength = NOT_FIXED; nrFixed = 0; } else f.blockLength = ++nrFixed; } matchStrategy = strategy; } #ifdef DUMP void AU_LhsAutomaton::dump(ostream& s, const VariableInfo& variableInfo, int indentLevel) { s << Indent(indentLevel) << "Begin{AU_LhsAutomaton}\n"; ++indentLevel; s << Indent(indentLevel) << "topSymbol = \"" << topSymbol << "\"\tmatchAtTop = " << matchAtTop << "\tcollapsePossible = " << collapsePossible << "\tmatchStrategy = " << matchStrategy << '\n'; if (uniqueCollapseAutomaton != 0) { s << Indent(indentLevel) << "uniqueCollapseAutomaton =\n"; uniqueCollapseAutomaton->dump(s, variableInfo, indentLevel + 1); } s << Indent(indentLevel) << "wholeLowerBound = " << wholeLowerBound << "\twholeUpperBound = " << wholeUpperBound << '\n'; s << Indent(indentLevel) << "flexLowerBound = " << flexLowerBound << "\tflexUpperBound = " << flexUpperBound << '\n'; s << Indent(indentLevel) << "rigidPart:\n"; ++indentLevel; for (int i = 0; i < rigidPart.length(); i++) { Subterm& r = rigidPart[i]; s << Indent(indentLevel) << "type = " << r.type << "\tleftEnd = " << r.leftEnd; switch (r.type) { case VARIABLE: { s << "\tindex = " << r.variable.index << " \"" << variableInfo.index2Variable(r.variable.index) << "\"\n"; s << Indent(indentLevel) << "sort = " << r.variable.sort << "\tupperBound = " << r.variable.upperBound << "\ttakeIdentity = " << r.variable.takeIdentity << '\n'; break; } case GROUND_ALIEN: { s << "\tgroundAlien = " << r.groundAlien << '\n'; break; } case NON_GROUND_ALIEN: { s << "\talienAutomaton =\n"; r.alienAutomaton->dump(s, variableInfo, indentLevel + 1); break; } } } s << Indent(indentLevel - 1) << "flex part:\n"; for (int i = 0; i < flexPart.length(); i++) { Subterm& f = flexPart[i]; s << Indent(indentLevel) << "type = " << f.type << "\tshiftFactor = " << f.shiftFactor << "\tblockLength = " << f.blockLength; switch (f.type) { case VARIABLE: { s << "\tindex = " << f.variable.index; if (f.variable.abstracted == 0) s << " \"" << variableInfo.index2Variable(f.variable.index) << '"'; s << '\n' << Indent(indentLevel) << "sort = " << f.variable.sort << "\tupperBound = " << f.variable.upperBound << "\ttakeIdentity = " << bool(f.variable.takeIdentity) << "\tawkward = " << bool(f.variable.awkward) << '\n'; if (f.variable.abstracted != 0) { s << Indent(indentLevel) << "abstracted = " << '\n'; f.variable.abstracted->dump(s, variableInfo, indentLevel + 1); } break; } case GROUND_ALIEN: { s << "\tgroundAlien = " << f.groundAlien << '\n'; break; } case NON_GROUND_ALIEN: { s << "\talienAutomaton =\n"; f.alienAutomaton->dump(s, variableInfo, indentLevel + 1); break; } } } s << Indent(indentLevel - 2) << "End{AU_LhsAutomaton}\n"; } ostream& operator<<(ostream& s, AU_LhsAutomaton::MatchStrategy strategy) { static const char* const names[] = {"GROUND_OUT", "LONE_VARIABLE", "FAST_LONE_VARIABLE", "GREEDY", "FULL"}; s << names[strategy]; return s; } ostream& operator<<(ostream& s, AU_LhsAutomaton::SubtermType type) { static const char* const names[] = {"VARIABLE", "GROUND_ALIEN", "NON_GROUND_ALIEN"}; s << names[type]; return s; } #endif maude-3.1/src/AU_Theory/AU_RhsAutomaton.hh0000644000175200017520000000353213576050635015372 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for right hand side automata in the the A, AUl, AUr and AU theories. // #ifndef _AU_RhsAutomaton_hh_ #define _AU_RhsAutomaton_hh_ #include "rhsAutomaton.hh" class AU_RhsAutomaton : public RhsAutomaton { NO_COPYING(AU_RhsAutomaton); public: AU_RhsAutomaton(AU_Symbol* symbol, int nrArgs); void remapIndices(VariableInfo& variableInfo); DagNode* construct(Substitution& matcher); void replace(DagNode* old, Substitution& matcher); void addArgument(int index); void close(int destinationIndex); #ifdef DUMP void dump(ostream& s, const VariableInfo& variableInfo, int indentLevel); #endif private: void buildArguments(ArgVec& argArray, Substitution& matcher) const; AU_Symbol* const topSymbol; Vector arguments; int nrArguments; int destination; }; inline void AU_RhsAutomaton::addArgument(int index) { arguments.append(index); } inline void AU_RhsAutomaton::close(int destinationIndex) { destination = destinationIndex; nrArguments = arguments.size(); } #endif maude-3.1/src/AU_Theory/AU_UnificationSubproblem2.cc0000755000175200017520000004435513711173525017327 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2019 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class ACU_UnificationSubproblem2. // // utility stuff #include "macros.hh" #include "vector.hh" #include "indent.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "variable.hh" #include "AU_Persistent.hh" #include "AU_Theory.hh" // interface class definitions #include "argVec.hh" #include "associativeSymbol.hh" #include "dagNode.hh" #include "subproblem.hh" // core class definitions #include "variableInfo.hh" #include "unificationContext.hh" #include "localBinding.hh" // variable class definitions #include "variableSymbol.hh" #include "variableDagNode.hh" // AU theory class definitions #include "AU_Symbol.hh" #include "AU_DagNode.hh" #include "AU_UnificationSubproblem2.hh" #define FOR_EACH(var, conType, container) \ const conType::iterator var##_end = (container).end(); \ for (conType::iterator var = (container).begin(); var != var##_end; ++var) AU_UnificationSubproblem2::AU_UnificationSubproblem2(AU_Symbol* topSymbol) : topSymbol(topSymbol), preSolveSubstitution(0), savedSubstitution(0) { wordSystem = 0; } AU_UnificationSubproblem2::~AU_UnificationSubproblem2() { delete wordSystem; } void AU_UnificationSubproblem2::markReachableNodes() { // // Protect dags in preSolveSubstitution. // int nrFragile = preSolveSubstitution.nrFragileBindings(); for (int i = 0; i < nrFragile; i++) { DagNode* d = preSolveSubstitution.value(i); if (d != 0) d->mark(); } // // No need to mark savedSubstitution since its dags are a subset of those in // preSolveSubstitution; we get from preSolveSubstitution to savedSubstitution by // unsolving bindings. // } void AU_UnificationSubproblem2::addUnification(DagNode* lhs, DagNode* rhs, bool marked, UnificationContext& solution) { DebugEnter(lhs << " =? " << rhs << " marked = " << marked); Assert(lhs->symbol() == topSymbol, "bad lhs dag " << lhs); Assert(topSymbol->hasIdentity() || rhs->symbol() == topSymbol || dynamic_cast(rhs) != 0, "bad rhs for for non-collapse theory " << rhs); Assert(topSymbol->hasIdentity() || !marked, "bad mark for non-collapse theory"); // // Store unification problem as an abstract equation or assignment. // WordSystem::Word lhsAbstract; assocToAbstract(lhs, lhsAbstract, solution); if (rhs->symbol() == topSymbol) { WordSystem::Word rhsAbstract; assocToAbstract(rhs, rhsAbstract, solution); if (lhsAbstract.empty()) { if (rhsAbstract.empty()) ; // ignore unification else nullEquations.push_back(rhsAbstract); } else { if (rhsAbstract.empty()) nullEquations.push_back(lhsAbstract); else { unifications.push_back(Unification()); Unification& u = unifications.back(); u.lhs.swap(lhsAbstract); u.rhs.swap(rhsAbstract); } } } else { Term* identity = topSymbol->getIdentity(); int rhsIndex = (identity != 0 && identity->equal(rhs)) ? NONE : dagToAbstract(rhs, solution); if (lhsAbstract.empty()) { if (rhsIndex == NONE) ; // ignore unification of identity with identity else { // // We don't bother recording rhsIndex as marked because it's // going to be forced to identity, so the issue of it taking // more than one lhs subterm is moot. // WordSystem::Word rhsAbstract(1); rhsAbstract[0] = rhsIndex; nullEquations.push_back(rhsAbstract); } } else { if (rhsIndex == NONE) nullEquations.push_back(lhsAbstract); else { assignments.push_back(Assignment()); Assignment& a = assignments.back(); a.variable = rhsIndex; a.value.swap(lhsAbstract); if (marked) markedSubterms.insert(rhsIndex); } } } } int AU_UnificationSubproblem2::dagToAbstract(DagNode* dagNode, UnificationContext& solution) { // // First we replace a variable with its current representative. Really we should also // do this for variables within aliens as well. // // It is very tempting to replace variables by what they are bound to, but // this fails. If we have a binding X |-> f(...) then the f-theory has already // been solved. Thowing f(...) back into the mix means we will need to solve // it again, and if there is a cycle between two or more theories that are // doing eager replacement we won't terminate. Such cycles need to be handled // by the cycle breaking code after the solved form has been computed. // // Of course new f-theory terms could be exposed by delayering, resulting in // the f-theory being solved again, but because terms have finite depth this // can only happen a finite number of times. // if (VariableDagNode* varDagNode = dynamic_cast(dagNode)) { varDagNode = varDagNode->lastVariableInChain(solution); // // Normally we don't care about variables bound into our theory since they // will be unsolved as part of the A/AU unification procedure to ensure // termination. The exception is variables bound to our identity. // if (Term* identity = topSymbol->getIdentity()) { if (DagNode* subject = solution.value(varDagNode->getIndex())) { if (identity->equal(subject)) return NONE; // identity elements are just eliminated } } // // Otherwise we work with the representative variable. // dagNode = varDagNode; } // // Now look for dag in list of nominally abstracted dags. // int nrSubterms = subterms.size(); for (int i = 0; i < nrSubterms; ++i) { if (dagNode->equal(subterms[i])) return i; } // // Not found so make a new entry. // subterms.append(dagNode); return nrSubterms; } void AU_UnificationSubproblem2::assocToAbstract(DagNode* dagNode, WordSystem::Word& word, UnificationContext& solution) { AU_DagNode* a = safeCast(AU_DagNode*, dagNode); int nrArgs = a->argArray.length(); for (int i = 0; i < nrArgs; ++i) { int index = dagToAbstract(a->argArray[i], solution); if (index != NONE) word.append(index); } } void AU_UnificationSubproblem2::makeWordSystem(UnificationContext& solution) { int nrVariables = subterms.size(); int nrEquations = unifications.size(); // // If we have an identity and the sort structure is such that // it won't prevent fresh variables from taking identity or fail // solutions that include extra variables that could take identity // we can attempt to reduce the number of redundant unifiers found. // bool identityOptimizations = topSymbol->hasIdentity() && !(topSymbol->hasUnequalLeftIdentityCollapse()) && !(topSymbol->hasUnequalRightIdentityCollapse()); wordSystem = new WordSystem(nrVariables, nrEquations, identityOptimizations); // // Insert constraints for: // * variables with a sort derived upper-bound // * variables abstracting stable aliens // * variables bound to stable aliens // // The satisfaction of these constraints avoids some trivial // failures do to order-sorted considerations or theory // clashes that would otherwise be discovered later. // Term* identity = topSymbol->getIdentity(); for (int i = 0; i < nrVariables; ++i) { DagNode* dagNode = subterms[i]; //cout << "dealing with subterm " << dagNode << endl; if (VariableDagNode* varDagNode = dynamic_cast(dagNode)) { DagNode* value = solution.value(varDagNode->getIndex()); if (value != 0) { // // Variable is bound; see if it bound to a ground alien. // Symbol* symbol = value->symbol(); if (value->isGround()) { // FIXME: in one-side identity case, we could have the identity // itself as a ground alien; need to decide how we pass // uncanceled identity elements into WordSystem wordSystem->setTheoryConstraint(i, symbol->getIndexWithinModule()); continue; } // // Otherwise see if it bound to a stable alien. // if (symbol->isStable()) { wordSystem->setTheoryConstraint(i, symbol->getIndexWithinModule()); if (identity != 0 && symbol == identity->symbol()) { // // We are bound to a stable alien that has the same // top symbol as our identity. We need to check // the sort of the variable. // VariableSymbol* variableSymbol = safeCast(VariableSymbol*, varDagNode->symbol()); Sort* variableSort = variableSymbol->getSort(); if (topSymbol->takeIdentity(variableSort)) wordSystem->setTakeEmpty(i); } continue; } // fall into unbound variable case } // // See if the variable has an upper-bound on the number // of subterms under our symbol that it can take, derived // from its sort. The classic case is a variable of an // element sort that cannot take our symbol. // VariableSymbol* variableSymbol = safeCast(VariableSymbol*, varDagNode->symbol()); Sort* variableSort = variableSymbol->getSort(); if (markedSubterms.contains(i)) wordSystem->setUpperBound(i, 1); // must collapse to avoid nontermination else { int variableSortBound = topSymbol->sortBound(variableSort); if (variableSortBound != UNBOUNDED) wordSystem->setUpperBound(i, variableSortBound); } if (identity != 0 && topSymbol->takeIdentity(variableSort)) wordSystem->setTakeEmpty(i); } else { Symbol* symbol = dagNode->symbol(); if (dagNode->isGround()) { // FIXME: in one-side identity case, we could have the identity // itself as a ground alien; need to decide how we pass // uncanceled identity elements into WordSystem wordSystem->setTheoryConstraint(i, symbol->getIndexWithinModule()); continue; } if (symbol->isStable()) { wordSystem->setTheoryConstraint(i, symbol->getIndexWithinModule()); if (identity != 0 && symbol == identity->symbol()) { // // We are have a stable alien that has the same // top symbol as our identity. We must assume it could unify // with our identity. // wordSystem->setTakeEmpty(i); } continue; } // // Unstable alien; if we have an identity we must assume it could // unify with the identity. // if (markedSubterms.contains(i)) wordSystem->setUpperBound(i, 1); // must collapse to avoid nontermination if (identity != 0) wordSystem->setTakeEmpty(i); } } // // Insert null equations // { for (const Word& w : nullEquations) { wordSystem->addNullEquation(w); DebugInfo("added null equation for " << w); } } // // Insert abstract assignments. // { for (Assignment& a : assignments) { wordSystem->addAssignment(a.variable, a.value); DebugInfo("added assignment x" << a.variable << " |-> " << a.value); } } // // Insert abstract equations. // { int counter = 0; for (Unification& u : unifications) { wordSystem->addEquation(counter, u.lhs, u.rhs); ++counter; DebugInfo("added equation " << u.lhs << " =? " << u.rhs); } } } void AU_UnificationSubproblem2::unsolve(int index, UnificationContext& solution) { // // We take a solved form X |-> f(...), turn it into abstract assignment and // remove it from the current solution. // DagNode* variable = solution.getVariableDagNode(index); DagNode* value = solution.value(index); solution.bind(index, 0); Assert(variable != 0, "couldn't get variable for index " << index << " bound to " << value); DebugAdvisory("### unsolving " << variable << " <- " << value); assignments.push_back(Assignment()); Assignment& a = assignments.back(); a.variable = dagToAbstract(variable, solution); assocToAbstract(value, a.value, solution); } bool AU_UnificationSubproblem2::solve(bool findFirst, UnificationContext& solution, PendingUnificationStack& pending) { if (findFirst) { // // Save the current substitution // preSolveSubstitution.clone(solution); // // Unsolve any solved forms that are in our theory. This seemingly wasteful step // has to be done in order to avoid nontermination. // // The idea is that solved forms X = f(...) in our theory were created by us at some // earlier invocation and represent decisions made about the solution on the current // path. They must therefore be considered simultaneously with current unification // subproblems otherwise we might generate an additional binding for X which is // then resolved by creating yet another f-theory subproblem. // int nrFragile = solution.nrFragileBindings(); for (int i = 0; i < nrFragile; ++i) { DagNode* value = solution.value(i); if (value != 0 && value->symbol() == topSymbol) unsolve(i, solution); } // // Make an abstract system of word equations. // makeWordSystem(solution); // // Save state of the pending stack with the substitution so that // we can restore both in order to undo each of our solutions. // savedSubstitution.clone(solution); savedPendingState = pending.checkPoint(); } else { // // Restore pending stack and current substitution, implicitly deallocating // any fresh variables we introduced. // pending.restore(savedPendingState); solution.restoreFromClone(savedSubstitution); } for (;;) { int result = wordSystem->findNextSolution(); if (result & WordSystem::INCOMPLETE) pending.flagAsIncomplete(topSymbol); if (!(result & WordSystem::SUCCESS)) break; if (buildSolution(solution, pending)) return true; // // Restore pending stack and current substitution, implicitly deallocating // any fresh variables we introduced. // pending.restore(savedPendingState); solution.restoreFromClone(savedSubstitution); } // // No more solutions; restore any solved forms that we unsolved. // solution.restoreFromClone(preSolveSubstitution); return false; } DagNode* AU_UnificationSubproblem2::abstractToFreshVariable(int variableIndex, UnificationContext& solution) { DagNode*& d = freshVariables[variableIndex]; if (d == 0) d = solution.makeFreshVariable(topSymbol->rangeComponent()); return d; } bool AU_UnificationSubproblem2::buildSolution(UnificationContext& solution, PendingUnificationStack& pending) { // // Not all fresh variables created by the word system need appear in the final solution; some // may have been eliminated by being assigned to. So we created Maude fresh variables // for them on demand. // int nrFreshVariables = wordSystem->getNrVariables(); freshVariables.resize(nrFreshVariables); for (int i = 0; i < nrFreshVariables; ++i) freshVariables[i] = 0; NatSet reusedVariables; int nrVariables = subterms.size(); #define REUSE_VARIABLES #ifdef REUSE_VARIABLES for (int i = 0; i < nrVariables; ++i) { // // Look for abstracted variables whose abstract variable is assigned // exactly one thing. The abstracted variable can be used in place // of the fresh variable we would otherwise create for the abstract // variable. // const WordSystem::Word& value = wordSystem->getAssignment(i); if (value.size() == 1) { if (VariableDagNode* v = dynamic_cast(subterms[i])) { int abstractVariable = value[0]; if (freshVariables[abstractVariable] == 0) { freshVariables[abstractVariable] = v; reusedVariables.insert(i); DebugInfo("using original variable index " << i << ", " << subterms[i] << " instead of a fresh variable for abstract variable " << abstractVariable); } } } } #endif // // We then go through each original variable and unify its subterm against the associative // term with fresh variable arguments corresponding to the word system solution. // for (int i = 0; i < nrVariables; ++i) { if (reusedVariables.contains(i)) continue; // no point unifying a variable with itself bool inTheory = true; // // Convert abstract assignment to Maude dag. // DagNode* d; const WordSystem::Word& value = wordSystem->getAssignment(i); int nrArgs = value.size(); if (nrArgs == 0) d = topSymbol->getIdentityDag(); else if (nrArgs == 1) { d = abstractToFreshVariable(value[0], solution); inTheory = false; // we are assigning an alien term } else { AU_DagNode* a = new AU_DagNode(topSymbol, nrArgs); for (int j = 0; j < nrArgs; ++j) a->argArray[j] = abstractToFreshVariable(value[j], solution); d = a; } DagNode* subterm = subterms[i]; if (VariableDagNode* varSubterm = dynamic_cast(subterm)) { // // We need to handle unbound variable subterms that we unify with something in our // theory ourself to avoid generating another problem in our theory. // // It is possible that other unifications generated by earlier iterations of this // loop merged another variable with our varSubterm so that it is no longer at the // end of its chain. // VariableDagNode* repVar = varSubterm->lastVariableInChain(solution); if (solution.value(repVar->getIndex()) == 0 && inTheory) { solution.unificationBind(repVar, d); continue; } } // // Now unify with abstracted subterm. // DebugInfo("unifying " << subterm << " =? " << d); if (!(subterm->computeSolvedForm(d, solution, pending))) return false; } return true; } maude-3.1/src/AU_Theory/AU_DequeDagArgumentIterator.hh0000644000175200017520000000265513576050635017647 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for argument iterator for AU deque dag nodes. // #ifndef _AU_DequeDagArgumentIterator_hh_ #define _AU_DequeDagArgumentIterator_hh_ #include "rawDagArgumentIterator.hh" #include "AU_DequeIter.hh" class AU_DequeDagArgumentIterator : public RawDagArgumentIterator { NO_COPYING(AU_DequeDagArgumentIterator); public: AU_DequeDagArgumentIterator(const AU_Deque& deque); bool valid() const; DagNode* argument() const; void next(); private: AU_DequeIter iter; }; inline AU_DequeDagArgumentIterator::AU_DequeDagArgumentIterator(const AU_Deque& deque) : iter(deque) { } #endif maude-3.1/src/AU_Theory/AU_DagNode.hh0000755000175200017520000001163313576050635014253 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for DAG nodes in the A, AUl, AUr and AU theories. // #ifndef _AU_DagNode_hh_ #define _AU_DagNode_hh_ #include "AU_BaseDagNode.hh" #include "argVec.hh" class AU_DagNode : public AU_BaseDagNode { NO_COPYING(AU_DagNode); public: AU_DagNode(AU_Symbol* symbol, int size); // // Functions required by theory interface. // RawDagArgumentIterator* arguments(); size_t getHashValue(); int compareArguments(const DagNode* other) const; void overwriteWithClone(DagNode* old); DagNode* makeClone(); DagNode* copyWithReplacement(int argIndex, DagNode* replacement); DagNode* copyWithReplacement(Vector& redexStack, int first, int last); // // Functions required to handle extension information. // bool matchVariableWithExtension(int index, const Sort* sort, Substitution& solution, Subproblem*& returnedSubproblem, ExtensionInfo* extensionInfo); void partialReplace(DagNode* replacement, ExtensionInfo* extensionInfo); DagNode* partialConstruct(DagNode* replacement, ExtensionInfo* extensionInfo); ExtensionInfo* makeExtensionInfo(); // // Although we currently don't support unification or narrowing in AU nodes // we still need some functionality from the unification and narrowing interfaces // to allow narrowing to happen below us or in a sibling branch. // // Unification member functions. // DagNode* instantiate2(const Substitution& substitution); // // Supported for A only. // ReturnResult computeBaseSortForGroundSubterms(bool warnAboutUnimplemented); bool computeSolvedForm2(DagNode* rhs, UnificationContext& solution, PendingUnificationStack& pending); void insertVariables2(NatSet& occurs); // // Interface for narrowing. // bool indexVariables2(NarrowingVariableInfo& indices, int baseIndex); DagNode* instantiateWithReplacement(const Substitution& substitution, const Vector* eagerCopies, int argIndex, DagNode* newDag); DagNode* instantiateWithCopies2(const Substitution& substitution, const Vector& eagerCopies); // // Functions particular to AU_DagNode. // void setProducedByAssignment(); private: enum NormalizationResult { COLLAPSED, DEQUED, NORMAL, FLATTENED }; // // Functions required by theory interface. // DagNode* markArguments(); DagNode* copyEagerUptoReduced2(); DagNode* copyAll2(); void clearCopyPointers2(); // // Functions particular to AU_DagNode. // bool disappear(AU_Symbol* s, ArgVec::const_iterator i); NormalizationResult normalizeAtTop(bool dumb = false); bool eliminateForward(DagNode* target, int& pos, int limit) const; bool eliminateBackward(DagNode* target, int& pos, int limit) const; DagNode* makeFragment(int start, int nrSubterms, bool extraId) const; ArgVec argArray; friend class AU_Symbol; // to reduce subterms prior to rewriting friend class AU_Term; // for term->DAG conversion & comparison friend class AU_LhsAutomaton; // for matching DAG subject friend class AU_RhsAutomaton; // for constructing replacement DAG friend class AU_Layer; // for constructing substitution friend class AU_Subproblem; // for constructing substitution friend class AU_ExtensionInfo; // for constructing matched portion friend class AU_DequeDagNode; // for conversion & comparison friend class AU_UnificationSubproblem; friend class AU_UnificationSubproblem2; }; AU_DagNode* getAU_DagNode(DagNode* dagNode); inline AU_DagNode::AU_DagNode(AU_Symbol* symbol, int size) : AU_BaseDagNode(symbol), argArray(size) { setNormalizationStatus(FRESH); } inline void AU_DagNode::setProducedByAssignment() { setNormalizationStatus(ASSIGNMENT); #ifndef NO_ASSERT // // Look for Riesco 1/18/10 bug. // for (int i = 0; i < argArray.length(); ++i) { DagNode* d = argArray[i]; Assert(d->getSortIndex() != Sort::SORT_UNKNOWN, "AU_DagNode::setProducedByAssignment(): unknown sort for AU argument " << d << " at index " << i << " in subject " << this); } #endif } #endif maude-3.1/src/AU_Theory/AU_Matcher.cc0000644000175200017520000003370613576050735014326 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for common parts of A/AU matcher. // bool AU_LhsAutomaton::match(DagNode* subject, Substitution& solution, Subproblem*& returnedSubproblem, ExtensionInfo* extensionInfo) { if (subject->symbol() != topSymbol) { if (collapsePossible) return collapseMatch(subject, solution, returnedSubproblem, extensionInfo); return false; } Assert(matchAtTop == (extensionInfo != 0), "matchAtTop disagreement"); if (safeCast(AU_BaseDagNode*, subject)->isDeque()) { AU_DequeDagNode* t = safeCast(AU_DequeDagNode*, subject); if (matchStrategy == LONE_VARIABLE || matchStrategy == FAST_LONE_VARIABLE) { int r = dequeMatch(t, solution, returnedSubproblem); if (r == true || r == false) return r; } (void) AU_DequeDagNode::dequeToArgVec(t); } AU_DagNode* s = safeCast(AU_DagNode*, subject); int nrArgs = s->argArray.length(); if (nrArgs < wholeLowerBound || nrArgs > wholeUpperBound) return false; leftPos = 0; rightPos = nrArgs - 1; flexLeftPos = 0; flexRightPos = flexPart.length() - 1; SubproblemAccumulator subproblems; AU_ExtensionInfo* e = safeCast(AU_ExtensionInfo*, extensionInfo); if (e == 0) { if (!matchRigidPart(s, solution, subproblems) || (flexPart.length() != 0 && !checkForRigidEnds(s, solution, subproblems))) return false; int flexRemaining = flexRightPos - flexLeftPos + 1; if (flexRemaining == 0) { DebugAdvisoryCheck(matchStrategy == GROUND_OUT, "match strategy changed from " << matchStrategy << " to GROUND_OUT at match time (top symbol = \"" << topSymbol << "\")"); if (rightPos - leftPos + 1 != 0) return false; goto success; } if (flexRemaining == 1 && !(topSymbol->oneSidedId())) { DebugAdvisoryCheck(matchStrategy == LONE_VARIABLE || matchStrategy == FAST_LONE_VARIABLE, "match strategy changed from " << matchStrategy << " to LONE_VARIABLE at match time (top symbol = \"" << topSymbol << "\")"); Subproblem* sp; if (!forcedLoneVariableCase(s, solution, sp)) return false; subproblems.add(sp); goto success; } } Assert(matchStrategy != GROUND_OUT && matchStrategy != LONE_VARIABLE && matchStrategy != FAST_LONE_VARIABLE, "bad strategy"); determineRigidBlocks(solution); if (matchStrategy == GREEDY) { int r = greedyMatch(s, solution, e); if (r == false) return false; if (r == true) goto success; } if (!fullMatch(s, solution, subproblems, e)) return false; success: returnedSubproblem = subproblems.extractSubproblem(); return true; } bool AU_LhsAutomaton::matchRigidPart(AU_DagNode* subject, Substitution& solution, SubproblemAccumulator& subproblems) { ArgVec& args = subject->argArray; FOR_EACH_CONST(i, Vector, rigidPart) { switch (i->type) { case VARIABLE: { const TopVariable& tv = i->variable; DagNode* b = solution.value(tv.index); if (b != 0) { // // Bound variable case. // if (i->leftEnd) { if (!(subject->eliminateForward(b, leftPos, rightPos - flexLowerBound))) return false; } else { if (!(subject->eliminateBackward(b, rightPos, leftPos + flexLowerBound))) return false; } } else { // // Unbound non-identity unit variable case. // Assert(tv.upperBound == 1, "unbound non-unit variable in rigid part"); Assert(!(tv.takeIdentity), "unbound variable which can take identity in rigid part"); if (rightPos - leftPos < flexLowerBound) return false; DagNode* d = args[i->leftEnd ? leftPos++ : rightPos--]; if (!(d->leq(tv.sort))) return false; solution.bind(tv.index, d); } break; } case GROUND_ALIEN: { if (rightPos - leftPos < flexLowerBound || !(i->groundAlien->equal(args[i->leftEnd ? leftPos++ : rightPos--]))) return false; break; } case NON_GROUND_ALIEN: { Subproblem* sp; if (rightPos - leftPos < flexLowerBound || !(i->alienAutomaton-> match(args[i->leftEnd ? leftPos++ : rightPos--], solution, sp))) return false; subproblems.add(sp); break; } } } return rightPos - leftPos + 1 <= flexUpperBound; } bool AU_LhsAutomaton::checkForRigidEnds(AU_DagNode* subject, Substitution& solution, SubproblemAccumulator& subproblems) { int mustLeave = flexLowerBound; bool leftStalled = false; bool rightStalled = false; for(;;) { switch(checkLeftEnd(subject, solution, subproblems, mustLeave, rightStalled)) { case false: return false; case true: { if (flexLeftPos++ == flexRightPos) return true; break; } case STALLED: { if (rightStalled) return true; leftStalled = true; break; } } switch(checkRightEnd(subject, solution, subproblems, mustLeave, leftStalled)) { case false: return false; case true: { if (flexLeftPos == flexRightPos--) return true; break; } case STALLED: { if (leftStalled) return true; rightStalled = true; break; } } } } int AU_LhsAutomaton::checkLeftEnd(AU_DagNode* subject, Substitution& solution, SubproblemAccumulator& subproblems, int& mustLeave, bool& rightStalled) { Subterm& f = flexPart[flexLeftPos]; switch (f.type) { case VARIABLE: { TopVariable& tv = f.variable; DagNode* b = solution.value(tv.index); if (b != 0) { if (!tv.takeIdentity) --mustLeave; return subject->eliminateForward(b, leftPos, rightPos - mustLeave); } else if (tv.upperBound == 1 && !(tv.takeIdentity)) { if (rightPos - leftPos < --mustLeave) return false; DagNode* d = subject->argArray[leftPos++]; if (!(d->leq(tv.sort))) return false; solution.bind(tv.index, d); break; } return STALLED; } case GROUND_ALIEN: { return rightPos - leftPos >= --mustLeave && f.groundAlien->equal(subject->argArray[leftPos++]); } case NON_GROUND_ALIEN: { Subproblem* sp; if (rightPos - leftPos < --mustLeave || !(f.alienAutomaton->match(subject->argArray[leftPos++], solution, sp))) return false; subproblems.add(sp); rightStalled = false; // we may have bound variable stalling right end break; } } return true; } int AU_LhsAutomaton::checkRightEnd(AU_DagNode* subject, Substitution& solution, SubproblemAccumulator& subproblems, int& mustLeave, bool& leftStalled) { Subterm& f = flexPart[flexRightPos]; switch (f.type) { case VARIABLE: { TopVariable& tv = f.variable; DagNode* b = solution.value(tv.index); if (b != 0) { if (!tv.takeIdentity) --mustLeave; return subject->eliminateBackward(b, rightPos, leftPos + mustLeave); } else if (tv.upperBound == 1 && !(tv.takeIdentity)) { if (rightPos - leftPos < --mustLeave) return false; DagNode* d = subject->argArray[rightPos--]; if (!(d->leq(tv.sort))) return false; solution.bind(tv.index, d); break; } return STALLED; } case GROUND_ALIEN: { return rightPos - leftPos >= --mustLeave && f.groundAlien->equal(subject->argArray[rightPos--]); } case NON_GROUND_ALIEN: { Subproblem* sp; if (rightPos - leftPos < --mustLeave || !(f.alienAutomaton->match(subject->argArray[rightPos--], solution, sp))) return false; leftStalled = false; // we may have bound variable stalling left end subproblems.add(sp); break; } } return true; } bool AU_LhsAutomaton::forcedLoneVariableCase(AU_DagNode* subject, Substitution& solution, Subproblem*& returnedSubproblem) { Assert(flexPart[flexLeftPos].type == VARIABLE, "lone variable is not a variable"); returnedSubproblem = 0; ArgVec& args = subject->argArray; int nrSubjectsRemaining = rightPos - leftPos + 1; TopVariable& loneVariable = flexPart[flexLeftPos].variable; Assert(solution.value(loneVariable.index) == 0, "lone variable bound"); if (nrSubjectsRemaining == 0) { if (!(loneVariable.takeIdentity)) return false; DagNode* d = topSymbol->getIdentityDag(); solution.bind(loneVariable.index, d); return (loneVariable.abstracted == 0) ? true : loneVariable.abstracted->match(d, solution, returnedSubproblem); } else if (nrSubjectsRemaining == 1) { DagNode* d = args[leftPos]; solution.bind(loneVariable.index, d); // presuming we succeed return (loneVariable.abstracted == 0) ? (d->leq(loneVariable.sort)) : loneVariable.abstracted->match(d, solution, returnedSubproblem); } else if (matchStrategy != FAST_LONE_VARIABLE) { // // General lone variable case. // // We construct the binding for the lone variable and then // check its sort, possibly creating a sort check subproblem. // AU_DagNode* d = new AU_DagNode(topSymbol, nrSubjectsRemaining); int pos = 0; for (int i = leftPos; i <= rightPos; i++) d->argArray[pos++] = args[i]; Assert(pos == nrSubjectsRemaining, "inconsistant number of subterms"); solution.bind(loneVariable.index, d); if (loneVariable.abstracted != 0) return loneVariable.abstracted->match(d, solution, returnedSubproblem); if (d->checkSort(loneVariable.sort, returnedSubproblem)) { d->setProducedByAssignment(); if (subject->isReduced() && d->getSortIndex() != Sort::SORT_UNKNOWN) d->setReduced(); return true; } } else { // // Fast lone variable case. // // We know the sort of binding will <= that of that lone // variable, iff each of the subterm sorts are <= that // of the lone variable, so we only need look at the sorts // of the subterms. // AU_DagNode* d = new AU_DagNode(topSymbol, nrSubjectsRemaining); int lastIndex = Sort::SORT_UNKNOWN; const Sort* cs = loneVariable.sort; ArgVec::iterator j = d->argArray.begin(); const ArgVec::const_iterator e = args.begin() + rightPos + 1; for (ArgVec::const_iterator i = args.begin() + leftPos; i != e; ++i, ++j) { DagNode* sd = *i; int index = sd->getSortIndex(); Assert(index != Sort::SORT_UNKNOWN, "bad sort"); if (index != lastIndex) { if (!(leq(index, cs))) return false; lastIndex = index; } *j = sd; } Assert(j == d->argArray.end(), "iterator problem"); d->setProducedByAssignment(); if (subject->isReduced() && topSymbol->sortConstraintFree()) { topSymbol->computeBaseSort(d); d->setReduced(); } solution.bind(loneVariable.index, d); return true; } return false; } void AU_LhsAutomaton::determineRigidBlocks(Substitution& solution) { RigidBlock r; r.start = NONE; r.nrSubjectsForUs = 0; r.nrSubjectsToLeave = 0; r.firstMatch = NONE; // to avoid compiler warning rigidBlocks.clear(); nrSubjectsUsed = 0; int lastFlexPart = flexPart.length() - 1; int skip; for (int i = flexLeftPos; i <= flexRightPos; i += skip) { Subterm& f = flexPart[i]; skip = f.blockLength; if (skip == NOT_FIXED) { skip = 1; f.variable.nastyBinding = NONE; DagNode* d = solution.value(f.variable.index); if (d == 0) { // // Unbound variable terminates current rigid block (if there is one). // We treat variables with nasty bindings as being unbound // since we can't be sure how many subjects they will match. // if (r.start != NONE) { r.end = i - 1; rigidBlocks.append(r); r.start = NONE; r.nrSubjectsForUs = 0; r.nrSubjectsToLeave = 0; } if (!(f.variable.takeIdentity)) { ++r.nrSubjectsToLeave; // for this unbound variable ++nrSubjectsUsed; } } else { bool nasty; int n = topSymbol-> calculateNrSubjectsMatched(d, i == 0, i == lastFlexPart, nasty); nrSubjectsUsed += n; if (nasty) { DebugAdvisoryCheck(false, "nasty binding of " << d << " to variable with index " << f.variable.index << " detected in match phase"); Assert(matchAtTop, "can't have nasty binding without extension"); // // Unbound variable terminates current rigid block (if there is one). // We treat variables with nasty bindings as being unbound // since we can't be sure how many subjects they will match. // if (r.start != NONE) { r.end = i - 1; rigidBlocks.append(r); r.start = NONE; r.nrSubjectsForUs = 0; r.nrSubjectsToLeave = 0; } r.nrSubjectsToLeave += n; f.variable.nastyBinding = n; } else { r.nrSubjectsForUs += n; if (r.start == NONE) r.start = i; } } } else { r.nrSubjectsForUs += skip; nrSubjectsUsed += skip; if (r.start == NONE) r.start = i; } } // // End of flex part terminates current rigid block (if there is one). // if (r.start != NONE) { Assert(matchAtTop, "missing extension"); r.end = flexRightPos; rigidBlocks.append(r); nrSubjectsForRightVars = 0; } else nrSubjectsForRightVars = r.nrSubjectsToLeave; } maude-3.1/src/AU_Theory/AU_DagArgumentIterator.cc0000644000175200017520000000277013576050735016650 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class AU_DagArgumentIterator. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "AU_Theory.hh" // A theory class definitions #include "AU_Symbol.hh" #include "AU_DagNode.hh" #include "AU_DagArgumentIterator.hh" bool AU_DagArgumentIterator::valid() const { return position < argArray.length(); } DagNode* AU_DagArgumentIterator::argument() const { Assert(position < argArray.length(), "no args left"); return argArray[position]; } void AU_DagArgumentIterator::next() { Assert(position < argArray.length(), "no args left"); ++position; } maude-3.1/src/AU_Theory/AU_DagArgumentIterator.hh0000644000175200017520000000262113576050635016654 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for argument iterator for AU dag nodes. // #ifndef _AU_DagArgumentIterator_hh_ #define _AU_DagArgumentIterator_hh_ #include "rawDagArgumentIterator.hh" class AU_DagArgumentIterator : public RawDagArgumentIterator { public: AU_DagArgumentIterator(const ArgVec& arguments); bool valid() const; DagNode* argument() const; void next(); private: const ArgVec& argArray; int position; }; inline AU_DagArgumentIterator::AU_DagArgumentIterator(const ArgVec& arguments) : argArray(arguments) { position = 0; } #endif maude-3.1/src/AU_Theory/AU_DequeDagNode.cc0000644000175200017520000001144413576050735015223 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class AU_DequeDagNode. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "AU_Persistent.hh" #include "AU_Theory.hh" // interface class definitions #include "term.hh" // AU persistent class definitions #include "AU_DequeIter.hh" // AU theory class definitions #include "AU_Symbol.hh" #include "AU_DagNode.hh" #include "AU_DequeDagNode.hh" #include "AU_DequeDagArgumentIterator.hh" #include "AU_ExtensionInfo.hh" RawDagArgumentIterator* AU_DequeDagNode::arguments() { return new AU_DequeDagArgumentIterator(deque); } size_t AU_DequeDagNode::getHashValue() { size_t hashValue = symbol()->getHashValue(); for (AU_DequeIter i(deque); i.valid(); i.next()) hashValue = hash(hashValue, i.getDagNode()->getHashValue()); return hashValue; } int AU_DequeDagNode::compareArguments(const DagNode* other) const { if (safeCast(const AU_BaseDagNode*, other)->isDeque()) { const AU_DequeDagNode* d2 = safeCast(const AU_DequeDagNode*, other); int r = deque.length() - d2->deque.length(); if (r != 0) return r; AU_DequeIter i(deque); AU_DequeIter j(d2->deque); do { int r = (i.getDagNode())->compare(j.getDagNode()); if (r != 0) return r; i.next(); j.next(); } while (i.valid()); Assert(!j.valid(), "iterator problem"); } else { const ArgVec& argArray2 = safeCast(const AU_DagNode*, other)->argArray; int r = deque.length() - argArray2.length(); if (r != 0) return r; AU_DequeIter i(deque); ArgVec::const_iterator j = argArray2.begin(); do { int r = (i.getDagNode())->compare(*j); if (r != 0) return r; i.next(); ++j; } while (i.valid()); Assert(j == argArray2.end(), "iterator problem"); } return 0; } DagNode* AU_DequeDagNode::markArguments() { deque.mark(); return 0; } DagNode* AU_DequeDagNode::copyEagerUptoReduced2() { // // Don't both trying to preserve deque in the case of // a lazy operator, since we cannot do greedy matching with // extension we will be forced to ArgVec representation when // we try to reduce at this node. // return dequeToArgVec(this)->copyEagerUptoReduced2(); } DagNode* AU_DequeDagNode::copyAll2() { return dequeToArgVec(this)->copyAll2(); } void AU_DequeDagNode::clearCopyPointers2() { CantHappen("Should not be copying on AU_DequeDagNode"); } void AU_DequeDagNode::overwriteWithClone(DagNode* old) { AU_DequeDagNode* d = new(old) AU_DequeDagNode(symbol(), deque); d->copySetRewritingFlags(this); d->setSortIndex(getSortIndex()); } DagNode* AU_DequeDagNode::makeClone() { AU_DequeDagNode* d = new AU_DequeDagNode(symbol(), deque); d->copySetRewritingFlags(this); d->setSortIndex(getSortIndex()); return d; } DagNode* AU_DequeDagNode::copyWithReplacement(int argIndex, DagNode* replacement) { return dequeToArgVec(this)->copyWithReplacement(argIndex, replacement); // HACK } DagNode* AU_DequeDagNode::copyWithReplacement(Vector& redexStack, int first, int last) { return dequeToArgVec(this)->copyWithReplacement(redexStack, first, last); } ExtensionInfo* AU_DequeDagNode::makeExtensionInfo() { return new AU_ExtensionInfo(dequeToArgVec(this)); } AU_DagNode* AU_DequeDagNode::dequeToArgVec(AU_DequeDagNode* original) { AU_Symbol* s = original->symbol(); AU_Deque c = original->deque; // deep copy int sortIndex = original->getSortIndex(); bool redFlag = original->isReduced(); AU_DagNode* d = new(original) AU_DagNode(s, c.length()); c.copyToArgVec(d->argArray); d->setSortIndex(sortIndex); if (redFlag) d->setReduced(); return d; } // // Narrowing code. // bool AU_DequeDagNode::indexVariables2(NarrowingVariableInfo& indices, int baseIndex) { // // Just revert to argvec ACU representation and use its code. // return dequeToArgVec(this)->indexVariables2(indices, baseIndex); } maude-3.1/src/AU_Theory/AU_DequeMatcher.cc0000644000175200017520000001124013576050735015277 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for A/AU matcher that works on deques. // int AU_LhsAutomaton::dequeMatch(AU_DequeDagNode* subject, Substitution& solution, Subproblem*& returnedSubproblem) { // // We only handle lone variable case. // Assert(flexPart.length() == 1, "bad flex part length " << flexPart.length()); Assert(flexPart[0].type == VARIABLE, "flex part not a variable"); // // First match rigid part. // AU_Deque remainder(subject->getDeque()); int nrArgs = remainder.length(); if (nrArgs < wholeLowerBound || nrArgs > wholeUpperBound) return false; SubproblemAccumulator subproblems; Term* identity = topSymbol->getIdentity(); FOR_EACH_CONST(i, Vector, rigidPart) { switch (i->type) { case VARIABLE: { const TopVariable& tv = i->variable; DagNode* b = solution.value(tv.index); if (b != 0) { // // Bound variable case. // if (b->symbol() == topSymbol) return UNDECIDED; if (identity == 0 || !(identity->equal(b))) { if (tv.takeIdentity) { // // Need to redo bounds check as something that // might have taken identity used up an argument. // --nrArgs; if (nrArgs < wholeLowerBound) return false; } if (i->leftEnd) { if (b->equal(remainder.topLeft())) remainder.popLeft(); else return false; } else { if (b->equal(remainder.topRight())) remainder.popRight(); else return false; } } } else { // // Unbound non-identity unit variable case. // Assert(tv.upperBound == 1, "unbound non-unit variable in rigid part"); Assert(!(tv.takeIdentity), "unbound variable which can take identity in rigid part"); DagNode* d; if (i->leftEnd) { d = remainder.topLeft(); if (!(d->leq(tv.sort))) return false; remainder.popLeft(); } else { d = remainder.topRight(); if (!(d->leq(tv.sort))) return false; remainder.popRight(); } solution.bind(tv.index, d); } break; } case GROUND_ALIEN: { if (i->leftEnd) { if (i->groundAlien->equal(remainder.topLeft())) remainder.popLeft(); else return false; } else { if (i->groundAlien->equal(remainder.topRight())) remainder.popRight(); else return false; } break; } case NON_GROUND_ALIEN: { Subproblem* sp; if (i->leftEnd) { if (i->alienAutomaton->match(remainder.topLeft(), solution, sp)) remainder.popLeft(); else return false; } else { if (i->alienAutomaton->match(remainder.topRight(), solution, sp)) remainder.popRight(); else return false; } subproblems.add(sp); break; } } } // // Now deal with flex part. // Assert(remainder.length() >= flexLowerBound, "lower bound problem"); if (remainder.length() > flexUpperBound) return false; DagNode* d; switch (remainder.length()) { case 0: { Assert(identity != 0, "no identity"); d = topSymbol->getIdentityDag(); break; } case 1: { d = remainder.topLeft(); break; } default: { d = new AU_DequeDagNode(topSymbol, remainder); break; } } TopVariable& tv = flexPart[0].variable; DagNode* b = solution.value(tv.index); if (b == 0) { Subproblem* sp; if (tv.abstracted != 0) { if (!(tv.abstracted->match(d, solution, sp))) return false; } else { if (!(d->checkSort(tv.sort, sp))) return false; if (subject->isReduced() && d->getSortIndex() != Sort::SORT_UNKNOWN) d->setReduced(); solution.bind(tv.index, d); } subproblems.add(sp); } else { if (!(b->equal(d))) return false; } returnedSubproblem = subproblems.extractSubproblem(); return true; } maude-3.1/src/AU_Theory/AU_Layer.hh0000644000175200017520000000633713576050635014030 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for a layer of nodes in an AU_Subproblem. // #ifndef _AU_Layer_hh_ #define _AU_Layer_hh_ #include "sequencePartition.hh" class AU_Layer { public: AU_Layer(); ~AU_Layer(); void initialize(AU_DagNode* subjectDag); void initializeFirst(int first, AU_ExtensionInfo* extension); void initializeLast(int last, AU_ExtensionInfo* extension); void addTopVariable(int index, int lowerBound, int upperBound, Sort* sort); void addNode(LocalBinding* difference, Subproblem* subproblem, int firstSubterm, int lastSubterm); void link(AU_Layer& nextLayer); void reset(); bool solvePatterns(bool findFirst, RewritingContext& solution, AU_Layer& nextLayer); bool solveVariables(bool findFirst, RewritingContext& solution); private: struct TopVariable { int index; int lowerBound; int upperBound; Sort* sort; // // For solve-time use // Bool boundByUs; Bool extraId; }; struct Node { LocalBinding* difference; Subproblem* subproblem; int firstSubterm; int lastSubterm; int downTarget; }; bool solvePatterns2(bool findFirst, RewritingContext& solution); SequencePartition* buildPartition(const Substitution& solution); bool solvePartition(bool findFirst); bool bindVariables(RewritingContext& solution); void unbindVariables(RewritingContext& solution); const AU_DagNode* subject; int lastSubjectSubterm; // index of last subterm in subject Bool oneSidedId; // true if subject has a one sided identity Bool leftId; // true if subject has left identity only Bool leftExtend; // have left extension before variable block Bool rightExtend; // have right extension after variable block int totalLowerBound; // sum of lowerBounds for prevVariables int totalUpperBound; // sum of upperBounds for prevVariables + extension AU_ExtensionInfo* extensionInfo; // for layers with leftExtend/rightExtend only Vector prevVariables; // variable block before rigid block Vector nodes; // nodes for a rigid blocks possible matchings // // For solve-time use // int selectedNode; // currently selected node int firstSubterm; // first subject subterm for variables int lastSubterm; // last subject subterm for variables SequencePartition* partition; // partitioning of subterms amongst variables }; inline void AU_Layer::reset() { selectedNode = 0; } #endif maude-3.1/src/AU_Theory/AU_Term.hh0000644000175200017520000000725613576050635013664 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for terms in the A, AUl, AUr and AU theories. // #ifndef _AU_Term_hh_ #define _AU_Term_hh_ #include "term.hh" #include "variable.hh" #include "AU_Symbol.hh" class AU_Term : public Term { NO_COPYING(AU_Term); public: AU_Term(AU_Symbol* symbol, const Vector& arguments); // // Functions required by theory interface. // RawArgumentIterator* arguments(); void deepSelfDestruct(); Term* deepCopy2(SymbolMap* translator) const; Term* normalize(bool full, bool& changed); int compareArguments(const Term* other) const; int compareArguments(const DagNode* other) const; void findEagerVariables(bool atTop, NatSet& eagerVariables) const; void analyseConstraintPropagation(NatSet& boundUniquely) const; void analyseCollapses2(); void insertAbstractionVariables(VariableInfo& variableInfo); LhsAutomaton* compileLhs2(bool matchAtTop, const VariableInfo& variableInfo, NatSet& boundUniquely, bool& subproblemLikely); void markEagerArguments(int nrVariables, const NatSet& eagerVariables, Vector& problemVariables); DagNode* dagify2(); void findAvailableTerms(TermBag& availableTerms, bool eagerContext, bool atTop); int compileRhs2(RhsBuilder& rhsBuilder, VariableInfo& variableInfo, TermBag& availableTerms, bool eagerContext); #ifdef DUMP void dump(ostream& s, const VariableInfo& variableInfo, int indentLevel); #endif // // Functions particular to AU_Term. // AU_Symbol* symbol() const; bool idPossible(int index) const; private: struct Tuple { Term* term; short abstractionVariableIndex; // if subterm could enter our theory // we abstract it Bool collapseToOurSymbol; // 1st possible reason for variable abstraction Bool matchOurIdentity; // 2nd possible reason for variable abstraction }; struct CP_Sequence; AU_Term(const AU_Term& original, AU_Symbol* symbol, SymbolMap* translator); bool unitVariable(VariableTerm* vt, int index) const; void findConstraintPropagationSequence(const NatSet& boundUniquely, CP_Sequence& bestSequence) const; void findConstraintPropagationSequence(const Vector& currentSequence, const NatSet& boundUniquely, int leftPos, int rightPos, CP_Sequence& bestSequence) const; void addFixedLengthBlock(AU_LhsAutomaton* a, int blockStart, int blockEnd, const VariableInfo& variableInfo, const NatSet& boundUniquely, bool& subproblemLikely); Vector argArray; int uniqueCollapseSubtermIndex; friend class AU_ArgumentIterator; }; inline AU_Symbol* AU_Term::symbol() const { return safeCast(AU_Symbol*, Term::symbol()); } inline bool AU_Term::idPossible(int index) const { return (index > 0 && symbol()->rightId()) || (index < argArray.length() - 1 && symbol()->leftId()); } #endif maude-3.1/src/AU_Theory/AU_Symbol.hh0000644000175200017520000000751313674517522014220 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for symbols belonging to the A, AUl, AUr and AU theories. // #ifndef _AU_Symbol_hh_ #define _AU_Symbol_hh_ #include "associativeSymbol.hh" class AU_Symbol : public AssociativeSymbol { public: AU_Symbol(int id, const Vector& strategy, bool memoFlag, bool leftId = false, bool rightId = false, Term* identity = 0); // // Member functions required by theory interface. // Term* makeTerm(const Vector& args); DagNode* makeDagNode(const Vector& args); void computeBaseSort(DagNode* subject); void normalizeAndComputeTrueSort(DagNode* subject, RewritingContext& context); bool eqRewrite(DagNode* subject, RewritingContext& context); DagNode* ruleRewrite(DagNode* subject, RewritingContext& context); void stackArguments(DagNode* subject, Vector& stack, int parentIndex, bool respectFrozen, bool eagerContext); Term* termify(DagNode* dagNode); // // Member functions overiding default handling. // void postOpDeclarationPass(); void compileEquations(); // // Member functions particular to AU_Symbol. // bool leftId() const; bool rightId() const; bool oneSidedId() const; bool useDeque() const; int calculateNrSubjectsMatched(DagNode* d, bool leftEnd, // match starts at left extreme bool rightEnd, // match end at right extreme bool& nasty); // // Unification stuff (A only). // void computeGeneralizedSort(const SortBdds& sortBdds, const Vector& realToBdd, DagNode* subject, Vector& generalizedSort); void computeGeneralizedSort2(const SortBdds& sortBdds, const Vector& realToBdd, DagNode* subject, Vector& outputBdds); UnificationSubproblem* makeUnificationSubproblem(); // int unificationPriority() const; // happy with default for the moment bool canResolveTheoryClash(); // // Hash cons stuff. // DagNode* makeCanonical(DagNode* original, HashConsSet* hcs); DagNode* makeCanonicalCopy(DagNode* original, HashConsSet* hcs); private: bool rewriteAtTop(AU_DagNode* subject, RewritingContext& context); bool rewriteAtTopNoOwise(AU_DagNode* subject, RewritingContext& context); bool complexStrategy(AU_DagNode* subject, RewritingContext& context); bool memoStrategy(MemoTable::SourceSet& from, DagNode* subject, RewritingContext& context); void copyAndReduceSubterms(AU_DagNode* subject, RewritingContext& context); const Bool leftIdFlag; const Bool rightIdFlag; const Bool oneSidedIdFlag; // // Deque represention of arguments can be used if there is no // one-sided identity, no fancy strategy and there are no equations // at the top. // Bool useDequeFlag; }; inline bool AU_Symbol::leftId() const { return leftIdFlag; } inline bool AU_Symbol::rightId() const { return rightIdFlag; } inline bool AU_Symbol::oneSidedId() const { return oneSidedIdFlag; } inline bool AU_Symbol::useDeque() const { return useDequeFlag; } #endif maude-3.1/src/AU_Theory/AU_GreedyMatcher.cc0000644000175200017520000002525313576050735015464 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for greedy A/AU matcher flex part. // int AU_LhsAutomaton::greedyMatch(AU_DagNode* subject, Substitution& solution, AU_ExtensionInfo* extensionInfo) { local.copy(solution); int t = greedyMatchBlocks(subject, extensionInfo); if (t != true) return t; solution.copy(local); greedyBindVariables(subject, solution); if (extensionInfo != 0) { extensionInfo->setExtraIdentity(false); extensionInfo->setValidAfterMatch(true); Assert(extensionInfo->bigEnough(), "didn't match enough of subject"); } return true; } void AU_LhsAutomaton::greedyBindVariables(AU_DagNode* subject, Substitution& solution) { bool buildReducedNodes = subject->isReduced() && topSymbol->sortConstraintFree(); int skip; for (int i = flexLeftPos; i <= flexRightPos; i += skip) { Subterm& f = flexPart[i]; skip = f.blockLength; if (skip == NOT_FIXED) { skip = 1; TopVariable& tv = f.variable; int index = tv.index; DagNode* d = solution.value(index); if (d == 0) { int nrSubjects = tv.lastSubject - tv.firstSubject + 1; Assert(nrSubjects >= 0, "-ve number of subjects " << nrSubjects); if (nrSubjects == 0) solution.bind(index, topSymbol->getIdentityDag()); else if (nrSubjects == 1) solution.bind(index, subject->argArray[tv.firstSubject]); else { AU_DagNode* n = new AU_DagNode(topSymbol, nrSubjects); for (int j = 0; j < nrSubjects; j++) n->argArray[j] = subject->argArray[tv.firstSubject + j]; n->setProducedByAssignment(); if (buildReducedNodes) { topSymbol->computeBaseSort(n); n->setReduced(); } solution.bind(index, n); } } } } } int AU_LhsAutomaton::greedyMatchRigidBlock(AU_DagNode* subject, RigidBlock& block, int minShift, int maxShift, int& matchShift) { Assert(minShift <= maxShift, "bad shift range"); Assert(block.start <= block.end, "bad block range"); int shiftFactor; for (int i = minShift; i <= maxShift; i += shiftFactor) { scratch.copy(local); // make a scratch copy for matching at shift i int t = greedyMatchRigidBlock2(subject, block, i, shiftFactor); if (t == UNDECIDED) return UNDECIDED; if (t == true) { matchShift = i; local.copy(scratch); return true; } } return false; } int AU_LhsAutomaton::greedyMatchRigidBlock2(AU_DagNode* subject, RigidBlock& block, int nextSubject, int& shiftFactor) { ArgVec& args = subject->argArray; shiftFactor = 1; // default shift increment int skip; for (int i = block.start; i <= block.end; i += skip) { Subterm& f = flexPart[i]; skip = f.blockLength; if (skip == NOT_FIXED) { DagNode* d = scratch.value(f.variable.index); Assert(d != 0, "unbound variable in rigid block"); if (!(subject->eliminateForward(d, nextSubject, rightPos))) // better limit? return false; skip = 1; } else { int sf; int t = greedyMatchFixedLengthBlock(args, i, nextSubject, sf); if (sf > shiftFactor) shiftFactor = sf; if (t != true) return t; nextSubject += skip; } } return true; } int AU_LhsAutomaton::greedyMatchFixedLengthBlock(ArgVec& args, int blockStart, int attemptedShift, int& shiftFactor) { for (int i = flexPart[blockStart].blockLength - 1; i >= 0; i--) { Subterm& f = flexPart[blockStart + i]; DagNode* d = args[attemptedShift + i]; shiftFactor = f.shiftFactor; switch (f.type) { case VARIABLE: { Assert(f.variable.upperBound == 1 && !f.variable.takeIdentity, "non-unit variable in fixed length block"); DagNode* v = scratch.value(f.variable.index); if (v == 0) { if (d->leq(f.variable.sort)) scratch.bind(f.variable.index, d); else return false; } else { Assert(v->symbol() != topSymbol, "illegal binding to unit variable"); if (!(v->equal(d))) return false; } break; } case GROUND_ALIEN: { if (!(f.groundAlien->equal(d))) return false; break; } case NON_GROUND_ALIEN: { Subproblem* sp; if (!(f.alienAutomaton->match(d, scratch, sp))) return false; if (sp != 0) { delete sp; return UNDECIDED; } break; } } } return true; } int AU_LhsAutomaton::greedyMatchBlocks(AU_DagNode* subject, AU_ExtensionInfo* extensionInfo) { int nrRigid = rigidBlocks.length(); Assert(extensionInfo != 0 || nrRigid == 0 || (rigidBlocks[0].start > flexLeftPos && rigidBlocks[nrRigid - 1].end < flexRightPos), "missing unbound variable(s)"); int spare = rightPos - leftPos + 1 - nrSubjectsUsed; if (spare < 0) return false; int varStart = flexLeftPos; int nextSubject = leftPos; for (int i = 0; i < nrRigid; i++) { // // First match rigid block. // RigidBlock& r = rigidBlocks[i]; int min = nextSubject + r.nrSubjectsToLeave; int max = min + spare; int matchShift; int t = greedyMatchRigidBlock(subject, r, min, max, matchShift); if (t != true) return t; int surplus = matchShift - min; // // Now match preceeding variable block. // bool b = greedyMatchVariableBlock(subject->argArray, varStart, r.start - varStart, nextSubject, matchShift - nextSubject, surplus, i == 0 && extensionInfo != 0, false, extensionInfo); if (!b) return UNDECIDED; r.firstMatch = matchShift; spare -= surplus; varStart = r.end + 1; nextSubject = matchShift + r.nrSubjectsForUs; } // // Match last variable block. // int nrSubjectsRemaining = rightPos - nextSubject + 1; bool b = greedyMatchVariableBlock(subject->argArray, varStart, flexRightPos - varStart + 1, nextSubject, nrSubjectsRemaining, nrSubjectsRemaining - nrSubjectsForRightVars, extensionInfo != 0 && nrRigid == 0, extensionInfo != 0, extensionInfo); return b ? int(true) : UNDECIDED; } bool AU_LhsAutomaton::greedyMatchVariableBlock(ArgVec& args, int blockStart, int blockLength, int firstSubject, int nrSubjects, int spare, bool leftExtend, bool rightExtend, AU_ExtensionInfo* extensionInfo) { // // Handle pathological case where we have to match no subjects. // if (nrSubjects == 0) { for (int i = 0; i < blockLength; i++) { TopVariable& tv = flexPart[blockStart + i].variable; if (tv.takeIdentity) { tv.firstSubject = firstSubject; // take nothing tv.lastSubject = firstSubject - 1; //DebugAdvisory("1 tv.firstSubject " << tv.firstSubject); } else return false; } if (leftExtend) extensionInfo->setFirstMatched(0); else if (rightExtend) extensionInfo->setLastMatched(args.length() - 1); return true; } // // Normal case. // int pos = firstSubject; for (int i = 0; i < blockLength; i++) { TopVariable& tv = flexPart[blockStart + i].variable; if (tv.takeIdentity) { if (spare == 0 || !(args[pos]->leq(tv.sort))) { tv.firstSubject = pos; // take nothing tv.lastSubject = pos - 1; //DebugAdvisory("2 tv.firstSubject " << tv.firstSubject); } else { if (leftExtend) { // // Now we have committed to giving a subterm (rather than // an identity) to a variable we can no longer give subterms // to the left extension. // extensionInfo->setFirstMatched(pos); leftExtend = false; } tv.firstSubject = tv.lastSubject = pos++; // take first available --spare; //DebugAdvisory("3 tv.firstSubject " << tv.firstSubject); } } else { for (; !(args[pos]->leq(tv.sort)); pos++, spare--) { // // Can't assign current subterm to current variable so // we must find a way to dispose of it. // if (spare == 0) return false; // can't afford to dispose of it so fail if (!leftExtend) { if (i == 0) return false; TopVariable& pv = flexPart[blockStart + i - 1].variable; if (args[pos]->leq(pv.sort)) pv.lastSubject = pos; else return false; // previous variable cannot take it so fail } } if (leftExtend) { // // Now we have committed to giving a subterm (rather than // an identity) to a variable we can no longer give subterms // to the left extension. // extensionInfo->setFirstMatched(pos); leftExtend = false; } tv.firstSubject = tv.lastSubject = pos++; //DebugAdvisory("4 tv.firstSubject " << tv.firstSubject); } } if (leftExtend) { // // Left extension gets the whole thing. // Assert(!rightExtend, "whole subject in extension should not happen in greedy match"); DebugAdvisoryCheck(blockLength == 0, "worst case scenario for AU greedy match"); extensionInfo->setFirstMatched(firstSubject + nrSubjects); return true; } if (blockLength > 0) { // // Try to assign spare subterms to last variable // TopVariable& lv = flexPart[blockStart + blockLength - 1].variable; for (; spare > 0; spare--, pos++) { Assert(pos < firstSubject + nrSubjects, "pos overrun"); if (!(args[pos]->leq(lv.sort))) { if (rightExtend) break; else return false; } } lv.lastSubject = pos - 1; } if (rightExtend) extensionInfo->setLastMatched(pos - 1); return true; } maude-3.1/src/AU_Theory/Makefile.in0000644000175200017520000014304513741175702014106 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/AU_Theory ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_have_poll.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libAU_Theory_a_AR = $(AR) $(ARFLAGS) libAU_Theory_a_LIBADD = am_libAU_Theory_a_OBJECTS = libAU_Theory_a-AU_Symbol.$(OBJEXT) \ libAU_Theory_a-AU_DagNode.$(OBJEXT) \ libAU_Theory_a-AU_DequeDagNode.$(OBJEXT) \ libAU_Theory_a-AU_Term.$(OBJEXT) \ libAU_Theory_a-AU_DagArgumentIterator.$(OBJEXT) \ libAU_Theory_a-AU_DequeDagArgumentIterator.$(OBJEXT) \ libAU_Theory_a-AU_ExtensionInfo.$(OBJEXT) \ libAU_Theory_a-AU_RhsAutomaton.$(OBJEXT) \ libAU_Theory_a-AU_LhsAutomaton.$(OBJEXT) \ libAU_Theory_a-AU_ArgumentIterator.$(OBJEXT) \ libAU_Theory_a-AU_Layer.$(OBJEXT) \ libAU_Theory_a-AU_Subproblem.$(OBJEXT) \ libAU_Theory_a-AU_UnificationSubproblem2.$(OBJEXT) libAU_Theory_a_OBJECTS = $(am_libAU_Theory_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = \ ./$(DEPDIR)/libAU_Theory_a-AU_ArgumentIterator.Po \ ./$(DEPDIR)/libAU_Theory_a-AU_DagArgumentIterator.Po \ ./$(DEPDIR)/libAU_Theory_a-AU_DagNode.Po \ ./$(DEPDIR)/libAU_Theory_a-AU_DequeDagArgumentIterator.Po \ ./$(DEPDIR)/libAU_Theory_a-AU_DequeDagNode.Po \ ./$(DEPDIR)/libAU_Theory_a-AU_ExtensionInfo.Po \ ./$(DEPDIR)/libAU_Theory_a-AU_Layer.Po \ ./$(DEPDIR)/libAU_Theory_a-AU_LhsAutomaton.Po \ ./$(DEPDIR)/libAU_Theory_a-AU_RhsAutomaton.Po \ ./$(DEPDIR)/libAU_Theory_a-AU_Subproblem.Po \ ./$(DEPDIR)/libAU_Theory_a-AU_Symbol.Po \ ./$(DEPDIR)/libAU_Theory_a-AU_Term.Po \ ./$(DEPDIR)/libAU_Theory_a-AU_UnificationSubproblem2.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(libAU_Theory_a_SOURCES) DIST_SOURCES = $(libAU_Theory_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs ChangeLog DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ BUDDY_LIB = @BUDDY_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CVC4_LIB = @CVC4_LIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FLEX = @FLEX@ GCC_LIBS = @GCC_LIBS@ GMP_LIBS = @GMP_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSIGSEGV_LIB = @LIBSIGSEGV_LIB@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TECLA_LIBS = @TECLA_LIBS@ VERSION = @VERSION@ YICES2_LIB = @YICES2_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libAU_Theory.a libAU_Theory_a_CPPFLAGS = \ -I$(top_srcdir)/src/Utility \ -I$(top_srcdir)/src/Interface \ -I$(top_srcdir)/src/Core \ -I$(top_srcdir)/src/Variable \ -I$(top_srcdir)/src/AU_Persistent \ -I$(top_srcdir)/src/FullCompiler libAU_Theory_a_SOURCES = \ AU_Symbol.cc \ AU_DagNode.cc \ AU_DequeDagNode.cc \ AU_Term.cc \ AU_DagArgumentIterator.cc \ AU_DequeDagArgumentIterator.cc \ AU_ExtensionInfo.cc \ AU_RhsAutomaton.cc \ AU_LhsAutomaton.cc \ AU_ArgumentIterator.cc \ AU_Layer.cc \ AU_Subproblem.cc \ AU_UnificationSubproblem2.cc EXTRA_DIST = \ AU_DagOperations.cc \ AU_Normalize.cc \ AU_LhsCompiler.cc \ AU_Matcher.cc \ AU_CollapseMatcher.cc \ AU_FullMatcher.cc \ AU_GreedyMatcher.cc \ AU_DequeMatcher.cc \ ChangeLog.A_Theory noinst_HEADERS = \ AU_ArgumentIterator.hh \ AU_BaseDagNode.hh \ AU_DagArgumentIterator.hh \ AU_DagNode.hh \ AU_DequeDagArgumentIterator.hh \ AU_DequeDagNode.hh \ AU_ExtensionInfo.hh \ AU_Layer.hh \ AU_LhsAutomaton.hh \ AU_RhsAutomaton.hh \ AU_Subproblem.hh \ AU_Symbol.hh \ AU_Term.hh \ AU_Theory.hh \ AU_UnificationSubproblem2.hh all: all-am .SUFFIXES: .SUFFIXES: .cc .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/AU_Theory/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/AU_Theory/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libAU_Theory.a: $(libAU_Theory_a_OBJECTS) $(libAU_Theory_a_DEPENDENCIES) $(EXTRA_libAU_Theory_a_DEPENDENCIES) $(AM_V_at)-rm -f libAU_Theory.a $(AM_V_AR)$(libAU_Theory_a_AR) libAU_Theory.a $(libAU_Theory_a_OBJECTS) $(libAU_Theory_a_LIBADD) $(AM_V_at)$(RANLIB) libAU_Theory.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libAU_Theory_a-AU_ArgumentIterator.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libAU_Theory_a-AU_DagArgumentIterator.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libAU_Theory_a-AU_DagNode.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libAU_Theory_a-AU_DequeDagArgumentIterator.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libAU_Theory_a-AU_DequeDagNode.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libAU_Theory_a-AU_ExtensionInfo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libAU_Theory_a-AU_Layer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libAU_Theory_a-AU_LhsAutomaton.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libAU_Theory_a-AU_RhsAutomaton.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libAU_Theory_a-AU_Subproblem.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libAU_Theory_a-AU_Symbol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libAU_Theory_a-AU_Term.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libAU_Theory_a-AU_UnificationSubproblem2.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` libAU_Theory_a-AU_Symbol.o: AU_Symbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Theory_a-AU_Symbol.o -MD -MP -MF $(DEPDIR)/libAU_Theory_a-AU_Symbol.Tpo -c -o libAU_Theory_a-AU_Symbol.o `test -f 'AU_Symbol.cc' || echo '$(srcdir)/'`AU_Symbol.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Theory_a-AU_Symbol.Tpo $(DEPDIR)/libAU_Theory_a-AU_Symbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_Symbol.cc' object='libAU_Theory_a-AU_Symbol.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Theory_a-AU_Symbol.o `test -f 'AU_Symbol.cc' || echo '$(srcdir)/'`AU_Symbol.cc libAU_Theory_a-AU_Symbol.obj: AU_Symbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Theory_a-AU_Symbol.obj -MD -MP -MF $(DEPDIR)/libAU_Theory_a-AU_Symbol.Tpo -c -o libAU_Theory_a-AU_Symbol.obj `if test -f 'AU_Symbol.cc'; then $(CYGPATH_W) 'AU_Symbol.cc'; else $(CYGPATH_W) '$(srcdir)/AU_Symbol.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Theory_a-AU_Symbol.Tpo $(DEPDIR)/libAU_Theory_a-AU_Symbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_Symbol.cc' object='libAU_Theory_a-AU_Symbol.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Theory_a-AU_Symbol.obj `if test -f 'AU_Symbol.cc'; then $(CYGPATH_W) 'AU_Symbol.cc'; else $(CYGPATH_W) '$(srcdir)/AU_Symbol.cc'; fi` libAU_Theory_a-AU_DagNode.o: AU_DagNode.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Theory_a-AU_DagNode.o -MD -MP -MF $(DEPDIR)/libAU_Theory_a-AU_DagNode.Tpo -c -o libAU_Theory_a-AU_DagNode.o `test -f 'AU_DagNode.cc' || echo '$(srcdir)/'`AU_DagNode.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Theory_a-AU_DagNode.Tpo $(DEPDIR)/libAU_Theory_a-AU_DagNode.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_DagNode.cc' object='libAU_Theory_a-AU_DagNode.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Theory_a-AU_DagNode.o `test -f 'AU_DagNode.cc' || echo '$(srcdir)/'`AU_DagNode.cc libAU_Theory_a-AU_DagNode.obj: AU_DagNode.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Theory_a-AU_DagNode.obj -MD -MP -MF $(DEPDIR)/libAU_Theory_a-AU_DagNode.Tpo -c -o libAU_Theory_a-AU_DagNode.obj `if test -f 'AU_DagNode.cc'; then $(CYGPATH_W) 'AU_DagNode.cc'; else $(CYGPATH_W) '$(srcdir)/AU_DagNode.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Theory_a-AU_DagNode.Tpo $(DEPDIR)/libAU_Theory_a-AU_DagNode.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_DagNode.cc' object='libAU_Theory_a-AU_DagNode.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Theory_a-AU_DagNode.obj `if test -f 'AU_DagNode.cc'; then $(CYGPATH_W) 'AU_DagNode.cc'; else $(CYGPATH_W) '$(srcdir)/AU_DagNode.cc'; fi` libAU_Theory_a-AU_DequeDagNode.o: AU_DequeDagNode.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Theory_a-AU_DequeDagNode.o -MD -MP -MF $(DEPDIR)/libAU_Theory_a-AU_DequeDagNode.Tpo -c -o libAU_Theory_a-AU_DequeDagNode.o `test -f 'AU_DequeDagNode.cc' || echo '$(srcdir)/'`AU_DequeDagNode.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Theory_a-AU_DequeDagNode.Tpo $(DEPDIR)/libAU_Theory_a-AU_DequeDagNode.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_DequeDagNode.cc' object='libAU_Theory_a-AU_DequeDagNode.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Theory_a-AU_DequeDagNode.o `test -f 'AU_DequeDagNode.cc' || echo '$(srcdir)/'`AU_DequeDagNode.cc libAU_Theory_a-AU_DequeDagNode.obj: AU_DequeDagNode.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Theory_a-AU_DequeDagNode.obj -MD -MP -MF $(DEPDIR)/libAU_Theory_a-AU_DequeDagNode.Tpo -c -o libAU_Theory_a-AU_DequeDagNode.obj `if test -f 'AU_DequeDagNode.cc'; then $(CYGPATH_W) 'AU_DequeDagNode.cc'; else $(CYGPATH_W) '$(srcdir)/AU_DequeDagNode.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Theory_a-AU_DequeDagNode.Tpo $(DEPDIR)/libAU_Theory_a-AU_DequeDagNode.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_DequeDagNode.cc' object='libAU_Theory_a-AU_DequeDagNode.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Theory_a-AU_DequeDagNode.obj `if test -f 'AU_DequeDagNode.cc'; then $(CYGPATH_W) 'AU_DequeDagNode.cc'; else $(CYGPATH_W) '$(srcdir)/AU_DequeDagNode.cc'; fi` libAU_Theory_a-AU_Term.o: AU_Term.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Theory_a-AU_Term.o -MD -MP -MF $(DEPDIR)/libAU_Theory_a-AU_Term.Tpo -c -o libAU_Theory_a-AU_Term.o `test -f 'AU_Term.cc' || echo '$(srcdir)/'`AU_Term.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Theory_a-AU_Term.Tpo $(DEPDIR)/libAU_Theory_a-AU_Term.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_Term.cc' object='libAU_Theory_a-AU_Term.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Theory_a-AU_Term.o `test -f 'AU_Term.cc' || echo '$(srcdir)/'`AU_Term.cc libAU_Theory_a-AU_Term.obj: AU_Term.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Theory_a-AU_Term.obj -MD -MP -MF $(DEPDIR)/libAU_Theory_a-AU_Term.Tpo -c -o libAU_Theory_a-AU_Term.obj `if test -f 'AU_Term.cc'; then $(CYGPATH_W) 'AU_Term.cc'; else $(CYGPATH_W) '$(srcdir)/AU_Term.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Theory_a-AU_Term.Tpo $(DEPDIR)/libAU_Theory_a-AU_Term.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_Term.cc' object='libAU_Theory_a-AU_Term.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Theory_a-AU_Term.obj `if test -f 'AU_Term.cc'; then $(CYGPATH_W) 'AU_Term.cc'; else $(CYGPATH_W) '$(srcdir)/AU_Term.cc'; fi` libAU_Theory_a-AU_DagArgumentIterator.o: AU_DagArgumentIterator.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Theory_a-AU_DagArgumentIterator.o -MD -MP -MF $(DEPDIR)/libAU_Theory_a-AU_DagArgumentIterator.Tpo -c -o libAU_Theory_a-AU_DagArgumentIterator.o `test -f 'AU_DagArgumentIterator.cc' || echo '$(srcdir)/'`AU_DagArgumentIterator.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Theory_a-AU_DagArgumentIterator.Tpo $(DEPDIR)/libAU_Theory_a-AU_DagArgumentIterator.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_DagArgumentIterator.cc' object='libAU_Theory_a-AU_DagArgumentIterator.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Theory_a-AU_DagArgumentIterator.o `test -f 'AU_DagArgumentIterator.cc' || echo '$(srcdir)/'`AU_DagArgumentIterator.cc libAU_Theory_a-AU_DagArgumentIterator.obj: AU_DagArgumentIterator.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Theory_a-AU_DagArgumentIterator.obj -MD -MP -MF $(DEPDIR)/libAU_Theory_a-AU_DagArgumentIterator.Tpo -c -o libAU_Theory_a-AU_DagArgumentIterator.obj `if test -f 'AU_DagArgumentIterator.cc'; then $(CYGPATH_W) 'AU_DagArgumentIterator.cc'; else $(CYGPATH_W) '$(srcdir)/AU_DagArgumentIterator.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Theory_a-AU_DagArgumentIterator.Tpo $(DEPDIR)/libAU_Theory_a-AU_DagArgumentIterator.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_DagArgumentIterator.cc' object='libAU_Theory_a-AU_DagArgumentIterator.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Theory_a-AU_DagArgumentIterator.obj `if test -f 'AU_DagArgumentIterator.cc'; then $(CYGPATH_W) 'AU_DagArgumentIterator.cc'; else $(CYGPATH_W) '$(srcdir)/AU_DagArgumentIterator.cc'; fi` libAU_Theory_a-AU_DequeDagArgumentIterator.o: AU_DequeDagArgumentIterator.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Theory_a-AU_DequeDagArgumentIterator.o -MD -MP -MF $(DEPDIR)/libAU_Theory_a-AU_DequeDagArgumentIterator.Tpo -c -o libAU_Theory_a-AU_DequeDagArgumentIterator.o `test -f 'AU_DequeDagArgumentIterator.cc' || echo '$(srcdir)/'`AU_DequeDagArgumentIterator.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Theory_a-AU_DequeDagArgumentIterator.Tpo $(DEPDIR)/libAU_Theory_a-AU_DequeDagArgumentIterator.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_DequeDagArgumentIterator.cc' object='libAU_Theory_a-AU_DequeDagArgumentIterator.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Theory_a-AU_DequeDagArgumentIterator.o `test -f 'AU_DequeDagArgumentIterator.cc' || echo '$(srcdir)/'`AU_DequeDagArgumentIterator.cc libAU_Theory_a-AU_DequeDagArgumentIterator.obj: AU_DequeDagArgumentIterator.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Theory_a-AU_DequeDagArgumentIterator.obj -MD -MP -MF $(DEPDIR)/libAU_Theory_a-AU_DequeDagArgumentIterator.Tpo -c -o libAU_Theory_a-AU_DequeDagArgumentIterator.obj `if test -f 'AU_DequeDagArgumentIterator.cc'; then $(CYGPATH_W) 'AU_DequeDagArgumentIterator.cc'; else $(CYGPATH_W) '$(srcdir)/AU_DequeDagArgumentIterator.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Theory_a-AU_DequeDagArgumentIterator.Tpo $(DEPDIR)/libAU_Theory_a-AU_DequeDagArgumentIterator.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_DequeDagArgumentIterator.cc' object='libAU_Theory_a-AU_DequeDagArgumentIterator.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Theory_a-AU_DequeDagArgumentIterator.obj `if test -f 'AU_DequeDagArgumentIterator.cc'; then $(CYGPATH_W) 'AU_DequeDagArgumentIterator.cc'; else $(CYGPATH_W) '$(srcdir)/AU_DequeDagArgumentIterator.cc'; fi` libAU_Theory_a-AU_ExtensionInfo.o: AU_ExtensionInfo.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Theory_a-AU_ExtensionInfo.o -MD -MP -MF $(DEPDIR)/libAU_Theory_a-AU_ExtensionInfo.Tpo -c -o libAU_Theory_a-AU_ExtensionInfo.o `test -f 'AU_ExtensionInfo.cc' || echo '$(srcdir)/'`AU_ExtensionInfo.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Theory_a-AU_ExtensionInfo.Tpo $(DEPDIR)/libAU_Theory_a-AU_ExtensionInfo.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_ExtensionInfo.cc' object='libAU_Theory_a-AU_ExtensionInfo.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Theory_a-AU_ExtensionInfo.o `test -f 'AU_ExtensionInfo.cc' || echo '$(srcdir)/'`AU_ExtensionInfo.cc libAU_Theory_a-AU_ExtensionInfo.obj: AU_ExtensionInfo.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Theory_a-AU_ExtensionInfo.obj -MD -MP -MF $(DEPDIR)/libAU_Theory_a-AU_ExtensionInfo.Tpo -c -o libAU_Theory_a-AU_ExtensionInfo.obj `if test -f 'AU_ExtensionInfo.cc'; then $(CYGPATH_W) 'AU_ExtensionInfo.cc'; else $(CYGPATH_W) '$(srcdir)/AU_ExtensionInfo.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Theory_a-AU_ExtensionInfo.Tpo $(DEPDIR)/libAU_Theory_a-AU_ExtensionInfo.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_ExtensionInfo.cc' object='libAU_Theory_a-AU_ExtensionInfo.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Theory_a-AU_ExtensionInfo.obj `if test -f 'AU_ExtensionInfo.cc'; then $(CYGPATH_W) 'AU_ExtensionInfo.cc'; else $(CYGPATH_W) '$(srcdir)/AU_ExtensionInfo.cc'; fi` libAU_Theory_a-AU_RhsAutomaton.o: AU_RhsAutomaton.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Theory_a-AU_RhsAutomaton.o -MD -MP -MF $(DEPDIR)/libAU_Theory_a-AU_RhsAutomaton.Tpo -c -o libAU_Theory_a-AU_RhsAutomaton.o `test -f 'AU_RhsAutomaton.cc' || echo '$(srcdir)/'`AU_RhsAutomaton.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Theory_a-AU_RhsAutomaton.Tpo $(DEPDIR)/libAU_Theory_a-AU_RhsAutomaton.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_RhsAutomaton.cc' object='libAU_Theory_a-AU_RhsAutomaton.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Theory_a-AU_RhsAutomaton.o `test -f 'AU_RhsAutomaton.cc' || echo '$(srcdir)/'`AU_RhsAutomaton.cc libAU_Theory_a-AU_RhsAutomaton.obj: AU_RhsAutomaton.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Theory_a-AU_RhsAutomaton.obj -MD -MP -MF $(DEPDIR)/libAU_Theory_a-AU_RhsAutomaton.Tpo -c -o libAU_Theory_a-AU_RhsAutomaton.obj `if test -f 'AU_RhsAutomaton.cc'; then $(CYGPATH_W) 'AU_RhsAutomaton.cc'; else $(CYGPATH_W) '$(srcdir)/AU_RhsAutomaton.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Theory_a-AU_RhsAutomaton.Tpo $(DEPDIR)/libAU_Theory_a-AU_RhsAutomaton.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_RhsAutomaton.cc' object='libAU_Theory_a-AU_RhsAutomaton.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Theory_a-AU_RhsAutomaton.obj `if test -f 'AU_RhsAutomaton.cc'; then $(CYGPATH_W) 'AU_RhsAutomaton.cc'; else $(CYGPATH_W) '$(srcdir)/AU_RhsAutomaton.cc'; fi` libAU_Theory_a-AU_LhsAutomaton.o: AU_LhsAutomaton.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Theory_a-AU_LhsAutomaton.o -MD -MP -MF $(DEPDIR)/libAU_Theory_a-AU_LhsAutomaton.Tpo -c -o libAU_Theory_a-AU_LhsAutomaton.o `test -f 'AU_LhsAutomaton.cc' || echo '$(srcdir)/'`AU_LhsAutomaton.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Theory_a-AU_LhsAutomaton.Tpo $(DEPDIR)/libAU_Theory_a-AU_LhsAutomaton.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_LhsAutomaton.cc' object='libAU_Theory_a-AU_LhsAutomaton.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Theory_a-AU_LhsAutomaton.o `test -f 'AU_LhsAutomaton.cc' || echo '$(srcdir)/'`AU_LhsAutomaton.cc libAU_Theory_a-AU_LhsAutomaton.obj: AU_LhsAutomaton.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Theory_a-AU_LhsAutomaton.obj -MD -MP -MF $(DEPDIR)/libAU_Theory_a-AU_LhsAutomaton.Tpo -c -o libAU_Theory_a-AU_LhsAutomaton.obj `if test -f 'AU_LhsAutomaton.cc'; then $(CYGPATH_W) 'AU_LhsAutomaton.cc'; else $(CYGPATH_W) '$(srcdir)/AU_LhsAutomaton.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Theory_a-AU_LhsAutomaton.Tpo $(DEPDIR)/libAU_Theory_a-AU_LhsAutomaton.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_LhsAutomaton.cc' object='libAU_Theory_a-AU_LhsAutomaton.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Theory_a-AU_LhsAutomaton.obj `if test -f 'AU_LhsAutomaton.cc'; then $(CYGPATH_W) 'AU_LhsAutomaton.cc'; else $(CYGPATH_W) '$(srcdir)/AU_LhsAutomaton.cc'; fi` libAU_Theory_a-AU_ArgumentIterator.o: AU_ArgumentIterator.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Theory_a-AU_ArgumentIterator.o -MD -MP -MF $(DEPDIR)/libAU_Theory_a-AU_ArgumentIterator.Tpo -c -o libAU_Theory_a-AU_ArgumentIterator.o `test -f 'AU_ArgumentIterator.cc' || echo '$(srcdir)/'`AU_ArgumentIterator.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Theory_a-AU_ArgumentIterator.Tpo $(DEPDIR)/libAU_Theory_a-AU_ArgumentIterator.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_ArgumentIterator.cc' object='libAU_Theory_a-AU_ArgumentIterator.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Theory_a-AU_ArgumentIterator.o `test -f 'AU_ArgumentIterator.cc' || echo '$(srcdir)/'`AU_ArgumentIterator.cc libAU_Theory_a-AU_ArgumentIterator.obj: AU_ArgumentIterator.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Theory_a-AU_ArgumentIterator.obj -MD -MP -MF $(DEPDIR)/libAU_Theory_a-AU_ArgumentIterator.Tpo -c -o libAU_Theory_a-AU_ArgumentIterator.obj `if test -f 'AU_ArgumentIterator.cc'; then $(CYGPATH_W) 'AU_ArgumentIterator.cc'; else $(CYGPATH_W) '$(srcdir)/AU_ArgumentIterator.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Theory_a-AU_ArgumentIterator.Tpo $(DEPDIR)/libAU_Theory_a-AU_ArgumentIterator.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_ArgumentIterator.cc' object='libAU_Theory_a-AU_ArgumentIterator.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Theory_a-AU_ArgumentIterator.obj `if test -f 'AU_ArgumentIterator.cc'; then $(CYGPATH_W) 'AU_ArgumentIterator.cc'; else $(CYGPATH_W) '$(srcdir)/AU_ArgumentIterator.cc'; fi` libAU_Theory_a-AU_Layer.o: AU_Layer.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Theory_a-AU_Layer.o -MD -MP -MF $(DEPDIR)/libAU_Theory_a-AU_Layer.Tpo -c -o libAU_Theory_a-AU_Layer.o `test -f 'AU_Layer.cc' || echo '$(srcdir)/'`AU_Layer.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Theory_a-AU_Layer.Tpo $(DEPDIR)/libAU_Theory_a-AU_Layer.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_Layer.cc' object='libAU_Theory_a-AU_Layer.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Theory_a-AU_Layer.o `test -f 'AU_Layer.cc' || echo '$(srcdir)/'`AU_Layer.cc libAU_Theory_a-AU_Layer.obj: AU_Layer.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Theory_a-AU_Layer.obj -MD -MP -MF $(DEPDIR)/libAU_Theory_a-AU_Layer.Tpo -c -o libAU_Theory_a-AU_Layer.obj `if test -f 'AU_Layer.cc'; then $(CYGPATH_W) 'AU_Layer.cc'; else $(CYGPATH_W) '$(srcdir)/AU_Layer.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Theory_a-AU_Layer.Tpo $(DEPDIR)/libAU_Theory_a-AU_Layer.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_Layer.cc' object='libAU_Theory_a-AU_Layer.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Theory_a-AU_Layer.obj `if test -f 'AU_Layer.cc'; then $(CYGPATH_W) 'AU_Layer.cc'; else $(CYGPATH_W) '$(srcdir)/AU_Layer.cc'; fi` libAU_Theory_a-AU_Subproblem.o: AU_Subproblem.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Theory_a-AU_Subproblem.o -MD -MP -MF $(DEPDIR)/libAU_Theory_a-AU_Subproblem.Tpo -c -o libAU_Theory_a-AU_Subproblem.o `test -f 'AU_Subproblem.cc' || echo '$(srcdir)/'`AU_Subproblem.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Theory_a-AU_Subproblem.Tpo $(DEPDIR)/libAU_Theory_a-AU_Subproblem.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_Subproblem.cc' object='libAU_Theory_a-AU_Subproblem.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Theory_a-AU_Subproblem.o `test -f 'AU_Subproblem.cc' || echo '$(srcdir)/'`AU_Subproblem.cc libAU_Theory_a-AU_Subproblem.obj: AU_Subproblem.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Theory_a-AU_Subproblem.obj -MD -MP -MF $(DEPDIR)/libAU_Theory_a-AU_Subproblem.Tpo -c -o libAU_Theory_a-AU_Subproblem.obj `if test -f 'AU_Subproblem.cc'; then $(CYGPATH_W) 'AU_Subproblem.cc'; else $(CYGPATH_W) '$(srcdir)/AU_Subproblem.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Theory_a-AU_Subproblem.Tpo $(DEPDIR)/libAU_Theory_a-AU_Subproblem.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_Subproblem.cc' object='libAU_Theory_a-AU_Subproblem.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Theory_a-AU_Subproblem.obj `if test -f 'AU_Subproblem.cc'; then $(CYGPATH_W) 'AU_Subproblem.cc'; else $(CYGPATH_W) '$(srcdir)/AU_Subproblem.cc'; fi` libAU_Theory_a-AU_UnificationSubproblem2.o: AU_UnificationSubproblem2.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Theory_a-AU_UnificationSubproblem2.o -MD -MP -MF $(DEPDIR)/libAU_Theory_a-AU_UnificationSubproblem2.Tpo -c -o libAU_Theory_a-AU_UnificationSubproblem2.o `test -f 'AU_UnificationSubproblem2.cc' || echo '$(srcdir)/'`AU_UnificationSubproblem2.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Theory_a-AU_UnificationSubproblem2.Tpo $(DEPDIR)/libAU_Theory_a-AU_UnificationSubproblem2.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_UnificationSubproblem2.cc' object='libAU_Theory_a-AU_UnificationSubproblem2.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Theory_a-AU_UnificationSubproblem2.o `test -f 'AU_UnificationSubproblem2.cc' || echo '$(srcdir)/'`AU_UnificationSubproblem2.cc libAU_Theory_a-AU_UnificationSubproblem2.obj: AU_UnificationSubproblem2.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Theory_a-AU_UnificationSubproblem2.obj -MD -MP -MF $(DEPDIR)/libAU_Theory_a-AU_UnificationSubproblem2.Tpo -c -o libAU_Theory_a-AU_UnificationSubproblem2.obj `if test -f 'AU_UnificationSubproblem2.cc'; then $(CYGPATH_W) 'AU_UnificationSubproblem2.cc'; else $(CYGPATH_W) '$(srcdir)/AU_UnificationSubproblem2.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Theory_a-AU_UnificationSubproblem2.Tpo $(DEPDIR)/libAU_Theory_a-AU_UnificationSubproblem2.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_UnificationSubproblem2.cc' object='libAU_Theory_a-AU_UnificationSubproblem2.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Theory_a-AU_UnificationSubproblem2.obj `if test -f 'AU_UnificationSubproblem2.cc'; then $(CYGPATH_W) 'AU_UnificationSubproblem2.cc'; else $(CYGPATH_W) '$(srcdir)/AU_UnificationSubproblem2.cc'; fi` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/libAU_Theory_a-AU_ArgumentIterator.Po -rm -f ./$(DEPDIR)/libAU_Theory_a-AU_DagArgumentIterator.Po -rm -f ./$(DEPDIR)/libAU_Theory_a-AU_DagNode.Po -rm -f ./$(DEPDIR)/libAU_Theory_a-AU_DequeDagArgumentIterator.Po -rm -f ./$(DEPDIR)/libAU_Theory_a-AU_DequeDagNode.Po -rm -f ./$(DEPDIR)/libAU_Theory_a-AU_ExtensionInfo.Po -rm -f ./$(DEPDIR)/libAU_Theory_a-AU_Layer.Po -rm -f ./$(DEPDIR)/libAU_Theory_a-AU_LhsAutomaton.Po -rm -f ./$(DEPDIR)/libAU_Theory_a-AU_RhsAutomaton.Po -rm -f ./$(DEPDIR)/libAU_Theory_a-AU_Subproblem.Po -rm -f ./$(DEPDIR)/libAU_Theory_a-AU_Symbol.Po -rm -f ./$(DEPDIR)/libAU_Theory_a-AU_Term.Po -rm -f ./$(DEPDIR)/libAU_Theory_a-AU_UnificationSubproblem2.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/libAU_Theory_a-AU_ArgumentIterator.Po -rm -f ./$(DEPDIR)/libAU_Theory_a-AU_DagArgumentIterator.Po -rm -f ./$(DEPDIR)/libAU_Theory_a-AU_DagNode.Po -rm -f ./$(DEPDIR)/libAU_Theory_a-AU_DequeDagArgumentIterator.Po -rm -f ./$(DEPDIR)/libAU_Theory_a-AU_DequeDagNode.Po -rm -f ./$(DEPDIR)/libAU_Theory_a-AU_ExtensionInfo.Po -rm -f ./$(DEPDIR)/libAU_Theory_a-AU_Layer.Po -rm -f ./$(DEPDIR)/libAU_Theory_a-AU_LhsAutomaton.Po -rm -f ./$(DEPDIR)/libAU_Theory_a-AU_RhsAutomaton.Po -rm -f ./$(DEPDIR)/libAU_Theory_a-AU_Subproblem.Po -rm -f ./$(DEPDIR)/libAU_Theory_a-AU_Symbol.Po -rm -f ./$(DEPDIR)/libAU_Theory_a-AU_Term.Po -rm -f ./$(DEPDIR)/libAU_Theory_a-AU_UnificationSubproblem2.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-noinstLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: maude-3.1/src/AU_Theory/AU_Theory.hh0000644000175200017520000000241213576050635014214 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Forward declarations for AU theory classes. // #ifndef _AU_Theory_hh_ #define _AU_Theory_hh_ class AU_Symbol; class AU_Term; class AU_ArgumentIterator; class AU_BaseDagNode; class AU_DagNode; class AU_DequeDagNode; class AU_DagArgumentIterator; class AU_DequeDagArgumentIterator; class AU_LhsAutomaton; class AU_RhsAutomaton; class AU_Layer; class AU_Subproblem; class AU_ExtensionInfo; class AU_UnificationSubproblem; #endif maude-3.1/src/BuiltIn/0000755000175200017520000000000013741222370011613 500000000000000maude-3.1/src/BuiltIn/ChangeLog0000755000175200017520000023706413734516207013333 000000000000002020-09-28 Steven Eker * matrixOpSymbol.cc (MatrixOpSymbol::eqRewrite): use range-based for loop * ACU_NumberOpSymbol.cc (ACU_NumberOpSymbol::eqRewrite2): use range-based for loop ===================================Maude131=========================================== 2020-04-22 Steven Eker * minusSymbol.hh (class MinusSymbol): added decl for makeIntDag() * minusSymbol.cc (MinusSymbol::makeIntDag): added ===================================Maude128a=========================================== 2019-12-17 Steven Eker * floatOpSymbol.cc (isNaN): use ::isnan() to avoid ambiguity with older compilers ===================================Maude128=========================================== 2019-12-06 Steven Eker * counterSymbol.hh (NumberOpSymbol): commented out declarations for saveHiddenState(), restoreHiddenState() (NumberOpSymbol): commented out typedef MpzStack, data member currentValueStack * counterSymbol.cc (saveHiddenState, restoreHiddenState): commented out ===================================Maude127=========================================== 2019-05-24 Steven Eker * floatOpSymbol.cc (eqRewrite, safePow): finite() -> isfinite() * floatSymbol.cc (fillInSortInfo, computeBaseSort): finite() -> isfinite() 2019-01-30 Steven Eker * stringDagNode.cc (StringDagNode): fix bad Assert() caught by new compiler ===================================Maude121=========================================== 2018-08-13 Steven Eker * stringOpSymbol.hh (FreeSymbol): added decls for upperCase(), lowerCase() * stringOpSymbol.cc (eqRewrite, getDataAttachments): added support for upperCase() and lowerCase() (upperCase, lowerCase): added ===================================Maude118=========================================== 2018-08-03 Steven Eker * bindingMacros.hh (BIND_SYMBOL2): added; this version checks nrArgs 2018-03-26 Steven Eker * floatOpSymbol.cc (safePow, eqRewrite): use isNaN() macro to avoid ambiguity between C and C++ definitions of isnan() that appear with -std=gnu++11 ===================================Maude115=========================================== 2017-07-25 Steven Eker * minusSymbol.hh (NumberOpSymbol): added decl for getSignedInt64() * minusSymbol.cc (getSignedInt64): added ===================================Maude115=========================================== 2017-03-10 Steven Eker * branchSymbol.hh (FreeSymbol): updated decl for stackArguments() * branchSymbol.cc (stackArguments): handle respectFrozen and eagerContext arguments ===================================Maude111b=========================================== 2015-12-18 Steven Eker * matrixOpSymbol.cc (downAlgorithm): use Rope * stringDagNode.cc (getHashValue): use prefix Rope::const_iterator increment * stringTerm.cc (normalize): use prefix Rope::const_iterator increment * stringOpSymbol.cc (ropeToNumber): use new makeZeroTerminatedString() member function (eqRewrite): use new makeZeroTerminatedString() member function (ropeToNumber): use two argument substr() * stringOpSymbol.hh: crope -> Rope throughout * stringOpSymbol.cc: crope -> Rope throughout 2015-12-17 Steven Eker * stringDagNode.cc: crope -> Rope throughout * stringDagNode.hh: crope -> Rope throughout * stringTerm.cc: crope -> Rope throughout * stringTerm.hh: crope -> Rope throughout ===================================Maude108a=========================================== 2014-05-19 Steven Eker * divisionSymbol.cc (makeRatDag): allow 0/n (makeRatTerm): allow 0/n 2014-05-05 Steven Eker * bindingMacros.hh (BIND_OP3): added (CODE3): added (CODE_CASE3): added ===================================Maude103=========================================== 2014-02-18 Steven Eker * equalityExtor.cc (execute): rewritten; use tail call * equalityExtorFinal.cc (execute): use tail call * equalitySymbol.cc (generateFinalInstruction) (generateInstruction): added * equalitySymbol.hh (FreeSymbol): added decls for generateFinalInstruction(), generateInstruction() * builtIn.hh: added classes EqualityExtor and EqualityExtorFinal * equalityExtorFinal.cc: created * equalityExtorFinal.hh: created * equalityExtor.cc (EqualityExtor): call stackMachineCompile * equalitySymbol.hh (stackMachineCompile): added * equalitySymbol.cc (stackMachinePostProcess): deleted * equalitySymbol.hh (FreeSymbol): stackMachinePostProcess() becomes stackMachineCompile() * equalityExtor.cc (execute): use getEqualInstructionSequence(), getNotEqualInstructionSequence() * equalitySymbol.hh (FreeSymbol): added declaration for stackMachinePostProcess() (getEqualInstructionSequence, getNotEqualInstructionSequence): added * equalitySymbol.cc (stackMachinePostProcess): added 2014-02-12 Steven Eker * equalityExtor.hh: created * equalityExtor.cc: created ===================================Maude101=========================================== 2012-03-30 Steven Eker * floatSymbol.hh (NA_Symbol): added decl for termify() * floatSymbol.cc (termify): added * stringSymbol.hh (NA_Symbol): added decl for termify() * stringSymbol.cc (termify): added ===================================Maude96=========================================== 2011-12-31 Steven Eker * stringOpSymbol.cc (StringOpSymbol::eqRewrite): use makeZeroTerminatedString() in place of c_str() (StringOpSymbol::ropeToNumber): use makeZeroTerminatedString() in place of c_str() (2 places) * matrixOpSymbol.cc (MatrixOpSymbol::downAlgorithm): use makeZeroTerminatedString() instead of c_str() since we now distrust the latter ===================================Maude95c=========================================== 2010-10-19 Steven Eker * stringSymbol.cc (StringSymbol::makeCanonicalCopyEagerUptoReduced): deleted * stringSymbol.hh (class StringSymbol): deleted decl for makeCanonicalCopyEagerUptoReduced() * floatSymbol.cc (FloatSymbol::makeCanonicalCopyEagerUptoReduced): deleted * floatSymbol.hh (class FloatSymbol): deleted decl for makeCanonicalCopyEagerUptoReduced() ===================================Maude95a=========================================== 2010-09-29 Steven Eker * stringSymbol.hh (class StringSymbol): added decl for makeCanonicalCopyEagerUptoReduced() * stringSymbol.cc (StringSymbol::makeCanonicalCopyEagerUptoReduced): added * floatSymbol.hh (class FloatSymbol): added decl for makeCanonicalCopyEagerUptoReduced() * floatSymbol.cc (FloatSymbol::makeCanonicalCopyEagerUptoReduced): added ===================================Maude95=========================================== 2010-05-07 Steven Eker * branchSymbol.cc (BranchSymbol::attachTerm): added DebugAdvisory() ===================================Maude93d=========================================== 2009-03-21 Steven Eker * floatOpSymbol.cc (eqRewrite): fix bug where we were treating floor() with an unevaluated argument as float() 2008-12-22 Steven Eker * branchSymbol.hh (class BranchSymbol): deleted decls for fillInSortInfo() and computeBaseSort() * branchSymbol.cc (compileOpDeclarations): add fake declarations to encode our sort structure (computeBaseSort): deleted (fillInSortInfo): deleted 2008-09-11 Steven Eker * numberOpSymbol.cc (eqRewrite): assign dummy value to b in default case to silence compiler warning * floatOpSymbol.cc (eqRewrite): assign dummy values to r in default cases to silence compiler warning * stringOpSymbol.cc (eqRewrite): assign dummy values to r in default cases to silence compiler warning * floatDagNode.hh (class FloatDagNode): use anonymous union so I can get the bit pattern for hashing without breaking strict-aliasing rules under gcc 4 * floatDagNode.cc (getHashValue): remove the reinterpret_cast<> now I have an anonymous union * floatTerm.cc (normalize): remove the reinterpret_cast<> now I have an anonymous union * floatTerm.hh (class FloatTerm): use anonymous union so I can get the bit pattern for hashing without breaking strict-aliasing rules under gcc 4 2008-09-04 Steven Eker * stringOpSymbol.cc (eqRewrite): ifdef out the kudge that was avoiding Rope::c_str() (ropeToNumber): ifdef out similar kudges 2008-05-09 Steven Eker * matrixOpSymbol.cc (eqRewrite): pass NONE rather than UNBOUNDED to represent unbounded upper bound ===================================Maude91a=========================================== 2008-04-10 Steven Eker * matrixOpSymbol.cc (MACRO): added * matrixOpSymbol.hh (class MatrixOpSymbol): added decl for copyAttachments() ===================================Maude91=========================================== 2007-09-06 Steven Eker * branchSymbol.cc (computeBaseSort): added explanation of what it does following coverity inspection ===================================Maude89h=========================================== 2007-01-18 Steven Eker * branchSymbol.cc (compileOpDeclarations): call FreeSymbol::compileOpDeclarations() as a quick hack to get unification working ===================================Maude88d=========================================== 2006-11-14 Steven Eker * floatOpSymbol.cc (getDataAttachments): added min and max cases (eqRewrite): added min and max cases ===================================Maude88c=========================================== 2006-09-22 Steven Eker * floatTerm.cc (instantiate2): added * stringTerm.cc (instantiate2): added * floatTerm.hh (class FloatTerm): added decl for instantiate2() * stringTerm.hh (class StringTerm): added decl for instantiate2() 2005-09-08 Steven Eker * matrixOpSymbol.cc (eqRewrite): use GCD where algorithm == SYSTEMS_CHOICE and number of variables is <= number of equations + 1 2005-09-07 Steven Eker * matrixOpSymbol.cc (eqRewrite): init maxRowNr and maxColNr to -1 here; check that maxRowNr is >= 0 after downing stuff (downMatrix): don't init matrix, maxRowNr and maxColNr here (eqRewrite): revert to returning empty homogenous set if inhomogenous set is empty 2005-08-25 Steven Eker * matrixOpSignature.cc (MACRO): added stringSymbol * matrixOpSymbol.hh (class MatrixOpSymbol): added enum Algorithm and decl for downAlgorithm() * matrixOpSymbol.cc (downAlgorithm): addded (eqRewrite): use downAlgorithm() 2005-08-23 Steven Eker * matrixOpSymbol.cc (eqRewrite): code cleaning (upSet): code cleaning (upVector): code cleaning (downVector): clear vec (downVectorEntry): clear new vec entries after resize() (downMatrix): clear matrix (downMatrixEntry): optimize 2005-08-18 Steven Eker * matrixOpSymbol.hh (class MatrixOpSymbol): updated dec for upVector() * matrixOpSymbol.cc (upVector): work with IntVec (eqRewrite): use class MpzSystem * matrixOpSymbol.hh (class MatrixOpSymbol): added typedef IntVec 2005-08-17 Steven Eker * matrixOpSymbol.hh (class MatrixOpSymbol): updated decls for typedef SparseVector; deleted decl for downMatrixEntry(); updated decls for downVectorEntry() and downVector() * matrixOpSymbol.cc (downCoeff): deleted (downMatrixEntry): use getNumber() (downVectorEntry): rewritten (downVector): updated * numberOpSymbol.cc (getNumber): added * numberOpSymbol.hh (class NumberOpSymbol): added decl for getNumber() ===================================Maude86c=========================================== 2004-10-28 Steven Eker * matrixOpSymbol.cc (eqRewrite): quick hack to test DiophantineSystem3 2004-10-14 Steven Eker * matrixOpSymbol.cc (getDataAttachments): return natSystemSolve as data (eqRewrite): return nonempty homogenous solution set only if inhomogenous nonempty 2004-09-16 Steven Eker * matrixOpSymbol.cc (downMatrixEntry): fixed bug where we were returning true even after failing (upVector): fixed bug where we were generating null pointer vector entries 2004-09-15 Steven Eker * matrixOpSymbol.hh (class MatrixOpSymbol): added decls for new member functions * matrixOpSymbol.cc (downVector): added (downVectorEntry): added (downCoeff): added (downMatrixEntry): added (downMatrix): added * numberOpSymbol.hh (class NumberOpSymbol): commented out declarations for makeNegDag(), isNeg(), getNeg() (getMinusSymbol): added * matrixOpSymbol.cc (upSet): added (upVector): added 2004-09-14 Steven Eker * matrixOpSymbol.cc: created * matrixOpSymbol.hh: created * matrixOpSignature.cc: created 2004-09-09 Steven Eker * floatOpSymbol.cc (getDataAttachments): fixed bug where we were returning NumberSymbol rather than FloatOpSymbol 2004-08-24 Steven Eker * ACU_NumberOpSymbol.cc (getDataAttachments): handle min and max (eqRewrite2): added min and max ===================================Maude85=========================================== 2004-06-29 Steven Eker * floatOpSymbol.cc (safePow): fixed 0.0 ^ -1.0 = Infinity issue on certain plaforms ===================================Maude84d=========================================== 2004-06-14 Steven Eker * randomOpSymbol.cc (attachData): call NumberOpSymbol::attachData() for consistancy (getDataAttachments): call NumberOpSymbol::getDataAttachments() for consistancy * counterSymbol.cc (attachData): call NumberOpSymbol::attachData() for consistancy (getDataAttachments): call NumberOpSymbol::getDataAttachments() for consistancy * numberOpSymbol.cc (getDataAttachments): handle NONE case gracefully 2004-06-07 Steven Eker * counterSymbol.cc (resetRules): call NumberOpSymbol::resetRules() (saveHiddenState): added (restoreHiddenState): added * counterSymbol.hh (class CounterSymbol): added decl for saveHiddenState() and restoreHiddenState(); added data member currentValueStack * counterSymbol.cc (reset): becomes resetRules() * counterSymbol.hh (class CounterSymbol): replace reset() decl with resetRules() decl 2004-06-03 Steven Eker * builtIn.hh: added decls for class RandomOpSymbol and class CounterSymbol * numberOpSymbol.hh: #include "gmpxx.h" * counterSymbol.hh: created * counterSymbol.cc: created 2004-06-02 Steven Eker * randomOpSymbol.hh (setGlobalSeed): added * randomOpSymbol.cc: created * randomOpSymbol.hh: created ===================================Maude84c=========================================== 2004-05-06 Steven Eker * ACU_NumberOpSymbol.cc (getDataAttachments): fixed bug where we were reporting our id hook as NumberOpSymbol * CUI_NumberOpSymbol.cc (getDataAttachments): fixed bug where we were reporting our id hook as NumberOpSymbol * numberOpSymbol.cc (eqRewrite): added more detailed CantHappen() message ===================================Maude84a=========================================== 2003-11-10 Steven Eker * stringOpSymbol.cc (getDataAttachments): fixed bug where we were returning NumberOpSymbol rather than StringOpSymbol 2003-11-06 Steven Eker * branchSymbol.cc (getDataAttachments): added (getTermAttachments): added * branchSymbol.hh (class BranchSymbol): added decls for getDataAttachments() and getTermAttachments() * equalitySymbol.cc (getDataAttachments): added (getTermAttachments): added * equalitySymbol.hh (class EqualitySymbol): added decls for getDataAttachments() and getTermAttachments() 2003-11-05 Steven Eker * floatOpSymbol.cc (getDataAttachments): added (getSymbolAttachments): added (getTermAttachments): added * stringOpSymbol.cc (getDataAttachments): added (getSymbolAttachments): added (getTermAttachments): added * stringOpSymbol.hh (class StringOpSymbol): added decls for getDataAttachments(), getSymbolAttachments(), getTermAttachments() * floatOpSymbol.hh (class FloatOpSymbol): added decls for getDataAttachments(), getSymbolAttachments(), getTermAttachments() * divisionSymbol.hh (class DivisionSymbol): added decls for getDataAttachments() and getSymbolAttachments() * divisionSymbol.cc (getDataAttachments): added (getSymbolAttachments): added * minusSymbol.cc (getDataAttachments): added * minusSymbol.hh (class MinusSymbol): added decl for getDataAttachments() * ACU_NumberOpSymbol.cc (getDataAttachments): added (getSymbolAttachments): added * ACU_NumberOpSymbol.hh (class ACU_NumberOpSymbol): added decls for getDataAttachments() and getSymbolAttachments() * CUI_NumberOpSymbol.cc (getDataAttachments): added (getSymbolAttachments): added * CUI_NumberOpSymbol.hh (class CUI_NumberOpSymbol): added decls for getDataAttachments() and getSymbolAttachments() * numberOpSymbol.cc (getDataAttachments): added (getSymbolAttachments): added (getTermAttachments): added * numberOpSymbol.hh (class NumberOpSymbol): added decls for getDataAttachments(), getSymbolAttachments(), getTermAttachments() * succSymbol.cc (getDataAttachments): added (getTermAttachments): added * bindingMacros.hh (APPEND_DATA): added * succSymbol.hh (class SuccSymbol): added decls for getDataAttachments() and getTermAttachments() * bindingMacros.hh (APPEND_TERM): added 2003-11-03 Steven Eker * bindingMacros.hh (APPEND_SYMBOL): added 2003-10-23 Steven Eker * equalitySymbol.hh (class EqualitySymbol): updated decl for EqualitySymbol() * equalitySymbol.cc (EqualitySymbol): don't take term args * branchSymbol.hh (class BranchSymbol): updated decl for BranchSymbol() * branchSymbol.cc (BranchSymbol): take nrArgs arg rather than term arg * equalitySymbol.hh (class EqualitySymbol): deleted decl for ~EqualitySymbol() * equalitySymbol.cc (~EqualitySymbol): deleted now we no longer need to prevent deep self destruction of equalTerm and notEqualTerm * branchSymbol.cc (~BranchSymbol): deepSelfDestruct() test terms 2003-10-15 Steven Eker * equalitySymbol.cc (attachData): added (copyAttachments): added (attachTerm): added * equalitySymbol.hh (class EqualitySymbol): added declarations for attachData(), attachTerm(), copyAttachments() 2003-10-14 Steven Eker * branchSymbol.cc (attachData): added (attachTerm): added (copyAttachments): added * branchSymbol.hh (class BranchSymbol): added declarations for attachData(), attachTerm(), copyAttachments() ===================================Maude83=========================================== 2003-07-28 Steven Eker * floatSymbol.cc: need to include mathStuff.hh 2003-07-25 Steven Eker * floatSymbol.cc: removed #include and #include * floatOpSymbol.cc: use mathStuff.hh 2003-07-16 Steven Eker * stringOpSymbol.hh: use ropeStuff.hh * stringDagNode.hh: use ropeStuff.hh * stringTerm.hh: use ropeStuff.hh ===================================Maude81=========================================== 2003-05-30 Steven Eker * equalitySymbol.cc (domainSortAlwaysLeqThan): added * equalitySymbol.hh (class EqualitySymbol): added decl for domainSortAlwaysLeqThan() * branchSymbol.cc (rangeSortNeverLeqThan): added (rangeSortAlwaysLeqThan): added (domainSortAlwaysLeqThan): added * branchSymbol.hh (class BranchSymbol): added decls for rangeSortNeverLeqThan(), rangeSortAlwaysLeqThan(), domainSortAlwaysLeqThan() 2003-05-15 Steven Eker * ACU_NumberOpSymbol.cc (eqRewrite2): fix bug in case that some args aren't numbers * ACU_NumberOpSymbol.hh (class ACU_NumberOpSymbol): added decl for eqRewrite2() * ACU_NumberOpSymbol.cc (eqRewrite2): added; do most of the work here to avoid a large stack frame for eqRewrite() (eqRewrite): use new reduceArgumentsAndNormalize() convention; use eqRewrite2() (eqRewrite2): use getACU_DagNode(), getArgument(), getMultiplicity() ===================================Maude80a=========================================== 2003-05-01 Steven Eker * floatDagNode.cc (overwriteWithClone): rewritten (makeClone): rewritten * stringDagNode.cc (overwriteWithClone): rewritten (makeClone): rewritten ===================================Maude80=========================================== 2003-02-25 Steven Eker * stringOpSymbol.cc (fwdFind): static_cast(start) to avoid NONE being converted to unsigned * succSymbol.cc: removed #pragma (makeNatTerm): updated Assert() (makeNatDag): updated Assert() (getNat): updated Assert()s (both versions) (rewriteToNat): updated Assert()s * succSymbol.hh: removed #pragma * stringTerm.cc: removed #pragma * stringTerm.hh: removed #pragma * stringSymbol.cc: removed #pragma * stringSymbol.hh: removed #pragma * stringOpSymbol.cc: removed #pragma (eqRewrite): updated Assert()s * stringOpSymbol.hh: removed #pragma * stringDagNode.cc: removed #pragma * stringDagNode.hh: removed #pragma * sortTestSymbol.cc: removed #pragma (eqRewrite): updated Assert() * sortTestSymbol.hh: removed #pragma * numberOpSymbol.cc: removed #pragma (eqRewrite): updated Assert()s * numberOpSymbol.hh: removed #pragma * minusSymbol.cc: removed #pragma (makeNegDag): updated Assert() (isNeg): updated Assert() (both versions) (getNeg): updated Assert() (both versions) * minusSymbol.hh: removed #pragma * floatTerm.cc: removed #pragma * floatTerm.hh: removed #pragma * floatSymbol.cc: removed #pragma * floatSymbol.hh: removed #pragma * floatOpSymbol.cc: removed #pragma (eqRewrite): updated Assert()s; Assert() -> CantHappen() (*2) * floatOpSymbol.hh: removed #pragma * floatDagNode.cc: removed #pragma * floatDagNode.hh: removed #pragma * equalitySymbol.cc: removed #pragma (eqRewrite): updated Assert() * equalitySymbol.hh: removed #pragma * divisionSymbol.cc: removed #pragma (eqRewrite): updated Assert()s (makeRatDag): updated Assert() (isRat): updated Assert() (both versions) (getRat): updated Assert()s (both versions) (makeRatTerm): updated Assert() * divisionSymbol.hh: removed #pragma * branchSymbol.cc: removed #pragma (fillInSortInfo): updated Assert()s (eqRewrite): updated Assert() (computeBaseSort): updated Assert() * branchSymbol.hh: removed #pragma * CUI_NumberOpSymbol.cc: removed #pragma (eqRewrite): updated Assert() * CUI_NumberOpSymbol.hh: removed #pragma * ACU_NumberOpSymbol.cc: removed #pragma (eqRewrite): updated Assert()s * ACU_NumberOpSymbol.hh: removed #pragma ===================================Maude79=========================================== 2003-01-08 Steven Eker * ACU_NumberOpSymbol.cc (eqRewrite): rewritten to avoid making use of ACU_DagNode; less efficient - need to revisit this once red-black stuff is working ===================================Maude76================================================== 2002-11-25 Steven Eker * stringDagNode.cc (StringDagNode): commented out Assert() to avoid accessing MemoryCell::Word * stringTerm.hh: added using namespace __gnu_cxx to for g++3.2 * stringDagNode.hh: added using namespace __gnu_cxx to for g++3.2 2002-11-05 Steven Eker * stringOpSymbol.cc (fwdFind): changed semantics for empty pattern case (revFind): changed smenatics for empty pattern case (fwdFind): fixed wrap around bug introduced when we optimized the tests in previous change; added comment since this is a bug we fixed on 2001-01-17 and them optimized away the fix 2002-10-22 Steven Eker * stringOpSymbol.cc (eqRewrite): removed Assert(false,...) that could be reached if 1st arg was bad; converted other Assert(false,...)s to CantHappen()s 2002-10-09 Steven Eker * ACU_NumberOpSymbol.cc (eqRewrite): added check for abort after redcuing arguments and before doing expensive eager numerical calculations. This partly fixes the slow abort problem but cascading ACU normalizations during an abort can still be expensive 2002-10-04 Steven Eker * branchSymbol.cc (stackArguments): only stack args that aren't frozen or unstackable ===================================Maude76================================================== 2002-09-04 Steven Eker * floatSymbol.hh (class FloatSymbol): added decl for isConstructor() * floatSymbol.cc (isConstructor): added * stringSymbol.hh (class StringSymbol): added decl for isConstructor() * stringSymbol.cc (isConstructor): added 2002-08-26 Steven Eker * stringSymbol.cc (compileOpDeclarations): use new getOpDeclarations() semantics * floatSymbol.cc (compileOpDeclarations): use new getOpDeclarations() semantics * branchSymbol.cc (fillInSortInfo): use new getOpDeclarations() semantics (computeBaseSort): use new getOpDeclarations() semantics ===================================Maude75================================================== 2002-07-25 Steven Eker * builtIn.hh: deleted forward decls for classes MachineIntegerSymbol, MachineIntegerTerm, MachineIntegerDagNode and MachineIntegerOpSymbol * stringOpSymbol.cc (StringOpSymbol): don't clear machineIntegerSymbol (attachSymbol): don't bind machineIntegerSymbol (copyAttachments): don't copy machineIntegerSymbol (eqRewrite): deleted machineInt operation (eqRewrite): deleted string operation for machineInts * stringOpSymbol.hh (class StringOpSymbol): deleted data member machineIntegerSymbol * floatOpSymbol.cc (FloatOpSymbol): don't clear machineIntegerSymbol (attachSymbol): don't bind machineIntegerSymbol (copyAttachments): don't copy machineIntegerSymbol (eqRewrite): deleted machineInt operation (eqRewrite): deleted float operation for machineInts * floatOpSymbol.hh (class FloatOpSymbol): deleted data member machineIntegerSymbol ===================================Maude74================================================== 2002-06-12 Steven Eker * floatOpSymbol.cc (eqRewrite): support float(Rat) operation 2002-06-11 Steven Eker * floatOpSymbol.hh (class FloatOpSymbol): added data members succSymbol, minusSymbol and divisionSymbol * floatOpSymbol.cc (attachSymbol): handle succSymbol, minusSymbol and divisionSymbol (copyAttachments): handle succSymbol, minusSymbol and divisionSymbol (FloatOpSymbol): clear succSymbol, minusSymbol and divisionSymbol (eqRewrite): support rat(Float) op * stringOpSymbol.cc (eqRewrite): use Uint for substr index and length; use fits_uint_p(), get_ui() and UINT_MAX (substring): we no longer allow -ve index (fwdFind): we no longer allow -ve start (revFind): we no longer allow -ve start * stringOpSymbol.hh (class StringOpSymbol): updated decls for substring(), fwdFind() and revFind() (class StringOpSymbol): make ropeToNumber() static * stringOpSymbol.cc (substring): Int64 -> crope::size_type (fwdFind): Int64 -> crope::size_type (revFind): Int64 -> crope::size_type * stringOpSymbol.hh (class StringOpSymbol): added decl for ropeToNumber() * stringOpSymbol.cc (ropeToNumber): added (eqRewrite): support string(Rat, Nat) and rat(String, Nat) ops 2002-06-10 Steven Eker * stringOpSymbol.hh (class StringOpSymbol): added data member divisionSymbol * stringOpSymbol.cc: MachineFloat -> Float (StringOpSymbol): clear divisionSymbol (attachSymbol): handle divisionSymbol * stringOpSymbol.hh (class StringOpSymbol): data member machineFloatSymbol becomes floatSymbol * machineFloatOpSymbol.cc: MachineFloat -> Float; becomes floatOpSymbol.cc * machineFloatOpSymbol.hh: MachineFloat -> Float; becomes floatOpSymbol.hh * machineFloatDagNode.cc: MachineFloat -> Float; becomes floatDagNode.cc * machineFloatDagNode.hh: MachineFloat -> Float; becomes floatDagNode.hh * machineFloatTerm.cc: MachineFloat -> Float; becomes floatTerm.cc * machineFloatTerm.hh: MachineFloat -> Float; becomes floatTerm.hh * machineFloatSymbol.cc: MachineFloat -> Float; becomes floatSymbol.cc * machineFloatSymbol.hh: MachineFloat -> Float; becomes floatSymbol.hh * stringOpSymbol.hh (class StringOpSymbol): added data member minusSymbol * stringOpSymbol.cc (eqRewrite): machineFloat op becomes float (eqRewrite): converted decFloat to use Ints (StringOpSymbol): clear minusSymbol (attachSymbol): handle minusSymbol (copyAttachments): handle minusSymbol 2002-06-07 Steven Eker * succSymbol.hh (class SuccSymbol): added decl for getSignedInt64() * succSymbol.cc (getSignedInt64): added * succSymbol.hh (class SuccSymbol): added decl for getSignedInt() * succSymbol.cc (getSignedInt): added 2002-06-06 Steven Eker * stringOpSymbol.cc (eqRewrite): use Nats for substr (eqRewrite): use Nats for find and rfind (eqRewrite): use Nats for char 2002-06-05 Steven Eker * stringOpSymbol.cc (StringOpSymbol): init succSymbol (attachSymbol): handle succSymbol (copyAttachments): copy succSymbol (eqRewrite): use Nats for length and ascii ops * stringOpSymbol.hh (class StringOpSymbol): added data member succSymbol ===================================Maude73================================================== 2002-06-03 Steven Eker * numberOpSymbol.cc (eqRewrite): handle -1^bignum, 0^bignum, 1^bignum and 0 << bignum 2002-05-23 Steven Eker * divisionSymbol.cc (isRat): added Term* version (getRat): added Term* version * divisionSymbol.hh (class DivisionSymbol): added decl for Term* versions of isRat() and getRat() * minusSymbol.cc (isNeg): added Term* version (getNeg): added Term* version * minusSymbol.hh (class MinusSymbol): added decls for Term* versions of isNeg() and getNeg() * divisionSymbol.cc (getRat): added (makeRatTerm): added 2002-05-22 Steven Eker * divisionSymbol.cc (eqRewrite): use succSymbol->rewriteToNat() * CUI_NumberOpSymbol.cc (eqRewrite): use succSymbol->rewriteToNat() * ACU_NumberOpSymbol.cc (eqRewrite): use succSymbol->rewriteToNat() * numberOpSymbol.cc (eqRewrite): use succSymbol->rewriteToNat() * succSymbol.hh (class SuccSymbol): added decl for rewriteToNat() * succSymbol.cc (rewriteToNat): added * divisionSymbol.cc (eqRewrite): added optimization to avoid trying to simplify the same rational twice 2002-05-21 Steven Eker * divisionSymbol.cc: (isRat) don't treat 0 / NzNat as a Rat (eqRewrite): use isRat(); no longer try to simplify 0 / NzNat since it is not in ctor form. (eqRewrite): use makeRatDag() * minusSymbol.cc (isNeg): don't treat - 0 as neg since some caller expect to find a SuccSymbol under the MinusSymbol in the true case. * builtIn.hh: added fwd decl for class DivisionSymbol * divisionSymbol.hh: created * divisionSymbol.cc: created 2002-05-20 Steven Eker * minusSymbol.hh (class MinusSymbol): added decl for makeIntTerm() * minusSymbol.cc (makeIntTerm): added * succSymbol.cc (makeNatTerm): put more info in Assert() 2002-05-17 Steven Eker * numberOpSymbol.cc (eqRewrite): added abs operation * minusSymbol.cc (attachData): convert MinusSymbol attachment into NumberOpSymbol attachment * ACU_NumberOpSymbol.cc (attachSymbol): use MinusSymbol* (copyAttachments): use MinusSymbol* * ACU_NumberOpSymbol.hh (class ACU_NumberOpSymbol): minusSymbol now has type MinusSymbol* * numberOpSymbol.cc (copyAttachments): use MinusSymbol* * minusSymbol.hh: created * minusSymbol.cc: created * builtIn.hh: added fwd decl for MinusSymbol * numberOpSymbol.cc (makeNegDag): deleted (isNeg): deleted (getNeg): deleted (attachSymbol): use MinusSymbol* * numberOpSymbol.hh (getSuccSymbol): added (class NumberOpSymbol): minusSymbol now has type MinusSymbol* 2002-05-16 Steven Eker * numberOpSymbol.cc (eqRewrite): rewritten to handle -ve Ints * numberOpSymbol.hh (class NumberOpSymbol): updated decls * numberOpSymbol.cc (makeIntDag): becomes makeNegDag(); simplified for -ve case * ACU_NumberOpSymbol.cc (eqRewrite): use isNeg(), getNeg() and makeNegDag() * numberOpSymbol.cc (getInt): becomes getNeg(); simplified for -ve case (isInt): becomes isNeg(); simplified for -ve case * ACU_NumberOpSymbol.cc (eqRewrite): rewritten using isInt(), getInt() and makeIntDag() * numberOpSymbol.cc (makeIntDag): added (isInt): added (getInt): added * numberOpSymbol.hh (class NumberOpSymbol): added decls for makeIntDag(), isInt(), getInt() 2002-05-15 Steven Eker * numberOpSymbol.cc (eqRewrite): fix bad CODE for quo * CUI_NumberSymbol.hh: created * CUI_NumberSymbol.cc: created 2002-05-14 Steven Eker * numberOpSymbol.cc (eqRewrite): added div, mod, gcd, lcm, ^, << and >> cases (eqRewrite): have >> case work correctly even for extreme values of 2nd arg (eqRewrite): added - and modular exponent cases (eqRewrite): div becomes quo (eqRewrite): added divides case 2002-05-13 Steven Eker * ACU_NumberOpSymbol.cc (eqRewrite): updated usedMultiplicity (attachData): fixed bug where we were looking for hook named NumberOpSymbol rather than ACU_NumberOpSymbol (eqRewrite): handle the high multiplicity case for * (eqRewrite): added gcd and lcm cases (eqRewrite): fixed bug in xor case (eqRewrite): handle the case where >= 2 but not all of the args are numbers 2002-05-10 Steven Eker * builtIn.hh: added fwd decl for ACU_NumberOpSymbol * ACU_NumberOpSymbol.hh: created * ACU_NumberOpSymbol.cc: created 2002-05-09 Steven Eker * succSymbol.hh (class SuccSymbol): added decl for attachData() * succSymbol.cc (attachData): added in order to deal with null data attach * bindingMacros.hh (NULL_DATA): added * numberOpSymbol.hh: created * numberOpSymbol.cc: created * builtIn.hh: added forwards decls for SuccSymbol and NumberOpSymbol * succSymbol.hh: created * succSymbol.cc: created ===================================Maude72================================================== 2002-02-05 Steven Eker * stringOpSymbol.hh (class StringOpSymbol): deleted static data member eagerStrategy * stringOpSymbol.cc (StringOpSymbol): deleted strategy argument passed to FreeSymbol() * sortTestSymbol.hh (class SortTestSymbol): deleted static data member eagerStrategy * sortTestSymbol.cc (SortTestSymbol): use standard instead of eagerStrategy * machineIntegerOpSymbol.hh (class MachineIntegerOpSymbol): deleted static data member eagerStrategy * machineIntegerOpSymbol.cc (MachineIntegerOpSymbol): deleted strategy argument passed to FreeSymbol() * machineFloatOpSymbol.hh (class MachineFloatOpSymbol): deleted static data member eagerStrategy * machineFloatOpSymbol.cc (MachineFloatOpSymbol): deleted strategy argument passed to FreeSymbol() * branchSymbol.hh (class BranchSymbol): deleted static data member eagerStrategy * branchSymbol.cc (BranchSymbol): deleted strategy argument passed to FreeSymbol() 2002-01-30 Steven Eker * stringTerm.hh: ifdef LIBv3 for libstdc++-v3 * stringDagNode.hh: ifdef LIBv3 for libstdc++-v3 * stringOpSymbol.hh: ifdef LIBv3 for libstdc++-v3 ===================================Maude70================================================== 2002-01-25 Steven Eker * stringOpSymbol.cc (eqRewrite): undid hack because it doesn't work - for unknown reasons; reverted to old library (eqRewrite): redid hack; fixed \0 termination bug in second copy of hack 2002-01-24 Steven Eker * stringOpSymbol.cc (eqRewrite): fixed bug where we weren't \0 terminating our temporary C-string copy of left arg rope; bug was introduced by hack below 2001-12-10 Steven Eker * stringDagNode.hh: #include -> #include * stringOpSymbol.cc (eqRewrite): added hacks to get around the problem of Rope::c_str() not working in libstdc++-v3 * stringTerm.hh: #include -> #include ===================================Maude69================================================== 2001-03-16 Steven Eker * stringOpSymbol.cc (rewriteToString): incrementCount() -> incrementEqCount() * sortTestSymbol.cc (eqRewrite): incrementCount() -> incrementEqCount() * machineIntegerOpSymbol.cc (eqRewrite): simplified using rewriteToMachineInteger() * machineIntegerSymbol.cc (rewriteToMachineInteger): incrementCount() -> incrementEqCount() * machineFloatSymbol.cc (rewriteToMachineFloat): incrementCount() -> incrementEqCount() 2001-03-08 Steven Eker * branchSymbol.hh (class BranchSymbol): added decl for stackArguments() * branchSymbol.cc (stackArguments): added ===================================Engine65================================================== 2001-02-16 Steven Eker * stringOpSymbol.cc (eqRewrite): put result of left + right in a local variable for safety (eqRewrite): put result of int64ToString() into a local variable for safety (eqRewrite): use safeCast() for down casting in many places 2001-02-12 Steven Eker * bindingMacros.hh (BIND_OP): return true in op == t case 2001-01-19 Steven Eker * stringOpSymbol.cc (attachData): simplified using BIND_OP; call FreeSymbol::attachData() (attachSymbol): call FreeSymbol::copyAttachments() (attachTerm): don't self destruct term; call FreeSymbol::attachTerm() (copyAttachments): simplified using COPY_SYMBOL and COPY_TERM; call FreeSymbol::copyAttachments() * machineFloatOpSymbol.cc (attachData): simplified using BIND_OP; call FreeSymbol::attachData() (attachSymbol): call FreeSymbol::copyAttachments() (attachTerm): don't self destruct term; call FreeSymbol::attachTerm() (copyAttachments): simplified using COPY_SYMBOL and COPY_TERM; call FreeSymbol::copyAttachments() * machineIntegerOpSymbol.cc (attachData): simplified using BIND_OP; call FreeSymbol::attachData() * bindingMacros.hh (BIND_OP): added (BIND_OP): added * machineIntegerOpSymbol.cc (copyAttachments): simplified using COPY_SYMBOL and COPY_TERM (copyAttachments): call FreeSymbol::copyAttachments() (attachTerm): don't self destruct term; call FreeSymbol::attachTerm() (attachSymbol): call FreeSymbol::attachSymbol() * bindingMacros.hh (COPY_SYMBOL): added (COPY_TERM): added 2001-01-17 Steven Eker * stringOpSymbol.cc (fwdFind): protect against wrap-around when start is close to the maximum 64 signed int (substring): protect against wrap-around when length or index are close to the minimum 64 signed int;protect against wrap-around when length is close to the maximum 64 signed int * machineFloatOpSymbol.cc (postInterSymbolPass): simplified using PREPARE_TERM() * machineIntegerOpSymbol.cc (postInterSymbolPass): simplified using PREPARE_TERM() * stringOpSymbol.cc (postInterSymbolPass): simplified using PREPARE_TERM() * bindingMacros.hh (PREPARE_TERM): added 2001-01-12 Steven Eker * machineFloatOpSymbol.hh (class MachineFloatOpSymbol): deleted decls for fixUp() and copyFixUp() * machineFloatOpSymbol.cc (fixUp): deleted (copyFixUp): deleted (attachSymbol): simplified using BIND_SYMBOL() (attachTerm): simplified using BIND_TERM(); self-destruct term in the case we don't recognize purpose * stringOpSymbol.hh (class StringOpSymbol): deleted decls for fixUp() and copyFixUp() * machineIntegerOpSymbol.cc (attachTerm): self-destruct term in the case we don't recognize purpose * stringOpSymbol.cc (attachSymbol): simplified using BIND_SYMBOL() (attachTerm): simplified using BIND_TERM(); self-destruct term in the case we don't recognize purpose so that when we return false caller knows they don't have to garbage collect term (fixUp): deleted (copyFixUp): deleted * machineIntegerOpSymbol.hh (class MachineIntegerOpSymbol): deleted decls for fixUp() and copyFixUp() * bindingMacros.hh (BIND_SYMBOL): created * machineIntegerOpSymbol.cc (fixUp): deleted (copyFixUp): deleted (attachSymbol): simplified using BIND_SYMBOL() (attachTerm): simplified using BIND_TERM() 2001-01-10 Steven Eker * stringOpSymbol.cc (StringOpSymbol): initialize op, stringSymbol, machineIntegerSymbol, machineFloatSymbol, decFloatSymbol (attachData): added (attachSymbol): added (attachTerm): added (copyAttachments): added * machineFloatOpSymbol.cc (MachineFloatOpSymbol): initialize op, machineFloatSymbol, machineIntegerSymbol (attachData): added (attachSymbol): added (attachTerm): added (copyAttachments): added * machineFloatOpSymbol.hh (class MachineFloatOpSymbol): added decls for attachData(), attachSymbol(), attachTerm(), copyAttachments() * machineIntegerOpSymbol.cc (attachData): added purpose arg * machineIntegerOpSymbol.hh (class MachineIntegerOpSymbol): added purpose argument to attachData() decl 2001-01-09 Steven Eker * machineIntegerOpSymbol.cc (MachineIntegerOpSymbol): initialize op = NONE and machineIntegerSymbol = 0 (attachTerm): handle the case where we are handed multiple terms with the same purpose - ok if they are equal, error otherwise * machineIntegerOpSymbol.hh (class MachineIntegerOpSymbol): added declarations for attachData(), attachSymbol(), attachTerm(), copyAttachments() * machineIntegerOpSymbol.cc (attachData): added (attachTerm): added (attachSymbol): added (copyAttachments): added ===================================Engine64================================================== 2000-06-21 Steven Eker * machineFloatOpSymbol.cc (eqRewrite): check for wrap around in float to int conversion (happens on alpha and linux with -O2) * machineFloatOpSymbol.hh (class MachineFloatOpSymbol): added decl for use safePow() * machineFloatOpSymbol.cc (safePow): added (eqRewrite): use safePow() 2000-06-20 Steven Eker * machineFloatOpSymbol.cc (eqRewrite): define +/-Infinity ^ X properly (eqRewrite): check arguments to asin and acos (eqRewrite): define atan2(+/-Infinity, +/-Infinity) * machineFloatOpSymbol.hh (class MachineFloatOpSymbol): added decl for isOdd() * machineFloatOpSymbol.cc (eqRewrite): fix pow() again (we had it wrong the first time) (isOdd): added (eqRewrite): define -Infinity ^ X properly (eqRewrite): use isOdd 2000-06-19 Steven Eker * stringOpSymbol.cc (fixUp): save decFloatSymbol (copyFixUp): copy decFloatSymbol * stringOpSymbol.hh (class StringOpSymbol): added data member decFloatSymbol (class StringOpSymbol): upaded decl for fixUp() * stringOpSymbol.cc (eqRewrite): implemented decFloat operation 2000-06-14 Steven Eker * machineFloatOpSymbol.cc (eqRewrite): check for errno != 0 and NaN in result (eqRewrite): don't check for errno != 0 after all: solaris sets this for log(0) and pow() overflows whereas linux does not. Instead we check the inputs to functions whose output in extreme cases varies between platforms (eqRewrite): fix pow() result in the case that first arg is -ve and pow() produces wrongly sign result; goto failure if sign cannot be reliably determined 2000-06-13 Steven Eker * machineFloatTerm.cc (MachineFloatTerm): don't allow -0.0 to be stored * machineFloatDagNode.cc (MachineFloatDagNode): don't allow -0.0 to be stored * stringOpSymbol.cc (fixUp): store machineFloatSymbol (copyFixUp): copy machineFloatSymbol (eqRewrite): added code for MachineFloat <-> String * stringOpSymbol.hh (class StringOpSymbol): added data member machineFloatSymbol; updated decl for ctor 2000-06-12 Steven Eker * machineFloatOpSymbol.cc (eqRewrite): use rewriteToMachineFloat() (eqRewrite): handle machine integer to machine float conversion * machineFloatSymbol.hh (class MachineFloatSymbol): added decl for rewriteToMachineFloat() * machineFloatSymbol.cc (rewriteToMachineFloat): added * stringOpSymbol.hh (class StringOpSymbol): deleted decl for rewriteToMachineInteger() * stringOpSymbol.cc (eqRewrite): use MachineIntegerSymbol::rewriteToMachineInteger() (3 places) (rewriteToMachineInteger): deleted * machineFloatOpSymbol.cc (eqRewrite): support machine float to machine integer conversion * machineIntegerSymbol.hh (class MachineIntegerSymbol): added decl for rewriteToMachineInteger() * machineIntegerSymbol.cc (rewriteToMachineInteger): added * machineFloatOpSymbol.cc (fixUp): save machineIntegerSym (copyFixUp): copy machineIntegerSym * machineFloatOpSymbol.hh (class MachineFloatOpSymbol): added data member machineIntegerSymbol; updated decl for fixUp() 2000-06-09 Steven Eker * machineIntegerSymbol.cc (fillInSortInfo): use getValue() rather than isZero() * machineIntegerTerm.hh (isZero): deleted * machineFloatOpSymbol.hh: created * machineFloatOpSymbol.cc: created * machineFloatTerm.cc: created * machineFloatTerm.hh: created * builtIn.hh: added forward decls for MachineFloat classes * machineFloatDagNode.cc: created * machineFloatSymbol.cc: created * machineFloatDagNode.hh: created * machineFloatSymbol.hh: created 2000-05-16 Steven Eker * stringOpSymbol.cc (eqRewrite): parse becomes machineInt, format becomes string 2000-05-09 Steven Eker * stringOpSymbol.cc (eqRewrite): add code for format and parse operations 2000-04-25 Steven Eker * stringOpSymbol.cc (eqRewrite): added functionality for char() and ascii() ops * builtIn.hh: added forward decls for class StringSymbol, class StringTerm, class StringDagNode, class StringOpSymbol * stringOpSymbol.cc (fixUp): take StringSymbol* arg (copyFixUp): cast to StringSymbol* * stringOpSymbol.hh (class StringOpSymbol): updated fixUp() decl (class StringOpSymbol): stringSymbol becomes a StringSymbol* * stringDagNode.cc (StringDagNode): take StringSymbol* arg (overwriteWithClone): cast to StringSymbol* (makeClone): cast to StringSymbol* * stringDagNode.hh (class StringDagNode): updated decl for StringDagNode() * stringTerm.cc (StringTerm): take StringSymbol* arg (deepCopy2): cast to StringSymbol* (overwriteWithDagNode): cast to StringSymbol* (makeDagNode): cast to StringSymbol* * stringTerm.hh (class StringTerm): updated decl for StringTerm() * stringSymbol.hh: created * stringSymbol.cc: created 2000-04-24 Steven Eker * stringDagNode.cc (StringDagNode): call setCallDtor() so that crope can be destructed on garbage collection 2000-04-12 Steven Eker * stringOpSymbol.cc (substring): return crope rather than const crope& * stringOpSymbol.hh (class StringOpSymbol): substring() must return crope rather than const crope& 2000-04-11 Steven Eker * stringOpSymbol.cc: created * stringOpSymbol.hh: created 2000-04-10 Steven Eker * stringDagNode.cc: created * stringDagNode.hh: created 2000-04-07 Steven Eker * stringTerm.cc: created * stringTerm.hh: created ===================================Maude 1.0.5 finished======================================= 2000-03-14 Steven Eker * branchSymbol.cc (computeBaseSort): code cleaning ===================================Engine56================================================== 2000-01-28 Steven Eker * equalitySymbol.cc (generateCode): call generateIncrement() (generateCode): don't call generateIncrement() after all as generateRhs() does so 2000-01-27 Steven Eker * equalitySymbol.hh (class EqualitySymbol): added decl for generateCode() * equalitySymbol.cc (generateCode): added ===================================Engine54================================================== 1999-10-29 Steven Eker * machineIntegerDagNode.cc (getHashValue): cast to int before hashing * machineIntegerTerm.cc (normalize): cast to int before hashing * machineIntegerDagNode.cc (MachineIntegerDagNode): int -> Int64 * machineIntegerDagNode.hh (class MachineIntegerDagNode): int -> Int64 * machineIntegerOpSymbol.cc (eqRewrite): specialEval becomes a bool; int -> Int64 * machineIntegerTerm.cc (MachineIntegerTerm): int -> Int64 (compareArguments): (both versions) int -> Int64 * machineIntegerTerm.hh (class MachineIntegerTerm): int -> Int64 (getValue): int -> Int64 ===================================Engine53================================================== 1999-10-25 Steven Eker * sortTestSymbol.cc (eqRewrite): updated call to tracePreEqRewrite() * machineIntegerOpSymbol.cc (eqRewrite): updated call to tracePreEqRewrite() 1999-10-19 Steven Eker * machineIntegerDagNode.cc (getHashValue): added * machineIntegerDagNode.hh (class MachineIntegerDagNode): added decl for getHashValue() 1999-10-14 Steven Eker * sortTestSymbol.cc (eqRewrite): call constrainToExactSort(t, context); ===================================Engine52================================================== 1999-04-26 Steven Eker * branchSymbol.cc (compileSortConstraints): deleted (compileEquations): deleted (fillInSortInfo): added extra assert for component of 2nd arg * branchSymbol.hh (class BranchSymbol): deleted decls for compileEquations() and compileSortConstraints() * branchSymbol.cc (eqRewrite): call FreeSymbol::eqRewrite(subject, context) if we can't match 1st arg * sortTestSymbol.cc (makeLazyStrategy): made lazyStrategy a local static (fillInSortInfo): deleted (computeBaseSort): deleted (compileOpDeclarations): deleted (compileSortConstraints): deleted (acceptEquation): added * sortTestSymbol.hh (class SortTestSymbol): added decl for acceptEquation(); deleted decls for fillInSortInfo(), computeBaseSort(), compileOpDeclarations(), compileSortConstraints() (makeLazyStrategy): moved to sortTestSymbol.cc * equalitySymbol.cc (computeBaseSort): deleted (compileOpDeclarations): deleted (compileSortConstraints): deleted; fixes nasty bug where we dump core on uncompiled sort constraints (fillInSortInfo): deleted (acceptEquation): added * equalitySymbol.hh (class EqualitySymbol): added decl for acceptEquation(); deleted decls for fillInSortInfo(), computeBaseSort(), compileOpDeclarations(), compileSortConstraints() 1999-04-22 Steven Eker * machineIntegerSymbol.cc (compileOpDeclarations): don't do default sort processing anymore since rangeComponent() and domainComponent() no longer require this 1999-04-20 Steven Eker * equalitySymbol.cc (fillInSortInfo): use correct arg of op decl (computeBaseSort): use correct arg of op decl (fillInSortInfo): use domainComponent() in asserts * branchSymbol.cc (fillInSortInfo): use domainComponent() * branchSymbol.hh (class BranchSymbol): deleted data members expectedSort and range (class BranchSymbol): updated decl for ctor (class BranchSymbol): deleted decls for rangeComponent() and domainComponent() * branchSymbol.cc (rangeComponent): deleted; default will now work (domainComponent): deleted; default will now work (BranchSymbol): don't take range arg or initialize range (computeBaseSort): use (default) rangeComponent() rather than range data member (computeBaseSort): use getOpDeclarations() rather than expectedSort (fillInSortInfo): use getOpDeclarations() rather than expectedSort (BranchSymbol): don't take testSort arg or initialize expectedSort * equalitySymbol.hh (class EqualitySymbol): delete rangeSort and argComponent data members (class EqualitySymbol): delete obsolete strategy stuff (class EqualitySymbol): update ctor decl (class EqualitySymbol): deleted decls for rangeComponent() and domainComponent() * equalitySymbol.cc (domainComponent): deleted; default will now work (rangeComponent): deleted; default will now work (EqualitySymbol): don't take or initialize argComponent (fillInSortInfo): use getOpDeclarations() rather than rangeSort (fillInSortInfo): split Assert to check both args against op decl (computeBaseSort): use getOpDeclarations() rather than rangeSort (EqualitySymbol): don't initialize range sort or take resultSort arg * sortTestSymbol.hh (class SortTestSymbol): deleted rangeSort data member (class SortTestSymbol): updated ctor decl (class SortTestSymbol): deleted decls for rangeComponent() and domainComponent() * sortTestSymbol.cc (rangeComponent): (instance version) deleted (fillInSortInfo): use getOpDeclarations() rather than rangeSort (computeBaseSort): use getOpDeclarations() rather than rangeSort (rangeComponent): deleted; default will now work (domainComponent): deleted; default will now work (SortTestSymbol): don't initialize rangeSort; don't take resultSort arg * sortTestSymbol.hh (class SortTestSymbol): deleted decl for rangeComponent() instance version * branchSymbol.cc (rangeComponent): (instance version) deleted (computeBaseSort): don't use (instance version) rangeComponent() * branchSymbol.hh (class BranchSymbol): deleted decl for rangeComponent() instance version * equalitySymbol.cc (rangeComponent): (instance version) deleted * equalitySymbol.hh (class EqualitySymbol): deleted decl for rangeComponent() instance version * machineIntegerDagNode.cc (specialPrint): deleted * machineIntegerDagNode.hh (class MachineIntegerDagNode): decl for specialPrint() * machineIntegerTerm.cc (specialPrint): deleted * machineIntegerTerm.hh (class MachineIntegerTerm): deleted decl for specialPrint() 1999-04-19 Steven Eker * branchSymbol.cc: use equal() rather than compare() for checking 1st arg against test terms * equalitySymbol.cc (eqRewrite): call computeTrueSort() on bith args inorder to force normalization; we don't actually use the sorts; this fixes a bug that we shared with OBJ3 === op ===================================Engine48================================================== ===================================Maude 1.0.2 released======================================= ===================================Maude 1.0.1 released======================================= 1999-02-27 Steven Eker * branchSymbol.cc (fillInSortInfo): fixed bad Assert() test ===================================VectorExperiment========================================== 1999-02-04 Steven Eker * sortTestSymbol.cc (parse): deleted (fillInSortInfo): added * sortTestSymbol.hh (class SortTestSymbol): deleted decl for parse(); added decl for fillInSortInfo() * equalitySymbol.cc (parse): deleted (fillInSortInfo): added * equalitySymbol.hh (class EqualitySymbol): deleted decl for parse(); added decl for fillInSortInfo() * machineIntegerSymbol.cc (parse): deleted (fillInSortInfo): added * machineIntegerSymbol.hh (class MachineIntegerSymbol): deleted decl for parse(); added decl for fillInSortInfo() * branchSymbol.cc (parse): deleted (fillInSortInfo): added * branchSymbol.hh (class BranchSymbol): deleted decl for parse(); added decl for fillInSortInfo() ===================================Engine47================================================== ===================================Maude 1.00 released======================================= 1999-01-22 Steven Eker * branchSymbol.cc (BranchSymbol): don't delete TestTerms for the moment - another HACK * equalitySymbol.hh (class EqualitySymbol): added decl for ~EqualitySymbol() * equalitySymbol.cc (~EqualitySymbol): added so we can zero out terms in CachedDags to avoid them being deep self destructed; this is a hack - need to find a better solution after release. * branchSymbol.cc (BranchSymbol): use deep copy rather than loop =================================Engine46================================================== Sun Dec 13 16:44:05 1998 Steven Eker * machineIntegerOpSymbol.cc (copyFixUp): fixed bug where we we setting trueTerm twice and not setting falseTerm Thu Dec 10 14:33:33 1998 Steven Eker * sortTestSymbol.cc (rangeComponent): added (no args version) (domainComponent): added * sortTestSymbol.hh (class SortTestSymbol): added decls for rangeComponent() (no args version) and domainComponent() * branchSymbol.cc (domainComponent): added (rangeComponent): added (no args version) (BranchSymbol): handle range arg * branchSymbol.hh (class BranchSymbol): added decls for rangeComponent() (no args version) and domainComponent() (class BranchSymbol): added range arg to ctor (class BranchSymbol): added range data member * equalitySymbol.hh (class EqualitySymbol): added data member argComponent; deleted data member eagerFlag * equalitySymbol.cc (EqualitySymbol): handle argComponent (rangeComponent): added (no args version) (domainComponent): added * equalitySymbol.hh (class EqualitySymbol): added decls for rangeComponent() (no args version) and domainComponent() (class EqualitySymbol): added argComponent arg to ctor Tue Dec 8 11:45:16 1998 Steven Eker * machineIntegerOpSymbol.hh (getFalseTerm): deleted (getTrueTerm): deleted (getMachineIntegerSymbol): deleted (getOp): deleted (class MachineIntegerOpSymbol): updated decls * machineIntegerOpSymbol.cc (copyFixUp): replaces new version of fixUp() Mon Dec 7 11:44:21 1998 Steven Eker * machineIntegerOpSymbol.hh (class MachineIntegerOpSymbol): added decl for new version of fixUp() * machineIntegerOpSymbol.cc (fixUp): added 2nd version that takes an op code rather than a name * machineIntegerOpSymbol.hh (getOp): added (getMachineIntegerSymbol): added (getTrueTerm): added (getFalseTerm): added =================================Engine44================================================== Wed Nov 25 17:22:39 1998 Steven Eker * sortTestSymbol.cc (eqRewrite): call traceAbort() * machineIntegerOpSymbol.cc (eqRewrite): return result of builtInReplace() since this may now be false in abort case (eqRewrite): call traceAbort() in the case that our result is a in place construction of a MachineIntegerDagNode * branchSymbol.cc (eqRewrite): return result of builtInReplace() since this may now be false in abort case * equalitySymbol.cc (eqRewrite): return result of builtInReplace() since this may now be false in abort case Mon Nov 16 10:13:54 1998 Steven Eker * branchSymbol.cc (eqRewrite): simplified using RewritingContext::builtInReplace() * machineIntegerOpSymbol.cc (eqRewrite): simplified using RewritingContext::builtInReplace() * equalitySymbol.cc (eqRewrite): simplified using RewritingContext::builtInReplace() * machineIntegerOpSymbol.cc (eqRewrite): use getTraceStatus() instead of traceStatus() * sortTestSymbol.cc (eqRewrite): use getTraceStatus() instead of traceStatus() * equalitySymbol.cc (eqRewrite): use getTraceStatus() instead of traceStatus() * branchSymbol.cc (eqRewrite): use getTraceStatus() instead of traceStatus() Fri Nov 6 16:30:22 1998 Steven Eker * machineIntegerTerm.cc (deepCopy): -> deepCopy2() * machineIntegerTerm.hh (class MachineIntegerTerm): deepCopy() -> deepCopy2() =================================Engine43================================================== Thu Oct 15 14:58:33 1998 Steven Eker * machineIntegerOpSymbol.cc: becomes postInterSymbolPass() (postInterSymbolPass): use CachedDag::normalize() and prepare() * machineIntegerOpSymbol.hh (class MachineIntegerOpSymbol): interSymbolPass() decl becomes postInterSymbolPass() decl * equalitySymbol.hh (class EqualitySymbol): interSymbolPass() decl becomes postInterSymbolPass() decl * equalitySymbol.cc (interSymbolPass): becomes postInterSymbolPass() (postInterSymbolPass): use CachedDag::normalize() and prepare() Wed Oct 14 11:23:44 1998 Steven Eker * machineIntegerOpSymbol.hh (class MachineIntegerOpSymbol): deleted decl for dtor * machineIntegerOpSymbol.cc (MachineIntegerOpSymbol): simplified (~MachineIntegerOpSymbol): deleted (interSymbolPass): use CachedDag::getTerm() and setTerm() (reset): use CachedDag::reset() (fixUp): use CachedDag::setTerm() (eqRewrite): simplified using CachedDag::getDag() * machineIntegerOpSymbol.hh (class MachineIntegerOpSymbol): use CachedDag rather than DagRoot and Term* * equalitySymbol.hh (class EqualitySymbol): deleted decl for dtor * equalitySymbol.cc (EqualitySymbol): use CachedDag ctor (~EqualitySymbol): deleted (default will do) (reset): use CachedDag::reset() (eqRewrite): simplified using CachedDag::getDag() (interSymbolPass): use CachedDag::getTerm() and setTerm() * equalitySymbol.hh (class EqualitySymbol): use CachedDag rather than DagRoot and Term* =================================Engine42================================================== Thu Oct 8 14:35:23 1998 Steven Eker * machineIntegerDagNode.cc (compareArguments): added const * machineIntegerTerm.cc (compareArguments): (DagNode* version) inserted const (compareArguments): (Term* version) inserted const =================================Engine41================================================== Fri Sep 18 17:07:45 1998 Steven Eker * branchSymbol.cc (parse): use new setSortInfo() conventions, ConnectedComponent::getLeqSorts(), findIndex() (computeBaseSort): use setSortIndex(), ConnectedComponent::getLeqSorts(), findIndex() * equalitySymbol.cc (parse): use new setSortInfo() convention (computeBaseSort): se setSortIndex() * sortTestSymbol.cc (parse): use new setSortInfo() convention (eqRewrite): use DagNode::leq() (computeBaseSort): use setSortIndex() * machineIntegerSymbol.cc (parse): use new setSortInfo() convention (computeBaseSort): use setSortIndex() Fri Sep 11 18:31:56 1998 Steven Eker * sortTestSymbol.cc (eqRewrite): use <=(DagNode*,Sort&) Fri Jul 31 15:34:46 1998 Steven Eker * machineIntegerTerm.hh (class MachineIntegerTerm): added decl for getValue() (getValue): added Wed Jul 29 14:33:30 1998 Steven Eker * machineIntegerSymbol.cc (compileOpDeclarations): need to do default processing in order for rangeComponent() to work * machineIntegerSymbol.hh (class MachineIntegerSymbol): deletede decl for fixUp() * machineIntegerSymbol.cc (compileOpDeclarations): added (fixUp): deleted * machineIntegerSymbol.hh (class MachineIntegerSymbol): added decl for compileOpDeclarations(); Tue Jul 21 10:51:19 1998 Steven Eker * machineIntegerOpSymbol.cc (eqRewrite): use Terms and DagRoots rather than symbols for true/false results * machineIntegerOpSymbol.hh (class MachineIntegerOpSymbol): added data members trueDag and falseDag * machineIntegerOpSymbol.cc (~MachineIntegerOpSymbol): added (interSymbolPass): added (reset): added * machineIntegerOpSymbol.hh (class MachineIntegerOpSymbol): deleted decl for setSymbols(); added decl for fixUp(); updated decl for ctor (class MachineIntegerOpSymbol): trueSymbol -> trueTerm; falseSymbol -> falseTerm (class MachineIntegerOpSymbol): added decl for dtor; interSymbolPass() and reset() * machineIntegerOpSymbol.cc (fixUp): added (setSymbols): deleted (MachineIntegerOpSymbol): now just take name and arity * machineIntegerSymbol.hh (class MachineIntegerSymbol): updated ctor decl; added decl for fixUp(); * machineIntegerSymbol.cc (fixUp): added (MachineIntegerSymbol): so longer set sort info or pass it to NA_Symbol() * machineIntegerTerm.hh (class MachineIntegerTerm): added * machineIntegerTerm.cc (deepCopy): added Fri Jul 17 10:16:13 1998 Steven Eker * equalitySymbol.cc (EqualitySymbol): rewritten (~EqualitySymbol): added (interSymbolPass): added (reset): added (eqRewrite): obey general FreeSymbol strategy (eqRewrite): generate result DagNode and use overwriteWithClone() (eqRewrite): don't copy sort info when making dag * equalitySymbol.hh (class EqualitySymbol): deleted data members equalResult, notEqualResult and eager flag; added data members equalTerm, notEqualTerm, equalDag, notEqualDag (class EqualitySymbol): added decls for interSymbolPass() and reset() (class EqualitySymbol): take strategy arg rather than eager arg; args eq and neq become Term* (makeLazyStrategy): deleted (class EqualitySymbol): deleted decl for makeLazyStrategy() and static members eagerStrategy and lazyStrategy =================================Engine39================================================== Tue Jul 7 17:41:16 1998 Steven Eker * machineIntegerOpSymbol.hh (class MachineIntegerOpSymbol): added decl for setSymbols() * machineIntegerOpSymbol.cc (MachineIntegerOpSymbol): no longer initialize symbol pointers like constants (setSymbols): added * machineIntegerOpSymbol.hh (class MachineIntegerOpSymbol): removed const from symbol pointers to allow them to be initialized later; added defualt value of 0 for machineIntegerSymbol so we can call ctor without supplying necessary symbols Wed Jun 10 18:23:46 1998 Steven Eker * machineIntegerTerm.hh (class MachineIntegerTerm): updated normalize() decl * machineIntegerTerm.cc (normalize): clear changed flag =================================Engine38================================================== Fri Feb 13 14:42:16 1998 Steven Eker * branchSymbol.cc (~BranchSymbol): added to self destruct test terms * branchSymbol.hh (class BranchSymbol): added decl for ~BranchSymbol(); Thu Feb 12 14:51:37 1998 Steven Eker * equalitySymbol.cc (eqRewrite): compare() == 0 changed to equal() =================================Engine35================================================== Thu Dec 4 14:30:33 1997 Steven Eker * machineIntegerOpSymbol.cc (MachineIntegerOpSymbol): don't pass inert arg to FreeSymbol() * sortTestSymbol.cc (SortTestSymbol): don't pass inert arg to FreeSymbol() * equalitySymbol.cc (EqualitySymbol): don't pass inert arg to FreeSymbol() * branchSymbol.cc (BranchSymbol): don't pass inert arg to FreeSymbol() Wed Oct 15 16:40:07 1997 Steven Eker * machineIntegerOpSymbol.cc (MachineIntegerOpSymbol): remove constructor arg from call to FreeSymbol() * branchSymbol.cc (BranchSymbol): remove constructor arg from call to FreeSymbol() * sortTestSymbol.cc (SortTestSymbol): remove constructor arg from call to FreeSymbol() * equalitySymbol.cc (EqualitySymbol): remove constructor arg from call to FreeSymbol() =================================Engine30================================================== Wed Oct 1 16:38:08 1997 Steven Eker * sortTestSymbol.hh (eager): added (sort): added Tue Sep 30 14:30:53 1997 Steven Eker * machineIntegerTerm.hh (class MachineIntegerTerm): added decl for normalize() * machineIntegerTerm.cc (normalize): added in order to compute distict hash value =================================Engine28================================================== Fri Aug 29 16:31:24 1997 Steven Eker * sortTestSymbol.cc (eqRewrite): rewritten using FreeDagNode::getArgument() * equalitySymbol.cc (eqRewrite): rewritten using FreeDagNode::getArgument() (computeBaseSort): simplified * branchSymbol.cc (eqRewrite): rewritten using FreeDagNode::getArgument() (computeBaseSort): rewritten using FreeDagNode::getArgument() (rangeComponent): rewritten using FreeDagNode::getArgument() Thu Aug 28 11:07:50 1997 Steven Eker * machineIntegerOpSymbol.hh (class MachineIntegerOpSymbol): update MachineIntegerOpSymbol() decl * machineIntegerOpSymbol.cc (MachineIntegerOpSymbol): now take arity argument; (eqRewrite): rewritten to use CODE() macro, remove u- and add >> and << =================================Engine27================================================== Tue Aug 12 17:19:15 1997 Steven Eker * machineIntegerSymbol.cc (computeBaseSort): use getValue() rather than isZero() * machineIntegerOpSymbol.cc (eqRewrite): use getValue() rather than acessing MachineIntegerDagNode private part * machineIntegerDagNode.hh (class MachineIntegerDagNode): removed friend class MachineIntegerOpSymbol * machineIntegerDagNode.cc: delete #include "intSet.hh" * machineIntegerDagNode.hh (isZero): replaced with getValue(); typically most applications of machine int (eg meta level) will need at least this. (class MachineIntegerDagNode): delete decl for isZero(), added decl for getValue() * builtIn.hh: added decls for MachineIntegerSymbol, MachineIntegerTerm, MachineIntegerDagNode and MachineIntegerOpSymbol Tue Aug 5 16:12:57 1997 Steven Eker * machineIntegerOpSymbol.cc (eqRewrite): use getArgument() rather than argArray() Mon Aug 4 11:10:25 1997 Steven Eker * machineIntegerOpSymbol.cc (eqRewrite): split call to context.tracePreEqRewrite() so that we don't call it in a div by zero situation * machineIntegerOpSymbol.hh (class MachineIntegerOpSymbol): NA_Symbol -> MachineIntegerSymbol in ctor decl (class MachineIntegerOpSymbol): NA_Symbol -> MachineIntegerSymbol for data member * machineIntegerOpSymbol.cc (MachineIntegerOpSymbol): NA_Symbol -> MachineIntegerSymbol * machineIntegerTerm.hh (class MachineIntegerTerm): NA_Symbol -> MachineIntegerSymbol in ctor decl * machineIntegerTerm.cc (overwriteWithDagNode): NA_Symbol -> MachineIntegerSymbol (makeDagNode): NA_Symbol -> MachineIntegerSymbol (MachineIntegerTerm): NA_Symbol -> MachineIntegerSymbol * machineIntegerDagNode.hh (class MachineIntegerDagNode): NA_Symbol -> MachineIntegerSymbol in ctor decl * machineIntegerDagNode.cc (makeClone): NA_Symbol -> MachineIntegerSymbol (overwriteWithClone): NA_Symbol -> MachineIntegerSymbol (MachineIntegerDagNode): NA_Symbol -> MachineIntegerSymbol * machineIntegerDagNode.hh (isZero): added * machineIntegerTerm.hh (isZero): added * machineIntegerSymbol.cc: created * machineIntegerSymbol.hh (class MachineIntegerSymbol): created Thu Jul 31 10:33:28 1997 Steven Eker * machineIntegerOpSymbol.cc: created * machineIntegerOpSymbol.hh (class MachineIntegerOpSymbol): created * machineIntegerDagNode.cc: created * machineIntegerDagNode.hh (class MachineIntegerDagNode): created Wed Jul 30 19:27:49 1997 Steven Eker * machineIntegerTerm.hh (class MachineIntegerTerm): created * machineIntegerTerm.cc: created Wed Jul 23 11:59:39 1997 Steven Eker * metaRewriteSymbol.cc (pullDown2): pass full = false to normalize() =================================Engine26b================================================== Tue Jul 15 15:47:24 1997 Steven Eker * sortTestSymbol.cc (SortTestSymbol): pass inert = false * branchSymbol.cc (BranchSymbol): pass inert = false * metaRewriteSymbol.cc (MetaRewriteSymbol): pass inert = false * equalitySymbol.cc (EqualitySymbol): pass inert = false ================================Engine26===================================================== Mon Jun 30 10:59:50 1997 Steven Eker * metaRewriteSymbol.cc (pullDown): if symbol pulled down is a variable, set index to 0 to avoid uninitialized read in Variable::markEagerArguments(). This is a horrible hack the will disappear when this code is replaced by the new meta-level (pullDown): horrible hack removed in favour of change to Variable::markEagerArguments() whcih also works for top level reduction terms. Wed Jun 25 12:04:00 1997 Steven Eker * metaRewriteSymbol.cc (eqRewrite): pass purpose arg to makeSubcontext() Tue Jun 24 16:35:39 1997 Steven Eker * metaRewriteSymbol.cc: added #include "variable.hh" Thu Apr 10 18:34:40 1997 Steven Eker * metaRewriteSymbol.cc (errorRewrite): deepSelfDestruct t rather than relying on pushdUp2() to do it (eqRewrite): deepSelfDestruct t rather than relying on pushdUp2() to do it (pushUp2): don't deepSelfDestruct t (errorRewrite): increment rewrite count; handle tracing for the meta-*() ---> error* step. (eqRewrite): no longer start by incrementing rewrite count (eqRewrite): major rehack to handle tracing Tue Apr 8 14:38:01 1997 Steven Eker * branchSymbol.cc (eqRewrite): added tracing * sortTestSymbol.cc (eqRewrite): added tracing * equalitySymbol.cc (eqRewrite): added tracing Fri Apr 4 17:58:06 1997 Steven Eker * metaRewriteSymbol.cc (eqRewrite): removed trace flag from RewritingContext constructor calls Tue Apr 1 15:19:16 1997 Steven Eker * metaRewriteSymbol.cc (eqRewrite): heavily rewritten to use pushUpSubstitution() * metaRewriteSymbol.hh (class MetaRewriteSymbol): added decl for pushUpSubstitution() * metaRewriteSymbol.cc (pushUpSubstitution): added Mon Mar 31 10:28:16 1997 Steven Eker * metaRewriteSymbol.cc (errorRewrite): context arg removed (eqRewrite): removed context arg from errorRewrite() call * metaRewriteSymbol.hh (class MetaRewriteSymbol): added errorRewrite() decl * metaRewriteSymbol.cc (errorRewrite): added (eqRewrite): use errorRewrite() Fri Mar 28 16:08:10 1997 Steven Eker * metaRewriteSymbol.cc (pushUp2): added (pullDown2): added (eqRewrite): rewritten to use Rule::apply() (eqRewrite): in meta-apply() case use result of apply in final reduce! (pullDownSubstitution): added (pullDownAssignment): added (pushUp2): now take Term* rather than DagNode* (eqRewrite): meta-rewrite2 partly implemented (pullDownSubstitution): remember to move to next assignment within loop Thu Mar 27 16:23:48 1997 Steven Eker * metaRewriteSymbol.cc (MetaRewriteSymbol): added params for symbols needed to implement meta-apply2 (eqRewrite): use arity rather than applyFlag to determine which operator we are * metaRewriteSymbol.hh (class MetaRewriteSymbol): added data members for symbols needed to implement meta-apply2 Fri Jan 3 15:28:16 1997 Steven Eker * metaRewriteSymbol.cc (eqRewrite): fixed bug where we were failing to evaluate 3rd arg of meta-apply Tue Dec 24 18:33:42 1996 Steven Eker * sortTestSymbol.cc (eqRewrite): call to computeSort() replaced by computeTrueSort() * metaRewriteSymbol.cc (eqRewrite): name change from rewrite() * metaRewriteSymbol.hh (class MetaRewriteSymbol): rewrite() -> eqRewrite() * sortTestSymbol.cc (computeBaseSort): adapted from computeSort(); now we assume that subterms are correctly sorted * sortTestSymbol.hh (class SortTestSymbol): computeSort() -> computeBaseSort(); rewrite() -> eqRewrite() * equalitySymbol.cc (computeBaseSort): adapted from computeSort(); now we assume that subterms are correctly sorted; how should sorting work on ERROR_SORT? * equalitySymbol.hh (class EqualitySymbol): computeSort() -> computeBaseSort(); rewrite() -> eqRewrite() * branchSymbol.cc (computeBaseSort): adapted from computeSort(); now we assume that subterms are correctly sorted * branchSymbol.hh (class BranchSymbol): computeSort() -> computeBaseSort(); rewrite() -> eqRewrite() Mon Nov 25 19:08:24 1996 Steven Eker * sortTestSymbol.cc (SortTestSymbol): added constructor arg * metaRewriteSymbol.cc (MetaRewriteSymbol): added constructor arg * equalitySymbol.cc (EqualitySymbol): added constructor arg * branchSymbol.cc (BranchSymbol): added constructor arg Sun Aug 25 11:24:07 1996 Steven Eker * metaRewriteSymbol.cc (rewrite): added code to re-reduce result after a sucessful rewrite Thu Aug 15 11:35:27 1996 Steven Eker * metaRewriteSymbol.cc (pullDown): fixed infinite loop bug (MetaRewriteSymbol): apply flag added (rewrite): extended to handle apply case * builtIn.hh: added fwd decl of MetaRewriteSymbol * metaRewriteSymbol.cc: created * metaRewriteSymbol.hh (class MetaRewriteSymbol): created Fri Aug 2 16:02:34 1996 Steven Eker * sortTestSymbol.cc (SortTestSymbol): new strategy passing code * branchSymbol.cc (BranchSymbol): new strategy passing code * sortTestSymbol.hh (makeLazyStrategy): added * equalitySymbol.cc (EqualitySymbol): new strategy passing code * equalitySymbol.hh (makeLazyStrategy): added * sortTestSymbol.cc (compileSortConstraints): added (compileEquations): added (compileOpDeclarations): added * equalitySymbol.cc (compileSortConstraints): added (compileEquations): added (compileOpDeclarations): added * branchSymbol.cc (compileSortConstraints): added (compileEquations): added (compileOpDeclarations): added Thu Feb 8 11:11:19 1996 Steven Eker * branchSymbol.cc (computeSort): use dagNode::computeSort() * sortTestSymbol.cc (computeSort): use new dagNode::computeSort() (rewrite): now call dagNode::computeSort() on subterm in the lazy case * equalitySymbol.cc (computeSort): use new dagNode::computeSort() on arguments. * sortTestSymbol.hh: added lazyStrategy, eager parameter * equalitySymbol.cc: added lazyStrategy, eager parameter and code to store and handle it * equalitySymbol.hh: added lazyStrategy, eager parameter * sortTestSymbol.cc: added lazyStrategy, eager parameter and code to store and handle it Wed Feb 7 14:38:50 1996 Steven Eker * builtIn.hh: created * sortTestSymbol.cc: created * sortTestSymbol.hh: created Fri Feb 2 15:36:04 1996 Steven Eker * branchSymbol.hh: changed parse() parameters * branchSymbol.cc (parse): rewritten * equalitySymbol.cc (parse): rewritten * equalitySymbol.hh: changed parse() parameters Thu Feb 1 15:08:27 1996 Steven Eker * branchSymbol.cc (parse): added * branchSymbol.hh: parse() added * equalitySymbol.cc (parse): added * equalitySymbol.hh: parse() added Thu Jan 11 18:11:32 1996 Steven Eker * equalitySymbol.cc (computeSort): DagNode::SORT_UNKNOWN -> Sort::SORT_UNKNOWN * branchSymbol.cc (computeSort): DagNode::SORT_UNKNOWN -> Sort::SORT_UNKNOWN Wed Jan 10 17:21:28 1996 Steven Eker * branchSymbol.cc (BranchSymbol): don't pass sharable argument * equalitySymbol.cc (EqualitySymbol): don't pass sharable argument Thu Dec 14 12:17:30 1995 Steven Eker * equalitySymbol.cc (EqualitySymbol): store resultSort (rangeComponent): added (computeSort): implemented * equalitySymbol.hh (EqualitySymbol) added resultSort argument plus storage. Also rangeComponent() added. * branchSymbol.cc (computeSort): now use rangeComponent() (rangeComponent): added * branchSymbol.hh (BranchSymbol): we now take and store the sort of the test expression added rangeComponent() * branchSymbol.cc (computeSort): implemented Tue Dec 12 14:49:28 1995 Steven Eker * equalitySymbol.cc (computeSort): added * branchSymbol.cc (computeSort): added Fri Dec 8 15:07:58 1995 Steven Eker * branchSymbol.cc: created * branchSymbol.hh: created * equalitySymbol.hh: created * equalitySymbol.cc: created maude-3.1/src/BuiltIn/stringDagNode.hh0000755000175200017520000000264513576050635014627 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for dag nodes containing strings. // #ifndef _stringDagNode_hh_ #define _stringDagNode_hh_ #include "rope.hh" #include "NA_DagNode.hh" class StringDagNode : public NA_DagNode { public: StringDagNode(StringSymbol* symbol, const Rope& value); size_t getHashValue(); int compareArguments(const DagNode* other) const; void overwriteWithClone(DagNode* old); DagNode* makeClone(); const Rope& getValue() const; private: const Rope value; // assume that sizeof(Rope) <= DagNode::nrWords }; inline const Rope& StringDagNode::getValue() const { return value; } #endif maude-3.1/src/BuiltIn/CUI_NumberOpSymbol.hh0000644000175200017520000000324513576050635015506 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for symbols for built in CUI operations on numbers. // #ifndef _CUI_NumberOpSymbol_hh_ #define _CUI_NumberOpSymbol_hh_ #include "CUI_Symbol.hh" class CUI_NumberOpSymbol : public CUI_Symbol { public: CUI_NumberOpSymbol(int id, Axioms axioms); bool attachData(const Vector& opDeclaration, const char* purpose, const Vector& data); bool attachSymbol(const char* purpose, Symbol* symbol); void copyAttachments(Symbol* original, SymbolMap* map); void getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data); void getSymbolAttachments(Vector& purposes, Vector& symbols); bool eqRewrite(DagNode* subject, RewritingContext& context); private: int op; SuccSymbol* succSymbol; }; #endif maude-3.1/src/BuiltIn/stringDagNode.cc0000755000175200017520000000442613576050735014615 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class StringDagNode. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "NA_Theory.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" // built in class definitions #include "stringSymbol.hh" #include "stringDagNode.hh" StringDagNode::StringDagNode(StringSymbol* symbol, const Rope& value) : NA_DagNode(symbol), value(value) { Assert(sizeof(Rope) <= DagNode::nrWords * sizeof(MachineWord), "Rope too big for internal storage"); setCallDtor(); // need our dtor called when garbage collected to destruct Rope } size_t StringDagNode::getHashValue() { int hashValue = 0; for (Rope::const_iterator i(value.begin()); i != value.end(); ++i) hashValue = (hashValue << 1) + *i; return hash(symbol()->getHashValue(), hashValue); } int StringDagNode::compareArguments(const DagNode* other) const { return value.compare(static_cast(other)->value); } void StringDagNode::overwriteWithClone(DagNode* old) { StringDagNode* d = new(old) StringDagNode(safeCast(StringSymbol*, symbol()), value); d->copySetRewritingFlags(this); d->setSortIndex(getSortIndex()); } DagNode* StringDagNode::makeClone() { StringDagNode* d = new StringDagNode(safeCast(StringSymbol*, symbol()), value); d->copySetRewritingFlags(this); d->setSortIndex(getSortIndex()); return d; } maude-3.1/src/BuiltIn/divisionSymbol.cc0000755000175200017520000001552513576050735015101 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class DivisionSymbol. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "freeTheory.hh" #include "builtIn.hh" // interface class definitions #include "term.hh" #include "argumentIterator.hh" // core class definitions #include "rewritingContext.hh" #include "symbolMap.hh" // free theory class definitions #include "freeNet.hh" #include "freeDagNode.hh" // built in stuff #include "bindingMacros.hh" #include "succSymbol.hh" #include "minusSymbol.hh" #include "divisionSymbol.hh" DivisionSymbol::DivisionSymbol(int id) : FreeSymbol(id, 2) { succSymbol = 0; minusSymbol = 0; } bool DivisionSymbol::attachData(const Vector& opDeclaration, const char* purpose, const Vector& data) { NULL_DATA(purpose, DivisionSymbol, data) return FreeSymbol::attachData(opDeclaration, purpose, data); } bool DivisionSymbol::attachSymbol(const char* purpose, Symbol* symbol) { BIND_SYMBOL(purpose, symbol, succSymbol, SuccSymbol*); BIND_SYMBOL(purpose, symbol, minusSymbol, MinusSymbol*); return FreeSymbol::attachSymbol(purpose, symbol); } void DivisionSymbol::copyAttachments(Symbol* original, SymbolMap* map) { DivisionSymbol* orig = safeCast(DivisionSymbol*, original); COPY_SYMBOL(orig, succSymbol, map, SuccSymbol*); COPY_SYMBOL(orig, minusSymbol, map, MinusSymbol*); FreeSymbol::copyAttachments(original, map); } void DivisionSymbol::getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data) { APPEND_DATA(purposes, data, DivisionSymbol); FreeSymbol::getDataAttachments(opDeclaration, purposes, data); } void DivisionSymbol::getSymbolAttachments(Vector& purposes, Vector& symbols) { APPEND_SYMBOL(purposes, symbols, succSymbol); APPEND_SYMBOL(purposes, symbols, minusSymbol); FreeSymbol::getSymbolAttachments(purposes, symbols); } bool DivisionSymbol::eqRewrite(DagNode* subject, RewritingContext& context) { Assert(this == subject->symbol(), "bad symbol"); FreeDagNode* d = safeCast(FreeDagNode*, subject); DagNode* d0 = d->getArgument(0); d0->reduce(context); DagNode* d1 = d->getArgument(1); d1->reduce(context); if (isRat(subject)) { const mpz_class& denominator = succSymbol->getNat(d1); if (denominator == 1) return context.builtInReplace(subject, d0); mpz_class storage0; const mpz_class& numerator = (d0->symbol() == minusSymbol) ? minusSymbol->getNeg(d0, storage0) : succSymbol->getNat(d0); Assert(numerator != 0, "zero numerator"); mpz_class common; mpz_gcd(common.get_mpz_t(), numerator.get_mpz_t(), denominator.get_mpz_t()); if (common > 1) { if (denominator == common) { mpz_class nr = numerator / common; return (nr >= 0) ? succSymbol->rewriteToNat(subject, context, nr) : context.builtInReplace(subject, minusSymbol->makeNegDag(nr)); } (void) context.builtInReplace(subject, makeRatDag(numerator / common, denominator / common)); Assert(this == subject->symbol(), "unexpectedly changed top symbol"); // // we don't want to revisit this node since it is already simplified // - so fall into regular case. // } } return FreeSymbol::eqRewrite(subject, context); } DagNode* DivisionSymbol::makeRatDag(const mpz_class& nr, const mpz_class& dr) { Assert(dr > 0, "not a strict rat"); DagNode* d = (nr >= 0) ? succSymbol->makeNatDag(nr) : minusSymbol->makeNegDag(nr); if (dr == 1 || nr == 0) return d; Vector args(2); args[0] = d; args[1] = succSymbol->makeNatDag(dr); return makeDagNode(args); } bool DivisionSymbol::isRat(const DagNode* dagNode) const { Assert(this == static_cast(dagNode->symbol()), "bad symbol"); const FreeDagNode* d = safeCast(const FreeDagNode*, dagNode); DagNode* d0 = d->getArgument(0); DagNode* d1 = d->getArgument(1); return d1->symbol() == succSymbol && succSymbol->isNat(d1) && ((d0->symbol() == minusSymbol) ? minusSymbol->isNeg(d0) : (d0->symbol() == succSymbol && succSymbol->isNat(d0))); } const mpz_class& DivisionSymbol::getRat(const DagNode* dagNode, mpz_class& numerator) const { Assert(this == static_cast(dagNode->symbol()), "bad symbol"); const FreeDagNode* d = safeCast(const FreeDagNode*, dagNode); DagNode* d0 = d->getArgument(0); if (d0->symbol() == minusSymbol) (void) minusSymbol->getNeg(d0, numerator); else { Assert(d0->symbol() == succSymbol, "bad numerator"); numerator = succSymbol->getNat(d0); } DagNode* d1 = d->getArgument(1); Assert(d1->symbol() == succSymbol, "bad denominator"); return succSymbol->getNat(d1); } Term* DivisionSymbol::makeRatTerm(const mpz_class& nr, const mpz_class& dr) { Assert(dr > 0, "not a strict rat"); Vector args(2); args[0] = (nr >= 0) ? succSymbol->makeNatTerm(nr) : minusSymbol->makeIntTerm(nr); args[1] = succSymbol->makeNatTerm(dr); return makeTerm(args); } bool DivisionSymbol::isRat(/* const */ Term* term) const { Assert(this == static_cast(term->symbol()), "bad symbol"); ArgumentIterator i(*term); Term* t0 = i.argument(); i.next(); Term* t1 = i.argument(); return t1->symbol() == succSymbol && succSymbol->isNat(t1) && ((t0->symbol() == minusSymbol) ? minusSymbol->isNeg(t0) : (t0->symbol() == succSymbol && succSymbol->isNat(t0))); } const mpz_class& DivisionSymbol::getRat(/* const */ Term* term, mpz_class& numerator) const { Assert(this == static_cast(term->symbol()), "bad symbol"); ArgumentIterator i(*term); Term* t0 = i.argument(); if (t0->symbol() == minusSymbol) (void) minusSymbol->getNeg(t0, numerator); else { Assert(t0->symbol() == succSymbol, "bad numerator"); numerator = succSymbol->getNat(t0); } i.next(); Term* t1 = i.argument(); Assert(t1->symbol() == succSymbol, "bad denominator"); return succSymbol->getNat(t1); } maude-3.1/src/BuiltIn/CUI_NumberOpSymbol.cc0000644000175200017520000000767113576050735015504 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class CUI_NumberOpSymbol. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "freeTheory.hh" #include "CUI_Theory.hh" // interface class definitions #include "term.hh" // core class definitions #include "rewritingContext.hh" #include "symbolMap.hh" // CUI theory class definitions #include "CUI_Symbol.hh" #include "CUI_DagNode.hh" // built in stuff #include "bindingMacros.hh" #include "succSymbol.hh" #include "CUI_NumberOpSymbol.hh" CUI_NumberOpSymbol::CUI_NumberOpSymbol(int id, Axioms axioms) : CUI_Symbol(id, standard, false, axioms) { op = NONE; succSymbol = 0; } bool CUI_NumberOpSymbol::attachData(const Vector& opDeclaration, const char* purpose, const Vector& data) { BIND_OP(purpose, CUI_NumberOpSymbol, op, data); return CUI_Symbol::attachData(opDeclaration, purpose, data); } bool CUI_NumberOpSymbol::attachSymbol(const char* purpose, Symbol* symbol) { BIND_SYMBOL(purpose, symbol, succSymbol, SuccSymbol*); return CUI_Symbol::attachSymbol(purpose, symbol); } void CUI_NumberOpSymbol::copyAttachments(Symbol* original, SymbolMap* map) { CUI_NumberOpSymbol* orig = safeCast(CUI_NumberOpSymbol*, original); op = orig->op; COPY_SYMBOL(orig, succSymbol, map, SuccSymbol*); CUI_Symbol::copyAttachments(original, map); } void CUI_NumberOpSymbol::getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data) { int nrDataAttachments = purposes.length(); purposes.resize(nrDataAttachments + 1); purposes[nrDataAttachments] = "CUI_NumberOpSymbol"; data.resize(nrDataAttachments + 1); data[nrDataAttachments].resize(1); const char*& d = data[nrDataAttachments][0]; switch (op) { CODE_CASE(d, 's', 'd', "sd") default: CantHappen("bad number op"); } CUI_Symbol::getDataAttachments(opDeclaration, purposes, data); } void CUI_NumberOpSymbol::getSymbolAttachments(Vector& purposes, Vector& symbols) { APPEND_SYMBOL(purposes, symbols, succSymbol); CUI_Symbol::getSymbolAttachments(purposes, symbols); } bool CUI_NumberOpSymbol::eqRewrite(DagNode* subject, RewritingContext& context) { Assert(this == subject->symbol(), "bad symbol"); CUI_DagNode* d = safeCast(CUI_DagNode*, subject); bool specialEval = true; // // Evaluate our arguments and check that they are both numbers. // for (int i = 0; i < 2; i++) { DagNode* a = d->getArgument(i); a->reduce(context); if (!(succSymbol != 0 && succSymbol->isNat(a))) specialEval = false; } if (specialEval) { const mpz_class& a0 = succSymbol->getNat(d->getArgument(0)); const mpz_class& a1 = succSymbol->getNat(d->getArgument(1)); mpz_class r; switch (op) { case CODE('s', 'd'): { r = abs(a0 - a1); break; } default: CantHappen("bad number op"); } return succSymbol->rewriteToNat(subject, context, r); } return CUI_Symbol::eqRewrite(subject, context); } maude-3.1/src/BuiltIn/stringOpSymbol.hh0000755000175200017520000000576013576050635015073 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for symbols for built in operations on strings. // #ifndef _stringOpSymbol_hh_ #define _stringOpSymbol_hh_ #include "rope.hh" #include "freeSymbol.hh" #include "cachedDag.hh" class StringOpSymbol : public FreeSymbol { public: StringOpSymbol(int id, int arity); bool attachData(const Vector& opDeclaration, const char* purpose, const Vector& data); bool attachSymbol(const char* purpose, Symbol* symbol); bool attachTerm(const char* purpose, Term* term); void copyAttachments(Symbol* original, SymbolMap* map); void getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data); void getSymbolAttachments(Vector& purposes, Vector& symbols); void getTermAttachments(Vector& purposes, Vector& terms); bool eqRewrite(DagNode* subject, RewritingContext& context); void postInterSymbolPass(); void reset(); private: enum { // // Tha actual maximum number of significant digits in the exact // decimal represention of a IEEE-754 double is hard to calculate // but must be < 1074 since there can be at most 1074 binary places // and with 1074 binary places the first multiplications will produce // leading zeros. // MAX_FLOAT_DIGITS = 1074 }; bool rewriteToString(DagNode* subject, RewritingContext& context, const Rope& result); static bool ropeToNumber(const Rope& subject, int base, mpz_class& numerator, mpz_class& denominator); static Rope substring(const Rope& subject, Rope::size_type index, Rope::size_type length); static int fwdFind(const Rope& subject, const Rope& pattern, Rope::size_type start); static int revFind(const Rope& subject, const Rope& pattern, Rope::size_type start); static Rope upperCase(const Rope& subject); static Rope lowerCase(const Rope& subject); int op; StringSymbol* stringSymbol; SuccSymbol* succSymbol; MinusSymbol* minusSymbol; DivisionSymbol* divisionSymbol; FloatSymbol* floatSymbol; Symbol* decFloatSymbol; CachedDag trueTerm; CachedDag falseTerm; CachedDag notFoundTerm; }; #endif maude-3.1/src/BuiltIn/stringSymbol.hh0000644000175200017520000000237413576050635014567 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for string symbols. // #ifndef _stringSymbol_hh_ #define _stringSymbol_hh_ #include "NA_Symbol.hh" class StringSymbol : public NA_Symbol { public: StringSymbol(int id); void fillInSortInfo(Term* subject); void computeBaseSort(DagNode* subject); bool isConstructor(DagNode* subject); void compileOpDeclarations(); Term* termify(DagNode* dagNode); private: Sort* sort; Sort* charSort; }; #endif maude-3.1/src/BuiltIn/floatDagNode.cc0000644000175200017520000000412313576050735014403 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class FloatDagNode. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "NA_Theory.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" // built in class definitions #include "floatSymbol.hh" #include "floatDagNode.hh" FloatDagNode::FloatDagNode(FloatSymbol* symbol, double value) : NA_DagNode(symbol), value((value == 0.0) ? 0.0 : value) // don't allow IEEE-754 -0.0 { } size_t FloatDagNode::getHashValue() { return hash(symbol()->getHashValue(), bitPattern ^ (bitPattern >> 32)); } int FloatDagNode::compareArguments(const DagNode* other) const { double otherValue = static_cast(other)->value; return (value == otherValue) ? 0 : ((value > otherValue) ? 1 : -1); } void FloatDagNode::overwriteWithClone(DagNode* old) { FloatDagNode* d = new(old) FloatDagNode(safeCast(FloatSymbol*, symbol()), value); d->copySetRewritingFlags(this); d->setSortIndex(getSortIndex()); } DagNode* FloatDagNode::makeClone() { FloatDagNode* d = new FloatDagNode(safeCast(FloatSymbol*, symbol()), value); d->copySetRewritingFlags(this); d->setSortIndex(getSortIndex()); return d; } maude-3.1/src/BuiltIn/stringTerm.cc0000755000175200017520000000511013576050735014212 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class StringTerm // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "NA_Theory.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "term.hh" // core class definitions #include "symbolMap.hh" // built in class definitions #include "stringSymbol.hh" #include "stringTerm.hh" #include "stringDagNode.hh" StringTerm::StringTerm(StringSymbol* symbol, const Rope& value) : NA_Term(symbol), value(value) { } Term* StringTerm::deepCopy2(SymbolMap* map) const { return new StringTerm(static_cast(map == 0 ? symbol() : map->translate(symbol())), value); } Term* StringTerm::instantiate2(const Vector& varBindings, SymbolMap* translator) { return new StringTerm(safeCast(StringSymbol*, translator->findTargetVersionOfSymbol(symbol())), value); } Term* StringTerm::normalize(bool /* full */, bool& changed) { changed = false; int hashValue = 0; for (Rope::const_iterator i(value.begin()); i != value.end(); ++i) hashValue = (hashValue << 1) + *i; setHashValue(hash(symbol()->getHashValue(), hashValue)); return this; } int StringTerm::compareArguments(const Term* other) const { return value.compare(static_cast(other)->value); } int StringTerm::compareArguments(const DagNode* other) const { return value.compare(static_cast(other)->getValue()); } void StringTerm::overwriteWithDagNode(DagNode* old) const { (void) new(old) StringDagNode(static_cast(symbol()), value); } NA_DagNode* StringTerm::makeDagNode() const { return new StringDagNode(static_cast(symbol()), value); } maude-3.1/src/BuiltIn/counterSymbol.cc0000644000175200017520000000622513576050735014726 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2004 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class NumberOpSymbol. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "freeTheory.hh" #include "builtIn.hh" // interface class definitions #include "term.hh" // core class definitions #include "rewritingContext.hh" // free theory class definitions #include "freeDagNode.hh" // built in stuff #include "succSymbol.hh" #include "counterSymbol.hh" CounterSymbol::CounterSymbol(int id) : NumberOpSymbol(id, 0) { currentValue = 0; } bool CounterSymbol::attachData(const Vector& opDeclaration, const char* purpose, const Vector& data) { if (strcmp(purpose, "CounterSymbol") == 0) return true; return NumberOpSymbol::attachData(opDeclaration, purpose, data); } void CounterSymbol::getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data) { int nrDataAttachments = purposes.length(); purposes.resize(nrDataAttachments + 1); purposes[nrDataAttachments] = "CounterSymbol"; data.resize(nrDataAttachments + 1); NumberOpSymbol::getDataAttachments(opDeclaration, purposes, data); } void CounterSymbol::resetRules() { currentValue = 0; NumberOpSymbol::resetRules(); } /* void CounterSymbol::saveHiddenState() { currentValueStack.push(currentValue); NumberOpSymbol::saveHiddenState(); } void CounterSymbol::restoreHiddenState() { currentValue = currentValueStack.top(); currentValueStack.pop(); NumberOpSymbol::restoreHiddenState(); } */ bool CounterSymbol::eqRewrite(DagNode* subject, RewritingContext& context) { // // NumberOpSymbol doesn't know how to deal with this. // return FreeSymbol::eqRewrite(subject, context); } DagNode* CounterSymbol::ruleRewrite(DagNode* subject, RewritingContext& context) { if (SuccSymbol* succSymbol = getSuccSymbol()) { if (RewritingContext::getTraceStatus()) { context.tracePreRuleRewrite(subject, 0); if (context.traceAbort()) return 0; } DagNode* r = succSymbol->makeNatDag(currentValue); ++currentValue; if (RewritingContext::getTraceStatus()) context.tracePostRuleRewrite(r); context.incrementRlCount(); return r; } return NumberOpSymbol::ruleRewrite(subject, context); } maude-3.1/src/BuiltIn/stringTerm.hh0000755000175200017520000000313713576050635014232 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for terms containing strings. // #ifndef _stringTerm_hh_ #define _stringTerm_hh_ #include "rope.hh" #include "NA_Term.hh" class StringTerm : public NA_Term { public: StringTerm(StringSymbol* symbol, const Rope& value); Term* deepCopy2(SymbolMap* map) const; Term* normalize(bool full, bool& changed); int compareArguments(const Term* other) const; int compareArguments(const DagNode* other) const; void overwriteWithDagNode(DagNode* old) const; NA_DagNode* makeDagNode() const; // // Needed because we have hidden data. // Term* instantiate2(const Vector& varBindings, SymbolMap* translator); const Rope& getValue() const; private: const Rope value; }; inline const Rope& StringTerm::getValue() const { return value; } #endif maude-3.1/src/BuiltIn/Makefile.am0000755000175200017520000000266212300774040013574 00000000000000noinst_LIBRARIES = libbuiltIn.a libbuiltIn_a_CPPFLAGS = \ -I$(top_srcdir)/src/Utility \ -I$(top_srcdir)/src/Interface \ -I$(top_srcdir)/src/Core \ -I$(top_srcdir)/src/Variable \ -I$(top_srcdir)/src/FullCompiler \ -I$(top_srcdir)/src/NA_Theory \ -I$(top_srcdir)/src/ACU_Persistent \ -I$(top_srcdir)/src/ACU_Theory \ -I$(top_srcdir)/src/CUI_Theory \ -I$(top_srcdir)/src/S_Theory \ -I$(top_srcdir)/src/FreeTheory \ -I$(top_srcdir)/src/3rdParty libbuiltIn_a_SOURCES = \ equalitySymbol.cc \ sortTestSymbol.cc \ branchSymbol.cc \ stringSymbol.cc \ stringTerm.cc \ stringDagNode.cc \ stringOpSymbol.cc \ floatSymbol.cc \ floatTerm.cc \ floatDagNode.cc \ floatOpSymbol.cc \ succSymbol.cc \ numberOpSymbol.cc \ minusSymbol.cc \ ACU_NumberOpSymbol.cc \ CUI_NumberOpSymbol.cc \ divisionSymbol.cc \ randomOpSymbol.cc \ counterSymbol.cc \ matrixOpSymbol.cc \ equalityExtor.cc \ equalityExtorFinal.cc EXTRA_DIST = \ matrixOpSignature.cc noinst_HEADERS = \ ACU_NumberOpSymbol.hh \ CUI_NumberOpSymbol.hh \ bindingMacros.hh \ branchSymbol.hh \ builtIn.hh \ divisionSymbol.hh \ equalitySymbol.hh \ floatDagNode.hh \ floatOpSymbol.hh \ floatSymbol.hh \ floatTerm.hh \ minusSymbol.hh \ numberOpSymbol.hh \ sortTestSymbol.hh \ stringDagNode.hh \ stringOpSymbol.hh \ stringSymbol.hh \ stringTerm.hh \ succSymbol.hh \ randomOpSymbol.hh \ counterSymbol.hh \ matrixOpSymbol.hh \ equalityExtor.hh \ equalityExtorFinal.hh maude-3.1/src/BuiltIn/equalityExtor.hh0000755000175200017520000000261713576050635014755 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2014 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Stack machine non-final extor for equality symbols. // #ifndef _equalityExtor_hh_ #define _equalityExtor_hh_ #include "nonFinalExtor.hh" class EqualityExtor : public NonFinalExtor { NO_COPYING(EqualityExtor); public: EqualityExtor(EqualitySymbol* symbol, int argIndex0, int argIndex1, int destinationIndex, Instruction* nextInstruction); void execute(StackMachine* machine) const; #ifdef DUMP //void dump(ostream& s, int indentLevel); #endif private: EqualitySymbol* const symbol; const SlotIndex argIndex0; const SlotIndex argIndex1; }; #endif maude-3.1/src/BuiltIn/matrixOpSymbol.cc0000755000175200017520000002236313734516173015055 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2004 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class NumberOpSymbol. // #include // utility stuff #include "macros.hh" #include "vector.hh" #include "mpzSystem.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "freeTheory.hh" #include "ACU_Persistent.hh" #include "ACU_Theory.hh" #include "NA_Theory.hh" #include "builtIn.hh" // interface class definitions #include "term.hh" // core class definitions #include "rewritingContext.hh" #include "dagArgumentIterator.hh" #include "symbolMap.hh" // free theory class definitions #include "freeSymbol.hh" #include "freeDagNode.hh" // ACU theory class definitions #include "ACU_Symbol.hh" #include "ACU_DagNode.hh" // built in stuff #include "bindingMacros.hh" #include "succSymbol.hh" #include "minusSymbol.hh" #include "stringSymbol.hh" #include "stringDagNode.hh" #include "matrixOpSymbol.hh" MatrixOpSymbol::MatrixOpSymbol(int id, int arity) : NumberOpSymbol(id, arity) { #define MACRO(SymbolName, SymbolClass, RequiredFlags, NrArgs) \ SymbolName = 0; #include "matrixOpSignature.cc" #undef MACRO } bool MatrixOpSymbol::attachData(const Vector& opDeclaration, const char* purpose, const Vector& data) { if (strcmp(purpose, "MatrixOpSymbol") == 0) return true; return NumberOpSymbol::attachData(opDeclaration, purpose, data); } bool MatrixOpSymbol::attachSymbol(const char* purpose, Symbol* symbol) { #define MACRO(SymbolName, SymbolClass, RequiredFlags, NrArgs) \ BIND_SYMBOL(purpose, symbol, SymbolName, SymbolClass*); #include "matrixOpSignature.cc" #undef MACRO return NumberOpSymbol::attachSymbol(purpose, symbol); } void MatrixOpSymbol::copyAttachments(Symbol* original, SymbolMap* map) { MatrixOpSymbol* orig = safeCast(MatrixOpSymbol*, original); #define MACRO(SymbolName, SymbolClass, RequiredFlags, NrArgs) \ COPY_SYMBOL(orig, SymbolName, map, SymbolClass*); #include "matrixOpSignature.cc" #undef MACRO NumberOpSymbol::copyAttachments(original, map); } void MatrixOpSymbol::getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data) { int nrDataAttachments = purposes.length(); purposes.resize(nrDataAttachments + 1); purposes[nrDataAttachments] = "MatrixOpSymbol"; data.resize(nrDataAttachments + 1); (data[nrDataAttachments]).resize(1); data[nrDataAttachments][0] = "natSystemSolve"; NumberOpSymbol::getDataAttachments(opDeclaration, purposes, data); } void MatrixOpSymbol::getSymbolAttachments(Vector& purposes, Vector& symbols) { #define MACRO(SymbolName, SymbolClass, RequiredFlags, NrArgs) \ APPEND_SYMBOL(purposes, symbols, SymbolName); #include "matrixOpSignature.cc" #undef MACRO NumberOpSymbol::getSymbolAttachments(purposes, symbols); } bool MatrixOpSymbol::downMatrixEntry(DagNode* dagNode, SparseMatrix& matrix, int& maxRowNr, int& maxColNr) { if (dagNode->symbol() == matrixEntrySymbol) { FreeDagNode* d = safeCast(FreeDagNode*, dagNode); DagNode* arg = d->getArgument(0); if (arg->symbol() == indexPairSymbol) { FreeDagNode* a = safeCast(FreeDagNode*, arg); int rowNr; int colNr; if (getSuccSymbol()->getSignedInt(a->getArgument(0), rowNr) && getSuccSymbol()->getSignedInt(a->getArgument(1), colNr) && getNumber(d->getArgument(1), matrix[rowNr][colNr])) { if (rowNr > maxRowNr) maxRowNr = rowNr; if (colNr > maxColNr) maxColNr = colNr; return true; } } } return false; } bool MatrixOpSymbol::downMatrix(DagNode* dagNode, SparseMatrix& matrix, int& maxRowNr, int& maxColNr) { Symbol* s = dagNode->symbol(); if (s == matrixSymbol) { for (DagArgumentIterator i(dagNode); i.valid(); i.next()) { if (!downMatrixEntry(i.argument(), matrix, maxRowNr, maxColNr)) return false; } } else if (s != emptyMatrixSymbol) return downMatrixEntry(dagNode, matrix, maxRowNr, maxColNr); return true; } bool MatrixOpSymbol::downVectorEntry(DagNode* dagNode, IntVec& vec, int& maxRowNr) { if (dagNode->symbol() == vectorEntrySymbol) { FreeDagNode* d = safeCast(FreeDagNode*, dagNode); int index; if (getSuccSymbol()->getSignedInt(d->getArgument(0), index)) { if (index > maxRowNr) { vec.resize(index + 1); for (int i = maxRowNr + 1; i < index; ++i) vec[i] = 0; maxRowNr = index; } if (getNumber(d->getArgument(1), vec[index])) return true; } } return false; } bool MatrixOpSymbol::downVector(DagNode* dagNode, IntVec& vec, int& maxRowNr) { vec.resize(maxRowNr + 1); for (int i = 0; i <= maxRowNr; ++i) vec[i] = 0; Symbol* s = dagNode->symbol(); if (s == vectorSymbol) { for (DagArgumentIterator i(dagNode); i.valid(); i.next()) { if (!downVectorEntry(i.argument(), vec, maxRowNr)) return false; } } else if (s != emptyVectorSymbol) return downVectorEntry(dagNode, vec, maxRowNr); return true; } bool MatrixOpSymbol::downAlgorithm(DagNode* dagNode, Algorithm& algorithm) { if (dagNode->symbol() == stringSymbol) { const Rope& alg = safeCast(StringDagNode*, dagNode)->getValue(); if (alg.empty()) algorithm = SYSTEMS_CHOICE; else { char *algStr = alg.makeZeroTerminatedString(); if (strcmp(algStr, "cd") == 0) algorithm = CD; else if (strcmp(algStr, "gcd") == 0) algorithm = GCD; else { delete [] algStr; return false; } delete [] algStr; } return true; } return false; } DagNode* MatrixOpSymbol::upSet(const Vector& elts) { int n = elts.size(); if (n == 0) return emptyVectorSetSymbol->makeDagNode(); return (n == 1) ? elts[0] : vectorSetSymbol->makeDagNode(elts); } DagNode* MatrixOpSymbol::upVector(const IntVec& row) { Vector elts; Vector pair(2); int nrRows = row.size(); for (int i = 1; i < nrRows; i++) { const mpz_class& v = row[i]; Assert(v >= 0, "-ve solution"); if (v > 0) { pair[0] = getSuccSymbol()->makeNatDag(i - 1); pair[1] = getSuccSymbol()->makeNatDag(v); elts.append(vectorEntrySymbol->makeDagNode(pair)); } } int n = elts.size(); if (n == 0) return emptyVectorSymbol->makeDagNode(); return (n == 1) ? elts[0] : vectorSymbol->makeDagNode(elts); } bool MatrixOpSymbol::eqRewrite(DagNode* subject, RewritingContext& context) { FreeDagNode* d = safeCast(FreeDagNode*, subject); DagNode* m = d->getArgument(0); m->reduce(context); DagNode* v = d->getArgument(1); v->reduce(context); DagNode* a = d->getArgument(2); a->reduce(context); Algorithm algorithm; SparseMatrix matrix; IntVec vec; int maxRowNr = -1; int maxColNr = -1; if (downAlgorithm(a, algorithm) && downMatrix(m, matrix, maxRowNr, maxColNr) && maxRowNr >= 0 && downVector(v, vec, maxRowNr)) { Vector homogenous; Vector inhomogenous; // // Build Diophantine system. // MpzSystem ds; int rowSize = maxColNr + 2; IntVec row(rowSize); for (int i = 0; i <= maxRowNr; i++) { for (int j = 1; j < rowSize; j++) row[j] = 0; const mpz_class& v = vec[i]; const SparseVector& r = matrix[i]; // // If we have an equation with all zero coefficients and nonzero // constant term we can trivially fail. // if (r.empty() && v != 0) goto fail; row[0] = -v; for (auto& j : r) row[j.first + 1] = j.second; ds.insertEqn(row); } for (int j = 1; j < rowSize; j++) row[j] = NONE; row[0] = 1; ds.setUpperBounds(row); // // Extract solutions. // if (algorithm == GCD || (algorithm == SYSTEMS_CHOICE && maxColNr <= maxRowNr + 1)) { while (ds.findNextMinimalSolutionGcd(row)) { if (row[0] == 0) homogenous.append(upVector(row)); else inhomogenous.append(upVector(row)); } } else { while (ds.findNextMinimalSolution(row)) { if (row[0] == 0) homogenous.append(upVector(row)); else inhomogenous.append(upVector(row)); } } // // Build result dag. // fail: Vector args(2); args[0] = upSet(inhomogenous); args[1] = inhomogenous.empty() ? args[0] : upSet(homogenous); return context.builtInReplace(subject, vectorSetPairSymbol->makeDagNode(args)); } // // NumberOpSymbol doesn't know how to deal with this. // return FreeSymbol::eqRewrite(subject, context); } maude-3.1/src/BuiltIn/matrixOpSymbol.hh0000644000175200017520000000465713576050635015072 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2004 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for symbols for built in operations on matrices of numbers. // #ifndef _matrixOpSymbol_hh_ #define _matrixOpSymbol_hh_ #include #include "numberOpSymbol.hh" class MatrixOpSymbol : public NumberOpSymbol { public: MatrixOpSymbol(int id, int arity); bool attachData(const Vector& opDeclaration, const char* purpose, const Vector& data); bool attachSymbol(const char* purpose, Symbol* symbol); void copyAttachments(Symbol* original, SymbolMap* map); void getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data); void getSymbolAttachments(Vector& purposes, Vector& symbols); bool eqRewrite(DagNode* subject, RewritingContext& context); private: enum Algorithm { SYSTEMS_CHOICE, CD, GCD }; typedef map SparseVector; typedef map SparseMatrix; typedef Vector IntVec; bool downMatrixEntry(DagNode* dagNode, SparseMatrix& matrix, int& maxRowNr, int& maxColNr); bool downMatrix(DagNode* dagNode, SparseMatrix& matrix, int& maxRowNr, int& maxColNr); bool downVectorEntry(DagNode* dagNode, IntVec& vec, int& maxRowNr); bool downVector(DagNode* dagNode, IntVec& vec, int& maxRowNr); bool downAlgorithm(DagNode* dagNode, Algorithm& algorithm); DagNode* upSet(const Vector& elts); DagNode* upVector(const IntVec& row); #define MACRO(SymbolName, SymbolClass, RequiredFlags, NrArgs) \ SymbolClass* SymbolName; #include "matrixOpSignature.cc" #undef MACRO }; #endif maude-3.1/src/BuiltIn/minusSymbol.hh0000644000175200017520000000345713650150141014401 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for symbols for the unary minus operation. // #ifndef _minusSymbol_hh_ #define _minusSymbol_hh_ #include "numberOpSymbol.hh" class MinusSymbol : public NumberOpSymbol { public: MinusSymbol(int id); bool attachData(const Vector& opDeclaration, const char* purpose, const Vector& data); void getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data); // // Functions special to MinusSymbol. // DagNode* makeNegDag(const mpz_class& integer); bool isNeg(const DagNode* dagNode) const; const mpz_class& getNeg(const DagNode* dagNode, mpz_class& result) const; DagNode* makeIntDag(const mpz_class& integer); Term* makeIntTerm(const mpz_class& integer); bool isNeg(/* const */ Term* term) const; const mpz_class& getNeg(/* const */ Term* term, mpz_class& result) const; bool getSignedInt64(const DagNode* dagNode, Int64& value) const; }; #endif maude-3.1/src/BuiltIn/equalitySymbol.cc0000755000175200017520000001216313576050735015105 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class EqualitySymbol. // // utility stuff #include "macros.hh" #include "vector.hh" #include "indent.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "freeTheory.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "term.hh" // core class definitions #include "argumentIterator.hh" #include "rewritingContext.hh" // free theory class definitions #include "freeDagNode.hh" // built in class definitions #include "bindingMacros.hh" #include "equalitySymbol.hh" #include "equalityExtor.hh" #include "equalityExtorFinal.hh" // full compiler classes #include "compilationContext.hh" #include "variableName.hh" EqualitySymbol::EqualitySymbol(int id, const Vector& strategy) : FreeSymbol(id, 2, strategy) { } bool EqualitySymbol::attachData(const Vector& opDeclaration, const char* purpose, const Vector& data) { NULL_DATA(purpose, EqualitySymbol, data); return FreeSymbol::attachData(opDeclaration, purpose, data); } bool EqualitySymbol::attachTerm(const char* purpose, Term* term) { BIND_TERM(purpose, term, equalTerm); BIND_TERM(purpose, term, notEqualTerm); return FreeSymbol::attachTerm(purpose, term); } void EqualitySymbol::copyAttachments(Symbol* original, SymbolMap* map) { EqualitySymbol* orig = safeCast(EqualitySymbol*, original); COPY_TERM(orig, equalTerm, map); COPY_TERM(orig, notEqualTerm, map); FreeSymbol::copyAttachments(original, map); } void EqualitySymbol::getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data) { APPEND_DATA(purposes, data, EqualitySymbol); FreeSymbol::getDataAttachments(opDeclaration, purposes, data); } void EqualitySymbol::getTermAttachments(Vector& purposes, Vector& terms) { APPEND_TERM(purposes, terms, equalTerm); APPEND_TERM(purposes, terms, notEqualTerm); FreeSymbol::getTermAttachments(purposes, terms); } void EqualitySymbol::postInterSymbolPass() { (void) equalTerm.normalize(); equalTerm.prepare(); (void) notEqualTerm.normalize(); notEqualTerm.prepare(); } void EqualitySymbol::reset() { equalTerm.reset(); // so equal dag can be garbage collected notEqualTerm.reset(); // so notEqualDag dag can be garbage collected FreeSymbol::reset(); // parents reset() tasks } bool EqualitySymbol::eqRewrite(DagNode* subject, RewritingContext& context) { Assert(this == subject->symbol(), "bad symbol"); FreeDagNode* f = static_cast(subject); DagNode* l = f->getArgument(0); DagNode* r = f->getArgument(1); if (standardStrategy()) { l->reduce(context); r->reduce(context); } else { const Vector& userStrategy = getStrategy(); for(int i = 0;; i++) { int a = userStrategy[i]; if (a == 0) break; f->getArgument(a - 1)->reduce(context); } l->computeTrueSort(context); // we don't need the sort but we do need to normalize r->computeTrueSort(context); } return context.builtInReplace(subject, l->equal(r) ? equalTerm.getDag() : notEqualTerm.getDag()); } bool EqualitySymbol::domainSortAlwaysLeqThan(Sort* /* sort */, int /* argNr */) { return false; } bool EqualitySymbol::acceptEquation(Equation* /* equation */) { return false; } void EqualitySymbol::compileEquations() { } Instruction* EqualitySymbol::generateFinalInstruction(const Vector& argumentSlots) { return new EqualityExtorFinal(this, argumentSlots[0], argumentSlots[1]); } Instruction* EqualitySymbol::generateInstruction(int destination, const Vector& argumentSlots, Instruction* nextInstruction) { return new EqualityExtor(this, argumentSlots[0], argumentSlots[1], destination, nextInstruction); } #ifdef COMPILER void EqualitySymbol::generateCode(CompilationContext& context) const { Vector varNames; // dummy context.body() << Indent(1) << "if (compare(a0, a1) == 0)\n"; context.body() << Indent(2) << "{\n"; equalTerm.getTerm()->generateRhs(context, 3, varNames, 0); context.body() << Indent(2) << "}\n"; context.body() << Indent(1) << "else\n"; context.body() << Indent(2) << "{\n"; notEqualTerm.getTerm()->generateRhs(context, 3, varNames, 0); context.body() << Indent(2) << "}\n"; } #endif maude-3.1/src/BuiltIn/matrixOpSignature.cc0000644000175200017520000000327513576050735015550 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // List of constructors specific to MatrixOpSymbol. // // We generate various chunks of linear (branching) code to handle // this hetrogeneous collection by macro expansion. // The format is: // MACRO(symbols name, symbols C++ class, required type flags, number of args) // MACRO(stringSymbol, StringSymbol, SymbolType::STRING, 0) MACRO(emptyVectorSymbol, Symbol, 0, 0) MACRO(vectorEntrySymbol, FreeSymbol, 0, 2) MACRO(vectorSymbol, ACU_Symbol, SymbolType::ASSOC | SymbolType::COMM, 2) MACRO(emptyMatrixSymbol, Symbol, 0, 0) MACRO(matrixEntrySymbol, FreeSymbol, 0, 2) MACRO(matrixSymbol, ACU_Symbol, SymbolType::ASSOC | SymbolType::COMM, 2) MACRO(indexPairSymbol, FreeSymbol, 0, 2) MACRO(emptyVectorSetSymbol, Symbol, 0, 0) MACRO(vectorSetSymbol, ACU_Symbol, SymbolType::ASSOC | SymbolType::COMM, 2) MACRO(vectorSetPairSymbol, FreeSymbol, 0, 2) maude-3.1/src/BuiltIn/minusSymbol.cc0000644000175200017520000001066113650150126014365 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class MinusSymbol. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "freeTheory.hh" #include "builtIn.hh" // interface class definitions #include "term.hh" #include "argumentIterator.hh" // core class definitions #include "rewritingContext.hh" #include "symbolMap.hh" // free theory class definitions #include "freeNet.hh" #include "freeDagNode.hh" // built in stuff #include "bindingMacros.hh" #include "succSymbol.hh" #include "numberOpSymbol.hh" #include "minusSymbol.hh" MinusSymbol::MinusSymbol(int id) : NumberOpSymbol(id, 1) { } bool MinusSymbol::attachData(const Vector& opDeclaration, const char* purpose, const Vector& data) { if (strcmp(purpose, "MinusSymbol") == 0) { if (data.length() != 0) return false; Vector t(1); t[0] = "-"; return NumberOpSymbol::attachData(opDeclaration, "NumberOpSymbol", t); } return NumberOpSymbol::attachData(opDeclaration, purpose, data); } void MinusSymbol::getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data) { APPEND_DATA(purposes, data, MinusSymbol); // // Need to bypass NumberOpSymbol::getDataAttachments() in order to // avoid getting a NumberOpSymbol id hook. // FreeSymbol::getDataAttachments(opDeclaration, purposes, data); } DagNode* MinusSymbol::makeNegDag(const mpz_class& integer) { Assert(integer < 0, "not negative"); Vector arg(1); arg[0] = getSuccSymbol()->makeNatDag(- integer); // would like to avoid copy return makeDagNode(arg); } bool MinusSymbol::isNeg(const DagNode* dagNode) const { Assert(static_cast(dagNode->symbol()) == this, "symbol mismatch"); DagNode* a = safeCast(const FreeDagNode*, dagNode)->getArgument(0); return a->symbol() == getSuccSymbol() && getSuccSymbol()->isNat(a); } const mpz_class& MinusSymbol::getNeg(const DagNode* dagNode, mpz_class& result) const { Assert(static_cast(dagNode->symbol()) == this, "symbol mismatch"); result = - getSuccSymbol()->getNat(safeCast(const FreeDagNode*, dagNode)->getArgument(0)); return result; } DagNode* MinusSymbol::makeIntDag(const mpz_class& integer) { return (integer >= 0) ? getSuccSymbol()->makeNatDag(integer) : makeNegDag(integer); } Term* MinusSymbol::makeIntTerm(const mpz_class& integer) { if (integer >= 0) return getSuccSymbol()->makeNatTerm(integer); Vector arg(1); arg[0] = getSuccSymbol()->makeNatTerm(- integer); // would like to avoid copy return makeTerm(arg); } bool MinusSymbol::isNeg(/* const */ Term* term) const { Assert(static_cast(term->symbol()) == this, "symbol mismatch"); ArgumentIterator i(*term); Term* t = i.argument(); return t->symbol() == getSuccSymbol() && getSuccSymbol()->isNat(t); } const mpz_class& MinusSymbol::getNeg(/* const */ Term* term, mpz_class& result) const { Assert(static_cast(term->symbol()) == this, "symbol mismatch"); ArgumentIterator i(*term); result = - getSuccSymbol()->getNat(i.argument()); return result; } bool MinusSymbol::getSignedInt64(const DagNode* dagNode, Int64& value) const { if (static_cast(dagNode->symbol()) == this) { const FreeDagNode* f = safeCast(const FreeDagNode*, dagNode); if (getSuccSymbol()->getSignedInt64(f->getArgument(0), value)) { value = -value; return true; } return false; } return getSuccSymbol()->getSignedInt64(dagNode, value); } maude-3.1/src/BuiltIn/randomOpSymbol.cc0000644000175200017520000000605313576050735015025 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2004 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class NumberOpSymbol. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "freeTheory.hh" #include "builtIn.hh" // interface class definitions #include "term.hh" // core class definitions #include "rewritingContext.hh" // free theory class definitions #include "freeDagNode.hh" // built in stuff #include "succSymbol.hh" #include "randomOpSymbol.hh" MTRand::uint32 RandomOpSymbol::globalSeed = 0; RandomOpSymbol::RandomOpSymbol(int id) : NumberOpSymbol(id, 1), currentIndex(0), currentState(globalSeed) { randomNumber = currentState.randInt(); } bool RandomOpSymbol::attachData(const Vector& opDeclaration, const char* purpose, const Vector& data) { if (strcmp(purpose, "RandomOpSymbol") == 0) return true; return NumberOpSymbol::attachData(opDeclaration, purpose, data); } void RandomOpSymbol::getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data) { int nrDataAttachments = purposes.length(); purposes.resize(nrDataAttachments + 1); purposes[nrDataAttachments] = "RandomOpSymbol"; data.resize(nrDataAttachments + 1); NumberOpSymbol::getDataAttachments(opDeclaration, purposes, data); } bool RandomOpSymbol::eqRewrite(DagNode* subject, RewritingContext& context) { FreeDagNode* d = safeCast(FreeDagNode*, subject); DagNode* a = d->getArgument(0); a->reduce(context); SuccSymbol* succSymbol = getSuccSymbol(); if (succSymbol != 0 && succSymbol->isNat(a)) { const mpz_class& wantedIndex = succSymbol->getNat(a); DebugAdvisory("currentIndex = " << currentIndex << " wantedIndex = " << wantedIndex); if (wantedIndex < currentIndex) { currentIndex = 0; currentState.seed(globalSeed); randomNumber = currentState.randInt(); } while (currentIndex < wantedIndex) { ++currentIndex; randomNumber = currentState.randInt(); } return succSymbol->rewriteToNat(subject, context, randomNumber); } // // NumberOpSymbol doesn't know how to deal with this. // return FreeSymbol::eqRewrite(subject, context); } maude-3.1/src/BuiltIn/numberOpSymbol.cc0000644000175200017520000002525513576050735015042 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class NumberOpSymbol. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "freeTheory.hh" #include "builtIn.hh" // interface class definitions #include "term.hh" // core class definitions #include "rewritingContext.hh" #include "symbolMap.hh" // free theory class definitions #include "freeDagNode.hh" // built in stuff #include "bindingMacros.hh" #include "succSymbol.hh" #include "minusSymbol.hh" #include "numberOpSymbol.hh" NumberOpSymbol::NumberOpSymbol(int id, int arity) : FreeSymbol(id, arity) { op = NONE; succSymbol = 0; minusSymbol = 0; } bool NumberOpSymbol::attachData(const Vector& opDeclaration, const char* purpose, const Vector& data) { BIND_OP(purpose, NumberOpSymbol, op, data); return FreeSymbol::attachData(opDeclaration, purpose, data); } bool NumberOpSymbol::attachSymbol(const char* purpose, Symbol* symbol) { BIND_SYMBOL(purpose, symbol, succSymbol, SuccSymbol*); BIND_SYMBOL(purpose, symbol, minusSymbol, MinusSymbol*); return FreeSymbol::attachSymbol(purpose, symbol); } bool NumberOpSymbol::attachTerm(const char* purpose, Term* term) { BIND_TERM(purpose, term, trueTerm); BIND_TERM(purpose, term, falseTerm); return FreeSymbol::attachTerm(purpose, term); } void NumberOpSymbol::copyAttachments(Symbol* original, SymbolMap* map) { NumberOpSymbol* orig = safeCast(NumberOpSymbol*, original); op = orig->op; COPY_SYMBOL(orig, succSymbol, map, SuccSymbol*); COPY_SYMBOL(orig, minusSymbol, map, MinusSymbol*); COPY_TERM(orig, trueTerm, map); COPY_TERM(orig, falseTerm, map); FreeSymbol::copyAttachments(original, map); } void NumberOpSymbol::getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data) { if (op != NONE) { int nrDataAttachments = purposes.length(); purposes.resize(nrDataAttachments + 1); purposes[nrDataAttachments] = "NumberOpSymbol"; data.resize(nrDataAttachments + 1); data[nrDataAttachments].resize(1); const char*& d = data[nrDataAttachments][0]; switch (op) { CODE_CASE(d, '-', 0, "-") CODE_CASE(d, '~', 0, "~") CODE_CASE(d, 'a', 'b', "abs") CODE_CASE(d, '+', 0, "+") CODE_CASE(d, '*', 0, "*") CODE_CASE(d, 'g', 'c', "gcd") CODE_CASE(d, 'l', 'c', "lcm") CODE_CASE(d, '|', 0, "|") CODE_CASE(d, '&', 0, "&") CODE_CASE(d, 'x', 'o', "xor") CODE_CASE(d, 'q', 'u', "quo") CODE_CASE(d, 'r', 'e', "rem") CODE_CASE(d, '^', 0, "^") CODE_CASE(d, '<', '<', "<<") CODE_CASE(d, '>', '>', ">>") CODE_CASE(d, '<', 0, "<") CODE_CASE(d, '<', '=', "<=") CODE_CASE(d, '>', 0, ">") CODE_CASE(d, '>', '=', ">=") CODE_CASE(d, 'd', 'i', "divides") CODE_CASE(d, 'm', 'o', "modExp") default: CantHappen("bad number op"); } } FreeSymbol::getDataAttachments(opDeclaration, purposes, data); } void NumberOpSymbol::getSymbolAttachments(Vector& purposes, Vector& symbols) { APPEND_SYMBOL(purposes, symbols, succSymbol); APPEND_SYMBOL(purposes, symbols, minusSymbol); FreeSymbol::getSymbolAttachments(purposes, symbols); } void NumberOpSymbol::getTermAttachments(Vector& purposes, Vector& terms) { APPEND_TERM(purposes, terms, trueTerm); APPEND_TERM(purposes, terms, falseTerm); FreeSymbol::getTermAttachments(purposes, terms); } void NumberOpSymbol::postInterSymbolPass() { PREPARE_TERM(trueTerm); PREPARE_TERM(falseTerm); } void NumberOpSymbol::reset() { trueTerm.reset(); // so true dag can be garbage collected falseTerm.reset(); // so false dag can be garbage collected FreeSymbol::reset(); // parents reset() tasks } bool NumberOpSymbol::eqRewrite(DagNode* subject, RewritingContext& context) { Assert(this == subject->symbol(), "bad symbol"); int nrArgs = arity(); FreeDagNode* d = safeCast(FreeDagNode*, subject); bool specialEval = (succSymbol != 0); // // Evaluate our arguments and check that they are all numbers // for (int i = 0; i < nrArgs; i++) { DagNode* a = d->getArgument(i); a->reduce(context); if (specialEval && !((a->symbol() == minusSymbol) ? minusSymbol->isNeg(a) : succSymbol->isNat(a))) specialEval = false; } if (specialEval) { mpz_class storage0; DagNode* d0 = d->getArgument(0); const mpz_class& a0 = (d0->symbol() == minusSymbol) ? minusSymbol->getNeg(d0, storage0) : succSymbol->getNat(d0); mpz_class r; if (nrArgs == 1) { switch (op) { case '-': { if (a0 > 0) // avoid infinite loop! goto fail; r = -a0; break; } case '~': { if (minusSymbol == 0) goto fail; r = ~a0; break; } case CODE('a', 'b'): { r = abs(a0); break; } default: CantHappen("bad number op"); } } else { mpz_class storage1; DagNode* d1 = d->getArgument(1); const mpz_class& a1 = (d1->symbol() == minusSymbol) ? minusSymbol->getNeg(d1, storage1) : succSymbol->getNat(d1); if (nrArgs == 2) { switch (op) { // // These seven operations are really AC and are just // included here for completeness. // case '+': { r = a0 + a1; break; } case '*': { r = a0 * a1; break; } case CODE('g', 'c'): { mpz_gcd(r.get_mpz_t(), a0.get_mpz_t(), a1.get_mpz_t()); break; } case CODE('l', 'c'): { mpz_lcm(r.get_mpz_t(), a0.get_mpz_t(), a1.get_mpz_t()); break; } case '&': { r = a0 & a1; break; } case '|': { r = a0 | a1; break; } case CODE('x', 'o'): { r = a0 ^ a1; break; } // // These remaining operations, together with the unary // operations above are the raison d'etre for this class. // case '-': { if (minusSymbol == 0) goto fail; r = a0 - a1; break; } case CODE('q', 'u'): { if (a1 == 0) goto fail; r = a0 / a1; break; } case CODE('r', 'e'): { if (a1 == 0) goto fail; r = a0 % a1; break; } case '^': { if (a1 < 0) goto fail; if (a1 > EXPONENT_BOUND) // handle a0 = -1, 0 or 1 { if (a0 == 0 || a0 == 1) { r = a0; break; } else if (a0 == -1) { mpz_class t = 1; r = ((a1 & t) == 0) ? 1 : -1; break; } goto fail; } mpz_pow_ui(r.get_mpz_t(), a0.get_mpz_t(), mpz_get_ui(a1.get_mpz_t())); break; } case CODE('<', '<'): { if (a1 < 0) goto fail; if (a1 > EXPONENT_BOUND) { if (a0 == 0) { r = 0; break; } goto fail; } r = a0 << mpz_get_ui(a1.get_mpz_t()); break; } case CODE('>', '>'): { if (a1 < 0) goto fail; if (mpz_fits_uint_p(a1.get_mpz_t())) { // // Note that that the C++ binding of operator>> defines // a0 >> a1 using mpz_tdiv_q_2exp() which gives a logical // rather than an arithmetic right shift // with respect to 2's complement representation. // mpz_fdiv_q_2exp(r.get_mpz_t(), a0.get_mpz_t(), mpz_get_ui(a1.get_mpz_t())); } else { mpz_fdiv_q_2exp(r.get_mpz_t(), a0.get_mpz_t(), UINT_MAX); if (r != 0 && r != -1) { // // We get here only in extreme cases where a1 // is in the billions and a0 has billions of // significant bits. // mpz_class t(a1); t -= UINT_MAX; while (!(mpz_fits_uint_p(t.get_mpz_t()))) { mpz_fdiv_q_2exp(r.get_mpz_t(), r.get_mpz_t(), UINT_MAX); if (r == 0 || r == -1) goto done; t -= UINT_MAX; } mpz_fdiv_q_2exp(r.get_mpz_t(), r.get_mpz_t(), mpz_get_ui(t.get_mpz_t())); } done: ; } break; } default: { bool b; switch (op) { case '<': { b = a0 < a1; break; } case CODE('<', '='): { b = a0 <= a1; break; } case '>': { b = a0 > a1; break; } case CODE('>', '='): { b = a0 >= a1; break; } case CODE('d', 'i'): { if (a0 == 0) goto fail; b = mpz_divisible_p(a1.get_mpz_t(), a0.get_mpz_t()); break; } default: CantHappen("bad number op " << op << " in subject " << subject); b = false; // avoid compiler warning } Assert(trueTerm.getTerm() != 0 && falseTerm.getTerm() != 0, "null true/false for relational op"); return context.builtInReplace(subject, b ? trueTerm.getDag() : falseTerm.getDag()); } } } else { Assert(nrArgs == 3, "bad number of args"); mpz_class storage2; DagNode* d2 = d->getArgument(2); const mpz_class& a2 = (d2->symbol() == minusSymbol) ? minusSymbol->getNeg(d2, storage2) : succSymbol->getNat(d2); switch (op) { case CODE('m', 'o'): { if (a0 < 0 || a1 < 0 || a2 < 0) goto fail; mpz_powm(r.get_mpz_t(), a0.get_mpz_t(), a1.get_mpz_t(), a2.get_mpz_t()); break; } default: CantHappen("bad number op"); } } } Assert(minusSymbol != 0 || r >= 0, "can't make -ve int"); return (r >= 0) ? succSymbol->rewriteToNat(subject, context, r) : context.builtInReplace(subject, minusSymbol->makeNegDag(r)); } fail: return FreeSymbol::eqRewrite(subject, context); } bool NumberOpSymbol::getNumber(DagNode* dagNode, mpz_class& value) const { if (dagNode->symbol() == minusSymbol) { if (minusSymbol->isNeg(dagNode)) { (void) minusSymbol->getNeg(dagNode, value); return true; } } else { if (succSymbol->isNat(dagNode)) { value = succSymbol->getNat(dagNode); return true; } } return false; } maude-3.1/src/BuiltIn/floatOpSymbol.hh0000644000175200017520000000407513576050635014665 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for symbols for built in operations on floating point numbers. // #ifndef _FloatOpSymbol_hh_ #define _FloatOpSymbol_hh_ #include "freeSymbol.hh" #include "cachedDag.hh" class FloatOpSymbol : public FreeSymbol { public: FloatOpSymbol(int id, int arity); bool attachData(const Vector& opDeclaration, const char* purpose, const Vector& data); bool attachSymbol(const char* purpose, Symbol* symbol); bool attachTerm(const char* purpose, Term* term); void copyAttachments(Symbol* original, SymbolMap* map); void getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data); void getSymbolAttachments(Vector& purposes, Vector& symbols); void getTermAttachments(Vector& purposes, Vector& terms); void postInterSymbolPass(); void reset(); bool eqRewrite(DagNode* subject, RewritingContext& context); private: int isOdd(double n); double safePow(double a1, double a2, bool& defined); int op; FloatSymbol* floatSymbol; SuccSymbol* succSymbol; MinusSymbol* minusSymbol; DivisionSymbol* divisionSymbol; CachedDag trueTerm; CachedDag falseTerm; }; #endif maude-3.1/src/BuiltIn/succSymbol.hh0000644000175200017520000000420313576050635014207 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for symbols for successor operation. // #ifndef _succSymbol_hh_ #define _succSymbol_hh_ #include #include "S_Symbol.hh" #include "cachedDag.hh" class SuccSymbol : public S_Symbol { public: SuccSymbol(int id); bool attachData(const Vector& opDeclaration, const char* purpose, const Vector& data); bool attachTerm(const char* purpose, Term* term); void copyAttachments(Symbol* original, SymbolMap* map); void getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data); void getTermAttachments(Vector& purposes, Vector& terms); void postInterSymbolPass(); void reset(); // // Functions special to SuccSymbol. // Term* makeNatTerm(const mpz_class& nat); DagNode* makeNatDag(const mpz_class& nat); bool isNat(const Term* term) const; bool isNat(const DagNode* dagNode) const; const mpz_class& getNat(const Term* term) const; const mpz_class& getNat(const DagNode* dagNode) const; bool getSignedInt(const DagNode* dagNode, int& value) const; bool getSignedInt64(const DagNode* dagNode, Int64& value) const; bool rewriteToNat(DagNode* subject, RewritingContext& context, const mpz_class& result); private: CachedDag zeroTerm; }; #endif maude-3.1/src/BuiltIn/floatOpSymbol.cc0000644000175200017520000002715513576312655014662 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class FloatOpSymbol. // // utility stuff #include "macros.hh" #include "vector.hh" #include "mathStuff.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "freeTheory.hh" #include "NA_Theory.hh" #include "builtIn.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "term.hh" // core class definitions #include "rewritingContext.hh" #include "symbolMap.hh" // free theory class definitions #include "freeNet.hh" #include "freeDagNode.hh" // built in class definitions #include "succSymbol.hh" #include "minusSymbol.hh" #include "divisionSymbol.hh" #include "floatSymbol.hh" #include "floatDagNode.hh" #include "floatOpSymbol.hh" #include "bindingMacros.hh" #define isNaN(f) ::isnan(f) FloatOpSymbol::FloatOpSymbol(int id, int arity) : FreeSymbol(id, arity) { op = NONE; floatSymbol = 0; succSymbol = 0; minusSymbol = 0; divisionSymbol = 0; } bool FloatOpSymbol::attachData(const Vector& opDeclaration, const char* purpose, const Vector& data) { BIND_OP(purpose, FloatOpSymbol, op, data); return FreeSymbol::attachData(opDeclaration, purpose, data); } bool FloatOpSymbol::attachSymbol(const char* purpose, Symbol* symbol) { BIND_SYMBOL(purpose, symbol, floatSymbol, FloatSymbol*); BIND_SYMBOL(purpose, symbol, succSymbol, SuccSymbol*); BIND_SYMBOL(purpose, symbol, minusSymbol, MinusSymbol*); BIND_SYMBOL(purpose, symbol, divisionSymbol, DivisionSymbol*); return FreeSymbol::attachSymbol(purpose, symbol); } bool FloatOpSymbol::attachTerm(const char* purpose, Term* term) { BIND_TERM(purpose, term, trueTerm); BIND_TERM(purpose, term, falseTerm); return FreeSymbol::attachTerm(purpose, term); } void FloatOpSymbol::copyAttachments(Symbol* original, SymbolMap* map) { FloatOpSymbol* orig = safeCast(FloatOpSymbol*, original); op = orig->op; COPY_SYMBOL(orig, floatSymbol, map, FloatSymbol*); COPY_SYMBOL(orig, succSymbol, map, SuccSymbol*); COPY_SYMBOL(orig, minusSymbol, map, MinusSymbol*); COPY_SYMBOL(orig, divisionSymbol, map, DivisionSymbol*); COPY_TERM(orig, trueTerm, map); COPY_TERM(orig, falseTerm, map); FreeSymbol::copyAttachments(original, map); } void FloatOpSymbol::getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data) { int nrDataAttachments = purposes.length(); purposes.resize(nrDataAttachments + 1); purposes[nrDataAttachments] = "FloatOpSymbol"; data.resize(nrDataAttachments + 1); data[nrDataAttachments].resize(1); const char*& d = data[nrDataAttachments][0]; switch (op) { CODE_CASE(d, '-', 0, "-") CODE_CASE(d, 'a', 'b', "abs") CODE_CASE(d, 'c', 'e', "ceiling") CODE_CASE(d, 's', 'q', "sqrt") CODE_CASE(d, 'e', 'x', "exp") CODE_CASE(d, 'l', 'o', "log") CODE_CASE(d, 's', 'i', "sin") CODE_CASE(d, 'c', 'o', "cos") CODE_CASE(d, 't', 'a', "tan") CODE_CASE(d, 'a', 's', "asin") CODE_CASE(d, 'a', 'c', "acos") CODE_CASE(d, 'a', 't', "atan") CODE_CASE(d, 'r', 'a', "rat") CODE_CASE(d, '+', 0, "+") CODE_CASE(d, '*', 0, "*") CODE_CASE(d, '/', 0, "/") CODE_CASE(d, 'r', 'e', "rem") CODE_CASE(d, '^', 0, "^") CODE_CASE(d, '<', 0, "<") CODE_CASE(d, '<', '=', "<=") CODE_CASE(d, '>', 0, ">") CODE_CASE(d, '>', '=', ">=") CODE_CASE(d, 'm', 'i', "min") CODE_CASE(d, 'm', 'a', "max") case CODE('f', 'l'): { d = (succSymbol == 0) ? "floor" : "float"; // HACK break; } default: CantHappen("bad float op"); } FreeSymbol::getDataAttachments(opDeclaration, purposes, data); } void FloatOpSymbol::getSymbolAttachments(Vector& purposes, Vector& symbols) { APPEND_SYMBOL(purposes, symbols, floatSymbol); APPEND_SYMBOL(purposes, symbols, succSymbol); APPEND_SYMBOL(purposes, symbols, minusSymbol); APPEND_SYMBOL(purposes, symbols, divisionSymbol); FreeSymbol::getSymbolAttachments(purposes, symbols); } void FloatOpSymbol::getTermAttachments(Vector& purposes, Vector& terms) { APPEND_TERM(purposes, terms, trueTerm); APPEND_TERM(purposes, terms, falseTerm); FreeSymbol::getTermAttachments(purposes, terms); } void FloatOpSymbol::postInterSymbolPass() { PREPARE_TERM(trueTerm); PREPARE_TERM(falseTerm); } void FloatOpSymbol::reset() { trueTerm.reset(); // so true dag can be garbage collected falseTerm.reset(); // so false dag can be garbage collected FreeSymbol::reset(); // parents reset() tasks } bool FloatOpSymbol::eqRewrite(DagNode* subject, RewritingContext& context) { Assert(this == subject->symbol(), "bad symbol"); int nrArgs = arity(); FreeDagNode* d = static_cast(subject); bool floatEval = true; // // Evaluate our arguments and check that they are all floats. // for (int i = 0; i < nrArgs; i++) { DagNode* a = d->getArgument(i); a->reduce(context); if (a->symbol() != floatSymbol) floatEval = false; } if (floatEval) { double a1 = static_cast(d->getArgument(0))->getValue(); double r; if (nrArgs == 1) { switch (op) { case '-': r = -a1; break; case CODE('a', 'b'): r = fabs(a1); break; case CODE('f', 'l'): r = floor(a1); break; case CODE('c', 'e'): r = ceil(a1); break; case CODE('s', 'q'): r = sqrt(a1); break; case CODE('e', 'x'): r = exp(a1); break; case CODE('l', 'o'): { if (a1 < 0) goto fail; // some platforms return NaN, some -Infinity r = log(a1); break; } case CODE('s', 'i'): r = sin(a1); break; case CODE('c', 'o'): r = cos(a1); break; case CODE('t', 'a'): r = tan(a1); break; case CODE('a', 's'): { if (a1 < -1.0 || a1 > 1.0) goto fail; r = asin(a1); break; } case CODE('a', 'c'): { if (a1 < -1.0 || a1 > 1.0) goto fail; r = acos(a1); break; } case CODE('a', 't'): r = atan(a1); break; case CODE('r', 'a'): { if (!(isfinite(a1))) goto fail; mpq_class t; mpq_set_d(t.get_mpq_t(), a1); const mpz_class& numerator = t.get_num(); const mpz_class& denominator = t.get_den(); DagNode* r; if (denominator == 1) { if (numerator >= 0) return succSymbol->rewriteToNat(subject, context, numerator); r = minusSymbol->makeNegDag(numerator); } else r = divisionSymbol->makeRatDag(numerator, denominator); return context.builtInReplace(subject, r); } default: CantHappen("bad float op"); r = 0.0; } } else { double a2 = static_cast(d->getArgument(1))->getValue(); switch (op) { case '+': r = a1 + a2; break; case '-': r = a1 - a2; break; case '*': r = a1 * a2; break; case '/': { if (a2 == 0) goto fail; r = a1 / a2; break; } case CODE('r', 'e'): { if (a2 == 0) goto fail; r = fmod(a1, a2); break; } case '^': { bool defined; r = safePow(a1, a2, defined); if (!defined) goto fail; break; } case CODE('a', 't'): { if (!isfinite(a1) && !isfinite(a2)) { // // Double infinity case: make args finite // a1 = (a1 < 0) ? -1 : 1; a2 = (a2 < 0) ? -1 : 1; } r = atan2(a1, a2); break; } case CODE('m', 'i'): { r = (a1 < a2) ? a1 : a2; break; } case CODE('m', 'a'): { r = (a1 < a2) ? a2 : a1; break; } default: { switch (op) { case '<': r = a1 < a2; break; case CODE('<', '='): r = a1 <= a2; break; case '>': r = a1 > a2; break; case CODE('>', '='): r = a1 >= a2; break; default: CantHappen("bad float op"); r = 0.0; // avoid compiler warning } Assert(trueTerm.getTerm() != 0 && falseTerm.getTerm() != 0, "null true/false for relational op"); return context.builtInReplace(subject, r ? trueTerm.getDag() : falseTerm.getDag()); } } } if (!isNaN(r)) return floatSymbol->rewriteToFloat(subject, context, r); } else if (nrArgs == 1) { DagNode* a0 = d->getArgument(0); if (op == CODE('f', 'l') && succSymbol != 0) // check we're float() and not floor() { if (succSymbol->isNat(a0)) { mpq_class tq(succSymbol->getNat(a0), 1); return floatSymbol->rewriteToFloat(subject, context, mpq_get_d(tq.get_mpq_t())); } else if (a0->symbol() == minusSymbol) { if (minusSymbol->isNeg(a0)) { mpz_class result; mpq_class tq(minusSymbol->getNeg(a0, result), 1); return floatSymbol->rewriteToFloat(subject, context, mpq_get_d(tq.get_mpq_t())); } } else if (a0->symbol() == divisionSymbol) { if (divisionSymbol->isRat(a0)) { mpz_class numerator; const mpz_class& denomenator = divisionSymbol->getRat(a0, numerator); mpq_class tq(numerator, denomenator); return floatSymbol->rewriteToFloat(subject, context, mpq_get_d(tq.get_mpq_t())); } } } } fail: return FreeSymbol::eqRewrite(subject, context); } int FloatOpSymbol::isOdd(double n) { // // Decide if a floating point number is odd or even; // return -1 if neither or can't decide. // if (n != floor(n)) return -1; // fractional if (n < 0) n = -n; if (n > INT_DOUBLE_MAX) // oddness is essentially random return -1; return static_cast(n) & 1; } double FloatOpSymbol::safePow(double a1, double a2, bool& defined) { defined = true; if (isNaN(a1)) { defined = false; return a1; } if (isNaN(a2)) { defined = false; return a2; } if (!isfinite(a1)) { if (a2 == 0.0) return 1.0; if (a2 < 0) return 0.0; if (a1 > 0) return a1; int odd = isOdd(a2); if (odd == -1) { defined = false; return 0.0; } return odd ? a1 : -a1; } if (!isfinite(a2)) { if (a1 > 1.0) return a2 > 0 ? a2 : 0; if (a1 == 1.0) return 1.0; if (a1 > 0.0) return a2 < 0 ? -a2 : 0; if (a2 > 0) { if (a1 <= -1.0) defined = false; } else { if (a1 >= -1.0) defined = false; } return 0; } if (a1 == 0.0 && a2 < 0.0) { // // Some platforms return Infinity. // defined = false; return 0.0; } double r = pow(a1, a2); if (isNaN(r)) defined = false; else if (a1 < 0.0 && r != 0.0) { // // Some platforms get this badly wrong. // int odd = isOdd(a2); if (odd == -1) defined = false; else if ((odd == 1) != (r < 0)) r = -r; // fix sign if pow() got it wrong } return r; } maude-3.1/src/BuiltIn/sortTestSymbol.hh0000644000175200017520000000323213576050635015102 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for symbols for built in sort test operations. // #ifndef _sortTestSymbol_hh_ #define _sortTestSymbol_hh_ #include "freeSymbol.hh" class SortTestSymbol : public FreeSymbol { public: SortTestSymbol(int id, Sort* testSort, FreeSymbol* leq, FreeSymbol* nleq, bool eager); bool eqRewrite(DagNode* subject, RewritingContext& context); bool eager() const; const Sort* sort() const; // // We don't accept or compile any equations. // bool acceptEquation(Equation* equation); void compileEquations(); private: static const Vector& makeLazyStrategy(); Sort* cmpSort; FreeSymbol* leqResult; FreeSymbol* notLeqResult; bool eagerFlag; }; inline bool SortTestSymbol::eager() const { return eagerFlag; } inline const Sort* SortTestSymbol::sort() const { return cmpSort; } #endif maude-3.1/src/BuiltIn/divisionSymbol.hh0000644000175200017520000000412313576050635015077 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for symbols for exact division operation on numbers. // #ifndef _divisionSymbol_hh_ #define _divisionSymbol_hh_ #include "freeSymbol.hh" #include "cachedDag.hh" class DivisionSymbol : public FreeSymbol { public: DivisionSymbol(int id); bool attachData(const Vector& opDeclaration, const char* purpose, const Vector& data); bool attachSymbol(const char* purpose, Symbol* symbol); void copyAttachments(Symbol* original, SymbolMap* map); void getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data); void getSymbolAttachments(Vector& purposes, Vector& symbols); bool eqRewrite(DagNode* subject, RewritingContext& context); // // Functions special to DivisionSymbol. // DagNode* makeRatDag(const mpz_class& nr, const mpz_class& dr); bool isRat(const DagNode* dagNode) const; const mpz_class& getRat(const DagNode* dagNode, mpz_class& numerator) const; Term* makeRatTerm(const mpz_class& nr, const mpz_class& dr); bool isRat(/* const */ Term* term) const; const mpz_class& getRat(/* const */ Term* term, mpz_class& numerator) const; SuccSymbol* succSymbol; MinusSymbol* minusSymbol; }; #endif maude-3.1/src/BuiltIn/equalitySymbol.hh0000755000175200017520000000546313576050635015123 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for symbols for built in equality operations. // #ifndef _equalitySymbol_hh_ #define _equalitySymbol_hh_ #include "freeSymbol.hh" #include "cachedDag.hh" #include "fullCompiler.hh" class EqualitySymbol : public FreeSymbol { public: EqualitySymbol(int id, const Vector& strategy); bool attachData(const Vector& opDeclaration, const char* purpose, const Vector& data); bool attachTerm(const char* purpose, Term* term); void copyAttachments(Symbol* original, SymbolMap* map); void getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data); void getTermAttachments(Vector& purposes, Vector& terms); void postInterSymbolPass(); void reset(); bool eqRewrite(DagNode* subject, RewritingContext& context); // // We don't accept or compile any equations. // bool acceptEquation(Equation* equation); void compileEquations(); bool domainSortAlwaysLeqThan(Sort* sort, int argNr); // // MVM stuff. // Instruction* generateFinalInstruction(const Vector& argumentSlots); Instruction* generateInstruction(int destination, const Vector& argumentSlots, Instruction* nextInstruction); void stackMachineCompile(); Instruction* getEqualInstructionSequence() const; Instruction* getNotEqualInstructionSequence() const; #ifdef COMPILER void generateCode(CompilationContext& context) const; #endif private: CachedDag equalTerm; CachedDag notEqualTerm; }; inline void EqualitySymbol::stackMachineCompile() { if (equalTerm.getInstructionSequence() == 0) { equalTerm.generateInstructionSequence(); notEqualTerm.generateInstructionSequence(); } } inline Instruction* EqualitySymbol::getEqualInstructionSequence() const { return equalTerm.getInstructionSequence(); } inline Instruction* EqualitySymbol::getNotEqualInstructionSequence() const { return notEqualTerm.getInstructionSequence(); } #endif maude-3.1/src/BuiltIn/counterSymbol.hh0000644000175200017520000000332613576050635014736 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2004 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for symbols for built in operations on numbers. // #ifndef _counterSymbol_hh_ #define _counterSymbol_hh_ #include #include #include "numberOpSymbol.hh" class CounterSymbol : public NumberOpSymbol { public: CounterSymbol(int id); bool attachData(const Vector& opDeclaration, const char* purpose, const Vector& data); void getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data); void resetRules(); //void saveHiddenState(); //void restoreHiddenState(); bool eqRewrite(DagNode* subject, RewritingContext& context); DagNode* ruleRewrite(DagNode* subject, RewritingContext& context); private: //typedef stack > MpzStack; // optimize for the empty case mpz_class currentValue; // MpzStack currentValueStack; }; #endif maude-3.1/src/BuiltIn/succSymbol.cc0000644000175200017520000001276613576050735014213 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class SuccSymbol. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "freeTheory.hh" #include "S_Theory.hh" // interface class definitions #include "term.hh" // core class definitions #include "rewritingContext.hh" #include "symbolMap.hh" // S theory class definitions #include "S_Symbol.hh" #include "S_DagNode.hh" #include "S_Term.hh" // built in stuff #include "bindingMacros.hh" #include "succSymbol.hh" SuccSymbol::SuccSymbol(int id) : S_Symbol(id) { } bool SuccSymbol::attachData(const Vector& opDeclaration, const char* purpose, const Vector& data) { NULL_DATA(purpose, SuccSymbol, data); return S_Symbol::attachData(opDeclaration, purpose, data); } bool SuccSymbol::attachTerm(const char* purpose, Term* term) { BIND_TERM(purpose, term, zeroTerm); return S_Symbol::attachTerm(purpose, term); } void SuccSymbol::copyAttachments(Symbol* original, SymbolMap* map) { SuccSymbol* orig = safeCast(SuccSymbol*, original); COPY_TERM(orig, zeroTerm, map); S_Symbol::copyAttachments(original, map); } void SuccSymbol::getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data) { APPEND_DATA(purposes, data, SuccSymbol); S_Symbol::getDataAttachments(opDeclaration, purposes, data); } void SuccSymbol::getTermAttachments(Vector& purposes, Vector& terms) { APPEND_TERM(purposes, terms, zeroTerm); S_Symbol::getTermAttachments(purposes, terms); } void SuccSymbol::postInterSymbolPass() { PREPARE_TERM(zeroTerm); } void SuccSymbol::reset() { zeroTerm.reset(); // so zero dag can be garbage collected S_Symbol::reset(); // parents reset() tasks } Term* SuccSymbol::makeNatTerm(const mpz_class& nat) { Assert(zeroTerm.getTerm() != 0, "zero not defined for " << this); Term* zero = zeroTerm.getTerm()->deepCopy(); return (nat == 0) ? zero : (new S_Term(this, nat, zero)); } DagNode* SuccSymbol::makeNatDag(const mpz_class& nat) { Assert(zeroTerm.getTerm() != 0, "zero not defined"); DagNode* zero = zeroTerm.getDag(); return (nat == 0) ? zero : (new S_DagNode(this, nat, zero)); } bool SuccSymbol::isNat(const Term* term) const { const Symbol* s = term->symbol(); return zeroTerm.getTerm()-> equal((s != this) ? term : safeCast(const S_Term*, term)->getArgument()); } bool SuccSymbol::isNat(const DagNode* dagNode) const { const Symbol* s = dagNode->symbol(); return zeroTerm.getTerm()-> equal((s != this) ? dagNode : safeCast(const S_DagNode*, dagNode)->getArgument()); } const mpz_class& SuccSymbol::getNat(const Term* term) const { static mpz_class zero(0); const Symbol* s = term->symbol(); if (s != this) { Assert(zeroTerm.getTerm()->equal(term), "not a nat"); return zero; } const S_Term* st = safeCast(const S_Term*, term); Assert(zeroTerm.getTerm()->equal(st->getArgument()), "arg not zero"); return st->getNumber(); } const mpz_class& SuccSymbol::getNat(const DagNode* dagNode) const { static mpz_class zero(0); const Symbol* s = dagNode->symbol(); if (s != this) { Assert(zeroTerm.getTerm()->equal(dagNode), "not a nat"); return zero; } const S_DagNode* sd = safeCast(const S_DagNode*, dagNode); Assert(zeroTerm.getTerm()->equal(sd->getArgument()), "arg not zero"); return sd->getNumber(); } bool SuccSymbol::getSignedInt(const DagNode* dagNode, int& value) const { if (isNat(dagNode)) { const mpz_class& n = getNat(dagNode); if (n.fits_sint_p()) { value = n.get_si(); return true; } } return false; } bool SuccSymbol::getSignedInt64(const DagNode* dagNode, Int64& value) const { if (isNat(dagNode)) { const mpz_class& n = getNat(dagNode); mpz_class u = n >> BITS_PER_UINT; if (u.fits_sint_p()) { value = u.get_si(); value <<= BITS_PER_UINT; value |= n.get_ui(); return true; } } return false; } bool SuccSymbol::rewriteToNat(DagNode* subject, RewritingContext& context, const mpz_class& result) { Assert(result >= 0, "-ve"); Assert(zeroTerm.getTerm() != 0, "zero not defined"); DagNode* zero = zeroTerm.getDag(); if (result == 0) return context.builtInReplace(subject, zero); bool trace = RewritingContext::getTraceStatus(); if (trace) { context.tracePreEqRewrite(subject, 0, RewritingContext::BUILTIN); if (context.traceAbort()) return false; } (void) new(subject) S_DagNode(this, result, zero); context.incrementEqCount(); if (trace) context.tracePostEqRewrite(subject); return true; } maude-3.1/src/BuiltIn/ACU_NumberOpSymbol.hh0000644000175200017520000000336313576050635015477 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for symbols for built in ACU operations on numbers. // #ifndef _ACU_NumberOpSymbol_hh_ #define _ACU_NumberOpSymbol_hh_ #include "ACU_Symbol.hh" class ACU_NumberOpSymbol : public ACU_Symbol { public: ACU_NumberOpSymbol(int id); bool attachData(const Vector& opDeclaration, const char* purpose, const Vector& data); bool attachSymbol(const char* purpose, Symbol* symbol); void copyAttachments(Symbol* original, SymbolMap* map); void getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data); void getSymbolAttachments(Vector& purposes, Vector& symbols); bool eqRewrite(DagNode* subject, RewritingContext& context); private: bool eqRewrite2(DagNode* subject, RewritingContext& context); int op; SuccSymbol* succSymbol; MinusSymbol* minusSymbol; }; #endif maude-3.1/src/BuiltIn/equalityExtor.cc0000755000175200017520000000563213576050735014744 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2013 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class EqualityExtor. // // utility stuff #include "macros.hh" #include "vector.hh" #include "indent.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "variable.hh" #include "freeTheory.hh" // core class definitions #include "frame.hh" #include "stackMachine.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "term.hh" // free theory class definitions #include "equalitySymbol.hh" #include "equalityExtor.hh" EqualityExtor::EqualityExtor(EqualitySymbol* symbol, int argIndex0, int argIndex1, int destinationIndex, Instruction* nextInstruction) : NonFinalExtor(destinationIndex, nextInstruction), symbol(symbol), argIndex0(argIndex0), argIndex1(argIndex1) { // // Since EqualitySymbols are generated as needed and inserted as late symbols, we compile on demand. // It is safe to call stackMachineCompile() multiple times on the same EqualitySymbol. // symbol->stackMachineCompile(); } void EqualityExtor::execute(StackMachine* machine) const { // // Get the stack frame containing the pointer to us. // Frame* frame = machine->getTopFrame(); // // Check equality of arguments. // bool equal = frame->getSlot(argIndex0)->equal(frame->getSlot(argIndex1)); // // Get approriate instruction sequence. // Instruction* ni = equal ? symbol->getEqualInstructionSequence() : symbol->getNotEqualInstructionSequence(); // // Make a new stack frame without reloading old frame or recording new frame in machine. // Frame* nextFrame = fastPushFrame(frame); // // Move instruction pointer in old frame to next instruction. // frame->setNextInstruction(getNextInstruction()); // // Set return frame and addres for new frame. // nextFrame->setAncestorWithValidNextInstruction(frame); nextFrame->setReturnAddress(frame, getDestinationIndex()); // // Record new frame, and increment rewrite count. // machine->setTopFrame(nextFrame); machine->incrementEqCount(); ni->execute(machine); // tail call (should we worry about collecting garbage?) } maude-3.1/src/BuiltIn/equalityExtorFinal.cc0000755000175200017520000000264613576050735015720 00000000000000// utility stuff #include "macros.hh" #include "vector.hh" #include "indent.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "variable.hh" #include "freeTheory.hh" // core class definitions #include "frame.hh" #include "stackMachine.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "term.hh" // free theory class definitions #include "equalitySymbol.hh" #include "equalityExtorFinal.hh" EqualityExtorFinal::EqualityExtorFinal(EqualitySymbol* symbol, int argIndex0, int argIndex1) : symbol(symbol), argIndex0(argIndex0), argIndex1(argIndex1) { // // Since EqualitySymbols are generated as needed and inserted as late symbols, we compile on demand. // It is safe to call stackMachineCompile() multiple times on the same EqualitySymbol. // symbol->stackMachineCompile(); } void EqualityExtorFinal::execute(StackMachine* machine) const { // // Get the stack frame containing the pointer to us. // Frame* frame = machine->getTopFrame(); // // Check equality of arguments. // bool equal = frame->getSlot(argIndex0)->equal(frame->getSlot(argIndex1)); // // Run approriate instruction sequence. // Instruction* ni = equal ? symbol->getEqualInstructionSequence() : symbol->getNotEqualInstructionSequence(); machine->incrementEqCount(); ni->execute(machine); // tail call (should we worry about collecting garbage?) } maude-3.1/src/BuiltIn/floatDagNode.hh0000644000175200017520000000266413576050635014424 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for dag nodes containing floating point numbers. // #ifndef _floatDagNode_hh_ #define _floatDagNode_hh_ #include "NA_DagNode.hh" class FloatDagNode : public NA_DagNode { public: FloatDagNode(FloatSymbol* symbol, double value); size_t getHashValue(); int compareArguments(const DagNode* other) const; void overwriteWithClone(DagNode* old); DagNode* makeClone(); double getValue() const; private: const union { double value; Int64 bitPattern; }; friend class FloatTerm; // for comparison }; inline double FloatDagNode::getValue() const { return value; } #endif maude-3.1/src/BuiltIn/numberOpSymbol.hh0000755000175200017520000000512513576050635015050 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for symbols for built in operations on numbers. // #ifndef _numberOpSymbol_hh_ #define _numberOpSymbol_hh_ #include "freeSymbol.hh" #include "cachedDag.hh" #include "gmpxx.h" class NumberOpSymbol : public FreeSymbol { public: NumberOpSymbol(int id, int arity); bool attachData(const Vector& opDeclaration, const char* purpose, const Vector& data); bool attachSymbol(const char* purpose, Symbol* symbol); bool attachTerm(const char* purpose, Term* term); void copyAttachments(Symbol* original, SymbolMap* map); void getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data); void getSymbolAttachments(Vector& purposes, Vector& symbols); void getTermAttachments(Vector& purposes, Vector& terms); void postInterSymbolPass(); void reset(); bool eqRewrite(DagNode* subject, RewritingContext& context); // // Functions special to NumberOpSymbol. // /* DagNode* makeNegDag(const mpz_class& integer); bool isNeg(const DagNode* dagNode) const; const mpz_class& getNeg(const DagNode* dagNode, mpz_class& result) const; */ protected: SuccSymbol* getSuccSymbol() const; MinusSymbol* getMinusSymbol() const; bool getNumber(DagNode* dagNode, mpz_class& value) const; private: enum ImplementationConstants { EXPONENT_BOUND = 1000000 // max allowed exponent to limit runaway memory use }; int op; SuccSymbol* succSymbol; MinusSymbol* minusSymbol; CachedDag trueTerm; CachedDag falseTerm; }; inline SuccSymbol* NumberOpSymbol::getSuccSymbol() const { return succSymbol; } inline MinusSymbol* NumberOpSymbol::getMinusSymbol() const { return minusSymbol; } #endif maude-3.1/src/BuiltIn/floatTerm.hh0000644000175200017520000000316013576050635014022 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for terms containing floating point numbers. // #ifndef _floatTerm_hh_ #define _floatTerm_hh_ #include "NA_Term.hh" class FloatTerm : public NA_Term { public: FloatTerm(FloatSymbol* symbol, double value); Term* deepCopy2(SymbolMap* map) const; Term* normalize(bool full, bool& changed); int compareArguments(const Term* other) const; int compareArguments(const DagNode* other) const; void overwriteWithDagNode(DagNode* old) const; NA_DagNode* makeDagNode() const; // // Needed because we have hidden data. // Term* instantiate2(const Vector& varBindings, SymbolMap* translator); double getValue() const; private: const union { double value; Int64 bitPattern; }; }; inline double FloatTerm::getValue() const { return value; } #endif maude-3.1/src/BuiltIn/stringSymbol.cc0000644000175200017520000000462713576050735014561 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class StringSymbol. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "NA_Theory.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "term.hh" // built in class definitions #include "stringSymbol.hh" #include "stringTerm.hh" #include "stringDagNode.hh" StringSymbol::StringSymbol(int id) : NA_Symbol(id) { sort = 0; charSort = 0; } void StringSymbol::fillInSortInfo(Term* subject) { Sort* s = (static_cast(subject)->getValue().length() == 1) ? charSort : sort; subject->setSortInfo(s->component(), s->index()); } void StringSymbol::computeBaseSort(DagNode* subject) { Sort* s = (static_cast(subject)->getValue().length() == 1) ? charSort : sort; subject->setSortIndex(s->index()); } bool StringSymbol::isConstructor(DagNode* /* subject */) { return true; } void StringSymbol::compileOpDeclarations() { const Vector& opDecls = getOpDeclarations(); int nrOpDecls = opDecls.length(); for (int i = 0; i < nrOpDecls; i++) { Sort* s = opDecls[i].getDomainAndRange()[0]; if (sort == 0 || s->index() < sort->index()) sort = s; // set sort to largest (smallest index) declared sort if (charSort == 0 || s->index() > charSort->index()) charSort = s; // set charSort to smallest (largest index) declared sort } } Term* StringSymbol::termify(DagNode* dagNode) { return new StringTerm(this, safeCast(StringDagNode*, dagNode)->getValue()); } maude-3.1/src/BuiltIn/branchSymbol.cc0000644000175200017520000001422713576050735014505 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class BranchSymbol. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "freeTheory.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "term.hh" // core class definitions #include "argumentIterator.hh" #include "rewritingContext.hh" // free theory class definitions #include "freeDagNode.hh" // built in class definitions #include "bindingMacros.hh" #include "branchSymbol.hh" BranchSymbol::BranchSymbol(int id, int nrArgs) : FreeSymbol(id, nrArgs) { } BranchSymbol::~BranchSymbol() { int nrTestTerms = testTerms.length(); for (int i = 0; i < nrTestTerms; i++) testTerms[i]->deepSelfDestruct(); } bool BranchSymbol::attachData(const Vector& opDeclaration, const char* purpose, const Vector& data) { NULL_DATA(purpose, BranchSymbol, data); return FreeSymbol::attachData(opDeclaration, purpose, data); } bool BranchSymbol::attachTerm(const char* purpose, Term* term) { int index = atoi(purpose); if (index > 0) { int len = testTerms.length(); if (len < index) { testTerms.resize(index); for (; len < index; len++) testTerms[len] = 0; } if (testTerms[index - 1] == 0) { testTerms[index - 1] = term; return true; } else { DebugAdvisory("BranchSymbol::attachTerm(): " << index << " slot already contains " << testTerms[index - 1]); } } return FreeSymbol::attachTerm(purpose, term); } void BranchSymbol::copyAttachments(Symbol* original, SymbolMap* map) { BranchSymbol* orig = safeCast(BranchSymbol*, original); int nrTerms = orig->testTerms.length(); int len = testTerms.length(); if (len < nrTerms) { testTerms.resize(nrTerms); for (; len < nrTerms; len++) testTerms[len] = 0; } for (int i = 0; i < nrTerms; i++) { if (testTerms[i] == 0) { if (Term* t = orig->testTerms[i]) testTerms[i] = t->deepCopy(map); } } FreeSymbol::copyAttachments(original, map); } void BranchSymbol::getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data) { APPEND_DATA(purposes, data, BranchSymbol); FreeSymbol::getDataAttachments(opDeclaration, purposes, data); } void BranchSymbol::getTermAttachments(Vector& purposes, Vector& terms) { static Vector numbers; int nrTerms = testTerms.length(); int nrNumbers = numbers.length(); if (nrNumbers < nrTerms) { numbers.resize(nrTerms); for (; nrNumbers < nrTerms; nrNumbers++) numbers[nrNumbers] = int64ToString(nrNumbers + 1); } for (int i = 0; i < nrTerms; i++) { if (Term* t = testTerms[i]) { purposes.append(numbers[i].c_str()); terms.append(t); } } FreeSymbol::getTermAttachments(purposes, terms); } bool BranchSymbol::eqRewrite(DagNode* subject, RewritingContext& context) { Assert(this == subject->symbol(), "bad symbol"); FreeDagNode* f = static_cast(subject); DagNode *e = f->getArgument(0); e->reduce(context); int nrTerms = testTerms.length(); for (int i = 0; i < nrTerms; i++) { if(testTerms[i]->equal(e)) return context.builtInReplace(subject, f->getArgument(i + 1)); } // // First argument failed to match any of our test terms. We now need to reduce // all other arguments. // for (int i = 1; i <= nrTerms; i++) f->getArgument(i)->reduce(context); return FreeSymbol::eqRewrite(subject, context); } void BranchSymbol::compileOpDeclarations() { // // Add fake declarations to encode our sort structure. // const Vector& baseDecl = getOpDeclarations()[0].getDomainAndRange(); int declSize = baseDecl.size(); Vector domainAndRange(declSize); domainAndRange[0] = baseDecl[0]; ConnectedComponent* kind = baseDecl[1]->component(); int nrSorts = kind->nrSorts(); for (int i = 1; i < nrSorts; ++i) { Sort* sort = kind->sort(i); // // Add a declaration // firstSort sort sort ... sort -> sort // for (int j = 1; j < declSize; ++j) domainAndRange[j] = sort; addOpDeclaration(domainAndRange, false); // should never be a ctor } FreeSymbol::compileOpDeclarations(); } bool BranchSymbol::rangeSortNeverLeqThan(Sort* /* sort */) { return false; } bool BranchSymbol::rangeSortAlwaysLeqThan(Sort* /* sort */) { return false; } bool BranchSymbol::domainSortAlwaysLeqThan(Sort* /* sort */, int /* argNr */) { return false; } void BranchSymbol::stackArguments(DagNode* subject, Vector& stack, int parentIndex, bool respectFrozen, bool eagerContext) { // // We need to define this because we have a builtin strategy. We stack // the first argument as eager and the rest as lazy. // const NatSet& frozen = getFrozen(); FreeDagNode* f = safeCast(FreeDagNode*, subject); DagNode* d = f->getArgument(0); if (!(respectFrozen && frozen.contains(0)) && !(d->isUnstackable())) stack.append(RedexPosition(d, parentIndex, 0, eagerContext)); int nrTerms = testTerms.length(); for (int i = 1; i <= nrTerms; i++) { d = f->getArgument(i); if (!(respectFrozen && frozen.contains(i)) && !(d->isUnstackable())) stack.append(RedexPosition(d, parentIndex, i, false)); } } maude-3.1/src/BuiltIn/equalityExtorFinal.hh0000755000175200017520000000257213576050635015727 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2014 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Stack machine non-final extor for equality symbols. // #ifndef _equalityExtorFinal_hh_ #define _equalityExtorFinal_hh_ #include "finalInstruction.hh" class EqualityExtorFinal : public FinalInstruction { NO_COPYING(EqualityExtorFinal); public: EqualityExtorFinal(EqualitySymbol* symbol, int argIndex0, int argIndex1); void execute(StackMachine* machine) const; #ifdef DUMP //void dump(ostream& s, int indentLevel); #endif private: EqualitySymbol* const symbol; const SlotIndex argIndex0; const SlotIndex argIndex1; }; #endif maude-3.1/src/BuiltIn/bindingMacros.hh0000755000175200017520000001004513576050635014647 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Macros for binding stuff in builtins. // #ifndef _bindingMacros_hh_ #define _bindingMacros_hh_ // // This needs to be a macro in order to produce constant expressions. // #define CODE(c1, c2) ((c1) + ((c2) << 8)) #define CODE3(c1, c2, c3) ((c1) + ((c2) << 8) + ((c3) << 16)) #define BIND_OP(purpose, className, op, data) \ if (strcmp(purpose, #className) == 0) \ { \ if (data.length() == 1) \ { \ const char* opName = (data)[0]; \ if (opName[0] != '\0') \ { \ int t = CODE(opName[0], opName[1]); \ if (op == NONE) \ { \ op = t; \ return true; \ } \ if (op == t) \ return true; \ } \ } \ return false; \ } #define BIND_OP3(purpose, className, op, data) \ if (strcmp(purpose, #className) == 0) \ { \ if (data.length() == 1) \ { \ const char* opName = (data)[0]; \ if (opName[0] != '\0') \ { \ int t = (opName[1] == '\0') ? CODE(opName[0], opName[1]) : CODE3(opName[0], opName[1], opName[2]); \ if (op == NONE) \ { \ op = t; \ return true; \ } \ if (op == t) \ return true; \ } \ } \ return false; \ } #define NULL_DATA(purpose, className, data) \ if (strcmp(purpose, #className) == 0) \ { \ return data.length() == 0; \ } #define BIND_SYMBOL(purpose, symbol, name, type) \ if (strcmp(purpose, #name) == 0) \ { \ if (name != 0) \ return name == symbol; \ name = dynamic_cast(symbol); \ return name != 0; \ } #define BIND_SYMBOL2(purpose, symbol, name, type, nrArgs) \ if (strcmp(purpose, #name) == 0) \ { \ if (name != 0) \ return name == symbol; \ if (symbol->arity() != nrArgs) \ return false; \ name = dynamic_cast(symbol); \ return name != 0; \ } #define BIND_TERM(purpose, term, name) \ if (strcmp(purpose, #name) == 0) \ { \ bool r = true; \ if (Term* t = name.getTerm()) \ { \ r = term->equal(t); \ term->deepSelfDestruct(); \ } \ else \ name.setTerm(term); \ return r; \ } #define PREPARE_TERM(name) \ if (name.getTerm() != 0) \ { \ (void) name.normalize(); \ name.prepare(); \ } #define COPY_SYMBOL(original, name, mapping, type) \ if (name == 0) \ { \ if (type s = original->name) \ name = (mapping == 0) ? s : safeCast(type, mapping->translate(s)); \ } #define COPY_TERM(original, name, mapping) \ if (name.getTerm() == 0) \ { \ if (Term* t = original->name.getTerm()) \ name.setTerm(t->deepCopy(mapping)); \ } #define APPEND_DATA(purposes, data, name) \ { \ int n = purposes.length(); \ purposes.resize(n + 1); \ purposes[n] = #name; \ data.resize(n + 1); \ } #define APPEND_SYMBOL(purposes, symbols, name) \ if (name != 0) \ { \ purposes.append(#name); \ symbols.append(name); \ } #define APPEND_TERM(purposes, terms, name) \ if (Term* t = name.getTerm()) \ { \ purposes.append(#name); \ terms.append(t); \ } #define CODE_CASE(d, c1, c2, s) \ case CODE(c1, c2): \ { \ d = s; \ break; \ } #define CODE_CASE3(d, c1, c2, c3, s) \ case CODE3(c1, c2, c3): \ { \ d = s; \ break; \ } #endif maude-3.1/src/BuiltIn/randomOpSymbol.hh0000644000175200017520000000326013576050635015033 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2004 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for symbols for built in operations on numbers. // #ifndef _randomOpSymbol_hh_ #define _randomOpSymbol_hh_ #include "numberOpSymbol.hh" #include "MersenneTwister.h" class RandomOpSymbol : public NumberOpSymbol { public: RandomOpSymbol(int id); bool attachData(const Vector& opDeclaration, const char* purpose, const Vector& data); void getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data); bool eqRewrite(DagNode* subject, RewritingContext& context); static void setGlobalSeed(MTRand::uint32 value); private: static MTRand::uint32 globalSeed; mpz_class currentIndex; MTRand currentState; MTRand::uint32 randomNumber; }; inline void RandomOpSymbol::setGlobalSeed(MTRand::uint32 value) { globalSeed = value; } #endif maude-3.1/src/BuiltIn/floatSymbol.hh0000644000175200017520000000255413576050635014366 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for floating point number symbols. // #ifndef _floatSymbol_hh_ #define _floatSymbol_hh_ #include "NA_Symbol.hh" class FloatSymbol : public NA_Symbol { public: FloatSymbol(int id); void fillInSortInfo(Term* subject); void computeBaseSort(DagNode* subject); void compileOpDeclarations(); bool isConstructor(DagNode* subject); bool rewriteToFloat(DagNode* subject, RewritingContext& context, double result); Term* termify(DagNode* dagNode); private: Sort* sort; Sort* finiteSort; }; #endif maude-3.1/src/BuiltIn/builtIn.hh0000755000175200017520000000255613576050635013506 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Forward declarations for builtin symbol classes. // #ifndef _builtin_hh_ #define _builtin_hh_ class BranchSymbol; class EqualitySymbol; class SortTestSymbol; class SuccSymbol; class NumberOpSymbol; class MinusSymbol; class ACU_NumberOpSymbol; class DivisionSymbol; class FloatSymbol; class FloatTerm; class FloatDagNode; class FloatOpSymbol; class StringSymbol; class StringTerm; class StringDagNode; class StringOpSymbol; class RandomOpSymbol; class CounterSymbol; class EqualityExtor; class EqualityExtorFinal; #endif maude-3.1/src/BuiltIn/floatSymbol.cc0000644000175200017520000000575313576050735014361 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class FloatSymbol. // // utility stuff #include "macros.hh" #include "vector.hh" #include "mathStuff.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "NA_Theory.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "term.hh" // core class definitions #include "rewritingContext.hh" // built in class definitions #include "floatSymbol.hh" #include "floatTerm.hh" #include "floatDagNode.hh" FloatSymbol::FloatSymbol(int id) : NA_Symbol(id) { sort = 0; finiteSort = 0; } void FloatSymbol::fillInSortInfo(Term* subject) { Sort* s = isfinite(static_cast(subject)->getValue()) ? finiteSort : sort; subject->setSortInfo(s->component(), s->index()); } void FloatSymbol::computeBaseSort(DagNode* subject) { Sort* s = isfinite(static_cast(subject)->getValue()) ? finiteSort : sort; subject->setSortIndex(s->index()); } bool FloatSymbol::isConstructor(DagNode* /* subject */) { return true; } void FloatSymbol::compileOpDeclarations() { // NA_Symbol::compileOpDeclarations(); // default processing const Vector& opDecls = getOpDeclarations(); int nrOpDecls = opDecls.length(); for (int i = 0; i < nrOpDecls; i++) { Sort* s = opDecls[i].getDomainAndRange()[0]; if (sort == 0 || s->index() < sort->index()) sort = s; // set sort to largest (smallest index) declared sort if (finiteSort == 0 || s->index() > finiteSort->index()) finiteSort = s; // set finiteSort to smallest (largest index) declared sort } } bool FloatSymbol::rewriteToFloat(DagNode* subject, RewritingContext& context, double result) { bool trace = RewritingContext::getTraceStatus(); if (trace) { context.tracePreEqRewrite(subject, 0, RewritingContext::BUILTIN); if (context.traceAbort()) return false; } (void) new(subject) FloatDagNode(this, result); context.incrementEqCount(); if (trace) context.tracePostEqRewrite(subject); return true; } Term* FloatSymbol::termify(DagNode* dagNode) { return new FloatTerm(this, safeCast(FloatDagNode*, dagNode)->getValue()); } maude-3.1/src/BuiltIn/branchSymbol.hh0000644000175200017520000000424713576050635014517 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for symbols for built in branch (if-then-else-fi type) operations. // #ifndef _branchSymbol_hh_ #define _branchSymbol_hh_ #include "freeSymbol.hh" class BranchSymbol : public FreeSymbol { public: BranchSymbol(int id, int nrArgs); ~BranchSymbol(); bool attachData(const Vector& opDeclaration, const char* purpose, const Vector& data); bool attachTerm(const char* purpose, Term* term); void copyAttachments(Symbol* original, SymbolMap* map); void getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data); void getTermAttachments(Vector& purposes, Vector& terms); // // Built in equational rewriting semantics and strategy. // bool eqRewrite(DagNode* subject, RewritingContext& context); void stackArguments(DagNode* subject, Vector& stack, int parentIndex, bool respectFrozen, bool eagerContext); // // We need to insert some fake declarations to encode our sort // structure and we disable sort based optimizations. // void compileOpDeclarations(); bool rangeSortNeverLeqThan(Sort* sort); bool rangeSortAlwaysLeqThan(Sort* sort); bool domainSortAlwaysLeqThan(Sort* sort, int argNr); private: Vector testTerms; }; #endif maude-3.1/src/BuiltIn/sortTestSymbol.cc0000644000175200017520000000525613576050735015101 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class SortTestSymbol. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "freeTheory.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "term.hh" // core class definitions #include "argumentIterator.hh" #include "rewritingContext.hh" // free theory class definitions #include "freeDagNode.hh" // built in class definitions #include "sortTestSymbol.hh" const Vector& SortTestSymbol::makeLazyStrategy() { static Vector lazyStrategy; if (lazyStrategy.length() == 0) lazyStrategy.append(0); return lazyStrategy; } SortTestSymbol::SortTestSymbol(int id, Sort* testSort, FreeSymbol* leq, FreeSymbol* nleq, bool eager) : FreeSymbol(id, 1, eager ? standard : makeLazyStrategy()) { cmpSort = testSort; leqResult = leq; notLeqResult = nleq; eagerFlag = eager; } bool SortTestSymbol::eqRewrite(DagNode* subject, RewritingContext& context) { Assert(this == subject->symbol(), "bad symbol"); DagNode *t = static_cast(subject)->getArgument(0); if (eagerFlag) t->reduce(context); else t->computeTrueSort(context); t->symbol()->constrainToExactSort(t, context); // HACK FreeSymbol* result = (t->leq(cmpSort)) ? leqResult : notLeqResult; bool trace = RewritingContext::getTraceStatus(); if (trace) { context.tracePreEqRewrite(subject, 0, RewritingContext::BUILTIN); if (context.traceAbort()) return false; } (void) new(subject) FreeDagNode(result); context.incrementEqCount(); if (trace) context.tracePostEqRewrite(subject); return true; } bool SortTestSymbol::acceptEquation(Equation* /* equation */) { return false; } void SortTestSymbol::compileEquations() { } maude-3.1/src/BuiltIn/ACU_NumberOpSymbol.cc0000644000175200017520000001666113734516043015466 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class ACU_NumberOpSymbol. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "freeTheory.hh" #include "ACU_Persistent.hh" #include "ACU_Theory.hh" #include "builtIn.hh" // interface class definitions #include "term.hh" // core class definitions #include "rewritingContext.hh" #include "symbolMap.hh" #include "dagArgumentIterator.hh" // ACU theory class definitions #include "ACU_Symbol.hh" #include "ACU_DagNode.hh" // built in stuff #include "bindingMacros.hh" #include "succSymbol.hh" #include "minusSymbol.hh" #include "ACU_NumberOpSymbol.hh" ACU_NumberOpSymbol::ACU_NumberOpSymbol(int id) : ACU_Symbol(id) { op = NONE; succSymbol = 0; minusSymbol = 0; } bool ACU_NumberOpSymbol::attachData(const Vector& opDeclaration, const char* purpose, const Vector& data) { BIND_OP(purpose, ACU_NumberOpSymbol, op, data); return ACU_Symbol::attachData(opDeclaration, purpose, data); } bool ACU_NumberOpSymbol::attachSymbol(const char* purpose, Symbol* symbol) { BIND_SYMBOL(purpose, symbol, succSymbol, SuccSymbol*); BIND_SYMBOL(purpose, symbol, minusSymbol, MinusSymbol*); return ACU_Symbol::attachSymbol(purpose, symbol); } void ACU_NumberOpSymbol::copyAttachments(Symbol* original, SymbolMap* map) { ACU_NumberOpSymbol* orig = safeCast(ACU_NumberOpSymbol*, original); op = orig->op; COPY_SYMBOL(orig, succSymbol, map, SuccSymbol*); COPY_SYMBOL(orig, minusSymbol, map, MinusSymbol*); ACU_Symbol::copyAttachments(original, map); } void ACU_NumberOpSymbol::getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data) { int nrDataAttachments = purposes.length(); purposes.resize(nrDataAttachments + 1); purposes[nrDataAttachments] = "ACU_NumberOpSymbol"; data.resize(nrDataAttachments + 1); data[nrDataAttachments].resize(1); const char*& d = data[nrDataAttachments][0]; switch (op) { CODE_CASE(d, '+', 0, "+") CODE_CASE(d, '*', 0, "*") CODE_CASE(d, '|', 0, "|") CODE_CASE(d, '&', 0, "&") CODE_CASE(d, 'x', 'o', "xor") CODE_CASE(d, 'g', 'c', "gcd") CODE_CASE(d, 'l', 'c', "lcm") CODE_CASE(d, 'm', 'i', "min") CODE_CASE(d, 'm', 'a', "max") default: CantHappen("bad number op"); } ACU_Symbol::getDataAttachments(opDeclaration, purposes, data); } void ACU_NumberOpSymbol::getSymbolAttachments(Vector& purposes, Vector& symbols) { APPEND_SYMBOL(purposes, symbols, succSymbol); APPEND_SYMBOL(purposes, symbols, minusSymbol); ACU_Symbol::getSymbolAttachments(purposes, symbols); } bool ACU_NumberOpSymbol::eqRewrite(DagNode* subject, RewritingContext& context) { Assert(this == subject->symbol(), "bad symbol"); if (reduceArgumentsAndNormalize(subject, context)) return false; // collapsed under us return eqRewrite2(subject, context); // keep our stack frame small } bool ACU_NumberOpSymbol::eqRewrite2(DagNode* subject, RewritingContext& context) { // // If we are aborting we don't want to eagerly compute with // our numerical arguments and then throw the result away since // the unreduced dag node might normalize into our parent // which would do the same eager computation etc forming a // potentially very expensive cascade. We must do this check // after we have reduced our arguments otherwise we wouldn't // notice an abort that occurred "on the way up". // if (RewritingContext::getTraceStatus() && context.traceAbort()) return false; if (succSymbol != 0) { mpz_class accumulator; NatSet unused; int usedMultiplicity = 0; ACU_DagNode* d = getACU_DagNode(subject); int nrArgs = d->nrArgs(); for (int i = 0; i < nrArgs; i++) { DagNode* a = d->getArgument(i); Symbol* s = a->symbol(); if ((s == minusSymbol) ? minusSymbol->isNeg(a) : succSymbol->isNat(a)) { mpz_class storage; const mpz_class& n = (s == minusSymbol) ? minusSymbol->getNeg(a, storage) : succSymbol->getNat(a); int m = d->getMultiplicity(i); if (usedMultiplicity == 0) { usedMultiplicity = m; accumulator = n; if (--m == 0) continue; } else usedMultiplicity += m; switch (op) { case '+': { if (m == 1) accumulator += n; else accumulator += n * m; break; } case '*': { if (m == 1) accumulator *= n; else { mpz_class t; mpz_pow_ui (t.get_mpz_t(), n.get_mpz_t(), m); accumulator *= t; } break; } case '|': { accumulator |= n; break; } case '&': { accumulator &= n; break; } case CODE('x', 'o'): { if (m & 1) accumulator ^= n; break; } case CODE('g', 'c'): { mpz_gcd(accumulator.get_mpz_t(), accumulator.get_mpz_t(), n.get_mpz_t()); break; } case CODE('l', 'c'): { mpz_lcm(accumulator.get_mpz_t(), accumulator.get_mpz_t(), n.get_mpz_t()); break; } case CODE('m', 'i'): { if (n < accumulator) accumulator = n; break; } case CODE('m', 'a'): { if (n > accumulator) accumulator = n; break; } } } else unused.insert(i); } if (usedMultiplicity >= 2) { Assert(minusSymbol != 0 || accumulator >= 0, "can't make -ve int"); if (unused.empty()) { return (accumulator >= 0) ? succSymbol->rewriteToNat(subject, context, accumulator) : context.builtInReplace(subject, minusSymbol->makeNegDag(accumulator)); } // // Not everything was a number - need to make a new dag node by // copying unused arguments and including accumulated result. // int nrNewArgs = unused.size() + 1; Vector dagNodes(nrNewArgs); Vector multiplicities(nrNewArgs); int j = 0; for (int index : unused) { dagNodes[j] = d->getArgument(index); multiplicities[j] = d->getMultiplicity(index); ++j; } dagNodes[j] = (accumulator >= 0) ? succSymbol->makeNatDag(accumulator) : minusSymbol->makeNegDag(accumulator); multiplicities[j] = 1; return context.builtInReplace(subject, makeDagNode(dagNodes, multiplicities)); } } return ACU_Symbol::eqRewrite(subject, context); } maude-3.1/src/BuiltIn/stringOpSymbol.cc0000755000175200017520000004462313576050735015063 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class StringOpSymbol. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "freeTheory.hh" #include "NA_Theory.hh" #include "builtIn.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "term.hh" // core class definitions #include "rewritingContext.hh" #include "symbolMap.hh" // free theory class definitions #include "freeNet.hh" #include "freeDagNode.hh" // built in class definitions #include "floatSymbol.hh" #include "floatDagNode.hh" #include "succSymbol.hh" #include "minusSymbol.hh" #include "divisionSymbol.hh" #include "stringSymbol.hh" #include "stringDagNode.hh" #include "stringOpSymbol.hh" #include "bindingMacros.hh" StringOpSymbol::StringOpSymbol(int id, int arity) : FreeSymbol(id, arity) { op = NONE; stringSymbol = 0; succSymbol = 0; minusSymbol = 0; divisionSymbol = 0; floatSymbol = 0; decFloatSymbol = 0; } bool StringOpSymbol::attachData(const Vector& opDeclaration, const char* purpose, const Vector& data) { BIND_OP(purpose, StringOpSymbol, op, data); return FreeSymbol::attachData(opDeclaration, purpose, data); } bool StringOpSymbol::attachSymbol(const char* purpose, Symbol* symbol) { BIND_SYMBOL(purpose, symbol, stringSymbol, StringSymbol*); BIND_SYMBOL(purpose, symbol, succSymbol, SuccSymbol*); BIND_SYMBOL(purpose, symbol, minusSymbol, MinusSymbol*); BIND_SYMBOL(purpose, symbol, divisionSymbol, DivisionSymbol*); BIND_SYMBOL(purpose, symbol, floatSymbol, FloatSymbol*); BIND_SYMBOL(purpose, symbol, decFloatSymbol, Symbol*); return FreeSymbol::attachSymbol(purpose, symbol); } bool StringOpSymbol::attachTerm(const char* purpose, Term* term) { BIND_TERM(purpose, term, trueTerm); BIND_TERM(purpose, term, falseTerm); BIND_TERM(purpose, term, notFoundTerm); return FreeSymbol::attachTerm(purpose, term); } void StringOpSymbol::copyAttachments(Symbol* original, SymbolMap* map) { StringOpSymbol* orig = safeCast(StringOpSymbol*, original); op = orig->op; COPY_SYMBOL(orig, stringSymbol, map, StringSymbol*); COPY_SYMBOL(orig, succSymbol, map, SuccSymbol*); COPY_SYMBOL(orig, minusSymbol, map, MinusSymbol*); COPY_SYMBOL(orig, divisionSymbol, map, DivisionSymbol*); COPY_SYMBOL(orig, floatSymbol, map, FloatSymbol*); COPY_SYMBOL(orig, decFloatSymbol, map, Symbol*); COPY_TERM(orig, trueTerm, map); COPY_TERM(orig, falseTerm, map); COPY_TERM(orig, notFoundTerm, map); FreeSymbol::copyAttachments(original, map); } void StringOpSymbol::getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data) { int nrDataAttachments = purposes.length(); purposes.resize(nrDataAttachments + 1); purposes[nrDataAttachments] = "StringOpSymbol"; data.resize(nrDataAttachments + 1); data[nrDataAttachments].resize(1); const char*& d = data[nrDataAttachments][0]; switch (op) { CODE_CASE(d, 'f', 'l', "float") CODE_CASE(d, 'l', 'e', "length") CODE_CASE(d, 'a', 's', "ascii") CODE_CASE(d, 'u', 'p', "upperCase") CODE_CASE(d, 'l', 'o', "lowerCase") CODE_CASE(d, '+', 0, "+") CODE_CASE(d, '<', 0, "<") CODE_CASE(d, '<', '=', "<=") CODE_CASE(d, '>', 0, ">") CODE_CASE(d, '>', '=', ">=") CODE_CASE(d, 'r', 'a', "rat") CODE_CASE(d, 's', 'u', "substr") CODE_CASE(d, 'f', 'i', "find") CODE_CASE(d, 'r', 'f', "rfind") CODE_CASE(d, 's', 't', "string") CODE_CASE(d, 'd', 'e', "decFloat") CODE_CASE(d, 'c', 'h', "char") default: CantHappen("bad string op"); } FreeSymbol::getDataAttachments(opDeclaration, purposes, data); } void StringOpSymbol::getSymbolAttachments(Vector& purposes, Vector& symbols) { APPEND_SYMBOL(purposes, symbols, stringSymbol); APPEND_SYMBOL(purposes, symbols, succSymbol); APPEND_SYMBOL(purposes, symbols, minusSymbol); APPEND_SYMBOL(purposes, symbols, divisionSymbol); APPEND_SYMBOL(purposes, symbols, floatSymbol); APPEND_SYMBOL(purposes, symbols, decFloatSymbol); FreeSymbol::getSymbolAttachments(purposes, symbols); } void StringOpSymbol::getTermAttachments(Vector& purposes, Vector& terms) { APPEND_TERM(purposes, terms, trueTerm); APPEND_TERM(purposes, terms, falseTerm); APPEND_TERM(purposes, terms, notFoundTerm); FreeSymbol::getTermAttachments(purposes, terms); } void StringOpSymbol::postInterSymbolPass() { PREPARE_TERM(trueTerm); PREPARE_TERM(falseTerm); PREPARE_TERM(notFoundTerm); } void StringOpSymbol::reset() { trueTerm.reset(); // so true dag can be garbage collected falseTerm.reset(); // so false dag can be garbage collected notFoundTerm.reset(); // so notFound dag can be garbage collected FreeSymbol::reset(); // parents reset() tasks } bool StringOpSymbol::eqRewrite(DagNode* subject, RewritingContext& context) { Assert(this == subject->symbol(), "bad symbol"); DebugAdvisory("StringOpSymbol::eqRewrite() called on " << subject); int nrArgs = arity(); FreeDagNode* d = safeCast(FreeDagNode*, subject); // // Evaluate our arguments. // for (int i = 0; i < nrArgs; i++) { DagNode* a = d->getArgument(i); a->reduce(context); } DagNode* a0 = d->getArgument(0); if (a0->symbol() == stringSymbol) { const Rope& left = safeCast(StringDagNode*, a0)->getValue(); switch (nrArgs) { case 1: { mpz_class r; switch (op) { case CODE('f', 'l'): { bool error; char* flStr = left.makeZeroTerminatedString(); double fl = stringToDouble(flStr, error); delete [] flStr; if (error) goto fail; return floatSymbol->rewriteToFloat(subject, context, fl); } case CODE('l', 'e'): // length { r = left.length(); break; } case CODE('a', 's'): // acsii { if (left.length() != 1) goto fail; r = static_cast(left[0]); break; } case CODE('u', 'p'): // upperCase { Rope result = upperCase(left); return rewriteToString(subject, context, result); } case CODE('l', 'o'): // lowerCase { Rope result = lowerCase(left); return rewriteToString(subject, context, result); } default: CantHappen("bad string op"); } return succSymbol->rewriteToNat(subject, context, r); } case 2: { DagNode* a1 = d->getArgument(1); if (a1->symbol() == stringSymbol) { const Rope& right = safeCast(StringDagNode*, a1)->getValue(); bool r; switch (op) { case '+': { Rope t(left); t += right; return rewriteToString(subject, context, t); } case '<': r = left < right; break; case '>': r = left > right; break; case CODE('<', '='): r = left <= right; break; case CODE('>', '='): r = left >= right; break; default: CantHappen("bad string op"); r = false; // avoid compiler warning } Assert(trueTerm.getTerm() != 0 && falseTerm.getTerm() != 0, "null true/false for relational op"); return context.builtInReplace(subject, r ? trueTerm.getDag() : falseTerm.getDag()); } else if (op == CODE('r', 'a')) { DebugAdvisory("StringOpSymbol::eqRewrite() entered rat case for " << subject); DagNode* a1 = d->getArgument(1); Assert(succSymbol != 0, "succSymbol undefined"); if (succSymbol->isNat(a1)) { const mpz_class& n1 = succSymbol->getNat(a1); if (n1 >= 2 && n1 <= 36) { mpz_class numerator; mpz_class denominator; if (ropeToNumber(left, n1.get_si(), numerator, denominator)) { DagNode* r; if (denominator == 0) { if (numerator >= 0) return succSymbol->rewriteToNat(subject, context, numerator); r = minusSymbol->makeNegDag(numerator); } else r = divisionSymbol->makeRatDag(numerator, denominator); return context.builtInReplace(subject, r); } else DebugAdvisory("StringOpSymbol::eqRewrite() rope to number failed " << subject); } else DebugAdvisory("StringOpSymbol::eqRewrite() a1 out of range " << subject); } else DebugAdvisory("StringOpSymbol::eqRewrite() a1 not a nat " << subject); DebugAdvisory("StringOpSymbol::eqRewrite() failed to rewrite " << subject); } break; } case 3: { switch (op) { case CODE('s', 'u'): // substr { DagNode* a1 = d->getArgument(1); DagNode* a2 = d->getArgument(2); Assert(succSymbol != 0, "succSymbol undefined"); if (succSymbol->isNat(a1) && succSymbol->isNat(a2)) { const mpz_class& n1 = succSymbol->getNat(a1); Uint index = n1.fits_uint_p() ? n1.get_ui() : UINT_MAX; const mpz_class& n2 = succSymbol->getNat(a2); Uint length = n2.fits_uint_p() ? n2.get_ui() : UINT_MAX; return rewriteToString(subject, context, substring(left, index, length)); } break; } default: { DagNode* a1 = d->getArgument(1); if (a1->symbol() == stringSymbol) { const Rope& pattern = safeCast(StringDagNode*, a1)->getValue(); DagNode* a2 = d->getArgument(2); Assert(succSymbol != 0, "succSymbol undefined"); if (succSymbol->isNat(a2)) { const mpz_class& n2 = succSymbol->getNat(a2); Uint index = n2.fits_uint_p() ? n2.get_ui() : UINT_MAX; int r; switch (op) { case CODE('f', 'i'): // find r = fwdFind(left, pattern, index); break; case CODE('r', 'f'): // rfind r = revFind(left, pattern, index); break; default: CantHappen("bad string op"); r = 0; // avoid compiler warning } Assert(notFoundTerm.getTerm() != 0, "null notFound for find op"); if (r == NONE) return context.builtInReplace(subject, notFoundTerm.getDag()); return succSymbol->rewriteToNat(subject, context, r); } } break; } } } } } else if (a0->symbol() == floatSymbol) { if (nrArgs == 1 && op == CODE('s', 't')) { double fl = safeCast(FloatDagNode*, a0)->getValue(); return rewriteToString(subject, context, doubleToString(fl)); } else if (nrArgs == 2 && op == CODE('d', 'e')) { DagNode* a1 = d->getArgument(1); Assert(succSymbol != 0, "succSymbol undefined"); Assert(minusSymbol != 0, "minusSymbol undefined"); if (succSymbol->isNat(a1)) { double fl = safeCast(FloatDagNode*, a0)->getValue(); const mpz_class& n1 = succSymbol->getNat(a1); int nrDigits = (n1 < MAX_FLOAT_DIGITS) ? n1.get_si() : MAX_FLOAT_DIGITS; char buffer[MAX_FLOAT_DIGITS + 1]; int decPt; int sign; correctEcvt(fl, nrDigits, buffer, decPt, sign); Vector args(0, 3); args.append((sign < 0) ? minusSymbol->makeNegDag(sign) : succSymbol->makeNatDag(sign)); args.append(new StringDagNode(stringSymbol, buffer)); args.append((decPt < 0) ? minusSymbol->makeNegDag(decPt) : succSymbol->makeNatDag(decPt)); return context.builtInReplace(subject, decFloatSymbol->makeDagNode(args)); } } } else if (op == CODE('s', 't') && nrArgs == 2) { DagNode* a1 = d->getArgument(1); Assert(succSymbol != 0, "succSymbol undefined"); if (succSymbol->isNat(a1)) { const mpz_class& n1 = succSymbol->getNat(a1); if (n1 >= 2 && n1 <= 36) { int base = n1.get_si(); if (succSymbol->isNat(a0)) { if (succSymbol->isNat(a0)) { char* ts = mpz_get_str(0, base, succSymbol->getNat(a0).get_mpz_t()); Rope tr(ts); free(ts); return rewriteToString(subject, context, tr); } } else if (a0->symbol() == minusSymbol) { if (minusSymbol->isNeg(a0)) { mpz_class result; char* ts = mpz_get_str(0, base, minusSymbol->getNeg(a0, result).get_mpz_t()); Rope tr(ts); free(ts); return rewriteToString(subject, context, tr); } } else if (a0->symbol() == divisionSymbol) { if (divisionSymbol->isRat(a0)) { mpz_class numerator; const mpz_class& denomenator = divisionSymbol->getRat(a0, numerator); char* ns = mpz_get_str(0, base, numerator.get_mpz_t()); Rope tr(ns); free(ns); tr += '/'; char* ds = mpz_get_str(0, base, denomenator.get_mpz_t()); tr += ds; free(ds); return rewriteToString(subject, context, tr); } } } } } else { switch (op) { case CODE('c', 'h'): // char { DagNode* a0 = d->getArgument(0); Assert(succSymbol != 0, "succSymbol undefined"); if (succSymbol->isNat(a0)) { const mpz_class& n0 = succSymbol->getNat(a0); if (n0 <= 255) { char c = n0.get_si(); return rewriteToString(subject, context, Rope(c)); } } break; } default: ; // Can get here if args are bad } } fail: return FreeSymbol::eqRewrite(subject, context); } bool StringOpSymbol::rewriteToString(DagNode* subject, RewritingContext& context, const Rope& result) { bool trace = RewritingContext::getTraceStatus(); if (trace) { context.tracePreEqRewrite(subject, 0, RewritingContext::BUILTIN); if (context.traceAbort()) return false; } (void) new(subject) StringDagNode(stringSymbol, result); context.incrementEqCount(); if (trace) context.tracePostEqRewrite(subject); return true; } Rope StringOpSymbol::substring(const Rope& subject, Rope::size_type index, Rope::size_type length) { Rope::size_type sLen = subject.length(); // if (index < 0) // { // if (length > 0) // length += index; // index = 0; // } if (length == 0 || index >= sLen) return Rope(); if (length > sLen - index) length = sLen - index; return subject.substr(index, length); } int StringOpSymbol::fwdFind(const Rope& subject, const Rope& pattern, Rope::size_type start) { Rope::size_type sLen = subject.length(); if (pattern.empty()) return (start <= sLen) ? static_cast(start) : NONE; // // Testing start < sLen is important because otherwise 2nd test // could succeed by wrap around. // if (start < sLen && start + pattern.length() <= sLen) { Rope::const_iterator b(subject.begin()); Rope::const_iterator e(subject.end()); Rope::const_iterator p(search(b + start, e, pattern.begin(), pattern.end())); if (p != e) return p - b; } return NONE; } int StringOpSymbol::revFind(const Rope& subject, const Rope& pattern, Rope::size_type start) { Rope::size_type sLen = subject.length(); if (pattern.empty()) return (start <= sLen) ? start : sLen; Rope::size_type pLen = pattern.length(); if (pLen <= sLen) { Rope::size_type reflect = sLen - pLen; // pattern can't start after this since we need pLen characters. if (start > reflect) start = reflect; // // We are going to search the subject from beginning to beginning + start + pLen - 1 Rope::const_iterator b(subject.begin()); Rope::const_iterator e(b + (start + pLen)); Rope::const_iterator p = find_end(b, e, pattern.begin(), pattern.end()); if (p != e) return p - b; } return NONE; } bool StringOpSymbol::ropeToNumber(const Rope& subject, int base, mpz_class& numerator, mpz_class& denominator) { int len = subject.length(); if (len == 0) return false; int i = 0; if (subject[i] == '-') { if (len == 1) return false; ++i; } char c = subject[i]; if (!isalnum(c) || (c == '0' && len > 1)) return false; for (i++; i < len; i++) { char c = subject[i]; if (!isalnum(c)) { if (c == '/') { int j = i + 1; if (j == len || subject[j] == '0') return false; for (; j < len; j++) { if (!isalnum(subject[j])) return false; } // // We have detected a fraction form. // char* numStr = subject.substr(0, i).makeZeroTerminatedString(); char* denomStr = subject.substr(i + 1, len - (i + 1)).makeZeroTerminatedString(); bool result = (mpz_set_str(denominator.get_mpz_t(), denomStr, base) == 0 && mpz_set_str(numerator.get_mpz_t(), numStr, base) == 0); delete [] numStr; delete [] denomStr; return result; } else return false; } } // // We have a regular integer form. // denominator = 0; char* numStr = subject.makeZeroTerminatedString(); bool result = (mpz_set_str(numerator.get_mpz_t(), numStr, base) == 0); delete [] numStr; return result; } Rope StringOpSymbol::upperCase(const Rope& subject) { Rope::const_iterator b(subject.begin()); Rope::const_iterator e(subject.end()); for (Rope::const_iterator i(b); i != e; ++i) { char c = *i; if (islower(c)) { // // At least one lower-case character exists - need to convert. // Rope result(subject.substr(0, i - b)); // characters before *i result += toupper(c); for (++i; i != e; ++i) result += toupper(*i); return result; } } return subject; // no lower-case characters to convert } Rope StringOpSymbol::lowerCase(const Rope& subject) { Rope::const_iterator b(subject.begin()); Rope::const_iterator e(subject.end()); for (Rope::const_iterator i(b); i != e; ++i) { char c = *i; if (isupper(c)) { // // At least one upper-case character exists - need to convert. // Rope result(subject.substr(0, i - b)); // characters before *i result += tolower(c); for (++i; i != e; ++i) result += tolower(*i); return result; } } return subject; // no lower-case characters to convert } maude-3.1/src/BuiltIn/floatTerm.cc0000644000175200017520000000543313576050735014016 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class FloatTerm. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "NA_Theory.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "term.hh" // core class definitions #include "symbolMap.hh" // built in class definitions #include "floatSymbol.hh" #include "floatTerm.hh" #include "floatDagNode.hh" FloatTerm::FloatTerm(FloatSymbol* symbol, double value) : NA_Term(symbol), value((value == 0.0) ? 0.0 : value) // don't allow IEEE-754 -0.0 { } Term* FloatTerm::deepCopy2(SymbolMap* map) const { return new FloatTerm(static_cast(map == 0 ? symbol() : map->translate(symbol())), value); } Term* FloatTerm::instantiate2(const Vector& varBindings, SymbolMap* translator) { return new FloatTerm(safeCast(FloatSymbol*, translator->findTargetVersionOfSymbol(symbol())), value); } Term* FloatTerm::normalize(bool /* full */, bool& changed) { changed = false; setHashValue(hash(symbol()->getHashValue(), bitPattern ^ (bitPattern >> 32))); return this; } int FloatTerm::compareArguments(const Term* other) const { double otherValue = static_cast(other)->value; // // Straight forward subtraction might fail for values near +- 2^63 // return (value == otherValue) ? 0 : ((value > otherValue) ? 1 : -1); } int FloatTerm::compareArguments(const DagNode* other) const { double otherValue = static_cast(other)->value; // // Straight forward subtraction might fail for values near +- 2^63 // return (value == otherValue) ? 0 : ((value > otherValue) ? 1 : -1); } void FloatTerm::overwriteWithDagNode(DagNode* old) const { (void) new(old) FloatDagNode(static_cast(symbol()), value); } NA_DagNode* FloatTerm::makeDagNode() const { return new FloatDagNode(static_cast(symbol()), value); } maude-3.1/src/BuiltIn/Makefile.in0000644000175200017520000021254613741175702013620 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/BuiltIn ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_have_poll.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libbuiltIn_a_AR = $(AR) $(ARFLAGS) libbuiltIn_a_LIBADD = am_libbuiltIn_a_OBJECTS = libbuiltIn_a-equalitySymbol.$(OBJEXT) \ libbuiltIn_a-sortTestSymbol.$(OBJEXT) \ libbuiltIn_a-branchSymbol.$(OBJEXT) \ libbuiltIn_a-stringSymbol.$(OBJEXT) \ libbuiltIn_a-stringTerm.$(OBJEXT) \ libbuiltIn_a-stringDagNode.$(OBJEXT) \ libbuiltIn_a-stringOpSymbol.$(OBJEXT) \ libbuiltIn_a-floatSymbol.$(OBJEXT) \ libbuiltIn_a-floatTerm.$(OBJEXT) \ libbuiltIn_a-floatDagNode.$(OBJEXT) \ libbuiltIn_a-floatOpSymbol.$(OBJEXT) \ libbuiltIn_a-succSymbol.$(OBJEXT) \ libbuiltIn_a-numberOpSymbol.$(OBJEXT) \ libbuiltIn_a-minusSymbol.$(OBJEXT) \ libbuiltIn_a-ACU_NumberOpSymbol.$(OBJEXT) \ libbuiltIn_a-CUI_NumberOpSymbol.$(OBJEXT) \ libbuiltIn_a-divisionSymbol.$(OBJEXT) \ libbuiltIn_a-randomOpSymbol.$(OBJEXT) \ libbuiltIn_a-counterSymbol.$(OBJEXT) \ libbuiltIn_a-matrixOpSymbol.$(OBJEXT) \ libbuiltIn_a-equalityExtor.$(OBJEXT) \ libbuiltIn_a-equalityExtorFinal.$(OBJEXT) libbuiltIn_a_OBJECTS = $(am_libbuiltIn_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/libbuiltIn_a-ACU_NumberOpSymbol.Po \ ./$(DEPDIR)/libbuiltIn_a-CUI_NumberOpSymbol.Po \ ./$(DEPDIR)/libbuiltIn_a-branchSymbol.Po \ ./$(DEPDIR)/libbuiltIn_a-counterSymbol.Po \ ./$(DEPDIR)/libbuiltIn_a-divisionSymbol.Po \ ./$(DEPDIR)/libbuiltIn_a-equalityExtor.Po \ ./$(DEPDIR)/libbuiltIn_a-equalityExtorFinal.Po \ ./$(DEPDIR)/libbuiltIn_a-equalitySymbol.Po \ ./$(DEPDIR)/libbuiltIn_a-floatDagNode.Po \ ./$(DEPDIR)/libbuiltIn_a-floatOpSymbol.Po \ ./$(DEPDIR)/libbuiltIn_a-floatSymbol.Po \ ./$(DEPDIR)/libbuiltIn_a-floatTerm.Po \ ./$(DEPDIR)/libbuiltIn_a-matrixOpSymbol.Po \ ./$(DEPDIR)/libbuiltIn_a-minusSymbol.Po \ ./$(DEPDIR)/libbuiltIn_a-numberOpSymbol.Po \ ./$(DEPDIR)/libbuiltIn_a-randomOpSymbol.Po \ ./$(DEPDIR)/libbuiltIn_a-sortTestSymbol.Po \ ./$(DEPDIR)/libbuiltIn_a-stringDagNode.Po \ ./$(DEPDIR)/libbuiltIn_a-stringOpSymbol.Po \ ./$(DEPDIR)/libbuiltIn_a-stringSymbol.Po \ ./$(DEPDIR)/libbuiltIn_a-stringTerm.Po \ ./$(DEPDIR)/libbuiltIn_a-succSymbol.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(libbuiltIn_a_SOURCES) DIST_SOURCES = $(libbuiltIn_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs ChangeLog DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ BUDDY_LIB = @BUDDY_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CVC4_LIB = @CVC4_LIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FLEX = @FLEX@ GCC_LIBS = @GCC_LIBS@ GMP_LIBS = @GMP_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSIGSEGV_LIB = @LIBSIGSEGV_LIB@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TECLA_LIBS = @TECLA_LIBS@ VERSION = @VERSION@ YICES2_LIB = @YICES2_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libbuiltIn.a libbuiltIn_a_CPPFLAGS = \ -I$(top_srcdir)/src/Utility \ -I$(top_srcdir)/src/Interface \ -I$(top_srcdir)/src/Core \ -I$(top_srcdir)/src/Variable \ -I$(top_srcdir)/src/FullCompiler \ -I$(top_srcdir)/src/NA_Theory \ -I$(top_srcdir)/src/ACU_Persistent \ -I$(top_srcdir)/src/ACU_Theory \ -I$(top_srcdir)/src/CUI_Theory \ -I$(top_srcdir)/src/S_Theory \ -I$(top_srcdir)/src/FreeTheory \ -I$(top_srcdir)/src/3rdParty libbuiltIn_a_SOURCES = \ equalitySymbol.cc \ sortTestSymbol.cc \ branchSymbol.cc \ stringSymbol.cc \ stringTerm.cc \ stringDagNode.cc \ stringOpSymbol.cc \ floatSymbol.cc \ floatTerm.cc \ floatDagNode.cc \ floatOpSymbol.cc \ succSymbol.cc \ numberOpSymbol.cc \ minusSymbol.cc \ ACU_NumberOpSymbol.cc \ CUI_NumberOpSymbol.cc \ divisionSymbol.cc \ randomOpSymbol.cc \ counterSymbol.cc \ matrixOpSymbol.cc \ equalityExtor.cc \ equalityExtorFinal.cc EXTRA_DIST = \ matrixOpSignature.cc noinst_HEADERS = \ ACU_NumberOpSymbol.hh \ CUI_NumberOpSymbol.hh \ bindingMacros.hh \ branchSymbol.hh \ builtIn.hh \ divisionSymbol.hh \ equalitySymbol.hh \ floatDagNode.hh \ floatOpSymbol.hh \ floatSymbol.hh \ floatTerm.hh \ minusSymbol.hh \ numberOpSymbol.hh \ sortTestSymbol.hh \ stringDagNode.hh \ stringOpSymbol.hh \ stringSymbol.hh \ stringTerm.hh \ succSymbol.hh \ randomOpSymbol.hh \ counterSymbol.hh \ matrixOpSymbol.hh \ equalityExtor.hh \ equalityExtorFinal.hh all: all-am .SUFFIXES: .SUFFIXES: .cc .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/BuiltIn/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/BuiltIn/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libbuiltIn.a: $(libbuiltIn_a_OBJECTS) $(libbuiltIn_a_DEPENDENCIES) $(EXTRA_libbuiltIn_a_DEPENDENCIES) $(AM_V_at)-rm -f libbuiltIn.a $(AM_V_AR)$(libbuiltIn_a_AR) libbuiltIn.a $(libbuiltIn_a_OBJECTS) $(libbuiltIn_a_LIBADD) $(AM_V_at)$(RANLIB) libbuiltIn.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbuiltIn_a-ACU_NumberOpSymbol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbuiltIn_a-CUI_NumberOpSymbol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbuiltIn_a-branchSymbol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbuiltIn_a-counterSymbol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbuiltIn_a-divisionSymbol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbuiltIn_a-equalityExtor.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbuiltIn_a-equalityExtorFinal.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbuiltIn_a-equalitySymbol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbuiltIn_a-floatDagNode.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbuiltIn_a-floatOpSymbol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbuiltIn_a-floatSymbol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbuiltIn_a-floatTerm.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbuiltIn_a-matrixOpSymbol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbuiltIn_a-minusSymbol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbuiltIn_a-numberOpSymbol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbuiltIn_a-randomOpSymbol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbuiltIn_a-sortTestSymbol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbuiltIn_a-stringDagNode.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbuiltIn_a-stringOpSymbol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbuiltIn_a-stringSymbol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbuiltIn_a-stringTerm.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbuiltIn_a-succSymbol.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` libbuiltIn_a-equalitySymbol.o: equalitySymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-equalitySymbol.o -MD -MP -MF $(DEPDIR)/libbuiltIn_a-equalitySymbol.Tpo -c -o libbuiltIn_a-equalitySymbol.o `test -f 'equalitySymbol.cc' || echo '$(srcdir)/'`equalitySymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-equalitySymbol.Tpo $(DEPDIR)/libbuiltIn_a-equalitySymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='equalitySymbol.cc' object='libbuiltIn_a-equalitySymbol.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-equalitySymbol.o `test -f 'equalitySymbol.cc' || echo '$(srcdir)/'`equalitySymbol.cc libbuiltIn_a-equalitySymbol.obj: equalitySymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-equalitySymbol.obj -MD -MP -MF $(DEPDIR)/libbuiltIn_a-equalitySymbol.Tpo -c -o libbuiltIn_a-equalitySymbol.obj `if test -f 'equalitySymbol.cc'; then $(CYGPATH_W) 'equalitySymbol.cc'; else $(CYGPATH_W) '$(srcdir)/equalitySymbol.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-equalitySymbol.Tpo $(DEPDIR)/libbuiltIn_a-equalitySymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='equalitySymbol.cc' object='libbuiltIn_a-equalitySymbol.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-equalitySymbol.obj `if test -f 'equalitySymbol.cc'; then $(CYGPATH_W) 'equalitySymbol.cc'; else $(CYGPATH_W) '$(srcdir)/equalitySymbol.cc'; fi` libbuiltIn_a-sortTestSymbol.o: sortTestSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-sortTestSymbol.o -MD -MP -MF $(DEPDIR)/libbuiltIn_a-sortTestSymbol.Tpo -c -o libbuiltIn_a-sortTestSymbol.o `test -f 'sortTestSymbol.cc' || echo '$(srcdir)/'`sortTestSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-sortTestSymbol.Tpo $(DEPDIR)/libbuiltIn_a-sortTestSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='sortTestSymbol.cc' object='libbuiltIn_a-sortTestSymbol.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-sortTestSymbol.o `test -f 'sortTestSymbol.cc' || echo '$(srcdir)/'`sortTestSymbol.cc libbuiltIn_a-sortTestSymbol.obj: sortTestSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-sortTestSymbol.obj -MD -MP -MF $(DEPDIR)/libbuiltIn_a-sortTestSymbol.Tpo -c -o libbuiltIn_a-sortTestSymbol.obj `if test -f 'sortTestSymbol.cc'; then $(CYGPATH_W) 'sortTestSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/sortTestSymbol.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-sortTestSymbol.Tpo $(DEPDIR)/libbuiltIn_a-sortTestSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='sortTestSymbol.cc' object='libbuiltIn_a-sortTestSymbol.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-sortTestSymbol.obj `if test -f 'sortTestSymbol.cc'; then $(CYGPATH_W) 'sortTestSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/sortTestSymbol.cc'; fi` libbuiltIn_a-branchSymbol.o: branchSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-branchSymbol.o -MD -MP -MF $(DEPDIR)/libbuiltIn_a-branchSymbol.Tpo -c -o libbuiltIn_a-branchSymbol.o `test -f 'branchSymbol.cc' || echo '$(srcdir)/'`branchSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-branchSymbol.Tpo $(DEPDIR)/libbuiltIn_a-branchSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='branchSymbol.cc' object='libbuiltIn_a-branchSymbol.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-branchSymbol.o `test -f 'branchSymbol.cc' || echo '$(srcdir)/'`branchSymbol.cc libbuiltIn_a-branchSymbol.obj: branchSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-branchSymbol.obj -MD -MP -MF $(DEPDIR)/libbuiltIn_a-branchSymbol.Tpo -c -o libbuiltIn_a-branchSymbol.obj `if test -f 'branchSymbol.cc'; then $(CYGPATH_W) 'branchSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/branchSymbol.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-branchSymbol.Tpo $(DEPDIR)/libbuiltIn_a-branchSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='branchSymbol.cc' object='libbuiltIn_a-branchSymbol.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-branchSymbol.obj `if test -f 'branchSymbol.cc'; then $(CYGPATH_W) 'branchSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/branchSymbol.cc'; fi` libbuiltIn_a-stringSymbol.o: stringSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-stringSymbol.o -MD -MP -MF $(DEPDIR)/libbuiltIn_a-stringSymbol.Tpo -c -o libbuiltIn_a-stringSymbol.o `test -f 'stringSymbol.cc' || echo '$(srcdir)/'`stringSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-stringSymbol.Tpo $(DEPDIR)/libbuiltIn_a-stringSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stringSymbol.cc' object='libbuiltIn_a-stringSymbol.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-stringSymbol.o `test -f 'stringSymbol.cc' || echo '$(srcdir)/'`stringSymbol.cc libbuiltIn_a-stringSymbol.obj: stringSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-stringSymbol.obj -MD -MP -MF $(DEPDIR)/libbuiltIn_a-stringSymbol.Tpo -c -o libbuiltIn_a-stringSymbol.obj `if test -f 'stringSymbol.cc'; then $(CYGPATH_W) 'stringSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/stringSymbol.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-stringSymbol.Tpo $(DEPDIR)/libbuiltIn_a-stringSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stringSymbol.cc' object='libbuiltIn_a-stringSymbol.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-stringSymbol.obj `if test -f 'stringSymbol.cc'; then $(CYGPATH_W) 'stringSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/stringSymbol.cc'; fi` libbuiltIn_a-stringTerm.o: stringTerm.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-stringTerm.o -MD -MP -MF $(DEPDIR)/libbuiltIn_a-stringTerm.Tpo -c -o libbuiltIn_a-stringTerm.o `test -f 'stringTerm.cc' || echo '$(srcdir)/'`stringTerm.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-stringTerm.Tpo $(DEPDIR)/libbuiltIn_a-stringTerm.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stringTerm.cc' object='libbuiltIn_a-stringTerm.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-stringTerm.o `test -f 'stringTerm.cc' || echo '$(srcdir)/'`stringTerm.cc libbuiltIn_a-stringTerm.obj: stringTerm.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-stringTerm.obj -MD -MP -MF $(DEPDIR)/libbuiltIn_a-stringTerm.Tpo -c -o libbuiltIn_a-stringTerm.obj `if test -f 'stringTerm.cc'; then $(CYGPATH_W) 'stringTerm.cc'; else $(CYGPATH_W) '$(srcdir)/stringTerm.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-stringTerm.Tpo $(DEPDIR)/libbuiltIn_a-stringTerm.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stringTerm.cc' object='libbuiltIn_a-stringTerm.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-stringTerm.obj `if test -f 'stringTerm.cc'; then $(CYGPATH_W) 'stringTerm.cc'; else $(CYGPATH_W) '$(srcdir)/stringTerm.cc'; fi` libbuiltIn_a-stringDagNode.o: stringDagNode.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-stringDagNode.o -MD -MP -MF $(DEPDIR)/libbuiltIn_a-stringDagNode.Tpo -c -o libbuiltIn_a-stringDagNode.o `test -f 'stringDagNode.cc' || echo '$(srcdir)/'`stringDagNode.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-stringDagNode.Tpo $(DEPDIR)/libbuiltIn_a-stringDagNode.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stringDagNode.cc' object='libbuiltIn_a-stringDagNode.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-stringDagNode.o `test -f 'stringDagNode.cc' || echo '$(srcdir)/'`stringDagNode.cc libbuiltIn_a-stringDagNode.obj: stringDagNode.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-stringDagNode.obj -MD -MP -MF $(DEPDIR)/libbuiltIn_a-stringDagNode.Tpo -c -o libbuiltIn_a-stringDagNode.obj `if test -f 'stringDagNode.cc'; then $(CYGPATH_W) 'stringDagNode.cc'; else $(CYGPATH_W) '$(srcdir)/stringDagNode.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-stringDagNode.Tpo $(DEPDIR)/libbuiltIn_a-stringDagNode.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stringDagNode.cc' object='libbuiltIn_a-stringDagNode.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-stringDagNode.obj `if test -f 'stringDagNode.cc'; then $(CYGPATH_W) 'stringDagNode.cc'; else $(CYGPATH_W) '$(srcdir)/stringDagNode.cc'; fi` libbuiltIn_a-stringOpSymbol.o: stringOpSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-stringOpSymbol.o -MD -MP -MF $(DEPDIR)/libbuiltIn_a-stringOpSymbol.Tpo -c -o libbuiltIn_a-stringOpSymbol.o `test -f 'stringOpSymbol.cc' || echo '$(srcdir)/'`stringOpSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-stringOpSymbol.Tpo $(DEPDIR)/libbuiltIn_a-stringOpSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stringOpSymbol.cc' object='libbuiltIn_a-stringOpSymbol.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-stringOpSymbol.o `test -f 'stringOpSymbol.cc' || echo '$(srcdir)/'`stringOpSymbol.cc libbuiltIn_a-stringOpSymbol.obj: stringOpSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-stringOpSymbol.obj -MD -MP -MF $(DEPDIR)/libbuiltIn_a-stringOpSymbol.Tpo -c -o libbuiltIn_a-stringOpSymbol.obj `if test -f 'stringOpSymbol.cc'; then $(CYGPATH_W) 'stringOpSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/stringOpSymbol.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-stringOpSymbol.Tpo $(DEPDIR)/libbuiltIn_a-stringOpSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stringOpSymbol.cc' object='libbuiltIn_a-stringOpSymbol.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-stringOpSymbol.obj `if test -f 'stringOpSymbol.cc'; then $(CYGPATH_W) 'stringOpSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/stringOpSymbol.cc'; fi` libbuiltIn_a-floatSymbol.o: floatSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-floatSymbol.o -MD -MP -MF $(DEPDIR)/libbuiltIn_a-floatSymbol.Tpo -c -o libbuiltIn_a-floatSymbol.o `test -f 'floatSymbol.cc' || echo '$(srcdir)/'`floatSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-floatSymbol.Tpo $(DEPDIR)/libbuiltIn_a-floatSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='floatSymbol.cc' object='libbuiltIn_a-floatSymbol.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-floatSymbol.o `test -f 'floatSymbol.cc' || echo '$(srcdir)/'`floatSymbol.cc libbuiltIn_a-floatSymbol.obj: floatSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-floatSymbol.obj -MD -MP -MF $(DEPDIR)/libbuiltIn_a-floatSymbol.Tpo -c -o libbuiltIn_a-floatSymbol.obj `if test -f 'floatSymbol.cc'; then $(CYGPATH_W) 'floatSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/floatSymbol.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-floatSymbol.Tpo $(DEPDIR)/libbuiltIn_a-floatSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='floatSymbol.cc' object='libbuiltIn_a-floatSymbol.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-floatSymbol.obj `if test -f 'floatSymbol.cc'; then $(CYGPATH_W) 'floatSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/floatSymbol.cc'; fi` libbuiltIn_a-floatTerm.o: floatTerm.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-floatTerm.o -MD -MP -MF $(DEPDIR)/libbuiltIn_a-floatTerm.Tpo -c -o libbuiltIn_a-floatTerm.o `test -f 'floatTerm.cc' || echo '$(srcdir)/'`floatTerm.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-floatTerm.Tpo $(DEPDIR)/libbuiltIn_a-floatTerm.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='floatTerm.cc' object='libbuiltIn_a-floatTerm.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-floatTerm.o `test -f 'floatTerm.cc' || echo '$(srcdir)/'`floatTerm.cc libbuiltIn_a-floatTerm.obj: floatTerm.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-floatTerm.obj -MD -MP -MF $(DEPDIR)/libbuiltIn_a-floatTerm.Tpo -c -o libbuiltIn_a-floatTerm.obj `if test -f 'floatTerm.cc'; then $(CYGPATH_W) 'floatTerm.cc'; else $(CYGPATH_W) '$(srcdir)/floatTerm.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-floatTerm.Tpo $(DEPDIR)/libbuiltIn_a-floatTerm.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='floatTerm.cc' object='libbuiltIn_a-floatTerm.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-floatTerm.obj `if test -f 'floatTerm.cc'; then $(CYGPATH_W) 'floatTerm.cc'; else $(CYGPATH_W) '$(srcdir)/floatTerm.cc'; fi` libbuiltIn_a-floatDagNode.o: floatDagNode.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-floatDagNode.o -MD -MP -MF $(DEPDIR)/libbuiltIn_a-floatDagNode.Tpo -c -o libbuiltIn_a-floatDagNode.o `test -f 'floatDagNode.cc' || echo '$(srcdir)/'`floatDagNode.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-floatDagNode.Tpo $(DEPDIR)/libbuiltIn_a-floatDagNode.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='floatDagNode.cc' object='libbuiltIn_a-floatDagNode.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-floatDagNode.o `test -f 'floatDagNode.cc' || echo '$(srcdir)/'`floatDagNode.cc libbuiltIn_a-floatDagNode.obj: floatDagNode.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-floatDagNode.obj -MD -MP -MF $(DEPDIR)/libbuiltIn_a-floatDagNode.Tpo -c -o libbuiltIn_a-floatDagNode.obj `if test -f 'floatDagNode.cc'; then $(CYGPATH_W) 'floatDagNode.cc'; else $(CYGPATH_W) '$(srcdir)/floatDagNode.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-floatDagNode.Tpo $(DEPDIR)/libbuiltIn_a-floatDagNode.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='floatDagNode.cc' object='libbuiltIn_a-floatDagNode.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-floatDagNode.obj `if test -f 'floatDagNode.cc'; then $(CYGPATH_W) 'floatDagNode.cc'; else $(CYGPATH_W) '$(srcdir)/floatDagNode.cc'; fi` libbuiltIn_a-floatOpSymbol.o: floatOpSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-floatOpSymbol.o -MD -MP -MF $(DEPDIR)/libbuiltIn_a-floatOpSymbol.Tpo -c -o libbuiltIn_a-floatOpSymbol.o `test -f 'floatOpSymbol.cc' || echo '$(srcdir)/'`floatOpSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-floatOpSymbol.Tpo $(DEPDIR)/libbuiltIn_a-floatOpSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='floatOpSymbol.cc' object='libbuiltIn_a-floatOpSymbol.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-floatOpSymbol.o `test -f 'floatOpSymbol.cc' || echo '$(srcdir)/'`floatOpSymbol.cc libbuiltIn_a-floatOpSymbol.obj: floatOpSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-floatOpSymbol.obj -MD -MP -MF $(DEPDIR)/libbuiltIn_a-floatOpSymbol.Tpo -c -o libbuiltIn_a-floatOpSymbol.obj `if test -f 'floatOpSymbol.cc'; then $(CYGPATH_W) 'floatOpSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/floatOpSymbol.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-floatOpSymbol.Tpo $(DEPDIR)/libbuiltIn_a-floatOpSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='floatOpSymbol.cc' object='libbuiltIn_a-floatOpSymbol.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-floatOpSymbol.obj `if test -f 'floatOpSymbol.cc'; then $(CYGPATH_W) 'floatOpSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/floatOpSymbol.cc'; fi` libbuiltIn_a-succSymbol.o: succSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-succSymbol.o -MD -MP -MF $(DEPDIR)/libbuiltIn_a-succSymbol.Tpo -c -o libbuiltIn_a-succSymbol.o `test -f 'succSymbol.cc' || echo '$(srcdir)/'`succSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-succSymbol.Tpo $(DEPDIR)/libbuiltIn_a-succSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='succSymbol.cc' object='libbuiltIn_a-succSymbol.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-succSymbol.o `test -f 'succSymbol.cc' || echo '$(srcdir)/'`succSymbol.cc libbuiltIn_a-succSymbol.obj: succSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-succSymbol.obj -MD -MP -MF $(DEPDIR)/libbuiltIn_a-succSymbol.Tpo -c -o libbuiltIn_a-succSymbol.obj `if test -f 'succSymbol.cc'; then $(CYGPATH_W) 'succSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/succSymbol.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-succSymbol.Tpo $(DEPDIR)/libbuiltIn_a-succSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='succSymbol.cc' object='libbuiltIn_a-succSymbol.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-succSymbol.obj `if test -f 'succSymbol.cc'; then $(CYGPATH_W) 'succSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/succSymbol.cc'; fi` libbuiltIn_a-numberOpSymbol.o: numberOpSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-numberOpSymbol.o -MD -MP -MF $(DEPDIR)/libbuiltIn_a-numberOpSymbol.Tpo -c -o libbuiltIn_a-numberOpSymbol.o `test -f 'numberOpSymbol.cc' || echo '$(srcdir)/'`numberOpSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-numberOpSymbol.Tpo $(DEPDIR)/libbuiltIn_a-numberOpSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='numberOpSymbol.cc' object='libbuiltIn_a-numberOpSymbol.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-numberOpSymbol.o `test -f 'numberOpSymbol.cc' || echo '$(srcdir)/'`numberOpSymbol.cc libbuiltIn_a-numberOpSymbol.obj: numberOpSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-numberOpSymbol.obj -MD -MP -MF $(DEPDIR)/libbuiltIn_a-numberOpSymbol.Tpo -c -o libbuiltIn_a-numberOpSymbol.obj `if test -f 'numberOpSymbol.cc'; then $(CYGPATH_W) 'numberOpSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/numberOpSymbol.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-numberOpSymbol.Tpo $(DEPDIR)/libbuiltIn_a-numberOpSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='numberOpSymbol.cc' object='libbuiltIn_a-numberOpSymbol.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-numberOpSymbol.obj `if test -f 'numberOpSymbol.cc'; then $(CYGPATH_W) 'numberOpSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/numberOpSymbol.cc'; fi` libbuiltIn_a-minusSymbol.o: minusSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-minusSymbol.o -MD -MP -MF $(DEPDIR)/libbuiltIn_a-minusSymbol.Tpo -c -o libbuiltIn_a-minusSymbol.o `test -f 'minusSymbol.cc' || echo '$(srcdir)/'`minusSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-minusSymbol.Tpo $(DEPDIR)/libbuiltIn_a-minusSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='minusSymbol.cc' object='libbuiltIn_a-minusSymbol.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-minusSymbol.o `test -f 'minusSymbol.cc' || echo '$(srcdir)/'`minusSymbol.cc libbuiltIn_a-minusSymbol.obj: minusSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-minusSymbol.obj -MD -MP -MF $(DEPDIR)/libbuiltIn_a-minusSymbol.Tpo -c -o libbuiltIn_a-minusSymbol.obj `if test -f 'minusSymbol.cc'; then $(CYGPATH_W) 'minusSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/minusSymbol.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-minusSymbol.Tpo $(DEPDIR)/libbuiltIn_a-minusSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='minusSymbol.cc' object='libbuiltIn_a-minusSymbol.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-minusSymbol.obj `if test -f 'minusSymbol.cc'; then $(CYGPATH_W) 'minusSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/minusSymbol.cc'; fi` libbuiltIn_a-ACU_NumberOpSymbol.o: ACU_NumberOpSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-ACU_NumberOpSymbol.o -MD -MP -MF $(DEPDIR)/libbuiltIn_a-ACU_NumberOpSymbol.Tpo -c -o libbuiltIn_a-ACU_NumberOpSymbol.o `test -f 'ACU_NumberOpSymbol.cc' || echo '$(srcdir)/'`ACU_NumberOpSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-ACU_NumberOpSymbol.Tpo $(DEPDIR)/libbuiltIn_a-ACU_NumberOpSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ACU_NumberOpSymbol.cc' object='libbuiltIn_a-ACU_NumberOpSymbol.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-ACU_NumberOpSymbol.o `test -f 'ACU_NumberOpSymbol.cc' || echo '$(srcdir)/'`ACU_NumberOpSymbol.cc libbuiltIn_a-ACU_NumberOpSymbol.obj: ACU_NumberOpSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-ACU_NumberOpSymbol.obj -MD -MP -MF $(DEPDIR)/libbuiltIn_a-ACU_NumberOpSymbol.Tpo -c -o libbuiltIn_a-ACU_NumberOpSymbol.obj `if test -f 'ACU_NumberOpSymbol.cc'; then $(CYGPATH_W) 'ACU_NumberOpSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/ACU_NumberOpSymbol.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-ACU_NumberOpSymbol.Tpo $(DEPDIR)/libbuiltIn_a-ACU_NumberOpSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ACU_NumberOpSymbol.cc' object='libbuiltIn_a-ACU_NumberOpSymbol.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-ACU_NumberOpSymbol.obj `if test -f 'ACU_NumberOpSymbol.cc'; then $(CYGPATH_W) 'ACU_NumberOpSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/ACU_NumberOpSymbol.cc'; fi` libbuiltIn_a-CUI_NumberOpSymbol.o: CUI_NumberOpSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-CUI_NumberOpSymbol.o -MD -MP -MF $(DEPDIR)/libbuiltIn_a-CUI_NumberOpSymbol.Tpo -c -o libbuiltIn_a-CUI_NumberOpSymbol.o `test -f 'CUI_NumberOpSymbol.cc' || echo '$(srcdir)/'`CUI_NumberOpSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-CUI_NumberOpSymbol.Tpo $(DEPDIR)/libbuiltIn_a-CUI_NumberOpSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CUI_NumberOpSymbol.cc' object='libbuiltIn_a-CUI_NumberOpSymbol.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-CUI_NumberOpSymbol.o `test -f 'CUI_NumberOpSymbol.cc' || echo '$(srcdir)/'`CUI_NumberOpSymbol.cc libbuiltIn_a-CUI_NumberOpSymbol.obj: CUI_NumberOpSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-CUI_NumberOpSymbol.obj -MD -MP -MF $(DEPDIR)/libbuiltIn_a-CUI_NumberOpSymbol.Tpo -c -o libbuiltIn_a-CUI_NumberOpSymbol.obj `if test -f 'CUI_NumberOpSymbol.cc'; then $(CYGPATH_W) 'CUI_NumberOpSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/CUI_NumberOpSymbol.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-CUI_NumberOpSymbol.Tpo $(DEPDIR)/libbuiltIn_a-CUI_NumberOpSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CUI_NumberOpSymbol.cc' object='libbuiltIn_a-CUI_NumberOpSymbol.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-CUI_NumberOpSymbol.obj `if test -f 'CUI_NumberOpSymbol.cc'; then $(CYGPATH_W) 'CUI_NumberOpSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/CUI_NumberOpSymbol.cc'; fi` libbuiltIn_a-divisionSymbol.o: divisionSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-divisionSymbol.o -MD -MP -MF $(DEPDIR)/libbuiltIn_a-divisionSymbol.Tpo -c -o libbuiltIn_a-divisionSymbol.o `test -f 'divisionSymbol.cc' || echo '$(srcdir)/'`divisionSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-divisionSymbol.Tpo $(DEPDIR)/libbuiltIn_a-divisionSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='divisionSymbol.cc' object='libbuiltIn_a-divisionSymbol.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-divisionSymbol.o `test -f 'divisionSymbol.cc' || echo '$(srcdir)/'`divisionSymbol.cc libbuiltIn_a-divisionSymbol.obj: divisionSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-divisionSymbol.obj -MD -MP -MF $(DEPDIR)/libbuiltIn_a-divisionSymbol.Tpo -c -o libbuiltIn_a-divisionSymbol.obj `if test -f 'divisionSymbol.cc'; then $(CYGPATH_W) 'divisionSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/divisionSymbol.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-divisionSymbol.Tpo $(DEPDIR)/libbuiltIn_a-divisionSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='divisionSymbol.cc' object='libbuiltIn_a-divisionSymbol.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-divisionSymbol.obj `if test -f 'divisionSymbol.cc'; then $(CYGPATH_W) 'divisionSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/divisionSymbol.cc'; fi` libbuiltIn_a-randomOpSymbol.o: randomOpSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-randomOpSymbol.o -MD -MP -MF $(DEPDIR)/libbuiltIn_a-randomOpSymbol.Tpo -c -o libbuiltIn_a-randomOpSymbol.o `test -f 'randomOpSymbol.cc' || echo '$(srcdir)/'`randomOpSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-randomOpSymbol.Tpo $(DEPDIR)/libbuiltIn_a-randomOpSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='randomOpSymbol.cc' object='libbuiltIn_a-randomOpSymbol.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-randomOpSymbol.o `test -f 'randomOpSymbol.cc' || echo '$(srcdir)/'`randomOpSymbol.cc libbuiltIn_a-randomOpSymbol.obj: randomOpSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-randomOpSymbol.obj -MD -MP -MF $(DEPDIR)/libbuiltIn_a-randomOpSymbol.Tpo -c -o libbuiltIn_a-randomOpSymbol.obj `if test -f 'randomOpSymbol.cc'; then $(CYGPATH_W) 'randomOpSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/randomOpSymbol.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-randomOpSymbol.Tpo $(DEPDIR)/libbuiltIn_a-randomOpSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='randomOpSymbol.cc' object='libbuiltIn_a-randomOpSymbol.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-randomOpSymbol.obj `if test -f 'randomOpSymbol.cc'; then $(CYGPATH_W) 'randomOpSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/randomOpSymbol.cc'; fi` libbuiltIn_a-counterSymbol.o: counterSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-counterSymbol.o -MD -MP -MF $(DEPDIR)/libbuiltIn_a-counterSymbol.Tpo -c -o libbuiltIn_a-counterSymbol.o `test -f 'counterSymbol.cc' || echo '$(srcdir)/'`counterSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-counterSymbol.Tpo $(DEPDIR)/libbuiltIn_a-counterSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='counterSymbol.cc' object='libbuiltIn_a-counterSymbol.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-counterSymbol.o `test -f 'counterSymbol.cc' || echo '$(srcdir)/'`counterSymbol.cc libbuiltIn_a-counterSymbol.obj: counterSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-counterSymbol.obj -MD -MP -MF $(DEPDIR)/libbuiltIn_a-counterSymbol.Tpo -c -o libbuiltIn_a-counterSymbol.obj `if test -f 'counterSymbol.cc'; then $(CYGPATH_W) 'counterSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/counterSymbol.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-counterSymbol.Tpo $(DEPDIR)/libbuiltIn_a-counterSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='counterSymbol.cc' object='libbuiltIn_a-counterSymbol.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-counterSymbol.obj `if test -f 'counterSymbol.cc'; then $(CYGPATH_W) 'counterSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/counterSymbol.cc'; fi` libbuiltIn_a-matrixOpSymbol.o: matrixOpSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-matrixOpSymbol.o -MD -MP -MF $(DEPDIR)/libbuiltIn_a-matrixOpSymbol.Tpo -c -o libbuiltIn_a-matrixOpSymbol.o `test -f 'matrixOpSymbol.cc' || echo '$(srcdir)/'`matrixOpSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-matrixOpSymbol.Tpo $(DEPDIR)/libbuiltIn_a-matrixOpSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='matrixOpSymbol.cc' object='libbuiltIn_a-matrixOpSymbol.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-matrixOpSymbol.o `test -f 'matrixOpSymbol.cc' || echo '$(srcdir)/'`matrixOpSymbol.cc libbuiltIn_a-matrixOpSymbol.obj: matrixOpSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-matrixOpSymbol.obj -MD -MP -MF $(DEPDIR)/libbuiltIn_a-matrixOpSymbol.Tpo -c -o libbuiltIn_a-matrixOpSymbol.obj `if test -f 'matrixOpSymbol.cc'; then $(CYGPATH_W) 'matrixOpSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/matrixOpSymbol.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-matrixOpSymbol.Tpo $(DEPDIR)/libbuiltIn_a-matrixOpSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='matrixOpSymbol.cc' object='libbuiltIn_a-matrixOpSymbol.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-matrixOpSymbol.obj `if test -f 'matrixOpSymbol.cc'; then $(CYGPATH_W) 'matrixOpSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/matrixOpSymbol.cc'; fi` libbuiltIn_a-equalityExtor.o: equalityExtor.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-equalityExtor.o -MD -MP -MF $(DEPDIR)/libbuiltIn_a-equalityExtor.Tpo -c -o libbuiltIn_a-equalityExtor.o `test -f 'equalityExtor.cc' || echo '$(srcdir)/'`equalityExtor.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-equalityExtor.Tpo $(DEPDIR)/libbuiltIn_a-equalityExtor.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='equalityExtor.cc' object='libbuiltIn_a-equalityExtor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-equalityExtor.o `test -f 'equalityExtor.cc' || echo '$(srcdir)/'`equalityExtor.cc libbuiltIn_a-equalityExtor.obj: equalityExtor.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-equalityExtor.obj -MD -MP -MF $(DEPDIR)/libbuiltIn_a-equalityExtor.Tpo -c -o libbuiltIn_a-equalityExtor.obj `if test -f 'equalityExtor.cc'; then $(CYGPATH_W) 'equalityExtor.cc'; else $(CYGPATH_W) '$(srcdir)/equalityExtor.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-equalityExtor.Tpo $(DEPDIR)/libbuiltIn_a-equalityExtor.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='equalityExtor.cc' object='libbuiltIn_a-equalityExtor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-equalityExtor.obj `if test -f 'equalityExtor.cc'; then $(CYGPATH_W) 'equalityExtor.cc'; else $(CYGPATH_W) '$(srcdir)/equalityExtor.cc'; fi` libbuiltIn_a-equalityExtorFinal.o: equalityExtorFinal.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-equalityExtorFinal.o -MD -MP -MF $(DEPDIR)/libbuiltIn_a-equalityExtorFinal.Tpo -c -o libbuiltIn_a-equalityExtorFinal.o `test -f 'equalityExtorFinal.cc' || echo '$(srcdir)/'`equalityExtorFinal.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-equalityExtorFinal.Tpo $(DEPDIR)/libbuiltIn_a-equalityExtorFinal.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='equalityExtorFinal.cc' object='libbuiltIn_a-equalityExtorFinal.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-equalityExtorFinal.o `test -f 'equalityExtorFinal.cc' || echo '$(srcdir)/'`equalityExtorFinal.cc libbuiltIn_a-equalityExtorFinal.obj: equalityExtorFinal.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbuiltIn_a-equalityExtorFinal.obj -MD -MP -MF $(DEPDIR)/libbuiltIn_a-equalityExtorFinal.Tpo -c -o libbuiltIn_a-equalityExtorFinal.obj `if test -f 'equalityExtorFinal.cc'; then $(CYGPATH_W) 'equalityExtorFinal.cc'; else $(CYGPATH_W) '$(srcdir)/equalityExtorFinal.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbuiltIn_a-equalityExtorFinal.Tpo $(DEPDIR)/libbuiltIn_a-equalityExtorFinal.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='equalityExtorFinal.cc' object='libbuiltIn_a-equalityExtorFinal.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbuiltIn_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbuiltIn_a-equalityExtorFinal.obj `if test -f 'equalityExtorFinal.cc'; then $(CYGPATH_W) 'equalityExtorFinal.cc'; else $(CYGPATH_W) '$(srcdir)/equalityExtorFinal.cc'; fi` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/libbuiltIn_a-ACU_NumberOpSymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-CUI_NumberOpSymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-branchSymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-counterSymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-divisionSymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-equalityExtor.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-equalityExtorFinal.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-equalitySymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-floatDagNode.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-floatOpSymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-floatSymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-floatTerm.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-matrixOpSymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-minusSymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-numberOpSymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-randomOpSymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-sortTestSymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-stringDagNode.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-stringOpSymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-stringSymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-stringTerm.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-succSymbol.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/libbuiltIn_a-ACU_NumberOpSymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-CUI_NumberOpSymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-branchSymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-counterSymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-divisionSymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-equalityExtor.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-equalityExtorFinal.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-equalitySymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-floatDagNode.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-floatOpSymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-floatSymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-floatTerm.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-matrixOpSymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-minusSymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-numberOpSymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-randomOpSymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-sortTestSymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-stringDagNode.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-stringOpSymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-stringSymbol.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-stringTerm.Po -rm -f ./$(DEPDIR)/libbuiltIn_a-succSymbol.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-noinstLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: maude-3.1/src/Makefile.am0000755000175200017520000000050113252622142012216 00000000000000SUBDIRS = \ 3rdParty \ Utility \ Parser \ Temporal \ Interface \ Core \ Variable \ NA_Theory \ ACU_Persistent \ ACU_Theory \ AU_Persistent \ AU_Theory \ CUI_Theory \ S_Theory \ FreeTheory \ Higher \ BuiltIn \ IO_Stuff \ ObjectSystem \ Meta \ FullCompiler \ StrategyLanguage \ Mixfix \ SMT \ Main maude-3.1/src/IO_Stuff/0000755000175200017520000000000013741222370011723 500000000000000maude-3.1/src/IO_Stuff/ChangeLog0000644000175200017520000001400213572027515013420 000000000000002019-12-04 Steven Eker * directoryManager.cc (popd): prevLength becomes indexOfDirectoryToPop (popd): added comments to explain what is going on 2019-12-03 Steven Eker * directoryManager.cc (popd): check return value of chdir() call ===================================Maude127=========================================== 2018-09-13 Steven Eker * directoryManager.hh (D): added typedef VisitedMap * directoryManager.cc (alreadySeen): added * directoryManager.hh (D): added data member visitedMap * directoryManager.cc (visitFile): added ===================================Maude116=========================================== 2018-07-06 Steven Eker * IO_Manager.hh (I): boundedGetLineFromStdin() -> readFromStdin(); deleted decls for getLine(), boundedGetLine(); make readFromStdin() private * IO_Manager.cc (getLineFromStdin): use BUFFER_SIZE (boundedGetLine, getLine): deleted (boundedGetLineFromStdin): becomes readFromStdin() (getLineFromStdin, getInput): use readFromStdin() * IO_Manager.hh (I): added decls for boundedGetLineFromStdin(), getLineFromStdin() (I): added enum Sizes * IO_Manager.cc (getInput): use boundedGetLineFromStdin() * IO_Manager.hh (I): added data members firstUnused, bufferEnd, bufferSize, buffer * IO_Manager.cc (IO_Manager): initialize firstUnused, bufferEnd, bufferSize, buffer (boundedGetLineFromStdin, getLineFromStdin): added 2017-12-07 Steven Eker * IO_Manager.cc (getInput): don't generate continuation prompts in the usePromptsAnyway case ===================================Maude116=========================================== 2017-08-01 Steven Eker * IO_Manager.cc (IO_Manager): clear usePromptsAynway flag (getInput): repect usePromptsAnyway flag (getInput): make n a size_t * IO_Manager.hh (setUsePromptsAnyway): added * IO_Manager.cc (getInput): support contPrompt in non-Tecla case * IO_Manager.hh (I): added decl for boundedGetLine() * IO_Manager.cc (boundedGetLine): added (getInput): use boundedGetLine() * IO_Manager.hh (I): upated decl for getInput() * IO_Manager.cc (getLine): check and free memory even in the EOF/error case (getInput): pass maxSize as size_t 2017-07-31 Steven Eker * IO_Manager.hh (I): updated decl for getLine() * IO_Manager.cc (getLine): take a prompt argument 2017-07-27 Steven Eker * IO_Manager.hh (I): adde decl for getLine() * IO_Manager.cc (getLine): added 2017-07-18 Steven Eker * directoryManager.cc (checkAccess): removed hack since compare() for substring vs C-string seems to work; added comment ===================================Maude115=========================================== 2008-09-04 Steven Eker * directoryManager.cc (initialize): fix char constness ===================================Maude91a=========================================== 2006-10-10 Steven Eker * IO_Manager.hh (class IO_Manager): removed extraneous quantification to appease gcc 4.1 ===================================Maude88b=========================================== 2003-10-08 Steven Eker * IO_Manager.cc (getInput): rewritten to allow building without Tecla ===================================Maude82=========================================== 2003-07-28 Steven Eker * IO_Manager.cc: test HAVE_SYS_TERMIOS_H 2003-07-23 Steven Eker * autoWrapBuffer.cc (handleEscapeSequenceChar): use operator+= rather than push_back() since it seems more portable (handleChar): ditto 2003-07-21 Steven Eker * autoWrapBuffer.cc (sync): rewritten to test __GNUC__ in order to determine which sync function to call ===================================Maude81=========================================== 2003-02-26 Steven Eker * directoryManager.cc: removed #pragma * directoryManager.hh: removed #pragma * autoWrapBuffer.cc: removed #pragma (sync): updated Assert() (overflow): updated Assert() * autoWrapBuffer.hh: removed #pragma * IO_Manager.cc: removed #pragma * IO_Manager.hh: removed #pragma ===================================Maude79=========================================== 2002-11-19 Steven Eker * IO_Manager.cc (getInput): output a prompt if we are reading from stdin but not using tecla 2002-10-02 Steven Eker * IO_Manager.hh (class IO_Manager): added DEFAULT_LINES to enum Defaults * IO_Manager.cc (getInput): use setLineWidth() to set wrapOut and wrapErr line widths after each tecla input in case user resized terminal * autoWrapBuffer.hh: rewritten * autoWrapBuffer.cc: rewritten 2002-10-01 Steven Eker * autoWrapBuffer.cc (AutoWrapBuffer): lineWidth now stores true line width (breakLine): now use true lineWidth - need to subtract RIGHT_MARGIN (sync): removed hack for flushing maude prompts now that the command line prompts are handled by tecla and don't pass through C++ streams (breakLine): handle the case where the pending buffer will not fit on a new line by not inserting a \n and instead calculating where the cursor will end up after hard wrapping. (overflow): don't call breakLine() in normal case; call breakLine() in \n case (overflow): only call saveBreakPoint() after we fail to breaLine() in space case 2002-09-27 Steven Eker * directoryManager.cc: moved here from ../Mixfix * autoWrapBuffer.cc: moved here from ../Mixfix * timer.cc: moved here from ../Mixfix * IO_Manager.hh (setPrompt): take ref (setContPrompt): take ref * IO_Manager.cc (getInput): set contFlag (IO_Manager): clear contFlag (setCommandLineEditing): pass 0 to gl_trap_signal() flag arg since we won't be printing during interrupt 2002-09-26 Steven Eker * IO_Manager.cc: created * IO_Manager.hh: created maude-3.1/src/IO_Stuff/directoryManager.cc0000644000175200017520000001756113576050735015475 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class DirectoryManager. // #include #include #include #include // utility stuff #include "macros.hh" #include "vector.hh" #include "directoryManager.hh" bool DirectoryManager::checkAccess(const string& directory, string& fileName, int mode, char const* const ext[]) { // // See if directory/fileName is accessible, and if not // try added extensions to see if the fixes the problem. // string full(directory + '/' + fileName); if (access(full.c_str(), mode) == 0) return true; if (ext != 0) { string::size_type d = fileName.rfind('.'); if (d != string::npos) { for (char const* const* p = ext; *p; p++) { if (fileName.compare(d, string::npos, *p) == 0) return false; // already ends in one of our extensions } } for (char const* const* p = ext; *p; p++) { if (access((full + *p).c_str(), mode) == 0) { fileName += *p; return true; } } } return false; } bool DirectoryManager::searchPath(const char* pathVar, string& directory, string& fileName, int mode, char const* const ext[]) { if (char* p = getenv(pathVar)) { string path(p); string::size_type len = path.length(); for (string::size_type start = 0; start < len;) { string::size_type c = path.find(':', start); if (c == string::npos) c = len; if (string::size_type partLen = c - start) { realPath(path.substr(start, partLen), directory); if (checkAccess(directory, fileName, mode, ext)) return true; } start = c + 1; } } return false; } void DirectoryManager::realPath(const string& path, string& resolvedPath) { string::size_type length = path.length(); if (length == 0) { resolvedPath = getCwd(); return; } // cout << "in " << path << '\n'; resolvedPath.erase(); string::size_type p = 0; // p will index the first path component for standard processing switch (path[0]) { case '/': // absolute path name { p = 1; break; } case '~': // need to expand user home directory { const char* dirPath = 0; string::size_type e = path.find('/'); if (e == string::npos) e = length; if (e == 1) { // // Get users home directory. // dirPath = getenv("HOME"); if (dirPath == 0) { if (passwd* pw = getpwuid(getuid())) dirPath = pw->pw_dir; } } else { // // Get somebody elses home directory. // if (passwd* pw = getpwnam(path.substr(1, e - 1).c_str())) dirPath = pw->pw_dir; } if (dirPath != 0) { resolvedPath = dirPath; p = e + 1; break; } } // fall thru default: // relative path name { resolvedPath = getCwd(); break; } } // // Just in case a home directory or cwd ended in '/'. // string::size_type resLen = resolvedPath.length(); if (resLen > 0 && resolvedPath[resLen - 1] == '/') resolvedPath.erase(resLen - 1); // // Deal with each path component in turn. // while (p < length) { string::size_type pos = path.find('/', p); if (pos == string::npos) pos = length; string::size_type cLen = pos - p; // cout << "cLen " << cLen << '\n'; if (cLen == 0 || (cLen == 1 && path[p] == '.')) ; // ignore component else if (cLen == 2 && path[p] == '.' && path[p + 1] == '.') { string::size_type backup = resolvedPath.rfind('/'); if (backup != string::npos) resolvedPath.erase(backup); } else { resolvedPath += '/'; resolvedPath += path.substr(p, cLen); } p = pos + 1; } if (resolvedPath.empty()) resolvedPath = '/'; // cout << "out " << resolvedPath << '\n'; } void DirectoryManager::initialize() { char buffer[MAXPATHLEN]; const char* cwd = getenv("PWD"); if (cwd == 0) { cwd = getcwd(buffer, MAXPATHLEN); // really want to emulate GNU xgetcwd if (cwd == 0) cwd = "/"; } directoryStack.append(directoryNames.encode(cwd)); } bool DirectoryManager::cd(const string& directory) { if (chdir(directory.c_str()) != 0) return false; directoryStack[directoryStack.length() - 1] = directoryNames.encode(directory.c_str()); return true; } int DirectoryManager::pushd(const string& directory) { int oldLength = directoryStack.length(); if (directory.compare(".") == 0) { // // If we didn't use a temporary we would have a really subtle // memory problem since directoryStack[] returns a // reference which might be invalidated by the append() call // before it is dereferenced. // int cwd = directoryStack[oldLength - 1]; directoryStack.append(cwd); } else { if (chdir(directory.c_str()) != 0) oldLength = UNDEFINED; else directoryStack.append(directoryNames.encode(directory.c_str())); } return oldLength; } const char* DirectoryManager::popd(int indexOfDirectoryToPop) { // // We pop the directory indexed by indexOfDirectoryToPop; or the directory // currently on the top of the stack, if indexOfDirectoryToPop = UNDEFINED // int top = directoryStack.length() - 1; // // Check that indexOfDirectoryToPop isn't greater than index of the // directory currently on the top of the stack. // if (indexOfDirectoryToPop > top) return 0; // // The usual case is indexOfDirectoryToPop == UNDEFINED which is take to mean // indexOfDirectoryToPop = "index of current top directory". // if (indexOfDirectoryToPop == UNDEFINED) indexOfDirectoryToPop = top; // // If we have something on the stack we can popd to. // if (indexOfDirectoryToPop > 0) { int code = directoryStack[indexOfDirectoryToPop - 1]; // previous directory const char* dirName = directoryNames.name(code); if (code != directoryStack[top]) // only change directory if actually different { if (chdir(dirName) != 0) // failed return 0; } directoryStack.contractTo(indexOfDirectoryToPop); return dirName; } return 0; } const char* DirectoryManager::getCwd() { return directoryNames.name(directoryStack[directoryStack.length() - 1]); } void DirectoryManager::visitFile(const string& fileName) { // // Record a visit to a file, with the file's modification time. // struct stat buf; if (stat(fileName.c_str(), &buf) == 0) { pair id(directoryStack[directoryStack.length() - 1], buf.st_ino); visitedMap[id] = buf.st_mtime; } } bool DirectoryManager::alreadySeen(const string& directory, const string& fileName) { // // Check if we previous visited a file, and the file is unchanged. // string full(directory + '/' + fileName); struct stat buf; if (stat(full.c_str(), &buf) == 0) { pair id(directoryNames.encode(directory.c_str()), buf.st_ino); VisitedMap::const_iterator i = visitedMap.find(id); if (i != visitedMap.end() && i->second == buf.st_mtime) { DebugAdvisory("already seen " << full); return true; } } return false; } maude-3.1/src/IO_Stuff/autoWrapBuffer.hh0000644000175200017520000000510113576050635015126 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for streambuf with automatic line wrapping. // // The basic idea is when we see a legal place to insert a \n // we put subsequent chars into a pending buffer until we known // whether to use this place. // // Decisions on legal places are complicated by "strings", // ESC ... m sequences and backquotes. // // Decisions on whether we need to insert a \n depend on width // calculations which are complicated by tabs and ESC ... m sequences. // #ifndef _autoWrapBuf_hh_ #define _autoWrapBuf_hh_ #include class AutoWrapBuffer : public std::streambuf { NO_COPYING(AutoWrapBuffer); public: AutoWrapBuffer(streambuf* outputBuffer, int lineWidth); void setLineWidth(int lineWidth); // // Member functions we need to override from streambuf to get // hold of raw characters. // int sync(); int overflow(int ch); private: enum Options { LEFT_MARGIN = 4, RIGHT_MARGIN = 1 }; void handleChar(int ch); void handleEscapeSequenceChar(int ch); int nextTabPosition(int pos); void dumpBuffer(); void decideOnBreak(); void legalPositionToBreak(); streambuf* outputBuffer; int lineWidth; // width of output device int cursorPosition; // cursor position if we were to print pendingBuffer Bool seenBackQuote; // last char was a ` Bool seenBackSlash; // inside a "string" and last char was an unescaped // backslash Bool inString; // inside a "string" Bool inEscape; // inside an ESC sequence string pendingBuffer; int pendingWidth; // number of chars in buffer excluding \t and ESC sequences }; inline void AutoWrapBuffer::setLineWidth(int lineWidth) { AutoWrapBuffer::lineWidth = lineWidth; } inline int AutoWrapBuffer::nextTabPosition(int pos) { return (pos + 8) & ~7; } #endif maude-3.1/src/IO_Stuff/Makefile.am0000644000175200017520000000037707674441174013723 00000000000000noinst_LIBRARIES = libIO_Stuff.a libIO_Stuff_a_CPPFLAGS = \ -I$(top_srcdir)/src/Utility libIO_Stuff_a_SOURCES = \ IO_Manager.cc \ autoWrapBuffer.cc \ directoryManager.cc noinst_HEADERS = \ IO_Manager.hh \ autoWrapBuffer.hh \ directoryManager.hh maude-3.1/src/IO_Stuff/directoryManager.hh0000644000175200017520000000417013576050635015476 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for managing current directory stack. // #ifndef _directoryManager_hh_ #define _directoryManager_hh_ #include #include #include #include "stringTable.hh" class DirectoryManager { public: void initialize(); bool cd(const string& directory); int pushd(const string& directory); const char* popd(int prevLength = UNDEFINED); const char* getCwd(); bool checkAccess(const string& directory, string& fileName, int mode, char const* const ext[] = 0); bool searchPath(const char* pathVar, string& directory, string& fileName, int mode, char const* const ext[] = 0); void realPath(const string& path, string& resolvedPath); void visitFile(const string& fileName); bool alreadySeen(const string& directory, const string& fileName); private: // // We keep track of visited files by their directory path index and inode number. // This is because different files on different file systems could potentially // have the same inode number. If a file is deleted and its inode number reused, // it will have a later modified time so we don't worry about this case. // typedef map, time_t> VisitedMap; StringTable directoryNames; Vector directoryStack; VisitedMap visitedMap; }; #endif maude-3.1/src/IO_Stuff/IO_Manager.hh0000644000175200017520000000456413576050635014147 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for managing yucky I/O issues. // #ifndef _IO_Manager_hh_ #define _IO_Manager_hh_ #include "autoWrapBuffer.hh" struct GetLine; // to avoid sucking in the tecla header file class IO_Manager { NO_COPYING(IO_Manager); public: enum Defaults { MAX_LINE_LENGTH = 1024, MAX_HISTORY_LENGTH = 4096, DEFAULT_COLUMNS = 80, DEFAULT_LINES = 25 }; IO_Manager(); void setAutoWrap(); void setCommandLineEditing(size_t maxLineLength = MAX_LINE_LENGTH, size_t maxHistoryLength = MAX_HISTORY_LENGTH); void setUsePromptsAnyway(); void setPrompt(const string& newPrompt); void setContPrompt(const string& newContPrompt); void startCommand(); ssize_t getInput(char* buf, size_t maxSize, FILE* stream); Rope getLineFromStdin(const Rope& prompt); private: enum Sizes { BUFFER_SIZE = 4096 }; ssize_t readFromStdin(char* buf, size_t maxSize); GetLine* gl; const char* line; bool usePromptsAnyway; // use prompts even if command line editing disabled bool contFlag; string prompt; string contPrompt; AutoWrapBuffer* wrapOut; AutoWrapBuffer* wrapErr; ssize_t firstUnused; ssize_t bufferEnd; size_t bufferSize; char* buffer; }; inline void IO_Manager::setUsePromptsAnyway() { usePromptsAnyway = true; } inline void IO_Manager::setPrompt(const string& newPrompt) { prompt = newPrompt; } inline void IO_Manager::setContPrompt(const string& newContPrompt) { contPrompt = newContPrompt; } inline void IO_Manager::startCommand() { contFlag = false; } #endif maude-3.1/src/IO_Stuff/IO_Manager.cc0000644000175200017520000001474113576050735014134 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class IO_Manager. // #include #include #include #include // utility stuff #include "macros.hh" #include "rope.hh" // line editing stuff #ifdef USE_TECLA #if HAVE_SYS_TERMIOS_H #include #endif #include "libtecla.h" #endif // IO Stuff class definitions #include "autoWrapBuffer.hh" #include "IO_Manager.hh" IO_Manager::IO_Manager() { gl = 0; line = 0; usePromptsAnyway = false; contFlag = false; wrapOut = 0; wrapErr = 0; firstUnused = 0; bufferEnd = 0; bufferSize = 0; buffer = 0; } void IO_Manager::setCommandLineEditing(size_t lineLength, size_t historyLength) { #ifdef USE_TECLA gl = new_GetLine(lineLength, historyLength); gl_trap_signal(gl, SIGINT, 0, GLS_ABORT, EINTR); #endif } void IO_Manager::setAutoWrap() { // // Set up autowrapping of standard output and standard error. // winsize w; int columns = DEFAULT_COLUMNS; if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &w) == 0 && w.ws_col > 0) columns = w.ws_col; // cout << "out columns " << columns << '\n'; wrapOut = new AutoWrapBuffer(cout.rdbuf(), columns); (void) cout.rdbuf(wrapOut); columns = DEFAULT_COLUMNS; if (ioctl(STDERR_FILENO, TIOCGWINSZ, &w) == 0 && w.ws_col > 0) columns = w.ws_col; // cout << "err columns " << columns << '\n'; wrapErr = new AutoWrapBuffer (cerr.rdbuf(), columns); (void) cerr.rdbuf(wrapErr); } ssize_t IO_Manager::getInput(char* buf, size_t maxSize, FILE* stream) { if (stream != stdin) { // // Some stdio libraries (notably that of linux) have a nasty habit // of restarting slow system calls aborted by signals. We avoid // this behaviour by doing input directly from the OS. // return read(fileno(stream), buf, maxSize); } #ifdef USE_TECLA if (gl != 0) { if (line == 0) { line = gl_get_line(gl, contFlag ? contPrompt.c_str() : prompt.c_str(), NULL, -1); GlTerminalSize ts = gl_terminal_size(gl, DEFAULT_COLUMNS, DEFAULT_LINES); if (wrapOut != 0) wrapOut->setLineWidth(ts.ncolumn); if (wrapErr != 0) wrapErr->setLineWidth(ts.ncolumn); contFlag = true; if (line == 0) return 0; } size_t n; for (n = 0;; n++) { char c = *line; if (c == '\0') { line = 0; break; } if (n == maxSize) break; *buf++ = c; ++line; } return n; } #endif // // Read from stdin without using tecla. // It's important that we only read a line at a time from stdin, // now that we allow Maude programs to read from stdin. Otherwise // characters past \n could be buffered by the lexer. // if (usePromptsAnyway) { // // We don't generate continuation prompts in this case to avoid breaking IOP. // if (!contFlag) { fputs(prompt.c_str(), stdout); // HACK: bypass line wrapper fflush(stdout); contFlag = true; } } return readFromStdin(buf, maxSize); } ssize_t IO_Manager::readFromStdin(char* buf, size_t maxSize) { // // We bypass stdlib because we want to get whatever is available // from a pipe without waiting for a \n to avoid breaking IOP. // // But we can't use read() in place of this function because // we don't want lexer swallowing characters past \n since they // may be wanted by the object system standard stream functionality. // // Instead we keep a local buffer. We return whatever is in the // local buffer up to \n, maxSize, or the end of the buffer. // If the local buffer is empty, we refill it with whatever // is available from read(), and we don't make another call to // read() (which could block on a pipe or socket) until the local // buffer is empty. // if (firstUnused >= bufferEnd) { // // No buffered characters, need to do a read() and maybe block. // if (bufferSize < maxSize) { // // Need to reallocate our buffer first. // delete [] buffer; buffer = new char[maxSize]; bufferSize = maxSize; } firstUnused = 0; bufferEnd = read(STDIN_FILENO, buffer, maxSize); if (bufferEnd <= 0) return bufferEnd; // EOF or error } // // Return the buffered characters, up to \n, maxSize or end of local buffer. // size_t i = 0; for (;;) { char c = buffer[firstUnused]; buf[i] = c; ++firstUnused; ++i; if (c == '\n' || i == maxSize || firstUnused == bufferEnd) break; } return i; } Rope IO_Manager::getLineFromStdin(const Rope& prompt) { // // Get a line as a Rope, possibly using Tecla. // #ifdef USE_TECLA if (gl != 0 && isatty(STDIN_FILENO)) { char* promptString = prompt.makeZeroTerminatedString(); line = gl_get_line(gl, promptString, NULL, -1); // ignore any partial line left in line delete [] promptString; if (line == 0) return Rope(); // return empty rope on error or eof Rope result(line); line = 0; return result; } #endif // // Non-Tecla case. Either Tecla not compiled it, or disabled or // we are getting the line from a file or pipe. // We keep reading, respecting buffered characters, until we get to \n or EOF. // char* promptString = prompt.makeZeroTerminatedString(); fputs(promptString, stdout); // HACK: bypass line wrapper fflush(stdout); delete [] promptString; // // We keep reading and accumulating characters until we hit \n, EOF or error. // Rope result; for (;;) { char buf[BUFFER_SIZE]; ssize_t nrRead = readFromStdin(buf, BUFFER_SIZE); if (nrRead <= 0) break; Rope t(buf, nrRead); result += t; if (buf[nrRead - 1] == '\n') break; } return result; } maude-3.1/src/IO_Stuff/autoWrapBuffer.cc0000644000175200017520000001255413576050735015127 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class AutoWrapBuffer. // // utility stuff #include "macros.hh" // system class definitions #include "autoWrapBuffer.hh" AutoWrapBuffer::AutoWrapBuffer(streambuf* outputBuffer, int lineWidth) : outputBuffer(outputBuffer), lineWidth(lineWidth) { pendingWidth = UNDEFINED; cursorPosition = 0; seenBackQuote = false; seenBackSlash = false; inString = false; inEscape = false; } int AutoWrapBuffer::sync() { Assert(pptr() - pbase() == 0, "not supposed to have a buffer"); // // We don't dump the pending buffer here because stderr sync()s all // the time and we would lose our opportunities for inserting a \n. // #if defined(__GNUC__) && __GNUC__ < 3 // // For the old version of the GNU Standard C++ library, // use the old sync function. // return outputBuffer->sync(); #else // // Otherwise use the new ANSI one. // return outputBuffer->pubsync(); #endif } void AutoWrapBuffer::dumpBuffer() { if (!(pendingBuffer.empty())) { outputBuffer->sputn(pendingBuffer.data(), pendingBuffer.size()); pendingBuffer.erase(); } } void AutoWrapBuffer::handleEscapeSequenceChar(int ch) { if (pendingWidth == UNDEFINED) outputBuffer->sputc(ch); // buffering disabled else pendingBuffer += ch; } void AutoWrapBuffer::handleChar(int ch) { if (pendingWidth == UNDEFINED) outputBuffer->sputc(ch); // buffering disabled else { pendingBuffer += ch; ++pendingWidth; if (pendingWidth > lineWidth - RIGHT_MARGIN - LEFT_MARGIN) { // // Even inserting a \n before the characters in pendingBuffer // would not avoid a hard-wrapped token, so we don't bother. // dumpBuffer(); pendingWidth = UNDEFINED; // disable buffering } } } void AutoWrapBuffer::decideOnBreak() { if (pendingWidth != UNDEFINED) { if (cursorPosition > lineWidth - RIGHT_MARGIN) { outputBuffer->sputc('\n'); for (int i = 0; i < LEFT_MARGIN; i++) outputBuffer->sputc(' '); int nrPending = pendingBuffer.size(); cursorPosition = LEFT_MARGIN; if (nrPending > 0) { int t = (pendingBuffer[0] == ' '); // need to skip leading space if (nrPending - t > 0) { outputBuffer->sputn(pendingBuffer.data() + t, nrPending - t); if (pendingBuffer[0] == '\t') cursorPosition = nextTabPosition(cursorPosition) + pendingWidth; else cursorPosition += pendingWidth - t; } pendingBuffer.erase(); } } else dumpBuffer(); pendingWidth = UNDEFINED; // disable buffering } } void AutoWrapBuffer::legalPositionToBreak() { // // We just ecountered a legal position to insert a \n so we place // subsequent characters in pendingBuffer and make sure cursor // position is in range. // pendingWidth = 0; cursorPosition %= lineWidth; } int AutoWrapBuffer::overflow(int ch) { Assert(pptr() - pbase() == 0, "not supposed to have a buffer"); if (ch == EOF) return EOF; if (inEscape) { handleEscapeSequenceChar(ch); if (ch == 'm') inEscape = false; return 0; } if (!isprint(ch)) inString = false; switch (ch) { case '"': { if (!seenBackSlash) inString = !inString; goto normal; } case '\033': { inEscape = true; handleEscapeSequenceChar(ch); break; } case '\n': { decideOnBreak(); outputBuffer->sputc(ch); cursorPosition = 0; break; } case '\t': { decideOnBreak(); legalPositionToBreak(); handleEscapeSequenceChar(ch); cursorPosition = nextTabPosition(cursorPosition); break; } case ' ': { if (!inString) { decideOnBreak(); legalPositionToBreak(); } goto normal; } #ifdef WRAP_BEFORE_CLOSING case ')': case ']': case '}': { if (!inString && !seenBackQuote) { // // ok to add new line before this character // decideOnBreak(); legalPositionToBreak(); } goto normal; } #endif case ',': case '(': case '[': case '{': { if (!inString && !seenBackQuote) { // // ok to add new line after this character // handleChar(ch); ++cursorPosition; decideOnBreak(); legalPositionToBreak(); break; } // // If we have just seen a backquote or we are in a string, // ,([{ lose their special properties and we fall thru // into default case. // } default: { normal: handleChar(ch); ++cursorPosition; break; } } seenBackQuote = (ch == '`'); seenBackSlash = inString && !seenBackSlash && (ch == '\\'); return 0; } maude-3.1/src/IO_Stuff/Makefile.in0000644000175200017520000005714613741175702013733 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/IO_Stuff ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_have_poll.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libIO_Stuff_a_AR = $(AR) $(ARFLAGS) libIO_Stuff_a_LIBADD = am_libIO_Stuff_a_OBJECTS = libIO_Stuff_a-IO_Manager.$(OBJEXT) \ libIO_Stuff_a-autoWrapBuffer.$(OBJEXT) \ libIO_Stuff_a-directoryManager.$(OBJEXT) libIO_Stuff_a_OBJECTS = $(am_libIO_Stuff_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/libIO_Stuff_a-IO_Manager.Po \ ./$(DEPDIR)/libIO_Stuff_a-autoWrapBuffer.Po \ ./$(DEPDIR)/libIO_Stuff_a-directoryManager.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(libIO_Stuff_a_SOURCES) DIST_SOURCES = $(libIO_Stuff_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs ChangeLog DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ BUDDY_LIB = @BUDDY_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CVC4_LIB = @CVC4_LIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FLEX = @FLEX@ GCC_LIBS = @GCC_LIBS@ GMP_LIBS = @GMP_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSIGSEGV_LIB = @LIBSIGSEGV_LIB@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TECLA_LIBS = @TECLA_LIBS@ VERSION = @VERSION@ YICES2_LIB = @YICES2_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libIO_Stuff.a libIO_Stuff_a_CPPFLAGS = \ -I$(top_srcdir)/src/Utility libIO_Stuff_a_SOURCES = \ IO_Manager.cc \ autoWrapBuffer.cc \ directoryManager.cc noinst_HEADERS = \ IO_Manager.hh \ autoWrapBuffer.hh \ directoryManager.hh all: all-am .SUFFIXES: .SUFFIXES: .cc .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/IO_Stuff/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/IO_Stuff/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libIO_Stuff.a: $(libIO_Stuff_a_OBJECTS) $(libIO_Stuff_a_DEPENDENCIES) $(EXTRA_libIO_Stuff_a_DEPENDENCIES) $(AM_V_at)-rm -f libIO_Stuff.a $(AM_V_AR)$(libIO_Stuff_a_AR) libIO_Stuff.a $(libIO_Stuff_a_OBJECTS) $(libIO_Stuff_a_LIBADD) $(AM_V_at)$(RANLIB) libIO_Stuff.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libIO_Stuff_a-IO_Manager.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libIO_Stuff_a-autoWrapBuffer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libIO_Stuff_a-directoryManager.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` libIO_Stuff_a-IO_Manager.o: IO_Manager.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libIO_Stuff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libIO_Stuff_a-IO_Manager.o -MD -MP -MF $(DEPDIR)/libIO_Stuff_a-IO_Manager.Tpo -c -o libIO_Stuff_a-IO_Manager.o `test -f 'IO_Manager.cc' || echo '$(srcdir)/'`IO_Manager.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libIO_Stuff_a-IO_Manager.Tpo $(DEPDIR)/libIO_Stuff_a-IO_Manager.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='IO_Manager.cc' object='libIO_Stuff_a-IO_Manager.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libIO_Stuff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libIO_Stuff_a-IO_Manager.o `test -f 'IO_Manager.cc' || echo '$(srcdir)/'`IO_Manager.cc libIO_Stuff_a-IO_Manager.obj: IO_Manager.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libIO_Stuff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libIO_Stuff_a-IO_Manager.obj -MD -MP -MF $(DEPDIR)/libIO_Stuff_a-IO_Manager.Tpo -c -o libIO_Stuff_a-IO_Manager.obj `if test -f 'IO_Manager.cc'; then $(CYGPATH_W) 'IO_Manager.cc'; else $(CYGPATH_W) '$(srcdir)/IO_Manager.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libIO_Stuff_a-IO_Manager.Tpo $(DEPDIR)/libIO_Stuff_a-IO_Manager.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='IO_Manager.cc' object='libIO_Stuff_a-IO_Manager.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libIO_Stuff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libIO_Stuff_a-IO_Manager.obj `if test -f 'IO_Manager.cc'; then $(CYGPATH_W) 'IO_Manager.cc'; else $(CYGPATH_W) '$(srcdir)/IO_Manager.cc'; fi` libIO_Stuff_a-autoWrapBuffer.o: autoWrapBuffer.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libIO_Stuff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libIO_Stuff_a-autoWrapBuffer.o -MD -MP -MF $(DEPDIR)/libIO_Stuff_a-autoWrapBuffer.Tpo -c -o libIO_Stuff_a-autoWrapBuffer.o `test -f 'autoWrapBuffer.cc' || echo '$(srcdir)/'`autoWrapBuffer.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libIO_Stuff_a-autoWrapBuffer.Tpo $(DEPDIR)/libIO_Stuff_a-autoWrapBuffer.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='autoWrapBuffer.cc' object='libIO_Stuff_a-autoWrapBuffer.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libIO_Stuff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libIO_Stuff_a-autoWrapBuffer.o `test -f 'autoWrapBuffer.cc' || echo '$(srcdir)/'`autoWrapBuffer.cc libIO_Stuff_a-autoWrapBuffer.obj: autoWrapBuffer.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libIO_Stuff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libIO_Stuff_a-autoWrapBuffer.obj -MD -MP -MF $(DEPDIR)/libIO_Stuff_a-autoWrapBuffer.Tpo -c -o libIO_Stuff_a-autoWrapBuffer.obj `if test -f 'autoWrapBuffer.cc'; then $(CYGPATH_W) 'autoWrapBuffer.cc'; else $(CYGPATH_W) '$(srcdir)/autoWrapBuffer.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libIO_Stuff_a-autoWrapBuffer.Tpo $(DEPDIR)/libIO_Stuff_a-autoWrapBuffer.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='autoWrapBuffer.cc' object='libIO_Stuff_a-autoWrapBuffer.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libIO_Stuff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libIO_Stuff_a-autoWrapBuffer.obj `if test -f 'autoWrapBuffer.cc'; then $(CYGPATH_W) 'autoWrapBuffer.cc'; else $(CYGPATH_W) '$(srcdir)/autoWrapBuffer.cc'; fi` libIO_Stuff_a-directoryManager.o: directoryManager.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libIO_Stuff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libIO_Stuff_a-directoryManager.o -MD -MP -MF $(DEPDIR)/libIO_Stuff_a-directoryManager.Tpo -c -o libIO_Stuff_a-directoryManager.o `test -f 'directoryManager.cc' || echo '$(srcdir)/'`directoryManager.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libIO_Stuff_a-directoryManager.Tpo $(DEPDIR)/libIO_Stuff_a-directoryManager.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='directoryManager.cc' object='libIO_Stuff_a-directoryManager.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libIO_Stuff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libIO_Stuff_a-directoryManager.o `test -f 'directoryManager.cc' || echo '$(srcdir)/'`directoryManager.cc libIO_Stuff_a-directoryManager.obj: directoryManager.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libIO_Stuff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libIO_Stuff_a-directoryManager.obj -MD -MP -MF $(DEPDIR)/libIO_Stuff_a-directoryManager.Tpo -c -o libIO_Stuff_a-directoryManager.obj `if test -f 'directoryManager.cc'; then $(CYGPATH_W) 'directoryManager.cc'; else $(CYGPATH_W) '$(srcdir)/directoryManager.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libIO_Stuff_a-directoryManager.Tpo $(DEPDIR)/libIO_Stuff_a-directoryManager.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='directoryManager.cc' object='libIO_Stuff_a-directoryManager.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libIO_Stuff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libIO_Stuff_a-directoryManager.obj `if test -f 'directoryManager.cc'; then $(CYGPATH_W) 'directoryManager.cc'; else $(CYGPATH_W) '$(srcdir)/directoryManager.cc'; fi` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/libIO_Stuff_a-IO_Manager.Po -rm -f ./$(DEPDIR)/libIO_Stuff_a-autoWrapBuffer.Po -rm -f ./$(DEPDIR)/libIO_Stuff_a-directoryManager.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/libIO_Stuff_a-IO_Manager.Po -rm -f ./$(DEPDIR)/libIO_Stuff_a-autoWrapBuffer.Po -rm -f ./$(DEPDIR)/libIO_Stuff_a-directoryManager.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-noinstLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: maude-3.1/src/Variable/0000755000175200017520000000000013741222370011772 500000000000000maude-3.1/src/Variable/ChangeLog0000755000175200017520000006747313735200630013506 000000000000002020-09-30 Steven Eker * variableDagNode.cc (VariableDagNode::computeSolvedForm2): prefer to bind from variables of small sort index (large sort) to variables of large sort index (small sort) in order to maximally constraint search 2020-09-28 Steven Eker * variableDagNode.cc (VariableDagNode::safeVirtualReplacement): use range-based for loop ===================================Maude131=========================================== 2020-08-18 Steven Eker * variableDagNode.cc (VariableDagNode::indexVariables): added VariableInfo version * variableDagNode.hh (class VariableDagNode): added decl for VariableInfo version of indexVariables() ===================================Maude129=========================================== 2020-05-13 Steven Eker * variableDagNode.cc (VariableDagNode::lastVariableInChain): use Assert() rather that hardcoded check for a variable bound to itself ===================================Maude128a=========================================== 2019-12-03 Steven Eker * variableTerm.cc (deepCopy2): use safeCastNonNull<>() (compareArguments): use safeCastNonNull<>() (both versions) (subsumes): use safeCastNonNull<>() * variableSymbol.cc (termify): use safeCastNonNull<>() (computeGeneralizedSort): use safeCastNonNull<>() (computeGeneralizedSort2): use safeCastNonNull<>() (makeCanonicalCopy): use safeCastNonNull<>() * variableDagNode.cc (compareArguments): use safeCastNonNull<>() * variableTerm.hh (getSort): use safeCastNonNull<>() 2019-11-11 Steven Eker * variableDagNode.cc (computeBaseSortForGroundSubterms): take warnAboutUnimplemented arg * variableDagNode.hh (NamedEntity): updated decl for computeBaseSortForGroundSubterms() ===================================Maude125=========================================== 2017-02-17 Steven Eker * variableDagNode.cc (stackArguments): deleted * variableDagNode.hh (NamedEntity): deleted decl for stackArguments() * variableSymbol.hh (Symbol): deleted decl for stackArguments() * variableSymbol.cc (stackArguments): deleted ===================================Maude111b=========================================== 2016-11-10 Steven Eker * variableDagNode.hh (NamedEntity): added decl for copyAll2() * variableDagNode.cc (copyAll2): added ===================================Maude111=========================================== 2016-03-24 Steven Eker * variableSymbol.hh (Symbol): added decl for computeGeneralizedSort2() * variableSymbol.cc (computeGeneralizedSort2): added ===================================Maude110=========================================== 2014-06-23 Steven Eker * variableDagNode.cc (safeVirtualReplacement): update comment, since we are assume that oldVar is the last variable it its chain ===================================Maude104=========================================== 2013-01-04 Steven Eker * variableDagNode.hh (NamedEntity): added decl for safeVirtualReplacement() * variableDagNode.cc: force unsolving and re-solving to avoid occurs check problem cause by implicit variable renaming (safeVirtualReplacement): added (computeSolvedForm2): use safeVirtualReplacement() ===================================Maude96c=========================================== 2012-04-13 Steven Eker * variableDagNode.hh (NamedEntity): added declaration for instantiateWithCopies2() * variableDagNode.cc (instantiateWithCopies2): added 2012-03-29 Steven Eker * variableSymbol.hh (Symbol): added declaration for termify() * variableSymbol.cc (termify): added ===================================Maude96=========================================== 2010-10-19 Steven Eker * variableSymbol.cc (VariableSymbol::makeCanonicalCopyEagerUptoReduced): becomes makeCanonicalCopy() - no change in semantics needed * variableSymbol.hh (class VariableSymbol): makeCanonicalCopyEagerUptoReduced() -> makeCanonicalCopy() ===================================Maude95a=========================================== 2010-09-29 Steven Eker * variableSymbol.hh (class VariableSymbol): added decl for makeCanonicalCopyEagerUptoReduced() * variableSymbol.cc (Variable_Symbol::makeCanonicalCopyEagerUptoReduced): added 2010-08-18 Steven Eker * variableDagNode.cc (VariableDagNode::computeSolvedForm2): deleted (VariableDagNode::computeSolvedForm2): deleted commented out old version * variableDagNode.hh (class VariableDagNode): deleted decl for nonVariableSize() ===================================Maude95=========================================== 2010-08-11 Steven Eker * variableDagNode.cc (VariableDagNode::computeSolvedForm2): need to check for unifying a variable against itself 2010-08-04 Steven Eker * variableDagNode.cc (VariableDagNode::computeSolvedForm2): use computeSolvedForm() rather than computeSolvedForm2() in two places since the nonvariable object might be ground (VariableDagNode::computeSolvedForm2): reverted since we get infinite loop - no one wants to handle variable vs ground term (VariableDagNode::computeSolvedForm2): the two bound variables case needs to use computeSolvedForm() since the bindings could be ground and are guarenteed not to be variables 2010-08-03 Steven Eker * variableDagNode.cc (VariableDagNode::computeSolvedForm2): rewritten; we now only handle the variable vs variable case and punt the other cases to the nonvariable terms theory ===================================Maude94a=========================================== 2010-06-04 Steven Eker * variableSymbol.hh (class VariableSymbol): added decl for isStable() * variableSymbol.cc (VariableSymbol::isStable): added ===================================Maude94=========================================== 2009-12-03 Steven Eker * variableSymbol.hh (class VariableSymbol): added decl for makeCanonical() * variableSymbol.cc (makeCanonical): added ===================================Maude92b=========================================== 2008-02-08 Steven Eker * variableDagNode.cc (computeSolvedForm2): use unificationBind() (5 places) (computeSolvedForm2): missed one! * variableDagNode.hh (class VariableDagNode): updated decl for computeSolvedForm2() 2008-02-05 Steven Eker * variableDagNode.cc (computeSolvedForm2): rewritten * variableDagNode.hh (class VariableDagNode): updated decl for computeSolvedForm2() ===================================Maude90=========================================== 2007-11-01 Steven Eker * variableDagNode.cc (instantiate2): updated * variableDagNode.hh (class VariableDagNode): updated decl for instantiate2() 2007-10-26 Steven Eker * variableDagNode.hh (class VariableDagNode): decl for indexVariables() becomes indexVariables2() * variableDagNode.cc (indexVariables): becomes indexVariables2(); return bool 2007-10-15 Steven Eker * variableDagNode.hh (class VariableDagNode): adde decl for indexVariables() * variableDagNode.cc (indexVariables): added ===================================Maude89h=========================================== 2007-08-24 Steven Eker * variableDagNode.cc (computeBaseSortForGroundSubterms): updated * variableDagNode.hh (class VariableDagNode): updated decl for computeBaseSortForGroundSubterms() 2007-08-23 Steven Eker * variableDagNode.cc (computeSolvedForm): becomes computeSolvedForm2() * variableDagNode.hh (class VariableDagNode): added decl for nonVariableSize() (class VariableDagNode): computeSolvedForm() -> computeSolvedForm2() * variableDagNode.cc (nonVariableSize): added, now that default returns 1 ===================================Maude89g=========================================== 2007-07-09 Steven Eker * variableDagNode.cc (computeSolvedForm): detect and warn about unimplemented bare variable case 2007-06-28 Steven Eker * variableDagNode.cc (computeSolvedForm): added extensionInfo arg * variableDagNode.hh (class VariableDagNode): updated decl for computeSolvedForm() ===================================Maude89c=========================================== 2007-03-16 Steven Eker * variableDagNode.cc (occurs2, unify): deleted * variableDagNode.hh (class VariableDagNode): deleted decls for unify(), occurs2() 2007-03-15 Steven Eker * variableSymbol.cc (computeGeneralizedSort): pass realToBdd by ref * variableSymbol.hh (class VariableSymbol): fix decl for computeGeneralizedSort() ===================================Maude89a=========================================== 2007-02-27 Steven Eker * variableDagNode.cc (insertVariables2): added * variableDagNode.hh (class VariableDagNode): added decl for insertVariables2() 2007-02-26 Steven Eker * variableDagNode.cc (computeSolvedForm): fix sortIndex != bug * variableDagNode.hh (class VariableDagNode): added decl for lastVariableInChain() * variableDagNode.cc (lastVariableInChain): added (computeSolvedForm): added * variableDagNode.hh (class VariableDagNode): added decl for computeSolvedForm() ===================================Maude89=========================================== 2007-02-02 Steven Eker * variableDagNode.cc: use unificationBind(); this fixes the bug where we bind a variable X to a variable Y that is already bound to X and fail the occurs check 2007-01-31 Steven Eker * variableDagNode.cc (unify): clear returnedSubproblem; pass 0 extensionInfo on recursive call 2007-01-30 Steven Eker * variableDagNode.cc (unify): do sort check when getting bound to ground variable * variableDagNode.hh (class VariableDagNode): occurs() -> occurs2() * variableDagNode.cc (instantiate): becomes instantiate2() (occurs): becomes occurs2() * variableDagNode.hh (class VariableDagNode): instantiate() -> instantiate2() * variableDagNode.cc (computeBaseSortForGroundSubterms): added * variableDagNode.hh (class VariableDagNode): added decl for computeBaseSortForGroundSubterms() ===================================Maude88e=========================================== 2007-01-16 Steven Eker * variableDagNode.cc (unify): handle the case where we unify an unbound variable against itself 2007-01-04 Steven Eker * variableSymbol.cc (computeGeneralizedSort): added * variableSymbol.hh (class VariableSymbol): added decl for computeGeneralizedSort() 2006-12-11 Steven Eker * variableDagNode.cc (occurs): added (unify): do occurs check * variableDagNode.hh (class VariableDagNode): added decls for occurs() and instantiate() * variableDagNode.cc (instantiate): added (unify): use instantiate() (unify): use update() 2006-12-08 Steven Eker * variableDagNode.cc (unify): added 2006-12-07 Steven Eker * variableDagNode.cc (makeClone, overwriteWithClone) (copyEagerUptoReduced2): pass index to VariableDagNode() * variableTerm.cc (dagify2): pass index to VariableDagNode() * variableDagNode.hh (class VariableDagNode): added data member index (getIndex): added (VariableDagNode): handle index ===================================Maude88d=========================================== 2005-06-24 Steven Eker * variableTerm.hh (class VariableTerm): updated decl for deepCopy2() * variableTerm.cc (deepCopy2): changed arg name * variableTerm.hh (class VariableTerm): updated decl for instantiate2() * variableTerm.cc (instantiate2): new calling convention 2005-06-22 Steven Eker * variableTerm.cc (instantiate2): added * variableTerm.hh (class VariableTerm): added decl for instantiate2() ===================================Maude86b=========================================== 2003-05-06 Steven Eker * variableTerm.cc (partialCompareUnstable): use Term::UNKNOWN 2003-05-01 Steven Eker * variableDagNode.cc (overwriteWithClone): use copySetRewritingFlags() (makeClone): use copySetRewritingFlags() ===================================Maude80=========================================== 2003-02-24 Steven Eker * variableSymbol.cc (makeTerm): updated Assert() (makeDagNode): updated Assert() * variableSymbol.hh (getSort): updated Assert()s * variableTerm.cc: removed #pragma * variableTerm.hh: removed #pragma * variableSymbol.cc: removed #pragma * variableSymbol.hh: removed #pragma * variableLhsAutomaton.cc: removed #pragma * variableLhsAutomaton.hh: removed #pragma * variableDagNode.cc: removed #pragma * variableDagNode.hh: removed #pragma ===================================Maude79=========================================== 2003-01-07 Steven Eker * variableTerm.cc (partialCompareUnstable): added * variableTerm.hh (class VariableTerm): added decl for partialCompareUnstable() ===================================Engine78=========================================== 2002-10-08 Steven Eker * variableDagNode.cc (copyWithReplacement): (both versions) use CantHappen() macro 2002-10-04 Steven Eker * variableDagNode.cc (copyWithReplacement): complex version: changed last (unused) arg * variableDagNode.hh (class VariableDagNode): updated decl for complex version of copyWithReplacement() 2002-10-03 Steven Eker * variableDagNode.hh (class VariableDagNode): updated decl for stackArguments() * variableDagNode.cc (stackArguments): take respectFrozen flag ===================================Engine76================================================== 2002-08-26 Steven Eker * variableSymbol.hh (getSort): updated "temporary hack" to use class OpDeclaration 2002-08-23 Steven Eker * variableTerm.hh (class VariableTerm): deleted superfluous decl for compileRhs() 2002-08-21 Steven Eker * variableTerm.cc (compileRhs2): CantHappen() replaces Assert() ===================================Engine75================================================== 2002-07-24 Steven Eker * variableTerm.cc (subsumes): rewritten to handle sameVariableSet arg * variableTerm.hh (class VariableTerm): updated decl for subsumes() ===================================Engine74================================================== 2001-04-03 Steven Eker * variableDagNode.hh (class VariableDagNode): added decl for Vector version of copyWithReplacement() * variableDagNode.cc (copyWithReplacement): added (Vector version) ===================================Engine66================================================== 2001-03-07 Steven Eker * variableSymbol.hh (class VariableSymbol): added decl for stackArguments() * variableSymbol.cc (stackArguments): added ===================================Engine65================================================== 2001-01-26 Steven Eker * variableDagNode.hh (class VariableDagNode): updated markArguments() decl and made it private * variableDagNode.cc (markArguments): return 0 ===================================Engine64================================================== 2000-07-25 Steven Eker * variableTerm.cc (VariableTerm): don't set modifiedIndex (markEagerArguments): becomes the empty function * variable.hh: deleted forward decl for class VariableRhsAutomaton * variableTerm.hh (class VariableTerm): deleted decl for compileRhs() (class VariableTerm): deleted data member modifiedIndex; index becomes an int (setIndex): don't set modifiedIndex (getModifiedIndex): deleted (class VariableTerm): deleted decl for getModifiedIndex() * variableTerm.cc (compileRhs): deleted * variableRhsAutomaton.cc: deleted * variableRhsAutomaton.hh: deleted ===================================Engine60================================================== 2000-07-18 Steven Eker * variableRhsAutomaton.cc (dump): varIndex -> index * variableTerm.cc (compileLhs2): commented out use of variableInfo.rhsVariables() since we no longer have this 2000-07-12 Steven Eker * variableTerm.hh (class VariableTerm): added decls for findAvailableTerms() and compileRhs2() * variableTerm.cc (findAvailableTerms): added (compileRhs2): added ===================================Engine59================================================== 2000-07-05 Steven Eker * variableTerm.hh (class VariableTerm): compileLhs() -> compileLhs2() * variableTerm.cc (compileLhs): becomes compileLhs2() 2000-06-23 Steven Eker * variableTerm.hh (getSort): made const * variableRhsAutomaton.hh (class VariableRhsAutomaton): made index const * variableRhsAutomaton.cc (VariableRhsAutomaton): use index (construct): use index (replace): use index (dump): use index * variableRhsAutomaton.hh (class VariableRhsAutomaton): varIndex -> index * variableDagNode.hh (class VariableDagNode): use NO_COPYING() macro * variableTerm.cc (compareArguments): use safeCast() (both versions) (dagify2): pass id() * variableDagNode.cc (getHashValue): use id() in hash computation (compareArguments): compare ids() (copyEagerUptoReduced2): copy id() (overwriteWithClone): copy id() (makeClone): copy id() * variableDagNode.hh (class VariableDagNode): derive from class NamedEntity; ctor takes name arg (VariableDagNode): pass name to NamedEntity * variableTerm.hh (getSort): use safeCast() macro * variableTerm.cc (deepCopy2): use safeCast() macro * variableTerm.hh (class VariableTerm): added decl for getSort() (getSort): added * variableTerm.cc (VariableTerm): deal with anme arg; use index and modifiedIndex (deepCopy2): pass id() to new VariableTerm() (normalize): include id() in hash calculation (compareArguments): compare id()s (both versions) (findEagerVariables): use index (analyseConstraintPropagation): use index (compileLhs): use index and getSort() (markEagerArguments): use index and modifiedIndex (compileRhs): use modifiedIndex (subsumes): compare id()s and use index (lookupSort): deleted * variableTerm.hh (downCast): deleted (index): becomes getIndex() (modifiedIndex): becomes getModifiedIndex() (class VariableTerm): data members varIndex and modifiedVarIndex become index and modifiedIndex (setIndex): set index and modifiedIndex (class VariableTerm): ctor takes name arg 2000-06-21 Steven Eker * variableTerm.hh (class VariableTerm): derive from NamedEntity, use NO_COPYING() macro (class VariableTerm): deleted decls for downCast() and lookupSort() * variableSymbol.hh (class VariableSymbol): use NO_COPYING() macro * variableSymbol.cc (makeTerm): now a dummy function (makeDagNode): now a dummy function ===================================Engine58================================================== 2000-03-17 Steven Eker * variableRhsAutomaton.cc (dump): ifdef'd * variableRhsAutomaton.hh (class VariableRhsAutomaton): use NO_COPYING() macro; ifdef'd dump() decls * variableLhsAutomaton.cc (dump): ifdef'd * variableLhsAutomaton.hh (class VariableLhsAutomaton): use NO_COPYING() macro; ifdef'd dump() decls 1999-10-29 Steven Eker * variableSymbol.cc: deleted variableString (VariableSymbol): call Symbol with new conventions (VariableSymbol): don't pass memoFlag arg to Symbol * variableSymbol.hh: deleted static data member variableString ===================================Engine53================================================== 1999-10-26 Steven Eker * variableSymbol.hh (dynamicCast): deleted (class VariableSymbol): deleted decl for dynamicCast() * variableTerm.hh (downCast): rewritten using dynamic_cast() (dynamicCast): deleted (class VariableTerm): deleted decl for dynamicCast() 1999-10-19 Steven Eker * variableDagNode.cc (getHashValue): added * variableDagNode.hh (class VariableDagNode): added decl for getHashValue() ===================================Engine52================================================== 1999-05-12 Steven Eker * variableSymbol.hh (class VariableSymbol): computeTrueSort() -> normalizeAndComputeTrueSort() * variableSymbol.cc (computeTrueSort): become normalizeAndComputeTrueSort() (normalizeAndComputeTrueSort): use fastComputeTrueSort() ===================================Engine49================================================== 1999-01-16 Steven Eker * variableTerm.hh (class VariableTerm): made varIndex and modifiedVarIndex shorts to save memory ===================================Engine46================================================== Fri Nov 6 16:26:56 1998 Steven Eker * variableTerm.cc (deepCopy): -> deepCopy2() * variableTerm.hh (class VariableTerm): deepCopy() -> deepCopy2() ===================================Engine43================================================== Thu Sep 17 17:27:06 1998 Steven Eker * variableSymbol.cc (computeBaseSort): setSortInfo() -> setSortIndex() * variableTerm.cc (subsumes): use ConnectedComponent::leq() * variableDagNode.cc (overwriteWithClone): setSortInfo() -> setSortIndex() (makeClone): setSortInfo() -> setSortIndex() ===================================Engine40================================================== Tue Jul 21 10:42:34 1998 Steven Eker * variableTerm.hh (class VariableTerm): aded decl for deepCopy() * variableTerm.cc (deepCopy): added ===================================Engine39================================================== Wed Jun 10 18:21:38 1998 Steven Eker * variableTerm.hh (class VariableTerm): updated normalize() decl * variableTerm.cc (normalize): clear changed flag Tue Jun 9 18:13:41 1998 Steven Eker * variableTerm.cc: IntSet -> NatSet * variableTerm.hh: IntSet -> NatSet ===================================Engine38================================================== Thu Dec 4 13:13:01 1997 Steven Eker * variableSymbol.cc (VariableSymbol): don't pass inert arg to Symbol() Sun Nov 23 16:15:06 1997 Steven Eker * variableLhsAutomaton.cc (dump): rewritten * variableRhsAutomaton.cc (dump): rewritten * variableRhsAutomaton.hh (class VariableRhsAutomaton): added variableInfo arg * variableLhsAutomaton.hh (class VariableLhsAutomaton): rearranged dump() args ===================================Engine33================================================== Tue Oct 21 11:48:48 1997 Steven Eker * variableTerm.cc (dagify2): switch to new convention * variableTerm.hh (class VariableTerm): switch dagify2() decl to new convention Thu Oct 16 12:16:26 1997 Steven Eker * variableSymbol.cc: variableString changed from array to pointer to get around some slippery C++ semantics * variableSymbol.hh (class VariableSymbol): variableString changed from array to pointer to get around some slippery C++ semantics Wed Oct 15 12:11:49 1997 Steven Eker * variableTerm.hh (class VariableTerm): added decl for dynamicCast() (dynamicCast): added Tue Oct 14 11:15:46 1997 Steven Eker * variableTerm.hh (downCast): use VariableSymbol::dynamicCast() * variableSymbol.cc (makeTerm): ErrorCheck() changed to Assert() * variableSymbol.hh (getSort): added * variableSymbol.cc (computeBaseSort): use getSort(); * variableSymbol.hh (class VariableSymbol): added decls for getSort() and dynamicCast() (class VariableSymbol): added variableString static data member (dynamicCast): added Fri Oct 10 17:52:59 1997 Steven Eker * variableLhsAutomaton.cc (dump): VariableIndex -> VariableInfo, index2Symbol() -> index2Variable() * variableLhsAutomaton.hh (class VariableLhsAutomaton): VariableIndex -> VariableInfo ===================================Engine30================================================== Tue Oct 7 15:47:52 1997 Steven Eker * variableSymbol.cc (makeDagNode): added * variableSymbol.hh (class VariableSymbol): added decl for makeDagNode() Fri Oct 3 18:58:01 1997 Steven Eker * variableTerm.cc (compileRhs): DataSet -> TermSet (dagify2): DataSet -> TermSet * variableTerm.hh (class VariableTerm): DataSet -> TermSet ===================================Engine29================================================== Thu Oct 2 18:31:02 1997 Steven Eker * variableTerm.hh (class VariableTerm): updated compileRhs() decl * variableTerm.cc (compileRhs): adapted to DataSet& compiled Tue Sep 30 12:42:45 1997 Steven Eker * variableTerm.hh (class VariableTerm): dagify() decl becomes dagify2() * variableTerm.cc (normalize): set hash value (dagify2): adapted from dagify() Thu Sep 25 16:32:49 1997 Steven Eker * variableTerm.cc (lookupSort): use getOpDeclarations() * variableSymbol.cc (computeBaseSort): use getOpDeclarations() ===================================Engine28================================================== Wed Jul 23 11:36:19 1997 Steven Eker * variableTerm.cc (normalize): added full flag * variableTerm.hh (class VariableTerm): added full flag to normalize() Mon Jul 21 19:17:26 1997 Steven Eker * variableDagNode.cc (normalizeEagerUptoReduced2): deleted * variableDagNode.hh (class VariableDagNode): deleted normalizeEagerUptoReduced2() decl ===================================Engine26b================================================== Fri Jul 18 15:55:29 1997 Steven Eker * variableDagNode.cc (normalizeEagerUpToReduced2): added * variableDagNode.hh (class VariableDagNode): added decl for normalizeEagerUpToReduced2() Tue Jul 15 15:26:54 1997 Steven Eker * variableSymbol.cc (VariableSymbol): pass inert = true to Symbol() ===================================Engine26================================================== Mon Jun 30 11:09:58 1997 Steven Eker * variableTerm.cc (markEagerArguments): handle case where varIndex is UNDEFINED (VariableTerm): initialize varIndex = modifiedVarIndex = UNDEFINED Fri Jun 27 16:24:21 1997 Steven Eker * variableDagNode.hh (class VariableDagNode): copyEagerUptoReduced2() and clearCopyPointers2() made private Wed Jun 25 14:32:29 1997 Steven Eker * variableSymbol.cc (acceptSortConstraint): deleted (acceptEquation): deleted (acceptRule): deleted * variableSymbol.hh (class VariableSymbol): deleted acceptSortConstraint(), acceptEquation() and acceptRule() decls Tue Jun 24 11:04:05 1997 Steven Eker * variableSymbol.cc (eqRewrite): now do right thing (computeTrueSort): now do right thing (computeBaseSort): now do right thing * variableTerm.cc (dagify): now make VaraibleDagNode s * variableDagNode.cc: created * variableDagNode.hh: created * variableSymbol.cc (makeTerm): use VariableTerm rather than Variable * variableTerm.cc: created from old variable.cc * variableTerm.hh: created from old variable.hh * variable.hh: created to provide forward decls for variable classes maude-3.1/src/Variable/variableTerm.hh0000644000175200017520000000543513576050635014670 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for variable terms. // #ifndef _variableTerm_hh_ #define _variableTerm_hh_ #include "term.hh" #include "namedEntity.hh" #include "variableSymbol.hh" class VariableTerm : public Term, public NamedEntity { NO_COPYING(VariableTerm); public: VariableTerm(VariableSymbol* symbol, int name); RawArgumentIterator* arguments(); void deepSelfDestruct(); Term* deepCopy2(SymbolMap* translator) const; Term* normalize(bool full, bool& changed); int compareArguments(const Term* other) const; int compareArguments(const DagNode* other) const; void findEagerVariables(bool atTop, NatSet& eagerVariables) const; void analyseConstraintPropagation(NatSet& boundUniquely) const; LhsAutomaton* compileLhs2(bool matchAtTop, const VariableInfo& variableInfo, NatSet& boundUniquely, bool& subproblemLikely); void markEagerArguments(int nrVariables, const NatSet& eagerVariables, Vector& problemVariables); DagNode* dagify2(); void findAvailableTerms(TermBag& availableTerms, bool eagerContext, bool atTop); int compileRhs2(RhsBuilder& rhsBuilder, VariableInfo& variableInfo, TermBag& availableTerms, bool eagerContext); // // Optional stuff that is easy to define for variable terms. // bool subsumes(const Term* other, bool sameVariableSet) const; int partialCompareUnstable(const Substitution& partialSubstitution, DagNode* other) const; // // Needed because we actually do the instantiation of variables. // Term* instantiate2(const Vector& varBindings, SymbolMap* translator); // // Functions particular to variable terms. // Sort* getSort() const; int getIndex() const; void setIndex(int indx); private: int index; }; inline Sort* VariableTerm::getSort() const { return safeCastNonNull(symbol())->getSort(); } inline int VariableTerm::getIndex() const { return index; } inline void VariableTerm::setIndex(int indx) { index = indx; } #endif maude-3.1/src/Variable/variableLhsAutomaton.cc0000644000175200017520000000435313576050735016364 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for VariableLhsAutomaton. // // utility stuff #include "macros.hh" #include "vector.hh" #include "indent.hh" // forward declarations #include "interface.hh" #include "core.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "lhsAutomaton.hh" // core class definitions #include "variableSymbol.hh" #include "variableInfo.hh" #include "substitution.hh" #include "variableLhsAutomaton.hh" VariableLhsAutomaton::VariableLhsAutomaton(int index, const Sort* sort, bool copyToAvoidOverwriting) : index(index), sort(sort), copyToAvoidOverwriting(copyToAvoidOverwriting) { } bool VariableLhsAutomaton::match(DagNode* subject, Substitution& solution, Subproblem*& returnedSubproblem, ExtensionInfo* extensionInfo) { return subject->matchVariable(index, sort, copyToAvoidOverwriting, solution, returnedSubproblem, extensionInfo); } #ifdef DUMP void VariableLhsAutomaton::dump(ostream& s, const VariableInfo& variableInfo, int indentLevel) { s << Indent(indentLevel) << "Begin{VariableLhsAutomaton}\n"; s << Indent(indentLevel + 1) << "index = " << index << " \"" << variableInfo.index2Variable(index) << "\"\tsort = " << sort << "\tcopyToAvoidOverwriting = " << copyToAvoidOverwriting << '\n'; s << Indent(indentLevel) << "End{VariableLhsAutomaton}\n"; } #endif maude-3.1/src/Variable/variableSymbol.cc0000644000175200017520000000746513576050735015222 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class VariableSymbol. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "term.hh" // core class definitions #include "sortBdds.hh" // variable class definitions #include "variableSymbol.hh" #include "variableTerm.hh" #include "variableDagNode.hh" VariableSymbol::VariableSymbol(int id) : Symbol(id, 0) { } Term* VariableSymbol::makeTerm(const Vector& args) { Assert(false, "makeTerm() not useable on variable symbol " << this); return 0; } DagNode* VariableSymbol::makeDagNode(const Vector& args) { Assert(false, "makeDagNode() not useable on variable symbol " << this); return 0; } bool VariableSymbol::eqRewrite(DagNode* subject, RewritingContext& context) { return applyReplace(subject, context); } void VariableSymbol::computeBaseSort(DagNode* subject) { subject->setSortIndex(getSort()->index()); } void VariableSymbol::normalizeAndComputeTrueSort(DagNode* subject, RewritingContext& context) { fastComputeTrueSort(subject, context); } Term* VariableSymbol::termify(DagNode* dagNode) { VariableDagNode* v = safeCastNonNull(dagNode); return new VariableTerm(this, v->id()); } // // Unification code. // void VariableSymbol::computeGeneralizedSort(const SortBdds& sortBdds, const Vector& realToBdd, DagNode* subject, Vector& generalizedSort) { int firstVariable = realToBdd[safeCastNonNull(subject)->getIndex()]; // first BDD variable for this variable int nrVariables = sortBdds.getNrVariables(rangeComponent()->getIndexWithinModule()); // number of BDD variables depends on sort sortBdds.makeVariableVector(firstVariable, nrVariables, generalizedSort); } void VariableSymbol::computeGeneralizedSort2(const SortBdds& sortBdds, const Vector& realToBdd, DagNode* subject, Vector& outputBdds) { sortBdds.appendVariableVector(realToBdd[safeCastNonNull(subject)->getIndex()], // first BDD variable sortBdds.getNrVariables(rangeComponent()->getIndexWithinModule()), // # BDD variables outputBdds); } bool VariableSymbol::isStable() const { return false; } // // Hash cons code. // DagNode* VariableSymbol::makeCanonical(DagNode* original, HashConsSet* /* hcs */) { // // No arguments that could be non-canonical so we can make the original // instance into the canonical instance. // return original; } DagNode* VariableSymbol::makeCanonicalCopy(DagNode* original, HashConsSet* /* hcs */) { // // We have a unreduced node - copy forced - in principle variable could rewrite to something else! // VariableDagNode* v = safeCastNonNull(original); VariableDagNode* n = new VariableDagNode(this, v->id(), v->getIndex()); n->copySetRewritingFlags(original); n->setSortIndex(original->getSortIndex()); return n; } maude-3.1/src/Variable/variableDagNode.hh0000644000175200017520000000567413717132231015255 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for DAG nodes that are variables. // #ifndef _variableDagNode_hh_ #define _variableDagNode_hh_ #include "dagNode.hh" #include "namedEntity.hh" class VariableDagNode : public DagNode, public NamedEntity { NO_COPYING(VariableDagNode); public: VariableDagNode(Symbol* symbol, int name, int index); RawDagArgumentIterator* arguments(); size_t getHashValue(); int compareArguments(const DagNode* other) const; void overwriteWithClone(DagNode* old); DagNode* makeClone(); DagNode* copyWithReplacement(int argIndex, DagNode* replacement); DagNode* copyWithReplacement(Vector& redexStack, int first, int last); // // Unification member functions. // ReturnResult computeBaseSortForGroundSubterms(bool warnAboutUnimplemented); /* bool computeSolvedForm2(DagNode* rhs, Substitution& solution, Subproblem*& returnedSubproblem, ExtensionInfo* extensionInfo); */ bool computeSolvedForm2(DagNode* rhs, UnificationContext& solution, PendingUnificationStack& pending); void insertVariables2(NatSet& occurs); DagNode* instantiate2(const Substitution& substitution); // // Narrowing member functions. // bool indexVariables2(NarrowingVariableInfo& indicies, int baseIndex); DagNode* instantiateWithCopies2(const Substitution& substitution, const Vector& eagerCopies); // // Function needed for variant matching. // void indexVariables(VariableInfo& indicies); // // Functions specific to VariableDagNode. // int getIndex() const; VariableDagNode* lastVariableInChain(Substitution& solution); private: DagNode* markArguments(); DagNode* copyEagerUptoReduced2(); DagNode* copyAll2(); void clearCopyPointers2(); bool safeVirtualReplacement(VariableDagNode* oldVar, VariableDagNode* newVar, UnificationContext& solution, PendingUnificationStack& pending); int index; }; inline VariableDagNode::VariableDagNode(Symbol* symbol, int name, int index) : DagNode(symbol), NamedEntity(name), index(index) { } inline int VariableDagNode::getIndex() const { return index; } #endif maude-3.1/src/Variable/Makefile.am0000644000175200017520000000064707676173252013773 00000000000000noinst_LIBRARIES = libvariable.a libvariable_a_CPPFLAGS = \ -I$(top_srcdir)/src/Utility \ -I$(top_srcdir)/src/Interface \ -I$(top_srcdir)/src/Core \ -I$(top_srcdir)/src/FullCompiler libvariable_a_SOURCES = \ variableSymbol.cc \ variableTerm.cc \ variableDagNode.cc \ variableLhsAutomaton.cc noinst_HEADERS = \ variable.hh \ variableDagNode.hh \ variableLhsAutomaton.hh \ variableSymbol.hh \ variableTerm.hh maude-3.1/src/Variable/variable.hh0000644000175200017520000000202413576050635014027 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Forward declarations for core classes // #ifndef _variable_hh_ #define _variable_hh_ class VariableSymbol; class VariableTerm; class VariableDagNode; class VariableLhsAutomaton; #endif maude-3.1/src/Variable/variableLhsAutomaton.hh0000644000175200017520000000300413576050635016365 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for left hand side automata when lhs is a bare variable. // #ifndef _variableLhsAutomaton_hh_ #define _variableLhsAutomaton_hh_ #include "lhsAutomaton.hh" class VariableLhsAutomaton : public LhsAutomaton { NO_COPYING(VariableLhsAutomaton); public: VariableLhsAutomaton(int index, const Sort* sort, bool copyToAvoidOverwriting); bool match(DagNode* subject, Substitution& solution, Subproblem*& returnedSubproblem, ExtensionInfo* extensionInfo); #ifdef DUMP void dump(ostream& s, const VariableInfo& variableInfo, int indentLevel); #endif private: const int index; const Sort* const sort; const bool copyToAvoidOverwriting; }; #endif maude-3.1/src/Variable/variableDagNode.cc0000755000175200017520000001761113735200537015245 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2014 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class VariableDagNode // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "variable.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" // core class definitions #include "substitution.hh" #include "variableInfo.hh" #include "narrowingVariableInfo.hh" #include "unificationContext.hh" // variable class definitions #include "variableSymbol.hh" #include "variableDagNode.hh" RawDagArgumentIterator* VariableDagNode::arguments() { return 0; } size_t VariableDagNode::getHashValue() { return hash(symbol()->getHashValue(), id()); } int VariableDagNode::compareArguments(const DagNode* other) const { return id() - safeCastNonNull(other)->id(); } DagNode* VariableDagNode::markArguments() { return 0; } DagNode* VariableDagNode::copyEagerUptoReduced2() { return new VariableDagNode(symbol(), id(), index); } DagNode* VariableDagNode::copyAll2() { return new VariableDagNode(symbol(), id(), index); } void VariableDagNode::clearCopyPointers2() { } void VariableDagNode::overwriteWithClone(DagNode* old) { VariableDagNode* d = new(old) VariableDagNode(symbol(), id(), index); d->copySetRewritingFlags(this); d->setSortIndex(getSortIndex()); } DagNode* VariableDagNode::makeClone() { VariableDagNode* d = new VariableDagNode(symbol(), id(), index); d->copySetRewritingFlags(this); d->setSortIndex(getSortIndex()); return d; } DagNode* VariableDagNode::copyWithReplacement(int /* argIndex */, DagNode* /* replacement */) { CantHappen("should never be called"); return 0; } DagNode* VariableDagNode::copyWithReplacement(Vector& /* redexStack */, int /* first */, int /* last */) { CantHappen("should never be called"); return 0; } // // Unification code. // DagNode::ReturnResult VariableDagNode::computeBaseSortForGroundSubterms(bool /* warnAboutUnimplemented */) { return NONGROUND; } bool VariableDagNode::computeSolvedForm2(DagNode* rhs, UnificationContext& solution, PendingUnificationStack& pending) { DebugEnter((DagNode*) this << " vs " << rhs); // // In this version we only handle variable vs variable unfication and // punt on everything else. // if (VariableDagNode* v = dynamic_cast(rhs)) { VariableDagNode* lv = lastVariableInChain(solution); VariableDagNode* rv = v->lastVariableInChain(solution); if (lv->equal(rv)) return true; // // We are preferentially going to bind lv |-> rv // In order to maximally constrain the seach we want rv to // have the lowest sort if they are comparable and unequal. // We do this by ensuring rv has the largest sort index. // if (safeCast(VariableSymbol*, lv->symbol())->getSort()->index() > safeCast(VariableSymbol*, rv->symbol())->getSort()->index()) swap(lv, rv); // // Need to replace one variable by the other throughout the problem. We do this // virtually and must check for implicit occurs check problems. // // Might need to check we never map an original variable to a fresh variable. // DagNode* lt = solution.value(lv->index); if (lt == 0) return safeVirtualReplacement(lv, rv, solution, pending); DagNode* rt = solution.value(rv->index); if (rt == 0) return safeVirtualReplacement(rv, lv, solution, pending); // // Both variables are bound. // return safeVirtualReplacement(lv, rv, solution, pending) && lt->computeSolvedForm(rt, solution, pending); } // // Calling computeSolvedForm() would just kick the problem back to us if // rhs is ground, since this is a variable, and this would cause an infinite recursion. // return rhs->computeSolvedForm2(this, solution, pending); } bool VariableDagNode::safeVirtualReplacement(VariableDagNode* oldVar, VariableDagNode* newVar, UnificationContext& solution, PendingUnificationStack& pending) { // // We want to replace all occurrences of oldVar by newVar. We assume oldVar is the last // variable in its chain and is unbound (or has a binding which can be ignored because the // caller is dealing with it) and newVar is the last variable in its chain. // We do this by binding oldVar to newVar and since whenever we access a variable, // we look for the last variable in the chain, accessing oldVar will give us newVar. // // There is however a problem. If newVar is bound and its binding contains oldVar // (or a variable equivalent to it) we generate an implicit occur check issue. We // could un-solve and re-solve its binding, but if there is no occur check issue, // re-solving could give us a similar variable replacement problem, also resulting in // non-termination. // // So we check the binding of newVar to see if it contains oldVar, and only then // do we unsolve it. // solution.unificationBind(oldVar, newVar); DagNode* newBinding = solution.value(newVar->index); if (newBinding == 0 || newBinding->isGround()) return true; NatSet occurs; newBinding->insertVariables(occurs); for (int index : occurs) { if (VariableDagNode* v = dynamic_cast(solution.value(index))) { if (v->lastVariableInChain(solution)->equal(newVar)) { // // We have an occur check issue. We unsolve newVar |-> newBinding and re-solve it. // solution.bind(newVar->index, 0); return newBinding->computeSolvedForm2(newVar, solution, pending); } } } // // No implicit occurs check issue found. Leave the binding of newVar as it was. // return true; } void VariableDagNode::insertVariables2(NatSet& occurs) { occurs.insert(index); } DagNode* VariableDagNode::instantiate2(const Substitution& substitution) { return substitution.value(index); } VariableDagNode* VariableDagNode::lastVariableInChain(Substitution& solution) { // // If a variable has been bound to anther variable, it is notionally // replaced by that variable thoughout the problem, and in particular // we need chase the replacement chain and find out what variable is // notionally in its place. // VariableDagNode* v = this; for (;;) { DagNode* d = solution.value(v->index); if (d == 0) break; VariableDagNode* n = dynamic_cast(d); if (n == 0) break; Assert(v != n, "variable " << (DagNode*) v << " is bound to itself in a chain starting at " << (DagNode*) this); v = n; } return v; } // // Narrowing code. // bool VariableDagNode::indexVariables2(NarrowingVariableInfo& indices, int baseIndex) { index = baseIndex + indices.variable2Index(this); return false; } DagNode* VariableDagNode::instantiateWithCopies2(const Substitution& /* substitution */, const Vector& eagerCopies) { // // We must be in an eager position so use the eager copy. // return eagerCopies[index]; } // // Variant match code. // void VariableDagNode::indexVariables(VariableInfo& indicies) { index = indicies.variable2Index(this); } maude-3.1/src/Variable/variableTerm.cc0000644000175200017520000001076213576050735014656 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class VariableTerm. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "term.hh" #include "lhsAutomaton.hh" #include "rhsAutomaton.hh" // core class definitions #include "variableInfo.hh" #include "symbolMap.hh" #include "termBag.hh" #include "substitution.hh" // variable class definitions #include "variableSymbol.hh" #include "variableTerm.hh" #include "variableDagNode.hh" #include "variableLhsAutomaton.hh" VariableTerm::VariableTerm(VariableSymbol* symbol, int name) : Term(symbol), NamedEntity(name) { index = UNDEFINED; } RawArgumentIterator* VariableTerm::arguments() { return 0; } void VariableTerm::deepSelfDestruct() { delete this; } Term* VariableTerm::deepCopy2(SymbolMap* translator) const { VariableSymbol* vs = safeCastNonNull((translator == 0 ? symbol() : translator->translate(symbol()))); return new VariableTerm(vs, id()); } Term* VariableTerm::instantiate2(const Vector& varBindings, SymbolMap* translator) { return varBindings[index]->deepCopy(translator); } Term* VariableTerm::normalize(bool /* full */, bool& changed) { changed = false; setHashValue(hash(symbol()->getHashValue(), id())); return this; } int VariableTerm::compareArguments(const Term* other) const { return id() - safeCastNonNull(other)->id(); } int VariableTerm::compareArguments(const DagNode* other) const { return id() - safeCastNonNull(other)->id(); } void VariableTerm::findEagerVariables(bool /* atTop */, NatSet& eagerVariables) const { eagerVariables.insert(index); } void VariableTerm::analyseConstraintPropagation(NatSet& boundUniquely) const { boundUniquely.insert(index); } LhsAutomaton* VariableTerm::compileLhs2(bool matchAtTop, const VariableInfo& variableInfo, NatSet& boundUniquely, bool& subproblemLikely) { boundUniquely.insert(index); subproblemLikely = false; bool copyToAvoidOverwriting = matchAtTop /* && variableInfo.rhsVariables().contains(index) */; return new VariableLhsAutomaton(index, getSort(), copyToAvoidOverwriting); } void VariableTerm::markEagerArguments(int nrVariables, const NatSet& eagerVariables, Vector& problemVariables) { } DagNode* VariableTerm::dagify2() { return new VariableDagNode(symbol(), id(), index); } bool VariableTerm::subsumes(const Term* other, bool sameVariableSet) const { // // If "this" and "other" are using the same set of variables // then a variable can subsume itself. // if (sameVariableSet && symbol() == other->symbol() && id() == safeCastNonNull(other)->id()) return true; // // Otherwise a variable must be linear and have large enough // sort. // return !(occursInContext().contains(index)) && getComponent()->leq(other->getSortIndex(), getSortIndex()); } int VariableTerm::partialCompareUnstable(const Substitution& partialSubstitution, DagNode* other) const { DagNode* d = partialSubstitution.value(index); if (d == 0) return Term::UNKNOWN; int r = d->compare(other); if (r < 0) return LESS; if (r > 0) return GREATER; return EQUAL; } void VariableTerm::findAvailableTerms(TermBag& availableTerms, bool eagerContext, bool atTop) { if (!atTop) availableTerms.insertMatchedTerm(this, eagerContext); } int VariableTerm::compileRhs2(RhsBuilder& /* rhsBuilder */, VariableInfo& /* variableInfo */, TermBag& /* availableTerms */, bool /* eagerContext */) { CantHappen("should never be called"); return 0; } maude-3.1/src/Variable/variableSymbol.hh0000644000175200017520000000446213576050635015225 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for variable symbols. // #ifndef _variableSymbol_hh_ #define _variableSymbol_hh_ #include "symbol.hh" class VariableSymbol : public Symbol { NO_COPYING(VariableSymbol); public: VariableSymbol(int id); Term* makeTerm(const Vector& args); DagNode* makeDagNode(const Vector& args); bool eqRewrite(DagNode* subject, RewritingContext& context); void computeBaseSort(DagNode* subject); void normalizeAndComputeTrueSort(DagNode* subject, RewritingContext& context); Term* termify(DagNode* dagNode); // // Unification stuff. // void computeGeneralizedSort(const SortBdds& sortBdds, const Vector& realToBdd, DagNode* subject, Vector& generalizedSort); void computeGeneralizedSort2(const SortBdds& sortBdds, const Vector& realToBdd, DagNode* subject, Vector& outputBdds); bool isStable() const; // // Hash cons stuff. // DagNode* makeCanonical(DagNode* original, HashConsSet* /* hcs */); DagNode* makeCanonicalCopy(DagNode* original, HashConsSet* /* hcs */); // // VariableSymbol specific functions. // Sort* getSort(); }; inline Sort* VariableSymbol::getSort() { // // Temporary hack until sorts mechanism revised. // const Vector& s = getOpDeclarations(); Assert(s.length() == 1, "s.length() != 1"); const Vector& v = s[0].getDomainAndRange(); Assert(v.length() == 1, "v.length() != 1"); return v[0]; } #endif maude-3.1/src/Variable/Makefile.in0000644000175200017520000006463713741175703014006 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/Variable ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_have_poll.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libvariable_a_AR = $(AR) $(ARFLAGS) libvariable_a_LIBADD = am_libvariable_a_OBJECTS = libvariable_a-variableSymbol.$(OBJEXT) \ libvariable_a-variableTerm.$(OBJEXT) \ libvariable_a-variableDagNode.$(OBJEXT) \ libvariable_a-variableLhsAutomaton.$(OBJEXT) libvariable_a_OBJECTS = $(am_libvariable_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/libvariable_a-variableDagNode.Po \ ./$(DEPDIR)/libvariable_a-variableLhsAutomaton.Po \ ./$(DEPDIR)/libvariable_a-variableSymbol.Po \ ./$(DEPDIR)/libvariable_a-variableTerm.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(libvariable_a_SOURCES) DIST_SOURCES = $(libvariable_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs ChangeLog DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ BUDDY_LIB = @BUDDY_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CVC4_LIB = @CVC4_LIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FLEX = @FLEX@ GCC_LIBS = @GCC_LIBS@ GMP_LIBS = @GMP_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSIGSEGV_LIB = @LIBSIGSEGV_LIB@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TECLA_LIBS = @TECLA_LIBS@ VERSION = @VERSION@ YICES2_LIB = @YICES2_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libvariable.a libvariable_a_CPPFLAGS = \ -I$(top_srcdir)/src/Utility \ -I$(top_srcdir)/src/Interface \ -I$(top_srcdir)/src/Core \ -I$(top_srcdir)/src/FullCompiler libvariable_a_SOURCES = \ variableSymbol.cc \ variableTerm.cc \ variableDagNode.cc \ variableLhsAutomaton.cc noinst_HEADERS = \ variable.hh \ variableDagNode.hh \ variableLhsAutomaton.hh \ variableSymbol.hh \ variableTerm.hh all: all-am .SUFFIXES: .SUFFIXES: .cc .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Variable/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Variable/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libvariable.a: $(libvariable_a_OBJECTS) $(libvariable_a_DEPENDENCIES) $(EXTRA_libvariable_a_DEPENDENCIES) $(AM_V_at)-rm -f libvariable.a $(AM_V_AR)$(libvariable_a_AR) libvariable.a $(libvariable_a_OBJECTS) $(libvariable_a_LIBADD) $(AM_V_at)$(RANLIB) libvariable.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libvariable_a-variableDagNode.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libvariable_a-variableLhsAutomaton.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libvariable_a-variableSymbol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libvariable_a-variableTerm.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` libvariable_a-variableSymbol.o: variableSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libvariable_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libvariable_a-variableSymbol.o -MD -MP -MF $(DEPDIR)/libvariable_a-variableSymbol.Tpo -c -o libvariable_a-variableSymbol.o `test -f 'variableSymbol.cc' || echo '$(srcdir)/'`variableSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libvariable_a-variableSymbol.Tpo $(DEPDIR)/libvariable_a-variableSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='variableSymbol.cc' object='libvariable_a-variableSymbol.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libvariable_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libvariable_a-variableSymbol.o `test -f 'variableSymbol.cc' || echo '$(srcdir)/'`variableSymbol.cc libvariable_a-variableSymbol.obj: variableSymbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libvariable_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libvariable_a-variableSymbol.obj -MD -MP -MF $(DEPDIR)/libvariable_a-variableSymbol.Tpo -c -o libvariable_a-variableSymbol.obj `if test -f 'variableSymbol.cc'; then $(CYGPATH_W) 'variableSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/variableSymbol.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libvariable_a-variableSymbol.Tpo $(DEPDIR)/libvariable_a-variableSymbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='variableSymbol.cc' object='libvariable_a-variableSymbol.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libvariable_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libvariable_a-variableSymbol.obj `if test -f 'variableSymbol.cc'; then $(CYGPATH_W) 'variableSymbol.cc'; else $(CYGPATH_W) '$(srcdir)/variableSymbol.cc'; fi` libvariable_a-variableTerm.o: variableTerm.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libvariable_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libvariable_a-variableTerm.o -MD -MP -MF $(DEPDIR)/libvariable_a-variableTerm.Tpo -c -o libvariable_a-variableTerm.o `test -f 'variableTerm.cc' || echo '$(srcdir)/'`variableTerm.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libvariable_a-variableTerm.Tpo $(DEPDIR)/libvariable_a-variableTerm.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='variableTerm.cc' object='libvariable_a-variableTerm.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libvariable_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libvariable_a-variableTerm.o `test -f 'variableTerm.cc' || echo '$(srcdir)/'`variableTerm.cc libvariable_a-variableTerm.obj: variableTerm.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libvariable_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libvariable_a-variableTerm.obj -MD -MP -MF $(DEPDIR)/libvariable_a-variableTerm.Tpo -c -o libvariable_a-variableTerm.obj `if test -f 'variableTerm.cc'; then $(CYGPATH_W) 'variableTerm.cc'; else $(CYGPATH_W) '$(srcdir)/variableTerm.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libvariable_a-variableTerm.Tpo $(DEPDIR)/libvariable_a-variableTerm.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='variableTerm.cc' object='libvariable_a-variableTerm.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libvariable_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libvariable_a-variableTerm.obj `if test -f 'variableTerm.cc'; then $(CYGPATH_W) 'variableTerm.cc'; else $(CYGPATH_W) '$(srcdir)/variableTerm.cc'; fi` libvariable_a-variableDagNode.o: variableDagNode.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libvariable_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libvariable_a-variableDagNode.o -MD -MP -MF $(DEPDIR)/libvariable_a-variableDagNode.Tpo -c -o libvariable_a-variableDagNode.o `test -f 'variableDagNode.cc' || echo '$(srcdir)/'`variableDagNode.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libvariable_a-variableDagNode.Tpo $(DEPDIR)/libvariable_a-variableDagNode.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='variableDagNode.cc' object='libvariable_a-variableDagNode.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libvariable_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libvariable_a-variableDagNode.o `test -f 'variableDagNode.cc' || echo '$(srcdir)/'`variableDagNode.cc libvariable_a-variableDagNode.obj: variableDagNode.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libvariable_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libvariable_a-variableDagNode.obj -MD -MP -MF $(DEPDIR)/libvariable_a-variableDagNode.Tpo -c -o libvariable_a-variableDagNode.obj `if test -f 'variableDagNode.cc'; then $(CYGPATH_W) 'variableDagNode.cc'; else $(CYGPATH_W) '$(srcdir)/variableDagNode.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libvariable_a-variableDagNode.Tpo $(DEPDIR)/libvariable_a-variableDagNode.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='variableDagNode.cc' object='libvariable_a-variableDagNode.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libvariable_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libvariable_a-variableDagNode.obj `if test -f 'variableDagNode.cc'; then $(CYGPATH_W) 'variableDagNode.cc'; else $(CYGPATH_W) '$(srcdir)/variableDagNode.cc'; fi` libvariable_a-variableLhsAutomaton.o: variableLhsAutomaton.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libvariable_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libvariable_a-variableLhsAutomaton.o -MD -MP -MF $(DEPDIR)/libvariable_a-variableLhsAutomaton.Tpo -c -o libvariable_a-variableLhsAutomaton.o `test -f 'variableLhsAutomaton.cc' || echo '$(srcdir)/'`variableLhsAutomaton.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libvariable_a-variableLhsAutomaton.Tpo $(DEPDIR)/libvariable_a-variableLhsAutomaton.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='variableLhsAutomaton.cc' object='libvariable_a-variableLhsAutomaton.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libvariable_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libvariable_a-variableLhsAutomaton.o `test -f 'variableLhsAutomaton.cc' || echo '$(srcdir)/'`variableLhsAutomaton.cc libvariable_a-variableLhsAutomaton.obj: variableLhsAutomaton.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libvariable_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libvariable_a-variableLhsAutomaton.obj -MD -MP -MF $(DEPDIR)/libvariable_a-variableLhsAutomaton.Tpo -c -o libvariable_a-variableLhsAutomaton.obj `if test -f 'variableLhsAutomaton.cc'; then $(CYGPATH_W) 'variableLhsAutomaton.cc'; else $(CYGPATH_W) '$(srcdir)/variableLhsAutomaton.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libvariable_a-variableLhsAutomaton.Tpo $(DEPDIR)/libvariable_a-variableLhsAutomaton.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='variableLhsAutomaton.cc' object='libvariable_a-variableLhsAutomaton.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libvariable_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libvariable_a-variableLhsAutomaton.obj `if test -f 'variableLhsAutomaton.cc'; then $(CYGPATH_W) 'variableLhsAutomaton.cc'; else $(CYGPATH_W) '$(srcdir)/variableLhsAutomaton.cc'; fi` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/libvariable_a-variableDagNode.Po -rm -f ./$(DEPDIR)/libvariable_a-variableLhsAutomaton.Po -rm -f ./$(DEPDIR)/libvariable_a-variableSymbol.Po -rm -f ./$(DEPDIR)/libvariable_a-variableTerm.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/libvariable_a-variableDagNode.Po -rm -f ./$(DEPDIR)/libvariable_a-variableLhsAutomaton.Po -rm -f ./$(DEPDIR)/libvariable_a-variableSymbol.Po -rm -f ./$(DEPDIR)/libvariable_a-variableTerm.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-noinstLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: maude-3.1/src/AU_Persistent/0000755000175200017520000000000013741222370012772 500000000000000maude-3.1/src/AU_Persistent/ChangeLog0000755000175200017520000001060713506556157014507 000000000000002019-07-01 Steven Eker * AU_StackNode.hh: rewritten using new MemoryCell definition ===================================Maude123================================== 2013-09-26 Steven Eker * AU_StackNode.hh (new): set half word to SORT_UNKNOWN rather than relying on allocateMemoryCell() (new): call initFlags() (new): clean up; update comments; initFlags() becomes clearAllFlags() 2004-06-08 Steven Eker * AU_StackSort.cc (revComputeBaseSort): fixed nasty bug where we were failing to take account of a sort calculated for part of a list and therefore ignored that part of the list for sort calculation purposes (fwdComputeBaseSort): fixed symmetric bug ===================================Maude84c================================== 2003-04-23 Steven Eker * AU_Deque.hh (copyFromArgVec): make into ctor 2003-04-22 Steven Eker * AU_StackNode.cc (mark): fixed nasty bug where we were not marking ourself (checkIntegrity): fixed bug where we were alloing zero args in non-start node * AU_Deque.cc (computeBaseSort): use checkIntegrity() * AU_Deque.hh (class AU_Deque): added decl for checkIntegrity() * AU_Deque.cc (checkIntegrity): added * AU_StackNode.hh (class AU_StackNode): added decl for checkIntegrity() * AU_StackNode.cc (checkIntegrity): added 2003-04-21 Steven Eker * AU_Deque.hh (topRight): added (topLeft): added * AU_StackNode.hh (class AU_StackNode): updatede decl for split() * AU_StackNode.cc (split): switch method fo returning pointers * AU_StackNode.hh (class AU_StackNode): added decl for pop() * AU_StackNode.cc (pop): added * AU_Deque.hh (popRight): added (popLeft): added 2003-04-18 Steven Eker * AU_StackNode.cc (push): fixed nasty bug where we were forgetting to clear unused elements * AU_StackSort.cc (revComputeBaseSort): code cleaning (fwdComputeBaseSort): code cleaning 2003-04-17 Steven Eker * AU_StackSort.cc (fwdComputeBaseSort): fixed bug where we were starting at ELEMENTS_PER_NODE rather than ELEMENTS_PER_NODE - 1 (2 places) (revComputeBaseSort): fixed symmetric bug * AU_Deque.hh (pushRight): added argArray version (pushLeft): added argArray version * AU_StackNode.hh (class AU_StackNode): added decls for fwdJoin() and revJoin() * AU_StackArgVec.cc (fwdJoin): added (revJoin): added * AU_StackNode.hh (class AU_StackNode): updated decls for fwdMake() and revMake() (partialClone): added * AU_StackArgVec.cc (revMake): take AU_StackNode* arg (fwdMake): take AU_StackNode* arg 2003-04-16 Steven Eker * AU_Deque.hh (pushLeft): added DagNode* version (pushRight): added DagNode* version * AU_StackNode.cc (push): added * AU_StackNode.hh (class AU_StackNode): added decl for push() * AU_Deque.hh (pushLeft): added AU_Deque version (pushRight): added AU_Deque version * AU_StackNode.hh (class AU_StackNode): updated decl for prepend() * AU_StackNode.cc (prepend): rewritten to used explicit base pointer rather than this pointer; work correctly with null base pointer 2003-04-15 Steven Eker * AU_Deque.hh (class AU_Deque): updated decl for computeBaseSort() * AU_Deque.cc (computeBaseSort): made const * AU_StackArgVec.cc (fwdMake): fix bug where we were checking i > 0 rather than i >= 0 (2 places) (revMake): fix symmetric bug * AU_DequeIter.cc (reverseRight): fixed bug where we were incorrectly setting index 2003-04-14 Steven Eker * AU_Deque.hh (length): made const * AU_StackNode.hh (setSortIndex): added (getSortIndex): added * AU_StackSort.cc: created * AU_Deque.cc: created * AU_Deque.hh: created * AU_StackArgVec.cc: created * AU_DequeIter.cc (reverseRight): rewritten * AU_Persistent.hh: created 2003-04-11 Steven Eker * AU_DequeIter.hh: created * AU_DequeIter.cc: created * AU_StackNode.hh (class AU_StackNode): make class AU_DequeIter a friend * AU_Deque.hh: created * AU_StackNode.cc (mark): added * AU_StackNode.hh (new): added (getMemoryCell): added (2 versions) (setMarked): added (isMarked): added (class AU_StackNode): added decl for mark() * AU_StackNode.cc (revCopy): added (split): rewritten 2003-04-10 Steven Eker * AU_StackNode.hh: created * AU_StackNode.cc: created maude-3.1/src/AU_Persistent/AU_StackSort.cc0000644000175200017520000001046013576050735015536 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Sort computations on presistent stacks. // int AU_StackNode::fwdComputeBaseSort(Symbol* symbol) { AU_StackNode* p = this; AU_StackNode* n; int index = Sort::SORT_UNKNOWN; // // First we perform pointer reversal on all nodes except the first // that need their sort calculated. // for (AU_StackNode* i = p->next; i != 0 && (index = i->getSortIndex()) == Sort::SORT_UNKNOWN; i = n) { n = i->next; i->next = p; p = i; } // // Now we traverse the reversed linked list, filling in sort // information and restoring next pointers. // // p points to the last node that needs to have its sort calculated // and next pointer restored. n is the old next pointer value that // needs to be restored. // for (AU_StackNode* i = p; i != this; i = p) { { int index2 = i->args[ELEMENTS_PER_NODE - 1]->getSortIndex(); index = (index == Sort::SORT_UNKNOWN) ? index2 : symbol->traverse(symbol->traverse(0, index2), index); } for (int j = ELEMENTS_PER_NODE - 2; j >= 0; --j) { int index2 = i->args[j]->getSortIndex(); index = symbol->traverse(symbol->traverse(0, index2), index); } i->setSortIndex(index); p = i->next; i->next = n; n = i; } // // Compute sort for this node. // int index2 = args[ELEMENTS_PER_NODE - 1]->getSortIndex(); index = (index == Sort::SORT_UNKNOWN) ? index2 : symbol->traverse(symbol->traverse(0, index2), index); for (int j = ELEMENTS_PER_NODE - 2; j >= 0; --j) { DagNode* d = args[j]; if (d == 0) break; int index2 = d->getSortIndex(); index = symbol->traverse(symbol->traverse(0, index2), index); } setSortIndex(index); return index; } int AU_StackNode::revComputeBaseSort(Symbol* symbol) { // // This function is symmetric to the above - we just swap the args // to the sort calculation function. // AU_StackNode* p = this; AU_StackNode* n; int index = Sort::SORT_UNKNOWN; // // First we perform pointer reversal on all nodes except the first // that need their sort calculated. // for (AU_StackNode* i = p->next; i != 0 && (index = i->getSortIndex()) == Sort::SORT_UNKNOWN; i = n) { n = i->next; i->next = p; p = i; } // // Now we traverse the reversed linked list, filling in sort // information and restoring next pointers. // // p points to the last node that needs to have its sort calculated // and next pointer restored. n is the old next pointer value that // needs to be restored. // for (AU_StackNode* i = p; i != this; i = p) { { int index2 = i->args[ELEMENTS_PER_NODE - 1]->getSortIndex(); index = (index == Sort::SORT_UNKNOWN) ? index2 : symbol->traverse(symbol->traverse(0, index), index2); } for (int j = ELEMENTS_PER_NODE - 2; j >= 0; --j) { int index2 = i->args[j]->getSortIndex(); index = symbol->traverse(symbol->traverse(0, index), index2); } i->setSortIndex(index); p = i->next; i->next = n; n = i; } // // Compute sort for this node. // int index2 = args[ELEMENTS_PER_NODE - 1]->getSortIndex(); index = (index == Sort::SORT_UNKNOWN) ? index2 : symbol->traverse(symbol->traverse(0, index), index2); for (int j = ELEMENTS_PER_NODE - 2; j >= 0; --j) { DagNode* d = args[j]; if (d == 0) break; int index2 = d->getSortIndex(); index = symbol->traverse(symbol->traverse(0, index), index2); } setSortIndex(index); return index; } maude-3.1/src/AU_Persistent/AU_Deque.cc0000644000175200017520000000513013576050735014662 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class AU_Deque. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "AU_Persistent.hh" // interface class definitions #include "symbol.hh" // AU stack class definitions #include "AU_Deque.hh" int AU_Deque::computeBaseSort(Symbol* symbol) const { #ifdef CHECK_DEQUE checkIntegrity(); #endif //cerr << "AU_Deque::computeBaseSort()\n"; //cerr << "left = " << left << " right = " << right << endl; if (left != 0) { int index = left->getSortIndex(); //cerr << "left index = " << index << endl; if (index == Sort::SORT_UNKNOWN) index = left->fwdComputeBaseSort(symbol); //cerr << "left index now = " << index << endl; #ifdef CHECK_DEQUE checkIntegrity(); #endif if (right == 0) return index; int index2 = right->getSortIndex(); //cerr << "right index = " << index2 << endl; if (index2 == Sort::SORT_UNKNOWN) index2 = right->revComputeBaseSort(symbol); //cerr << "right index now = " << index2 << endl; #ifdef CHECK_DEQUE checkIntegrity(); #endif return symbol->traverse(symbol->traverse(0, index), index2); } Assert(right != 0, "no args"); int index = right->getSortIndex(); //cerr << "Right index = " << index << endl; if (index == Sort::SORT_UNKNOWN) index = right->revComputeBaseSort(symbol); //cerr << "Right index now = " << index << endl; #ifdef CHECK_DEQUE checkIntegrity(); #endif return index; } #ifdef CHECK_DEQUE void AU_Deque::checkIntegrity() const { int l = AU_StackNode::checkIntegrity(left); int r = AU_StackNode::checkIntegrity(right); Assert(nrElements == l + r, "bad deque size: " << nrElements << " != " << l << " + " << r); } #endif maude-3.1/src/AU_Persistent/AU_StackArgVec.cc0000644000175200017520000000727313576050735015766 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Stack <-> ArgVec conversion. // AU_StackNode* AU_StackNode::fwdMake(int nrElements, ArgVec::const_iterator s, AU_StackNode* d) { Assert(nrElements >= 1, "no elements"); for (;;) { AU_StackNode* t = d; d = new AU_StackNode; d->next = t; int i = ELEMENTS_PER_NODE - 1; if (nrElements < ELEMENTS_PER_NODE) { do { --s; d->args[i] = *s; --i; } while (--nrElements > 0); do d->args[i] = 0; while (--i >= 0); break; } else { do { --s; d->args[i] = *s; } while (--i >= 0); nrElements -= ELEMENTS_PER_NODE; if (nrElements == 0) break; } } return d; } AU_StackNode* AU_StackNode::fwdJoin(int nrElements, ArgVec::const_iterator s, AU_StackNode* d) { Assert(nrElements >= 1, "no elements"); if (d != 0) { int f = d->firstUsed(); if (f > 0) { d = d->partialClone(f); do { --s; d->args[--f] = *s; if (--nrElements == 0) { while (f > 0) d->args[--f] = 0; return d; } } while (f > 0); } } return fwdMake(nrElements, s, d); } AU_StackNode* AU_StackNode::revMake(int nrElements, ArgVec::const_iterator s, AU_StackNode* d) { Assert(nrElements >= 1, "no elements"); for (;;) { AU_StackNode* t = d; d = new AU_StackNode; d->next = t; int i = ELEMENTS_PER_NODE - 1; if (nrElements < ELEMENTS_PER_NODE) { do { d->args[i] = *s; ++s; --i; } while (--nrElements > 0); do d->args[i] = 0; while (--i >= 0); break; } else { do { d->args[i] = *s; ++s; } while (--i >= 0); nrElements -= ELEMENTS_PER_NODE; if (nrElements == 0) break; } } return d; } AU_StackNode* AU_StackNode::revJoin(int nrElements, ArgVec::const_iterator s, AU_StackNode* d) { Assert(nrElements >= 1, "no elements"); if (d != 0) { int f = d->firstUsed(); if (f > 0) { d = d->partialClone(f); do { d->args[--f] = *s; ++s; if (--nrElements == 0) { while (f > 0) d->args[--f] = 0; return d; } } while (f > 0); } } return revMake(nrElements, s, d); } void AU_StackNode::fwdCopy(ArgVec::iterator s) const { const AU_StackNode* d = this; int i = firstUsed(); for(;;) { *s = d->args[i]; if (++i == ELEMENTS_PER_NODE) { d = d->next; if (d == 0) break; i = 0; } ++s; } } void AU_StackNode::revCopy(ArgVec::iterator s) const { const AU_StackNode* d = this; int i = firstUsed(); for(;;) { --s; *s = d->args[i]; if (++i == ELEMENTS_PER_NODE) { d = d->next; if (d == 0) break; i = 0; } } } maude-3.1/src/AU_Persistent/Makefile.am0000644000175200017520000000071107711546404014754 00000000000000noinst_LIBRARIES = libAU_Persistent.a libAU_Persistent_a_CPPFLAGS = \ -I$(top_srcdir)/src/Utility \ -I$(top_srcdir)/src/Interface \ -I$(top_srcdir)/src/Core \ -I$(top_srcdir)/src/Variable \ -I$(top_srcdir)/src/FullCompiler libAU_Persistent_a_SOURCES = \ AU_StackNode.cc \ AU_Deque.cc \ AU_DequeIter.cc EXTRA_DIST = \ AU_StackArgVec.cc \ AU_StackSort.cc noinst_HEADERS = \ AU_Deque.hh \ AU_DequeIter.hh \ AU_Persistent.hh \ AU_StackNode.hh maude-3.1/src/AU_Persistent/AU_DequeIter.hh0000644000175200017520000000417613576050635015530 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for iterators for AU deques. // #ifndef _AU_DequeIter_hh_ #define _AU_DequeIter_hh_ #include "AU_Deque.hh" class AU_DequeIter { NO_COPYING(AU_DequeIter); public: AU_DequeIter(const AU_Deque& deque); bool valid() const; DagNode* getDagNode() const; void next(); private: void reverseRight(); int nrElementsRemaining; AU_StackNode* current; AU_StackNode* right; int index; Vector reversed; int revIndex; }; inline AU_DequeIter::AU_DequeIter(const AU_Deque& deque) { nrElementsRemaining = deque.nrElements; right = deque.right; current = deque.left; if (current == 0) reverseRight(); else { revIndex = -1; index = current->firstUsed(); } } inline bool AU_DequeIter::valid() const { return nrElementsRemaining > 0; } inline DagNode* AU_DequeIter::getDagNode() const { return current->args[index]; } inline void AU_DequeIter::next() { if (--nrElementsRemaining > 0) { if (revIndex < 0) { if (++index == AU_StackNode::ELEMENTS_PER_NODE) { current = current->next; if (current == 0) reverseRight(); else index = 0; } } else { if (--index < 0) { current = reversed[--revIndex]; index = AU_StackNode::ELEMENTS_PER_NODE - 1; } } } } #endif maude-3.1/src/AU_Persistent/AU_Persistent.hh0000644000175200017520000000204413576050635015771 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Forward declarations for peristent representation of // AU arguments lists. // #ifndef _AU_Persistent_hh_ #define _AU_Persistent_hh_ class AU_StackNode; class AU_Deque; class AU_DequeIter; #endif maude-3.1/src/AU_Persistent/AU_Deque.hh0000644000175200017520000001240313576050635014674 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for deques of arguments with constant time copy. // #ifndef _AU_Deque_hh_ #define _AU_Deque_hh_ #include "argVec.hh" #include "AU_StackNode.hh" class AU_Deque { public: AU_Deque(const ArgVec& source); int length() const; void copyToArgVec(ArgVec& dest) const; DagNode* topLeft(); void popLeft(); void pushLeft(DagNode* dagNode); void pushLeft(const AU_Deque& other); void pushLeft(const ArgVec& argArray); DagNode* topRight(); void popRight(); void pushRight(DagNode* dagNode); void pushRight(const AU_Deque& other); void pushRight(const ArgVec& argArray); int computeBaseSort(Symbol* symbol) const; void mark(); #ifdef CHECK_DEQUE void checkIntegrity() const; #endif private: int nrElements; AU_StackNode* left; AU_StackNode* right; friend class AU_DequeIter; }; inline AU_Deque::AU_Deque(const ArgVec& source) { nrElements = source.length(); Assert(nrElements >= 2, "need at least 2 arguments"); int nrLeftElements = nrElements / 2; ArgVec::const_iterator splitPoint = source.begin() + nrLeftElements; left = AU_StackNode::fwdMake(nrLeftElements, splitPoint); right = AU_StackNode::revMake(nrElements - nrLeftElements, splitPoint); #ifdef CHECK_DEQUE checkIntegrity(); #endif } inline int AU_Deque::length() const { return nrElements; } inline void AU_Deque::mark() { #ifdef CHECK_DEQUE checkIntegrity(); #endif if (left != 0) left->mark(); if (right != 0) right->mark(); } inline void AU_Deque::copyToArgVec(ArgVec& dest) const { #ifdef CHECK_DEQUE checkIntegrity(); #endif Assert(dest.length() == nrElements, "size mismatch()"); if (left != 0) left->fwdCopy(dest.begin()); if (right != 0) right->revCopy(dest.end()); } inline DagNode* AU_Deque::topLeft() { #ifdef CHECK_DEQUE checkIntegrity(); #endif Assert(nrElements > 0, "empty deque"); if (left == 0) { if (nrElements == 1) { left = right; right = 0; } else right = right->split(nrElements, left); #ifdef CHECK_DEQUE checkIntegrity(); #endif } return left->first(); } inline void AU_Deque::popLeft() { #ifdef CHECK_DEQUE checkIntegrity(); #endif Assert(left != 0, "no elements on left stack"); left = AU_StackNode::pop(left); --nrElements; #ifdef CHECK_DEQUE checkIntegrity(); #endif } inline void AU_Deque::pushLeft(DagNode* dagNode) { #ifdef CHECK_DEQUE checkIntegrity(); #endif left = AU_StackNode::push(left, dagNode); ++nrElements; #ifdef CHECK_DEQUE checkIntegrity(); #endif } inline void AU_Deque::pushLeft(const AU_Deque& other) { #ifdef CHECK_DEQUE checkIntegrity(); #endif left = AU_StackNode::prepend(left, other.nrElements, other.left, other.right); nrElements += other.nrElements; // other could be us! #ifdef CHECK_DEQUE checkIntegrity(); #endif } inline void AU_Deque::pushLeft(const ArgVec& argArray) { #ifdef CHECK_DEQUE checkIntegrity(); #endif int n = argArray.length(); left = AU_StackNode::fwdJoin(n, argArray.end(), left); nrElements += n; #ifdef CHECK_DEQUE checkIntegrity(); #endif } inline DagNode* AU_Deque::topRight() { #ifdef CHECK_DEQUE checkIntegrity(); #endif Assert(nrElements > 0, "empty deque"); if (right == 0) { if (nrElements == 1) { right = left; left = 0; } else left = left->split(nrElements, right); #ifdef CHECK_DEQUE checkIntegrity(); #endif } return right->first(); } inline void AU_Deque::popRight() { #ifdef CHECK_DEQUE checkIntegrity(); #endif Assert(right != 0, "no elements on right stack"); right = AU_StackNode::pop(right); --nrElements; #ifdef CHECK_DEQUE checkIntegrity(); #endif } inline void AU_Deque::pushRight(DagNode* dagNode) { #ifdef CHECK_DEQUE checkIntegrity(); #endif right = AU_StackNode::push(right, dagNode); ++nrElements; #ifdef CHECK_DEQUE checkIntegrity(); #endif } inline void AU_Deque::pushRight(const AU_Deque& other) { #ifdef CHECK_DEQUE checkIntegrity(); #endif right = AU_StackNode::prepend(right, other.nrElements, other.right, other.left); nrElements += other.nrElements; // other could be us! #ifdef CHECK_DEQUE checkIntegrity(); #endif } inline void AU_Deque::pushRight(const ArgVec& argArray) { #ifdef CHECK_DEQUE checkIntegrity(); #endif int n = argArray.length(); right = AU_StackNode::revJoin(n, argArray.begin(), right); nrElements += n; #ifdef CHECK_DEQUE checkIntegrity(); #endif } #endif maude-3.1/src/AU_Persistent/AU_StackNode.cc0000644000175200017520000001622613576050735015502 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class AU_StackNode. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "AU_Persistent.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" // AU stack class definitions #include "AU_StackNode.hh" // our stuff #include "AU_StackArgVec.cc" #include "AU_StackSort.cc" #ifdef CHECK_DEQUE int AU_StackNode::checkIntegrity(AU_StackNode* p) { int count = 0; if (p != 0) { int i = 0; while (p->args[i] == 0) { Assert(i < ELEMENTS_PER_NODE - 1, "empty AU_StackNode"); ++i; } while (p != 0) { while (i < ELEMENTS_PER_NODE) { DagNode* d = p->args[i]; Assert(d != 0, "zero DagNode*"); Symbol* s= d->symbol(); Assert(s != 0, "zero Symbol*"); int nrArgs = s->arity(); Assert(nrArgs >= 0 && nrArgs < 20, "bad symbol"); ++count; ++i; } i = 0; p = p->next; } } return count; } #endif void AU_StackNode::mark() { if (isMarked()) return; setMarked(); for (int i = firstUsed(); i < ELEMENTS_PER_NODE; ++i) args[i]->mark(); for (AU_StackNode* p = next; p != 0 && !(p->isMarked()); p = p->next) { p->setMarked(); for (int i = 0; i < ELEMENTS_PER_NODE; ++i) p->args[i]->mark(); } } local_inline AU_StackNode* AU_StackNode::fwdCopy(int nrElements, AU_StackNode* tail, AU_StackNode const*& sp, int& si) { Assert(nrElements >= 1, "no elements to copy"); // // Return a stack containing first nrElements elements from (sp, si) // with last next pointer pointing at tail. Return next // element via (sp, si) pair with sp = 0 if no next element. // int nrElementsInFirstNode = 1 + (nrElements - 1) % ELEMENTS_PER_NODE; nrElements -= nrElementsInFirstNode; AU_StackNode* start = new AU_StackNode; AU_StackNode* dp = start; int di = ELEMENTS_PER_NODE - nrElementsInFirstNode; for (int i = 0; i < di; i++) dp->args[i] = 0; for(;;) { dp->args[di] = sp->args[si]; if (++si == ELEMENTS_PER_NODE) { sp = sp->next; si = 0; } if (++di == ELEMENTS_PER_NODE) { if (nrElements == 0) break; nrElements -= ELEMENTS_PER_NODE; Assert(nrElements >= 0, "not enough elements for new stack node"); dp = dp->next = new AU_StackNode; di = 0; } } dp->next = tail; return start; } local_inline AU_StackNode* AU_StackNode::revCopy(const AU_StackNode* sp, int si) { Assert(sp != 0, "no elements to copy"); // // Return a stack containing all the elements from (sp, si) // in reverse order. // AU_StackNode* dp = 0; int di; goto start; for(;;) { if (--di < 0) { start: AU_StackNode* t = new AU_StackNode; t->next = dp; dp = t; di = ELEMENTS_PER_NODE - 1; } dp->args[di] = sp->args[si]; if (++si == ELEMENTS_PER_NODE) { sp = sp->next; if (sp == 0) break; si = 0; } } while (--di >= 0) dp->args[di] = 0; return dp; } AU_StackNode* AU_StackNode::split(int nrElements, AU_StackNode*& rev) const { Assert(nrElements >= 2, "need at least 2 elements to split"); const AU_StackNode* sp = this; int si = firstUsed(); AU_StackNode* fwd = fwdCopy(nrElements / 2, 0, sp, si); rev = revCopy(sp, si); return fwd; } AU_StackNode* AU_StackNode::pop(AU_StackNode* base) { int f = base->firstUsed(); if (f == ELEMENTS_PER_NODE - 1) return base->next; AU_StackNode* p = new AU_StackNode; int i = 0; do p->args[i] =0; while (++i <= f); do p->args[i] = base->args[i]; while (++i < ELEMENTS_PER_NODE); p->next = base->next; return p; } AU_StackNode* AU_StackNode::push(AU_StackNode* base, DagNode* dagNode) { AU_StackNode* dp = new AU_StackNode; dp->next = base; int di = ELEMENTS_PER_NODE - 1; if (base != 0) { int f = base->firstUsed(); if (f > 0) { do dp->args[di] = base->args[di]; while (--di >= f); dp->next = base->next; } } Assert(0 <= di && di < ELEMENTS_PER_NODE, "di bad " << di); dp->args[di] = dagNode; while (--di >= 0) dp->args[di] = 0; return dp; } AU_StackNode* AU_StackNode::prepend(AU_StackNode* base, int nrElements, const AU_StackNode* fwd, const AU_StackNode* rev) { Assert(nrElements >= 1, "no elements to prepend"); // // Create a first new stack node and copy in any leftover // element from our first node. // AU_StackNode* dp = new AU_StackNode; dp->next = base; int di = ELEMENTS_PER_NODE; if (base != 0) { int f = base->firstUsed(); if (f > 0) { do { --di; dp->args[di] = base->args[di]; } while (di > f); dp->next = base->next; } } Assert(1 <= di && di <= ELEMENTS_PER_NODE, "di bad " << di); // // There is room for di elements in *dp. // if (rev != 0) { // // Prepend contents of rev stack in reverse order. // --di; int ri = rev->firstUsed(); nrElements -= (ELEMENTS_PER_NODE - ri); for(;;) { dp->args[di] = rev->args[ri]; if (++ri == ELEMENTS_PER_NODE) { rev = rev->next; if (rev == 0) break; ri = 0; nrElements -= ELEMENTS_PER_NODE; } if (--di < 0) { AU_StackNode* t = dp; dp = new AU_StackNode; dp->next = t; di = ELEMENTS_PER_NODE - 1; } } Assert(0 <= di && di < ELEMENTS_PER_NODE, "di bad " << di); // // di slots left in *dp; if fwd stack empty, clear them // and return. // if (fwd == 0) { while (--di >= 0) dp->args[di] = 0; return dp; } } Assert(nrElements >= 1, "nrElements bad " << nrElements); Assert(0 <= di && di <= ELEMENTS_PER_NODE, "di bad " << di); // // We have nrElements elements on the fwd stack. We want to // put the first (nrElements - di) elements into new nodes and // the last di elements (0 padded if nrElements < di) into *dp. // AU_StackNode* start = dp; nrElements -= di; if (nrElements > 0) { int si = fwd->firstUsed(); start = fwdCopy(nrElements, dp, fwd, si); } // // Need to copy the last di elements from fwd to *dp; may include // some nulls if fwd didn't contain at least di elements. // for (int fi = ELEMENTS_PER_NODE - 1; di > 0; --fi) { --di; dp->args[di] = fwd->args[fi]; } return start; } maude-3.1/src/AU_Persistent/AU_DequeIter.cc0000644000175200017520000000275713576050735015522 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class AU_DequeIter. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "AU_Persistent.hh" // AU persistent class definitions #include "AU_DequeIter.hh" void AU_DequeIter::reverseRight() { revIndex = (nrElementsRemaining - 1) / AU_StackNode::ELEMENTS_PER_NODE; reversed.resize(revIndex); AU_StackNode* p = right; for (Vector::iterator b = reversed.begin();; ++b) { AU_StackNode* n = p->next; if (n == 0) break; *b = p; p = n; } current = p; index = AU_StackNode::ELEMENTS_PER_NODE - 1; } maude-3.1/src/AU_Persistent/AU_StackNode.hh0000755000175200017520000001114013576050635015504 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for nodes in persistent stacks. // #ifndef _AU_StackNode_hh_ #define _AU_StackNode_hh_ #include "argVec.hh" #include "symbol.hh" // HACK #include "dagNode.hh" // HACK #include "memoryCell.hh" class AU_StackNode { NO_COPYING(AU_StackNode); public: AU_StackNode(){} DagNode* first() const; int firstUsed() const; AU_StackNode* split(int nrElements, AU_StackNode*& rev) const; static AU_StackNode* pop(AU_StackNode* base); static AU_StackNode* push(AU_StackNode* base, DagNode* dagNode); static AU_StackNode* prepend(AU_StackNode* base, int nrElements, const AU_StackNode* fwd, const AU_StackNode* rev); void fwdCopy(ArgVec::iterator s) const; void revCopy(ArgVec::iterator s) const; static AU_StackNode* fwdJoin(int nrElements, ArgVec::const_iterator s, AU_StackNode* d); static AU_StackNode* revJoin(int nrElements, ArgVec::const_iterator s, AU_StackNode* d); static AU_StackNode* fwdMake(int nrElements, ArgVec::const_iterator s, AU_StackNode* d = 0); static AU_StackNode* revMake(int nrElements, ArgVec::const_iterator s, AU_StackNode* d = 0); int fwdComputeBaseSort(Symbol* symbol); int revComputeBaseSort(Symbol* symbol); int getSortIndex() const; void mark(); void* operator new(size_t size); #ifdef CHECK_DEQUE static int checkIntegrity(AU_StackNode* p); #endif private: enum Values { ELEMENTS_PER_NODE = 4 }; static AU_StackNode* fwdCopy(int nrElements, AU_StackNode* tail, AU_StackNode const*& sp, int& si); static AU_StackNode* revCopy(const AU_StackNode* sp, int si); void setMarked(); bool isMarked() const; void setSortIndex(int sortIndex); AU_StackNode* partialClone(int f); // // Get pointer to MemoryInfo object associated with us. // MemoryInfo* getMemoryInfo(); const MemoryInfo* getMemoryInfo() const; DagNode* args[ELEMENTS_PER_NODE]; AU_StackNode* next; friend class AU_DequeIter; }; inline void* AU_StackNode::operator new(size_t size) { Assert(size <= sizeof(MemoryCell), "stack node too big"); void* m = MemoryCell::allocateMemoryCell(); // // MemoryCell::allocateMemoryCell() no longer sets the half word to // Sort::SORT_UNKNOWN. This responsibility is shifted to us. // MemoryCell::getMemoryInfo(m)->setHalfWord(Sort::SORT_UNKNOWN); // // MemoryCell::allocateMemoryCell() no longer clears the memory // cell flags. This responsibility is shifted to us. // MemoryCell::getMemoryInfo(m)->clearAllFlags(); return m; } inline MemoryInfo* AU_StackNode::getMemoryInfo() { return MemoryCell::getMemoryInfo(this); } inline const MemoryInfo* AU_StackNode::getMemoryInfo() const { return MemoryCell::getMemoryInfo(this); } inline void AU_StackNode::setMarked() { getMemoryInfo()->setMarked(); } inline bool AU_StackNode::isMarked() const { return getMemoryInfo()->isMarked(); } inline void AU_StackNode::setSortIndex(int sortIndex) { getMemoryInfo()->setHalfWord(sortIndex); } inline int AU_StackNode::getSortIndex() const { return getMemoryInfo()->getHalfWord(); } inline DagNode* AU_StackNode::first() const { for (DagNode* const* p = args;; ++p) { Assert(p - args < ELEMENTS_PER_NODE, "didn't find non-null pointer"); DagNode* t = *p; if (t != 0) return t; } } inline int AU_StackNode::firstUsed() const { for (int i = 0;; ++i) { Assert(i < ELEMENTS_PER_NODE, "didn't find non-null pointer"); if (args[i] != 0) return i; } } inline AU_StackNode* AU_StackNode::partialClone(int f) { AU_StackNode* d = new AU_StackNode; do d->args[f] = args[f]; while (++f < ELEMENTS_PER_NODE); d->next = next; return d; } #endif maude-3.1/src/AU_Persistent/Makefile.in0000644000175200017520000005776713741175702015013 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/AU_Persistent ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_have_poll.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libAU_Persistent_a_AR = $(AR) $(ARFLAGS) libAU_Persistent_a_LIBADD = am_libAU_Persistent_a_OBJECTS = \ libAU_Persistent_a-AU_StackNode.$(OBJEXT) \ libAU_Persistent_a-AU_Deque.$(OBJEXT) \ libAU_Persistent_a-AU_DequeIter.$(OBJEXT) libAU_Persistent_a_OBJECTS = $(am_libAU_Persistent_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/libAU_Persistent_a-AU_Deque.Po \ ./$(DEPDIR)/libAU_Persistent_a-AU_DequeIter.Po \ ./$(DEPDIR)/libAU_Persistent_a-AU_StackNode.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(libAU_Persistent_a_SOURCES) DIST_SOURCES = $(libAU_Persistent_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs ChangeLog DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ BUDDY_LIB = @BUDDY_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CVC4_LIB = @CVC4_LIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FLEX = @FLEX@ GCC_LIBS = @GCC_LIBS@ GMP_LIBS = @GMP_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSIGSEGV_LIB = @LIBSIGSEGV_LIB@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TECLA_LIBS = @TECLA_LIBS@ VERSION = @VERSION@ YICES2_LIB = @YICES2_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libAU_Persistent.a libAU_Persistent_a_CPPFLAGS = \ -I$(top_srcdir)/src/Utility \ -I$(top_srcdir)/src/Interface \ -I$(top_srcdir)/src/Core \ -I$(top_srcdir)/src/Variable \ -I$(top_srcdir)/src/FullCompiler libAU_Persistent_a_SOURCES = \ AU_StackNode.cc \ AU_Deque.cc \ AU_DequeIter.cc EXTRA_DIST = \ AU_StackArgVec.cc \ AU_StackSort.cc noinst_HEADERS = \ AU_Deque.hh \ AU_DequeIter.hh \ AU_Persistent.hh \ AU_StackNode.hh all: all-am .SUFFIXES: .SUFFIXES: .cc .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/AU_Persistent/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/AU_Persistent/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libAU_Persistent.a: $(libAU_Persistent_a_OBJECTS) $(libAU_Persistent_a_DEPENDENCIES) $(EXTRA_libAU_Persistent_a_DEPENDENCIES) $(AM_V_at)-rm -f libAU_Persistent.a $(AM_V_AR)$(libAU_Persistent_a_AR) libAU_Persistent.a $(libAU_Persistent_a_OBJECTS) $(libAU_Persistent_a_LIBADD) $(AM_V_at)$(RANLIB) libAU_Persistent.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libAU_Persistent_a-AU_Deque.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libAU_Persistent_a-AU_DequeIter.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libAU_Persistent_a-AU_StackNode.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` libAU_Persistent_a-AU_StackNode.o: AU_StackNode.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Persistent_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Persistent_a-AU_StackNode.o -MD -MP -MF $(DEPDIR)/libAU_Persistent_a-AU_StackNode.Tpo -c -o libAU_Persistent_a-AU_StackNode.o `test -f 'AU_StackNode.cc' || echo '$(srcdir)/'`AU_StackNode.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Persistent_a-AU_StackNode.Tpo $(DEPDIR)/libAU_Persistent_a-AU_StackNode.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_StackNode.cc' object='libAU_Persistent_a-AU_StackNode.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Persistent_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Persistent_a-AU_StackNode.o `test -f 'AU_StackNode.cc' || echo '$(srcdir)/'`AU_StackNode.cc libAU_Persistent_a-AU_StackNode.obj: AU_StackNode.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Persistent_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Persistent_a-AU_StackNode.obj -MD -MP -MF $(DEPDIR)/libAU_Persistent_a-AU_StackNode.Tpo -c -o libAU_Persistent_a-AU_StackNode.obj `if test -f 'AU_StackNode.cc'; then $(CYGPATH_W) 'AU_StackNode.cc'; else $(CYGPATH_W) '$(srcdir)/AU_StackNode.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Persistent_a-AU_StackNode.Tpo $(DEPDIR)/libAU_Persistent_a-AU_StackNode.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_StackNode.cc' object='libAU_Persistent_a-AU_StackNode.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Persistent_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Persistent_a-AU_StackNode.obj `if test -f 'AU_StackNode.cc'; then $(CYGPATH_W) 'AU_StackNode.cc'; else $(CYGPATH_W) '$(srcdir)/AU_StackNode.cc'; fi` libAU_Persistent_a-AU_Deque.o: AU_Deque.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Persistent_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Persistent_a-AU_Deque.o -MD -MP -MF $(DEPDIR)/libAU_Persistent_a-AU_Deque.Tpo -c -o libAU_Persistent_a-AU_Deque.o `test -f 'AU_Deque.cc' || echo '$(srcdir)/'`AU_Deque.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Persistent_a-AU_Deque.Tpo $(DEPDIR)/libAU_Persistent_a-AU_Deque.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_Deque.cc' object='libAU_Persistent_a-AU_Deque.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Persistent_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Persistent_a-AU_Deque.o `test -f 'AU_Deque.cc' || echo '$(srcdir)/'`AU_Deque.cc libAU_Persistent_a-AU_Deque.obj: AU_Deque.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Persistent_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Persistent_a-AU_Deque.obj -MD -MP -MF $(DEPDIR)/libAU_Persistent_a-AU_Deque.Tpo -c -o libAU_Persistent_a-AU_Deque.obj `if test -f 'AU_Deque.cc'; then $(CYGPATH_W) 'AU_Deque.cc'; else $(CYGPATH_W) '$(srcdir)/AU_Deque.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Persistent_a-AU_Deque.Tpo $(DEPDIR)/libAU_Persistent_a-AU_Deque.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_Deque.cc' object='libAU_Persistent_a-AU_Deque.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Persistent_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Persistent_a-AU_Deque.obj `if test -f 'AU_Deque.cc'; then $(CYGPATH_W) 'AU_Deque.cc'; else $(CYGPATH_W) '$(srcdir)/AU_Deque.cc'; fi` libAU_Persistent_a-AU_DequeIter.o: AU_DequeIter.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Persistent_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Persistent_a-AU_DequeIter.o -MD -MP -MF $(DEPDIR)/libAU_Persistent_a-AU_DequeIter.Tpo -c -o libAU_Persistent_a-AU_DequeIter.o `test -f 'AU_DequeIter.cc' || echo '$(srcdir)/'`AU_DequeIter.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Persistent_a-AU_DequeIter.Tpo $(DEPDIR)/libAU_Persistent_a-AU_DequeIter.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_DequeIter.cc' object='libAU_Persistent_a-AU_DequeIter.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Persistent_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Persistent_a-AU_DequeIter.o `test -f 'AU_DequeIter.cc' || echo '$(srcdir)/'`AU_DequeIter.cc libAU_Persistent_a-AU_DequeIter.obj: AU_DequeIter.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Persistent_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libAU_Persistent_a-AU_DequeIter.obj -MD -MP -MF $(DEPDIR)/libAU_Persistent_a-AU_DequeIter.Tpo -c -o libAU_Persistent_a-AU_DequeIter.obj `if test -f 'AU_DequeIter.cc'; then $(CYGPATH_W) 'AU_DequeIter.cc'; else $(CYGPATH_W) '$(srcdir)/AU_DequeIter.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libAU_Persistent_a-AU_DequeIter.Tpo $(DEPDIR)/libAU_Persistent_a-AU_DequeIter.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AU_DequeIter.cc' object='libAU_Persistent_a-AU_DequeIter.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libAU_Persistent_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libAU_Persistent_a-AU_DequeIter.obj `if test -f 'AU_DequeIter.cc'; then $(CYGPATH_W) 'AU_DequeIter.cc'; else $(CYGPATH_W) '$(srcdir)/AU_DequeIter.cc'; fi` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/libAU_Persistent_a-AU_Deque.Po -rm -f ./$(DEPDIR)/libAU_Persistent_a-AU_DequeIter.Po -rm -f ./$(DEPDIR)/libAU_Persistent_a-AU_StackNode.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/libAU_Persistent_a-AU_Deque.Po -rm -f ./$(DEPDIR)/libAU_Persistent_a-AU_DequeIter.Po -rm -f ./$(DEPDIR)/libAU_Persistent_a-AU_StackNode.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-noinstLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: maude-3.1/src/CUI_Theory/0000755000175200017520000000000013741222370012217 500000000000000maude-3.1/src/CUI_Theory/CUI_DagArgumentIterator.hh0000644000175200017520000000254513576050635017107 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for argument iterator for CUI dag nodes. // #ifndef _CUI_DagArgumentIterator_hh_ #define _CUI_DagArgumentIterator_hh_ #include "rawDagArgumentIterator.hh" class CUI_DagArgumentIterator : public RawDagArgumentIterator { public: CUI_DagArgumentIterator(DagNode** first); bool valid() const; DagNode* argument() const; void next(); private: DagNode** position; int nrRemaining; }; inline CUI_DagArgumentIterator::CUI_DagArgumentIterator(DagNode** first) { position = first; nrRemaining = 2; } #endif maude-3.1/src/CUI_Theory/ChangeLog0000755000175200017520000013077313734457770013747 000000000000002020-09-28 Steven Eker * CUI_UnificationSubproblem.cc (CUI_UnificationSubproblem::markReachableNodes): use range-based for loop * CUI_UnificationSubproblem2.cc (CUI_UnificationSubproblem2::markReachableNodes): use range-based for loop 2020-09-25 Steven Eker * CUI_UnificationSubproblem2.cc (CUI_UnificationSubproblem2::addUnification): optimize f(...) =? f(...) case where there are equal arguments * CUI_UnificationSubproblem2.hh (class CUI_UnificationSubproblem2): added decl for equivalent() * CUI_UnificationSubproblem2.cc (CUI_UnificationSubproblem2::addUnification): use equivalentToGroundDag(), leftCollapse(), rightCollapse() to optimize degenerate cases (CUI_UnificationSubproblem2::equivalent): added * CUI_UnificationSubproblem2.hh (CUI_UnificationSubproblem2::equivalentToGroundDag): added * CUI_UnificationSubproblem2.cc (CUI_UnificationSubproblem2::leftCollapse) (CUI_UnificationSubproblem2::rightCollapse): added Asserts() that we don't see an identity as a argument 2020-09-24 Steven Eker * CUI_UnificationSubproblem2.hh (class CUI_UnificationSubproblem2): added decls for leftCollapse(), rightCollapse() * CUI_UnificationSubproblem2.cc (CUI_UnificationSubproblem2::leftCollapse) (CUI_UnificationSubproblem2::rightCollapse): added 2020-09-23 Steven Eker * CUI_UnificationSubproblem2.cc (CUI_UnificationSubproblem2::Problem::tryAlternative): use indirectOccursCheck() in RHS_VARIABLE_TAKES_ALL case - this fixes some nontermination bugs (CUI_UnificationSubproblem2::Problem::tryAlternative): added explanation for why we need indirectOccursCheck() here * CUI_DagNode.hh (class CUI_DagNode): added decl for indirectOccursCheck() * CUI_DagNode.cc (CUI_DagNode::indirectOccursCheck): added ===================================Maude131=========================================== 2020-09-22 Steven Eker * CUI_UnificationSubproblem2.cc (CUI_UnificationSubproblem2::addUnification) (CUI_UnificationSubproblem2::Problem::tryAlternative): #ifdef out debugging code 2020-09-21 Steven Eker * CUI_UnificationSubproblem2.cc (CUI_UnificationSubproblem2::addUnification): rearrange if statement for better efficiency and to make the intent clear * CUI_DagNode.cc (CUI_DagNode::makePurifiedVersion): fixed bug: only compare arguments and switch them if symbol is actually commutative ===================================Maude130=========================================== 2020-05-20 Steven Eker * CUI_UnificationSubproblem.hh: symmetric changes * CUI_UnificationSubproblem2.hh: deleted default ctor now that we have a default ctor for Vector<> that doesn't require a default ctor for the element type; add comment to copy ctor to explain why it does what it does 2020-05-19 Steven Eker * CUI_UnificationSubproblem2.cc (CUI_UnificationSubproblem2::Problem::tryAlternative): fix bug where we were using r (the original variable) rather than r2 (the representative variable) in 3 places; fix comment: occur checks aren't strictly necessary here 2020-05-18 Steven Eker * CUI_UnificationSubproblem2.cc (CUI_UnificationSubproblem2::Problem::tryAlternative): don't do sort computation for identity element here (CUI_UnificationSubproblem2::Problem::tryAlternative): deleted commented out return false (CUI_UnificationSubproblem2::Problem::tryAlternative): replace can't happen comment with CantHappen() (CUI_UnificationSubproblem2::solve): replaced commented out cout with DebugInfo() * CUI_Symbol.cc (CUI_Symbol::makeUnificationSubproblem): do sort computation for identity element here * CUI_UnificationSubproblem2.cc (CUI_UnificationSubproblem2::addUnification): replace commented out cout with DebugEnter() 2020-05-14 Steven Eker * CUI_UnificationSubproblem.cc (CUI_UnificationSubproblem::addUnification): updated Assert(); turned commented out cerr into DebugEnter() (CUI_UnificationSubproblem::solve): turned commented out couts into DebugInfo()s * CUI_DagNode.cc (CUI_DagNode::computeSolvedFormCommutativeCase): code cleaning and fix out-of-date comments 2020-05-13 Steven Eker * CUI_DagNode.cc (CUI_DagNode::computeSolvedForm2): use DebugEnter() (CUI_DagNode::computeSolvedForm2): updated comments (CUI_DagNode::computeSolvedForm2): rearranged inner if statement (CUI_DagNode::computeSolvedForm2): deleted large amount of commented out code (CUI_DagNode::makePurifiedVersion): cleaned up and expanded comments ===================================Maude128a=========================================== 2019-11-11 Steven Eker * CUI_DagNode.cc (computeBaseSortForGroundSubterms): no early termination in UNIMPLEMENTED case * CUI_UnificationSubproblem2.cc (tryAlternative): pass false to warnAboutUnimplemented arg (4 places) * CUI_DagNode.cc (computeBaseSortForGroundSubterms): take and pass warnAboutUnimplemented * CUI_DagNode.hh (DagNode): updated decl for computeBaseSortForGroundSubterms() ===================================Maude125=========================================== 2017-02-23 Steven Eker * CUI_DagNode.cc (instantiateWithCopies2): ifdef'd out ground flag and sort computation code 2017-02-21 Steven Eker * CUI_DagNode.hh (DagNode): updated decl for instantiateWithReplacement() * CUI_DagNode.cc (instantiateWithReplacement): support lazy contexts 2017-02-17 Steven Eker * CUI_DagNode.hh (DagNode): deleted decl for stackArguments() * CUI_DagNode.cc (stackArguments): deleted * CUI_Symbol.hh (BinarySymbol): updated decl for stackArguments() * CUI_Symbol.cc (stackArguments): support respectFrozen and eagerContext arguments ===================================Maude111b=========================================== 2016-11-10 Steven Eker * CUI_DagNode.hh (DagNode): added decl for copyAll2() * CUI_DagNode.cc (copyAll2): added ===================================Maude111=========================================== 2016-03-24 Steven Eker * CUI_Symbol.hh (BinarySymbol): added decl for computeGeneralizedSort2() * CUI_Symbol.cc (computeGeneralizedSort2): added ===================================Maude110=========================================== 2015-08-05 Steven Eker * CUI_Symbol.hh (BinarySymbol): added declaration for unificationPriority() * CUI_Symbol.cc (unificationPriority): added 2015-07-30 Steven Eker * CUI_DagNode.cc (computeBaseSortForGroundSubterms): call setGround() in ground case ===================================Maude108=========================================== 2013-03-01 Steven Eker * CUI_DagNode.cc (makePurifiedVersion): code cleaning (computeSolvedForm2): use makePurifiedVersion() rather that using in line code 2012-12-21 Steven Eker * CUI_UnificationSubproblem2.cc (tryAlternative): added occur checks * CUI_DagNode.cc (computeBaseSortForGroundSubterms): handle left and right identities (computeSolvedFormCommutativeCase): don't try to deal with the identity case because there is the possibility that a collapse to a lower sort will require non-minimal unsorted unifiers (computeSolvedForm2): handle identity case * CUI_Symbol.cc (canResolveTheoryClash): added * CUI_Symbol.hh (BinarySymbol): added decl for canResolveTheoryClash() * CUI_Symbol.cc (makeUnificationSubproblem): make CUI_UnificationSubproblem2() in identity case * CUI_UnificationSubproblem2.hh: created * CUI_UnificationSubproblem2.cc: created * CUI_DagNode.hh (DagNode): added decl for makePurifiedVersion() * CUI_DagNode.cc (makePurifiedVersion): added 2012-12-19 Steven Eker * CUI_DagNode.cc (computeSolvedFormCommutativeCase): added (computeSolvedForm2): use computeSolvedFormCommutativeCase() * CUI_DagNode.hh (DagNode): added decl for computeSolvedFormCommutativeCase() ===================================Maude96c=========================================== 2012-04-13 Steven Eker * CUI_DagNode.hh (DagNode): updated decl for instantiateWithReplacement(); added decl for instantiateWithCopies2() * CUI_DagNode.cc (instantiateWithReplacement): rewritten to use instantiateWithCopies() on eager positions (instantiateWithCopies2): added 2012-03-29 Steven Eker * CUI_Symbol.hh (BinarySymbol): added declaration for termify * CUI_Symbol.cc (termify): added ===================================Maude96=========================================== 2011-11-22 Steven Eker * CUI_UnificationSubproblem.cc (CUI_UnificationSubproblem::solve): use restoreFromClone() to make sure sort and dagnode information for fresh variables created on the path we just backtrack from are properly cleared from our UnificationContext (2 places) 2010-12-09 Steven Eker * CUI_Symbol.cc (CUI_Symbol::postOpDeclarationPass): don't call rightIdentitySortCheck() if we are commutative ===================================Maude95b=========================================== 2010-10-19 Steven Eker * CUI_Symbol.cc (CUI_Symbol::makeCanonicalCopyEagerUptoReduced): becomes makeCanonicalCopy() with a change of semantics * CUI_Symbol.hh (class CUI_Symbol): makeCanonicalCopyEagerUptoReduced() -> makeCanonicalCopy() ===================================Maude95a=========================================== 2010-09-29 Steven Eker * CUI_Symbol.cc (CUI_Symbol::makeCanonicalCopyEagerUptoReduced): simplify now that we are only passed unreduced nodes; use getCanonicalCopyEagerUptoReduced() * CUI_Symbol.hh (class CUI_Symbol): added decl for makeCanonicalCopyEagerUptoReduced() * CUI_Symbol.cc: added 2010-08-18 Steven Eker * CUI_DagNode.cc (CUI_DagNode::nonVariableSize): deleted * CUI_DagNode.hh (class CUI_DagNode): deleted decl for nonVariableSize() ===================================Maude95=========================================== 2010-08-12 Steven Eker * CUI_DagNode.cc (CUI_DagNode::computeSolvedForm2): use computeSolvedForm() rather than unificationBind() to ensure we don't bind the abstraction variable to an impure term (CUI_DagNode::computeSolvedForm2): use equalt() rather than == for comparing arguments during purification 2010-08-10 Steven Eker * CUI_DagNode.cc (CUI_DagNode::computeSolvedForm2): handle binding of variables, purification and local occurs check 2010-08-03 Steven Eker * CUI_UnificationSubproblem.hh (class CUI_UnificationSubproblem): updated decl for addUnification() * CUI_UnificationSubproblem.cc (CUI_UnificationSubproblem::addUnification): take marked arg 2010-07-29 Steven Eker * CUI_UnificationSubproblem.cc (CUI_UnificationSubproblem::addUnification): take solution argument * CUI_UnificationSubproblem.hh (class CUI_UnificationSubproblem): updated decl for addUnification() ===================================Maude94a=========================================== 2010-06-30 Steven Eker * CUI_DagNode.cc (CUI_DagNode::computeSolvedForm2): use resolveTheoryClash() 2009-12-22 Steven Eker * CUI_DagNode.cc (stackArguments): fixed nasty bug where we were checking the first argument unstackable flag when deciding whether we should stack the second argument 2009-12-02 Steven Eker * CUI_Symbol.hh (class CUI_Symbol): added decl for makeCanonical() * CUI_Symbol.cc (makeCanonical): added ===================================Maude92b=========================================== 2009-07-30 Steven Eker * CUI_Matcher.cc (freeMatch): fix critical bug where pointer to subproblem returned via sp0 was being lost without the subproblem being deleted if the second Subpattern::match() called failed (id0CollapseMatch, id1CollapseMatch, idemCollapseMatch): fix symmetric bugs 2008-12-22 Steven Eker * CUI_Symbol.cc (computeGeneralizedSort): new getSortFunction() convention ===================================Maude92=========================================== 2008-03-23 Steven Eker * CUI_DagNode.cc (computeSolvedForm2): deleted commented out old version * CUI_DagNode.hh (class CUI_DagNode): deleted commented out old decl for computeSolvedForm2() ===================================Maude90a=========================================== 2008-02-12 Steven Eker * CUI_UnificationSubproblem.cc (solve): implemented * CUI_UnificationSubproblem.hh (class CUI_UnificationSubproblem): problems becomes a Vector; delete ProblemList (class CUI_UnificationSubproblem): lhs, rhs of Problem become CUI_DagNode* 2008-02-11 Steven Eker * CUI_UnificationSubproblem.cc: created * CUI_UnificationSubproblem.hh: created * CUI_Symbol.cc (makeUnificationSubproblem): added * CUI_Symbol.hh (class CUI_Symbol): added decl for makeUnificationSubproblem() * CUI_DagNode.cc (computeSolvedForm2): implemented stub 2008-02-08 Steven Eker * CUI_DagNode.cc (computeSolvedForm2): Substitution -> UnificationContext * CUI_DagNode.hh (class CUI_DagNode): updated decl for computeSolvedForm2() 2008-02-05 Steven Eker * CUI_DagNode.cc (computeSolvedForm2): converted to stub * CUI_DagNode.hh (class CUI_DagNode): updated decl for computeSolvedForm2() 2008-01-17 Steven Eker * CUI_DagNode.cc (computeSolvedForm2): don't pass nrBindings to SolvedFormSubproblemDisjunction ===================================Maude90=========================================== 2008-01-11 Steven Eker * CUI_DagNode.cc (computeSolvedForm2): add missing subproblems.add() in reverse order only case ===================================Maude89j=========================================== 2007-11-12 Steven Eker * CUI_DagNode.cc (instantiate2): check ground flags of arguments; set ground flag in new node if necessary (instantiate2): call normalizeAtTop() rather than just assuming we have a C symbol 2007-11-05 Steven Eker * CUI_DagNode.cc (stackArguments): optimize by not stacking equal arguments in the comm case 2007-11-01 Steven Eker * CUI_DagNode.cc (indexVariables2): added (instantiateWithReplacement): added * CUI_DagNode.hh (class CUI_DagNode): added decls for indexVariables2() and instantiateWithReplacement() * CUI_DagNode.cc (instantiate2): updated * CUI_DagNode.hh (class CUI_DagNode): updated decl for instantiate2() ===================================Maude89h=========================================== 2007-08-24 Steven Eker * CUI_DagNode.cc (computeBaseSortForGroundSubterms): reimplemented * CUI_DagNode.hh (class CUI_DagNode): updated decl for computeBaseSortForGroundSubterms() 2007-08-23 Steven Eker * CUI_DagNode.cc (computeSolvedForm): becomes computeSolvedForm2() * CUI_DagNode.hh (class CUI_DagNode): computeSolvedForm() -> computeSolvedForm2() ===================================Maude89g=========================================== 2007-08-07 Steven Eker * CUI_DagNode.hh (class CUI_DagNode): updated decl for computeSolvedForm() * CUI_DagNode.cc (computeSolvedForm): added extensionInfo argument ===================================Maude89f=========================================== 2007-03-16 Steven Eker * CUI_DagNode.cc (unify, occurs2): deleted * CUI_DagNode.hh (class CUI_DagNode): deleted decls for unify() and occurs2() 2007-03-15 Steven Eker * CUI_DagNode.cc (computeSolvedForm): clear local substitutions * CUI_Symbol.cc (computeGeneralizedSort): pass realToBdd by ref * CUI_Symbol.hh (class CUI_Symbol): fix computeGeneralizedSort() decl ===================================Maude89a=========================================== 2007-03-05 Steven Eker * CUI_DagNode.cc (nonVariableSize): return mpz_class * CUI_DagNode.hh (class CUI_DagNode): nonVariableSize() now returns mpz_class 2007-03-02 Steven Eker * CUI_DagNode.cc (computeSolvedForm): use merge(); don't copy parent substitution (computeSolvedForm): use class SolvedFormSubproblemDisjunction 2007-03-01 Steven Eker * CUI_DagNode.cc (nonVariableSize, insertVariables2): added (computeSolvedForm): added * CUI_DagNode.hh (class CUI_DagNode): added decls for computeSolvedForm(), nonVariableSize() and insertVariables2() ===================================Maude89=========================================== 2007-02-09 Steven Eker * CUI_DagNode.cc (instantiate2): normalize wrt to comm (instantiate2): simplify 2007-02-07 Steven Eker * CUI_DagNode.cc (unify): rewritten using UnificationSubproblemDisjunction and unificationDifference() (unify): check for symmetry; get unifications in the reverse order correct 2007-02-06 Steven Eker * CUI_DagNode.cc (occurs2): added (instantiate2): added (computeBaseSortForGroundSubterms): added (unify): added * CUI_DagNode.hh (class CUI_DagNode): added decls for unify(), computeBaseSortForGroundSubterms(), instantiate2(), occurs2() 2007-02-05 Steven Eker * CUI_Symbol.cc (computeGeneralizedSort): added * CUI_Symbol.hh (class CUI_Symbol): added decl for computeGeneralizedSort() ===================================Maude88f=========================================== 2005-07-28 Steven Eker * CUI_Term.cc (CUI_Term): force symbol arg to be a CUI_Symbol (deepCopy2): handle translation to non-CUI_Symbol * CUI_Term.hh (class CUI_Term): updated decl for SymbolMap* ctor 2005-06-24 Steven Eker * CUI_Term.hh (class CUI_Term): updated decls for SymbolMap* ctor and deepCopy2() * CUI_Term.cc (deepCopy2): rewritten (CUI_Term): SymbolMap* rewritten ===================================Maude86b=========================================== 2003-08-29 Steven Eker * CUI_Symbol.cc (eqRewrite): use applyReplaceNoOwise() (memoStrategy): use applyReplaceNoOwise() ===================================Maude82=========================================== 2003-05-01 Steven Eker * CUI_DagNode.cc (overwriteWithClone): use copySetRewritingFlags() (makeClone): copySetRewritingFlags() ===================================Maude80=========================================== 2003-02-25 Steven Eker * CUI_Term.cc: removed #pragma (CUI_Term): updated Assert() * CUI_Term.hh: removed #pragma * CUI_Symbol.cc: removed #pragma (eqRewrite): updated Assert() (computeBaseSort): updated Assert()s (normalizeAndComputeTrueSort): updated Assert() * CUI_Symbol.hh: removed #pragma * CUI_RhsAutomaton.cc: removed #pragma * CUI_RhsAutomaton.hh: removed #pragma * CUI_Matcher.cc (match): updated Assert() * CUI_LhsCompiler.cc (compileLhs2): updated Assert() * CUI_LhsAutomaton.cc: removed #pragma * CUI_LhsAutomaton.hh: removed #pragma * CUI_DagNode.cc: removed #pragma (copyWithReplacement): updated Assert() (both versions) * CUI_DagNode.hh: removed #pragma (getArgument): updated Assert() * CUI_DagArgumentIterator.cc: removed #pragma (argument): updated Assert() (next): updated Assert() * CUI_DagArgumentIterator.hh: removed #pragma * CUI_ArgumentIterator.cc: removed #pragma (argument): updated Assert() (next): updated Assert() * CUI_ArgumentIterator.hh: removed #pragma ===================================Maude79=========================================== 2003-01-31 Steven Eker * CUI_Term.cc (analyseCollapses): becomes analyseCollapses2() * CUI_Term.hh (class CUI_Term): analyseCollapses() -> analyseCollapses2() ===================================Maude78=========================================== 2002-10-16 Steven Eker * CUI_Symbol.cc (postOpDeclarationPass): becomes postOpDeclarationPass() since sort tables arem't computed at postInterSymbolPass time * CUI_Symbol.hh (class CUI_Symbol): postInterSymbolPass() -> postOpDeclarationPass() 2002-10-08 Steven Eker * CUI_Symbol.hh (class CUI_Symbol): added decl for setFrozen() * CUI_Symbol.cc (setFrozen): added 2002-10-04 Steven Eker * CUI_DagNode.hh (class CUI_DagNode): updated decl for complex version of copyWithReplacement() * CUI_DagNode.cc (copyWithReplacement): complex version: handle the case where we only want to replace one arg * CUI_Symbol.cc (stackArguments): only stack args that aren't frozen or unstackable 2002-10-03 Steven Eker * CUI_DagNode.hh (class CUI_DagNode): updated decl for stackArguments() * CUI_DagNode.cc (stackArguments): handle respectFrozen argument ===================================Maude76================================================== 2002-08-02 Steven Eker * CUI_Term.cc (compileRhs2): added code to flag the last use of each source ===================================Maude74================================================== 2002-04-24 Steven Eker * CUI_RhsAutomaton.cc (dump): don't bother incrementing indentLevel (since we don't have subautomata to output) ===================================Maude72================================================== 2002-01-29 Steven Eker * CUI_LhsAutomaton.hh (class CUI_LhsAutomaton): added friend decl for PatternType << function ===================================Maude70================================================== 2001-04-03 Steven Eker * CUI_DagNode.hh (class CUI_DagNode): added decl for Vector version of copyWithReplacement() * CUI_DagNode.cc (copyWithReplacement): added (Vector version) ===================================Engine66================================================== 2001-03-08 Steven Eker * CUI_Symbol.hh (class CUI_Symbol): added decl for stackArguments() * CUI_Symbol.cc (stackArguments): added ===================================Engine65================================================== 2001-01-26 Steven Eker * CUI_DagNode.hh (class CUI_DagNode): updated markArguments() decl and make it private * CUI_DagNode.cc (markArguments): rewritten with new semantics ===================================Engine64================================================== 2000-08-04 Steven Eker * CUI_Symbol.cc (eqRewrite): greatly simplified now that we no longer treat last strategy zero specially when term is in the error sort (memoStrategy): ditto 2000-07-31 Steven Eker * CUI_Symbol.cc (computeBaseSort): don't handle union sorts ===================================Engine60================================================== 2000-07-28 Steven Eker * CUI_RhsAutomaton.hh (class CUI_RhsAutomaton): added decl for remapIndices() * CUI_RhsAutomaton.cc (remapIndices): added 2000-07-26 Steven Eker * CUI_LhsCompiler.cc (compileLhs2): use getNrProtectedVariables() instead of nrVariables() * CUI_Term.cc (compileRhs2): use makeConstructionIndex() instead of allocateIndex() 2000-07-25 Steven Eker * CUI_Term.cc (findAvailableTerms): don't insert ground terms into availableTerms since we can't do left->right sharing on them * CUI_RhsAutomaton.cc (construct): don't call buildAliens() (replace): don't call buildAliens() (dump): don't call buildAliens() * CUI_Term.hh (class CUI_Term): deleted decls for compileRhs() and findIndex() * CUI_Term.cc (compileRhs): deleted (findIndex): deleted ===================================Engine60================================================== 2000-07-12 Steven Eker * CUI_Term.cc (findAvailableTerms): added (compileRhs2): added * CUI_Term.hh (class CUI_Term): added decls for findAvailableTerms() and compileRhs2() ===================================Engine59================================================== 2000-07-05 Steven Eker * CUI_LhsCompiler.cc (compileLhs): becomes compileLhs2() * CUI_Term.hh: compileLhs() -> compileLhs2() 2000-06-26 Steven Eker * CUI_Term.cc (findIndex): modifiedIndex() -> getModifiedIndex() * CUI_LhsAutomaton.cc (addSubpattern): index() -> getIndex() (addSubpattern): lookupSort() -> getSort() ===================================Engine58================================================== 2000-03-30 Steven Eker * CUI_LhsAutomaton.cc (addSubpattern): need to make topAutomaton for subpattern1 if matchAtTop and IDEM_COLLAPSE; previously we only did this for subpattern0 in the IDEM_COLLAPSE case unless ther was a ID0_COLLAPSE; non-existant topAutomaton cause seg fault * CUI_LhsAutomaton.hh (class CUI_LhsAutomaton): added added comments to clarify enum Flags * CUI_Term.hh (class CUI_Term): added comments to clarify flags * CUI_LhsAutomaton.hh (match): moved comment inside of "if (matchAtTop)" 2000-03-17 Steven Eker * CUI_Term.cc (dump): ifdef'd * CUI_Term.hh (class CUI_Term): use NO_COPYING() macro; ifdef'd dump() decls * CUI_RhsAutomaton.cc (dump): ifdef'd * CUI_RhsAutomaton.hh (class CUI_RhsAutomaton): use NO_COPYING() macro; ifdef'd dump() decls * CUI_LhsAutomaton.cc (dump): ifdef'd (both versions) * CUI_LhsAutomaton.hh (class CUI_LhsAutomaton): use NO_COPYING() macro; ifdef'd dump() decls * CUI_Symbol.cc (eqRewrite): AdvisoryCheck() -> IssueAdvisory() (memoStrategy): AdvisoryCheck() -> IssueAdvisory() ===================================Engine56================================================== 1999-11-03 Steven Eker * CUI_Symbol.hh (class CUI_Symbol): added decl for memoStrategy() * CUI_Symbol.cc (eqRewrite): set seenZero if we see a zero! (eqRewrite): use memoStrategy() in the memo case (memoStrategy): added 1999-10-29 Steven Eker * CUI_Symbol.cc (CUI_Symbol): use new BinarySymbol conventions ===================================Engine53================================================== 1999-10-26 Steven Eker * CUI_LhsAutomaton.cc (addSubpattern): VariableTerm::dynamicCast() -> dynamic_cast() * CUI_LhsCompiler.cc (compileLhs): VariableTerm::dynamicCast() -> dynamic_cast() (*4) * CUI_Term.cc (findIndex): VariableTerm::dynamicCast() -> dynamic_cast() * CUI_Symbol.cc (CUI_Symbol): added memoFlag arg * CUI_Symbol.hh (class CUI_Symbol): added memoFlag arg to ctor decl 1999-10-19 Steven Eker * CUI_DagNode.cc (getHashValue): added * CUI_DagNode.hh (class CUI_DagNode): added data member hashCache (class CUI_DagNode): added decl for getHashValue() ===================================Engine52================================================== 1999-05-12 Steven Eker * CUI_Symbol.hh (class CUI_Symbol): computeTrueSort() -> normalizeAndComputeTrueSort() * CUI_Symbol.cc (computeTrueSort): become normalizeAndComputeTrueSort() (normalizeAndComputeTrueSort): use fastComputeTrueSort() ===================================Engine49================================================== Fri Nov 6 16:24:35 1998 Steven Eker * CUI_Term.cc (deepCopy): -> deepCopy2() * CUI_Term.hh: deepCopy() -> deepCopy2() ===================================Engine43================================================== Thu Oct 8 14:24:30 1998 Steven Eker * CUI_Term.cc (compareArguments): inserted const ===================================Engine41================================================== Fri Sep 18 15:04:48 1998 Steven Eker * CUI_Symbol.cc (computeBaseSort): rewritten using setSortIndex(), traverse(), lookupSortIndex() * CUI_DagNode.cc (overwriteWithClone): use setSortIndex() (makeClone): use setSortIndex() Wed Sep 9 11:49:29 1998 Steven Eker * CUI_Symbol.cc (compileOpDeclarations): do commutativeSortCompletion() before Symbol::compileOpDeclarations() due to new implementation ===================================Engine40================================================== Tue Jul 21 10:29:54 1998 Steven Eker * CUI_Term.hh (class CUI_Term): added decl for new ctor * CUI_Term.cc: added new ctor (deepCopy): added * CUI_Term.hh (class CUI_Term): added decl for deepCopy() ===================================Engine39================================================== Wed Jun 10 14:39:56 1998 Steven Eker * CUI_Symbol.hh (class CUI_Symbol): added decl for postInterSymbolPass() * CUI_Symbol.cc (compileOpDeclarations): no longer do identity stuff here (postInterSymbolPass): added to do identity stuff * CUI_Term.hh (class CUI_Term): updated normalize() decl * CUI_Term.cc (normalize): don't use earlyGetIdentity() (normalize): compute changed flag * CUI_LhsAutomaton.cc: IntSet -> NatSet * CUI_Term.cc: IntSet -> NatSet * CUI_LhsCompiler.cc: IntSet -> NatSet * CUI_Term.hh: IntSet -> NatSet ===================================Engine38================================================== Wed Jun 3 16:37:10 1998 Steven Eker * CUI_Term.cc (normalize): use earlyGetIdentity() ===================================Engine37================================================== Fri Feb 20 17:33:46 1998 Steven Eker * CUI_DagNode.cc (stackArguments): only stack arguments that are not flagged as unstackable ===================================Engine36================================================== Thu Feb 12 14:40:08 1998 Steven Eker * CUI_LhsAutomaton.cc (~CUI_LhsAutomaton): added (CUI_LhsAutomaton): clear all automata pointers at outset to allow for safe destruction at any time. (addSubpattern): no need to clear automata pointers here * CUI_LhsAutomaton.hh (class CUI_LhsAutomaton): added decl for ~CUI_LhsAutomaton() * CUI_Term.cc (normalize): compare() == 0 changed to equal() (2 places) * CUI_Matcher.cc (match): compare() != 0 changed to !equal() (idemCollapseMatch): compare() == 0 changed to equal() (id1CollapseMatch): compare() == 0 changed to equal() * CUI_LhsCompiler.cc (analyseConstraintPropagation):compare() == 0 changed to equal() (compileLhs): compare() == 0 changed to equal() * CUI_DagNode.cc (normalizeAtTop): compare() == 0 changed to equal() (2 places) * CUI_LhsAutomaton.hh (match): compare() == 0 changed to equal() (2 places) =============================Engine35======================================================== Tue Dec 23 13:27:27 1997 Steven Eker * CUI_LhsCompiler.cc (compileLhs): use greedySafe() Wed Dec 10 16:44:50 1997 Steven Eker * CUI_LhsAutomaton.cc (addSubpattern): added a real ugly hack to prevent first topAutomaton being compiled for greedy matching in idem case because even if variables are not shared between subterms, extension is. Fri Dec 5 14:45:23 1997 Steven Eker * CUI_Symbol.cc (compileOpDeclarations): call leftIdentitySortCheck(), rightIdentitySortCheck() and idempotentSortCheck() if needed Thu Dec 4 10:43:15 1997 Steven Eker * CUI_Matcher.cc (id1CollapseMatch): only exclude the case where the subject (portion of subject) matched is our identity if ID0_COLLAPSE; otherwise we miss matches if we only have a right identity * CUI_Symbol.cc (CUI_Symbol): deleted inert arg * CUI_Symbol.hh (class CUI_Symbol): deleted inert arg from ctor decl * CUI_LhsAutomaton.cc (dump): removed extra \t (Subpattern::dump): print ground alien correctly * CUI_LhsCompiler.cc (compileLhs): make flags an int to avoid conversion from `int' to `enum CUI_LhsAutomaton::Flags warning Wed Dec 3 11:14:09 1997 Steven Eker * CUI_LhsCompiler.cc (compileLhs): heavily rewritten to use flags and handle non-comm case; also comm case optimized in that we set forward and reverse flags to avoid checking other possibility in the case where the subterms are stable and have different top symbols * CUI_Matcher.cc: commMatch() -> freeMatch() throughout * CUI_LhsAutomaton.hh (class CUI_LhsAutomaton): commMatch() -> freeMatch() * CUI_LhsAutomaton.cc (CUI_LhsAutomaton): rewritten to use Flags (addSubpattern): rewritten to use Flags (operator<<): added (Flags version) (dump): now print flags * CUI_Matcher.cc (match): rewritten to use Flags * CUI_LhsAutomaton.hh (class CUI_LhsAutomaton): deleted idempotent and subpatternsDistinct data memebers (class CUI_LhsAutomaton): redesigned around new enum Flags * CUI_Matcher.cc (match): use forward, reverse and conditional reverse flags to handle non-commutative case * CUI_LhsCompiler.cc (analyseConstraintPropagation): handle non-commutative case Tue Dec 2 10:24:34 1997 Steven Eker * CUI_DagNode.cc (copyEagerUptoReduced2): rewritten to deal with non-permutative strategies (normalizeAtTop): rewritten to handle non-commutative case (collapseTo): rewritten to deal with non-permutative strategies * CUI_Symbol.hh (comm): added (leftId): added (rightId): added (idem): updated * CUI_Term.cc (normalize): rewritten to handle non-commutative case (findEagerVariables): rewritten to deal with non-permutative strategies (markEagerArguments): rewritten to deal with non-permutative strategies (analyseCollapses): deal with seperate left and right identity axioms * CUI_Symbol.cc (CUI_Symbol): take axioms arg; call setStrategy() if not commutative (eqRewrite): rewritten to deal with non-permutative strategies * CUI_Symbol.hh (class CUI_Symbol): idemFlag data member deleted, axioms data memeber added, enum Axioms added, ctor decl now take Axioms arg Mon Dec 1 12:34:48 1997 Steven Eker * CUI_DagNode.cc (copyEagerUptoReduced2): use getPermuteStrategy(); PermuteSymbol -> BinarySymbol (collapseTo): use getPermuteStrategy(); PermuteSymbol -> BinarySymbol * CUI_Term.cc (findEagerVariables): use getPermuteStrategy(); PermuteSymbol -> BinarySymbol (*3) (markEagerArguments): use getPermuteStrategy(); PermuteSymbol -> BinarySymbol * CUI_Symbol.cc (CUI_Symbol): PermuteSymbol -> BinarySymbol; call setPermuteStrategy() (eqRewrite): use getPermuteStrategy() (*3) * CUI_Symbol.hh (class CUI_Symbol): PermuteSymbol -> BinarySymbol Tue Nov 25 10:20:05 1997 Steven Eker * CUI_LhsAutomaton.cc (dump): implemented * CUI_LhsAutomaton.hh (class CUI_LhsAutomaton): updated dump() decl (class CUI_LhsAutomaton): unionized struct Subpattern (class CUI_LhsAutomaton): added decl for Subpattern::dump() * CUI_RhsAutomaton.cc (buildAliens): deleted (dump): implemented * CUI_RhsAutomaton.hh (addAlien): deleted (class CUI_RhsAutomaton): deleted decls for buildAliens(), addAlien(); deleted data member aliens; update decl for dump() =============================Engine33======================================================== Tue Nov 18 16:36:36 1997 Steven Eker * CUI_Term.cc (dumpArguments): deleted (dump): added * CUI_Term.hh (class CUI_Term): deleted decls for compileLhsNonCollapse(), compileLhsCollapse() and addSubterm() (class CUI_Term): dumpArguments() decl now passes variableInfo by ref; removed const; switch varableInfo, indentLevel args (class CUI_Term): dumpArguments() decl becomes dump() * CUI_LhsCompiler.cc (compileLhs): incorporate compileLhsNonCollapse() and compileLhsCollapse() since these are now very similar (compileLhsNonCollapse): deleted (compileLhsCollapse): deleted =============================Engine32======================================================== Tue Nov 11 10:22:20 1997 Steven Eker * CUI_LhsAutomaton.hh (class CUI_LhsAutomaton): removed comment that id1CollapsePossible implies subpatternsDistinct as we no longer ensure this; we don't generate repeated solutions since if we have a collapse and the subpatterns are identical then (1) we are not idempotent and (2) the only thing we could match by collapse is identity and this case is caught in id1CollapseMatch() * CUI_LhsAutomaton.cc (addSubpattern): in the variable case we need to insert variable into boundUniquely if we are in the uniqueBranch situation * CUI_Theory.hh: deleted forward decl for class CUI_Subproblem * CUI_DagNode.hh (class CUI_DagNode): revoke friendship for class CUI_Subproblem since this class won't be created * CUI_LhsCompiler.cc (compileLhsCollapse): pass greedy to ctor; removed call to complete() (compileLhsCollapse): take greedy into spl calculation (compileLhsNonCollapse): pass greedy to ctor; removed call to complete() (compileLhsNonCollapse): use addSubpattern() in place of addSubterm() (addSubterm): deleted * CUI_LhsAutomaton.cc (operator<<): added * CUI_LhsAutomaton.hh (class CUI_LhsAutomaton): greedyMatchOK data member becomes const * CUI_LhsAutomaton.cc (complete): deleted (CUI_LhsAutomaton): added greedyMatchOK arg * CUI_LhsAutomaton.hh (class CUI_LhsAutomaton): boundUniquely arg to addSubpattern() no longer const (class CUI_LhsAutomaton): ctor takes greedyMatchOK arg (class CUI_LhsAutomaton): deleted decl for complete() (class CUI_LhsAutomaton): UNSET -> UNDEFINED * CUI_LhsAutomaton.cc (addGroundAlien): deleted (addTopVariable): deleted (addNonGroundAlien): deleted (addSubpattern): now handle uniqueBranch case * CUI_LhsAutomaton.hh (class CUI_LhsAutomaton): deleted decls for addGroundAlien(), addTopVariable(), addNonGroundAlien() * CUI_Matcher.cc (id1CollapseMatch): reject matches where subject (or in extension case matched portion) is our identity since these solutionns will have already been found on the id0Collapse branch (idemCollapseMatch): (non-ex) reject matches where subject is our identity (idemCollapseMatch): (ex) add EqualitySubproblem to reject matches where matched portion is our identity Mon Nov 10 11:59:54 1997 Steven Eker * CUI_LhsCompiler.cc (compileLhsCollapse): use addSubpattern() * CUI_LhsAutomaton.cc (addSubpattern): added * CUI_Term.hh (class CUI_Term): added decls for compileLhsNonCollapse() and compileLhsCollapse() * CUI_LhsCompiler.cc (compileLhs): main code split off into compileLhsCollapse() and compileLhsNonCollapse() (compileLhsNonCollapse): created (addSubterm): standard automata are always compiled with matchAtTop = false (compileLhsCollapse): added Fri Nov 7 10:01:16 1997 Steven Eker * CUI_LhsCompiler.cc (compileLhs): if one subterm is variable and other is not match variable last to improve substitution (addSubterm): in variable case when we have unique branch, update boundUniquely * CUI_Matcher.cc (match): fixed bug where we were passing solution rather than local to simpler matching functions * CUI_Term.cc (normalize): set hash value in the case we don't collapse * CUI_LhsAutomaton.cc (addNonGroundAlien): added (addTopVariable): added (addGroundAlien): added * CUI_Term.hh (class CUI_Term): added decl for addSubterm() * CUI_LhsCompiler.cc (analyseConstraintPropagation): check for ground() before testing for willGroundOutMatch() (addSubterm): added (compileLhs): rewritten Thu Nov 6 10:30:42 1997 Steven Eker * CUI_LhsAutomaton.hh (class CUI_LhsAutomaton): added decls for ctor and complete() * CUI_LhsAutomaton.cc (complete): added (CUI_LhsAutomaton): added * CUI_LhsCompiler.cc (betterToReverseOrder): moved here from CUI_Term.cc (analyseConstraintPropagation): moved here from CUI_Term.cc (compileLhs): moved here from CUI_Term.cc * CUI_Term.cc (insertAbstractionVariables): deleted * CUI_Term.hh (class CUI_Term): deleted decl for insertAbstractionVariables() * CUI_Matcher.cc (idemCollapseMatch): ExtensionMatchSubproblem() needs nrVariables arg (match): handle non-collapse failure efficiently * CUI_LhsAutomaton.hh (class CUI_LhsAutomaton): deleted abstractionVariable data member * CUI_Matcher.cc (idemCollapseMatch): (non-ext version) rewritten to use new Subpattern::match(); now deals correctly with matchAtTop case when there is no extension (idemCollapseMatch): (ext version) deleted null subproblem special case; since our new extensionInfo convention allows us to return both a subproblem and valid extensionInfo we don't need this case; The speed up of handling this special case is marginal since we must be at top we will not lose any constraint propagation by delaying second subterm match until solve phase. BTW this case should be very rare anyway. Use class ExtensionMatchSubproblem an avoid the need for abstraction variables. (match): simplified by using ?: within if() Wed Nov 5 09:56:45 1997 Steven Eker * CUI_Matcher.cc (id0CollapseMatch): rewritten to use new Subpattern::match() (id1CollapseMatch): made symmetric with id0CollapseMatch() * CUI_LhsAutomaton.hh (class CUI_LhsAutomaton): added matchAtTop and extensionInfo args to Subpattern::match() (match): added matchAtTop and extensionInfo args * CUI_Matcher.cc (match): removed uniqueBranch code from from collapse cases * CUI_Term.cc (analyseConstraintPropagation): simplified and bug fixed; don't bother with analysis in collapse cases; take honorGroundOutMatch into account; make sure that subterms are match idependent before calling betterToReverseOrder(); treat subterms the same as a special case (betterToReverseOrder): remove test for collapse since this will be done in caller * CUI_Matcher.cc (match): rewritten to use uniqueBranch * CUI_LhsAutomaton.hh (class CUI_LhsAutomaton): extAutomaton -> topAutomaton since we may need to clone subject when matching at top. * CUI_Matcher.cc (id0CollapseMatch): rewritten to make use of the fact that identity dags are now safe from garbage collection and aboid the need for an abstraction variable (id1CollapseMatch): added; symmetric with id0CollapseMatch() * CUI_Term.hh (class CUI_Term): added decls for betterToReverseOrder(), id0CollapsePossible and id1CollapsePossible * CUI_Term.cc (analyseCollapses): use Term::commonSymbols(); set idemCollapsePossible (analyseCollapses): set id0CollapsePossible and id1CollapsePossible (betterToReverseOrder): added (analyseConstraintPropagation): implemented * CUI_Term.hh (class CUI_Term): added data member idemCollapsePossible * CUI_LhsAutomaton.hh (class CUI_LhsAutomaton): added uniqueBranch and collapsePossible data members Tue Nov 4 17:13:59 1997 Steven Eker * CUI_LhsAutomaton.hh (class CUI_LhsAutomaton): added idempotent and matchAtTop data members * CUI_Matcher.cc (match): in non collapse case don't try 2nd possibility if subpatterns are the same or subject subterms are the same. * CUI_LhsAutomaton.hh (class CUI_LhsAutomaton): added subpatternsDistinct data member Mon Nov 3 12:02:21 1997 Steven Eker * CUI_LhsAutomaton.cc: created * CUI_LhsAutomaton.hh (class CUI_LhsAutomaton): created * CUI_Matcher.cc: greatly simplified from rought draft using DisjunctiveSubproblemAccumulator =============================Engine31======================================================== Tue Oct 21 12:36:47 1997 Steven Eker * CUI_Term.cc (dagify2): switched decl to new convention * CUI_Term.hh (class CUI_Term): switched dagify2() decl to new convention Fri Oct 17 10:37:12 1997 Steven Eker * CUI_ArgumentIterator.hh (CUI_ArgumentIterator): initialize position to 0, not 2 * CUI_Term.cc (normalize): fixed bug in 2nd id collapse case * CUI_DagNode.cc (normalizeAtTop): fixed bug in 2nd id collapse case * CUI_Term.cc: created * CUI_ArgumentIterator.hh (class CUI_ArgumentIterator): created * CUI_ArgumentIterator.cc: created * CUI_RhsAutomaton.cc: created * CUI_RhsAutomaton.hh (class CUI_RhsAutomaton): created * CUI_Term.hh: created Thu Oct 16 17:33:23 1997 Steven Eker * CUI_Symbol.hh (idem): added (class CUI_Symbol): added decl for idem() * CUI_DagNode.hh (class CUI_DagNode): added decl for collapseTo() * CUI_DagNode.cc (collapseTo): added * CUI_DagArgumentIterator.cc: created * CUI_DagArgumentIterator.hh (class CUI_DagArgumentIterator): created * CUI_DagNode.cc: created * CUI_DagNode.hh (class CUI_DagNode): created * CUI_Symbol.cc: created * CUI_Symbol.hh (class CUI_Symbol): created maude-3.1/src/CUI_Theory/CUI_UnificationSubproblem.hh0000644000175200017520000000513313661352452017473 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for unification subproblems in the C theory. // It consists of a vector of unification problems of the form // f(u, v) =? f(s, t) where f is a C symbol. // #ifndef _CUI_UnificationSubproblem_hh_ #define _CUI_UnificationSubproblem_hh_ #include "unificationSubproblem.hh" #include "simpleRootContainer.hh" #include "substitution.hh" #include "pendingUnificationStack.hh" class CUI_UnificationSubproblem : public UnificationSubproblem, private SimpleRootContainer { NO_COPYING(CUI_UnificationSubproblem); public: CUI_UnificationSubproblem(); ~CUI_UnificationSubproblem(); void addUnification(DagNode* lhs, DagNode* rhs, bool marked, UnificationContext& solution); bool solve(bool findFirst, UnificationContext& solution, PendingUnificationStack& pending); #ifdef DUMP //void dump(ostream& s, const VariableInfo& variableInfo, int indentLevel); #endif private: struct Problem { Problem(CUI_DagNode* lhs, CUI_DagNode* rhs); Problem(const Problem& original); CUI_DagNode* const lhs; CUI_DagNode* const rhs; Substitution savedSubstitution; PendingUnificationStack::Marker savedPendingState; bool reverseTried; }; void markReachableNodes(); Vector problems; }; inline CUI_UnificationSubproblem::Problem::Problem(CUI_DagNode* lhs, CUI_DagNode* rhs) : lhs(lhs), rhs(rhs), savedSubstitution(0) { } inline CUI_UnificationSubproblem::Problem::Problem(const Problem& original) : lhs(original.lhs), rhs(original.rhs), savedSubstitution(0) // HACK { // // This is only a partial copy constructor - it copies the first two // data members, which is what is needed for addUnification(). We also // need to initialize saveSubstitution because Substitution has no // default constructor. // } #endif maude-3.1/src/CUI_Theory/CUI_Symbol.cc0000755000175200017520000002660513660666306014442 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class CUI_Symbol. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "variable.hh" #include "CUI_Theory.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "term.hh" #include "lhsAutomaton.hh" #include "rhsAutomaton.hh" #include "subproblem.hh" // core class definitions #include "rewritingContext.hh" #include "variableInfo.hh" #include "sortBdds.hh" #include "hashConsSet.hh" // CUI theory class definitions #include "CUI_Symbol.hh" #include "CUI_DagNode.hh" #include "CUI_Term.hh" #include "CUI_UnificationSubproblem.hh" #include "CUI_UnificationSubproblem2.hh" CUI_Symbol::CUI_Symbol(int id, const Vector& strategy, bool memoFlag, Axioms axioms, Term* identity) : BinarySymbol(id, memoFlag, identity), axioms(axioms) { if (axioms & COMM) setPermuteStrategy(strategy); else setStrategy(strategy, 2, memoFlag); } void CUI_Symbol::compileOpDeclarations() { if (axioms & COMM) commutativeSortCompletion(); Symbol::compileOpDeclarations(); // do default sort processing if (axioms & IDEM) idempotentSortCheck(); } void CUI_Symbol::postOpDeclarationPass() { processIdentity(); if (axioms & LEFT_ID) leftIdentitySortCheck(); // // If we are commutative, a problem that shows up with rightIdentitySortCheck() // will already have shown up with leftIdentitySortCheck() and the latter is faster. // if (!(axioms & COMM)) { if (axioms & RIGHT_ID) rightIdentitySortCheck(); } } Term* CUI_Symbol::makeTerm(const Vector& args) { return new CUI_Term(this, args); } DagNode* CUI_Symbol::makeDagNode(const Vector& args) { CUI_DagNode* c = new CUI_DagNode(this); c->argArray[0] = args[0]; c->argArray[1] = args[1]; return c; } bool CUI_Symbol::eqRewrite(DagNode* subject, RewritingContext& context) { Assert(this == subject->symbol(), "bad symbol"); CUI_DagNode* s = static_cast(subject); DagNode** args = s->argArray; if (standardStrategy()) { args[0]->reduce(context); args[1]->reduce(context); if (s->normalizeAtTop()) return false; return !(equationFree()) && applyReplace(s, context); } else { if (isMemoized()) { MemoTable::SourceSet from; bool result = memoStrategy(from, subject, context); memoEnter(from, subject); // // We may need to return true in the case we collapse to a unreduced subterm. // return result; } // // Execute user supplied strategy. // const Vector& userStrategy = getStrategy(); int stratLen = userStrategy.length(); bool seenZero = false; for (int i = 0; i < stratLen; i++) { int a = userStrategy[i]; if(a == 0) { if (!seenZero) { args[0]->computeTrueSort(context); args[1]->computeTrueSort(context); seenZero = true; } // // If we collapse to one of our subterms which has not been // reduced we pretend that we did a rewrite so that the // reduction process continues. // if (s->normalizeAtTop()) return !(s->isReduced()); if ((i + 1 == stratLen) ? applyReplace(s, context) : applyReplaceNoOwise(s, context)) return true; } else { --a; // real arguments start at 0 not 1 if (seenZero) { args[a] = args[a]->copyReducible(); // // A previous call to applyReplace() may have // computed a true sort for our subject which will be // invalidated by the reduce we are about to do. // s->repudiateSortInfo(); } args[a]->reduce(context); } } return false; } } bool CUI_Symbol::memoStrategy(MemoTable::SourceSet& from, DagNode* subject, RewritingContext& context) { CUI_DagNode* s = static_cast(subject); DagNode** args = s->argArray; // // Execute user supplied strategy. // const Vector& userStrategy = getStrategy(); int stratLen = userStrategy.length(); bool seenZero = false; for (int i = 0; i < stratLen; i++) { int a = userStrategy[i]; if(a == 0) { if (!seenZero) { args[0]->computeTrueSort(context); args[1]->computeTrueSort(context); seenZero = true; } // // If we collapse to one of our subterms which has not been // reduced we pretend that we did a rewrite so that the // reduction process continues. // if (s->normalizeAtTop()) return !(s->isReduced()); if (memoRewrite(from, subject, context)) return false; if ((i + 1 == stratLen) ? applyReplace(s, context) : applyReplaceNoOwise(s, context)) { subject->reduce(context); return false; } } else { --a; // real arguments start at 0 not 1 if (seenZero) { args[a] = args[a]->copyReducible(); // // A previous call to applyReplace() may have // computed a true sort for our subject which will be // invalidated by the reduce we are about to do. // s->repudiateSortInfo(); } args[a]->reduce(context); } } return false; } void CUI_Symbol::computeBaseSort(DagNode* subject) { Assert(this == subject->symbol(), "bad symbol"); DagNode** args = static_cast(subject)->argArray; int i0 = args[0]->getSortIndex(); int i1 = args[1]->getSortIndex(); Assert(i0 >= 0 && i1 >= 0, "bad sort index"); subject->setSortIndex(traverse(traverse(0, i0), i1)); } void CUI_Symbol::normalizeAndComputeTrueSort(DagNode* subject, RewritingContext& context) { Assert(this == subject->symbol(), "bad symbol"); CUI_DagNode* s = static_cast(subject); DagNode** args = s->argArray; // // Make sure each subterm has a sort. // args[0]->computeTrueSort(context); args[1]->computeTrueSort(context); // // Put subject in normal form (could collapse to a subterm). // if (s->normalizeAtTop()) return; // // Finally compute subjects true sort. // fastComputeTrueSort(subject, context); } void CUI_Symbol::stackArguments(DagNode* subject, Vector& stack, int parentIndex, bool respectFrozen, bool eagerContext) { DagNode** args = safeCast(CUI_DagNode*, subject)->argArray; const NatSet& frozen = getFrozen(); DagNode* d = args[0]; if (!(respectFrozen && frozen.contains(0)) && !(d->isUnstackable())) stack.append(RedexPosition(args[0], parentIndex, 0, eagerContext && eagerArgument(0))); d = args[1]; if (!(respectFrozen && frozen.contains(1)) && !(d->isUnstackable())) stack.append(RedexPosition(args[1], parentIndex, 1, eagerContext && eagerArgument(1))); } void CUI_Symbol::setFrozen(const NatSet& frozen) { if (axioms & COMM) setPermuteFrozen(frozen); else BinarySymbol::setFrozen(frozen); } Term* CUI_Symbol::termify(DagNode* dagNode) { Vector arguments(2); DagNode** argArray = safeCast(CUI_DagNode*, dagNode)->argArray; DagNode* d0 = argArray[0]; DagNode* d1 = argArray[1]; arguments[0] = d0->symbol()->termify(d0); arguments[1] = d1->symbol()->termify(d1); return new CUI_Term(this, arguments); } // // Unification code. // void CUI_Symbol::computeGeneralizedSort(const SortBdds& sortBdds, const Vector& realToBdd, DagNode* subject, Vector& generalizedSort) { DagNode** args = safeCast(CUI_DagNode*, subject)->argArray; int varCounter = 0; bddPair* argMap = bdd_newpair(); for (int i = 0; i < 2; i++) { Vector argGenSort; args[i]->computeGeneralizedSort(sortBdds, realToBdd, argGenSort); int nrBdds = argGenSort.size(); for (int j = 0; j < nrBdds; ++j, ++varCounter) bdd_setbddpair(argMap, varCounter, argGenSort[j]); } const Vector& sortFunction = sortBdds.getSortFunction(this); int nrBdds = sortFunction.size(); generalizedSort.resize(nrBdds); for (int i = 0; i < nrBdds; ++i) generalizedSort[i] = bdd_veccompose(sortFunction[i], argMap); bdd_freepair(argMap); } // experimental code for faster sort computations void CUI_Symbol::computeGeneralizedSort2(const SortBdds& sortBdds, const Vector& realToBdd, DagNode* subject, Vector& outputBdds) { DagNode** args = safeCast(CUI_DagNode*, subject)->argArray; Vector inputBdds; args[0]->computeGeneralizedSort2(sortBdds, realToBdd, inputBdds); args[1]->computeGeneralizedSort2(sortBdds, realToBdd, inputBdds); sortBdds.operatorCompose(this, inputBdds, outputBdds); } UnificationSubproblem* CUI_Symbol::makeUnificationSubproblem() { if (leftId() || rightId()) { // // Because CUI_UnificationSubproblem2 may introduce the // identity element we make sure it had its sort computed // and its ground flag set. // DagNode* id = getIdentityDag(); if (!(id->isGround())) id->computeBaseSortForGroundSubterms(false); return new CUI_UnificationSubproblem2(); } return new CUI_UnificationSubproblem(); } int CUI_Symbol::unificationPriority() const { if (idem()) return Symbol::unificationPriority(); // unimplemented // // Make a rough guess about how branchy we are. // return comm() + 2 * (leftId() + rightId()); } bool CUI_Symbol::canResolveTheoryClash() { return leftId() || rightId(); } // // Hash cons code. // DagNode* CUI_Symbol::makeCanonical(DagNode* original, HashConsSet* hcs) { DagNode** p = safeCast(CUI_DagNode*, original)->argArray; DagNode* d = p[0]; DagNode* c = hcs->getCanonical(hcs->insert(d)); DagNode* d1 = p[1]; DagNode* c1 = hcs->getCanonical(hcs->insert(d1)); if (c == d && c1 == d1) return original; // can use the original dag node as the canonical version // // Need to make new node. // CUI_DagNode* n = new CUI_DagNode(this); n->copySetRewritingFlags(original); n->setSortIndex(original->getSortIndex()); n->argArray[0] = c; n->argArray[1] = c1; return n; } DagNode* CUI_Symbol::makeCanonicalCopy(DagNode* original, HashConsSet* hcs) { // // We have a unreduced node - copy forced. // CUI_DagNode* n = new CUI_DagNode(this); n->copySetRewritingFlags(original); n->setSortIndex(original->getSortIndex()); DagNode** p = safeCast(CUI_DagNode*, original)->argArray; n->argArray[0] = hcs->getCanonical(hcs->insert(p[0])); n->argArray[1] = hcs->getCanonical(hcs->insert(p[1])); return n; } maude-3.1/src/CUI_Theory/CUI_DagNode.hh0000644000175200017520000000735513733022145014472 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for DAG nodes belonging to theories made from C, Ul, Ur and I axioms. // #ifndef _CUI_DagNode_hh_ #define _CUI_DagNode_hh_ #include "dagNode.hh" #include "variable.hh" class CUI_DagNode : public DagNode { public: CUI_DagNode(CUI_Symbol* symbol); // // Member functions required by theory interface. // RawDagArgumentIterator* arguments(); size_t getHashValue(); int compareArguments(const DagNode* other) const; void overwriteWithClone(DagNode* old); DagNode* makeClone(); DagNode* copyWithReplacement(int argIndex, DagNode* replacement); DagNode* copyWithReplacement(Vector& redexStack, int first, int last); // // Unification member functions. // ReturnResult computeBaseSortForGroundSubterms(bool warnAboutUnimplemented); bool computeSolvedForm2(DagNode* rhs, UnificationContext& solution, PendingUnificationStack& pending); void insertVariables2(NatSet& occurs); DagNode* instantiate2(const Substitution& substitution); // // Interface for narrowing. // bool indexVariables2(NarrowingVariableInfo& indices, int baseIndex); DagNode* instantiateWithReplacement(const Substitution& substitution, const Vector* eagerCopies, int argIndex, DagNode* newDag); DagNode* instantiateWithCopies2(const Substitution& substitution, const Vector& eagerCopies); // // Functions particular to CUI_DagNode. // CUI_Symbol* symbol() const; DagNode* getArgument(int i) const; bool indirectOccursCheck(VariableDagNode* repVar, UnificationContext& solution); CUI_DagNode* makePurifiedVersion(UnificationContext& solution, PendingUnificationStack& pending); private: // // Theory interface functions. // DagNode* markArguments(); DagNode* copyEagerUptoReduced2(); DagNode* copyAll2(); void clearCopyPointers2(); // // Normalization functions. // void collapseTo(int argNr); bool normalizeAtTop(); // // Private unification stuff. // bool computeSolvedFormCommutativeCase(CUI_DagNode* rhs, UnificationContext& solution, PendingUnificationStack& pending); // // Arguments under CUI symbol. // DagNode* argArray[2]; // // Slot for caching hash value. // size_t hashCache; // // Most related classes need direct access to our argument list for efficiency. // friend class CUI_Symbol; // to reduce subterms prior to rewrite, normalization friend class CUI_Term; // for term->DAG conversion & comparison friend class CUI_LhsAutomaton; // for matching DAG subject friend class CUI_RhsAutomaton; // for constructing replacement DAG }; inline CUI_DagNode::CUI_DagNode(CUI_Symbol* symbol) : DagNode(symbol) { } inline CUI_Symbol* CUI_DagNode::symbol() const { return static_cast(DagNode::symbol()); } inline DagNode* CUI_DagNode::getArgument(int i) const { Assert(i == 0 || i == 1, "bad argument index"); return argArray[i]; } #endif maude-3.1/src/CUI_Theory/CUI_DagNode.cc0000755000175200017520000004150113733023655014461 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class CUI_DagNode. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "variable.hh" #include "CUI_Theory.hh" // interface class definitions #include "binarySymbol.hh" #include "dagNode.hh" #include "term.hh" #include "rawDagArgumentIterator.hh" #include "lhsAutomaton.hh" #include "rhsAutomaton.hh" #include "subproblem.hh" #include "extensionInfo.hh" // core class definitions #include "substitution.hh" #include "pendingUnificationStack.hh" #include "unificationContext.hh" // variable class definitions #include "variableDagNode.hh" // CUI theory class definitions #include "CUI_Symbol.hh" #include "CUI_DagNode.hh" #include "CUI_DagArgumentIterator.hh" RawDagArgumentIterator* CUI_DagNode::arguments() { return new CUI_DagArgumentIterator(argArray); } size_t CUI_DagNode::getHashValue() { if (isHashValid()) return hashCache; size_t hashValue = hash(hash(symbol()->getHashValue(), argArray[0]->getHashValue()), argArray[1]->getHashValue()); hashCache = hashValue; setHashValid(); return hashValue; } int CUI_DagNode::compareArguments(const DagNode* other) const { const CUI_DagNode* d = static_cast(other); int r = argArray[0]->compare(d->argArray[0]); if (r != 0) return r; return argArray[1]->compare(d->argArray[1]); } DagNode* CUI_DagNode::markArguments() { argArray[0]->mark(); return argArray[1]; } DagNode* CUI_DagNode::copyEagerUptoReduced2() { CUI_Symbol* s = symbol(); CUI_DagNode* n = new CUI_DagNode(s); n->argArray[0] = s->eagerArgument(0) ? argArray[0]->copyEagerUptoReduced() : argArray[0]; n->argArray[1] = s->eagerArgument(1) ? argArray[1]->copyEagerUptoReduced() : argArray[1]; return n; } DagNode* CUI_DagNode::copyAll2() { CUI_Symbol* s = symbol(); CUI_DagNode* n = new CUI_DagNode(s); n->argArray[0] = argArray[0]->copyAll(); n->argArray[1] = argArray[1]->copyAll(); return n; } void CUI_DagNode::clearCopyPointers2() { argArray[0]->clearCopyPointers(); argArray[1]->clearCopyPointers(); } void CUI_DagNode::overwriteWithClone(DagNode* old) { CUI_DagNode* d = new(old) CUI_DagNode(symbol()); d->copySetRewritingFlags(this); d->setSortIndex(getSortIndex()); d->argArray[0] = argArray[0]; d->argArray[1] = argArray[1]; } DagNode* CUI_DagNode::makeClone() { CUI_DagNode* d = new CUI_DagNode(symbol()); d->copySetRewritingFlags(this); d->setSortIndex(getSortIndex()); d->argArray[0] = argArray[0]; d->argArray[1] = argArray[1]; return d; } DagNode* CUI_DagNode::copyWithReplacement(int argIndex, DagNode* replacement) { CUI_DagNode* d = new CUI_DagNode(symbol()); if (argIndex == 0) { d->argArray[0] = replacement; d->argArray[1] = argArray[1]; } else { Assert(argIndex == 1, "bad argument index"); d->argArray[0] = argArray[0]; d->argArray[1] = replacement; } return d; } DagNode* CUI_DagNode::copyWithReplacement(Vector& redexStack, int first, int last) { if (first == last) return copyWithReplacement(redexStack[first].argIndex(), redexStack[first].node()); Assert(first + 1 == last, "nrArgs clash"); CUI_DagNode* d = new CUI_DagNode(symbol()); d->argArray[0] = redexStack[first].node(); d->argArray[1] = redexStack[last].node(); return d; } void CUI_DagNode::collapseTo(int argNr) { DagNode* remaining = (symbol()->eagerArgument(argNr)) ? argArray[argNr] : argArray[argNr]->copyReducible(); remaining->overwriteWithClone(this); } bool CUI_DagNode::normalizeAtTop() { CUI_Symbol* s = symbol(); Term* identity = s->getIdentity(); if (identity != 0) { if (s->leftId() && identity->equal(argArray[0])) { collapseTo(1); return true; } if (s->rightId() && identity->equal(argArray[1])) { collapseTo(0); return true; } } if (s->comm() || s->idem()) { int r = argArray[0]->compare(argArray[1]); if (s->idem() && r == 0) { collapseTo(0); return true; } if (s->comm() && r > 0) { DagNode* t = argArray[0]; argArray[0] = argArray[1]; argArray[1] = t; } } return false; } // // Unification code. // DagNode::ReturnResult CUI_DagNode::computeBaseSortForGroundSubterms(bool warnAboutUnimplemented) { CUI_Symbol* s = symbol(); if (s->idem()) { // // We don't support idempotence at the moment // so let the backstop version handle it. // return DagNode::computeBaseSortForGroundSubterms(warnAboutUnimplemented); } ReturnResult result = GROUND; ReturnResult r0 = argArray[0]->computeBaseSortForGroundSubterms(warnAboutUnimplemented); if (r0 > result) result = r0; ReturnResult r1 = argArray[1]->computeBaseSortForGroundSubterms(warnAboutUnimplemented); if (r1 > result) result = r1; if (result == GROUND) { s->computeBaseSort(this); setGround(); } return result; } bool CUI_DagNode::computeSolvedFormCommutativeCase(CUI_DagNode* rhs, UnificationContext& solution, PendingUnificationStack& pending) { //cout << "commutative case " << this << " =? " << rhs << endl; // // We are have a C symbol and the rhs has the same symbol. // Both dagnodes are assumed to have their arguments sorted in ascending order. Equality // between any two of the four arguments eliminates the need for branching. // DagNode** rhsArgs = rhs->argArray; DagNode* l0 = argArray[0]; DagNode* l1 = argArray[1]; DagNode* r0 = rhsArgs[0]; DagNode* r1 = rhsArgs[1]; // // We know l0 <= l1 and r0 <= r1 because of normal forms. // In the C case we will decide if at least one of the 6 possible equalities holds in // at most 4 comparisons. // int res1 = l0->compare(r0); if (res1 == 0) return l1->computeSolvedForm(r1, solution, pending); if (res1 > 0) { // // Swap unificands to turn > 0 case in to < 0 case. // swap(l0, r0); swap(l1, r1); } // // Now l0 < r0 and r0 <= r1 imlies that l0 < r1. It's still possible that // l1 == r0 or l1 == r1. We try l1 vs r0. // int res2 = l1->compare(r0); if (res2 == 0) return l0->computeSolvedForm(r1, solution, pending); if (res2 < 0) { // // We have l0 <= l1 < r0 <= r1. Check both sides for duplicated arguments. // if (!(l0->equal(l1) || r0->equal(r1))) { // // No equalities so we need to consider two alternatives by pushing // the problem on the stack. // //cout << "pushing" << endl; pending.push(symbol(), this, rhs); return true; } } else { // // We have l0 < r0 < l1 and r0 <= r1, so l1 == r1 is still possible. // int res3 = l1->compare(r1); if (res3 == 0) return l0->computeSolvedForm(r0, solution, pending); if (res3 < 0) { // // We have l0 < r0 < l1 < r1. No equalities possible so we need to consider // two alternatives by pushing the problem on the stack. // //cout << "pushing" << endl; pending.push(symbol(), this, rhs); return true; } else { // // We have l0 < r0 < l1 and r1 < l1. So r0 == r1 is our only possible equality. // if (!(r0->equal(r1))) { // // No equalities possible so we need to consider two alternatives // by pushing the problem on the stack. // //cout << "pushing" << endl; pending.push(symbol(), this, rhs); return true; } } } // // If we got here, we have duplicated arguments in at least one unificand. // We only need to consider a single possibility. // return l0->computeSolvedForm(r0, solution, pending) && l1->computeSolvedForm(r1, solution, pending); } bool CUI_DagNode::computeSolvedForm2(DagNode* rhs, UnificationContext& solution, PendingUnificationStack& pending) { DebugEnter((DagNode*) this << " vs " << rhs); CUI_Symbol* s = symbol(); if (s == rhs->symbol()) { if (s->leftId() || s->rightId()) { // // If we have an identity, we are going to look at all alternatives, so // we push this problem on the pending unification stack. // pending.push(s, this, rhs); return true; } else { // // The pure commutative case is simpler and we have a optimized algorithm. // return computeSolvedFormCommutativeCase(safeCast(CUI_DagNode*, rhs), solution, pending); } } if (VariableDagNode* v = dynamic_cast(rhs)) { // // Get representative variable. // VariableDagNode* r = v->lastVariableInChain(solution); if (DagNode* value = solution.value(r->getIndex())) { // // Variable is bound so make a recursive call to solve the new problem. // /* cout << "bound " << (DagNode*) r << " directly solving " << (DagNode*) r << " =? " << value << endl; */ return computeSolvedForm2(value, solution, pending); } // // We have a unification problem f(u, v) =? X where X unbound. // if (s->leftId() || s->rightId()) { // // Because we could collapse, potentially to a smaller sort, // we consider multiple alternatives. // pending.push(s, this, rhs); } else { // // We need to bind the variable to our purified form. // // We cut a corner here by treating each commutative symbol as its // own theory, and rely on cycle detection to do occurs checks that // pass through multiple symbols. // CUI_DagNode* purified = makePurifiedVersion(solution, pending); //cout << "purified " << this << " to " << purified << endl; //cout << (DagNode*) r << " |-> " << purified << endl; solution.unificationBind(r, purified); } return true; } return pending.resolveTheoryClash(this, rhs); } CUI_DagNode* CUI_DagNode::makePurifiedVersion(UnificationContext& solution, PendingUnificationStack& pending) { CUI_Symbol* s = symbol(); bool needToRebuild = false; DagNode* l0 = argArray[0]; if (dynamic_cast(l0) == 0) // need to purify { VariableDagNode* abstractionVariable = solution.makeFreshVariable(s->domainComponent(0)); // // solution.unificationBind(abstractionVariable, l0) would be unsafe // since l0 might not be pure. // l0->computeSolvedForm(abstractionVariable, solution, pending); l0 = abstractionVariable; needToRebuild = true; } DagNode* l1 = argArray[1]; if (l1->equal(argArray[0])) { // // Both of our arguments were equal so we can use the same // purified form. // l1 = l0; } else { if (dynamic_cast(l1) == 0) // need to purify { VariableDagNode* abstractionVariable = solution.makeFreshVariable(s->domainComponent(1)); // // solution.unificationBind(abstractionVariable, l1) would be unsafe // since l1 might not be pure. // l1->computeSolvedForm(abstractionVariable, solution, pending); l1 = abstractionVariable; needToRebuild = true; } } if (!needToRebuild) { // // Both arguments were already variables so we can leave our // dag unchanged. // return this; } // // Need to rebuild the dag in normal form. // CUI_DagNode* purified = new CUI_DagNode(s); if (s->comm() && l0->compare(l1) > 0) { // // If s is commutative we may need to switch the arguments to // be in theory normal form. // purified->argArray[0] = l1; purified->argArray[1] = l0; } else { purified->argArray[0] = l0; purified->argArray[1] = l1; } return purified; } bool CUI_DagNode::indirectOccursCheck(VariableDagNode* repVar, UnificationContext& solution) { // // See if repVar can be reached by chasing var |-> var and // var |-> our-symbol bindings. repVar must be a representative // variable - it can't be bound to another variable. // Symbol* s = symbol(); { DagNode* arg = argArray[0]; if (VariableDagNode* a = dynamic_cast(arg)) { VariableDagNode* r = a->lastVariableInChain(solution); if (r->equal(repVar)) return true; DagNode* d = solution.value(r->getIndex()); if (d != 0 && d->symbol() == s) { CUI_DagNode* a = safeCast(CUI_DagNode*, d); if (a->indirectOccursCheck(repVar, solution)) return true; } } else if (arg->symbol() == s) { CUI_DagNode* a = safeCast(CUI_DagNode*, arg); if (a->indirectOccursCheck(repVar, solution)) return true; } } { DagNode* arg = argArray[1]; if (VariableDagNode* a = dynamic_cast(arg)) { VariableDagNode* r = a->lastVariableInChain(solution); if (r->equal(repVar)) return true; DagNode* d = solution.value(r->getIndex()); if (d != 0 && d->symbol() == s) { CUI_DagNode* a = safeCast(CUI_DagNode*, d); if (a->indirectOccursCheck(repVar, solution)) return true; } } else if (arg->symbol() == s) { CUI_DagNode* a = safeCast(CUI_DagNode*, arg); if (a->indirectOccursCheck(repVar, solution)) return true; } } return false; } void CUI_DagNode::insertVariables2(NatSet& occurs) { argArray[0]->insertVariables(occurs); argArray[1]->insertVariables(occurs); } DagNode* CUI_DagNode::instantiate2(const Substitution& substitution) { bool changed = false; DagNode* a0 = argArray[0]; if (DagNode* n = a0->instantiate(substitution)) { a0 = n; changed = true; } DagNode* a1 = argArray[1]; if (DagNode* n = a1->instantiate(substitution)) { a1 = n; changed = true; } if (changed) { CUI_Symbol* s = symbol(); CUI_DagNode* d = new CUI_DagNode(s); d->argArray[0] = a0; d->argArray[1] = a1; if(!(d->normalizeAtTop()) && a0->isGround() && a1->isGround()) { s->computeBaseSort(d); d->setGround(); } return d; } return 0; } // // Narrowing code. // bool CUI_DagNode::indexVariables2(NarrowingVariableInfo& indices, int baseIndex) { return argArray[0]->indexVariables(indices, baseIndex) & // always make both calls argArray[1]->indexVariables(indices, baseIndex); } DagNode* CUI_DagNode::instantiateWithReplacement(const Substitution& substitution, const Vector* eagerCopies, int argIndex, DagNode* replacement) { CUI_DagNode* d = new CUI_DagNode(symbol()); int other = 1 - argIndex; d->argArray[argIndex] = replacement; DagNode* n = argArray[other]; DagNode* c = (eagerCopies != 0) && symbol()->eagerArgument(other) ? n->instantiateWithCopies(substitution, *eagerCopies) : n->instantiate(substitution); // lazy case - ok to use original unifier bindings since we won't evaluate them if (c != 0) // changed under substitutition n = c; d->argArray[other] = n; return d; } DagNode* CUI_DagNode::instantiateWithCopies2(const Substitution& substitution, const Vector& eagerCopies) { bool changed = false; DagNode* a0 = argArray[0]; { DagNode* n = symbol()->eagerArgument(0) ? a0->instantiateWithCopies(substitution, eagerCopies) : a0->instantiate(substitution); if (n != 0) { a0 = n; changed = true; } } DagNode* a1 = argArray[1]; { DagNode* n = symbol()->eagerArgument(1) ? a1->instantiateWithCopies(substitution, eagerCopies) : a1->instantiate(substitution); if (n != 0) { a1 = n; changed = true; } } if (changed) { CUI_Symbol* s = symbol(); CUI_DagNode* d = new CUI_DagNode(s); d->argArray[0] = a0; d->argArray[1] = a1; // // Currently the only user of this function is PositionState::rebuildAndInstantiateDag() // via instantiateWithCopies(), SAFE_INSTANTIATE() and instantiateWithReplacement(), // and this is only used for various kinds of narrowing steps. These are followed // by reduction so we don't need to worry about: // normal forms // sort computations // ground flags // // If this changes in the future the following will be needed: // #if 0 if(!(d->normalizeAtTop()) && a0->isGround() && a1->isGround()) { s->computeBaseSort(d); d->setGround(); } #endif return d; } return 0; } maude-3.1/src/CUI_Theory/Makefile.am0000644000175200017520000000141012065206123014163 00000000000000noinst_LIBRARIES = libCUI_Theory.a libCUI_Theory_a_CPPFLAGS = \ -I$(top_srcdir)/src/Utility \ -I$(top_srcdir)/src/Interface \ -I$(top_srcdir)/src/Core \ -I$(top_srcdir)/src/Variable \ -I$(top_srcdir)/src/FullCompiler libCUI_Theory_a_SOURCES = \ CUI_Symbol.cc \ CUI_DagNode.cc \ CUI_DagArgumentIterator.cc \ CUI_RhsAutomaton.cc \ CUI_Term.cc \ CUI_ArgumentIterator.cc \ CUI_UnificationSubproblem.cc \ CUI_UnificationSubproblem2.cc \ CUI_LhsAutomaton.cc EXTRA_DIST = \ CUI_LhsCompiler.cc \ CUI_Matcher.cc noinst_HEADERS = \ CUI_ArgumentIterator.hh \ CUI_DagArgumentIterator.hh \ CUI_DagNode.hh \ CUI_LhsAutomaton.hh \ CUI_RhsAutomaton.hh \ CUI_Symbol.hh \ CUI_Term.hh \ CUI_UnificationSubproblem.hh \ CUI_UnificationSubproblem2.hh \ CUI_Theory.hh maude-3.1/src/CUI_Theory/CUI_LhsAutomaton.cc0000644000175200017520000001415013576050735015577 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class CUI_LhsAutomaton. // // utility stuff #include "macros.hh" #include "vector.hh" #include "indent.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "CUI_Theory.hh" // interface class definitions #include "argVec.hh" #include "binarySymbol.hh" #include "dagNode.hh" #include "term.hh" #include "subproblem.hh" #include "lhsAutomaton.hh" #include "rhsAutomaton.hh" #include "extensionInfo.hh" // core class definitions #include "variableInfo.hh" #include "subproblemAccumulator.hh" #include "disjunctiveSubproblemAccumulator.hh" #include "equalitySubproblem.hh" #include "extensionMatchSubproblem.hh" #include "substitution.hh" #include "localBinding.hh" // variable class definitions #include "variableSymbol.hh" #include "variableTerm.hh" // CUI theory class definitions #include "CUI_Symbol.hh" #include "CUI_DagNode.hh" #include "CUI_LhsAutomaton.hh" #include "CUI_Matcher.cc" CUI_LhsAutomaton::CUI_LhsAutomaton(CUI_Symbol* topSymbol, bool matchAtTop, Flags flags, int nrVariables) : topSymbol(topSymbol), matchAtTop(matchAtTop), flags(flags), local(nrVariables) { subpattern0.type = UNDEFINED; subpattern0.automaton = 0; subpattern0.topAutomaton = 0; subpattern1.automaton = 0; subpattern1.topAutomaton = 0; } CUI_LhsAutomaton::~CUI_LhsAutomaton() { delete subpattern0.automaton; delete subpattern0.topAutomaton; delete subpattern1.automaton; delete subpattern1.topAutomaton; } bool CUI_LhsAutomaton::addSubpattern(Term* term, const VariableInfo& variableInfo, NatSet& boundUniquely) { bool first = (subpattern0.type == UNDEFINED); Subpattern& sp = first ? subpattern0 : subpattern1; if (matchAtTop && (flags & (first ? (ID1_COLLAPSE | IDEM_COLLAPSE) : (ID0_COLLAPSE | IDEM_COLLAPSE)))) { // // Need to compile a top automaton for this subpattern. // VariableInfo localVariableInfo(variableInfo); // // Ulgy hack to prevent greedy matching because extension // is shared in idem match. // if (first && (flags & IDEM_COLLAPSE)) localVariableInfo.addConditionVariables(term->occursBelow()); NatSet local(boundUniquely); bool spl; sp.topAutomaton = term->compileLhs(true, localVariableInfo, local, spl); } if (term->ground()) { sp.type = GROUND_ALIEN; sp.term = term; return false; } VariableTerm* v = dynamic_cast(term); if (v != 0) { sp.type = VARIABLE; sp.varIndex = v->getIndex(); sp.sort = v->getSort(); if (flags & UNIQUE_BRANCH) { boundUniquely.insert(v->getIndex()); return false; } if (first || !matchAtTop || !(flags & IDEM_COLLAPSE)) return false; } else { sp.type = NON_GROUND_ALIEN; if (flags & UNIQUE_BRANCH) { bool spl; sp.automaton = term->compileLhs(false, variableInfo, boundUniquely, spl); return spl; } } NatSet local(boundUniquely); bool spl; sp.automaton = term->compileLhs(false, variableInfo, local, spl); return spl; } #ifdef DUMP void CUI_LhsAutomaton::dump(ostream& s, const VariableInfo& variableInfo, int indentLevel) { s << Indent(indentLevel) << "Begin{CUI_LhsAutomaton}\n"; ++indentLevel; s << Indent(indentLevel) << "topSymbol = \"" << topSymbol << "\"\tmatchAtTop = " << matchAtTop << '\n'; s << Indent(indentLevel) << "flags = " << flags << '\n'; s << Indent(indentLevel) << "subpattern0:\n"; subpattern0.dump(s, variableInfo, indentLevel + 1); s << Indent(indentLevel) << "subpattern1:\n"; subpattern1.dump(s, variableInfo, indentLevel + 1); s << Indent(indentLevel - 1) << "End{CUI_Automaton}\n"; } void CUI_LhsAutomaton::Subpattern::dump(ostream& s, const VariableInfo& variableInfo, int indentLevel) { s << Indent(indentLevel) << "type = " << type << '\n'; switch (type) { case UNDEFINED: return; case GROUND_ALIEN: s << Indent(indentLevel) << "term = \"" << term << "\"\n"; break; case VARIABLE: s << Indent(indentLevel) << "varIndex = " << varIndex << " \"" << variableInfo.index2Variable(varIndex) << "\"\tsort = \"" << sort << "\"\n"; if (automaton == 0) break; // fall thru case NON_GROUND_ALIEN: s << Indent(indentLevel) << "automaton =\n"; automaton->dump(s, variableInfo, indentLevel + 1); break; } if (topAutomaton != 0) { s << Indent(indentLevel) << "topAutomaton =\n"; topAutomaton->dump(s, variableInfo, indentLevel + 1); } } ostream& operator<<(ostream& s, CUI_LhsAutomaton::Flags flags) { static const char* const names[] = {"GREEDY_MATCH_OK", "UNIQUE_BRANCH", "FORWARD", "REVERSE", "CONDITIONAL_REVERSE", "ID0_COLLAPSE", "ID1_COLLAPSE", "IDEM_COLLAPSE"}; s << '{'; int m = 1; bool already = false; for (int i = 0; i < 8; i++) { if (flags & m) { if (already) s << ", "; s << names[i]; already = true; } m <<= 1; } s << '}'; return s; } ostream& operator<<(ostream& s, CUI_LhsAutomaton::PatternType type) { static const char* const names[] = {"UNDEFINED", "GROUND_ALIEN", "VARIABLE", "NON_GROUND_ALIEN"}; s << names[type]; return s; } #endif maude-3.1/src/CUI_Theory/CUI_Matcher.cc0000644000175200017520000001521713576050735014551 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // CUI matcher. // bool CUI_LhsAutomaton::match(DagNode* subject, Substitution& solution, Subproblem*& returnedSubproblem, ExtensionInfo* extensionInfo) { DisjunctiveSubproblemAccumulator alternatives(solution); Flags f = flags; bool greedyMatchOK = f & GREEDY_MATCH_OK; if (subject->symbol() == topSymbol) { Assert(extensionInfo == 0, "shouldn't have extension info"); CUI_DagNode* s = static_cast(subject); DagNode* s0 = s->argArray[0]; DagNode* s1 = s->argArray[1]; if (f & FORWARD) { // // Try forward non-collapse possibility. // local.copy(solution); if (freeMatch(s0, s1, local, returnedSubproblem)) { if ((f & UNIQUE_BRANCH) || (greedyMatchOK && returnedSubproblem == 0)) { solution.copy(local); return true; } alternatives.addOption(local, returnedSubproblem, 0); } } if ((f & REVERSE) || ((f & CONDITIONAL_REVERSE) && !(s0->equal(s1)))) { // // Try reverse non-collapse possibility. // local.copy(solution); if (freeMatch(s1, s0, local, returnedSubproblem)) { if ((f & UNIQUE_BRANCH) || (greedyMatchOK && returnedSubproblem == 0)) { solution.copy(local); return true; } alternatives.addOption(local, returnedSubproblem, 0); } } } else { if (!(f & COLLAPSE)) return false; } // // Three ways to collapse. // if (f & ID0_COLLAPSE) { local.copy(solution); if (id0CollapseMatch(subject, local, returnedSubproblem, extensionInfo)) { if (greedyMatchOK && returnedSubproblem == 0) { solution.copy(local); return true; } alternatives.addOption(local, returnedSubproblem, extensionInfo); } } if (f & ID1_COLLAPSE) { local.copy(solution); if (id1CollapseMatch(subject, local, returnedSubproblem, extensionInfo)) { if (greedyMatchOK && returnedSubproblem == 0) { solution.copy(local); return true; } alternatives.addOption(local, returnedSubproblem, extensionInfo); } } if (f & IDEM_COLLAPSE) { local.copy(solution); if ((extensionInfo == 0) ? idemCollapseMatch(subject, local, returnedSubproblem) : idemCollapseMatch(subject, local, returnedSubproblem, extensionInfo)) { if (greedyMatchOK && returnedSubproblem == 0) { solution.copy(local); return true; } alternatives.addOption(local, returnedSubproblem, extensionInfo); } } return alternatives.extract(solution, returnedSubproblem, extensionInfo); } bool CUI_LhsAutomaton::freeMatch(DagNode* subject0, DagNode* subject1, Substitution& solution, Subproblem*& returnedSubproblem) { Subproblem* sp0; Subproblem* sp1; if (subpattern0.match(subject0, solution, sp0)) { if (subpattern1.match(subject1, solution, sp1)) { SubproblemAccumulator subproblems; subproblems.add(sp0); subproblems.add(sp1); returnedSubproblem = subproblems.extractSubproblem(); return true; } else delete sp0; // important! } return false; } bool CUI_LhsAutomaton::id0CollapseMatch(DagNode* subject, Substitution& solution, Subproblem*& returnedSubproblem, ExtensionInfo* extensionInfo) { Subproblem* sp0; Subproblem* sp1; if (subpattern0.match(topSymbol->getIdentityDag(), solution, sp0)) { if (subpattern1.match(subject, solution, sp1, matchAtTop, extensionInfo)) { SubproblemAccumulator subproblems; subproblems.add(sp0); subproblems.add(sp1); returnedSubproblem = subproblems.extractSubproblem(); return true; } else delete sp0; } return false; } bool CUI_LhsAutomaton::id1CollapseMatch(DagNode* subject, Substitution& solution, Subproblem*& returnedSubproblem, ExtensionInfo* extensionInfo) { Term* identity = topSymbol->getIdentity(); if ((flags & ID0_COLLAPSE) && identity->equal(subject)) return false; // we will have already discovered solution on id0Collapse branch Subproblem* sp0; Subproblem* sp1; if (subpattern1.match(topSymbol->getIdentityDag(), solution, sp1)) { if (subpattern0.match(subject, solution, sp0, matchAtTop, extensionInfo)) { SubproblemAccumulator subproblems; subproblems.add(sp1); subproblems.add(sp0); if (extensionInfo != 0 && (flags & ID0_COLLAPSE)) subproblems.add(new EqualitySubproblem(identity, extensionInfo, false)); returnedSubproblem = subproblems.extractSubproblem(); return true; } else delete sp1; } return false; } bool CUI_LhsAutomaton::idemCollapseMatch(DagNode* subject, Substitution& solution, Subproblem*& returnedSubproblem) { Term* identity = topSymbol->getIdentity(); if (identity != 0 && identity->equal(subject)) return false; Subproblem* sp0; Subproblem* sp1; if (subpattern0.match(subject, solution, sp0, matchAtTop)) { if (subpattern1.match(subject, solution, sp1, matchAtTop)) { SubproblemAccumulator subproblems; subproblems.add(sp1); subproblems.add(sp0); returnedSubproblem = subproblems.extractSubproblem(); return true; } else delete sp0; } return false; } bool CUI_LhsAutomaton::idemCollapseMatch(DagNode* subject, Substitution& solution, Subproblem*& returnedSubproblem, ExtensionInfo* extensionInfo) { Subproblem* sp; if (subpattern0.topAutomaton->match(subject, solution, sp, extensionInfo)) { SubproblemAccumulator subproblems; subproblems.add(sp); Term* identity = topSymbol->getIdentity(); if (identity != 0) subproblems.add(new EqualitySubproblem(identity, extensionInfo, false)); subproblems.add(new ExtensionMatchSubproblem(subpattern1.automaton, extensionInfo, solution.nrFragileBindings())); returnedSubproblem = subproblems.extractSubproblem(); return true; } return false; } maude-3.1/src/CUI_Theory/CUI_RhsAutomaton.cc0000644000175200017520000000503613576050735015610 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class CUI_RhsAutomaton. // // utility stuff #include "macros.hh" #include "vector.hh" #include "indent.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "CUI_Theory.hh" // core class definitions #include "substitution.hh" #include "variableInfo.hh" // CUI theory class definitions #include "CUI_Symbol.hh" #include "CUI_DagNode.hh" #include "CUI_RhsAutomaton.hh" CUI_RhsAutomaton::CUI_RhsAutomaton(CUI_Symbol* symbol) : topSymbol(symbol) { } void CUI_RhsAutomaton::remapIndices(VariableInfo& variableInfo) { source0 = variableInfo.remapIndex(source0); source1 = variableInfo.remapIndex(source1); destination = variableInfo.remapIndex(destination); } void CUI_RhsAutomaton::close(int sourceIndex0, int sourceIndex1, int destinationIndex) { source0 = sourceIndex0; source1 = sourceIndex1; destination = destinationIndex; } DagNode* CUI_RhsAutomaton::construct(Substitution& matcher) { CUI_DagNode* n = new CUI_DagNode(topSymbol); n->argArray[0] = matcher.value(source0); n->argArray[1] = matcher.value(source1); matcher.bind(destination, n); return n; } void CUI_RhsAutomaton::replace(DagNode* old, Substitution& matcher) { CUI_DagNode* n = new(old) CUI_DagNode(topSymbol); n->argArray[0] = matcher.value(source0); n->argArray[1] = matcher.value(source1); } #ifdef DUMP void CUI_RhsAutomaton::dump(ostream& s, const VariableInfo& variableInfo, int indentLevel) { s << Indent(indentLevel) << "Begin{CUI_RhsAutomaton}\n"; s << Indent(indentLevel + 1) << "[" << destination << "] <= " << topSymbol << '(' << '[' << source0 << "], [" << source1 << "])\n"; s << Indent(indentLevel) << "End{CUI_RhsAutomaton}\n"; } #endif maude-3.1/src/CUI_Theory/CUI_Term.hh0000644000175200017520000000553313576050635014106 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for terms belonging to theories made from C, Ul, Ur and I axioms. // #ifndef _CUI_Term_hh_ #define _CUI_Term_hh_ #include "term.hh" class CUI_Term : public Term { NO_COPYING(CUI_Term); public: CUI_Term(CUI_Symbol* symbol, const Vector& arguments); // // Member functions required by theory interface. // RawArgumentIterator* arguments(); void deepSelfDestruct(); Term* deepCopy2(SymbolMap* translator) const; Term* normalize(bool full, bool& changed); int compareArguments(const Term* other) const; int compareArguments(const DagNode* other) const; void findEagerVariables(bool atTop, NatSet& eagerVariables) const; void analyseCollapses2(); void analyseConstraintPropagation(NatSet& boundUniquely) const; LhsAutomaton* compileLhs2(bool matchAtTop, const VariableInfo& variableInfo, NatSet& boundUniquely, bool& subproblemLikely); void markEagerArguments(int nrVariables, const NatSet& eagerVariables, Vector& problemVariables); DagNode* dagify2(); void findAvailableTerms(TermBag& availableTerms, bool eagerContext, bool atTop); int compileRhs2(RhsBuilder& rhsBuilder, VariableInfo& variableInfo, TermBag& availableTerms, bool eagerContext); #ifdef DUMP void dump(ostream& s, const VariableInfo& variableInfo, int indentLevel); #endif // // Functions particular to CUI_Term. // CUI_Symbol* symbol() const; private: CUI_Term(const CUI_Term& original, CUI_Symbol* symbol, SymbolMap* translator); bool betterToReverseOrder(NatSet& boundUniquely) const; Term* collapseTo(int argNr); Vector argArray; // // Flags for compiling patterns. // bool id0CollapsePossible; // possible collapse to argArray[1] bool id1CollapsePossible; // possible collapse to argArray[0] bool idemCollapsePossible; // possible collapse with argArray[0] = argArray[1] }; inline CUI_Symbol* CUI_Term::symbol() const { return static_cast(Term::symbol()); } #endif maude-3.1/src/CUI_Theory/CUI_DagArgumentIterator.cc0000644000175200017520000000255713576050735017101 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class CUI_DagArgumentIterator. // // utility stuff #include "macros.hh" // forward declarations #include "interface.hh" // CUI theory class definitions #include "CUI_DagArgumentIterator.hh" bool CUI_DagArgumentIterator::valid() const { return nrRemaining > 0; } DagNode* CUI_DagArgumentIterator::argument() const { Assert(nrRemaining > 0, "no args left"); return *position; } void CUI_DagArgumentIterator::next() { Assert(nrRemaining > 0, "no args left"); ++position; --nrRemaining; } maude-3.1/src/CUI_Theory/CUI_LhsCompiler.cc0000644000175200017520000001264113576050735015405 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation of match compilation for theories made from C, Ul, Ur and I axioms. // bool CUI_Term::betterToReverseOrder(NatSet& boundUniquely) const { Term* t0 = argArray[0]; Term* t1 = argArray[1]; NatSet forward(boundUniquely); t0->analyseConstraintPropagation(forward); t1->analyseConstraintPropagation(forward); NatSet reverse(boundUniquely); t1->analyseConstraintPropagation(reverse); t0->analyseConstraintPropagation(reverse); if (reverse.cardinality() > forward.cardinality()) { boundUniquely = reverse; // deep copy return true; } boundUniquely = forward; // deep copy return false; } void CUI_Term::analyseConstraintPropagation(NatSet& boundUniquely) const { // // If any collapse is possible then constraint propagation analysis // becomes extraordinarily complicated; subtle counter-examples // show that we can't guarantee anything in most cases. // Thus we don't bother doing anything. // if (id0CollapsePossible || id1CollapsePossible || idemCollapsePossible) return; Term* t0 = argArray[0]; Term* t1 = argArray[1]; if (t0->ground() || t0->willGroundOutMatch(boundUniquely) || t0->equal(t1)) t1->analyseConstraintPropagation(boundUniquely); else if (t1->ground() || t1->willGroundOutMatch(boundUniquely)) t0->analyseConstraintPropagation(boundUniquely); else if (!(symbol()->comm()) || t0->matchIndependent(t1)) (void) betterToReverseOrder(boundUniquely); } LhsAutomaton* CUI_Term::compileLhs2(bool matchAtTop, const VariableInfo& variableInfo, NatSet& boundUniquely, bool& subproblemLikely) { // // Check to see if greedy matching is safe. // bool greedy = greedySafe(variableInfo, boundUniquely); int flags = greedy ? CUI_LhsAutomaton::GREEDY_MATCH_OK : 0; Term* t0 = argArray[0]; Term* t1 = argArray[1]; bool comm = symbol()->comm(); bool uniqueBranch = false; bool subtermsEqual = t0->equal(t1); bool swap = false; // // We need to decide whether to swap our arguments for matching // and whether we have a unique branch. // if (id0CollapsePossible || id1CollapsePossible || idemCollapsePossible) { // // Collapse case. // if (comm && dynamic_cast(t0) != 0 && dynamic_cast(t1) == 0) swap = true; // match variable last to heuristically improve substitution else if (matchAtTop && idemCollapsePossible && t1->ground()) { Assert(!(t0->ground()), "can't have idem collapse with two ground terms"); swap = true; } } else { // // Non-collapse case. // if (t0->ground() || t0->willGroundOutMatch(boundUniquely) || subtermsEqual) uniqueBranch = true; else if (t1->ground() || t1->willGroundOutMatch(boundUniquely)) { uniqueBranch = true; swap = true; } else if (!comm || t0->matchIndependent(t1)) { uniqueBranch = true; NatSet local(boundUniquely); swap = betterToReverseOrder(local); } else if (dynamic_cast(t0) != 0 && dynamic_cast(t1) == 0) swap = true; // match variable last to heuristically improve substitution if (uniqueBranch) flags |= CUI_LhsAutomaton::UNIQUE_BRANCH; } // // Now we decide on whether to match forward and/or reverse. // if (!comm || (t0->stable() && t1->stable() && t0->symbol() != t1->symbol())) flags |= swap ? CUI_LhsAutomaton::REVERSE : CUI_LhsAutomaton::FORWARD; else { flags |= CUI_LhsAutomaton::FORWARD; if (symbol()->idem()) flags |= CUI_LhsAutomaton::REVERSE; else if (!subtermsEqual) flags |= CUI_LhsAutomaton::CONDITIONAL_REVERSE; } // // Swap arguments and enter collapse info into flags. // if (swap) { Term* t = t0; t0 = t1; t1 = t; if (id0CollapsePossible) flags |= CUI_LhsAutomaton::ID1_COLLAPSE; if (id1CollapsePossible) flags |= CUI_LhsAutomaton::ID0_COLLAPSE; } else { if (id0CollapsePossible) flags |= CUI_LhsAutomaton::ID0_COLLAPSE; if (id1CollapsePossible) flags |= CUI_LhsAutomaton::ID1_COLLAPSE; } if (idemCollapsePossible) flags |= CUI_LhsAutomaton::IDEM_COLLAPSE; // // Construct CUI automaton and determine likelihood that it will return a // subproblem at match time. // CUI_LhsAutomaton* a = new CUI_LhsAutomaton(symbol(), matchAtTop, static_cast(flags), variableInfo.getNrProtectedVariables()); bool spl = a->addSubpattern(t0, variableInfo, boundUniquely); spl = a->addSubpattern(t1, variableInfo, boundUniquely) || spl; subproblemLikely = spl || (!uniqueBranch && !greedy); return a; } maude-3.1/src/CUI_Theory/CUI_UnificationSubproblem2.hh0000644000175200017520000001040513733443227017554 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for unification subproblems in the CU, U, Ul and Ur theories. // It consists of a vector of subproblems of the forms f(u, v) =? f(s, t) or // f(u, v) =? X or f(u, v) = g(...) where f is a CUI symbol and X is a variable and // g is an alien symbol. // #ifndef _CUI_UnificationSubproblem2_hh_ #define _CUI_UnificationSubproblem2_hh_ #include "unificationSubproblem.hh" #include "simpleRootContainer.hh" #include "substitution.hh" #include "pendingUnificationStack.hh" #include "natSet.hh" #include "variableDagNode.hh" #include "unificationContext.hh" class CUI_UnificationSubproblem2 : public UnificationSubproblem, private SimpleRootContainer { NO_COPYING(CUI_UnificationSubproblem2); public: CUI_UnificationSubproblem2(); ~CUI_UnificationSubproblem2(); void addUnification(DagNode* lhs, DagNode* rhs, bool marked, UnificationContext& solution); bool solve(bool findFirst, UnificationContext& solution, PendingUnificationStack& pending); #ifdef DUMP //void dump(ostream& s, const VariableInfo& variableInfo, int indentLevel); #endif private: enum Alternatives { FORWARDS, REVERSE, LHS_ARG0_TAKES_ID, LHS_ARG1_TAKES_ID, RHS_ARG0_TAKES_ID, RHS_ARG1_TAKES_ID, RHS_VARIABLE_TAKES_ALL, NO_MORE_ALTERNATIVES }; struct Problem { Problem(CUI_DagNode* lhs, DagNode* rhs, const NatSet& legalAlternatives); Problem(const Problem& original); bool findAlternative(bool first, UnificationContext& solution, PendingUnificationStack& pending); bool tryAlternative(UnificationContext& solution, PendingUnificationStack& pending); CUI_DagNode* const lhs; DagNode* const rhs; NatSet legalAlternatives; Substitution savedSubstitution; PendingUnificationStack::Marker savedPendingState; int alternative; }; void markReachableNodes(); static bool leftCollapse(DagNode* leftArg, CUI_Symbol* topSymbol, UnificationContext& solution); static bool rightCollapse(DagNode* rightArg, CUI_Symbol* topSymbol, UnificationContext& solution); static bool equivalent(DagNode* first, DagNode* second, UnificationContext& solution); static bool equivalentToGroundDag(DagNode* dag, DagNode* groundDag, UnificationContext& solution); Vector problems; }; inline bool CUI_UnificationSubproblem2::equivalentToGroundDag(DagNode* dag, DagNode* groundDag, UnificationContext& solution) { if (dag->equal(groundDag)) return true; if (VariableDagNode* var = dynamic_cast(dag)) { VariableDagNode* rep = var->lastVariableInChain(solution); DagNode* binding = solution.value(rep->getIndex()); if (binding != 0 && binding->equal(groundDag)) return true; } return false; } inline CUI_UnificationSubproblem2::Problem::Problem(CUI_DagNode* lhs, DagNode* rhs, const NatSet& legalAlternatives) : lhs(lhs), rhs(rhs), legalAlternatives(legalAlternatives), savedSubstitution(0) { } inline CUI_UnificationSubproblem2::Problem::Problem(const Problem& original) : lhs(original.lhs), rhs(original.rhs), legalAlternatives(original.legalAlternatives), savedSubstitution(0) { // // This is only a partial copy constructor - it copies the first three // data members, which is what is needed for addUnification(). We also // need to initialize saveSubstitution because Substitution has no // default constructor. // } #endif maude-3.1/src/CUI_Theory/CUI_ArgumentIterator.hh0000644000175200017520000000255513576050635016474 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for argument iterator for CUI terms. // #ifndef _CUI_ArgumentIterator_hh_ #define _CUI_ArgumentIterator_hh_ #include "rawArgumentIterator.hh" class CUI_ArgumentIterator : public RawArgumentIterator { public: CUI_ArgumentIterator(const Vector& arguments); bool valid() const; Term* argument() const; void next(); private: const Vector& argArray; int position; }; inline CUI_ArgumentIterator::CUI_ArgumentIterator(const Vector& arguments) : argArray(arguments) { position = 0; } #endif maude-3.1/src/CUI_Theory/CUI_Theory.hh0000644000175200017520000000214713576050635014447 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Forward declarations for CUI theory classes. // #ifndef _CUI_Theory_hh_ #define _CUI_Theory_hh_ class CUI_Symbol; class CUI_Term; class CUI_ArgumentIterator; class CUI_DagNode; class CUI_DagArgumentIterator; class CUI_LhsAutomaton; class CUI_RhsAutomaton; #endif maude-3.1/src/CUI_Theory/CUI_UnificationSubproblem2.cc0000644000175200017520000003251113734463354017550 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class CUI_UnificationSubproblem2. // // utility stuff #include "macros.hh" #include "vector.hh" #include "indent.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "variable.hh" #include "CUI_Theory.hh" // interface class definitions #include "dagNode.hh" // core class definitions #include "variableInfo.hh" #include "unificationContext.hh" #include "localBinding.hh" // variable class definitions #include "variableSymbol.hh" #include "variableDagNode.hh" // CUI theory class definitions #include "CUI_Symbol.hh" #include "CUI_DagNode.hh" #include "CUI_UnificationSubproblem2.hh" CUI_UnificationSubproblem2::CUI_UnificationSubproblem2() { DebugAdvisory("Created CUI_UnificationSubproblem2() base " << ((void*) this)); } CUI_UnificationSubproblem2::~CUI_UnificationSubproblem2() { } void CUI_UnificationSubproblem2::markReachableNodes() { for (const Problem& p : problems) { int nrFragile = p.savedSubstitution.nrFragileBindings(); for (int j = 0; j < nrFragile; j++) { if (DagNode* d = p.savedSubstitution.value(j)) d->mark(); } } } bool CUI_UnificationSubproblem2::leftCollapse(DagNode* leftArg, CUI_Symbol* topSymbol, UnificationContext& solution) { if (topSymbol->leftId()) { if (VariableDagNode* var = dynamic_cast(leftArg)) { VariableDagNode* rep = var->lastVariableInChain(solution); DagNode* binding = solution.value(rep->getIndex()); if (binding != 0 && binding->equal(topSymbol->getIdentityDag())) return true; } // // We expect that dags will be normalized before unifying so // we should never see identity underneath us. // Assert(!(leftArg->equal(topSymbol->getIdentityDag())),"left arg is identity!"); } return false; } bool CUI_UnificationSubproblem2::rightCollapse(DagNode* rightArg, CUI_Symbol* topSymbol, UnificationContext& solution) { if (topSymbol->rightId()) { if (VariableDagNode* var = dynamic_cast(rightArg)) { VariableDagNode* rep = var->lastVariableInChain(solution); DagNode* binding = solution.value(rep->getIndex()); if (binding != 0 && binding->equal(topSymbol->getIdentityDag())) return true; } // // We expect that dags will be normalized before unifying so // we should never see identity underneath us. // Assert(!(rightArg->equal(topSymbol->getIdentityDag())),"right arg is identity!"); } return false; } bool CUI_UnificationSubproblem2::equivalent(DagNode* first, DagNode* second, UnificationContext& solution) { if (VariableDagNode* var = dynamic_cast(first)) { VariableDagNode* rep = var->lastVariableInChain(solution); DagNode* binding = solution.value(rep->getIndex()); first = binding ? binding : rep; } if (VariableDagNode* var = dynamic_cast(second)) { VariableDagNode* rep = var->lastVariableInChain(solution); DagNode* binding = solution.value(rep->getIndex()); second = binding ? binding : rep; } return first->equal(second); } void CUI_UnificationSubproblem2::addUnification(DagNode* lhs, DagNode* rhs, bool marked, UnificationContext& solution) { DebugEnter(lhs << " vs " << rhs); #ifdef CUI_DEBUG cout << "add " << lhs << " =? " << rhs << endl; cout << "context:\n"; solution.dump(cout); #endif CUI_DagNode* l = safeCast(CUI_DagNode*, lhs); CUI_Symbol* topSymbol = l->symbol(); NatSet legalAlternatives; if (rhs->symbol() == topSymbol) { // // f(u, v) =? f(s, t) cases. // CUI_DagNode* r = safeCast(CUI_DagNode*, rhs); // // Check for degenerate cases. // if (leftCollapse(l->getArgument(0), topSymbol, solution)) { addUnification(rhs, l->getArgument(1), false, solution); return; } if (rightCollapse(l->getArgument(1), topSymbol, solution)) { addUnification(rhs, l->getArgument(0), false, solution); return; } if (leftCollapse(r->getArgument(0), topSymbol, solution)) { addUnification(lhs, r->getArgument(1), false, solution); return; } if (rightCollapse(r->getArgument(1), topSymbol, solution)) { addUnification(lhs, r->getArgument(0), false, solution); return; } // // Main case. // legalAlternatives.insert(FORWARDS); // // Will swappping the arguments make a difference? // bool lhsArgEquiv = equivalent(l->getArgument(0), l->getArgument(1), solution); bool rhsArgEquiv = equivalent(r->getArgument(0), r->getArgument(1), solution); if (topSymbol->comm() && !lhsArgEquiv && !rhsArgEquiv) legalAlternatives.insert(REVERSE); // // Left id collapse on each side. // if (topSymbol->leftId()) { legalAlternatives.insert(LHS_ARG0_TAKES_ID); legalAlternatives.insert(RHS_ARG0_TAKES_ID); if (topSymbol->rightId()) { // // Right id collapse on each side, if it is different from // left id collapse. // if (!lhsArgEquiv) legalAlternatives.insert(LHS_ARG1_TAKES_ID); if (!rhsArgEquiv) legalAlternatives.insert(RHS_ARG1_TAKES_ID); } } else if (topSymbol->rightId()) { // // Left id collapse on each side. // legalAlternatives.insert(LHS_ARG1_TAKES_ID); legalAlternatives.insert(RHS_ARG1_TAKES_ID); } } else { // // f(u, v) =? X and f(u, v) =? g(...) cases. // if (equivalentToGroundDag(rhs, topSymbol->getIdentityDag(), solution)) { // // Actually both arguments have to take identity regardless // of whether identity is left, right or two sided. This // is just a convenient way of getting this effect. // legalAlternatives.insert(LHS_ARG0_TAKES_ID); // only option } else if (leftCollapse(l->getArgument(0), topSymbol, solution)) legalAlternatives.insert(LHS_ARG0_TAKES_ID); // only option else if (rightCollapse(l->getArgument(1), topSymbol, solution)) legalAlternatives.insert(LHS_ARG1_TAKES_ID); // only option else { if (topSymbol->leftId()) legalAlternatives.insert(LHS_ARG0_TAKES_ID); // // We only do both collapses if the arguments are distinct // in order to reduce redundant solutions. // if (topSymbol->rightId() && (!(topSymbol->leftId()) || !(equivalent(l->getArgument(0), l->getArgument(1), solution)))) legalAlternatives.insert(LHS_ARG1_TAKES_ID); if (!marked) { // // If we're marked we're obliged to collapse to a subterm. // If we're not marked and rhs is a variable we need to // consider X |-> purification of f(u, v) if X is free OR // X =? f(u, v) if X is bound. // if (dynamic_cast(rhs) != 0) legalAlternatives.insert(RHS_VARIABLE_TAKES_ALL); } } } problems.append(Problem(l, rhs, legalAlternatives)); } bool CUI_UnificationSubproblem2::Problem::findAlternative(bool first, UnificationContext& solution, PendingUnificationStack& pending) { if (first) alternative = FORWARDS; else { solution.restoreFromClone(savedSubstitution); pending.restore(savedPendingState); ++alternative; } while (alternative != NO_MORE_ALTERNATIVES) { if (legalAlternatives.contains(alternative)) { savedSubstitution.clone(solution); savedPendingState = pending.checkPoint(); if (tryAlternative(solution, pending)) return true; solution.restoreFromClone(savedSubstitution); pending.restore(savedPendingState); } ++alternative; } return false; } bool CUI_UnificationSubproblem2::Problem::tryAlternative(UnificationContext& solution, PendingUnificationStack& pending) { switch (alternative) { case FORWARDS: { CUI_DagNode* r = safeCast(CUI_DagNode*, rhs); #ifdef CUI_DEBUG cout << "trying forwards: " << lhs->getArgument(0) << " =? " << r->getArgument(0) << " /\\ " << lhs->getArgument(1) << " =? " << r->getArgument(1) << endl; #endif return lhs->getArgument(0)->computeSolvedForm(r->getArgument(0), solution, pending) && lhs->getArgument(1)->computeSolvedForm(r->getArgument(1), solution, pending); } case REVERSE: { CUI_DagNode* r = safeCast(CUI_DagNode*, rhs); #ifdef CUI_DEBUG cout << "trying reverse: " << lhs->getArgument(0) << " =? " << r->getArgument(1) << " /\\ " << lhs->getArgument(1) << " =? " << r->getArgument(0) << endl; #endif return lhs->getArgument(0)->computeSolvedForm(r->getArgument(1), solution, pending) && lhs->getArgument(1)->computeSolvedForm(r->getArgument(0), solution, pending); } case LHS_ARG0_TAKES_ID: { DagNode* id = lhs->symbol()->getIdentityDag(); #ifdef CUI_DEBUG cout << "trying lhs arg0 takes id: " << lhs->getArgument(0) << " =? " << id << " /\\ " << lhs->getArgument(1) << " =? " << rhs << endl; #endif return lhs->getArgument(0)->computeSolvedForm(id, solution, pending) && lhs->getArgument(1)->computeSolvedForm(rhs, solution, pending); } case LHS_ARG1_TAKES_ID: { DagNode* id = lhs->symbol()->getIdentityDag(); #ifdef CUI_DEBUG cout << "trying lhs arg1 takes id: " << lhs->getArgument(1) << " =? " << id << " /\\ " << lhs->getArgument(0) << " =? " << rhs << endl; #endif return lhs->getArgument(1)->computeSolvedForm(id, solution, pending) && lhs->getArgument(0)->computeSolvedForm(rhs, solution, pending); } case RHS_ARG0_TAKES_ID: { CUI_DagNode* r = safeCast(CUI_DagNode*, rhs); DagNode* id = lhs->symbol()->getIdentityDag(); #ifdef CUI_DEBUG cout << "trying rhs arg0 takes id: " << r->getArgument(0) << " =? " << id << " /\\ " << r->getArgument(1) << " =? " << rhs << endl; #endif return r->getArgument(0)->computeSolvedForm(id, solution, pending) && r->getArgument(1)->computeSolvedForm(lhs, solution, pending); } case RHS_ARG1_TAKES_ID: { CUI_DagNode* r = safeCast(CUI_DagNode*, rhs); DagNode* id = lhs->symbol()->getIdentityDag(); #ifdef CUI_DEBUG cout << "trying rhs arg1 takes id: " << r->getArgument(1) << " =? " << id << " /\\ " << r->getArgument(0) << " =? " << rhs << endl; #endif return r->getArgument(1)->computeSolvedForm(id, solution, pending) && r->getArgument(0)->computeSolvedForm(lhs, solution, pending); } case RHS_VARIABLE_TAKES_ALL: { VariableDagNode* r = safeCast(VariableDagNode*, rhs); VariableDagNode* r2 = r->lastVariableInChain(solution); DagNode* d = solution.value(r2->getIndex()); #ifdef CUI_DEBUG cout << "trying rhs take all: " << "rhs = " << (DagNode*) r << " = " << (DagNode*) r2 << " |-> " << d << " lhs = " << lhs << endl; #endif if (d == 0) { // // Because we need to achieve a consistent simultaneous solution to // all equations in our theory including those that are bindings // into our theory that we didn't bother to unsolve, we need to // avoid making any binding that gives rise to an occur-check // failure local to our theory. We cannot cheat like we do in // pure commutativity and rely on compound cycle detection because // we have a collapse axiom. // Even if an occur-check failure is resolvable by collapse we // fail here because the collapse will have been tried on some // other branch. // if (lhs->indirectOccursCheck(r2, solution)) return false; // // Need to bind this to purified ourselves to avoid generating the same problem again. // CUI_DagNode* purified = lhs->makePurifiedVersion(solution, pending); #ifdef CUI_DEBUG cout << "purified " << lhs << " to " << purified << endl; #endif solution.unificationBind(r2, purified); return true; } #ifdef CUI_DEBUG cout << "solving " << d << " =? " << lhs << endl; #endif return d->computeSolvedForm(lhs, solution, pending); } } CantHappen("nonexistent alternative"); return false; } bool CUI_UnificationSubproblem2::solve(bool findFirst, UnificationContext& solution, PendingUnificationStack& pending) { int nrProblems = problems.size(); DebugInfo("have " << nrProblems << " problems"); int i; if (findFirst) { i = 0; forward: for (; i < nrProblems; ++i) { Problem& p = problems[i]; if (!(p.findAlternative(true, solution, pending))) { --i; goto backtrack; } } return true; } else { i = nrProblems - 1; backtrack: for (; i >= 0; --i) { Problem& p = problems[i]; if (p.findAlternative(false, solution, pending)) { ++i; goto forward; } } } return false; } maude-3.1/src/CUI_Theory/CUI_Symbol.hh0000755000175200017520000000625113576050635014445 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for symbols belonging to theories made from C, Ul, Ur and I axioms. // #ifndef _CUI_Symbol_hh_ #define _CUI_Symbol_hh_ #include "binarySymbol.hh" class CUI_Symbol : public BinarySymbol { public: enum Axioms { COMM = 1, // commutativity LEFT_ID = 2, // left identity RIGHT_ID = 4, // right identity IDEM = 8 // idempotence }; CUI_Symbol(int id, const Vector& strategy, bool memoFlag, Axioms axioms, Term* identity = 0); // // Member functions required by theory interface. // Term* makeTerm(const Vector& args); DagNode* makeDagNode(const Vector& args); void computeBaseSort(DagNode* subject); void normalizeAndComputeTrueSort(DagNode* subject, RewritingContext& context); bool eqRewrite(DagNode* subject, RewritingContext& context); void stackArguments(DagNode* subject, Vector& stack, int parentIndex, bool respectFrozen, bool eagerContext); Term* termify(DagNode* dagNode); // // Member functions overiding default handling. // void compileOpDeclarations(); void postOpDeclarationPass(); void setFrozen(const NatSet& frozen); // // Unification stuff. // void computeGeneralizedSort(const SortBdds& sortBdds, const Vector& realToBdd, DagNode* subject, Vector& generalizedSort); void computeGeneralizedSort2(const SortBdds& sortBdds, const Vector& realToBdd, DagNode* subject, Vector& outputBdds); UnificationSubproblem* makeUnificationSubproblem(); int unificationPriority() const; bool canResolveTheoryClash(); // // Hash cons stuff. // DagNode* makeCanonical(DagNode* original, HashConsSet* hcs); DagNode* makeCanonicalCopy(DagNode* original, HashConsSet* hcs); // // Member functions specific to CUI_Symbol. // bool comm() const; bool leftId() const; bool rightId() const; bool idem() const; private: bool memoStrategy(MemoTable::SourceSet& from, DagNode* subject, RewritingContext& context); Axioms axioms; }; inline bool CUI_Symbol::comm() const { return axioms & COMM; } inline bool CUI_Symbol::leftId() const { return axioms & LEFT_ID; } inline bool CUI_Symbol::rightId() const { return axioms & RIGHT_ID; } inline bool CUI_Symbol::idem() const { return axioms & IDEM; } #endif maude-3.1/src/CUI_Theory/CUI_Term.cc0000644000175200017520000002005513576050735014071 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class CUI_Term. // // utility stuff #include "macros.hh" #include "vector.hh" #include "indent.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "variable.hh" #include "CUI_Theory.hh" // interface class definitions #include "binarySymbol.hh" #include "dagNode.hh" #include "term.hh" // core class definitions #include "rewritingContext.hh" #include "equation.hh" #include "symbolMap.hh" #include "termBag.hh" #include "rhsBuilder.hh" // variable class definitions #include "variableTerm.hh" // CUI theory class definitions #include "CUI_Symbol.hh" #include "CUI_DagNode.hh" #include "CUI_Term.hh" #include "CUI_ArgumentIterator.hh" #include "CUI_LhsAutomaton.hh" #include "CUI_RhsAutomaton.hh" #include "CUI_LhsCompiler.cc" CUI_Term::CUI_Term(CUI_Symbol* symbol, const Vector& arguments) : Term(symbol), argArray(2) { Assert(arguments.length() == 2, "bad number of arguments for " << symbol); argArray[0] = arguments[0]; argArray[1] = arguments[1]; } CUI_Term::CUI_Term(const CUI_Term& original, CUI_Symbol* symbol, SymbolMap* translator) : Term(symbol), argArray(2) { argArray[0] = original.argArray[0]->deepCopy(translator); argArray[1] = original.argArray[1]->deepCopy(translator); } RawArgumentIterator* CUI_Term::arguments() { return new CUI_ArgumentIterator(argArray); } void CUI_Term::deepSelfDestruct() { argArray[0]->deepSelfDestruct(); argArray[1]->deepSelfDestruct(); delete this; } Term* CUI_Term::deepCopy2(SymbolMap* translator) const { CUI_Symbol* s = symbol(); if (translator != 0) { Symbol* s2 = translator->translate(s); if (s2 == 0) return translator->translateTerm(this); s = dynamic_cast(s2); if (s == 0) { Vector args(2); args[0] = argArray[0]->deepCopy(translator); args[1] = argArray[1]->deepCopy(translator); return s2->makeTerm(args); } } return new CUI_Term(*this, s, translator); } Term* CUI_Term::collapseTo(int argNr) { argArray[1 - argNr]->deepSelfDestruct(); Term* r = argArray[argNr]; delete this; return r; } Term* CUI_Term::normalize(bool full, bool& changed) { argArray[0] = argArray[0]->normalize(full, changed); bool subtermChanged; argArray[1] = argArray[1]->normalize(full, subtermChanged); if (subtermChanged) changed = true; CUI_Symbol* s = symbol(); Term* identity = s->getIdentity(); if (identity != 0) { if (s->leftId() && identity->equal(argArray[0])) { changed = true; return collapseTo(1); } if (s->rightId() && identity->equal(argArray[1])) { changed = true; return collapseTo(0); } } if (s->comm() || s->idem()) { int r = argArray[0]->compare(argArray[1]); if (s->idem() && r == 0) { changed = true; return collapseTo(0); } if (s->comm() && r > 0) { changed = true; Term* t = argArray[0]; argArray[0] = argArray[1]; argArray[1] = t; } } unsigned int hashValue = symbol()->getHashValue(); hashValue = hash(hashValue, argArray[0]->getHashValue()); setHashValue(hash(hashValue, argArray[1]->getHashValue())); return this; } int CUI_Term::compareArguments(const Term* other) const { const Vector& argArray2 = static_cast(other)->argArray; int r = argArray[0]->compare(argArray2[0]); if (r != 0) return r; return argArray[1]->compare(argArray2[1]); } int CUI_Term::compareArguments(const DagNode* other) const { const CUI_DagNode* d = static_cast(other); int r = argArray[0]->compare(d->argArray[0]); if (r != 0) return r; return argArray[1]->compare(d->argArray[1]); } void CUI_Term::findEagerVariables(bool atTop, NatSet& eagerVariables) const { CUI_Symbol* s = symbol(); if (atTop ? s->eagerArgument(0) : s->evaluatedArgument(0)) argArray[0]->findEagerVariables(false, eagerVariables); if (atTop ? s->eagerArgument(1) : s->evaluatedArgument(1)) argArray[1]->findEagerVariables(false, eagerVariables); } void CUI_Term::markEagerArguments(int nrVariables, const NatSet& eagerVariables, Vector& problemVariables) { CUI_Symbol* s = symbol(); if (s->eagerArgument(0)) argArray[0]->markEager(nrVariables, eagerVariables, problemVariables); if (s->eagerArgument(1)) argArray[1]->markEager(nrVariables, eagerVariables, problemVariables); } DagNode* CUI_Term::dagify2() { CUI_DagNode* d = new CUI_DagNode(symbol()); d->argArray[0] = argArray[0]->dagify(); d->argArray[1] = argArray[1]->dagify(); return d; } void CUI_Term::analyseCollapses2() { Term* t0 = argArray[0]; Term* t1 = argArray[1]; t0->analyseCollapses(); t1->analyseCollapses(); CUI_Symbol* topSymbol = symbol(); id0CollapsePossible = false; if (topSymbol->leftId() && topSymbol->mightMatchOurIdentity(t0)) { addCollapseSymbol(t1->symbol()); addCollapseSymbols(t1->collapseSymbols()); id0CollapsePossible = true; } id1CollapsePossible = false; if (topSymbol->rightId() && topSymbol->mightMatchOurIdentity(t1)) { addCollapseSymbol(t0->symbol()); addCollapseSymbols(t0->collapseSymbols()); id1CollapsePossible = true; } idemCollapsePossible = false; if (topSymbol->idem() && !(t0->matchIndependent(t1))) { PointerSet symbols; Term::commonSymbols(argArray, symbols); if (!(symbols.empty())) { addCollapseSymbols(symbols); idemCollapsePossible = true; } } } #ifdef DUMP void CUI_Term::dump(ostream& s, const VariableInfo& variableInfo, int indentLevel) { s << Indent(indentLevel) << "Begin{CUI_Term}\n"; ++indentLevel; dumpCommon(s, variableInfo, indentLevel); s << Indent(indentLevel) << "id0CollapsePossible = " << id0CollapsePossible << "\tid1CollapsePossible = " << id1CollapsePossible << "\tidemCollapsePossible = " << idemCollapsePossible << '\n'; s << Indent(indentLevel) << "arguments:\n"; ++indentLevel; argArray[0]->dump(s, variableInfo, indentLevel); argArray[1]->dump(s, variableInfo, indentLevel); s << Indent(indentLevel - 2) << "End{CUI_Term}\n"; } #endif void CUI_Term::findAvailableTerms(TermBag& availableTerms, bool eagerContext, bool atTop) { if (ground()) return; CUI_Symbol* s = symbol(); if (!atTop) availableTerms.insertMatchedTerm(this, eagerContext); argArray[0]->findAvailableTerms(availableTerms, eagerContext && (atTop ? s->eagerArgument(0) : s->evaluatedArgument(0))); argArray[1]->findAvailableTerms(availableTerms, eagerContext && (atTop ? s->eagerArgument(1) : s->evaluatedArgument(1))); } int CUI_Term::compileRhs2(RhsBuilder& rhsBuilder, VariableInfo& variableInfo, TermBag& availableTerms, bool eagerContext) { CUI_Symbol* s = symbol(); CUI_RhsAutomaton* automaton = new CUI_RhsAutomaton(s); int i0 = argArray[0]->compileRhs(rhsBuilder, variableInfo, availableTerms, eagerContext && s->eagerArgument(0)); int i1 = argArray[1]->compileRhs(rhsBuilder, variableInfo, availableTerms, eagerContext && s->eagerArgument(1)); // // Need to flag last use of each source. // variableInfo.useIndex(i0); variableInfo.useIndex(i1); int index = variableInfo.makeConstructionIndex(); automaton->close(i0, i1, index); rhsBuilder.addRhsAutomaton(automaton); return index; } maude-3.1/src/CUI_Theory/CUI_UnificationSubproblem.cc0000644000175200017520000000765213734462644017477 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class CUI_UnificationSubproblem. // // utility stuff #include "macros.hh" #include "vector.hh" #include "indent.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "variable.hh" #include "CUI_Theory.hh" // interface class definitions #include "dagNode.hh" // core class definitions #include "variableInfo.hh" #include "unificationContext.hh" #include "localBinding.hh" // variable class definitions #include "variableSymbol.hh" #include "variableDagNode.hh" // CUI theory class definitions #include "CUI_Symbol.hh" #include "CUI_DagNode.hh" #include "CUI_UnificationSubproblem.hh" CUI_UnificationSubproblem::CUI_UnificationSubproblem() { DebugAdvisory("Created CUI_UnificationSubproblem() base " << ((void*) this)); } CUI_UnificationSubproblem::~CUI_UnificationSubproblem() { } void CUI_UnificationSubproblem::markReachableNodes() { for (const Problem& p : problems) { int nrFragile = p.savedSubstitution.nrFragileBindings(); for (int j = 0; j < nrFragile; j++) { if (DagNode* d = p.savedSubstitution.value(j)) d->mark(); } } } void CUI_UnificationSubproblem::addUnification(DagNode* lhs, DagNode* rhs, bool marked, UnificationContext& /* solution */) { DebugEnter(lhs << " vs " << rhs); Assert(marked == false, "this class shouldn't get collapse problems"); problems.append(Problem(safeCast(CUI_DagNode*, lhs), safeCast(CUI_DagNode*, rhs))); } bool CUI_UnificationSubproblem::solve(bool findFirst, UnificationContext& solution, PendingUnificationStack& pending) { int nrProblems = problems.size(); int i; if (findFirst) { i = 0; forward: for (; i < nrProblems; ++i) { Problem& p = problems[i]; // // Save state before solving this problem. // p.savedSubstitution.clone(solution); p.savedPendingState = pending.checkPoint(); p.reverseTried = false; DebugInfo("trying " << (DagNode*) p.lhs << " vs " << (DagNode*) p.rhs << " forwards"); if (!(p.lhs->getArgument(0)->computeSolvedForm(p.rhs->getArgument(0), solution, pending) && p.lhs->getArgument(1)->computeSolvedForm(p.rhs->getArgument(1), solution, pending))) goto backtrack; } return true; } else { i = nrProblems - 1; backtrack: for (; i >= 0; --i) { Problem& p = problems[i]; if (!p.reverseTried) { // // Restore the state to what it was before we solved this problem the first time. // solution.restoreFromClone(p.savedSubstitution); pending.restore(p.savedPendingState); DebugInfo("trying " << (DagNode*) p.lhs << " vs " << (DagNode*) p.rhs << " backwards"); if (p.lhs->getArgument(0)->computeSolvedForm(p.rhs->getArgument(1), solution, pending) && p.lhs->getArgument(1)->computeSolvedForm(p.rhs->getArgument(0), solution, pending)) { p.reverseTried = true; ++i; goto forward; } } } } // // Restore initial state. // Problem& p = problems[0]; solution.restoreFromClone(p.savedSubstitution); pending.restore(p.savedPendingState); return false; } maude-3.1/src/CUI_Theory/CUI_RhsAutomaton.hh0000644000175200017520000000313313576050635015615 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for right hand side automata for theories made from C, Ul, Ur and I axioms. // #ifndef _CUI_RhsAutomaton_hh_ #define _CUI_RhsAutomaton_hh_ #include "rhsAutomaton.hh" class CUI_RhsAutomaton : public RhsAutomaton { NO_COPYING(CUI_RhsAutomaton); public: CUI_RhsAutomaton(CUI_Symbol* symbol); void close(int sourceIndex0, int sourceIndex1, int destinationIndex); // // Standard RhsAutomaton operations // void remapIndices(VariableInfo& variableInfo); DagNode* construct(Substitution& matcher); void replace(DagNode* old, Substitution& matcher); #ifdef DUMP void dump(ostream& s, const VariableInfo& variableInfo, int indentLevel); #endif private: CUI_Symbol* const topSymbol; int source0; int source1; int destination; }; #endif maude-3.1/src/CUI_Theory/CUI_ArgumentIterator.cc0000644000175200017520000000254613576050735016463 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class CUI_ArgumentIterator. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" // CUI theory class definitions #include "CUI_ArgumentIterator.hh" bool CUI_ArgumentIterator::valid() const { return position < 2; } Term* CUI_ArgumentIterator::argument() const { Assert(position < 2, "no args left"); return argArray[position]; } void CUI_ArgumentIterator::next() { Assert(position < 2, "no args left"); ++position; } maude-3.1/src/CUI_Theory/Makefile.in0000644000175200017520000012010113741175702014205 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/CUI_Theory ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_have_poll.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libCUI_Theory_a_AR = $(AR) $(ARFLAGS) libCUI_Theory_a_LIBADD = am_libCUI_Theory_a_OBJECTS = libCUI_Theory_a-CUI_Symbol.$(OBJEXT) \ libCUI_Theory_a-CUI_DagNode.$(OBJEXT) \ libCUI_Theory_a-CUI_DagArgumentIterator.$(OBJEXT) \ libCUI_Theory_a-CUI_RhsAutomaton.$(OBJEXT) \ libCUI_Theory_a-CUI_Term.$(OBJEXT) \ libCUI_Theory_a-CUI_ArgumentIterator.$(OBJEXT) \ libCUI_Theory_a-CUI_UnificationSubproblem.$(OBJEXT) \ libCUI_Theory_a-CUI_UnificationSubproblem2.$(OBJEXT) \ libCUI_Theory_a-CUI_LhsAutomaton.$(OBJEXT) libCUI_Theory_a_OBJECTS = $(am_libCUI_Theory_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = \ ./$(DEPDIR)/libCUI_Theory_a-CUI_ArgumentIterator.Po \ ./$(DEPDIR)/libCUI_Theory_a-CUI_DagArgumentIterator.Po \ ./$(DEPDIR)/libCUI_Theory_a-CUI_DagNode.Po \ ./$(DEPDIR)/libCUI_Theory_a-CUI_LhsAutomaton.Po \ ./$(DEPDIR)/libCUI_Theory_a-CUI_RhsAutomaton.Po \ ./$(DEPDIR)/libCUI_Theory_a-CUI_Symbol.Po \ ./$(DEPDIR)/libCUI_Theory_a-CUI_Term.Po \ ./$(DEPDIR)/libCUI_Theory_a-CUI_UnificationSubproblem.Po \ ./$(DEPDIR)/libCUI_Theory_a-CUI_UnificationSubproblem2.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(libCUI_Theory_a_SOURCES) DIST_SOURCES = $(libCUI_Theory_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs ChangeLog DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ BUDDY_LIB = @BUDDY_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CVC4_LIB = @CVC4_LIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FLEX = @FLEX@ GCC_LIBS = @GCC_LIBS@ GMP_LIBS = @GMP_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSIGSEGV_LIB = @LIBSIGSEGV_LIB@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TECLA_LIBS = @TECLA_LIBS@ VERSION = @VERSION@ YICES2_LIB = @YICES2_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libCUI_Theory.a libCUI_Theory_a_CPPFLAGS = \ -I$(top_srcdir)/src/Utility \ -I$(top_srcdir)/src/Interface \ -I$(top_srcdir)/src/Core \ -I$(top_srcdir)/src/Variable \ -I$(top_srcdir)/src/FullCompiler libCUI_Theory_a_SOURCES = \ CUI_Symbol.cc \ CUI_DagNode.cc \ CUI_DagArgumentIterator.cc \ CUI_RhsAutomaton.cc \ CUI_Term.cc \ CUI_ArgumentIterator.cc \ CUI_UnificationSubproblem.cc \ CUI_UnificationSubproblem2.cc \ CUI_LhsAutomaton.cc EXTRA_DIST = \ CUI_LhsCompiler.cc \ CUI_Matcher.cc noinst_HEADERS = \ CUI_ArgumentIterator.hh \ CUI_DagArgumentIterator.hh \ CUI_DagNode.hh \ CUI_LhsAutomaton.hh \ CUI_RhsAutomaton.hh \ CUI_Symbol.hh \ CUI_Term.hh \ CUI_UnificationSubproblem.hh \ CUI_UnificationSubproblem2.hh \ CUI_Theory.hh all: all-am .SUFFIXES: .SUFFIXES: .cc .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/CUI_Theory/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/CUI_Theory/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libCUI_Theory.a: $(libCUI_Theory_a_OBJECTS) $(libCUI_Theory_a_DEPENDENCIES) $(EXTRA_libCUI_Theory_a_DEPENDENCIES) $(AM_V_at)-rm -f libCUI_Theory.a $(AM_V_AR)$(libCUI_Theory_a_AR) libCUI_Theory.a $(libCUI_Theory_a_OBJECTS) $(libCUI_Theory_a_LIBADD) $(AM_V_at)$(RANLIB) libCUI_Theory.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libCUI_Theory_a-CUI_ArgumentIterator.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libCUI_Theory_a-CUI_DagArgumentIterator.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libCUI_Theory_a-CUI_DagNode.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libCUI_Theory_a-CUI_LhsAutomaton.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libCUI_Theory_a-CUI_RhsAutomaton.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libCUI_Theory_a-CUI_Symbol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libCUI_Theory_a-CUI_Term.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libCUI_Theory_a-CUI_UnificationSubproblem.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libCUI_Theory_a-CUI_UnificationSubproblem2.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` libCUI_Theory_a-CUI_Symbol.o: CUI_Symbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libCUI_Theory_a-CUI_Symbol.o -MD -MP -MF $(DEPDIR)/libCUI_Theory_a-CUI_Symbol.Tpo -c -o libCUI_Theory_a-CUI_Symbol.o `test -f 'CUI_Symbol.cc' || echo '$(srcdir)/'`CUI_Symbol.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libCUI_Theory_a-CUI_Symbol.Tpo $(DEPDIR)/libCUI_Theory_a-CUI_Symbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CUI_Symbol.cc' object='libCUI_Theory_a-CUI_Symbol.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libCUI_Theory_a-CUI_Symbol.o `test -f 'CUI_Symbol.cc' || echo '$(srcdir)/'`CUI_Symbol.cc libCUI_Theory_a-CUI_Symbol.obj: CUI_Symbol.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libCUI_Theory_a-CUI_Symbol.obj -MD -MP -MF $(DEPDIR)/libCUI_Theory_a-CUI_Symbol.Tpo -c -o libCUI_Theory_a-CUI_Symbol.obj `if test -f 'CUI_Symbol.cc'; then $(CYGPATH_W) 'CUI_Symbol.cc'; else $(CYGPATH_W) '$(srcdir)/CUI_Symbol.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libCUI_Theory_a-CUI_Symbol.Tpo $(DEPDIR)/libCUI_Theory_a-CUI_Symbol.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CUI_Symbol.cc' object='libCUI_Theory_a-CUI_Symbol.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libCUI_Theory_a-CUI_Symbol.obj `if test -f 'CUI_Symbol.cc'; then $(CYGPATH_W) 'CUI_Symbol.cc'; else $(CYGPATH_W) '$(srcdir)/CUI_Symbol.cc'; fi` libCUI_Theory_a-CUI_DagNode.o: CUI_DagNode.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libCUI_Theory_a-CUI_DagNode.o -MD -MP -MF $(DEPDIR)/libCUI_Theory_a-CUI_DagNode.Tpo -c -o libCUI_Theory_a-CUI_DagNode.o `test -f 'CUI_DagNode.cc' || echo '$(srcdir)/'`CUI_DagNode.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libCUI_Theory_a-CUI_DagNode.Tpo $(DEPDIR)/libCUI_Theory_a-CUI_DagNode.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CUI_DagNode.cc' object='libCUI_Theory_a-CUI_DagNode.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libCUI_Theory_a-CUI_DagNode.o `test -f 'CUI_DagNode.cc' || echo '$(srcdir)/'`CUI_DagNode.cc libCUI_Theory_a-CUI_DagNode.obj: CUI_DagNode.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libCUI_Theory_a-CUI_DagNode.obj -MD -MP -MF $(DEPDIR)/libCUI_Theory_a-CUI_DagNode.Tpo -c -o libCUI_Theory_a-CUI_DagNode.obj `if test -f 'CUI_DagNode.cc'; then $(CYGPATH_W) 'CUI_DagNode.cc'; else $(CYGPATH_W) '$(srcdir)/CUI_DagNode.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libCUI_Theory_a-CUI_DagNode.Tpo $(DEPDIR)/libCUI_Theory_a-CUI_DagNode.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CUI_DagNode.cc' object='libCUI_Theory_a-CUI_DagNode.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libCUI_Theory_a-CUI_DagNode.obj `if test -f 'CUI_DagNode.cc'; then $(CYGPATH_W) 'CUI_DagNode.cc'; else $(CYGPATH_W) '$(srcdir)/CUI_DagNode.cc'; fi` libCUI_Theory_a-CUI_DagArgumentIterator.o: CUI_DagArgumentIterator.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libCUI_Theory_a-CUI_DagArgumentIterator.o -MD -MP -MF $(DEPDIR)/libCUI_Theory_a-CUI_DagArgumentIterator.Tpo -c -o libCUI_Theory_a-CUI_DagArgumentIterator.o `test -f 'CUI_DagArgumentIterator.cc' || echo '$(srcdir)/'`CUI_DagArgumentIterator.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libCUI_Theory_a-CUI_DagArgumentIterator.Tpo $(DEPDIR)/libCUI_Theory_a-CUI_DagArgumentIterator.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CUI_DagArgumentIterator.cc' object='libCUI_Theory_a-CUI_DagArgumentIterator.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libCUI_Theory_a-CUI_DagArgumentIterator.o `test -f 'CUI_DagArgumentIterator.cc' || echo '$(srcdir)/'`CUI_DagArgumentIterator.cc libCUI_Theory_a-CUI_DagArgumentIterator.obj: CUI_DagArgumentIterator.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libCUI_Theory_a-CUI_DagArgumentIterator.obj -MD -MP -MF $(DEPDIR)/libCUI_Theory_a-CUI_DagArgumentIterator.Tpo -c -o libCUI_Theory_a-CUI_DagArgumentIterator.obj `if test -f 'CUI_DagArgumentIterator.cc'; then $(CYGPATH_W) 'CUI_DagArgumentIterator.cc'; else $(CYGPATH_W) '$(srcdir)/CUI_DagArgumentIterator.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libCUI_Theory_a-CUI_DagArgumentIterator.Tpo $(DEPDIR)/libCUI_Theory_a-CUI_DagArgumentIterator.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CUI_DagArgumentIterator.cc' object='libCUI_Theory_a-CUI_DagArgumentIterator.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libCUI_Theory_a-CUI_DagArgumentIterator.obj `if test -f 'CUI_DagArgumentIterator.cc'; then $(CYGPATH_W) 'CUI_DagArgumentIterator.cc'; else $(CYGPATH_W) '$(srcdir)/CUI_DagArgumentIterator.cc'; fi` libCUI_Theory_a-CUI_RhsAutomaton.o: CUI_RhsAutomaton.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libCUI_Theory_a-CUI_RhsAutomaton.o -MD -MP -MF $(DEPDIR)/libCUI_Theory_a-CUI_RhsAutomaton.Tpo -c -o libCUI_Theory_a-CUI_RhsAutomaton.o `test -f 'CUI_RhsAutomaton.cc' || echo '$(srcdir)/'`CUI_RhsAutomaton.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libCUI_Theory_a-CUI_RhsAutomaton.Tpo $(DEPDIR)/libCUI_Theory_a-CUI_RhsAutomaton.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CUI_RhsAutomaton.cc' object='libCUI_Theory_a-CUI_RhsAutomaton.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libCUI_Theory_a-CUI_RhsAutomaton.o `test -f 'CUI_RhsAutomaton.cc' || echo '$(srcdir)/'`CUI_RhsAutomaton.cc libCUI_Theory_a-CUI_RhsAutomaton.obj: CUI_RhsAutomaton.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libCUI_Theory_a-CUI_RhsAutomaton.obj -MD -MP -MF $(DEPDIR)/libCUI_Theory_a-CUI_RhsAutomaton.Tpo -c -o libCUI_Theory_a-CUI_RhsAutomaton.obj `if test -f 'CUI_RhsAutomaton.cc'; then $(CYGPATH_W) 'CUI_RhsAutomaton.cc'; else $(CYGPATH_W) '$(srcdir)/CUI_RhsAutomaton.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libCUI_Theory_a-CUI_RhsAutomaton.Tpo $(DEPDIR)/libCUI_Theory_a-CUI_RhsAutomaton.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CUI_RhsAutomaton.cc' object='libCUI_Theory_a-CUI_RhsAutomaton.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libCUI_Theory_a-CUI_RhsAutomaton.obj `if test -f 'CUI_RhsAutomaton.cc'; then $(CYGPATH_W) 'CUI_RhsAutomaton.cc'; else $(CYGPATH_W) '$(srcdir)/CUI_RhsAutomaton.cc'; fi` libCUI_Theory_a-CUI_Term.o: CUI_Term.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libCUI_Theory_a-CUI_Term.o -MD -MP -MF $(DEPDIR)/libCUI_Theory_a-CUI_Term.Tpo -c -o libCUI_Theory_a-CUI_Term.o `test -f 'CUI_Term.cc' || echo '$(srcdir)/'`CUI_Term.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libCUI_Theory_a-CUI_Term.Tpo $(DEPDIR)/libCUI_Theory_a-CUI_Term.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CUI_Term.cc' object='libCUI_Theory_a-CUI_Term.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libCUI_Theory_a-CUI_Term.o `test -f 'CUI_Term.cc' || echo '$(srcdir)/'`CUI_Term.cc libCUI_Theory_a-CUI_Term.obj: CUI_Term.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libCUI_Theory_a-CUI_Term.obj -MD -MP -MF $(DEPDIR)/libCUI_Theory_a-CUI_Term.Tpo -c -o libCUI_Theory_a-CUI_Term.obj `if test -f 'CUI_Term.cc'; then $(CYGPATH_W) 'CUI_Term.cc'; else $(CYGPATH_W) '$(srcdir)/CUI_Term.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libCUI_Theory_a-CUI_Term.Tpo $(DEPDIR)/libCUI_Theory_a-CUI_Term.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CUI_Term.cc' object='libCUI_Theory_a-CUI_Term.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libCUI_Theory_a-CUI_Term.obj `if test -f 'CUI_Term.cc'; then $(CYGPATH_W) 'CUI_Term.cc'; else $(CYGPATH_W) '$(srcdir)/CUI_Term.cc'; fi` libCUI_Theory_a-CUI_ArgumentIterator.o: CUI_ArgumentIterator.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libCUI_Theory_a-CUI_ArgumentIterator.o -MD -MP -MF $(DEPDIR)/libCUI_Theory_a-CUI_ArgumentIterator.Tpo -c -o libCUI_Theory_a-CUI_ArgumentIterator.o `test -f 'CUI_ArgumentIterator.cc' || echo '$(srcdir)/'`CUI_ArgumentIterator.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libCUI_Theory_a-CUI_ArgumentIterator.Tpo $(DEPDIR)/libCUI_Theory_a-CUI_ArgumentIterator.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CUI_ArgumentIterator.cc' object='libCUI_Theory_a-CUI_ArgumentIterator.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libCUI_Theory_a-CUI_ArgumentIterator.o `test -f 'CUI_ArgumentIterator.cc' || echo '$(srcdir)/'`CUI_ArgumentIterator.cc libCUI_Theory_a-CUI_ArgumentIterator.obj: CUI_ArgumentIterator.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libCUI_Theory_a-CUI_ArgumentIterator.obj -MD -MP -MF $(DEPDIR)/libCUI_Theory_a-CUI_ArgumentIterator.Tpo -c -o libCUI_Theory_a-CUI_ArgumentIterator.obj `if test -f 'CUI_ArgumentIterator.cc'; then $(CYGPATH_W) 'CUI_ArgumentIterator.cc'; else $(CYGPATH_W) '$(srcdir)/CUI_ArgumentIterator.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libCUI_Theory_a-CUI_ArgumentIterator.Tpo $(DEPDIR)/libCUI_Theory_a-CUI_ArgumentIterator.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CUI_ArgumentIterator.cc' object='libCUI_Theory_a-CUI_ArgumentIterator.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libCUI_Theory_a-CUI_ArgumentIterator.obj `if test -f 'CUI_ArgumentIterator.cc'; then $(CYGPATH_W) 'CUI_ArgumentIterator.cc'; else $(CYGPATH_W) '$(srcdir)/CUI_ArgumentIterator.cc'; fi` libCUI_Theory_a-CUI_UnificationSubproblem.o: CUI_UnificationSubproblem.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libCUI_Theory_a-CUI_UnificationSubproblem.o -MD -MP -MF $(DEPDIR)/libCUI_Theory_a-CUI_UnificationSubproblem.Tpo -c -o libCUI_Theory_a-CUI_UnificationSubproblem.o `test -f 'CUI_UnificationSubproblem.cc' || echo '$(srcdir)/'`CUI_UnificationSubproblem.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libCUI_Theory_a-CUI_UnificationSubproblem.Tpo $(DEPDIR)/libCUI_Theory_a-CUI_UnificationSubproblem.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CUI_UnificationSubproblem.cc' object='libCUI_Theory_a-CUI_UnificationSubproblem.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libCUI_Theory_a-CUI_UnificationSubproblem.o `test -f 'CUI_UnificationSubproblem.cc' || echo '$(srcdir)/'`CUI_UnificationSubproblem.cc libCUI_Theory_a-CUI_UnificationSubproblem.obj: CUI_UnificationSubproblem.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libCUI_Theory_a-CUI_UnificationSubproblem.obj -MD -MP -MF $(DEPDIR)/libCUI_Theory_a-CUI_UnificationSubproblem.Tpo -c -o libCUI_Theory_a-CUI_UnificationSubproblem.obj `if test -f 'CUI_UnificationSubproblem.cc'; then $(CYGPATH_W) 'CUI_UnificationSubproblem.cc'; else $(CYGPATH_W) '$(srcdir)/CUI_UnificationSubproblem.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libCUI_Theory_a-CUI_UnificationSubproblem.Tpo $(DEPDIR)/libCUI_Theory_a-CUI_UnificationSubproblem.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CUI_UnificationSubproblem.cc' object='libCUI_Theory_a-CUI_UnificationSubproblem.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libCUI_Theory_a-CUI_UnificationSubproblem.obj `if test -f 'CUI_UnificationSubproblem.cc'; then $(CYGPATH_W) 'CUI_UnificationSubproblem.cc'; else $(CYGPATH_W) '$(srcdir)/CUI_UnificationSubproblem.cc'; fi` libCUI_Theory_a-CUI_UnificationSubproblem2.o: CUI_UnificationSubproblem2.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libCUI_Theory_a-CUI_UnificationSubproblem2.o -MD -MP -MF $(DEPDIR)/libCUI_Theory_a-CUI_UnificationSubproblem2.Tpo -c -o libCUI_Theory_a-CUI_UnificationSubproblem2.o `test -f 'CUI_UnificationSubproblem2.cc' || echo '$(srcdir)/'`CUI_UnificationSubproblem2.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libCUI_Theory_a-CUI_UnificationSubproblem2.Tpo $(DEPDIR)/libCUI_Theory_a-CUI_UnificationSubproblem2.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CUI_UnificationSubproblem2.cc' object='libCUI_Theory_a-CUI_UnificationSubproblem2.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libCUI_Theory_a-CUI_UnificationSubproblem2.o `test -f 'CUI_UnificationSubproblem2.cc' || echo '$(srcdir)/'`CUI_UnificationSubproblem2.cc libCUI_Theory_a-CUI_UnificationSubproblem2.obj: CUI_UnificationSubproblem2.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libCUI_Theory_a-CUI_UnificationSubproblem2.obj -MD -MP -MF $(DEPDIR)/libCUI_Theory_a-CUI_UnificationSubproblem2.Tpo -c -o libCUI_Theory_a-CUI_UnificationSubproblem2.obj `if test -f 'CUI_UnificationSubproblem2.cc'; then $(CYGPATH_W) 'CUI_UnificationSubproblem2.cc'; else $(CYGPATH_W) '$(srcdir)/CUI_UnificationSubproblem2.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libCUI_Theory_a-CUI_UnificationSubproblem2.Tpo $(DEPDIR)/libCUI_Theory_a-CUI_UnificationSubproblem2.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CUI_UnificationSubproblem2.cc' object='libCUI_Theory_a-CUI_UnificationSubproblem2.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libCUI_Theory_a-CUI_UnificationSubproblem2.obj `if test -f 'CUI_UnificationSubproblem2.cc'; then $(CYGPATH_W) 'CUI_UnificationSubproblem2.cc'; else $(CYGPATH_W) '$(srcdir)/CUI_UnificationSubproblem2.cc'; fi` libCUI_Theory_a-CUI_LhsAutomaton.o: CUI_LhsAutomaton.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libCUI_Theory_a-CUI_LhsAutomaton.o -MD -MP -MF $(DEPDIR)/libCUI_Theory_a-CUI_LhsAutomaton.Tpo -c -o libCUI_Theory_a-CUI_LhsAutomaton.o `test -f 'CUI_LhsAutomaton.cc' || echo '$(srcdir)/'`CUI_LhsAutomaton.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libCUI_Theory_a-CUI_LhsAutomaton.Tpo $(DEPDIR)/libCUI_Theory_a-CUI_LhsAutomaton.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CUI_LhsAutomaton.cc' object='libCUI_Theory_a-CUI_LhsAutomaton.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libCUI_Theory_a-CUI_LhsAutomaton.o `test -f 'CUI_LhsAutomaton.cc' || echo '$(srcdir)/'`CUI_LhsAutomaton.cc libCUI_Theory_a-CUI_LhsAutomaton.obj: CUI_LhsAutomaton.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libCUI_Theory_a-CUI_LhsAutomaton.obj -MD -MP -MF $(DEPDIR)/libCUI_Theory_a-CUI_LhsAutomaton.Tpo -c -o libCUI_Theory_a-CUI_LhsAutomaton.obj `if test -f 'CUI_LhsAutomaton.cc'; then $(CYGPATH_W) 'CUI_LhsAutomaton.cc'; else $(CYGPATH_W) '$(srcdir)/CUI_LhsAutomaton.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libCUI_Theory_a-CUI_LhsAutomaton.Tpo $(DEPDIR)/libCUI_Theory_a-CUI_LhsAutomaton.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CUI_LhsAutomaton.cc' object='libCUI_Theory_a-CUI_LhsAutomaton.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCUI_Theory_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libCUI_Theory_a-CUI_LhsAutomaton.obj `if test -f 'CUI_LhsAutomaton.cc'; then $(CYGPATH_W) 'CUI_LhsAutomaton.cc'; else $(CYGPATH_W) '$(srcdir)/CUI_LhsAutomaton.cc'; fi` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/libCUI_Theory_a-CUI_ArgumentIterator.Po -rm -f ./$(DEPDIR)/libCUI_Theory_a-CUI_DagArgumentIterator.Po -rm -f ./$(DEPDIR)/libCUI_Theory_a-CUI_DagNode.Po -rm -f ./$(DEPDIR)/libCUI_Theory_a-CUI_LhsAutomaton.Po -rm -f ./$(DEPDIR)/libCUI_Theory_a-CUI_RhsAutomaton.Po -rm -f ./$(DEPDIR)/libCUI_Theory_a-CUI_Symbol.Po -rm -f ./$(DEPDIR)/libCUI_Theory_a-CUI_Term.Po -rm -f ./$(DEPDIR)/libCUI_Theory_a-CUI_UnificationSubproblem.Po -rm -f ./$(DEPDIR)/libCUI_Theory_a-CUI_UnificationSubproblem2.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/libCUI_Theory_a-CUI_ArgumentIterator.Po -rm -f ./$(DEPDIR)/libCUI_Theory_a-CUI_DagArgumentIterator.Po -rm -f ./$(DEPDIR)/libCUI_Theory_a-CUI_DagNode.Po -rm -f ./$(DEPDIR)/libCUI_Theory_a-CUI_LhsAutomaton.Po -rm -f ./$(DEPDIR)/libCUI_Theory_a-CUI_RhsAutomaton.Po -rm -f ./$(DEPDIR)/libCUI_Theory_a-CUI_Symbol.Po -rm -f ./$(DEPDIR)/libCUI_Theory_a-CUI_Term.Po -rm -f ./$(DEPDIR)/libCUI_Theory_a-CUI_UnificationSubproblem.Po -rm -f ./$(DEPDIR)/libCUI_Theory_a-CUI_UnificationSubproblem2.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-noinstLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: maude-3.1/src/CUI_Theory/CUI_LhsAutomaton.hh0000644000175200017520000001147513576050635015617 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for left hand side automata for theories made from C, Ul, Ur and I axioms. // #ifndef _CUI_LhsAutomaton_hh_ #define _CUI_LhsAutomaton_hh_ #include "lhsAutomaton.hh" class CUI_LhsAutomaton : public LhsAutomaton { NO_COPYING(CUI_LhsAutomaton); public: enum Flags { GREEDY_MATCH_OK = 1, UNIQUE_BRANCH = 2, FORWARD = 4, REVERSE = 8, CONDITIONAL_REVERSE = 16, ID0_COLLAPSE = 32, // Collapse to subpattern1 possible ID1_COLLAPSE = 64, // Collapse to subpattern0 possible IDEM_COLLAPSE = 128, COLLAPSE = ID0_COLLAPSE | ID1_COLLAPSE | IDEM_COLLAPSE }; CUI_LhsAutomaton(CUI_Symbol* topSymbol, bool matchAtTop, Flags flags, int nrVariables); ~CUI_LhsAutomaton(); bool addSubpattern(Term* term, const VariableInfo& variableInfo, NatSet& boundUniquely); // // Standard LhsAutomaton operations. // bool match(DagNode* subject, Substitution& solution, Subproblem*& returnedSubproblem, ExtensionInfo* extensionInfo); #ifdef DUMP void dump(ostream& s, const VariableInfo& variableInfo, int indentLevel); #endif private: enum PatternType { UNDEFINED, GROUND_ALIEN, VARIABLE, NON_GROUND_ALIEN }; struct Subpattern { bool match(DagNode* subject, Substitution& solution, Subproblem*& returnedSubproblem, bool matchAtTop = false, ExtensionInfo* extensionInfo = 0); #ifdef DUMP void dump(ostream& s, const VariableInfo& variableInfo, int indentLevel); #endif PatternType type; union { Term* term; // for ground aliens int varIndex; // for variables }; LhsAutomaton* automaton; // for non ground aliens (and sometimes variables) LhsAutomaton* topAutomaton; // for when we match whole subject at top Sort* sort; // for variables only }; bool freeMatch(DagNode* subject0, DagNode* subject1, Substitution& solution, Subproblem*& returnedSubproblem); bool id0CollapseMatch(DagNode* subject, Substitution& solution, Subproblem*& returnedSubproblem, ExtensionInfo* extensionInfo); bool id1CollapseMatch(DagNode* subject, Substitution& solution, Subproblem*& returnedSubproblem, ExtensionInfo* extensionInfo); bool idemCollapseMatch(DagNode* subject, Substitution& solution, Subproblem*& returnedSubproblem); bool idemCollapseMatch(DagNode* subject, Substitution& solution, Subproblem*& returnedSubproblem, ExtensionInfo* extensionInfo); CUI_Symbol* const topSymbol; const bool matchAtTop; const Flags flags; Subpattern subpattern0; Subpattern subpattern1; // // Data storage for match-time use // Substitution local; friend ostream& operator<<(ostream& s, PatternType type); }; inline bool CUI_LhsAutomaton::Subpattern::match(DagNode* subject, Substitution& solution, Subproblem*& returnedSubproblem, bool matchAtTop, ExtensionInfo* extensionInfo) { if (matchAtTop) { // // Even if the subject has no extension, the top automaton may // need to do something special; like clone the subject's top // node if it gets assigned to a variable that occurs in the // rhs of an equation to avoid intoducing loop into dag. // return topAutomaton->match(subject, solution, returnedSubproblem, extensionInfo); } else if (type == VARIABLE) { DagNode* d = solution.value(varIndex); if (d == 0) { if (subject->checkSort(sort, returnedSubproblem)) { solution.bind(varIndex, subject); return true; } return false; } else { returnedSubproblem = 0; return subject->equal(d); } } else if (type == GROUND_ALIEN) { returnedSubproblem = 0; return term->equal(subject); } return automaton->match(subject, solution, returnedSubproblem); } #ifdef DUMP ostream& operator<<(ostream& s, CUI_LhsAutomaton::Flags flags); ostream& operator<<(ostream& s, CUI_LhsAutomaton::PatternType type); #endif #endif maude-3.1/src/Parser/0000755000175200017520000000000013741222367011507 500000000000000maude-3.1/src/Parser/ChangeLog0000644000175200017520000005560413643206375013215 000000000000002020-04-07 Steven Eker * parser.cc (Parser::parseSentence): added Assert() for bad root nonterminal ===================================Maude128a=========================================== 2019-11-07 Steven Eker * parser.hh: fix typo in reference ===================================Maude125=========================================== 2019-10-03 Steven Eker * bubble.cc (processBubble): only respect excluded tokens openParens == 0 ===================================Maude124=========================================== 2019-01-30 Steven Eker * parser.cc (insertProd): fix bad Assert() caught by newer compiler ===================================Maude121=========================================== 2018-04-18 Steven Eker * pass1.cc (expandCalls): fix bug where we were dereferencing call2 after an calls.expandBy(1) could have invalidated it 2018-04-16 Steven Eker * parser.hh (P): deleted decls for buildExpansionTable(), buildExpansion() * pass2a.cc: becomes pass2.cc * bubble.cc (processBubble, doBubbles, doEmptyBubbles): moved here (doEmptyBubbleReturns): moved here 2018-04-13 Steven Eker * parser.cc (checkForEmptyBubbles): fix signed/unsigned comparison * pass1.cc (scanCalls): rewritten to remove duplicate test and fix badTokenIndex bug * parser.hh (getLastPosition): endToken -> endTokenNr * pass2a.cc: endToken -> endTokenNr throughout * parser.hh (getProductionNumber, getFirstPosition) (getLastPosition): moved here; made inline (P): endToken -> endTokenNr 2018-04-12 Steven Eker * parser.hh (P): delete decls for buildExpansionTables2(), mergeInMap2(), compressCycle(), simplifyMaps(), buildExpansionTable(), buildExpansion() * compile2.cc (buildExpansionTables2): renamed to buildExpansionTables() and moved here (mergeInMap, makeExpansionList): moved here * compile.cc (buildExpansionTables2): check for duplicate SymbolToPrecMaps as we construct expansion lists (mergeInMap2, compressCycle, simplifyMaps): deleted 2018-04-11 Steven Eker * compile.cc (mergeInMap2, compressCycle, simplifyMaps): added (buildExpansionTables2): use simplifyMaps 2018-04-10 Steven Eker * compile.cc (buildExpansionTables2): fixed bug where we were not flip()ing index into a nonterminal before calling mergeInMap() (2 places) (buildExpansionTables2): fixed bug where we were not flip()ing index into a nonterminal before calling makeExpansionList() (buildExpansionTables2): fixed bug where we were checking against index rather than nonterminal (buildExpansionTable): don't consider rules that go to lower prec for the lhs nonterminal 2018-04-06 Steven Eker * compile.cc (makeExpansionList): added * parser.hh (P): added decl for mergeInMap() (P): added typdefs for SymbolToPrecMap, PrecToExpansionMap Expansions * compile.cc (mergeInMap): added (buildExpansionTables): new implementation 2018-04-04 Steven Eker * drp.cc (findReturnOrDeterministicReductionPath) (extractOneStepOfDeterministicReductionPath): new rules representation * pass2a.cc (findReturn, existsCall, findRootReturn) (buildDeterministicReductionPathParseTree, extractNextSubparse) (extractFirstSubparse, extractFirstSubparseToTheLeft): new rules representation * pass1.cc (chaseDeterministicReductionPath, processReturn) (scanCalls, advanceRule, makeCall): new rules representation * compile.cc (buildTerminalDecisionTrees) (buildNonTerminalDecisionTrees, buildExpansionTable) (buildExpansion): new rules representation * parser.hh (P): added decl for ~Parser() * parser.cc (insertProd): new rules representation (dump): new rules representation (~Parser): added * parser.hh (P): make rules a Vector (getNumberOfChildren): new rules representation 2018-03-30 Steven Eker * pass1.cc (expandCalls): use new expansion list (expandCalls): special case single call (expandCalls): check for empty bubbles before using the special case code * parser.hh (P): added data member firstRealCall * parser.cc (parseSentence): set and use firstRealCall * compile.cc (buildExpansion): rewritten to build list from Vector 2018-03-28 Steven Eker * compile.cc (buildTerminalDecisionTrees): removed commented out bubble code (buildNonTerminalDecisionTrees): removed commented out code 2018-03-27 Steven Eker * pass1.cc (chaseDeterministicReductionPath): fixed commented out Assert() (chaseDeterministicReductionPath): deleted Assert() since it turns out that with colliding DRPs we can't check anything about equal nonterminals and unequal precs 2018-03-26 Steven Eker * pass1.cc (chaseDeterministicReductionPath): converted recursion to iteration 2018-03-23 Steven Eker * pass1.cc (chaseDeterministicReductionPath): reimplemented using extractOneStepOfDeterministicReductionPath() (chaseDeterministicReductionPath): make a dummy memo item before recursive call rather than a real memo item after (processReturn): fix up dummy memo items 2018-03-22 Steven Eker * pass1.cc (processReturn): rewritten to avoid Vector of deferred returns 2018-03-19 Steven Eker * pass1.cc (chaseDeterministicReductionPath): code cleaning ===================================Maude117=========================================== 2018-03-15 Steven Eker * parser.hh (P): added haveBubbles and haveEmptyBubbles data members * parser.cc (parseSentence): use haveBubbles and haveEmptyBubbles flags (insertProd): update haveBubbles and haveEmptyBubbles flags (Parser): clear haveBubbles and haveEmptyBubbles flags akonadi:?item=62070&type=message%2Frfc822 * parser.hh (P): deleted member bubbleIndex from struct Rule * parser.cc (insertProd): don't set flags member (insertProd): don't set bubbleIndex * compile.cc (buildTerminalDecisionTrees): BUBBLE_TERMINAL_BASE -> BUBBLE_TERMINAL * parser.hh (P): deleted enum RuleFlags; deleted flags member from struct Rule * pass2a.cc (extractFirstSubparse): check for BUBBLE_TERMINAL symbol rather than BUBBLE_INCLUSION flag (extractNextSubparse): check for BUBBLE_TERMINAL symbol rather than BUBBLE_INCLUSION flag * parser.hh (P): BUBBLE_TERMINAL_BASE -> BUBBLE_TERMINAL * parser.cc (insertProd): BUBBLE_TERMINAL_BASE -> BUBBLE_TERMINAL (insertProd): set bubble rule gather to 1 to match comment * parser.hh (P): deleted VIRTUAL from enum Special * pass2.cc: deleted * parser.hh (P): deleted declarations for extractNext() and lookForDeterministicReductionPath() * pass1.cc (chaseDeterministicReductionPath): use ParserLog() * drp.cc (extractDeterministicReductionPath): reimplemented using extractOneStepOfDeterministicReductionPath() 2018-03-14 Steven Eker * parser.hh (P): updated decl for findReturnOrDeterministicReductionPath() * drp.cc (findReturnOrDeterministicReductionPath): take endTokenNr * pass2a.cc (extractFirstSubparse): pass endTokenNr to findReturnOrDeterministicReductionPath() (extractNextSubparse): pass endTokenNr to findReturnOrDeterministicReductionPath() * drp.cc (findReturnOrDeterministicReductionPath): abandon DRPs if the first return above trigger is concrete (returnExists): added * parser.hh (P): added decl for extractOneStepOfDeterministicReductionPath() * drp.cc (existsMemo, findReturnOrDeterministicReductionPath): use ParserLog() (extractOneStepOfDeterministicReductionPath): added 2018-03-12 Steven Eker * pass2a.cc (extractFirstSubparse): clean up handling of nextReturnToCheck and nextToken (extractNextSubparse): set nextReturnToCheck in all cases (buildDeterministicReductionPathParseTree): set nextReturnToCheck to NONE is all cases now that caller takes responsibility for this (extractFirstSubparseToTheLeft): check for ambiguity now we can be called by buildDeterministicReductionPathParseTree() (buildDeterministicReductionPathParseTree): use extractFirstSubparseToTheLeft() to handle nonterminal to the left (buildDeterministicReductionPathParseTree): delete commented out code 2018-03-09 Steven Eker * pass2a.cc (extractFirstSubparse): patch parse node one below the top of a DRP to make sure we search for alternatives (extractNextSubparse): symmetric hack 2018-03-08 Steven Eker * pass2a.cc (extractNextParse): take account of extractNextSubparse(0) deleting parse node 0 on failure (extractNextSubparse): don't delete the given parse node; instead delete son nodes if extractNextSubparse() fails on them (extractNextParse): unmade previous changes now that extractNextSubparse() doensn't delete given parse node (extractNextSubparse): fix bug where we were deleting wrong parse node 2018-03-07 Steven Eker * pass2a.cc (extractNextSubparse): implemented * parser.hh (P): added decl for extractFirstSubparseToTheLeft() * pass2a.cc (extractFirstSubparseToTheLeft): added 2018-03-05 Steven Eker * parser.cc (checkForEmptyBubbles): call doEmptyBubbleReturns() (parseSentence): set lastReturnProcessed = NONE * parser.hh (P): lastReturnProcessed becomes an int (P): added decl for doEmptyBubbleReturns() * parser.cc (parseSentence): don't initialize lastReturnProcessed * pass1.cc (doEmptyBubbleReturns): added (doReturns): don't handle empty bubble case 2018-03-02 Steven Eker * parser.cc (insertProd): add Assert() and remove handling of epsilon rules * parser.hh (P): added decl for checkForEmptyBubbles() * parser.cc (insertProd): don't initialize epsilonRule, bubbleRule (checkForEmptyBubbles): added (parseSentence): use checkForEmptyBubbles() * parser.hh (P): deleted data members epsilonRule, bubbleRule and bubbleMap * pass1.cc (processReturn): removed all bubble specific code (chaseDeterministicReductionPath): removed bubble Assert()s * parser.hh (P): updated decl for processBubble() * pass1.cc (processBubble): turn gotos into returns (processBubble): don't take ruleNr (doBubbles): don't pass ruleNr to processBubble() 2018-03-01 Steven Eker * pass1.cc (advanceRule): removed bubble handling code * parser.hh (P): deleted decls for checkBubbleTerminal() * parser.cc (parseSentence): deleted commented out bubble code (makeBubbleProductions): deleted (insertProd): deleted commented out code * pass1.cc (doEpsilonCalls): deleted (scanCalls): deleted commented out early failure and bubble handling code (checkBubbleTerminal): deleted * parser.hh (P): updated decl for doEmptyBubbles(); deleted decl for doEpsilonCalls(), makeBubbleProductions() * pass1.cc (doReturns): redo already processed zero length returns (doEmptyBubbles): return void * parser.cc (parseSentence): call doEmptyBubbles() (parseSentence): doBubbles() after doEmptyBubbles() * parser.hh (P): added decl for doEmptyBubbles() 2018-02-28 Steven Eker * pass1.cc (doEmptyBubbles): added 2018-02-27 Steven Eker * pass1.cc (processBubble): fix bug where we were incrementing counter in two different places * compile.cc (buildTerminalDecisionTrees): allow multiple ::= BUBBLE_TERMINAL_BASE rules * pass1.cc (scanCalls): don't handle bubbles here * parser.cc (insertProd): initialize firstBubbles[] entries (insertProd): push bubble on front of firstBubbles[] list (insertProd): use BUBBLE_TERMINAL_BASE as dummy terminal for bubble rule (insertProd): set BUBBLE_INCLUSION flag here (parseSentence): don't call makeBubbleProductions() (parseSentence): call doBubbles() * parser.hh (P): added decl for doBubbles() (P): added firstBubble data member (P): added nextBubble field to Bubble * pass1.cc (processReturn): handle upperBound == NONE case (doBubbles): added 2018-02-26 Steven Eker * parser.hh (P): adde decl for processBubble() * pass1.cc (processBubble): added 2018-02-23 Steven Eker * parser.cc (makeBubbleProductions): set bubbleIndex in the BUBBLE_EXTENSION and BUBBLE_PAREN cases * pass1.cc (chaseDeterministicReductionPath): Assert() bubbler user is not seen in DRP (processReturn): don't try a DRP for a return if any BUBBLE_USER was seen as a user for the recognized nonterminal (processReturn): skip bubble extensions that produce too large a bubble * parser.cc (makeBubbleProductions): set BUBBLE_EXTENSION and BUBBLE_PAREN flags (makeBubbleProductions): only add rules for bubble parentheses if upperbound >= 2 (insertProd): clear flags field of rule * pass2a.cc (extractFirstSubparse): BUBBLE_RULE -> BUBBLE_INCLUSION * pass1.cc (processReturn): BUBBLE_RULE -> BUBBLE_INCLUSION * parser.hh (P): removed BUBBLE_RULE; added BUBBLE_INCLUSION, BUBBLE_EXTENSION, BUBBLE_PAREN, BUBBLE_USER * parser.cc (makeBubbleProductions): BUBBLE_RULE -> BUBBLE_INCLUSION 2018-02-22 Steven Eker * parser.hh (P): added decl for processReturn() * pass1.cc (doReturns): reimplemented in terms of processReturn() (processReturn): added 2018-02-20 Steven Eker * pass1.cc (doReturns): check for return of implicit bubble rule start and if so, check lowerBound * parser.cc (makeBubbleProductions): fill out bubbleIndex field * parser.hh (P): added bubbleIndex to struct Rule 2018-02-16 Steven Eker * pass1.cc (makeReturn): use parserLog() * parser.cc (parseSentence): deal with multiple nested epsilon calls at the end of the sentence 2018-02-15 Steven Eker * parser.hh (P): updated decl for makeReturn() * pass1.cc (makeReturn): return whether we actually made a return or not * parser.cc (parseSentence): call doReturns() and expandCalls() after successful call to doEpsilonCalls() (makeBubbleProductions): fix gather for parens rule (parseSentence): handle epsilon rules happening after the last token (parseSentence): allow multiple doEpsilonCalls() per parse list * pass1.cc (doReturns): use lastReturnsProcessed so we can restart if more returns added by epsilon calls * parser.cc (parseSentence): initialize lastReturnProcessed * parser.hh (P): added decl for doEpsilonCalls() (P): added data member lastReturnProcessed * parser.cc (parseSentence): call doEpsilonCalls() * pass1.cc (doEpsilonCalls): added 2018-02-14 Steven Eker * parser.cc (insertProd): set epsilonRule[] to NONE (insertProd): store epsilon rules (makeBubbleProductions): introduce epsilon productions if a bubble could be empty (insertProd): change gather to 2 so we could take epsilon production (makeBubbleProductions): add rule for parens enclosing empty list of tokens, in the case that this is not handled with an epsilon rule * parser.hh (P): added epsilonRule data member 2018-02-13 Steven Eker * parser.cc (parseSentence): don't clear unexpectedEndOfTokens * pass1.cc (advanceRule): don't set unexpectedEndOfTokens * parser.hh (getErrorPosition): moved here (P): deleted data member unexpectedEndOfTokens * pass2a.cc (getErrorPosition): use badTokenIndex (getErrorPosition): deleted commented out code * pass1.cc (advanceRule): update badTokenIndex after a successful token match (scanCalls): update badTokenIndex after an implied token match or a bubble terminal match; call makeReturn() directly for bubble terminal productions 2018-02-12 Steven Eker * parser.cc (parseSentence): clear badTokenIndex * parser.hh (P): added data member badTokenIndex * pass2a.cc (getErrorPosition): use unexpectedEndOfTokens * pass1.cc (scanCalls): don't check for sufficient tokens (doReturns): don't check for sufficient tokens (2 places) * parser.cc (parseSentence): clear unexpectedEndOfTokens * parser.hh (P): added data member unexpectedEndOfTokens * pass1.cc (advanceRule): check for end of tokens 2018-02-09 Steven Eker * pass2a.cc (extractFirstSubparse): don't expand rules withe the BUBBLE_RULE flag * parser.hh (P): added flags member to struct Rule; added enum RuleFlags * parser.cc (makeBubbleProductions): use ParserLog() (insertProd): use ParserLog() (makeBubbleProductions): set BUBBLE_RULE flag in fixed up rule 2018-02-05 Steven Eker * parser.cc: moved ParserLog() macro here (parseSentence): use ParserLog() 2018-02-01 Steven Eker * pass2a.cc (buildDeterministicReductionPathParseTree): fixed bug where we were missing drp[0] 2018-01-30 Steven Eker * parser.hh (P): added decls for extractFirstSubparse(), extractNextSubparse(), buildDeterministicReductionPathParseTree() * pass2a.cc (buildDeterministicReductionPathParseTree): added 2018-01-25 Steven Eker * pass2a.cc: created * parser.hh (P): added nextReturnToCheck field to ParseNode 2018-01-24 Steven Eker * parser.cc (dump): dump rule and return indices 2018-01-23 Steven Eker * parser.cc (dump): handle memo items. 2018-01-22 Steven Eker * pass2.cc (extractNext): check for DRPs when backtracking; not sure how to handle this yet 2018-01-19 Steven Eker * pass2.cc (extractNext): check for alternative DRP in right recursive case (extractNext): push ambiguity checks into right-recursive and non-right-recursive branches * parser.hh (P): changed decl to findRootReturn() * pass2.cc (findReturn): renamed two arg version to findRootReturn() (extractNextParse): use findRootReturn() 2018-01-15 Steven Eker * parser.hh (P): deleted decl for lookForDeterministicReductionPath() * drp.cc (lookForDeterministicReductionPath): deleted 2017-12-22 Steven Eker * pass1.cc (scanCalls): handle bubble terminal rules (advanceRule): handle bubble terminal symbols (checkBubbleTerminal): added * parser.hh (P): added data member bubbleRule * compile.cc (buildTerminalDecisionTrees): handle terminal productions with bubble terminal as lead symbol * parser.hh (P): added decl for makeBubbleProductions() * parser.cc (makeBubbleProductions): added * parser.hh (P): added decl for bubble version of insertProd() (P): added struct Bubble (P): added data member bubbles * parser.cc (getLastPosition): added (insertProd): added bubble version * parser.hh (P): added decl for getLastPosition() 2017-12-21 Steven Eker * parser.hh: added decl for getErrorPosition() 2017-12-20 Steven Eker * pass1.cc (chaseDeterministicReductionPath): updated comments to explain why prec match must be exact and we can't increase the prec to callers require for new memo items 2017-12-18 Steven Eker * drp.cc: #ifdef PARSER_DEBUG debugging prints * pass2.cc: #ifdef PARSER_DEBUG debugging prints * pass1.cc: #ifdef PARSER_DEBUG debugging prints 2017-12-15 Steven Eker * pass2.cc (extractNext): added code to look for alternative parses in DRPs (extractNext): set endToken correctly; contract parseTree on failure (extractNext): fix bug where we we're setting nextSibling after a call to extractNext(,, NONE) created a new node * drp.cc (buildDeterministicReductionPathTree): create VIRTUAL retuns * pass2.cc (extractNext): check for VIRTUAL returns * parser.hh (P): added enum Special * pass2.cc (extractNext): fix bug where we were falling out of DRP case into regular case * drp.cc (buildDeterministicReductionPathTree): fix bug where we weren't setting endToken before handling nonterminals to the left of the right recursion (buildDeterministicReductionPathTree): fix off-by-one bug in nrSons 2017-12-14 Steven Eker * drp.cc (buildDeterministicReductionPathTree): fill out ruleNr and startTokenNr fields * parser.cc (getFirstPosition): use startTokenNr field (getProductionNumber): use ruleNr field * pass2.cc (extractNext): fill out ruleNr and startTokenNr fields * parser.hh (P): added decl for buildDeterministicReductionPathTree() (P): added ruleNr and startTokenNr to struct ParseNode * pass2.cc (extractNext): use buildDeterministicReductionPathTree() * drp.cc (buildDeterministicReductionPathTree): added * pass2.cc (extractNext): check for virtual returns 2017-12-13 Steven Eker * parser.hh (P): added decls for existsMemo() and findReturnOrDeterministicReductionPath() * drp.cc (existsMemo): created (findReturnOrDeterministicReductionPath): created 2017-12-12 Steven Eker * drp.cc (extractDeterministicReductionPath): added * pass2.cc (extractNext): call lookForDeterministicReductionPath() * drp.cc (lookForDeterministicReductionPath): added 2017-12-11 Steven Eker * pass1.cc (doReturns): make memo item when DRP seen and don't do normal deferred return processing (doReturns): use memo items to avoid making returns 2017-12-08 Steven Eker * parser.hh (P): add reference to Leo paper 2017-11-20 Steven Eker * pass1.cc (chaseDeterministicReductionPath): use memo items 2017-11-17 Steven Eker * parser.hh (P): added typedef IntPair; added decl for makeMemoItem(); updated decl for chaseDeterministicReductionPath() * parser.cc (parseSentence): clear memoItems (parseSentence): initialize firstMemoItems * pass1.cc (makeMemoItem): added * parser.hh (P): added struct MemoItem and data members memoItems and firstMemoItems 2017-11-16 Steven Eker * pass1.cc (doReturns): check for start of a deterministic reduction path (chaseDeterministicReductionPath): added (doReturns): call chaseDeterministicReductionPath() 2017-11-15 Steven Eker * parser.hh (P): added struct DeferredReturn 2017-11-13 Steven Eker * parser.hh (flip): moved here from parse.cc (ruleLt): moved out of class body * compile.cc (buildTerminalDecisionTrees): deletedd commented out code; added comments 2017-11-03 Steven Eker * parser.hh (getNumberOfChildren): added 2017-11-02 Steven Eker * parser.hh (P): deleted decl for ruleCompare() * compile.cc (buildTerminalDecisionTrees) (buildNonTerminalDecisionTrees): use ruleLt (ruleCompare): deleted * parser.hh: added ruleLt * parser.cc: deleted explicit template instantiations and GNU pragma * compile.cc: restored from Maude71 with the rest of the Earley based parser code maude-3.1/src/Parser/compile2.cc0000644000175200017520000001523013576050735013455 00000000000000// // Compile productions rules into expansion lists for left recursion. // bool Parser::mergeInMap(SymbolToPrecMap& target, const SymbolToPrecMap& donor, int targetNonterminal, int targetPrec) { // // We merge the expansions from donor into target, skipped any // expansions that are worse equal to (targetNonterminal, targetPrec). // bool changed = false; FOR_EACH_CONST(i, SymbolToPrecMap, donor) { int nonterminal = i->first; int prec = i->second; if (nonterminal == targetNonterminal && prec <= targetPrec) continue; // donor mapping provides no broadening // // See if we already map the nonterminal. // SymbolToPrecMap::iterator j = target.find(nonterminal); if (j == target.end()) { target.insert(*i); changed = true; } else { if (j->second < prec) { j->second = prec; changed = true; } } } return changed; } int Parser::makeExpansionList(const SymbolToPrecMap mapForm, int nonterminal) { // // Convert the expansions in mapForm to a list of calls. // int nrExpansions = mapForm.size(); int startCall = calls.size(); calls.expandBy(nrExpansions); int nextCall = startCall; // // Want to put nonterminal expansion first, if it exists. // const SymbolToPrecMap::const_iterator nt = mapForm.find(nonterminal); if (nt != mapForm.end()) { Call& call = calls[nextCall]; ++nextCall; call.nonTerminal = nonterminal; call.maxPrec = nt->second; call.firstContinuation = NONE; call.nextCall = nextCall; } FOR_EACH_CONST(i, SymbolToPrecMap, mapForm) { if (i->first != nonterminal) { Call& call = calls[nextCall]; ++nextCall; call.nonTerminal = i->first; call.maxPrec = i->second; call.firstContinuation = NONE; call.nextCall = nextCall; } } calls[nextCall - 1].nextCall = NONE; // patch tail of list return startCall; } void Parser::buildExpansionTables() { int nrNonTerminals = firstTerminalRules.length(); // // First we make an initial collection of expansion tables for each // nonterminal by considering each rule having its rhs headed by a nonterminal. // Expansions expansionMaps(nrNonTerminals); // // For each nonterminal. // for (int i = 0; i < nrNonTerminals; ++i) { // // Get the empty map from precs to expansions maps for this nonterminal. // PrecToExpansionMap& m = expansionMaps[i]; int nonterminal = flip(i); // // Look for each nonterminal rule returning the nonterminal // for (int r = firstNonTerminalRules[i]; r != NONE; r = rules[r]->nextRule) { Rule* rule = rules[r]; int prec = rule->prec; int nonterminal2 = rule->rhs[0].symbol; int prec2 = rule->rhs[0].prec; if (nonterminal2 == nonterminal && prec2 <= prec) continue; // rule provides no broadening of nonterminal // // See if the expansion map for (nonterminal, prec) // needs updating. // SymbolToPrecMap& m2 = m[prec]; SymbolToPrecMap::iterator j = m2.find(nonterminal2); if (j == m2.end()) m2.insert(SymbolToPrecMap::value_type(nonterminal2, prec2)); // new entry else { // // Maybe update existing entry. // if (j->second < prec2) j->second = prec2; } } // // Now we close upwards by merging the map for // (N, p) into all maps for (N, p') with p' > p. // if (!(m.empty())) { const PrecToExpansionMap::iterator e = m.end(); PrecToExpansionMap::iterator prev = m.begin(); PrecToExpansionMap::iterator next = prev; for (++next; next != e;) { PrecToExpansionMap::iterator current = next; ++next; mergeInMap(current->second, prev->second, nonterminal, current->first); prev = current; } } } // // Next we propagate one step expansions up to fixed point. // bool changed; do { changed = false; for (int i = 0; i < nrNonTerminals; ++i) { // // Get the empty map from precs to expansions maps for this nonterminal. // PrecToExpansionMap& m = expansionMaps[i]; int nonterminal = flip(i); // // Go through each of the maps in ascending prec order. // const PrecToExpansionMap::iterator endj = m.end(); for (PrecToExpansionMap::iterator j = m.begin(); j != endj; ++j) { int prec = j->first; SymbolToPrecMap& m2 = j->second; // // We now have m2 which is the current expansion for // (nonterminal, prec) pair (i, prec). We want to update // it by merging in expansions for (nonterminal, prec) // pairs reachable from it. // // This merging will not delete entries so we don't // worry that we are merging entries into the map we // are iterating over. // FOR_EACH_CONST(k, SymbolToPrecMap, m2) { int nonterminal2 = k->first; int prec2 = k->second; PrecToExpansionMap& m3 = expansionMaps[flip(nonterminal2)]; if (!(m3.empty())) { // // We want the largest prec that is <= prec2 but there // is no function for this. // // We find the smallest prec that > prec2 // PrecToExpansionMap::const_iterator l = m3.upper_bound(prec2); if (l == m3.begin()) { // // All precs in m3 are > prec2; there are none <= prec2 // } else { --l; // must point to a prec that is <= prec2; need to check this for m3.end() changed |= mergeInMap(m2, l->second, nonterminal, prec); } } } } } } while (changed); // // Finally we convert the expansionMaps into lists of calls. // expansions.expandTo(nrNonTerminals); for (int i = 0; i < nrNonTerminals; ++i) { Vector& expansionVector = expansions[i]; // // Get the map from precs to expansions maps for this nonterminal. // PrecToExpansionMap& m = expansionMaps[i]; int nonterminal = flip(i); const SymbolToPrecMap* last = 0; FOR_EACH_CONST(j, PrecToExpansionMap, m) { if (last != 0 && j->second == *last) continue; last = &(j->second); // // Add expansion list. // int nrExpansions = expansionVector.size(); expansionVector.resize(nrExpansions + 1); Expansion& expansion = expansionVector[nrExpansions]; expansion.prec = j->first; expansion.firstExpansionCall = makeExpansionList(j->second, nonterminal); } } } void Parser::dumpMap(PrecToExpansionMap& m, int nonterminal) { FOR_EACH_CONST(i, PrecToExpansionMap, m) { cout << nonterminal << "/" << i->first << " -> "; FOR_EACH_CONST(j, SymbolToPrecMap, i->second) { cout << " " << j->first << "/" << j->second; } cout << endl; } } maude-3.1/src/Parser/parser.hh0000644000175200017520000001732013576050635013252 00000000000000// // Class for Earley-Leo style general context free parser with extreme // prunning heuristic; we do not support epsilon productions. // // We extend the algorithm in: // Joop M. I. M. Leo, A general context-free parsing algorithm running in linear // time on every LR(k) grammar without using lookahead, Theoretical Computer Science, // 83:165-176, 1991. // to handle the prec/gather and bubble extensions needed by Maude. // #ifndef _parser_hh_ #define _parser_hh_ #include class Parser { public: Parser(); ~Parser(); void insertProd(int nonTerminal, const Vector& rhs, const int prec, const Vector& gather); void insertProd(int nonTerminal, int lowerBound, int upperBound, int leftParen, int rightParen, const Vector& excludedTerminals); int parseSentence(const Vector& sentence, int root); bool extractNextParse(); int getProductionNumber(int node); int getChild(int node, int sonNr); int getFirstPosition(int node); int getLastPosition(int node); // actually one beyond last token void dump(); int getNumberOfChildren(int node); // // If no parses are found, this returns the index of the first token at which // no legal parse is possible, or sentence.size() if we ran out of tokens // with parses still possible. // int getErrorPosition(); private: enum Special { BUBBLE_TERMINAL = 1000000000 // special terminal symbol for bubbles }; struct Pair { int symbol; int prec; }; struct Expansion { int prec; int firstExpansionCall; }; struct Rule { int index; int nextRule; int equal; int smaller; int bigger; int prec; int nonTerminal; int nrNonTerminals; Vector rhs; }; struct Bubble { int nonTerminal; int lowerBound; int upperBound; int leftParen; int rightParen; int ruleNr; // for rule we need to fix up int nextBubble; // for the same nonterminal Vector excludedTerminals; }; struct Continuation { int ruleNr; int rhsPosition; int startTokenNr; int nextContinuation; }; struct Call { int nonTerminal; int maxPrec; int firstContinuation; int nextCall; }; struct Return { int ruleNr; int startTokenNr; int nextReturn; }; struct DeferredReturn { // // A Deterministic Reduction Path is instantiated as a Vector of deferred returns. // int ruleNr; int startTokenNr; }; struct MemoItem { // // Entry point to a Deterministic Reduction Path. // // The first two items are what we are looking for when we encounter the path. // int nonTerminal; int maxPrec; // // The next two items are the final return at the top of the path. // int ruleNr; int startTokenNr; // // The final item is a link to the next MemoItem at this token position. // int nextMemoItem; }; struct ParseNode { int returnIndex; int ruleNr; int startTokenNr; int nextReturnToCheck; int endTokenNr; int firstSon; int nextSibling; }; static int flip(int i); static bool ruleLt(Rule* const& r1, Rule* const& r2); typedef pair IntPair; typedef pair IntBoolPair; typedef map SymbolToPrecMap; typedef map PrecToExpansionMap; typedef Vector Expansions; // // Compile // void buildExpansionTables(); void buildTerminalDecisionTrees(); void buildNonTerminalDecisionTrees(); int buildDecisionTree(Vector& ruleTable, Vector& starts, int first, int last); bool mergeInMap(SymbolToPrecMap& target, const SymbolToPrecMap& donor, int targetNonterminal, int targetPrec); int makeExpansionList(const SymbolToPrecMap mapForm, int nonterminal); void dumpMap(PrecToExpansionMap& m, int nonterminal); // // Pass 1. // void doReturns(int tokenNr, const Vector& sentence); void processReturn(int tokenNr, int startTokenNr, int ruleNr, const Vector& sentence); void expandCalls(int tokenNr); void scanCalls(int tokenNr, const Vector& sentence); void advanceRule(int ruleNr, int pos, int startTokenNr, int tokenNr, const Vector& sentence); void makeCall(int tokenNr, int ruleNr, int rhsPosition, int startTokenNr); bool makeReturn(int tokenNr, int ruleNr, int startTokenNr); IntPair chaseDeterministicReductionPath(int ruleNr, int startTokenNr); int makeMemoItem(int nonTerminal, int maxPrec, int ruleNr, int startTokenNr, int nextMemoItem); void processBubble(int tokenNr, int bubbleNr, const Vector& sentence); void doBubbles(int tokenNr, const Vector& sentence); void doEmptyBubbles(int tokenNr); void checkForEmptyBubbles(int tokenNr, const Vector& sentence); void doEmptyBubbleReturns(int tokenNr, const Vector& sentence); // // Pass 2. // int findRootReturn(int i, int nonTerminal); int findReturn(int i, int ruleNr, int rhsPosition, int startTokenNr); bool existsCall(int parseListNr, int ruleNr, int rhsPosition, int startTokenNr); bool existsMemo(int startTokenNr, int nonTerminal, int prec, int ruleNrToFind, int startTokenNrToFind); IntBoolPair findReturnOrDeterministicReductionPath(int i, int ruleNr, int startTokenNr, int endTokenNr); void extractFirstSubparse(int nodeNr); bool extractNextSubparse(int nodeNr); void extractFirstSubparseToTheLeft(int nodeNr, int rightPos, int rightSibling); int buildDeterministicReductionPathParseTree(int endTokenNr, int triggeReturnIndex, const Vector& drp, int drpIndex); IntPair extractOneStepOfDeterministicReductionPath(int ruleNr, int startTokenNr); void extractDeterministicReductionPath(int ruleNr, int startTokenNr, Vector& drp); void buildDeterministicReductionPathTree(int endTokenNr, int triggerRet, const Vector& drp, int drpIndex); bool returnExists(int i, int ruleNr, int startTokenNr); bool haveBubbles; bool haveEmptyBubbles; Vector bubbles; // // Compile time structures. // Vector firstTerminalRules; // first terminal rule for each nonterminal Vector firstNonTerminalRules; // first nonterminal rule for each nonterminal Vector firstBubbles; // first bubble for each nonterminal Vector rules; // all the grammar rules Vector > expansions; // table of expansions for each nonterminal Vector terminalDecisionTrees; Vector nonTerminalDecisionTrees; int firstRealCall; // index of first call that isn't used for expansion tables // // Parse time structures. // int rootNonTerminal; bool ambiguous; // more than one parse seen int badTokenIndex; // one past the last token for which a valid partial parse has been seen int lastReturnProcessed; Vector firstCalls; Vector firstReturns; Vector firstMemoItems; Vector calls; Vector continuations; Vector returns; Vector memoItems; Vector parseTree; }; inline int Parser::flip(int i) { return ~i; // map nonTerminal number <-> vector index } inline bool Parser::ruleLt(Rule* const& r1, Rule* const& r2) { int r = r1->rhs[0].symbol - r2->rhs[0].symbol; if (r != 0) return r < 0; return r1->prec < r2->prec; } inline int Parser::getNumberOfChildren(int node) { return rules[getProductionNumber(node)]->nrNonTerminals; } inline int Parser::getProductionNumber(int node) { return parseTree[node].ruleNr; } inline int Parser::getFirstPosition(int node) { return parseTree[node].startTokenNr; } inline int Parser::getLastPosition(int node) { return parseTree[node].endTokenNr; } inline int Parser::getErrorPosition() { return badTokenIndex; } #endif maude-3.1/src/Parser/Makefile.am0000644000175200017520000000036313265177150013465 00000000000000noinst_LIBRARIES = libparser.a libparser_a_CPPFLAGS = \ -I$(top_srcdir)/src/Utility libparser_a_SOURCES = \ parser.cc EXTRA_DIST = \ compile.cc \ compile2.cc \ pass1.cc \ bubble.cc \ pass2.cc \ drp.cc noinst_HEADERS = \ parser.hh maude-3.1/src/Parser/compile.cc0000644000175200017520000000656313576050735013404 00000000000000// // Compile productions rules into ternary trees. // void Parser::buildTerminalDecisionTrees() { Vector ruleTable; Vector starts; int nrNonTerminals = firstTerminalRules.length(); terminalDecisionTrees.expandTo(nrNonTerminals); for (int i = 0; i < nrNonTerminals; i++) { // // Collect all the terminal rules that have i as the nonterminal. // ruleTable.contractTo(0); for (int r = firstTerminalRules[i]; r != NONE; r = rules[r]->nextRule) ruleTable.append(rules[r]); // // Sort them by rhs start symbol, then prec, smallest first. // sort(ruleTable.begin(), ruleTable.end(), ruleLt); // // Make a list of the index in ruleTable of the first production // for each rhs start symbol. // int nrRules = ruleTable.length(); int lastSymbol = UNBOUNDED; // bigger than any terminal symbol starts.contractTo(0); for (int j = 0; j < nrRules; j++) { int startSymbol = ruleTable[j]->rhs[0].symbol; if (startSymbol == BUBBLE_TERMINAL) { // // ::= BUBBLE_TERMINAL is a special rule // that will be the last one, since BUBBLE_TERMINAL is bigger // than any real terminal, and which shouldn't go in the tree. // ruleTable.contractTo(j); break; } if (startSymbol != lastSymbol) { lastSymbol = ruleTable[j]->rhs[0].symbol; starts.append(j); } } // // Make a decision tree by divid-and-conqueor. // terminalDecisionTrees[i] = buildDecisionTree(ruleTable, starts, 0, starts.length() - 1); } } void Parser::buildNonTerminalDecisionTrees() { Vector ruleTable; Vector starts; int nrNonTerminals = firstTerminalRules.length(); nonTerminalDecisionTrees.expandTo(nrNonTerminals); for (int i = 0; i < nrNonTerminals; i++) { // // Collect all the terminal rules that have i as the nonterminal. // ruleTable.contractTo(0); for (int r = firstNonTerminalRules[i]; r != NONE; r = rules[r]->nextRule) ruleTable.append(rules[r]); // // Sort them by rhs start symbol, then prec, smallest first. // sort(ruleTable.begin(), ruleTable.end(), ruleLt); // // Make a list of the index in ruleTable of the first production // for each rhs start symbol. // int nrRules = ruleTable.length(); int lastSymbol = UNBOUNDED; // bigger than any terminal symbol starts.contractTo(0); for (int j = 0; j < nrRules; j++) { if (ruleTable[j]->rhs[0].symbol != lastSymbol) { lastSymbol = ruleTable[j]->rhs[0].symbol; starts.append(j); } } nonTerminalDecisionTrees[i] = buildDecisionTree(ruleTable, starts, 0, starts.length() - 1); } } int Parser::buildDecisionTree(Vector& ruleTable, Vector& starts, int first, int last) { if (first > last) return NONE; int i = (first + last) / 2; int j = starts[i]; ruleTable[j]->smaller = buildDecisionTree(ruleTable, starts, first, i - 1); int k = j; int end = ruleTable.length() - 1; for (; k < end; k++) { if (ruleTable[k]->rhs[0].symbol != ruleTable[k + 1]->rhs[0].symbol) break; ruleTable[k]->equal = ruleTable[k + 1]->index; } ruleTable[k]->equal = NONE; ruleTable[j]->bigger = buildDecisionTree(ruleTable, starts, i + 1, last); return ruleTable[j]->index; } maude-3.1/src/Parser/pass1.cc0000644000175200017520000004306513576050735013001 00000000000000// // First pass: construct a compact representation of all parses. // Parser::IntPair Parser::chaseDeterministicReductionPath(int ruleNr, int startTokenNr) { // // Find the DRP starting at (ruleNr, startTokenNr) and return the top return // Use existing memo items to short-circuit this search where possible. // Made a place holder memo item for the lhs (nonterminal, prec) of the rule // for any pair encounters that isn't the top return. // ParserLog("chaseDeterministicReductionPath() called for ruleNr " << ruleNr << " startTokenNr = " << startTokenNr); for (;;) { Rule* rule = rules[ruleNr]; int nonTerminal = rule->nonTerminal; int prec = rule->prec; // // If we have a memo item that takes us to the top of the DRP, // return the ruleNr and startTokenNr for the top return. // for (int i = firstMemoItems[startTokenNr]; i != NONE;) { MemoItem& m = memoItems[i]; i = m.nextMemoItem; // // We require an exact match for precs. Clearly we couldn't use a // memo item with a lower prec since our rule simply doesn't satisfy it. // Less obviously, using a memo item with a higher prec means we // could lose behavior available with the lower prec that isn't // captured by the memo item. // if (m.nonTerminal == nonTerminal && m.maxPrec == prec) { ParserLog("vvvvvvvvvvvvvvvvvvvvvvvvvv" << "\n Using memo item in set " << startTokenNr << " when looking for nonterminal " << nonTerminal << " at prec " << prec << " we saw a DRP that ends at rule " << m.ruleNr << " to set " << m.startTokenNr << "\n^^^^^^^^^^^^^^^^^^^^^"); return IntPair(m.ruleNr, m.startTokenNr); } // // It's possible (with colliding DRPs) that nonterminals are equal // while precs differ, with both m.maxPrec < prec and m.maxPrec > prec // possible since we don't know which order returns will be encountered in. // } // // See if we can extend DRP upwards by one step. // IntPair p = extractOneStepOfDeterministicReductionPath(ruleNr, startTokenNr); if (p.first == NONE) { // // No, so what we have corresponds to the top return. // break; } // // Yes, so what we have is not the top return. We will require a // memo item that maps (nonTerminal, prec) to the top return. We create // a place holder now in the parse list for startTokenNr and leave // it to the caller to fill in the top return. // firstMemoItems[startTokenNr] = makeMemoItem(nonTerminal, prec, // must be the same as we're looking for to be effective NONE, // dummy NONE, // dummy firstMemoItems[startTokenNr]); ParserLog("################" << "\n made memo item place holder in set " << startTokenNr << " when looking for nonterminal " << nonTerminal << " at prec " << prec << "\n###################"); ruleNr = p.first; startTokenNr = p.second; } return IntPair(ruleNr, startTokenNr); } void Parser::processReturn(int tokenNr, int startTokenNr, int ruleNr, const Vector& sentence) { // // In list tokenNr we have a return for ruleNr starting at startTokenNr. // ParserLog("processReturn() tokenNr=" << tokenNr << " startTokenNr=" << startTokenNr << " ruleNr=" << ruleNr); Rule* rule = rules[ruleNr]; // // Get the (nonterminal, prec) we recognized. // int nonTerminal = rule->nonTerminal; int prec = rule->prec; ParserLog("nonterminal=" << nonTerminal << " prec=" << prec); // // See if we handled this (nonterminal, prec) at startToken before and // memoized a DRP. // for (int j = firstMemoItems[startTokenNr]; j != NONE;) { MemoItem& m = memoItems[j]; j = m.nextMemoItem; if (m.nonTerminal == nonTerminal && m.maxPrec == prec) { ParserLog("Found memoized DRP that ends at rule="<< m.ruleNr << " startTokenNr=" << m.startTokenNr); makeReturn(tokenNr, m.ruleNr, m.startTokenNr); return; } } // // No memo applied so we now look for calls satisfied by (nonterminal, prec). // int drpPossible = true; int deferredReturnRuleNr = NONE; int deferredReturnStartTokenNr = NONE; // // We look at all the calls at startTokenNr. // for (int j = firstCalls[startTokenNr]; j != NONE;) // look for what called our nonterminal { Call& call = calls[j]; int nonTerminal2 = call.nonTerminal; int maxPrec = call.maxPrec; j = call.nextCall; if (nonTerminal2 == nonTerminal) { // // This is the call for our nonterminal - handle explicit continuations. // for (int k = call.firstContinuation; k != NONE;) { Continuation& cont = continuations[k]; int ruleNr2 = cont.ruleNr; int startTokenNr2 = cont.startTokenNr; int pos = cont.rhsPosition; k = cont.nextContinuation; Rule* rule2 = rules[ruleNr2]; if (rule2->rhs[pos].prec >= prec) { int rhsRemaining = rule2->rhs.length() - (pos + 1); if (rhsRemaining == 0) { ParserLog("right recursive return for rule=" << ruleNr2); // // This continuation immediately generates a return. // if (drpPossible && deferredReturnRuleNr == NONE) { // // We haven't seem a mid-production user nor have we // put another right recursive user aside. Thus we may // have the start of a DRP and we put this right recursive // user aside. // deferredReturnRuleNr = ruleNr2; deferredReturnStartTokenNr = startTokenNr2; } else { // // DRP not possible - do standard processing. // drpPossible = false; makeReturn(tokenNr, ruleNr2, startTokenNr2); } } else { ParserLog("continuation for rule=" << ruleNr2); drpPossible = false; // // This continuation has more to match. // advanceRule(ruleNr2, pos + 1, startTokenNr2, tokenNr, sentence); } } } } // // We see a call for nonTerminal2. Get the tree of implied start-ups for nonTerminal2, // and see if we have nonTerminal2 ::= nonTerminal ... // where the prec for nonTerminal is >= the prec of the rule we just recognized. // int r = nonTerminalDecisionTrees[flip(nonTerminal2)]; while (r != NONE) { Rule* rule2 = rules[r]; int t = nonTerminal - rule2->rhs[0].symbol; if (t == 0) break; r = (t > 0) ? rule2->bigger : rule2->smaller; } while (r != NONE) { Rule* rule2 = rules[r]; if (rule2->prec > maxPrec) { // // rule2 didn't have small enough prec to satisfy call. Rules in the equals path // are ordered by increasing prec so we are done. // break; } if (rule2->rhs[0].prec < prec) { // // rule2 required a smaller prec than our return provided. // r = rule2->equal; continue; } ParserLog("saw implied call by rule=" << r); // // Normal processesing. // int rhsRemaining = rule2->rhs.length() - 1; if (rhsRemaining == 0) { ParserLog("implied right recursive return for rule=" << r); if (drpPossible && deferredReturnRuleNr == NONE) { // // We haven't seem a mid-production user nor have we // put another right recursive user aside. Thus we may // have the start of a DRP and we put this right recursive // user aside. // deferredReturnRuleNr = r; deferredReturnStartTokenNr = startTokenNr; } else { // // DRP not possible - do standard processing. // drpPossible = false; makeReturn(tokenNr, r, startTokenNr); } } else { ParserLog("implied continuation for rule=" << r); drpPossible = false; advanceRule(r, 1, startTokenNr, tokenNr, sentence); } r = rule2->equal; } } // // We've now processed all the explicit and implicit callers for (nonterminal, prec) // pair we recognized. Now see if we have a DRP. // ParserLog("After processing callers seenContinuationBranch=" << seenContinuationBranch << " deferredReturns.size()=" << deferredReturns.size()); if (drpPossible && deferredReturnRuleNr != NONE) { // // When looking for continuations of (nonTerminal, prec) in calls from // token startTokenNr we found only a single continuation that immediately // generates a return (that we placed in deferredReturns). // // We treat this as the bottom of a deterministic reduction path (DRP) and // follow it to the top of the path. Rather than generate a linear number // of returns, we only generate the final return, and memoize this // return at startTokenNr for continuations of (nonTerminal, prec) // so we don't chase this DRP a second time. // ParserLog("deterministic reduction seen in set " << tokenNr << " from rule " << ruleNr << " starting at " << startTokenNr << " to rule " << deferredReturnRuleNr << " starting at " << deferredReturnStartTokenNr); int firstNewMemoNr = memoItems.size(); firstMemoItems[startTokenNr] = makeMemoItem(nonTerminal, prec, NONE, NONE, firstMemoItems[startTokenNr]); IntPair topMost = chaseDeterministicReductionPath(deferredReturnRuleNr, deferredReturnStartTokenNr); // // Fix up all the dummy memo items we created. // int nrMemoItems = memoItems.size(); for (int i = firstNewMemoNr; i < nrMemoItems; ++i) { MemoItem& m = memoItems[i]; m.ruleNr = topMost.first; m.startTokenNr = topMost.second; } ParserLog("made memo item in set " << startTokenNr << " when looking for nonterminal " << nonTerminal << " at prec " << prec << " we saw a DRP that ends at rule " << topMost.first << " to set " << topMost.second); makeReturn(tokenNr, topMost.first, topMost.second); } else { ParserLog("No DRP seen tokeNr = " << tokenNr << " ruleNr = " << ruleNr << " startTokenNr = " << startTokenNr << " seenContinuationBranch = " << seenContinuationBranch << " deferredReturns.size() = " << deferredReturns.size()); // // If we deferred a return, process it normally. // if (deferredReturnRuleNr != NONE) makeReturn(tokenNr, deferredReturnRuleNr, deferredReturnStartTokenNr); } } void Parser::doReturns(int tokenNr, const Vector& sentence) { lastReturnProcessed = NONE; // in case we don't process any returns for this list // // Do all returns. // for (int i = firstReturns[tokenNr]; i != NONE; i = returns[i].nextReturn) { lastReturnProcessed = i; Return& ret = returns[i]; processReturn(tokenNr, ret.startTokenNr, ret.ruleNr, sentence); } } void Parser::expandCalls(int tokenNr) { int firstCall = firstCalls[tokenNr]; if (firstCall == NONE) return; if (calls[firstCall].nextCall == NONE && !haveEmptyBubbles) { // // Single call case, with no empty bubbles so we can // safely use the expansion list itself. // Call& call = calls[firstCall]; int nonTerminal = call.nonTerminal; int maxPrec = call.maxPrec; Vector& exs = expansions[flip(nonTerminal)]; for (int j = exs.length() - 1; j >= 0; j--) { Expansion& ex = exs[j]; if (ex.prec <= maxPrec) { // // We've found the largest prec expansion that we can use. // int firstExpansionCall = ex.firstExpansionCall; Call& call2 = calls[firstExpansionCall]; if (call2.nonTerminal == nonTerminal) { if (call2.maxPrec > call.maxPrec) call.maxPrec = call2.maxPrec; // increase prec of single call call.nextCall = call2.nextCall; // pick up any calls to other nonterminals } else call.nextCall = firstExpansionCall; // pick up all the expansion calls return; } } return; // no expansion for this call } // // General case with multiple calls in list. // for (int i = firstCall; i != NONE;) { Call& call = calls[i]; i = call.nextCall; int nonTerminal = call.nonTerminal; int maxPrec = call.maxPrec; Vector& exs = expansions[flip(nonTerminal)]; for (int j = exs.length() - 1; j >= 0; j--) { Expansion& ex = exs[j]; if (ex.prec <= maxPrec) { // // We've found the largest prec expansion that we can use. // for (int k = ex.firstExpansionCall; k != NONE;) { Call& call2 = calls[k]; k = call2.nextCall; int nt2 = call2.nonTerminal; int prec2 = call2.maxPrec; // // See if we should increase the prec on an existing call. // for (int l = firstCall; l != NONE;) { Call& call3 = calls[l]; l = call3.nextCall; if (call3.nonTerminal == nt2) { if (call3.maxPrec < prec2) call3.maxPrec = prec2; goto nextPair; } } { // // Add a new call, and push it on the front so we don't visit it // in the outer loop (since it's fully expanded). // int nrCalls = calls.length(); calls.expandBy(1); Call& call4 = calls[nrCalls]; call4.nonTerminal = nt2; call4.maxPrec = prec2; call4.firstContinuation = NONE; call4.nextCall = firstCall; firstCall = nrCalls; ParserLog("created call for " << nt2 << " from " << nonTerminal); } nextPair: ; } break; } } } firstCalls[tokenNr] = firstCall; } void Parser::scanCalls(int tokenNr, const Vector& sentence) { int currentToken = sentence[tokenNr]; int nextTokenNr = tokenNr + 1; for (int i = firstCalls[tokenNr]; i != NONE;) { Call& call = calls[i]; int maxPrec = call.maxPrec; i = call.nextCall; int r = terminalDecisionTrees[flip(call.nonTerminal)]; while (r != NONE) { Rule* rule = rules[r]; int t = currentToken - rule->rhs[0].symbol; if (t == 0) { if (rule->prec <= maxPrec) { if (nextTokenNr > badTokenIndex) badTokenIndex = nextTokenNr; do { advanceRule(r, 1, tokenNr, nextTokenNr, sentence); r = rule->equal; if (r == NONE) break; rule = rules[r]; } while (rule->prec <= maxPrec); } break; } r = (t > 0) ? rule->bigger : rule->smaller; } } } void Parser::advanceRule(int ruleNr, int pos, int startTokenNr, int tokenNr, const Vector& sentence) { Rule* rule = rules[ruleNr]; int end = rule->rhs.size(); int nrTokens = sentence.size(); Assert(tokenNr <= nrTokens, "tokenNr past last parse list"); for (; pos < end; pos++) { int symbol = rule->rhs[pos].symbol; if (symbol < 0) { makeCall(tokenNr, ruleNr, pos, startTokenNr); return; } if (tokenNr == nrTokens) { // // Ran out of tokens. // return; } int token = sentence[tokenNr]; if (symbol != token) return; // die ++tokenNr; // // Successful match of token. All previous tokens must be part of at least // one legal partial parse so check if we need to update badTokenIndex. // if (tokenNr > badTokenIndex) badTokenIndex = tokenNr; } makeReturn(tokenNr, ruleNr, startTokenNr); } void Parser::makeCall(int tokenNr, int ruleNr, int rhsPosition, int startTokenNr) { int nonTerminal = rules[ruleNr]->rhs[rhsPosition].symbol; int prec = rules[ruleNr]->rhs[rhsPosition].prec; for (int i = firstCalls[tokenNr]; i != NONE;) { Call& call = calls[i]; i = call.nextCall; if (call.nonTerminal == nonTerminal) { for (int j = call.firstContinuation; j != NONE;) { Continuation& cont = continuations[j]; if (cont.ruleNr == ruleNr && cont.rhsPosition == rhsPosition && cont.startTokenNr == startTokenNr) return; j = cont.nextContinuation; } if (prec > call.maxPrec) call.maxPrec = prec; int nrContinuations = continuations.length(); continuations.expandBy(1); Continuation& cont = continuations[nrContinuations]; cont.ruleNr = ruleNr; cont.rhsPosition = rhsPosition; cont.startTokenNr = startTokenNr; cont.nextContinuation = call.firstContinuation; call.firstContinuation = nrContinuations; return; } } int nrContinuations = continuations.length(); continuations.expandBy(1); Continuation& cont = continuations[nrContinuations]; cont.ruleNr = ruleNr; cont.rhsPosition = rhsPosition; cont.startTokenNr = startTokenNr; cont.nextContinuation = NONE; int nrCalls = calls.length(); calls.expandBy(1); Call& call = calls[nrCalls]; call.nonTerminal = nonTerminal; call.maxPrec = prec; call.firstContinuation = nrContinuations; call.nextCall = firstCalls[tokenNr]; firstCalls[tokenNr] = nrCalls; } bool Parser::makeReturn(int tokenNr, int ruleNr, int startTokenNr) { int prev = NONE; for (int i = firstReturns[tokenNr]; i != NONE;) { Return& ret = returns[i]; if (ret.ruleNr == ruleNr && ret.startTokenNr == startTokenNr) return false; prev = i; i = ret.nextReturn; } ParserLog("makeReturn() << " << tokenNr << " " << ruleNr << " " << startTokenNr); int nrReturns = returns.length(); returns.expandBy(1); Return& ret = returns[nrReturns]; ret.ruleNr = ruleNr; ret.startTokenNr = startTokenNr; ret.nextReturn = NONE; if (prev == NONE) firstReturns[tokenNr] = nrReturns; else returns[prev].nextReturn = nrReturns; return true; } int Parser::makeMemoItem(int nonTerminal, int maxPrec, int ruleNr, int startTokenNr, int nextMemoItem) { int nrMemoItems = memoItems.size(); memoItems.expandBy(1); MemoItem& m = memoItems[nrMemoItems]; m.nonTerminal = nonTerminal; m.maxPrec = maxPrec; m.ruleNr = ruleNr; m.startTokenNr = startTokenNr; m.nextMemoItem = nextMemoItem; return nrMemoItems; } maude-3.1/src/Parser/drp.cc0000644000175200017520000002160413576050735012532 00000000000000// // Code for handling deterministic reduction paths during parse tree construction. // bool Parser::existsMemo(int startTokenNr, int nonTerminal, int prec, int ruleNrToFind, int startTokenNrToFind) { // // Look at the memo items in list startTokenNr and see if there is one which maps a return // for (nonTerminal, prec) to a top-of-DRP return, (ruleNrToFind, startTokenNrToFind). // for (int i = firstMemoItems[startTokenNr]; i != NONE;) { MemoItem& m = memoItems[i]; if (m.nonTerminal == nonTerminal && m.maxPrec == prec) { ParserLog("in list " << startTokenNr << " a return for nonterminal " << m.nonTerminal << " with prec " << m.maxPrec << " starts a DRP ending in a return (ruleNr = " << m.ruleNr << ", " << m.startTokenNr << ")"); if (m.ruleNr == ruleNrToFind && m.startTokenNr == startTokenNrToFind) { ParserLog("*** This was the memo we were looking for ***"); return true; } else { ParserLog("but we are looking for (ruleNr = " << ruleNrToFind << ", " << startTokenNrToFind << ")"); } } i = m.nextMemoItem; } return false; } Parser::IntBoolPair Parser::findReturnOrDeterministicReductionPath(int i, int ruleNr, int startTokenNr, int endTokenNr) { ParserLog("findReturnOrDeterministicReductionPath(" << i << ", " << ruleNr << ", " << startTokenNr << ")"); // // rhsPosition is the last position in the rule rhs and must hold a nonterminal. // Starting with return[i], find a return that either: // (1) deals with the (maybe implied) call (ruleNr, rhsPosition, startTokenNr); OR // (2) initiates a deterministic reduction path that ends in a return (ruleNr, startTokenNr). // const Rule* rule = rules[ruleNr]; // the rule int rhsPosition = rule->rhs.size() - 1; // last position in the rule's rhs int nonTerminal = rule->rhs[rhsPosition].symbol; // the nonterminal in that position int prec = rule->rhs[rhsPosition].prec; // and its precedence ParserLog(" looking for a return for nonTerminal=" << nonTerminal << " prec=" << prec); while (i != NONE) { Return& ret = returns[i]; int returnStartTokenNr = ret.startTokenNr; int returnRuleNr = ret.ruleNr; Rule* returnRule = rules[returnRuleNr]; int returnNonTerminal = returnRule->nonTerminal; int returnPrec = returnRule->prec; // // Does the return deal with a call (ruleNr, rhsPosition, startTokenNr) ? // if (returnNonTerminal == nonTerminal && // the return is for the nonterminal we are trying to parse returnPrec <= prec && // and the rule has low enough precedence existsCall(returnStartTokenNr, ruleNr, rhsPosition, startTokenNr)) // and there was a call for the last symbol in the rules rhs { ParserLog(" saw return of rule " << ret.ruleNr << " that is a direct return"); return IntBoolPair(i, false); // direct return } // // Does the return initiate a deterministic reduction path that ends in a return (ruleNr, startTokenNr) ? // // We look for a memo item created when the DRP is recognized. // if (existsMemo(returnStartTokenNr, returnNonTerminal, returnPrec, ruleNr, startTokenNr)) { ParserLog(" saw return of rule " << ret.ruleNr << " that is the bottom of a DRP for rule " << ruleNr); // // Need to check that that the return R directly above it in the DRP is not concrete. // If this is the case, the return will be seen as a direct return, when R is expanded // and returning a DRP here will generate the same parse twice. // // The situation in which R is concrete is highly contrived: // We essentially need to make R the trigger return of a sub-DRP, by having a return // P below it that can't be a trigger return because it has a second user U. But then to // have DRP we just found be deterministic we need to make sure U cannot use R // by using the prec/gather mechanism. // ParserLog("---> trigger of DRP is (" << returnRuleNr << ", " << returnStartTokenNr << ") <---"); Parser::IntPair p = extractOneStepOfDeterministicReductionPath(returnRuleNr, returnStartTokenNr); ParserLog("---> next step of DRP is (" << p.first << ", " << p.second << ") <---"); Assert(p.first != NONE && p.second != NONE, "couldn't find DRP abover trigger"); // // Does parse list startTokerNr contain the return for rule number p.first starting at // token number p.second? // if (!returnExists(firstReturns[endTokenNr], p.first, p.second)) return IntBoolPair(i, true); // initiating return for DRP ending with our return (ruleNr, startTokenNr). ParserLog("---> Abandoning DRP because next step of DRP, ruleNr=" << p.first << " startTokenNr=" << startTokenNr << " is CONCRETE <---"); } // // Look at next return in list. // i = ret.nextReturn; } ParserLog(" no return found for rule " << ruleNr); return IntBoolPair(NONE, false); // didn't find a return } bool Parser::returnExists(int i, int ruleNr, int startTokenNr) { while (i != NONE) { Return& ret = returns[i]; if (ret.ruleNr == ruleNr && ret.startTokenNr == startTokenNr) return true; i = ret.nextReturn; } return false; } Parser::IntPair Parser::extractOneStepOfDeterministicReductionPath(int ruleNr, int startTokenNr) { // // Returns (nextRuleNr, nextStartTokenNr) or (NONE, NONE) if we // are already at the top of the DRP. // Rule* rule = rules[ruleNr]; int nonTerminal = rule->nonTerminal; int prec = rule->prec; // // We go through the parse list startTokenNr looking for callers of the // nonterminal recognized by rule ruleNr. // // If we find exactly one and it is for a right recursive rule that // generates a return based on its final nonterminal being recognized // then we have the next step of a DRP. // int nextRuleNr = NONE; int nextStartTokenNr = NONE; for (int j = firstCalls[startTokenNr]; j != NONE;) { Call& call = calls[j]; int nonTerminal2 = call.nonTerminal; int maxPrec = call.maxPrec; j = call.nextCall; if (nonTerminal2 == nonTerminal) { if (maxPrec == UNBOUNDED) { ParserLog("*****> end of DRP seen because of root object is a caller"); return IntPair(NONE, NONE); } // // Handle explicit continuations. // for (int k = call.firstContinuation; k != NONE;) { Continuation& cont = continuations[k]; int ruleNr2 = cont.ruleNr; int pos = cont.rhsPosition; k = cont.nextContinuation; Rule* rule2 = rules[ruleNr2]; if (rule2->rhs[pos].prec >= prec) { // // Found a continutation. // if (nextRuleNr != NONE) { ParserLog("*****> end of DRP seen because of multiple continuations"); return IntPair(NONE, NONE); } int rhsRemaining = rule2->rhs.length() - (pos + 1); if (rhsRemaining != 0) { ParserLog("******> end of DRP seen because of non return event"); return IntPair(NONE, NONE); } // // It generates a return that potentially continues the DRP. // nextRuleNr = ruleNr2; nextStartTokenNr = cont.startTokenNr; } } } // // Check for implied start ups. // int r = nonTerminalDecisionTrees[flip(nonTerminal2)]; while (r != NONE) { Rule* rule2 = rules[r]; int t = nonTerminal - rule2->rhs[0].symbol; if (t == 0) break; r = (t > 0) ? rule2->bigger : rule2->smaller; } while (r != NONE) { Rule* rule2 = rules[r]; if (rule2->prec > maxPrec) break; if (rule2->rhs[0].prec >= prec) { // // Found a continutation. // if (nextRuleNr != NONE) { ParserLog("*******> end of DRP seen because of multiple continuations - implied start up"); return IntPair(NONE, NONE); } int rhsRemaining = rule2->rhs.length() - 1; if (rhsRemaining != 0) { ParserLog("********> end of DRP seen because of non return event - implied start up"); return IntPair(NONE, NONE); } // // It generates a return that potentially continues the DRP. // Can only happen for a ::= production. // nextRuleNr = r; nextStartTokenNr = startTokenNr; } r = rule2->equal; } } Assert(nextRuleNr != NONE, "didn't find caller for rule " << ruleNr << " at position " << startTokenNr); ParserLog("***********2 continuing DRP chase with rule " << nextRuleNr << " at position " << nextStartTokenNr); return IntPair(nextRuleNr, nextStartTokenNr); } void Parser::extractDeterministicReductionPath(int ruleNr, int startTokenNr, Vector& drp) { for(;;) { IntPair p = extractOneStepOfDeterministicReductionPath(ruleNr, startTokenNr); ruleNr = p.first; if (ruleNr == NONE) break; startTokenNr = p.second; int nrReturns = drp.size(); drp.expandBy(1); drp[nrReturns].ruleNr = ruleNr; drp[nrReturns].startTokenNr = startTokenNr; } } maude-3.1/src/Parser/bubble.cc0000644000175200017520000001072213576050735013177 00000000000000// // Code for handling bubble during pass 1. // void Parser::processBubble(int tokenNr, int bubbleNr, const Vector& sentence) { Bubble b = bubbles[bubbleNr]; int ruleNr = b.ruleNr; ParserLog("processBubble tokenNr=" << tokenNr << " ruleNr=" << ruleNr << " bubbleNr=" << bubbleNr); int openParens = 0; int last = sentence.size(); for (int i = tokenNr; i < last;) { int token = sentence[i]; if (b.upperBound != NONE) { // // Check for syntax errors caused by hitting upper bound. // int tokensLeft = b.upperBound - (i - tokenNr); if (tokensLeft == 0) return; if (token != b.rightParen) { // // Need to check for syntax errors arising from insufficient upperBounds to // close parentheses. // int tokensLeft = b.upperBound - (i - tokenNr); if (tokensLeft == openParens) return; // not enough tokens left to close open parens if (tokensLeft == openParens + 1 && token == b.leftParen) return; // no enough tokens left to close parens if we open one more } } // // Match tokens, keeping in mind that left and right paren could be the same. // if (token == b.rightParen) { if (openParens > 0) --openParens; else if (token == b.leftParen) openParens = 1; else return; // unmatched closing paren } else if (token == b.leftParen) ++openParens; else if (openParens == 0) { // // Regular token not inside parens, check if it is allowed. // const Vector& excluded = b.excludedTerminals; FOR_EACH_CONST(i, Vector, excluded) { if (*i == token) return; // exluded token } } // // Token was part of a bubble with a valid continuation. // ++i; if (i > badTokenIndex) badTokenIndex = i; if (openParens == 0 && (b.lowerBound == NONE || b.lowerBound <= i - tokenNr)) { // // Bubble is big enough and has no unclosed parens, so it's // a valid place to end the bubble. // ParserLog("returning bubble at token " << i); makeReturn(i, ruleNr, tokenNr); } } } void Parser::doBubbles(int tokenNr, const Vector& sentence) { ParserLog(Tty(Tty::RED) << "doBubble() at token " << tokenNr << Tty(Tty::RESET)); // // Look at each call for a nonterminal. // for (int i = firstCalls[tokenNr]; i != NONE;) { Call& call = calls[i]; i = call.nextCall; // // Look at each bubble that can parse to that nonterminal. // for (int j = firstBubbles[flip(call.nonTerminal)]; j != NONE; j = bubbles[j].nextBubble) processBubble(tokenNr, j, sentence); } } void Parser::doEmptyBubbles(int tokenNr) { ParserLog(Tty(Tty::RED) << "doEmptyBubble() at token " << tokenNr << Tty(Tty::RESET)); // // Look at each call for a nonterminal. // for (int i = firstCalls[tokenNr]; i != NONE;) { Call& call = calls[i]; i = call.nextCall; // // Look at each bubble that can parse to that nonterminal. // for (int j = firstBubbles[flip(call.nonTerminal)]; j != NONE;) { Bubble& b = bubbles[j]; j = b.nextBubble; if (b.lowerBound == 0) { // // We have the possibility of this nonterminal going to an empty bubble. // This generates an immediate return in the same parse list. // ParserLog("did empty bubble return for rule " << b.ruleNr); makeReturn(tokenNr, b.ruleNr, tokenNr); } } } } void Parser::doEmptyBubbleReturns(int tokenNr, const Vector& sentence) { // // We redo old empty bubble returns in case they have more continuations // int i = firstReturns[tokenNr]; if (lastReturnProcessed != NONE) { // // We have already processed some returns. We need to redo any // old empty bubble returns in case they have more continuations. // for (;; i = returns[i].nextReturn) { Return& ret = returns[i]; if (tokenNr == ret.startTokenNr) processReturn(tokenNr, ret.startTokenNr, ret.ruleNr, sentence); if (i == lastReturnProcessed) break; // this was the last of the already processed returns } i = returns[i].nextReturn; // first new return } // // We then do new returns which maybe empty bubble returns or // have arose from processing empty bubble returns. // for (; i != NONE; i = returns[i].nextReturn) { lastReturnProcessed = i; Return& ret = returns[i]; processReturn(tokenNr, ret.startTokenNr, ret.ruleNr, sentence); } } maude-3.1/src/Parser/parser.cc0000644000175200017520000001670113643206345013236 00000000000000// // Implementation for class Parser // #include "macros.hh" #include "vector.hh" #include "indent.hh" #include "parser.hh" //#define PARSER_DEBUG #ifdef PARSER_DEBUG #define ParserLog(message) (cout << "ParserLog: " << message << endl) #else #define ParserLog(message) #endif // our stuff #include "compile.cc" #include "compile2.cc" #include "pass1.cc" #include "bubble.cc" #include "pass2.cc" #include "drp.cc" Parser::Parser() { haveBubbles = false; haveEmptyBubbles = false; } Parser::~Parser() { FOR_EACH_CONST(i, Vector, rules) delete *i; } void Parser::insertProd(int nonTerminal, const Vector& rhs, const int prec, const Vector& gather) { int nrNonTerminals = firstTerminalRules.length(); int index = flip(nonTerminal); Assert(index >= 0, "Bad non terminal"); // // Expand tables to encompass new nonterminal if necessary. // if (index >= nrNonTerminals) { firstTerminalRules.expandTo(index + 1); firstNonTerminalRules.expandTo(index + 1); firstBubbles.expandTo(index + 1); for (; nrNonTerminals <= index; nrNonTerminals++) { firstTerminalRules[nrNonTerminals] = NONE; firstNonTerminalRules[nrNonTerminals] = NONE; firstBubbles[nrNonTerminals] = NONE; } } // // Make new rule. // int nrRules = rules.length(); rules.expandBy(1); Rule* r = new Rule; rules[nrRules] = r; r->index = nrRules; r->prec = prec; r->nonTerminal = nonTerminal; Assert(!(rhs.empty()), "epsilon rules not supported"); if (rhs[0] < 0) { // // Nonterminal case. // r->nextRule = firstNonTerminalRules[index]; firstNonTerminalRules[index] = nrRules; } else { // // Terminal case. // r->nextRule = firstTerminalRules[index]; firstTerminalRules[index] = nrRules; } // // Copy in rhs with prec derived from gather values. // int nrSymbols = rhs.length(); r->rhs.expandTo(nrSymbols); int gatherIndex = 0; for (int i = 0; i < nrSymbols; i++) { Pair& p = r->rhs[i]; p.symbol = rhs[i]; p.prec = p.symbol < 0 ? gather[gatherIndex++] : NONE; } r->nrNonTerminals = gatherIndex; } void Parser::insertProd(int nonTerminal, int lowerBound, int upperBound, int leftParen, int rightParen, const Vector& excludedTerminals) { ParserLog("saw bubble added for " << nonTerminal); int nrBubbles = bubbles.size(); bubbles.expandBy(1); Bubble& b = bubbles[nrBubbles]; b.nonTerminal = nonTerminal; b.lowerBound = lowerBound; b.upperBound = upperBound; b.leftParen = leftParen; b.rightParen = rightParen; b.excludedTerminals = excludedTerminals; // deep copy b.ruleNr = rules.size(); // // ::= built-in-bubble [prec 0 gather (1)] // // This is the rule we will report as a bubble in the parse tree. // Vector gather(1); Vector rhs(1); rhs[0] = BUBBLE_TERMINAL; // dummy terminal gather[0] = 1; insertProd(b.nonTerminal, rhs, 0, gather); // // Add it to the bubbles for this nonterminal. // b.nextBubble = firstBubbles[flip(nonTerminal)]; firstBubbles[flip(nonTerminal)] = nrBubbles; // // Flag the need to take slow paths through code. // haveBubbles = true; if (lowerBound == 0) haveEmptyBubbles = true; } int Parser::parseSentence(const Vector& sentence, int root) { Assert(flip(root) < firstTerminalRules.length(), "bad root nonterminal " << root << " only " << firstTerminalRules.length() << " nonterminals in grammar"); if (expansions.length() == 0) { buildExpansionTables(); firstRealCall = calls.size(); ParserLog("expansion lists use " << firstRealCall << " calls"); buildTerminalDecisionTrees(); buildNonTerminalDecisionTrees(); } rootNonTerminal = root; int nrTokens = sentence.length(); continuations.contractTo(0); calls.contractTo(firstRealCall); returns.contractTo(0); memoItems.clear(); firstCalls.resize(nrTokens + 1); firstReturns.resize(nrTokens + 1); firstMemoItems.resize(nrTokens + 1); for (int i = 0; i <= nrTokens; i++) { firstCalls[i] = NONE; firstReturns[i] = NONE; firstMemoItems[i] = NONE; } // // Start by creating call to root with unbounded precedence. // calls.expandBy(1); Call& call = calls[firstRealCall]; call.nonTerminal = root; call.maxPrec = UNBOUNDED; call.firstContinuation = NONE; call.nextCall = NONE; firstCalls[0] = firstRealCall; // // Do passes. // badTokenIndex = 0; lastReturnProcessed = NONE; for (int i = 0; i < nrTokens;) { if (haveEmptyBubbles) checkForEmptyBubbles(i, sentence); else expandCalls(i); if (haveBubbles) doBubbles(i, sentence); scanCalls(i, sentence); ++i; lastReturnProcessed = NONE; doReturns(i, sentence); } // // Deal with empty bubbles happening after the last token. // if (haveEmptyBubbles) checkForEmptyBubbles(nrTokens, sentence); ambiguous = false; parseTree.contractTo(0); int t = extractNextParse() ? (ambiguous ? 2 : 1) : 0; ParserLog("\n parseSentence() returns " << t << "\n\n"); return t; } void Parser::checkForEmptyBubbles(int tokenNr, const Vector& sentence) { for (;;) { expandCalls(tokenNr); Vector::size_type nrContinuations = continuations.size(); doEmptyBubbles(tokenNr); doEmptyBubbleReturns(tokenNr, sentence); if (nrContinuations == continuations.size()) break; // no new continuations added by returns for empty bubbles } } int Parser::getChild(int node, int sonNr) { int son = parseTree[node].firstSon; for (int i = sonNr; i > 0; --i) { son = parseTree[son].nextSibling; } ParserLog("node " << node << " has " << sonNr << " son " << son); Assert(son != 0, "0 child seen for node=" << node << " sonNr=" << sonNr); return son; } void Parser::dump() { for (int i = 0; i < firstCalls.length(); i++) { cout << "Parse List #" << i << '\n'; for (int j = firstCalls[i]; j != NONE; j = calls[j].nextCall) { Call& call = calls[j]; cout << "Call " << call.nonTerminal << "\tmaxPrec = " << call.maxPrec << '\n'; for (int k = call.firstContinuation; k != NONE; k = continuations[k].nextContinuation) { Continuation& cont = continuations[k]; Rule* rule = rules[cont.ruleNr]; cout << "\tContinutation for rule #" << cont.ruleNr << " [" << rule->nonTerminal << " -> "; for (int l = 0;; l++) { if (l == cont.rhsPosition) cout << " ."; if (l == rule->rhs.length()) break; cout << ' ' << rule->rhs[l].symbol; } cout << " , " << cont.startTokenNr << "]\n"; } } for (int j = firstReturns[i]; j != NONE; j = returns[j].nextReturn) { Return& r = returns[j]; Rule* rule = rules[r.ruleNr]; cout << "Return #" << j << " for rule #" << r.ruleNr << " [" << rule->nonTerminal << " -> "; for (int k = 0; k < rule->rhs.length(); k++) cout << ' ' << rule->rhs[k].symbol; cout << " , " << r.startTokenNr << "]\n"; } cout << '\n'; for (int j = firstMemoItems[i]; j != NONE; j = memoItems[j].nextMemoItem) { MemoItem& m = memoItems[j]; Rule* rule = rules[m.ruleNr]; cout << "Memo (" << m.nonTerminal << ", " << m.maxPrec << ") -> rule #" << m.ruleNr << " [" << rule->nonTerminal << " -> "; for (int k = 0; k < rule->rhs.length(); k++) cout << ' ' << rule->rhs[k].symbol; cout << " , " << m.startTokenNr << "]\n"; } cout << '\n'; } cout << '\n'; } maude-3.1/src/Parser/pass2.cc0000644000175200017520000004250313576050735012776 00000000000000// // Second pass: extract parses from compact representation as needed. // bool Parser::extractNextParse() { ParserLog("extractNextParse()"); #ifdef PARSER_DEBUG dump(); #endif int lastIndex = firstReturns.length() - 1; if (parseTree.length() == 0) { ParserLog(" first attempt"); // // No previous parse. Find a return [S -> w ., 0] in final list. // int i = findRootReturn(firstReturns[lastIndex], rootNonTerminal); if (i == NONE) return false; // // Check to see if there was an alternative and if so, flag as ambiguous. // if (findRootReturn(returns[i].nextReturn, rootNonTerminal) != NONE) ambiguous = true; // // Make root node. // Return& r = returns[i]; parseTree.resize(1); ParseNode& p = parseTree[0]; p.ruleNr = r.ruleNr; p.startTokenNr = r.startTokenNr; // must be 0 p.nextReturnToCheck = r.nextReturn; p.endTokenNr = lastIndex; p.firstSon = NONE; p.nextSibling = NONE; extractFirstSubparse(0); return true; } ParserLog(" next attempt"); // // Previous parse so try to find a new subparse for existing root. // if (extractNextSubparse(0)) return true; // // Try to find a new root parse. // ParseNode& p = parseTree[0]; int i = findRootReturn(p.nextReturnToCheck, rootNonTerminal); if (i == NONE) { parseTree.clear(); return false; } // // Remake root node. // Return& r = returns[i]; p.ruleNr = r.ruleNr; //p.startTokenNr = 0; // no change p.nextReturnToCheck = r.nextReturn; //p.endTokenNr = lastIndex; // no change p.firstSon = NONE; p.nextSibling = NONE; extractFirstSubparse(0); return true; } void Parser::extractFirstSubparseToTheLeft(int nodeNr, int rightPos, int rightSibling) { // // We go right to left through the nonterminals in parse node nodeNr // finding a first parse for each. // ParseNode& p = parseTree[nodeNr]; int startTokenNr = p.startTokenNr; int ruleNr = p.ruleNr; Rule* rule = rules[p.ruleNr]; int lastSibling = rightSibling; int tokenNr = parseTree[lastSibling].startTokenNr; for (int pos = rightPos; pos >= 0; --pos) { if (rule->rhs[pos].symbol >= 0) { // // Terminal symbol. // --tokenNr; continue; } // // Find a subparse for a nonterminal symbol. Note that this cannot // be a rightmost symbol (since we are rebuilding to the left of // an alternative parse) so we don't have to worry about DRPs. // int returnIndex = findReturn(firstReturns[tokenNr], ruleNr, pos, startTokenNr); Assert(returnIndex != NONE, "extractFirstToTheLeft() missing first return for rule " << ruleNr << " pos = " << pos << " startTokenNr = " << startTokenNr); if (!ambiguous && findReturn(returns[returnIndex].nextReturn, ruleNr, pos, startTokenNr) != NONE) ambiguous = true; // // Make a parse tree node for this return. // Return& r = returns[returnIndex]; int nodeNr = parseTree.length(); parseTree.expandBy(1); ParseNode& p2 = parseTree[nodeNr]; p2.ruleNr = r.ruleNr; p2.startTokenNr = r.startTokenNr; p2.nextReturnToCheck = r.nextReturn; p2.endTokenNr = tokenNr; p2.firstSon = NONE; ParserLog("set nextSibling of node " << nodeNr << " to " << lastSibling); p2.nextSibling = lastSibling; lastSibling = nodeNr; extractFirstSubparse(nodeNr); tokenNr = r.startTokenNr; } parseTree[nodeNr].firstSon = lastSibling; } void Parser::extractFirstSubparse(int nodeNr) { ParserLog("extractFirstSubparse() for nodeNr=" << nodeNr); // // We are looking for a first way to parse the tokens below this node. // We should always succeed. // ParseNode& p = parseTree[nodeNr]; int ruleNr = p.ruleNr; int startTokenNr = p.startTokenNr; Rule* rule = rules[ruleNr]; if (rule->rhs[0].symbol == BUBBLE_TERMINAL) return; // we don't expand the single son of a bubble rule int nrSons = rule->nrNonTerminals; if (nrSons == 0) return; // empty parse tree int tokenNr = p.endTokenNr; int endPos = rule->rhs.length() - 1; // // Go right->left through the rhs of the rule. // int lastSibling = NONE; for (int pos = endPos; pos >= 0; --pos) { if (rule->rhs[pos].symbol >= 0) { // // Terminal symbol. // --tokenNr; continue; } // // Find a subparse for a nonterminal symbol. // int returnIndex; if (pos == endPos) { // // Final symbol of rule is a nonterminal - right-recursive case. // Need to consider the possibility of rule being at the top of a DRP. // IntBoolPair retPair = findReturnOrDeterministicReductionPath(firstReturns[tokenNr], ruleNr, startTokenNr, tokenNr); returnIndex = retPair.first; Assert(returnIndex != NONE, "missing first return for rule " << ruleNr << " pos = " << pos << " startTokenNr = " << startTokenNr); // // Check for ambiguity if we don't know we're ambiguous // if (!ambiguous && findReturnOrDeterministicReductionPath(returns[returnIndex].nextReturn, ruleNr, startTokenNr, tokenNr).first != NONE) ambiguous = true; // // Check if we found the bottom of a DRP rather than a direct return. // if (retPair.second) { ParserLog("------ Saw DRP -------"); // // First we recover a sequence of (mostly) virtual returns for the DRP. // Return& r = returns[returnIndex]; Vector drp; extractDeterministicReductionPath(r.ruleNr, r.startTokenNr, drp); // // The bottom of the DRP (i.e. the return that triggered the DRP) is r. // The next (necessarily right-recursive) return up from r is drp[0]. // The top of the DRP is drp[drp.size() - 1] and is the (necessarily // right-recursive) return for the parse node we are currently expanding. // #ifdef PARSER_DEBUG FOR_EACH_CONST(k, Vector, drp) cout << "DRP link (" << k->ruleNr << ", " << k->startTokenNr << ")" << endl; #endif int drpSize = drp.size(); int oneFromTop = drpSize - 2; // -1 means we have a trivial DRP with just a top and a bottom // // We want to process the returns in the order // drp[oneFromTop], ... , drp[0], r // lastSibling = parseTree.length(); // where the first node of the DRP subparse will be built buildDeterministicReductionPathParseTree(tokenNr, returnIndex, drp, oneFromTop); // // We need to search for alternatives to DRP from the one-below-top node, // which could be the trigger return in the trivial case. // parseTree[lastSibling].nextReturnToCheck = r.nextReturn; // // Need to handle tokens to the left of the DRP nonterminal in our current node. // tokenNr = (drpSize == 1) ? r.startTokenNr : drp[oneFromTop].startTokenNr; continue; } // // Fall into the direct return code. // } else { // // Non-right-recursive case. // returnIndex = findReturn(firstReturns[tokenNr], ruleNr, pos, startTokenNr); Assert(returnIndex != NONE, "missing first return for rule " << ruleNr << " pos = " << pos << " startTokenNr = " << startTokenNr); // // Check for ambiguity if we don't know we're ambiguous // if (!ambiguous && findReturn(returns[returnIndex].nextReturn, ruleNr, pos, startTokenNr) != NONE) ambiguous = true; } // // Make a parse tree node for this return. // Return& r = returns[returnIndex]; int nodeNr = parseTree.length(); parseTree.expandBy(1); ParseNode& p2 = parseTree[nodeNr]; p2.ruleNr = r.ruleNr; p2.startTokenNr = r.startTokenNr; p2.nextReturnToCheck = r.nextReturn; p2.endTokenNr = tokenNr; p2.firstSon = NONE; ParserLog("set nextSibling of node " << nodeNr << " to " << lastSibling); p2.nextSibling = lastSibling; lastSibling = nodeNr; extractFirstSubparse(nodeNr); tokenNr = r.startTokenNr; } Assert(lastSibling != NONE, "lastSibling == NONE"); ParserLog("set firstSon of node " << nodeNr << " to " << lastSibling); parseTree[nodeNr].firstSon = lastSibling; } bool Parser::extractNextSubparse(int nodeNr) { // // We have a parse tree for a first way to parse tokens below this node. // We need to find the next subparse using current rule, if such a // subparse exists. // ParseNode& p = parseTree[nodeNr]; Rule* rule = rules[p.ruleNr]; int nrSons = rule->nrNonTerminals; if (rule->rhs[0].symbol == BUBBLE_TERMINAL) return false; // we don't expand the single son of a bubble rule if (nrSons == 0) return false; // current rule only has terminals // // We look at each son node, from left to right, to see if it has an alternative parse. // int pos = 0; int son = p.firstSon; int endPos = rule->rhs.length() - 1; for (; son != NONE; ++pos) { if (rule->rhs[pos].symbol >= 0) continue; // terminal symbol // // Symbol is a nonterminal so might have an alternative parse. // // First we see if there is an alternative parse for the existing return. // if (extractNextSubparse(son)) { // // Alternative parse below parseTree[son] found; rebuild the parse tree // to the left. // extractFirstSubparseToTheLeft(nodeNr, pos - 1, son); return true; } // // Save 3 values that will be lost when we delete parse node. // int nextSibling = parseTree[son].nextSibling; int nextReturnToCheck = parseTree[son].nextReturnToCheck; int endTokenNr = parseTree[son].endTokenNr; // // Failure to extract a new subparse for this son should have deleted // the parse tree below it. We now delete the son itself and look // for an alternative return for this nonterminal. // parseTree.contractTo(son); son = nextSibling; if (nextReturnToCheck == NONE) { // // No more returns to look at. So we move to the next nonterminal node. // continue; // FIXME: what happens if this was made by a DRP? } int returnIndex; if (pos == endPos) { // // Son was an expansion of the rightmost symbol in the rule's rhs so // look for a return or DRP. // IntBoolPair retPair = findReturnOrDeterministicReductionPath(nextReturnToCheck, p.ruleNr, p.startTokenNr, endTokenNr); // pos is implicit returnIndex = retPair.first; if (returnIndex == NONE) { // // Couldn't find an alternative return so move to the next nonterminal node. // continue; } if (retPair.second) { ParserLog("extractNextSubparse() : Saw DRP"); // // First we recover a sequence of (mostly) virtual returns for the DRP. // Return& r = returns[returnIndex]; Vector drp; extractDeterministicReductionPath(r.ruleNr, r.startTokenNr, drp); // // The bottom of the DRP (i.e. the return that triggered the DRP) is r. // The next (necessarily right-recursive) return up from r is drp[0]. // The top of the DRP is drp[drp.size() - 1] and is the (necessarily // right-recursive) return for the parse node we are currently expanding. // #ifdef PARSER_DEBUG FOR_EACH_CONST(k, Vector, drp) cout << "DRP link (" << k->ruleNr << ", " << k->startTokenNr << ")" << endl; #endif int drpSize = drp.size(); int oneFromTop = drpSize - 2; // -1 means we have a trivial DRP with just a top and a bottom // // We want to process the returns in the order // drp[oneFromTop], ... , drp[0], r // int topNode = parseTree.length(); // where the first node of the DRP subparse will be built buildDeterministicReductionPathParseTree(endTokenNr, returnIndex, drp, oneFromTop); parseTree[topNode].nextReturnToCheck = r.nextReturn; // // Need to handle tokens to the left of the DRP nonterminal in our current node. // extractFirstSubparseToTheLeft(nodeNr, pos - 1, topNode); return true; } // // Fall into the direct return code. // } else { // // Son was an expansion of a symbol other than the rightmost so // look for a regular return. // returnIndex = findReturn(nextReturnToCheck, p.ruleNr, pos, p.startTokenNr); if (returnIndex == NONE) { // // Couldn't find an alternative return so move to the next nonterminal node. // continue; } } // // Make a parse tree node for this return. // Return& r = returns[returnIndex]; int newNodeNr = parseTree.length(); parseTree.expandBy(1); ParseNode& p2 = parseTree[newNodeNr]; p2.ruleNr = r.ruleNr; p2.startTokenNr = r.startTokenNr; p2.nextReturnToCheck = r.nextReturn; p2.endTokenNr = endTokenNr; p2.firstSon = NONE; ParserLog("set nextSibling of node " << newNodeNr << " to " << son); p2.nextSibling = son; extractFirstSubparse(newNodeNr); extractFirstSubparseToTheLeft(nodeNr, pos - 1, newNodeNr); return true; } // // None of the nonterminals of our rule had an alternative subparse. // return false; } int Parser::buildDeterministicReductionPathParseTree(int endTokenNr, int triggerReturnIndex, const Vector& drp, int drpIndex) { ParserLog("buildDeterministicReductionPathParseTree() for endTokenNr =" << endTokenNr << " triggerReturnIndex=" << triggerReturnIndex << " drpIndex=" << drpIndex); // // We want to build the parse tree for the DRP drp[drpIndex], ..., drp[0] including // parses for any nonterminals other than the right-recursive nonterminals in the DRP. // if (drpIndex == -1) { // // End of DRP reached - build parse tree node for trigger return. // Return& r = returns[triggerReturnIndex]; int nodeNr = parseTree.length(); parseTree.expandBy(1); ParseNode& p = parseTree[nodeNr]; p.ruleNr = r.ruleNr; p.startTokenNr = r.startTokenNr; p.nextReturnToCheck = NONE; p.endTokenNr = endTokenNr; p.firstSon = NONE; p.nextSibling = NONE; // nothing to the right of us in parent extractFirstSubparse(nodeNr); return nodeNr; } // // Deal with right-recursive rule somewhere above trigger return but below top return. // const DeferredReturn& d = drp[drpIndex]; const Rule* rule = rules[d.ruleNr]; int nrSons = rule->nrNonTerminals; // // We assume we are not dealing with the trigger return, so there must at least be a rightmost nonterminal // in the rule. // Assert(nrSons > 0, "didn't see a son in a mid-DRP rule"); // // Make new node. // int nodeNr = parseTree.length(); parseTree.expandBy(1); ParseNode& p = parseTree[nodeNr]; p.ruleNr = d.ruleNr; p.startTokenNr = d.startTokenNr; p.nextReturnToCheck = NONE; p.endTokenNr = endTokenNr; //p.firstSon = NONE; p.nextSibling = NONE; // nothing to the right of use in parent // // Deal with right recursion. // int lastSibling = buildDeterministicReductionPathParseTree(endTokenNr, triggerReturnIndex, drp, drpIndex - 1); // // Deal with any nonterminals to the left of right recursion. // if (nrSons > 1) extractFirstSubparseToTheLeft(nodeNr, rule->rhs.size() - 2, lastSibling); else parseTree[nodeNr].firstSon = lastSibling; return nodeNr; } int Parser::findRootReturn(int i, int nonTerminal) { // // Find return for root nonterminal. // while (i != NONE) { Return& ret = returns[i]; if (ret.startTokenNr == 0 && rules[ret.ruleNr]->nonTerminal == nonTerminal) break; i = ret.nextReturn; } return i; } inline bool Parser::existsCall(int parseListNr, int ruleNr, int rhsPosition, int startTokenNr) { // // Check that a call (ruleNr, rhsPosition, startTokenNr) actually // exists in call list "parseListNr". // if (rhsPosition == 0) { // // Call will be implied rather than real. // if (startTokenNr != parseListNr) return false; int lhs = rules[ruleNr]->nonTerminal; for (int i = firstCalls[parseListNr]; i != NONE; i = calls[i].nextCall) { if (calls[i].nonTerminal == lhs) return rules[ruleNr]->prec <= calls[i].maxPrec; } return false; } int nonTerminal = rules[ruleNr]->rhs[rhsPosition].symbol; for (int i = firstCalls[parseListNr]; i != NONE; i = calls[i].nextCall) { Call& call = calls[i]; if (call.nonTerminal == nonTerminal) { for (int j = call.firstContinuation; j != NONE;) { Continuation& cont = continuations[j]; if (cont.ruleNr == ruleNr && cont.rhsPosition == rhsPosition && cont.startTokenNr == startTokenNr) return true; j = cont.nextContinuation; } break; } } return false; } int Parser::findReturn(int i, int ruleNr, int rhsPosition, int startTokenNr) { // // Starting with returns[i], find a return that deals with the // (maybe implied) call (ruleNr, rhsPosition, startTokenNr). // int nonTerminal = rules[ruleNr]->rhs[rhsPosition].symbol; int prec = rules[ruleNr]->rhs[rhsPosition].prec; while (i != NONE) { Return& ret = returns[i]; if (rules[ret.ruleNr]->nonTerminal == nonTerminal && rules[ret.ruleNr]->prec <= prec && existsCall(ret.startTokenNr, ruleNr, rhsPosition, startTokenNr)) break; i = ret.nextReturn; } return i; } maude-3.1/src/Parser/Makefile.in0000644000175200017520000004476613741175703013516 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/Parser ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_have_poll.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libparser_a_AR = $(AR) $(ARFLAGS) libparser_a_LIBADD = am_libparser_a_OBJECTS = libparser_a-parser.$(OBJEXT) libparser_a_OBJECTS = $(am_libparser_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/libparser_a-parser.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(libparser_a_SOURCES) DIST_SOURCES = $(libparser_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs ChangeLog DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ BUDDY_LIB = @BUDDY_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CVC4_LIB = @CVC4_LIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FLEX = @FLEX@ GCC_LIBS = @GCC_LIBS@ GMP_LIBS = @GMP_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSIGSEGV_LIB = @LIBSIGSEGV_LIB@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TECLA_LIBS = @TECLA_LIBS@ VERSION = @VERSION@ YICES2_LIB = @YICES2_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libparser.a libparser_a_CPPFLAGS = \ -I$(top_srcdir)/src/Utility libparser_a_SOURCES = \ parser.cc EXTRA_DIST = \ compile.cc \ compile2.cc \ pass1.cc \ bubble.cc \ pass2.cc \ drp.cc noinst_HEADERS = \ parser.hh all: all-am .SUFFIXES: .SUFFIXES: .cc .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Parser/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Parser/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libparser.a: $(libparser_a_OBJECTS) $(libparser_a_DEPENDENCIES) $(EXTRA_libparser_a_DEPENDENCIES) $(AM_V_at)-rm -f libparser.a $(AM_V_AR)$(libparser_a_AR) libparser.a $(libparser_a_OBJECTS) $(libparser_a_LIBADD) $(AM_V_at)$(RANLIB) libparser.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libparser_a-parser.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` libparser_a-parser.o: parser.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparser_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libparser_a-parser.o -MD -MP -MF $(DEPDIR)/libparser_a-parser.Tpo -c -o libparser_a-parser.o `test -f 'parser.cc' || echo '$(srcdir)/'`parser.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libparser_a-parser.Tpo $(DEPDIR)/libparser_a-parser.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='parser.cc' object='libparser_a-parser.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparser_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libparser_a-parser.o `test -f 'parser.cc' || echo '$(srcdir)/'`parser.cc libparser_a-parser.obj: parser.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparser_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libparser_a-parser.obj -MD -MP -MF $(DEPDIR)/libparser_a-parser.Tpo -c -o libparser_a-parser.obj `if test -f 'parser.cc'; then $(CYGPATH_W) 'parser.cc'; else $(CYGPATH_W) '$(srcdir)/parser.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libparser_a-parser.Tpo $(DEPDIR)/libparser_a-parser.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='parser.cc' object='libparser_a-parser.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libparser_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libparser_a-parser.obj `if test -f 'parser.cc'; then $(CYGPATH_W) 'parser.cc'; else $(CYGPATH_W) '$(srcdir)/parser.cc'; fi` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/libparser_a-parser.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/libparser_a-parser.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-noinstLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: maude-3.1/src/Mixfix/0000755000175200017520000000000013741222371011512 500000000000000maude-3.1/src/Mixfix/entity.hh0000644000175200017520000000417113741213314013267 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Base class for entities that must inform their users just before they // are deleted or otherwise invalidated. // #ifndef _entity_hh_ #define _entity_hh_ #include class Entity { public: #ifndef NO_ASSERT // // We give ourself a virtual destructor so that debugging code can // use dynamic_cast<>s to figure out what derived object we are. // virtual ~Entity() {} #endif class User { public: virtual void regretToInform(Entity* doomedEntity) = 0; }; void addUser(User* user); void removeUser(User* user); int getNrUsers() const; void informUsers(); private: struct UserLt { bool operator()(const User* user1, const User* user2) const { // // Direct < comparison of unrelated pointers is undefined. But since the casting // to a large enough integer is invertable, it must be injective and so we can // get a total ordering by comparing the integers. // return reinterpret_cast(user1) < reinterpret_cast(user2); } }; typedef set UserSet; UserSet users; }; inline int Entity::getNrUsers() const { return users.size(); // inefficient } #ifndef NO_ASSERT ostream& operator<<(ostream& s, const Entity* e); ostream& operator<<(ostream& s, const Entity::User* u); #endif #endif maude-3.1/src/Mixfix/ChangeLog0000755000175200017520000241070113741213777013226 000000000000002020-10-12 Steven Eker * entity.hh (class Entity): made UserLt::operator() const to fix clang warning 2020-10-09 Steven Eker * interact.cc (UserLevelRewritingContext::handleInterrupt): more detail messages ===================================Maude130a=========================================== 2020-10-05 Steven Eker * variantMatch.cc (Interpreter::variantMatch): check problemOK() before proceeding * getVariants.cc (Interpreter::getVariants): check problemOK() before proceeding * variantUnify.cc (Interpreter::variantUnify): check problemOK() before proceeding * userLevelRewritingContext.hh (class UserLevelRewritingContext): added static data member rewriteCountAtLastInterrupt * interact.cc (UserLevelRewritingContext::beginCommand): initialize rewriteCountAtLastInterrupt to -1 (UserLevelRewritingContext::handleInterrupt): two ctrl-C events without intervening rewrite to abort 2020-09-17 Steven Eker * variantMatch.cc (Interpreter::variantMatchCont): ignore debug flag and added comment to explain why we do so 2020-09-15 Steven Eker * search.cc (Interpreter::search): new calling convention for NarrowingSequenceSearch3() 2020-09-11 Steven Eker * getVariants.cc (Interpreter::doGetVariants): rewritten to use findNextVariant() and getCurrentVariant() 2020-09-10 Steven Eker * variantUnify.cc (Interpreter::variantUnify): fix memory leak and bug where we were not checking variables names by passing DELETE_FRESH_VARIABLE_GENERATOR and CHECK_VARIABLE_NAMES to FilteredVariantUnifierSearch 2020-09-09 Rubén Rubio * bufferPrint.cc (prettyPrint): fixed erratum, leftBrace was used when leftParen was required ===================================Maude130=========================================== 2020-09-08 Steven Eker * variantUnify.cc (Interpreter::variantUnify): print timing here in filtered case because all the reducing and variant narrowing is done upfront (Interpreter::doVariantUnification): computed filteredState; only print stats if !filteredState (2 places) 2020-09-04 Steven Eker * variantMatch.cc (Interpreter::doVariantMatching): added Advisory if fresh variable(s) introduced (Interpreter::variantMatch): printStats() here (Interpreter::doVariantMatching): deleted 2 calls to printStats() (Interpreter::variantMatch): addInCount() from subjectContext (Interpreter::variantMatch): subjectContext to makeVariantMatchingProblem() 2020-09-01 Steven Eker * variantUnify.cc (Interpreter::variantUnify): pass IRREDUNDANT flag to FilteredVariantUnifierSearch() in preparation for a change in semantics 2020-08-28 Steven Eker * variantUnify.cc (Interpreter::doVariantUnification): warn user about incomplete filtering and advise user of complete filtering * freshVariableSource.cc (FreshVariableSource::isFreshVariableName): added 2020-08-25 Steven Eker * variantMatch.cc (Interpreter::variantMatch): reduce subject dag before using it 2020-08-21 Steven Eker * interpreter.hh (class Interpreter): added decls for doVariantMatching(), variantMatchCont() * variantMatch.cc (Interpreter::doVariantMatching) (Interpreter::variantMatchCont): added * variantUnify.cc (Interpreter::variantUnify): fix stray space in echoing variant unify commands * variantMatch.cc (Interpreter::variantMatch): use parseVariantMatchCommand() * mixfixModule.hh (class MixfixModule): added decl for parseVariantMatchCommand() * doParse.cc (MixfixModule::parseVariantMatchCommand): added * mixfixParser.cc (MixfixParser::makeUnifyCommand): UNIFY_LIST -> PAIR_LIST * makeGrammar.cc (MixfixModule::makeComplexProductions): UNIFY_LIST -> PAIR_LIST * mixfixParser.cc (MixfixParser::makeVariantUnifyOrMatchCommand): UNIFY_LIST -> PAIR_LIST * mixfixParser.hh (class MixfixParser): UNIFY_LIST -> PAIR_LIST * doParse.cc (MixfixModule::parseVariantUnifyCommand): use makeVariantUnifyOrMatchCommand() * mixfixParser.hh (class MixfixParser): makeVariantUnifyCommand() becomes makeVariantUnifyOrMatchCommand() * mixfixParser.cc (MixfixParser::makeVariantUnifyCommand): becomes makeVariantUnifyOrMatchCommand() * makeGrammar.cc (MixfixModule::makeComplexProductions): use MAKE_TERM_LIST for irreducible case of get variants/variant unify/variant match * mixfixParser.cc (MixfixParser::makeGetVariantsCommand) (MixfixParser::makeVariantUnifyCommand): use MAKE_TERM_LIST for irreducible case * makeGrammar.cc (MixfixModule::makeComplexProductions): added two rules VARIANT_MATCH_COMMAND * mixfixModule.hh (class MixfixModule): added MULTI_MATCH_COMMAND to enum NonTerminal * makeGrammar.cc (MixfixModule::makeComplexProductions): added two ruls for MULT_MATCH_COMMAND * mixfixModule.hh (class MixfixModule): added VARIANT_MATCH_COMMAND to enum NonTerminal 2020-08-20 Steven Eker * variantMatch.cc: created * top.yy: deleted optFiltered * commands.yy (command): split variant unify into two rules and removed optFiltered to avoid a shift/reduce conflict * interpreter.hh (class Interpreter): added decl for variantMatch() * mixfixModule.hh (class MixfixModule): added decl for makeMatchProblemDags() * mixfixModule.cc (MixfixModule::makeMatchProblemDags): added * commands.yy (command): added variant match 2020-08-06 Steven Eker * variantUnify.cc (Interpreter::variantUnify): create timer before creating FilteredVariantUnifierSearch object because the latter does almost all of its work at creation * commands.yy (command): use filtered rather than irredundant for variant unify because we may not generate irredundant unifiers (command): removed the duplicated coded need to fix the shift/reduce conflict now that we are using filtered rather than irredundant * top.yy: added optFiltered * commands.yy (optFiltered): added * top.yy: added KW_FILTERED * lexer.ll: added KW_FILTERED 2020-08-05 Steven Eker * variantUnify.cc (Interpreter::variantUnify): use FilteredVariantUnifierSearch() 2020-08-04 Steven Eker * variantUnify.cc (Interpreter::doVariantUnification): rewritten to use findNextUnifier(), getCurrentUnifier() rather than getNextUnifier() 2020-07-24 Steven Eker * mixfixModule.cc (MixfixModule::createInternalTupleSymbol): use range-based for loop 2020-07-22 Steven Eker * variantUnify.cc (Interpreter::variantUnify): use new VariantSearch calling conventions * getVariants.cc (Interpreter::getVariants): use new VariantSearch calling conventions 2020-07-17 Steven Eker * commands.yy (command): separate dubug variant unify rule to resolve a shift reduce conflict - when parser sees irredundant it doesn't know whether it is about to see regular unification or whether is should do an empty reduce for optDebug in preparation for variant unification 2020-07-16 Steven Eker * lexer.ll: add irred as an abbreviation for irredundant * interpreter.hh (class Interpreter): updated decl for variantUnify() * variantUnify.cc (Interpreter::variantUnify): take irredundant flag (Interpreter::variantUnify): pass irredundant flag to VariantSearch() to see why this isn't good enough * commands.yy (command): added optIrredundant to variant unify 2020-07-15 Steven Eker * variantUnify.cc (Interpreter::doVariantUnification): Unifier #n -> Unifier n * getVariants.cc (Interpreter::doGetVariants): Variant #n -> Variant n * unify.cc (Interpreter::doUnification): Solution n -> Unifier n * match.cc (Interpreter::doMatching): Solution n -> Matcher n 2020-07-10 Steven Eker * interpreter.hh (class Interpreter): updated decl for unify() * commands.yy (command): allow irredundant prefix; pass flag to Intepreter::Unify() * unify.cc (Interpreter::unify): take irredundant and use IrredundantUnificationProblem ===================================Maude129=========================================== 2020-06-09 Steven Eker * renameModule.cc (ImportModule::donateOps2): DebugNew() -> DebugOld() (2 places) 2020-05-28 Steven Eker * mixfixModule.cc (MixfixModule::nonTerminal): comment out DebugInfo() because it producing voluminous output 2020-05-05 Steven Eker * interact.cc (UserLevelRewritingContext::setHandlers): ignore SIGPIPE 2020-04-14 Steven Eker * userLevelRewritingContext.hh (class UserLevelRewritingContext): added decl for blockAndHandleInterrupts() 2020-04-08 Steven Eker * makeGrammar.cc (MixfixModule::makeParameterizedSortProductions): use MixfixParser::newNonTerminal() (MixfixModule::makeSymbolProductions): use MixfixParser::newNonTerminal() * mixfixModule.hh (class MixfixModule): deleted decl for newNonTerminal() * mixfixModule.cc (MixfixModule::newNonTerminal): deleted * mixfixParser.hh (MixfixParser::newNonTerminal): added * doParse.cc (MixfixModule::getParserStats): use getNrTerminals(), getNrNonTerminals() * mixfixParser.hh (MixfixParser::getComponentNonTerminalBase): added (MixfixParser::getNrNonTerminals) added (MixfixParser::getNrTerminals) added * mixfixModule.cc (MixfixModule::nonTerminal): use getComponentNonTerminalBase() * mixfixModule.hh (class MixfixModule): deleted data members complexParser, componentNonTerminalBase, nextNonTerminal * makeGrammar.cc (MixfixModule::makeComponentProductions): use isComplex() (MixfixModule::makeGrammar): use isComplex() * mixfixParser.hh (class MixfixParser): updated decl for MixfixParser() (MixfixParser::isComplex): added (MixfixParser::getNrProductions): made const * mixfixParser.cc (MixfixParser::MixfixParser): take complexFlag, componentNonTerminalBase, nextNonTerminalCode * mixfixParser.hh (class MixfixParser): added data members complexParser, componentNonTerminalBase, nextNonTerminal * makeGrammar.cc (MixfixModule::makeGrammar): pass complexFlag, componentNonTerminalBase and nextNonTerminal to MixfixParser() rather than storing them locally. * mixfixModule.hh (class MixfixModule): added comment about transitory nature of iterSymbols, leadTokens * mixfixParser.cc (MixfixParser): added for debugging purposes * mixfixParser.hh (class MixfixParser): added decl for ~MixfixParser() 2020-04-07 Steven Eker * mixfixModule.cc (MixfixModule::economize): change to DebugInfo() * makeGrammar.cc (MixfixModule::makeGrammar): added DebugInfo()s * mixfixModule.cc (MixfixModule::economize): added DebugAdvisory() (MixfixModule::nonTerminal): added DebugAdvisory() * doParse.cc (MixfixModule::parseStatement): changed local variable from complexParser to complexFlag to avoid confusion with object member 2020-03-31 Steven Eker * symbolType.hh (class SymbolType): added PROCESS_MANAGER_SYMBOL * entry.cc (MixfixModule::newFancySymbol): add ProcessMangagerSymbol * specialSymbolTypes.cc: added ProcessMangagerSymbol 2020-03-10 Rubén Rubio * mixfixModule.cc (donateStatements2): copy nonexec attribute * mixfixParser.cc (makeStatementPart): handle nonexec attribute ===================================Maude128a=========================================== 2020-02-19 Steven Eker * variantUnify.cc (doVariantUnification): test for interrupted before checking for no result * unify.cc (doUnification): test for interrupted before checking for no result * interact.cc (infoHandler): added comments; deleted commented out code (interruptHandler): added comments * userLevelRewritingContext.hh (ObjectSystemRewritingContext): commented out declaration for clearInterrupt() * interact.cc (clearInterrupt): commented out * userLevelRewritingContext.cc (tracePreEqRewrite): added comments to explain what situations are handled * interact.cc (handleInterrupt): move comment to head of function and deleted commented out code * match.cc (doMatching): rearrange statements so that we abort before trying to print a matcher * unify.cc (doUnification): added comment to explain rearranged statement order 2020-02-18 Steven Eker * unify.cc (doUnification): check for ^C interrupt before printing solution number to avoid garbage solutions being printed 2020-02-13 Steven Eker * syntacticPreModule.cc (getFlatModule): rewritten; we no longer expect importStatements() to be able to set the bad flag * importModule.cc (resetImportPhase): use range-based for loop; deleted commented out call to resetImports() (dumpImports): use range-based for loops (deepSelfDestruct): range-based for loops * syntacticPreModule.cc (getFlatModule): added comment to explain checkFreshVariableNames(); deleted commented out IssueWarning()s 2020-02-12 Steven Eker * interpreter.cc (setCurrentModule): updated comment (makeModule): deleted commented out IssueAdvisory() for renaming of modules with bound parameters since it will never be a cause for concern as prelude makes heavy use of this feature; updated comment 2020-02-11 Steven Eker * interpreter.cc (~Interpreter): updated comment * viewDatabase.cc (~ViewDatabase): updated comment * moduleCache.cc (~ModuleCache): moved here * viewCache.hh (User): added decl for ~ViewCache() * viewCache.cc (ViewCache): added * moduleCache.hh (~ModuleCache): added 2020-02-07 Steven Eker * commands.yy (command): allow module name in do clear memo and make use of setCurrentModule() to check validity of the module * interpreter.cc (setCurrentModule): code cleaning; added comments (parse): fixed comment 2020-02-05 Steven Eker * syntacticPreModule.cc (getFlatModule): partially fix bug where we importStatements() into a bad module (moves breakage elsewhere) 2020-02-04 Steven Eker * importModule.cc (importStatements, donateStatements): added DebugEnter() * process.cc (process): do closeSortSet() early in the hope of unifying common code (checkOpTypes): added comment to explain what it does (checkType): added comment to explain what it does (getSort): added comment to explain what it does * preModule.cc (processExplicitImports): added comments to explain why we don't bail on first error * process.cc (processImports): added comment to explain why we don't bail on first error ===================================Maude128=========================================== 2019-12-16 Steven Eker * auxProperty.cc: added missing copyright notice ===================================Maude127a=========================================== 2019-12-05 Steven Eker * compiler.cc (runExecutable): use returnValueDump to avoid unused result warning in GCC * interact.cc (internalErrorHandler): use returnValueDump to avoid unused result warning in GCC (3 places) (stackOverflowHandler): ditto * top.yy (directive): use returnValueDump rather than (void) to avoid GCC's unused result warning (2 places) * lexer.ll: added KW_LL * top.yy: added KW_LL; semantics for KW_LL 2019-12-04 Steven Eker * yices2_Bindings.cc (pop): use DebugSave() to avoid unused variable warnings (makeVariable): add default: to case SMT_Info::REAL: to avoid spurious uninitialized variable warning * mixfixParser.cc (makeTerms, makeStrategyExprs): use DebugSave() to avoid unused variable warnings * interact.cc (sigsegvHandler): commented out fault_address to indicate we don't use it 2019-12-03 Steven Eker * mixfixParser.cc (insertProduction): fix comparison between signed and unsigned integer expressions warning ===================================Maude127=========================================== 2019-12-02 Rubén Rubio * interpreter.cc: included (fair/depthFirst)FirstStrategicSearch.hh * srewrite.cc (sRewrite): constructs FairStrategicSearch or DepthFirstStrategicSearch depending on the depthFirst parameter (doStategicSearch): removed call to findNextSolutionInDepth 2019-11-22 Steven Eker * lexerAux.cc (eatComment): treat NUL as EOF to patch around what appears to be a flex bug * dagNodePrint.cc (handleDivision): respect PRINT_DISAMBIG_CONST (handleFloat): ditto (handleString): ditto (handleIter): ditto (handleSMT_Number): ditto (handleQuotedIdentifier): ditto (handleMinus): ditto * top.yy: added KW_CONST * lexer.ll: added KW_CONST * commands.yy (printOption): added syntax for disambig const * dagNodePrint.cc (prettyPrint): respect PRINT_DISAMBIG_CONST for regular constants * termPrint.cc (prettyPrint): respect PRINT_DISAMBIG_CONST for regular constants * interpreter.hh (ParameterDatabase): added PRINT_DISAMBIG_CONST to enum PrintFlags 2019-11-21 Steven Eker * interpreter.hh (ParameterDatabase): updated decl for doLoop() * loopMode.cc (loop): create context here rather than in doLoop(); set object mode if EREWRITE_LOOP_MODE flag set (contLoop2): reuse savedState in order to keep external objects; delete savedState on failure (contLoop): create context and possibly with object mode set if we reinitialize loop (doLoop): take context; don't make context (doLoop): use chosen rewrite algorithm; set appropriate continuation function * loopSymbol.hh (FreeSymbol): updated decl for injectInput() * loopSymbol.cc (injectInput): do in-place replacement of original node rather than returning a pointer to a new one * mixfixModule.hh (SharedTokens): deleted decl for 1 arg version of swapVariableAliasMap() * mixfixModule.cc (swapVariableAliasMap): deleted less general 1 arg version * interpreter.hh (ParameterDatabase): deleted decl for doExternalRewriting() * erewrite.cc (doExternalRewriting): deleted * interpreter.hh (ParameterDatabase): added EREWRITE_LOOP_MODE to enum Flags ===================================Maude126=========================================== 2019-11-14 Rubén Rubio * bufferPrint.cc (prettyPrint): solved bug when printing the top combinator, reported by Paco 2019-11-05 Rubén Rubio * syntacticPreModule.cc (addStatement): allow mb/eq/rl in smod/sth * syntacticPreModule.hh (addSortDecl, addSubsortDecl): allow sorts/subsorts in smod/sth * ops.cc (addOpDecl): allow op in smod/sth (addStratDecl): warning message rewritten * mixfixModule.hh (insertPotentialRuleLabels): bugfix: insert() rather than assignment * makeGrammar.cc (makeGrammar): bugfix: call to makeLabelProductions unconditionally since now makeStrategyLanguageProductions only generate RULE_LABEL 2019-11-05 Steven Eker * mixfixModule.hh (SharedTokens): made buffer version of handleVariable() non-static * bufferPrint.cc (handleVariable): handle variable aliases 2019-11-01 Steven Eker * syntacticView.cc (handleTermAndExprMappings): save and restore original parsers; delete any newly created parsers when we're done (showView): save and restore original parsers; check for unexpected parser creation * mixfixModule.cc (swapVariableAliasMap): added two arg version * mixfixModule.hh (SharedTokens): added decl for two arg version of swapVariableAliasMap() 2019-10-29 Steven Eker * mixfixParser.hh (CacheableState): undid derivation from CacheableState 2019-10-28 Steven Eker * mixfixParser.hh (CacheableState): derive from CacheableState ===================================Maude125=========================================== 2019-10-10 Rubén Rubio * bufferPrint.cc (prettyPrint): use ruleLabels instead of potentialLabels to decide whether there is a homonym rule in the module. The loop did not work when the arity was zero. * doParse.cc (parseStrategyExpr): now receives the beginning and end of the tokens to be parsed * importModule.cc (closeSortSet): set nrUserComponents (importRuleLabels): renamed from importLabels and range-based loops * importModule.hh: added attribute nrUserComponents (getNrUserComponents): added (importRuleLabels): renamed from importLabels * lexer.ll: "to-expr" changed to "to expr" * makeGrammar.cc (makeStrategyLanguageProductions): use RULE_LABEL instead of LABEL for rule application labels. * maudemlBuffer.cc (branchAction): removed (generate): calculate the type of the strategy according to its actions * mixfixModule.cc (MixfixModule): set strategyRangeSort to null * mixfixModule.hh (parseStrategyExpr): now receives the beginning and end of the tokens to be parsed (insertPotentialRuleLabels): added (NonTerminal): added RULE_LABEL * modules.yy (viewStratMap): "to-expr" changed to "to expr" (inert): removed "to-expr" * parameterization.cc (makeSummation): importLabels renamed to importRuleLabels * prettyPrint.cc (printStrategyTerm): become method of MixfixModule, parentheses are printed in calls to strategies with homonym rule. (operator<<): call printStrategyTerm as a method * process.cc (process): importLabels renamed to importRuleLabels, call to insertPotentialRuleLabels * profileModule.cc (profileSdRewrite): added * profileModule.hh (profileSdRewrite): added * renameModule.cc (finishCopy): importLabels renamed to importRuleLabels * srewrite.cc (sRewrite): removed argument to TermSet, free subject term when the strategy expression is wrong, print "No solutions" instead of "No more solutions" if there are no solutions at all. * syntacticView.cc (handleTermAndExprMappings): call parseStrategyExpr withe begin=1 to skip the expr keyword * strategyPrint.cc (prettyPrint): call printStrategyTerm as a method * syntacticPreModule.cc (addStatement): insert to potentialRuleLabels * syntacticPreModule.hh (potentialRuleLabels): added * top.yy: removed "to-expr" token declaration * userLevelRewritingContext.cc (traceStrategyCall): call profileSdRewrite * view.cc (insertStratToExprMapping): removed argument to TermSet * viewCache.cc (viewCompare): become method of ViewCache * visibleModule.cc (showKinds): call getNrUserKinds 2019-10-08 Steven Eker * trial.cc (traceEndFragment): reverted change from Alpha95b that broke fragment profiling (traceEndFragment): added comment to explain why we can't rely on trialRef to decide if this fragment is profileable (traceEndFragment): do a getModule() on the preEquation to decide if a fragment is profileable ===================================Maude124=========================================== 2019-09-19 Rubén Rubio * bufferPrint.cc (prettyPrint): solved a bug in the matchrew case 2019-07-15 Rubén Rubio * modules.yy: renamed makeOpDeclsConsistent to makeDeclsConsistent * ops.cc (makeDeclsConsistent): renamed from makeOpDeclsConsistent and handle strategy declarations * strategyTranslation.cc (getStratToExprMapping, getStratToExprMapping): label renamings were not applied to rule application strategies * syntacticPreModule.hh (makeDeclsConsistent): renamed from makeOpDeclsConsistent 2019-07-12 Steven Eker * importTranslation.cc (translateRegularSymbol): use AlwaysAssert() 2019-07-11 Steven Eker * parameterization.cc (addOpMappingsFromView): pass parameterCopyUser to addFromPartOfRenaming() * instantiateModuleWithFreeParameters.cc (handleInstantiationByModuleView): pass extra arument to addOpMappingsFromView() (handleInstantiationByTheoryView): pass extra argument to addOpMappingsFromView() * instantiateViewWithFreeParameters.cc (handleInstantiationByTheoryView): pass extra arument to addOpMappingsFromView() (handleInstantiationByModuleView): pass extra argument to addOpMappingsFromView() * importModule.hh (EnclosingObject): updated decls for translateComponent() and addFromPartOfRenaming() * parameterization.cc (addFromPartOfRenaming) (translateComponent): take parameterCopyUser argument * importModule.hh (EnclosingObject): updated decl for addOpMappingsFromView() * parameterization.cc (addOpMappingsFromView): take parameterCopyUser argument; use it to ensure op mapping get added with the potentially larger components belonging to the user of the parameterCopy 2019-06-03 Rubén Rubio * importModule.cc (importLabels): use importedRuleLabels set (donateStrategies): adapted to changes in alpha121. * instantiateModuleWithBoundParameters.cc (instatiateRenaming): handle strategy mappings * instantiateModuleWithFreeParameteres.cc (handleInstantiationByModuleView): call to addStratMappings * instantiateViewWithFreeParameters.cc (makeInstantiation): call to handleStratMappings and handleStratToExprMappings (handleInstantiationByTheoryView): call to addStratMappingsFromView (handleInstantiationByModuleView): call to addStratMappingsFromView (handleStratMappings, handleStratAkwardCase): added (handleStratToExprMappings): added * parameterization.cc (addStratMappingsFromView): used getStratToExprMappings * renaming.cc (addStratMappingPartialCopy): added (addStratTargetExpr): now receives and stores the left-hand side expression * renaming.hh (addStratMappingPartialCopy): added (addStratTargetExpr): now receives the left-hand side expression (getStratFromCall): added (StratMapping): added fromCall attribute * syntacticView.cc (handleTermAndExprMappings): adapted insertStratToExprMapping to the changes of alpha121 (getTargetExprModule): removed * view.cc (insertStratToExprMapping): adapted to the changes of alpha121 (getStratMapExpr, getStratMapVarIndices): removed (getStratToExprMapping): added (checkStrats): call to getStratToExprMapping * view.hh (insertStratToExprMapping): adapted to the changes of alpha121 (handleStratMappings, handleStratAkwardCase): added (handleStratToExprMappings, getStratToExprMapping): added (getTargetExprModule): removed 2019-05-28 Steven Eker * instantiateViewWithFreeParameters.cc (makeInstantiation): use new makeToModule() semantics * view.hh (EnclosingObject): updated decl for makeToModule() * instantiateViewWithFreeParameters.cc (makeToModule): return targetInstance rather than insert it * instantiateModuleWithBoundParameters.cc (handleFinalInstantiation): added defensive code in case v->instantiateBoundParameters() returns null 2019-05-25 Rubén Rubio * command.cc (printStratDecl): call to printAttributes (printAttributes): added for strategy declarations * commands.yy: added show sds and show strats commands * entry.cc (addStrategy): added metadata parameter. Call findStrategy and insertMetadata * importModule.cc (donateStrategies2): donate metadata (donateStatements2): donate attributes of strategy definitions * interpreter.cc (showStrats, showSds): added * interpreter.hh (showStrats, showSds): added * lexer.ll: added lexemes for show sds/strats commands * metadataStore.hh (ItemType): added STRAT_DECL and STRAT_DEF * mixfixModule.hh (addStrategy): added metadata parameter * mixfixParser.cc (makeStatementPart): handle metadata and print attribute in strategy definitions * modules.yy: added strategy declaration attributes syntax * prettyPrint.cc (operator<<): print metadata in strategy declarations * process.cc (processStrategies): handle metadata * syntacticPreModule.hh (printAttributes): added for strategy decls * top.yy: added KW_STRATS * userLevelRewritingContext.cc (traceStrategyCall): handle print attribute and corrected an erratum in traces (too many line breaks) * view.cc (evaluate): moved a check about strategy mappings in views (insertStratToExprMapping): solved some memory leaks * visibleModule.cc (showSummary): added strategy declarations and definitions to the summary (showModule): call to showSds (showStrats): moved code showing strategy definitions to showSds (showSds): added from showStrats * visibleModule.hh (showSds): added 2019-05-24 Steven Eker * view.hh (EnclosingObject): added decl for makeToModule() * instantiateViewWithFreeParameters.cc (makeToModule): added (makeInstantiation): use makeToModule() but make sure this happens after parameters instantiated by theory-views have been checked for conflicts * syntacticView.hh (_syntacticView_hh_): fix header guard * interpreter.cc (makeModule): commented out advisory about renaming module with bound parameters 2019-05-23 Steven Eker * quotedIdentifierOpSymbol.cc (eqRewrite): use new tokenizeRope() convention * tokenizer.ll (Rope): pass back pointer than reference from tokenizeRope() to avoid an issue with yyterminate()/YY_NULL * mixfixParser.cc (insertProduction): made check for bad gather size #ifndef NO_ASSERT * view.cc (insertOpToTermMapping): deleted unused variable i 2019-05-22 Steven Eker * view.hh (operator<<): needed in the NO_ASSERT case also * token.cc (splitParameterInstanceName): commented out * renaming.hh (SyntaxContainer): commented out decl for addOpMappingSimpleCopy() * renaming.cc (addOpMappingSimpleCopy): commented out * token.hh (T): commented out decl for splitParameterInstanceName() * syntacticView.cc (addParameter2): comment out experimental advisory for parameterized views * interpreter.cc (handleArgument): comment out experimental advisory for view instantiation * modules.yy (view): don't hand responsibility for deleted fromTheory/toModule expressions until the production has succeed and their no longer on the bision stack (instantExpr): delete vector after passing its contents to ModuleExpression() 2019-05-21 Steven Eker * instantiateModuleWithFreeParameters.cc (makeInstantiation): DebugAdvisory() -> DebugInfo() * instantiateViewWithFreeParameters.cc (makeInstantiation): set copy status to BAD rather than using markAsBad() * view.hh (isBad): added (EnclosingObject): don't derive from BadFlag * view.cc (evaluate): check for recursive use; set status to PROCESSING * process.cc (process): added closeSortSet() hack to that SyntacticPreModule::getFlatSignature() won't get confused * syntacticPreModule.cc (getFlatSignature): added DebugNew() 2019-05-20 Steven Eker * importModule.hh (EnclosingObject): added decl for checkForPolymorphOperatorClash() * importModule.cc (checkForPolymorphOperatorClash): added * moduleCache.cc (makeSummation): deleted commented out code 2019-05-16 Steven Eker * view.hh (EnclosingObject): deleted decl for recoverVariableNames() * instantiateViewWithFreeParameters.cc (handleOpMappings): pass fromTerm to handleAwkwardCase() (handleAwkwardCase): simplified using fromTerm argument (recoverVariableNames): deleted * view.cc (checkOps): getOpMapTerm() -> getOpToTermMapping() (2 places) * instantiateViewWithFreeParameters.cc (handleOpMappings): getOpMapTerm() -> getOpToTermMapping() * parameterization.cc (addOpMappingsFromView): getOpMapTerm() -> getOpToTermMapping() * view.hh (EnclosingObject): getOpMapTerm() -> getOpToTermMapping() * view.cc (getOpMapTerm): becomes getOpToTermMapping() * view.hh (EnclosingObject): updated decl for getOpMapTerm() * view.cc (getOpMapTerm): new semantics * parameterization.cc (addOpMappingsFromView): propagate fromTerm for op->term mappings * renaming.cc (addOpTargetTerm): store fromTerm (addOpTarget): zero fromTerm (both versions) * renaming.hh (SyntaxContainer): updated decl for addOpTargetTerm() (SyntaxContainer): added fromTerm field to struct OpMapping (getFromTerm): added 2019-05-15 Steven Eker * instantiateViewWithFreeParameters.cc (makeInstantiation): use handlePolymorphMappings() * view.hh (EnclosingObject): deleted decl for old handleOpMappings(); added decl for handlePolymorphMappings() * instantiateViewWithFreeParameters.cc (handleOpMappings): deleted old version (handlePolymorphMappings): added * view.hh (EnclosingObject): added decls for handleAwkwardCase(), recoverVariableNames() * instantiateViewWithFreeParameters.cc (recoverVariableNames) (handleAwkwardCase): added (handleOpMappings): use handleAwkwardCase() * renaming.cc (printRenaming): replaced Assert() that op->term mappings aren't printable with debug code that prints a syntactically illegal representation 2019-05-14 Steven Eker * instantiateViewWithFreeParameters.cc (makeInstantiation): use new version of handleOpMappings() (handleOpMappings): check for the existence of an op->term mapping and don't general mapping for such operators * view.hh (EnclosingObject): delete decl for old handleSortMappings(); add decl for new handleOpMappings() * instantiateViewWithFreeParameters.cc (handleOpMappings): added canonicalRenaming base version 2019-05-13 Steven Eker * view.cc (checkSorts): check for case where module declared sort is implicitly mapped to a sort derived from a parameter theory (checkSorts): added check for sort mapping from nonexistent sort * instantiateViewWithFreeParameters.cc (makeInstantiation): delete canonicaRenaming once we are done with it; use new handleSortMappings() (handleSortMappings): handle pathological case (handleSortMappings): deleted old version * view.hh (EnclosingObject): added decl for new version of handleSortMappings() * renaming.hh (SyntaxContainer): added comment to explain that terms are never owned nor deleted and the semantics of using Renaming means that dangling Term* pointers are never dereferenced * parameterization.cc (addOpMappingsFromView): added comment to the effect that the renaming borrows toTerm * instantiateViewWithFreeParameters.cc (handleOpToTermMappings): fixed comments (handleSortMappings): added simpler version base on canonicalRenaming 2019-05-10 Steven Eker * view.hh (EnclosingObject): deleted decl for old version of handleOpToTermMappings() * instantiateViewWithFreeParameters.cc (handleInstantiationByParameter): use addSortRenamingsForParameterChange() to update canonical if the parameter name changes (handleInstantiationByModuleView): use addSortMappingsFromModuleView(), addOpMappingsFromView() (makeInstantiation): use handleParameterizedSorts() (makeInstantiation): use new handleOpToTermMappings() (handleOpMappings): adde new version (handleOpMappings): deleted old version * instantiateModuleWithFreeParameters.cc (handleInstantiationByModuleView): use addSortMappingsFromModuleView() * importModule.hh (EnclosingObject): added decl for addSortMappingsFromModuleView() * parameterization.cc (addSortMappingsFromModuleView): added * instantiateModuleWithFreeParameters.cc (handleInstantiationByParameter): use addSortRenamingsForParameterChange() * importModule.hh (EnclosingObject): added decl for addSortRenamingsForParameterChange() * parameterization.cc (addSortRenamingsForParameterChange): added * instantiateViewWithFreeParameters.cc (handleInstantiationByTheoryView): use new addOpMappingsFromView() * instantiateModuleWithFreeParameters.cc (handleInstantiationByTheoryView): use new addOpMappingsFromView() (handleInstantiationByModuleView): use new addOpMappingsFromView() (addOpMappingsFromView, translateComponent): deleted * importModule.hh (EnclosingObject): added decls for new versions of addOpMappingsFromView(), translateComponent(); deleted decls for old verions of addOpMappingsFromView(), translateComponent(); adde decl for addFromPartOfRenaming() * parameterization.cc (translateComponent): added (translateComponent, addFromPartOfRenaming) (addOpMappingsFromView): added * importModule.hh (EnclosingObject): deleted decl for old version of addSortMappingsFromTheoryView() * instantiateModuleWithFreeParameters.cc (addSortMappingsFromTheoryView): deleted * instantiateViewWithFreeParameters.cc (handleInstantiationByTheoryView): use new version of addSortMappingsFromTheoryView() * instantiateModuleWithFreeParameters.cc (handleInstantiationByTheoryView): use new version of addSortMappingsFromTheoryView() * importModule.hh (EnclosingObject): added decl for new addSortMappingsFromTheoryView() * parameterization.cc (addSortMappingsFromTheoryView): added version that takes parameterCopyOfTheory as object 2019-05-09 Steven Eker * instantiateViewWithFreeParameters.cc (handleInstantiationByTheoryView): use ImportModule::addSortMappingsFromTheoryView() * instantiateModuleWithFreeParameters.cc (handleInstantiationByTheoryView): use addSortMappingsFromTheoryView() * importModule.hh (EnclosingObject): added decl for addSortMappingsFromTheoryView() * instantiateModuleWithFreeParameters.cc (addSortMappingsFromTheoryView): added 2019-05-08 Steven Eker * view.hh (EnclosingObject): updated decls for handleInstantiationByTheoryView(), handleInstantiationByParameter(), handleInstantiationByModuleView() * instantiateViewWithFreeParameters.cc (handleInstantiationByTheoryView): made const (handleInstantiationByParameter): made const (handleInstantiationByModuleView): made const * importModule.hh (EnclosingObject): make addOpMappingsFromView() public * instantiateViewWithFreeParameters.cc (makeInstantiation): no longer deal with the case that our toModule has no parameters since each of our free parameters is required to be bound in toModule (makeInstantiation): make toModule instantiation before worrying about the rest of the view (handleInstantiationByTheoryView): call addOpMappingsFromView() * view.cc (evaluate): make having parameters that are not bound in the toModule illegal - this greatly simplifies handling parameters since now we can rely on the toModule machinery for much of the heavy lifting (regretToInform): don't do the pretend self-destruct now that we rely on our toModule to trigger the invalidation cascade 2019-05-07 Steven Eker * instantiateViewWithFreeParameters.cc (handleInstantiationByTheoryView): added some of the code to make a canonical renaming * importModule.hh (getCanonicalRenaming): added * view.hh (EnclosingObject): updated decls for handleInstantiationByTheoryView() handleInstantiationByParameter(), handleInstantiationByModuleView() 2019-05-06 Steven Eker * importModule.hh (EnclosingObject): added decls for handleSummation(), handleRenaming(), handleFinalInstantiation() (EnclosingObject): updated comment on parameter theories and imports now that this are kept in separate data structures * instantiateModuleWithBoundParameters.cc (instantiateRenaming): use DebugEnter()/DebugExit() (handleSummation, handleRenaming, handleFinalInstantiation): addes (instantiateBoundParameters): rewritten using handleSummation(), handleRenaming(), handleFinalInstantiation() 2019-05-03 Steven Eker * instantiateModuleWithBoundParameters.cc (instantiateBoundParameters): handle summation * importModule.hh (EnclosingObject): deleted VIEW_LOCAL from enum Origin * interpreter.cc (makeModule): check for free parameters in sum rather than any parameters * parameterization.cc (makeSummation): handle bound parameters * instantiateModuleWithFreeParameters.cc (handleBoundParameters): updated comment about the existence of parameter theory copies * moduleCache.cc (makeSummation): use ImportModule::makeSummation() * importModule.hh (EnclosingObject): added decl for makeSummation() * parameterization.cc (makeParameterCopy): use DebugEnter()/DebugExit() (makeSummation): added * instantiateModuleWithFreeParameters.cc (handleRegularImports): use DebugInfo() (makeInstantiation): use DebugEnter() (makeInstantiation): use DebugExit() * view.hh (EnclosingObject): added comments for enum Status * interpreter.cc (showView): don't call SyntacticView::showView() unless the view is in a GOOD state * importModule.hh (EnclosingObject): updated decls for handleInstantiationByModuleView(), handleBoundParameters() * instantiateModuleWithFreeParameters.cc (handleInstantiationByParameter): code cleaning (handleBoundParameters): check for null from makeParameterCopy() (handleInstantiationByModuleView): check for failure from handleBoundParameters() (makeInstantiation): check for failure from handleInstantiationByModuleView() * process.cc (processImports): check bad flag after processing parameters and quit if bad so we don't get spurious warnings about missing parameters * renameModule.cc (donateSorts2): complain about the renamed sort rather than the original name since that's where the clash occurs; this should only affect parameter theory copies since in other cases we form the renamed theory or module first * process.cc (process): check for badness after doing parameters/imports * preModule.cc (processExplicitImports): mark import as bad if import couldn't be constructed or had free parameters (processParameters): mark flat module as bad if parameter couldn't be constructed or parameter was illegal * process.cc (processImports): mark importer as bad if import failed 2019-05-02 Steven Eker * importModule.hh (EnclosingObject): updated decl for handleInstantiationByModuleView(); added decl for handleBoundParameters() * instantiateModuleWithFreeParameters.cc (handleBoundParameters): added (handleInstantiationByModuleView): use handleBoundParameters() (handleInstantiationByModuleView): don't keep track of bound parameters or return a bool * view.hh (EnclosingObject): added decl for handleOpToTermMappings() * instantiateViewWithFreeParameters.cc (handleOpToTermMappings): added (makeInstantiation): use handleOpToTermMappings() * view.hh (EnclosingObject): added decl for handleOpMappings() * instantiateViewWithFreeParameters.cc (handleSortMappings): rewritten to check for sorts from parameter theory that actually came from a module originally (handleOpMappings): added (makeInstantiation): use handleOpMappings() * preModule.cc (processParameters): handle makeParameterCopy() returning null * parameterization.cc (makeParameterCopy): check for makeParameterCopy() returning null * importModule.hh (EnclosingObject): updated decl for handleInstantiationByParameter() * instantiateModuleWithFreeParameters.cc (handleInstantiationByTheoryView): check for makeParameterCopy() returning null (handleInstantiationByParameter): check for makeParameterCopy() returning null (makeInstantiation): handle return value from handleInstantiationByParameter() * moduleCache.cc (makeParameterCopy): handle the possibility of a bad parameter copy under weird circumstances * renameModule.cc (donateSorts2): set sortDeclaredInModule even for module->module importations * instantiateViewWithFreeParameters.cc (handleInstantiationByModuleView): added comment to explain why copying conflicts from argument is currently needed (handleInstantiationByParameter): added comment to explain why propagating conflicts on bare parameters is unnecessary (makeInstantiation): use handleSortMappings() 2019-05-01 Steven Eker * instantiateViewWithFreeParameters.cc (handleInstantiationByModuleView): add conflicts between bare parameters and bound parameters in module-view (handleInstantiationByModuleView): copy in conflicts from argument - but need to check if this is really needed * instantiateModuleWithFreeParameters.cc (handleInstantiationByModuleView): fix bug where we were doing conflict generation and propagation even for theory-view because we had if-nesting wrong * instantiateViewWithFreeParameters.cc (handleInstantiationByParameter): record positionsInstantiatedParameter * view.cc (evaluate): use setToModule() * instantiateViewWithFreeParameters.cc (makeInstantiation): use setToModule() * view.hh (setToModule): added * instantiateViewWithFreeParameters.cc (makeInstantiation): add in conflicts from targetInstance * viewCache.cc (makeViewInstantiation): check for bad view returned from makeInstantiation() * view.hh (EnclosingObject): updated decl for handleInstantiationByTheoryView() (BadFlag): add BadFlag as a public base * instantiateViewWithFreeParameters.cc (makeInstantiation): use handleInstantiationByTheoryView(), handleInstantiationByParameter(), handleInstantiationByModuleView() (handleInstantiationByTheoryView): check for conflict (makeInstantiation): check for failure from handleInstantiationByTheoryView() * view.hh (EnclosingObject): added decls for handleInstantiationByTheoryView(), handleInstantiationByParameter(), handleInstantiationByModuleView() * instantiateViewWithFreeParameters.cc (handleInstantiationByTheoryView) (handleInstantiationByParameter) (handleInstantiationByModuleView): added 2019-04-30 Steven Eker * instantiateViewWithFreeParameters.cc (makeInstantiation): handle the case where a sort is mapped to a sort from a parameter theory (makeInstantiation): fix bug where we were using the wrong iterator variable for bound parameters in a module-view arugment * token.hh (T): decl for parameterRename() becomes makeParameterInstanceName() * instantiateModuleWithFreeParameters.cc (handleInstantiationByTheoryView): parameterRename() -> makeParameterInstanceName() (handleInstantiationByParameter): parameterRename() -> makeParameterInstanceName() * parameterization.cc (makeParameterCopy): parameterRename() -> makeParameterInstanceName() (2 places) * token.cc (splitParameterInstanceName): added (parameterRename): becomes makeParameterInstanceName() * token.hh (T): added decl for splitParameterInstanceName() * auxProperty.cc (splitParameterizedSort): added comment to explain what it does (splitParameterList): added comment to explain what it does (joinParameterList): added comment to explain what it does 2019-04-29 Steven Eker * instantiateViewWithFreeParameters.cc (makeInstantiation): moved here * instantiateViewWithBoundParameters.cc (instantiateBoundParameters): moved here 2019-04-26 Steven Eker * interpreter.cc (makeModule): check for theory-view and view with bound parameters in the same instantiation (handleArgument): check for theory-view and view with bound parameters in the same instantiation * importModule.cc (addImport): propagate conflicts here * instantiateModuleWithFreeParameters.cc (handleRegularImports): don't propagate conflicts here * enclosingObject.cc (addConflict, addInAllConflicts) (hasConflict, findFirstClash): added * instantiateModuleWithFreeParameters.cc (handleRegularImports): add in conflicts from imports * importModule.hh (EnclosingObject): update decl for handleInstantiationByModuleView() * instantiateModuleWithFreeParameters.cc (makeInstantiation): pass positionsInstantiatedParameter to handleInstantiationByModuleView() * enclosingObject.hh (E): added decl for hasConflict() * instantiateModuleWithFreeParameters.cc (makeInstantiation): handle new handleInstantiationByParameter() semantics * importModule.hh (EnclosingObject): updated decl for handleInstantiationByParameter() * instantiateModuleWithFreeParameters.cc (makeInstantiation): handle failure from handleInstantiationByTheoryView() (handleInstantiationByParameter): propagate conflicts from us to our instantiation at positions instantiated by parameter (handleInstantiationByParameter): take positionsInstantiatedParameter as an argmuent * enclosingObject.hh (E): added decls for addInAllConflicts() and makeConflictsWithBoundParameters() * importModule.hh (EnclosingObject): updated decl for handleInstantiationByTheoryView() * instantiateModuleWithFreeParameters.cc (handleInstantiationByTheoryView): check for conflicts between parameters and return bool * enclosingObject.hh (E): added decls for addConflict() and firstClash() 2019-04-23 Steven Eker * importModule.cc (donateSorts): don't make recursive call on parameterTheories - the importer will alrady have these (donateOps): symmetric change (fixUpDonatedOps): symmetric change (donateStatements): symmetric change (resetImportPhase): call self rather than resetImports() because there is no need to reset parameterTheories because we won't have imported from them. 2019-04-22 Steven Eker * renameModule.cc (makeRenamedCopy): rewritten for parameterTheories/importedModules split * instantiateModuleWithFreeParameters.cc (handleInstantiationByParameter): use parameterTheories (handleInstantiationByTheoryView): use parameterTheories (handleInstantiationByModuleView): use parameterTheories (handleRegularImports): don't skip first entries as they are no longer parameter theories * importModule.cc (deepSelfDestruct): remove ourself as user of parameter theories (importSorts): rewritten for parameterTheories/importedModules split (donateSorts): rewritten for parameterTheories/importedModules split (importOps): rewritten for parameterTheories/importedModules split (donateOps): rewritten for parameterTheories/importedModules split (fixUpImportedOps): rewritten for parameterTheories/importedModules split (importStatements): rewritten for parameterTheories/importedModules split (fixUpDonatedOps): rewritten for parameterTheories/importedModules split (addParameter): use parameterTheories (resetImports): rewritten for parameterTheories/importedModules split (dumpImports): rewritten for parameterTheories/importedModules split (donateStatements): rewritten for parameterTheories/importedModules split * importModule.hh (EnclosingObject): added data member parameterTheories * importModule.cc (addParameter): more detailed warning message (addImport): more detailed warning message * instantiateModuleWithFreeParameters.cc (makeInstantiation): do parameters from enclosing objects last (handleInstantiationByTheoryView): code cleaning (handleInstantiationByParameter): code cleaning * instantiateView.cc (makeInstantiation): toModule -> viewToModule in view arugment code to avoid confusing overloading 2019-04-19 Steven Eker * instantiateView.cc (makeInstantiation): make parameterizedSortRenaming * importModule.hh (EnclosingObject): make handleParameterizedSorts() public so we can call it from View * instantiateModuleWithFreeParameters.cc (handleParameterizedSorts): don't sorts from parameter theories 2019-04-18 Steven Eker * importTranslation.cc (translateTerm): added comment to explain why skipping translation of toTerm during instantiation is a fail 2019-04-17 Steven Eker * importTranslation.cc (translateTerm): added comments to explain how it works * syntacticView.cc (handleOpTermMappings): take responsibility for deepSelfDestruct()ing fromTerm and toTerm if insertOpToTermMapping() fails * view.cc (insertOpToTermMapping): make caller responsible for deepSelfDestruct()ing term on error * syntacticView.cc (handleOpTermMappings): don't pass line numbers to insertOpToTermMapping() (handleOpTermMappings): propagate errors from insertOpToTermMapping() * view.hh (EnclosingObject): updated decl for insertOpToTermMapping() * view.cc (insertOpToTermMapping): use line number from term for warning about too many arguments in lhs; improve warning message (insertOpToTermMapping): use line number from term for warning about non-variable arugments in lhs; improve the warning message (insertOpToTermMapping): use line number from term for warning about repeated use of variable in lhs; improve warning message (insertOpToTermMapping): don't take line number arguments * view.hh (EnclosingObject): updated decl for indexRhsVariables() * view.cc (indexRhsVariables): don't take lineNr; use *term instead; better warning message (insertOpToTermMapping): don't pass lineNumber to indexRhsVariables() * view.hh (EnclosingObject): updated decl for insertOpToTermMapping() * view.cc (insertOpToTermMapping): don't take targetModule; don't pass module to mapSort() * syntacticView.cc (handleOpTermMappings): don't pass toModule to insertOpToTermMapping() * view.hh (EnclosingObject): updated decl for mapSort() * view.cc (mapComponent): don't take module argument (checkOps): don't pass module argument to mapComponent() (mapSort): don't take or pass module argument * view.hh (EnclosingObject): updated decl for mapComponent() * syntacticView.cc (handleOpTermMappings): don't pass toModule to mapComponent() * view.hh (EnclosingObject): LocalParameter->ParameterDecl * view.cc: LocalParameter->ParameterDecl * view.hh (EnclosingObject): updated comments 2019-04-16 Steven Eker * syntacticView.cc (handleOpTermMappings): code cleaning * mixfixModule.hh (SharedTokens): deleted decls for pushVariableAliases(), popVariableAliases() (SharedTokens): deleted data member savedVariableAliases * mixfixModule.cc (pushVariableAliases, popVariableAliases): deleted * syntacticView.cc (handleVarDecls): put alias info in fromTheoryVariableAliases and toModuleVariableAliases (handleOpTermMappings): rewritten to use fromTheoryVariableAliases and toModuleVariableAliases (showView): swap variable aliases before and after printing out op->term mappings (handleVarDecls): clear fromTheoryVariableAliases and toModuleVariableAliases in case we are reexamining this view * syntacticView.hh (View): added data members toModuleVariableAliases, fromModuleVariableAliases * mixfixModule.hh (SharedTokens): added decl for swapVariableAliasMap() * mixfixModule.cc (swapVariableAliasMap): added * syntacticView.hh (View): deleted data members newFromTheory, newToModule; deleted decls for ~SyntacticView(), regretToInform(), finishModule() * syntacticView.cc (handleOpTermMappings): simplified using pushVariableAliases()/popVariableAliases() (SyntacticView): don't init newFromTheory, newToModule (~SyntacticView): deleted (regretToInform): deleted (finishModule): deleted (handleVarDecls): use original fromTheory/toModule rather than newFromTheory/newToModule * mixfixModule.hh (SharedTokens): added data member savedVariableAliases; added decls for pushVariableAliases(), popVariableAliases() * mixfixModule.cc (pushVariableAliases): added (popVariableAliases): added 2019-04-15 Steven Eker * moduleExpression.cc (deepSelfDestruct): get rid of RENAMING fall thru now that INSTANTIATION has to deepSelfDestruct() ViewExpressions * viewExpression.cc (deepSelfDestruct): delete self * interpreter.cc (handleArgument): fixed warning so they don't refer to enclosing expressions (which is unavailable) 2019-04-12 Steven Eker * view.cc: struct Parameter -> struct LocalParameter throughout file * view.hh (EnclosingObject): updated decl for 2nd ctor (EnclosingObject): struct Parameter -> struct LocalParameter * viewCache.hh (User): updated decl for makeViewInstantiation() * viewCache.cc (makeViewInstantiation): use Argument* * view.hh (EnclosingObject): updated decls for makeInstantiation() and instantiateBoundParameters() * instantiateView.cc (makeInstantiation): use Argument* (instantiateBoundParameters): rewritten to use Argumetn* * view.cc (View): use Argument* (~View): use savedArguments * view.hh (EnclosingObject): deleted data members savedViewArgs, savedParameterArgs; added data member savedArguments * importModule.cc (deepSelfDestruct): need to check savedArguments for views that we're no longer a user of * importModule.hh (EnclosingObject): updated decl for instantiateBoundParameters() * instantiateModuleWithBoundParameters.cc (instantiateBoundParameters): rewritten to handle Argument* * importModule.hh (EnclosingObject): updated decls for makeInstantiation(), handleInstantiationByParameter(), handleInstantiationByTheoryView(), handleInstantiationByModuleView(), handleRegularImports() (EnclosingObject): deleted data members savedViewArgs, savedParameterArgs; added data member savedArguments * instantiateModuleWithFreeParameters.cc (makeInstantiation): don't pass parameterArgs to handleInstantiationByParameter() (handleInstantiationByParameter): handle Argument* (handleInstantiationByTheoryView): handle Argument* (handleInstantiationByModuleView): handle Argument* (makeInstantiation): don't pass parameterArgs to handleRegularImports() (handleRegularImports): handle Argument* * moduleCache.hh (User): added decl for makeModuleInstatiation() * moduleCache.cc (makeModuleInstatiation): added * interpreter.hh (ParameterDatabase): updated decl for handleArgument * interpreter.cc (handleArgument): rewritten to use Argument* (makeModule): use makeModuleInstantiation * parameterDatabase.cc (getParameter): added * interpreter.cc (makeModule): use Argument* for passing arguments rather that View* and parameter names * interpreter.hh: inherit from ParameterDatabase * mixfix.hh: added class ParameterDatabase * parameterDatabase.cc: created * parameterDatabase.hh: created * interpreter.cc (makeModule): arguments -> argumentExpressions (handleArgument): arguments -> argumentExpressions * enclosingObject.hh (E): make hasBoundParameters() public * importModule.hh (hasBoundParameters): deleted * renameModule.cc (makeRenamedCopy): use copyBoundParameters() * enclosingObject.hh (copyBoundParameters): added * importModule.hh (hasBoundParameters): use EnclosingObject::hasBoundParameters() * view.hh (hasBoundParameters): deleted * enclosingObject.hh (hasBoundParameters): added * instantiateView.cc (makeInstantiation): call addBoundParameter() (2 places) * instantiateModuleWithFreeParameters.cc (handleInstantiationByParameter): call addBoundParameter() (handleInstantiationByModuleView): call addBoundParameter() * enclosingObject.hh (E): added data member boundParameters (addBoundParameter): added * view.cc (View): pass name to Argument ctor rather than NamedEntity ctor * view.hh (EnclosingObject): derive from Argument rather than NamedEntity * mixfix.hh: added class Argument and class Parameter * argument.hh: created * parameter.hh: created 2019-04-10 Steven Eker * instantiateView.cc (makeInstantiation): use DebugEnter() and DebugExit() (instantiateBoundParameters): use DebugEnter() and DebugExit() (makeInstantiation): use DebugInfo() 2019-04-09 Steven Eker * instantiateView.cc (makeInstantiation): handle general and specific op->op mappings (instantiateBoundParameters): remove FIXME because we are handling the case where the are bound parameters in a savedViewArgument * renaming.hh (SyntaxContainer): added decl for addOpMappingSimpleCopy() * renaming.cc (addOpMappingSimpleCopy): added * instantiateView.cc (makeInstantiation): handle the dubious case where the toModule has no parameters * view.hh (setCleanName): deleted (EnclosingObject): updated decls for ctor and makeInstantiation() * view.cc (View): take and set cleanName * instantiateView.cc (makeInstantiation): take cleanName argument and pass it to View ctor * viewCache.cc (makeViewInstantiation): pass cleanName to makeInstantiation rather than using setCleanName() * view.hh (EnclosingObject): updated decl for instantiation version of ctor * instantiateView.cc (makeInstantiation): pass viewArgs to ctor (makeInstantiation): don't add copy as a user since this is already done in the ctor for view instantiations * view.cc (View): (instantiation version) take and save view arguments; add ourselves as a user of each such argument (~View): remove ourselves as a user of each view argument * view.hh (EnclosingObject): updated comments 2019-04-08 Steven Eker * instantiateView.cc (makeInstantiation): get nrBoundParameters from argumentView rather than toModule to handle the case where not all of the parameters appear in toModule * view.hh (EnclosingObject): make baseView const so it can only be set in the ctor * instantiateView.cc (makeInstantiation): updated comment (makeInstantiation): clean up instantiation by parameter from an enclosing object case (makeInstantiation): don't set pointer to baseView in bound argument case since this is already done in the View() ctor that is used for instantiations 2019-04-05 Steven Eker * view.cc (regretToInform): call informUsers() if we become stale to catch an edge case (evaluate): issue an advisory for view parameters that are not bound in the target module * interpreter.cc (handleArgument): check for free parameters in view argument * view.hh (hasBoundParameters, hasFreeParameters): added * interpreter.cc (makeModule): check for free parameters in view argument 2019-04-03 Steven Eker * interpreter.cc (handleArgument): warning should refer to view instantiation rather than module instantiation (2 places) (handleArgument): more detailed warning (makeModule): allow renaming of modules with bound parameters but issue an advisory 2019-04-02 Steven Eker * view.cc (View): add self as user of baseView (~View): remove self as user of baseView (View): add our interpreters viewCache as a user * view.hh (EnclosingObject): added decl for new ctor * view.cc (View): added version of instantiations 2019-03-29 Steven Eker * instantiateView.cc (makeInstantiation): use hasFreeParameters() * instantiateModuleWithFreeParameters.cc (handleRegularImports): use hasFreeParameters() * view.cc (evaluate): use hasFreeParameters() * preModule.cc (processExplicitImports): use hasFreeParameters() * importModule.hh (parametersBound): deleted (hasFreeParameters): added * interpreter.cc (makeModule): use hadBoundParameters(); remove NEED TO FIX comment * preModule.cc (processExplicitImports): use hasBoundParameters() * instantiateView.cc (makeInstantiation): use hasBoundParameters() * view.cc (evaluate): use hasBoundParameters() * instantiateModuleWithBoundParameters.cc (instantiateBoundParameters): use hasBoundParameters() * instantiateModuleWithFreeParameters.cc (makeInstantiation): use hasBoundParameters() (handleRegularImports): use hasBoundParameters() (2 places) * importModule.hh (hasBoundParameters): added (EnclosingObject): deleted commented out ParameterMap, ParameterSet * view.cc (addParameter): call addUser() to add self to theories users (View): init fromExpr, toExpr (~View): check for non-null before deepSelfDestruct()ing module expressions * importModule.cc (deepSelfDestruct): viewArgs -> savedViewArgs * instantiateModuleWithFreeParameters.cc (makeInstantiation): paramArgs -> savedParameterArgs (makeInstantiation): viewArgs -> savedViewArgs * instantiateModuleWithBoundParameters.cc (instantiateBoundParameters): viewArgs -> savedViewArgs (instantiateBoundParameters): paramArgs -> savedParameterArgs * importModule.hh (EnclosingObject): viewArgs -> savedViewArgs; paramArgs -> savedParameterArgs (parametersBound): paramArgs -> savedParameterArgs (parametersBound): viewArgs -> savedViewArgs 2019-03-28 Steven Eker * importModule.hh (parametersBound): moved here; make OK to call on all modules, even ones without parameters * interpreter.cc (makeModule): don't allow renaming of modules with bound parameters 2019-03-27 Steven Eker * instantiateView.cc (makeInstantiation): use boundParameter flag to insure we keep baseView, savedViewArgs, savedParameterArgs, even if bound parameters come from our arguments * view.hh (EnclosingObject): added comments 2019-03-26 Steven Eker * instantiateView.cc (makeInstantiation): use cleanName() for view arguments; first attempt at handling arguments that are view instantiations with bound parameters * syntacticView.cc (addParameter2): changed advisory message * instantiateView.cc (instantiateBoundParameters): moved here (makeInstantiation): moved here 2019-03-25 Steven Eker * importModule.cc (importSorts): fix longstanding bug where we didn't set nrSortsFromParameters unless we had at least one regular importation of a module (importOps): fix symmetric bugs with nrSymbolsFromParameters and nrPolymorphsFromParameters * renameModule.cc (makeRenamedCopy): added comment; deleted commented out Assert() because we do allow the renaming of modules with bound parameters * renaming.cc (makeCanonicalVersion): added DebugAdvisory()s * renameModule.cc (localSort2): turn Assert() into a DebugAdvisoryCheck() (localSort2): reverted 2019-03-22 Steven Eker * instantiateModuleWithFreeParameters.cc (makeInstantiation): pass moduleCache to handleInstantiationByModuleView() * importModule.hh (EnclosingObject): updated decl for handleInstantiationByModuleView() * instantiateModuleWithFreeParameters.cc (handleInstantiationByModuleView): take moduleCache argument * importModule.cc (getParameterTheory): moved here because it is virtual in base class EnclosingObject * importModule.hh (EnclosingObject): added more explanation of how parameter theories are stored * instantiateModuleWithFreeParameters.cc (handleInstantiationByParameter): toModule -> baseParameterTheory * importModule.hh (getParameterTheory): added comment to explain why it works the way it does * instantiateModuleWithFreeParameters.cc (handleInstantiationByParameter): added DebugAdvisory() to check change in parameter theory name * moduleCache.cc (showCreatedModules): call dumpImports() * importModule.cc (dumpImports): added * importModule.hh (EnclosingObject): added decl for dumpImports() * moduleCache.cc (showCreatedModules): dump sorts if we are in debug mode 2019-03-21 Steven Eker * instantiateModuleWithBoundParameters.cc (instantiateBoundParameters): views -> viewArgumentsForView, names -> parameterArgumentsForView (instantiateBoundParameters): added and rewrote many comments * importModule.hh (EnclosingObject): update decl for instantiateBoundParameters() * instantiateModuleWithBoundParameters.cc (instantiateBoundParameters): arguments -> viewArguments (instantiateBoundParameters): parameterArgs -> parameterArguments 2019-03-20 Steven Eker * parameterization.cc (makeParameterCopy): added DebugAdvisory()s * instantiateModuleWithFreeParameters.cc (makeInstantiation): added DebugAdvisory() * instantiateModuleWithBoundParameters.cc (instantiateBoundParameters): added DebugAdvisory()s 2019-03-14 Steven Eker * view.cc (View): initialize cleanName rather than cacheName * viewCache.cc (makeViewInstantiation): cacheName -> name, name -> cleanName * importModule.hh (EnclosingObject): deleted commented out decl for instantiateSortName() * view.hh (setCacheName): becomes setCleanName() (getCacheName): becomes getCleanName() * instantiateModuleWithBoundParameters.cc (instantiateBoundParameters): use getCleanName() for the view name * moduleCache.cc (makeInstatiation): use id() rather than getCacheName() * instantiateModuleWithFreeParameters.cc (handleInstantiationByTheoryView): use getCleanName() for the view name (handleInstantiationByModuleView): use getCleanName() for the view name * viewCache.cc (makeViewInstantiation): don't put spaces in trueNames 2019-03-13 Steven Eker * moduleCache.cc (makeInstatiation): use cacheName for views as arguments in new module name 2019-03-12 Steven Eker * view.cc (makeInstantiation): save arguments for views with bound parameters (instantiateBoundParameters): handle the case where the baseView had a parameter that was bound to a view that had a bound parameter * view.hh (EnclosingObject): added decl for instantiateBoundParameters() (EnclosingObject): added data members savedViewArgs, savedParameterArgs * instantiateModuleWithBoundParameters.cc (instantiateBoundParameters): handle views with bound parameters found in instantiation of baseModule * view.cc (View): initialize baseView and cacheName (makeInstantiation): set baseView if we create a bound parameter * viewCache.cc (makeViewInstatiation): handle cacheNames (showCreatedViews): display cacheNames * view.hh (EnclosingObject): added data member cacheName (setCacheName): added (getCacheName): added 2019-03-11 Steven Eker * importModule.hh (EnclosingObject): updated decl for handleInstantiationByModuleView() * instantiateModuleWithFreeParameters.cc (handleInstantiationByModuleView): check module view to see if it has bound parameters that need be become bound parameters in the module instantiation (makeInstantiation): handle case where parameters are bound by module-view (handleInstantiationByModuleView): return bound parameters flag * view.cc (makeInstantiation): handle binding of a free parameter by a PEM (makeInstantiation): add bound parameter to copy * importModule.hh (EnclosingObject): deleted decl for mapSortFromBaseModule() * importModule.cc (mapSortFromBaseModule): deleted * view.hh (EnclosingObject): deleted decl for instantiateSortName() * view.cc (makeInstantiation): use instantiateSortName() rather than mapSortFromBaseModule() (instantiateSortName): deleted 2019-03-08 Steven Eker * viewDatabase.hh (V): updated decl for showNamedViews() * viewDatabase.cc (showNamedViews): take ostream& argument * commands.yy (command): call showViews() * interpreter.hh (ViewCache): added decl for showViews() * interpreter.cc (showViews): added 2019-03-06 Steven Eker * instantiateModuleWithFreeParameters.cc (handleParameterizedSorts): moved here * instantiateModuleWithBoundParameters.cc (instantiateBoundParameters) (instantiateRenaming): moved here * instantiateModuleWithFreeParameters.cc (makeInstantiation) (handleInstantiationByParameter) (handleInstantiationByTheoryView) (handleInstantiationByModuleView, translateComponent) (addOpMappingsFromView, handleRegularImports): moved here * parameterization.cc (handleParameterizedSorts): rewritten using instantiateSortName() * enclosingObject.cc (instantiateSortName): reimplemented and moved here * enclosingObject.hh (E): added decl for instantiateSortName() (E): moved typedefs for ParameterMap and ParameterSet here 2019-03-05 Steven Eker * view.cc (makeInstantiation): handle parameters caused by instantiation by theory-views * view.hh (EnclosingObject): added decl for ImportModule* version of addParameter() * view.cc (makeInstantiation): use mapSortFromBaseModule() (addParameter): added ImportModule* version * importModule.cc (mapSortFromBaseModule): added * importModule.hh (EnclosingObject): added decl for mapSortFromBaseModule() 2019-03-04 Steven Eker * parameterization.cc (handleInstantiationByParameter): added comments to explain sort mapping (handleInstantiationByTheoryView): added comments to explain sort mapping (handleParameterizedSorts): added comments to explain how sort mapping works 2019-03-01 Steven Eker * view.cc (handleOpTermMappings): added (instantiateSortName): added * view.hh (EnclosingObject): added decl for makeInstantiation() * viewCache.cc (makeViewInstantiation): implemented * view.cc (makeInstantiation): added * importModule.hh (EnclosingObject): made instantiateBoundParameters() public * interpreter.hh (ViewCache): added decl for handleArgument() * interpreter.cc (handleArgument): added (makeModule): use handleArgument() 2019-02-28 Steven Eker * view.cc (findParameterIndex, getParameterTheory) (getObjectType, getObjectName): added (evaluate): check for bound parameters in toModule (regretToInform): handle calls from parameter theories and clean out parameter theories * view.hh: derive from EnclosingObject (EnclosingObject): added decls for findParameterIndex(), getParameterTheory(), getObjectType(), getObjectName() * view.cc (evaluate): pass ourself as an EnclosingObject to makeModule() for fromTheory and toModule * importModule.hh (EnclosingObject): added decls for getObjectType(), getObjectName() * importModule.cc (getObjectType, getObjectName): added * interpreter.hh (ViewCache): updated decl for makeModule() * interpreter.cc (makeModule): use EnclosingObject throughout * mixfix.hh: added class EnclosingObject * importModule.hh (EnclosingObject): derive from EnclosingObject * enclosingObject.hh: created * view.cc (~View): remove self from users of our parameters; deepSelfDestruct() parameter module expressions (evaluate): evalutate parameter theories 2019-02-26 Steven Eker * syntacticView.cc (showView): handle parameters * view.hh (getNrParameters, getParameterName) (getParameterTheoryExpression): added * syntacticView.cc (addParameter2): call addParameter() 2019-02-25 Steven Eker * interpreter.hh (ViewCache): derive from ViewCache * mixfix.hh: added class ViewCache * viewCache.cc: created 2019-02-22 Steven Eker * viewCache.hh: created 2019-02-21 Steven Eker * view.hh (Renaming): added decl for addParameter() * view.cc (addParameter): added * view.hh (Renaming): added data member parameters (Renaming): added struct Parameter 2019-02-13 Steven Eker * bottom.yy: added deepSelfDestructViewExpressionVector() * top.yy: added destructor decls for , adde decl for deepSelfDestructViewExpressionVector() * interpreter.cc (makeModule): added check for view instantiation * moduleExpression.cc (deepSelfDestruct): deepSelfDestruct() view expressions * interpreter.cc (makeModule): deal with ViewExpression* * moduleExpression.cc (<<): handle instantiation arguments of type Vector * moduleExpression.hh (getArguments): now return const Vector& 2019-02-13 Steven Eker * moduleExpression.hh (M): data member arguments becomes Vector * moduleExpression.cc (ModuleExpression): now take Vector& * moduleExpression.hh (M): updated decl for instantiation ctor * modules.yy (viewExpr, instantArgs): added (argList): deleted (instantExpr): use instantArgs * top.yy: added yyViewExpression to union added types for viewExpr, instantArgs 2019-02-12 Steven Eker * top.yy: deleted stack moduleExpressions * bottom.yy: (cleanUpModuleExpression): don't handle moduleExpressions here - just currentRenaming * modules.yy (view): use new moduleExpr return value (parameter): use new moduleExpr return value (declaration): use moduleExprDot return value * top.yy: define return type for changed nonterminals * modules.yy (moduleExprDot): use parser stack for passsing ModuleExpression* (parenExpr, instantExpr, renameExpr, moduleExpr): symmetric changes * top.yy: added comment to explain the existence of stack moduleExpressions deleted a number of commented out declarations added yyModuleExpression to %union * mixfix.hh: added class ViewExpression 2019-02-11 Steven Eker * viewExpression.cc: created * viewExpression.hh: created 2019-02-05 Steven Eker * cvc4_Bindings.cc (dagToCVC4): Kind::IFF -> Kind::EQUAL to compile with latest version of CVC4 (dagToCVC4): remove special casing for BOOLEAN EQUAL ===================================Maude121=========================================== 2018-12-20 Rubén Rubio * commands.yy: added dsrewrite production * doParse.cc (parseStrategyExpr2): added * interpreter.hh (sRewrite, doStrategicSearch): added parameter (dsRewriteCont): added * lexer.ll: added dsrew/dsrewrite lexemes * maudemlBuffer.cc (generateSRewrite): added parameter srew/dsrew * maudemlBuffer.cc (generateSRewrite): added parameter srew/dsrew * mixfixModule.hh (parseStrategyExpr2): added (bufferPrint, prettyPrint): added overloads for strategy expressions, condition fragments, and vector of these * prettyPrint.cc (printStrategyTerm): replaced RawArgumentIterator by ArgumentIterator * srewrite.cc (sRewrite, doStrategicSearch): added parameter srew/dsrew (dsRewriteCont): added * syntacticView.cc (handleTermAndExprMappings): solved memory leak * top.yy: added KW_DSREWRITE token * view.cc (~View): call to clearStratExprMap (clearStratExprMap): added * view.hh (clearStratExprMap): added 2018-11-21 Steven Eker * modules.yy (parameter): use currentSyntaxContainer->addParameter2() (view): added syntax for parameterized views * renaming.hh (SyntaxContainer): added decl for addParameter2() * renaming.cc (addParameter2): added * syntacticView.hh (View): added decl for addParameter2() * syntacticView.cc (addParameter2): added * syntacticPreModule.hh (SharedTokens): added decl for addParameter2() * syntacticPreModule.cc (addParameter2): added * syntaxContainer.hh (S): added decl for addParameter2() ===================================Maude120=========================================== 2018-10-09 Steven Eker * userLevelRewritingContext.cc (tracePreRuleRewrite): add handling for dummy rewrites 2018-09-28 Steven Eker * getVariants.cc (doGetVariants): pass variableFamily argument to getNextVariant() (doGetVariants): change unused arguments to getNextVariant() into dummies to indicate we don't use these values 2018-09-25 Steven Eker * importModule.hh (User): added comment to explain why protectCount exists * importModule.cc (unprotect): add Assert() for decrementing non-positive protectCount 2018-09-19 Steven Eker * freshVariableSource.hh (FreshVariableGenerator): updated decl for variableNameConflict() * freshVariableSource.cc (variableNameConflict): take okFamily argument and don't report conflicts for variables from this family 2018-09-18 Steven Eker * freshVariableSource.cc (getFamily): don't need to call Token::unflaggedCode() since single characters will not be variable names and therefore cannot be flagged 2018-09-17 Rubén Rubio * metaSrewrite.cc (metaSRewrite): calling check properly * importModule.hh: replaced GlobalSubstitution by a vector of terms * importTranslation.cc (translateExpr): changed getStratVar by getStratVarIndices * parameterization.cc (addStratMappingFromView): changed addStratMappingVars by addStratMappingVarIndices * renaming.cc (addStratMappingVarIndices): renamed from addStratMappingVars * renaming.hh: attribute vars replaced by varsMap, a vector of indices (getStratVarIndices): renamed from getStratVars (addStratMappingVarIndices): renamed from addStratMappingVars * srewrite.cc (sRewrite): abort if check fails on the strategy * strategyTranslation.cc (instantiateExpression, instantiateCall): use variable indices instead of variable terms (instantiateCondition): use variable indices instead of terms (instantiateTerm): removed (TermCompare): removed * syntacticView.cc (handleTermAndExprMappings): solved a bug caused by a wrong literal index in an array access * view.cc (getStratMapVarIndices): renamed from getStratMapVars (insertStratToExprMapping): added a call to check on the strategy and creation of the context shape * view.hh (StratExprInfo): changed vars by contextShape (getStratMapVarIndices): renamed from getStratMapVars 2018-09-14 Rubén Rubio * maudemlBuffer.cc (generateSRewrite): added (branchAction): added (generate): added for StrategyExpression * maudemlBuffer.hh (generateSRewrite, generate): added for StrategyExpression * srewrite.cc (doStrategicSearch, sRewriteCont): add XML output generation 2018-09-13 Steven Eker * top.yy (directive): added KW_SLOAD; implmented sload * lexer.ll: added sload * lexerAux.cc (includeFile): pass const string& rhat than char* to DirectoryMangager::pushd() (includeFile): call visitFile() * global.cc (findFile): use directoryManager.getCwd() rather than "." so we always have an absolute directory path 2018-09-12 Steven Eker * lexerAux.cc (MAX_IN_DEPTH): changed to 100 ===================================Maude119=========================================== 2018-08-18 Rubén Rubio * userLevelRewritingContext.cc (traceStrategyCall): show strategy name and subject term only if trace whole is on 2018-07-27 Steven Eker * interact.cc (where): save, clear and restore ctrlC_Flag so to hande siginfo/ctrl-C interactions safely 2018-07-24 Steven Eker * userLevelRewritingContext.hh (ObjectSystemRewritingContext): added decl for printStatusReportCommon() * interact.cc (printStatusReportCommon): added (printStatusReport): use printStatusReportCommon() (handleInterrupt): check for infoFlag and produce a status report if set ===================================Maude118=========================================== 2018-07-18 Rubén Rubio * renaming.cc (addOpMappingPartialCopy): fixed a bug, lastSeenWasStrategy was not set 2018-07-17 Rubén Rubio * syntacticView.cc: when merging alpha117, changes for strategy mappings were copied from view.cc * syntacticView.hh: when merging alpha117, changes for strategy mappings were copied from view.hh 2018-07-10 Steven Eker * interpreter.hh (ViewDatabase): made beginRewriting non-static * execute.cc (beginRewriting): call setTraceStatus() if we don't call setDebug() so that we don't start with spurious traceFlag caused by SIGINFO * userLevelRewritingContext.hh (clearInfo): added * execute.cc (beginRewriting): call clearInfo() to dispose of any pending info requests * interact.cc (handleDebug): make sure we switch trace flag off if we are only here because of SIGINFO * userLevelRewritingContext.hh (ObjectSystemRewritingContext): updated decl for handleDebug() * interact.cc (handleDebug): removed constness from subject * userLevelRewritingContext.hh (ObjectSystemRewritingContext): updated decl for where(); added decl for printStatusReport() * interact.cc (printStatusReport): take ostream& (printStatusReport): added (handleDebug): call printStatusReport(); pass cout to where() * userLevelRewritingContext.hh (ObjectSystemRewritingContext): added decl for handleInterrupt() * interact.cc (handleInterrupt): added 2018-07-09 Steven Eker * interact.cc: add data member UserLevelRewritingContext::infoFlag (handleDebug): check and reset infoFlag * userLevelRewritingContext.hh (ObjectSystemRewritingContext): add static data member infoFlag; add decl for infoHandler() * interact.cc (infoHandler): added (setHandlers): install infoHandler 2018-07-03 Steven Eker * unify.cc (unify): fix a suble memory leak where we were failing to unprotect() module if the unification problem was bad 2018-06-29 Steven Eker * syntacticPreModule.hh (SharedTokens): updated decl for getAutoImports() (getAutoImports): use new convention * preModule.hh (User): updated decl for getAutoImports() 2018-06-25 Steven Eker * visibleModule.cc (VisibleModule): use new ImportModule() * importModule.hh (User): added decl for 2nd ctor * importModule.cc (ImportModule): added new version for use by VisibleModule * preModule.cc (processExplicitImports): deleted commented out code * syntacticPreModule.hh (SharedTokens): derive from SharedTokens * preModule.hh (User): don't derive from SharedTokens * mixfixModule.hh (SharedTokens): made data member moduleType const 2018-06-22 Rubén Rubio * commands.yy: added KW_SDS to traceOption * entry.cc (addStrategy): receives a Token instead of a label name and warns about redefinitions * importModule.cc (ImportModule): initialize nrStrategyFromParameters (fixUpDonatedOps): assert on the new import phase STRATS_IMPORTED (importStrategies): set nrStrategiesFromParameters (donateRuleLabels): do nothing if in STRATS_IMPORTED (donateStrategies2): consider if module is donating to theory, and addStrategy is always used instead of insertStrategy (donateStatements2): fixed an erratum * importModule.hh: new phase STRATS_IMPORTED, new data members nrStrategiesFromParameters and stratDeclaredInModule (moduleDeclared, parameterDeclared): added for RewriteStrategy (instantiateCall): added * importTranslation.cc (translateStrategy): removed const from variable type * interact.cc (handleDebug): added strategy call trace support * interpreter.hh: added TRACE_SD (for StrategyDefinition) * lexer.ll: removed sview/endsv keywords, added synonyms for enabling or disabling strategy call traces * mixfixModule.cc (closeSortSet): using isStrategic to be more succinct (findStrategy): removed const from the parameter type * mixfixModule.hh (addStrategy): receives a Token instead of a label name (findStrategy): removed const from the parameter type (isStrategic): added (canHaveAsParameter): taking strategy modules into account * modules.yy: added strategy mappings in module expressions * moduleCache.cc (makeSummation): add strategy importation * ops.cc (addOpDecl): warning about op declarations in strategy mods (addStratDecl): warning about strategy declarations in fmod/mod * parameterization.cc (addStratMappingsFromView): used moduleDeclared (makeInstantiation): changed when to promote a module to strategy module * process.cc (processStrategies): do nothing when fmod or mod, and always use addStrategy * profileModule.cc (clearProfile): clear sdInfo (profileSdConditionStart): added (profileFragment): added strategy definition case (showProfile): added strategy definition case * profileModule.hh: added data member sdInfo (profileSdConditionStart): added * renameModule.cc (finishCopy): removed unneeded curly brackets * renaming.cc (makeCanonicalName): taking strategy renamings into account (makeCanonicalVersion): taking strategy renamings into account * renaming.hh (getStratTypeSorts, discardStratMappings): added * strategyTranslation.cc (deepCopyStrategyExpression): fixed two bugs, top and the one strategy were not copied (instantiateCall): added (instantiateExpression): using instantiateCall and fixed two bugs, top and the one strategy were not instantiated * syntacticPreModule.cc (addStatement): warnings about strategy definitions in fmod/mod, and statements other than sd is smod * syntacticPreModule.hh (addSortDecl, addSubsortDecl): warning in smod * top.yy: added KW_SDS * trial.cc (traceBeginSdTrial): added * userLevelRewritingContext.cc (traceStrategyCall): added * userLevelRewritingContext.hh (traceStrategyCall, traceBeginSdTrial): added * view.cc (view, finishView): removed code for distinguishing sview (finishModule2): added label importation (checkSorts): omit strategy auxiliary symbols range sort (checkStrats): use moduleDeclared (evaluate): removed warnings about sview/endsv and added warnings and discarded strategy mappings in functional views (showView): removed sview/endsv distinction * view.hh: removed isSView data member (view, finishView): removed initial/closing keyword parameter (getStratExprMap, getNewToModule): added 2018-06-22 Steven Eker * syntacticPreModule.hh (SyntaxContainer): deleted data member owner * process.cc (processImports): use getOwner() * syntacticPreModule.cc (regretToInform): use getOwner() (finishModule): use getOwner() (3 places) (SyntacticPreModule): don't initialize owner 2018-06-20 Steven Eker * syntacticPreModule.cc (addImport): pass lineNumber to PreModule::addImport() * preModule.cc (addImport): handle lineNumber argument * preModule.hh (SharedTokens): added lineNumber field to struct Import (SharedTokens): updated decl for addImport() * command.cc (showModule): use modeStrings * syntacticPreModule.hh (SyntaxContainer): added decl for addImport * syntacticPreModule.cc (addImport): added to do Token to import mode conversion * preModule.hh (getImportMode): return ImportModule::ImportMode * preModule.cc (addImport): take mode as an ImportModule::ImportMode (processExplicitImports): don't do Token to mode conversion here * preModule.hh (SharedTokens): store import mode as a ImportModule::ImportMode rather than a token. * command.cc (showModule): use PreModule parameter and import functionality * syntacticPreModule.cc (SyntacticPreModule): don't deepSelfDestruct() module expressions * syntacticPreModule.hh (getNrImports, getImportMode, getImport) (getNrParameters, getParameterName, getParameter): deleted (SharedTokens): deleted structs Parameter, Import (SharedTokens): deleted data members parameters, imports (SharedTokens): deleted decls for addParameter(), addImport() * syntacticPreModule.cc (addParameter, addImport): deleted * process.cc (processImports): use processParameters(), processExplicitImports(); * preModule.hh (User): added decls for processParameters(), processExplicitImports() * preModule.cc (~PreModule): call deepSelfDestruct() on ModuleExpressions (addParameter, addImport): added (processParameters): added (processExplicitImports): added * preModule.hh (User): added struct members Parameter, Import (User): add data members parameters parameters, imports (getNrImports, getImportMode, getImport, getNrParameters) (getParameterName, getParameter): added (User): added decls for addParameter(), addImport() 2018-06-18 Steven Eker * mixfixModule.hh (getSymbolType): more detailed message in Assert() 2018-06-14 Steven Eker * process.cc (process): pass owner to VisibleModule() * visibleModule.cc (VisibleModule): handle owner argument * visibleModule.hh (ImportModule): take owner rather than parent argument to ctor (ImportModule): added data member owner (getOwner): added 2018-06-12 Steven Eker * process.cc (process): pass parent as null to VisibleModule() * process.cc (process): call addUser() here 2018-05-29 Steven Eker * erewrite.cc (eRewrite, eRewriteCont): use externalRewrite() 2018-05-25 Steven Eker * interpreter.hh (ViewDatabase): updated decl for doExternalRewriting() * erewrite.cc (doExternalRewriting): only call nonblocking eventLoop() if fairTraversal() makes progress (doExternalRewriting): use new fairTranversal() convention; use getProgress() (eRewriteCont): use fairRestart() (eRewriteCont): don't pass limit to doExternalRewriting() (eRewrite): don't pass limit to doExternalRewriting(); pass limit to fairStart() (doExternalRewriting): don't take or pass limit argument 2018-05-24 Steven Eker * erewrite.cc (doExternalRewriting): interleave nonblocking calls to eventLoop() with fairTraversal() 2018-05-09 Steven Eker * view.hh (Renaming): deleted struct VarDecl, struct BubblePair * view.cc (insertOpToTermMapping): added missing return true * view.hh (Renaming): added NO_COPYING macro 2018-05-08 Steven Eker * syntacticView.cc (regretToInform): deepSelfDestruct() other local module to avoid bug where the old local module eventually sends us a unexpected regretToInform() 2018-05-07 Steven Eker * syntacticView.hh (View): deleted typedef VarMap (View): deleted decls for mapSort(), indexRhsVariables() * syntacticView.cc (indexRhsVariables): deleted (handleOpTermMappings): reimplemented (mapSort): deleted * view.hh (insertOpToTermPair): deleted * syntacticView.hh (View): deleted decl for mapComponent() * syntacticView.cc (mapComponent): deleted * view.hh (Renaming): added decls for mapSort(), indexRhsVariables(), insertOpToTermMapping(); added back typedef VarMap * view.cc (mapSort, indexRhsVariables): moved back to class View 2018-05-03 Steven Eker * view.hh (Renaming): delete typedefs for VarDeclList, TypeList, OpTermList, VarMap * syntacticView.cc (regretToInform): dont deepSelfDestruct() anything * view.cc (View): don't clear newFromTheory, newFromModule (regretToInform): don't delete newFromTheory, newFromModule (View): don't delete newFromTheory, newFromModule (evaluate): set status to GOOD before calling handleOpTermMappings() * view.hh (Renaming): make mapComponent() protected (Renaming): deleted decls for handleVarDecls(), indexRhsVariables(), mapSort() (Renaming): deleted data members varDecls, varDefs, opTermList, newFromTheory, newFromModule * interpreter.cc (setCurrentView): downcast to SyntacticView* * mixfix.hh: added class SyntacticView * interpreter.hh (ViewDatabase): use SyntacticView * modules.yy (view): use SyntacticView * view.cc (addVarDecl): deleted (addType): deleted (addOpTermMapping): deleted (mapSort): deleted (finishModule): deleted (handleVarDecls): deleted (indexRhsVariables): deleted (handleOpTermMappings): deleted (showView): deleted * view.hh (Renaming): made regretToInform() protected rather than private (Renaming): make handleOpTermMappings virtual and protected (Renaming): deleted decls for addOpTermMapping(), addVarDecl(), addType() * syntacticView.cc (handleOpTermMappings): use insertOpToTermPair() * view.hh (insertOpToTermPair): added 2018-05-02 Steven Eker * syntacticView.hh: created * syntacticView.cc: created * renaming.cc (renameOp): added comments to distinguish the two versions of this member function 2018-05-01 Steven Eker * view.hh (Renaming): added comment about the metalevel 2018-04-30 Steven Eker * interpreter.cc (showView): call View::evaluate() * view.hh (Renaming): delete decls for finishModule1(), finishModule2(); add decl for finishModule() (finishView): moved here * view.cc (finishModule1, finishModule2): merged into finishModule() (handleOpTermMappings): use finishModule() 2018-04-27 Steven Eker * view.cc (handleOpTermMappings): finish processing newFromTheory before we start processing newToModule to avoid messing up the import phase counter on common imports (handleVarDecls): added comment * renameModule.cc (localStatementsComplete): added comments to explain obscure code * entity.cc (informUsers): added comments to explain obscure code 2018-04-25 Steven Eker * process.cc (processImports): use owner rather than global interpreter * modules.yy (module): pass interpreter to SyntacticModule ctor * syntacticPreModule.hh (SharedTokens): updated decl for ctor (SharedTokens): added owner data member * syntacticPreModule.cc (SyntacticPreModule): take owner argument and remove hack (regretToInform, finishModule): use owner rather than global interpreter * modules.yy (view): pass interpreter to View ctor * view.cc (View): take owner argument (evaluate): use owner rather than global interpreter * view.hh (Renaming): updated decl for ctor; added data member owner 2018-04-24 Steven Eker * renameModule.cc (donateOps2): added Asserts() to see if bug mentioned in comment actually happens 2018-04-20 Steven Eker * modules.yy (viewDecList, skipStrayArrow, parameters, decList) (skipStrayColon, typeList, attributes, identity, sortNameList): provide empty action for empty rhs syntax to avoid default action generating an uninitialized memory read (hookList): provide empty actions 2018-04-18 Steven Eker * banner.cc (printBanner): update copyright year 2018-04-04 Steven Eker * mixfixParser.cc (insertProduction): use productionRhs in place of static rhs2 * mixfixParser.hh (M): added data member productionRhs 2018-03-27 Steven Eker * mixfixParser.cc (ROOT_NODE): removed MSCP10 #define (parseSentence): removed MSCP10 specific code (makeTerms): removed MSCP10 specific code * mixfixParser.hh: removed include for MSCP10 ===================================Maude117=========================================== 2018-04-10 Rubén Rubio * makeGrammar.cc (makeStrategyProduction): added production for one * mixfixParser.cc (makeStrategy): added MAKE_ONE case * mixfixParser.hh: added MAKE_ONE to SemanticActions * specialTokens.cc: added one token * strategyPrint.cc: added 'one' strategy printing 2018-04-06 Rubén Rubio * doParser.cc (parseStrategyExpr): added * importModule.cc (importStrategies, donateStrategies) (donateStrategies2): use Renaming instead of ImportTranslation * importModule.hh: new types GlobalSubstitution (and TermCompare as its comparator) (deepCopyStrategyExpression): now is public (addStratMappingsFromView, instantiateCondition, instantiateExpression) (instantiateTerm, donateRuleLabels): added (donateStrategies2): use Renaming instead of ImportTranslation * importTranslation.cc (translate): for RewriteStrategy, use translateStrategy (translateStrategy): added, taking renamings into account (translateExpr, donateRuleLabels): added * importTranslation.hh (translateExpr, translateStrategy): added * lexer.ll: added KW_EXPR for strat->expr mapping in views. * mixfixModule.hh (parseStrategyExpr): added * mixfixParser.cc (makeStrategyExprs): added * mixfixParser.hh (makeStrategyExprs): added * modules.yy: added syntax for strategy views, using identifier instead of IDENTIFIER for strategy identifiers. * parameterization.cc (addStratMappingsFromView): added (handleInstantiationByModuleView) (handleInstantiationByTheoryView): call addStratMappingsFromView * renameModule.cc (finishCopy): call donateStrategies2 with the Renaming * renaming.cc (typeMatch): added for RewriteStrategy (renameStrat, addStratMapping, addStratTarget, addStratMappingVArs) (addOpMapping): update lastSeenWasStrategy (addStratTargetExpr): added (addType): use lastSeenWasStrategy to know where to add the type (printRenamingType): print strategy renamings types also (printRenaming): print strategy renamings also * renaming.hh: added data members to store strategy renamings and lastSeenWasStrategy (addStratMapping, addStratMappingVars, addStratTarget) (addStratTargetExpr, getNrStratMappings, getStratFrom, getNrStratTypes) (getStratTo, getStratTargetExpr, getStratVars, renameStrat) (typeMatch): added (printRenamingType): receives the sort set directly * strategyTranslation.cc (deepCopyStrategyExpression): support for strat->expr mappings (instantiateExpression, instantiateTerm, instantiateCondition): added (TermCompare::operator()): added * top.yy: added vector strategyCall for strategy call parsing in views and KW_EXPR as token * view.cc: (addStratExprMapping, checkStrats, getStratMapExpr) (getStratMapVars, typeMatch): added (checkSort): skip strategy range sort check (evaluate): in case of a strategy view, check if from is of strategy (finishView): added end token as parameter (handleOpTermMappings): renamed to handleTermAndExprMappings (handleTermAndExprMappings): completion of handleOpTermMappings with support for strat->expr mappings (showView): print strategy views (View): added start token as parameter to decide if it is a sview * view.hh: added support for strategy views. New types StratExprInfo, StratExprMap, StratExprList and data members stratExprList, stratExprMap and isSView. (addStratExprMapping, checkStrats, getStratMapExpr, getStratMapVars) (typeMatch): added (finishView): added end token as parameter (handleOpTermMappings): renamed to handleTermAndExprMappings (handleTermAndExprMappings): added (View): added start token as parameter to decide if it is a sview 2018-03-23 Rubén Rubio * command.cc (printStratDecl): added (showModule): added strategy declaration printing * cvc4_Bindings.cc (dagToCVC4): deleted the distinction in the SMT_Symbol::EQUALS case as not needed * doParse.cc (parseStatement): include strategy productions when parsing strategy definitions (parseStrategyExpr): added * entry.cc (addStrategy): added * importModule.cc: included strategy language headers (importStrategies, importLabels, donateStrategies, donateStrategies2): added (donateStatements2): import strategy definitions * importModule.hh: added new data members nrImportedStrategies and nrOriginalStrategyDefinitions (importStrategies, importLabels, getNrImportedStrategies) (getNrOriginalStrategyDefinitions, deepCopyStrategyExpression) (donateStrategies, donateStrategies2): added * importTranslation.cc (translate): added for RewriteStrategy (splitTranslation, translateExpr, translateStrategy): added (translateTerm): common code with translateExpr moved to splitTranslation * importTranslation.hh (translate): added for RewriteStrategy (splitTranslation, translateExpr, translateStrategy): added * interpreter.cc (~Interpreter): clear continue info no avoid memory leak * lexerAux.cc: added BAR_ASSIGN to TERMINATION_TOKENS (for strategy definitions) * lexer.ll: added sth/sview/endsth/endsv and sd/csd keywords. KW_STRAT is split in 3 variants: KW_STRAT is "strat" and can be either an attribute name or a strategy declaration keyword. KW_DSTRAT is "strats" only for declaration and KW_ASTRAT is "strategy" only for the attribute. Added := as KW_ASSIGN. * makeGrammar.cc (makeStrategyLanguageProductions): changes in how rule productions are generated (see TODO), a grammar production is added for each strategy declaration. New grammar rules for calls and matchrew (makeStatementProductions): new grammar rules for strategy definitions * metadataStore.hh: added STRAT_DEFINITION to ItemType enumeration * mixfixModule.cc (moduleTypeString, moduleEndString): added strategy module types (closeSortSet): added. Creates a universal type for strategies' auxiliary symbol range when in a strategy module (findStrategy): added * mixfixModule.hh: added strategy ModuleTypes and STRATEGY in Bits (closeSortSet, addStrategy, findStrategy, parseStrategyExpr): added (ruleLabels): new data member for early rule label importation (insertPotentialLabels): ruleLabels are added (addImport): comment on strategy modules importation * mixfixParser.cc (makeStrategy): added MAKE_CALL and MAKE_REW cases (makeStrategyCall): added (makeStatementPart): added MAKE_CS and MAKE_CSD cases * mixfixParser.hh: added MAKE_ enumerators for new strategy syntax (makeStrategyCall): added * modules.yy: added syntax for strategy definitions * ops.cc (addStratDecl): added (addVarDecl, addOpDecl): set isStrategy to false (addType, setMetadata): changes so that they also work for strategies * prettyPrint.cc: operator<< for RewriteStrategy and StrategyDefinition (printStrategyTerm): added * process.cc (process): strategy importation and processing (checkOpTypes): check strategy types also (computeStrategyTypes, processStrategies): added * renameModule.cc (finishCopy): copy strategies and rule labels (localStatementsComplete): set nrOriginalStrategyDefinitions * specialTokens.cc: added sd, csd, sth and endsth * srewrite.cc (sRewrite): the strategy expression is checked and processed * strategyPrint.cc (prettyPrint): call strategy printing * strategyTranslation.cc: added * syntacticPreModule.cc (SyntacticPreModule, compatible): consider strategy module and theory types (addParameter): an erratum was corrected (addStatement): do not allow neither rules in strategy modules nor strategy definition in other modules * syntacticPreModule.hh: added data members isStrategy, stratDecls and StratDecl type (addStratDecl, printStratDecl, computeStrategyTypes) (processStrategies): added * top.yy: added keyword KW_ASTRAT, KW_DSTRAT (see lexer.ll). Added KW_ASSIGN for strategy definitions. * visibleModule.cc (showStrats): added (showModule): added showStrats call * visibleModule.hh (showStrats): added 2018-03-09 Steven Eker * mixfixParser.cc (makeTerms): Assert() that we actually found a second parse 2018-03-02 Steven Eker * mixfixParser.cc (makeTerm): fix pathological case where pos ends up outside of the sentence 2018-02-16 Steven Eker * makeGrammar.cc (makeComponentProductions): don't make COLON2_PAIR productions for bubble components 2017-12-21 Steven Eker * mixfixParser.cc (parseSentence): use getErrorPosition() 2017-10-05 Steven Eker * makeGrammar.cc (makeStrategyLanguageProductions): give ?: the gather (e & E) * mixfixModule.hh (SharedTokens): STRAT_BRANCH_PREC from 101 to 55 2017-10-03 Steven Eker * strategyPrint.cc (prettyPrint): pass STRAT_USING_PREC - 1 for substrategies (prettyPrint): add () around test and subterm cases if needed * makeGrammar.cc (makeStrategyLanguageProductions): require strategy argument of using in matchrew be tightly bound * mixfixModule.hh (SharedTokens): STRAT_USING_PREC from 105 to 21, STRAT_USING_LIST_PREC from 105 to 61, STRAT_REW_PREC from 93 to 21 * makeGrammar.cc (makeStrategyLanguageProductions): use gatherAny4 for subterm strategy syntax * mixfixModule.cc: added gatherAny4 (MixfixModule): initialize gatherAny4 * mixfixModule.hh (SharedTokens): added static date member gatherAny4 2017-10-02 Steven Eker * makeGrammar.cc (makeStrategyLanguageProductions): make all test strategy nonterminals have gather ANY * mixfixModule.hh (SharedTokens): STRAT_SEQ_PREC from 95 to 39, STRAT_UNION_PREC form 97 to 41, STRAT_ORELSE_PREC from 99 to 43 (SharedTokens): STRAT_TEST_PREC from 93 to 21 * makeGrammar.cc (makeStrategyLanguageProductions): use INFIX_PREC, gatherAnyAny for strategy lists * mixfixModule.hh (SharedTokens): added STRAT_BASIC_PREC * makeGrammar.cc (makeStrategyLanguageProductions): use STRAT_BASIC_PREC for basic strategies 2017-09-28 Steven Eker * strategyPrint.cc (prettyPrint): hanlde SubtermStrategy case * mixfixParser.cc (makeStrategy): use SubtermStrategy() 2017-09-26 Steven Eker * makeGrammar.cc (makeStrategyLanguageProductions): use MAKE_USING_PAIR and MAKE_USING_LIST actions (makeStrategyLanguageProductions): use PASS_THRU for USING_LIST * mixfixParser.hh (M): added MAKE_USING_PAIR, MAKE_USING_LIST to enum SemanticActions (M): added decls for appendUsingPair(), makeUsingList() * mixfixParser.cc (appendUsingPair, makeUsingList): added (makeStrategy): added dummy MAKE_REW case * mixfixParser.hh (M): added MAKE_REW to enum SemanticActions 2017-09-18 Steven Eker * mixfixModule.hh (SharedTokens): added nonterminal USING_PAIR (SharedTokens): added STRAT_REW_PREC * makeGrammar.cc (makeStrategyLanguageProductions): added syntax for using pairs and lists * specialTokens.cc: added by * makeGrammar.cc (makeStrategyLanguageProductions): added syntax for matchrew/xmatchrew/amatchrew strategies * mixfixModule.hh (SharedTokens): added STRAT_USING_LIST_PREC, STRAT_USING_PREC (SharedTokens): added USING_LIST nonterminal 2017-09-15 Steven Eker * specialTokens.cc: added matchrew, xmatchrew, amatchrew * makeGrammar.cc (makeStrategyLanguageProductions): remove the #if 1 / #endif around the match/xmatch/amatch productions ===================================Maude116=========================================== 2017-08-11 Steven Eker * tokenizer.ll (Rope): use fixUp() (Rope): don't allow \t in strings * token.hh (T): added decl for static version of fixUp() * token.cc (fixUp): added static version * tokenizer.ll (Rope): use endOfRope flag (Rope): use EOT character to indicate endOfRope and avoid flex EOF handling * quotedIdentifierOpSymbol.cc (eqRewrite): use builtInReplace() in the empty and singleton tokenize() cases 2017-08-10 Steven Eker * tokenizer.ll: created * quotedIdentifierOpSymbol.hh (FreeSymbol): added decl for makeQid() * quotedIdentifierOpSymbol.cc (eqRewrite): implement tokenize() (makeQid): added 2017-08-08 Steven Eker * quotedIdentifierOpSymbol.cc (printQid): new needSpace rule (printQid): handle '\c Qids specially 2017-08-07 Steven Eker * quotedIdentifierOpSymbol.cc (eqRewrite): implemented print() case * quotedIdentifierOpSymbol.hh (FreeSymbol): added decl for printQidList(), printQid() * quotedIdentifierOpSymbol.cc (printQid): added (printQidList): added 2017-08-04 Steven Eker * quotedIdentifierOpSymbol.hh (FreeSymbol): use quotedIdentifierOpSignature.cc * quotedIdentifierOpSymbol.cc (QuotedIdentifierOpSymbol) (copyAttachments, getSymbolAttachments, attachSymbol): use quotedIdentifierOpSignature.cc (getDataAttachments): added cases for print and tokenize * quotedIdentifierOpSignature.cc: created 2017-07-31 Steven Eker * lexerAux.cc (getInput): added comments 2017-07-28 Steven Eker * entry.cc (newFancySymbol): added SymbolType::STREAM_MANAGER_SYMBOL case * symbolType.hh (S): added STREAM_MANAGER_SYMBOL * specialSymbolTypes.cc: added streamManagerSymbol 2017-07-24 Steven Eker * variableGenerator.cc (push, pop, clearAssertions): added stub versions to allow linking without SMT support 2017-07-19 Steven Eker * symbolType.hh (S): added FILE_MANAGER_SYMBOL * entry.cc (newFancySymbol): add SymbolType::FILE_MANAGER_SYMBOL case * specialSymbolTypes.cc: added fileManagerSymbol * command.cc (printAttributes): only print hook details if nonempty ===================================Maude115=========================================== 2017-07-11 Steven Eker * search.cc (checkSearchRestrictions): check for SMT operators in pattern * mixfixModule.hh (SharedTokens): added decl for new findNonlinearVariable() (SharedTokens): made findSMT_Symbol() public * search.cc (search): don't make Pattern for smt-search (checkSearchRestrictions): moved nonlinear variable check here * mixfixModule.cc (findNonlinearVariable): added variableInfo version * search.cc (search): check for nonlinear variables in pattern in smt-search case * mixfixModule.cc (validForSMT_Rewriting): added line number info to warnings 2017-07-10 Steven Eker * mixfixModule.cc (MixfixModule): initialize smtStatus (validForSMT_Rewriting): check and set smtStatus * mixfixModule.hh (SharedTokens): added enum SMT_Status and data member smtStatus 2017-07-07 Steven Eker * search.cc (checkSearchRestrictions): issue warning if validForSMT_Rewriting() returns false * mixfixModule.cc (validForSMT_Rewriting): add line number to error messages * mixfixModule.hh (SharedTokens): added decl for findNonlinearVariable() * mixfixModule.cc (findNonlinearVariable): added (validForSMT_Rewriting): check for nonlinear variables in lhs * mixfixModule.hh (SharedTokens): containsSMT_Symbol() -> findSMT_Symbol() * mixfixModule.cc (containsSMT_Symbol): becomes findSMT_Symbol() (validForSMT_Rewriting): use findSMT_Symbol() * mixfixModule.hh (SharedTokens): added decl for containsSMT_Symbol() * mixfixModule.cc (containsSMT_Symbol): added (validForSMT_Rewriting): check for SMT symbols occurring in the lhs of a rule 2017-07-06 Steven Eker * mixfixModule.cc (validForSMT_Rewriting): added check for non-SMT operators have SMT sorts as their range 2017-06-30 Steven Eker * mixfixModule.cc (validForSMT_Rewriting): check for regular symbols and polymorphic operators that have a collapse axiom * symbolType.hh (S): added COLLAPSE 2017-06-28 Steven Eker * yices2_Bindings.cc (checkDag): check for error from yices_assert_formula() (checkDag): treat all return values other than STATUS_SAT and STATUS_UNSAT as SAT_UNKNOWN (assertDag): symmetric changes (dagToYices2): enforce 2nd argument of divisible to be positive constant 2017-06-27 Steven Eker * cvc4_Bindings.cc (dagToCVC4): check for non-positive 2nd arguments to divisible (checkDag): catch CVC4::LogicException (assertDag): catch CVC4::LogicException (assertDag): don't both passing an argument to checkSat() 2017-06-26 Steven Eker * cvc4_Bindings.cc (dagToCVC4): fix bug where DIVISIBLE case could fall through * yices2_Bindings.cc (dagToYices2): flipped argument order to yices_divides_atom() 2017-06-23 Steven Eker * yices2_Bindings.hh (SMT_EngineWrapper): delet decl for makeRationalConstant() * yices2_Bindings.cc (makeRationalConstant): fold into dagToYices2() 2017-06-20 Steven Eker * yices2_Bindings.cc (dagToYices2): implemented 2017-06-16 Steven Eker * yices2_Bindings.cc (makeVariable): implemented (makeBooleanExpr): implemented 2017-06-15 Steven Eker * yices2_Bindings.cc: created * yices2_Bindings.hh: created 2017-06-14 Steven Eker * cvc4_Bindings.hh: created to hold CVC4 specific code * variableGenerator.hh (SMT_EngineWrapper): stripped out all CVC4 specific code * cvc4_Bindings.cc: created to hold CVC4 specific code * variableGenerator.cc: stripped out all CVC4 specific code 2017-06-13 Steven Eker * prettyPrint.cc (printAttributes): fix bug where we weren't printing the narrowing attribute if it was the only attribute 2017-06-12 Steven Eker * mixfixModule.cc (checkFreshVariableNames): implemented * mixfixModule.hh (SharedTokens): added decl for checkFreshVariableNames() * syntacticPreModule.cc (getFlatModule): call checkFreshVariableNames() * mixfixModule.cc (checkFreshVariableNames): added stub * freshVariableSource.cc (variableNameConflict): need to consider @ variables 2017-06-09 Steven Eker * bufferPrint.cc (handleIter): use decideIteratedAmbiguity() to decide needToDisambiguate and argumentRangeKnown * dagNodePrint.cc (handleIter): use decideIteratedAmbiguity() to decide needToDisambiguate and argumentRangeKnown * entry.cc (checkPseudoIterated): rewritten using iteratedMap * termPrint.cc (handleIter): don't pass iflags argument to decideIteratedAmbiguity() * mixfixModule.hh (SharedTokens): updated decl for decideIteratedAmbiguity() * sharedPrint.cc (decideIteratedAmbiguity): use iteratedMap (decideIteratedAmbiguity): delete iflags argument * entry.cc (checkIterated): fill out iteratedMap * mixfixModule.hh (SharedTokens): added typedef IteratedMap and data member iteratedMap 2017-06-08 Steven Eker * termPrint.cc (handleIter): use decideIteratedAmbiguity() to do disambiguation properly * mixfixModule.hh (SharedTokens): added decl for decideIteratedAmbiguity() * sharedPrint.cc (decideIteratedAmbiguity): added * entry.cc (checkPseudoIterated, checkIterated): more detailed warnings 2017-06-07 Steven Eker * entry.cc (checkIterated): implemented (addOpDeclaration): call checkIterated() * mixfixModule.hh (SharedTokens): added decl for checkIterated() * entry.cc (checkPseudoIterated): fill out pseudoIteratedMap (checkIterated): added stub * mixfixModule.hh (SharedTokens): checkPseudoIterator() -> checkPseudoIterated() (SharedTokens): added typedefs NumberToSymbolMap, PseudoIteratedMap and data member pseudoIteratedMap * entry.cc (addOpDeclaration): updated calling convention for checkPseudoIterator() again (checkPseudoIterator): becomes checkPseudoIterated() (addOpDeclaration): use checkPseudoIterated() * mixfixModule.hh (SharedTokens): updated decl for checkPseudoIterator() * entry.cc (addOpDeclaration): updated calling convention for checkPseudoIterator() (checkPseudoIterator): replace with Symbol* base version * token.hh (T): updated decl for checkPseudoIterator() * entry.cc (checkPseudoIterator): implemented 2017-06-06 Steven Eker * mixfixModule.hh (SharedTokens): added decl for checkPseudoIterator() * entry.cc (addOpDeclaration): added call to checkPseudoIterator() (checkPseudoIterator): added stub 2017-06-05 Steven Eker * symbolType.hh (hasAtLeastOneFlag): added 2017-05-31 Steven Eker * ops.cc (setPoly): check for duplicate arg numbers in poly attribute ===================================Maude114=========================================== 2017-05-26 Steven Eker * execute.cc (clearContinueInfo): deleted commented out code 2017-05-19 Steven Eker * narrowing.cc (doVuNarrowing): reorganize printing (doVuNarrowing): fix double delete bug * search.cc (search): combine vu-narrow and fvu-narrow code * interpreter.hh (ViewDatabase): deleted decl for doFvuNarrowing(); updated decl for doVuNarrowing() * narrowing.cc (doFvuNarrowing): support continuation (doVuNarrowing): deleted (doFvuNarrowing): becomes doVuNarrow() (vuNarrowingCont): use NarrowingSequenceSearch3 2017-05-12 Steven Eker * narrowing.cc (doFvuNarrowing): print accumulated substitution * userLevelRewritingContext.hh (ObjectSystemRewritingContext): added decl for new printSubstitution() * userLevelRewritingContext.cc (printSubstitution): added Substitution&/VariableInfo& version * lexer.ll: added fvu-narrow * top.yy: added KW_FVU_NARROW * commands.yy (search): added fvu-narrow support * interpreter.hh (ViewDatabase): added decl for doFvuNarrowing() * narrowing.cc (doFvuNarrowing): added * search.cc (checkSearchRestrictions): support fvu-narrow (search): fvu-narrow * interpreter.hh (ViewDatabase): added FVU_NARROW to SearchKind 2017-04-26 Steven Eker * specialTokens.cc: added narrowing * makeGrammar.cc (makeAttributeProductions): added narrowing attribute * mixfixParser.hh (M): added MAKE_NARROWING_ATTRIBUTE to enum SemanticActions * mixfixParser.cc (makeAttributePart): added case for MAKE_NARROWING_ATTRIBUTE * mixfixParser.hh (M): added NARROWING to enum Flags * prettyPrint.cc (printAttributes): support narrowing attribute * mixfixParser.cc (makeStatementPart): handle narrowing flag * importModule.cc (donateStatements2): copy narrowing flag ===================================Maude113=========================================== 2017-04-13 Steven Eker * interpreter.cc (Interpreter): don't initialize savedContext * loopMode.cc (doLoop): use CacheableRewritingContext and savedState (contLoop2): use CacheableRewritingContext and savedState * interpreter.hh (ViewDatabase): deleted data member savedContext (ViewDatabase): updated decl for endRewriting() * erewrite.cc (eRewrite): use CacheableRewritingContext (eRewriteCont): use CacheableRewritingContext and savedState * execute.cc (endRewriting): make context argument CacheableRewritingContext; use savedState (reduce): use CacheableRewritingContext (rewrite, fRewrite): use CacheableRewritingContext (fRewriteCont, rewriteCont): use CacheableRewritingContext, savedState (clearContinueInfo): don't delete or clear savedContext * mixfix.hh: added class CacheableRewritingContext 2017-04-11 Steven Eker * search.cc (search): deleted #if 0'd out code 2017-04-06 Steven Eker * narrowing.cc (vuNarrowingCont, narrowingCont): support debug 2017-04-04 Steven Eker * smtSearch.cc (doSmtSearch): print state and timing info; print no more solutions message 2017-04-03 Steven Eker * search.cc (search): use doSmtSearch() * interpreter.hh (ViewDatabase): added decls for doSmtSearch(), smtSearchCont() * smtSearch.cc: created * interpreter.hh (ViewDatabase): deleted data member savedRewriteSequenceSearch * execute.cc (clearContinueInfo): don't delete or clear savedRewriteSequenceSearch * interpreter.cc (Interpreter): don't clear savedRewriteSequenceSearch * search.cc (showSearchGraph): use dynmaic_cast on savedState (showSearchPath, showSearchPathLabels): use dynmaic_cast on savedState (doSearching): use savedState (searchCont): use savedState 2017-03-31 Steven Eker * search.cc (searchCont): support debug * interpreter.hh (ViewDatabase): updated decl for doSearching() * search.cc (search): use QUANTIFY_START() (doSearching): make solutionCount and limit 64-bit; use QUANTIFY_STOP() (doSearching): restructured (doSearching): don't call interrupted() (searchCont): use QUANTIFY_START() * interpreter.hh (ViewDatabase): added decl for checkSearchRestrictions() * search.cc (search): destruct initial term and condition if we are asked to narrow with a non-empty condition (checkSearchRestrictions): added (search): use checkSearchRestrictions() (search): deepSelfDestruct() target if we fail checks * interpreter.hh (ViewDatabase): updatede decl for search() * search.cc (search): take debug argument * commands.yy (command): added optDebug to search * execute.cc (clearContinueInfo): don't delete and clear savedStrategicSearch * interpreter.cc (Interpreter): don't clear savedStrategicSearch * interpreter.hh (ViewDatabase): updated decl for doStrategicSearch(); deleted data member savedStrategicSearch * srewrite.cc (sRewrite): support debug flag (doStrategicSearch): make solutionCount and limit 64-bit; restructured; use savedState (sRewriteCont): use savedState; support debug flag * getVariants.cc (doGetVariants): check interrupted() in the irredundant case (getVariants): QUANTIFY_START() (getVariantsCont): QUANTIFY_START() (doGetVariants): use QUANTIFY_STOP(); * narrowing.cc (doNarrowing): use QUANTIFY_STOP() (narrowingCont): use QUANTIFY_START() (doVuNarrowing): use QUANTIFY_STOP() (vuNarrowingCont): use QUANTIFY_START() * match.cc (match): use QUANTIFY_START() (doMatching): use QUANTIFY_STOP() (matchCont): use use QUANTIFY_START() (doMatching): updated comments * mixfix.hh: added QUANTIFY_START(), QUANTIFY_STOP() 2017-03-30 Steven Eker * interpreter.hh (ViewDatabase): make savedSolutionCount an Int64 * getVariants.cc (doGetVariants): make solutionCount and limit 64-bit * interpreter.hh (ViewDatabase): update decls for doNarrowing(), doVuNarrowing(), doGetVariants(), doVariantUnification() * narrowing.cc (doNarrowing, doVuNarrowing): make solutionCount and limit 64-bit * variantUnify.cc (variantUnify): echo debug flag (doVariantUnification): make solutionCount and limit 64-bit * getVariants.cc (getVariants): echo debug flag * interpreter.hh (ViewDatabase): added decls for getVariantsCont() and doGetVariants() * getVariants.cc (doGetVariants): added (getVariantsCont): added (getVariants): use doGetVariants() * variantUnify.cc (doVariantUnification): restructured; use aborted() (variantUnifyCont): handle debug flag 2017-03-29 Steven Eker * narrowing.cc (doNarrowing): don't call interrupted(); tidy up after abort or solution exhaustion (doVuNarrowing): don't call interrupted(); tidy up after abort or solution exhaustion * getVariants.cc: renamed from variants.cc * variantUnify.cc (variantUnify, doVariantUnification) (variantUnifyCont): moved here * interpreter.hh (ViewDatabase): added decls for doVariantUnification() and variantUnifyCont() (ViewDatabase): deleted decl for newNarrow() * variants.cc (doVariantUnification): added (variantUnifyCont): added * search.cc (newNarrow): deleted * variants.cc (getVariants, variantUnify): moved here * narrowing.cc (doNarrowing): check for incompleteness (doNarrowing): call printStats() 2017-03-28 Steven Eker * userLevelRewritingContext.cc (traceVariantNarrowingStep): use narrowing version of printSubstitution() * interpreter.hh (ViewDatabase): added decl for narrowingCont() * userLevelRewritingContext.hh (ObjectSystemRewritingContext): added decl for narrowing version of printSubstitution() * narrowing.cc (doVuNarrowing): use narrowing version of printSubstitution() * userLevelRewritingContext.cc (printSubstitution): added narrowing version * unify.cc: fixed comment since we not longer support xunify * narrowing.cc (narrowingCont): added (doNarrowing): added continue support * cacheableRewritingContext.hh: created * userLevelRewritingContext.hh (ObjectSystemRewritingContext): made complex ctor private 2017-03-24 Steven Eker * execute.cc (clearContinueInfo): don't delete and clear savedUnificationProblem * interpreter.cc (Interpreter): don't clear savedUnificationProblem * interpreter.hh (ViewDatabase): delete data member savedUnificationProblem * unify.cc (unifyCont): use savedState (doUnification): use savedState * execute.cc (clearContinueInfo): don't delete and clear savedMatchSearchState * interpreter.cc (Interpreter): don't clear savedMatchSearchState * interpreter.hh (ViewDatabase): delete data member savedMatchSearchState * match.cc (matchCont): use savedState (doMatching): use savedState * execute.cc (clearContinueInfo): delete and clear savedState * interpreter.cc (Interpreter): clear savedState * interpreter.hh (ViewDatabase): added data member savedState * narrowing.cc (vuNarrowingCont): use savedState (doVuNarrowing): use savedState 2017-03-23 Steven Eker * narrowing.cc (vuNarrowingCont): added (doVuNarrowing): support continuation * interpreter.hh (ViewDatabase): added decl for vuNarrowingCont() * search.cc (search): doNarrowing2() -> doVuNarrowing() * interpreter.hh (ViewDatabase): doNarrowing2() -> doVuNarrowing() * narrowing.cc: created (doNarrowing2): moved here (doNarrowing): moved here (doNarrowing2): becomes doVuNarrowing() ===================================Maude112a=========================================== 2017-03-13 Steven Eker * process.cc (processImports): don't add illegal parameters, since even the creation of the illegal parameter copies can cause issues 2017-03-10 Steven Eker * search.cc (doNarrowing2): added incompleteness warning; took out extra newline print 2017-02-28 Steven Eker * search.cc (doNarrowing2): added (search): use doNarrowing2() to implement vu-narrow * interpreter.hh (ViewDatabase): added decl for doNarrowing2() 2017-02-27 Steven Eker * search.cc (search): added stub code for vu-narrow 2017-02-24 Steven Eker * interpreter.hh (ViewDatabase): added VU_NARROW to enum SearchKind * commands.yy (search): added KW_VU_NARROW to search * lexer.ll: added keyword vu-narrow * top.yy: added token KW_VU_NARROW ===================================Maude111b=========================================== 2017-01-06 Steven Eker * banner.cc (printBanner): fix copyright year ===================================Maude111a=========================================== 2016-12-15 Steven Eker * freshVariableSource.hh (FreshVariableGenerator): added decl for belongsToFamily() * freshVariableSource.cc (belongsToFamily): added 2016-12-08 Steven Eker * freshVariableSource.hh (FreshVariableGenerator): added decl for getFamily() * freshVariableSource.cc (getFamily): added 2016-12-07 Steven Eker * freshVariableSource.cc (getBaseName): added * freshVariableSource.hh (FreshVariableGenerator): added decl for getBaseName() 2016-11-01 Steven Eker * search.cc (variantUnify): pass dummy argument to getNextUnifier() 2016-10-28 Steven Eker * doParse.cc (parseTerm): fix bug where we were calling fillInSortInfo() before the module was semi-compiled and sort diagrams had been generated 2016-10-26 Steven Eker * freshVariableSource.cc (getFreshVariableName): rewritten to handle multiple families of fresh variables * freshVariableSource.hh (FreshVariableGenerator): updated decl for getFreshVariableName() (FreshVariableGenerator): deleted data members cache, oddCache; added data member caches ===================================Maude111=========================================== 2016-06-27 Steven Eker * banner.cc (printBanner): update copyright year ===================================Maude110b=========================================== 2016-05-17 Steven Eker * execute.cc (check): use normalize() and markEager() on term before dagifying it. (check): don't bother with markEager() 2016-04-27 Steven Eker * userLevelRewritingContext.cc (checkForPrintAttribute): use printAttrStream added definition for printAttrStream * userLevelRewritingContext.hh (ObjectSystemRewritingContext): added decl for data member printAttrStream (setPrintAttributeStream): added ===================================Maude110=========================================== 2016-02-04 Steven Eker * search.cc (getVariants): use new getNextVariant() interface ===================================Maude109=========================================== 2015-12-23 Steven Eker * token.cc (codeToRope): += rather than append() * auxProperty.cc: crope -> Rope throughout * moduleCache.cc (makeRenamedCopy, makeParameterCopy) (makeInstatiation, makeSummation): use Token::ropeToCode() * token.hh (T): added decl for ropeToCode() * token.cc (ropeToCode): added * renaming.hh: include "rope.hh" rather than "ropeStuff.hh" * moduleCache.cc: crope -> Rope throughout * renaming.hh: crope -> Rope throughout * renaming.cc: crope -> Rope throughout * token.cc: crope -> Rope throughout * token.hh: crope -> Rope throughout ===================================Maude108a=========================================== 2015-09-11 Steven Eker * prettyPrint.cc (<<): handle null DagNode* gracefully 2015-08-21 Steven Eker * bottom.yy: yyerror() now takes 2 args * top.yy: #define YYPARSE_PARAM removed; %parse-param added; PARSE_RESULT no longer needs a cast; yyerror() decl now takes 2 args * interact.cc: yyparse() now takes UserLevelRewritingContext::ParseResult* in decl * top.yy: %pure_parser becomes %pure-parser 2015-08-20 Steven Eker * variableGenerator.cc: respect USE_CVC4 flag * variableGenerator.hh: respect USE_CVC4 flag 2015-08-13 Steven Eker * search.cc (variantUnify): check for incompleteness (getVariants): check for incompleteness 2015-07-23 Steven Eker * unify.cc (doUnification): check for incompleteness ===================================Maude108=========================================== 2014-11-20 Steven Eker * parameterization.cc (handleRegularImports): added DebugAdvisory() for handling import of parameterized module during instantiation * renaming.cc (makeCanonicalVersion): added DebugAdvisory() for empty canonical renaming case ===================================Maude107=========================================== 2014-11-19 Steven Eker * importTranslation.cc (translateRegularSymbol): more detailed Assert() ===================================Maude106=========================================== 2014-10-29 Steven Eker * search.cc (smtSearch): deleted (search): allocate VariableGenerator object on the heap now that SMT_RewriteSequenceSearch destructs it (search): call clearDebug() in SMT case (search): call validForSMT_Rewriting() 2014-10-23 Steven Eker * search.cc (search): new solution format for smt-search results * userLevelRewritingContext.hh (ObjectSystemRewritingContext): updated decl for printSubstitution * userLevelRewritingContext.cc (printSubstitution): rewritten to take ignoredIndices * search.cc (search): use new SMT_RewriteSequenceSearch semantics (search): use getFinalConstraint() rather than getMatchConstraint 2014-10-22 Steven Eker * search.cc (search): rewritten to hande search modulo SMT directly 2014-10-21 Steven Eker * variableGenerator.cc (VariableGenerator): initialize pushCount * variableGenerator.hh (push): added (pop): added (clearAssertions): handle pushCount; (SMT_EngineWrapper): added data member pushCount 2014-10-17 Steven Eker * search.cc (smtSearch): rewritten to use new SMT_RewriteSequenceSearch design 2014-10-15 Steven Eker * search.cc (smtSearch): rewritten to use SMT_RewriteSequenceSearch 2014-10-14 Steven Eker * variableGenerator.hh (clearAssertions): made inline 2014-10-03 Steven Eker * variableGenerator.cc (VariableGenerator): call push() * variableGenerator.hh (clearAssertions): added 2014-09-29 Steven Eker * search.cc (smtSearch): pass VariableGenerator object to SMT_RewriteSearchState via pointer rather than reference * variableGenerator.hh: SMT_VariableManager -> SMT_EngineWrapper ===================================Maude105=========================================== 2014-09-26 Steven Eker * execute.cc (test): turned in to stub 2014-09-25 Steven Eker * variableGenerator.cc (makeFreshVariable): rewritten to use mpz_class * variableGenerator.hh (SMT_VariableManager): updated decl for makeFreshVariable() 2014-09-19 Steven Eker * search.cc (smtSearch): no # in solution message to avoid confusion with fresh varaible numbering 2014-09-18 Steven Eker * execute.cc (printModifiers): fixed longstanding bug where we weren't printing the [] notation if number2 was NONE and number was something else * interpreter.hh (ViewDatabase): added decl for smtSearch() * search.cc (search): call smtSearch() (smtSearch): added * interpreter.hh (ViewDatabase): added SMT_SEARCH to enum SearchKind * commands.yy (search): added KW_SMT_SEARCH * top.yy: added KW_SMT_SEARCH * lexer.ll: added smt-search 2014-09-16 Steven Eker * variableGenerator.cc (VariableGenerator): use setOption() call * variableGenerator.hh (SMT_VariableManager): deleted data member options 2014-09-15 Steven Eker * variableGenerator.cc (VariableGenerator): set options; create exprManager and smtEngine (~VariableGenerator): added to destruct exprManger and smtEngine (dagToCVC4, makeVariable, assertDag, makeRationalConstant): deref exprManager (assertDag, checkDag): deref smtEngine * variableGenerator.hh (SMT_VariableManager): added data member options; made exprManager and smtEngine into pointers; added decl for ~VariableGenerator() * userLevelRewritingContext.cc (printSubstitution): fix bug where we trying to dereference a null pointer in a DebugAdvisory() when a variable was unbound 2014-09-12 Steven Eker * variableGenerator.hh (SMT_VariableManager): makeVariable() become private now it is no longer overriding an abstract function in the base class * variableGenerator.cc (VariableGenerator, makeVariable): use exprManager (makeBooleanExpr): use our local version of dagToCVC4() (assertDag): use exprManager 2014-09-11 Steven Eker * variableGenerator.hh (SMT_VariableManager): added decls for makeRationalConstant() and dagToCVC4() * variableGenerator.cc (dagToCVC4): added (makeRationalConstant): added * execute.cc (sreduce): use new VariableGenerator semantics 2014-09-08 Steven Eker * variableGenerator.hh (SMT_VariableManager): added decl for makeBooleanExpr() * variableGenerator.cc (VariableGenerator): init smtEngine (assertDag, checkDag): added (makeBooleanExpr): added (assertDag, checkDag): simplified using makeBooleanExpr() * variableGenerator.hh (SMT_VariableManager): added declarations for assertDag() and checkDag() (SMT_VariableManager): added data member smtEngine 2014-09-05 Steven Eker * execute.cc (test): use validForSMT_Rewriting() * mixfixModule.hh (SharedTokens): added decl for validForSMT_Rewriting() * mixfixModule.cc (validForSMT_Rewriting): added 2014-08-13 Steven Eker * execute.cc (test): added * interpreter.hh (ViewDatabase): added decl for test * commands.yy (command): added actions for KW_TEST * top.yy: added KW_TEST * lexer.ll: added KW_TEST 2014-08-12 Steven Eker * variableGenerator.cc (makeVariable): use SMT_Info (makeFreshVariable): fleshed out stub 2014-08-11 Steven Eker * mixfixModule.cc (getSMT_NumberToken): use getSMT_Info() (findSMT_NumberSymbol): use getSMT_Info() * makeGrammar.cc (makeSymbolProductions): use getSMT_Info() * graphPrint.cc (graphPrint): use getSMT_Info() * bufferPrint.cc (handleSMT_NumberSymbol): use getSMT_Info() * dagNodePrint.cc (handleSMT_Number): use getSMT_Info() * termPrint.cc (handleSMT_Number): use getSMT_Info() * mixfixModule.hh (SharedTokens): updated decl for findSMT_NumberSymbol() * variableGenerator.cc (VariableGenerator): use smtInfo rather than sortMap * variableGenerator.hh (SMT_VariableManager): sortMap becomes smtInfo; updated decl for ctor * execute.cc (check): use smtInfo rather than sortMap * mixfixModule.hh (SharedTokens): decl for getSMT_Info() replaces decl for getSortMap(); (SharedTokens): sortMap becomes smtInfo * mixfixModule.cc (getSortMap): becomes getSMT_Info() 2014-08-06 Steven Eker * variableGenerator.hh (SMT_VariableManager): added decl for makeFreshVariable() * variableGenerator.cc (makeFreshVariable): added 2014-07-30 Steven Eker * execute.cc (check): don't bother indexing variables 2014-07-29 Steven Eker * execute.cc (check): use VariableGenerator * SMT_VariableGenerator.cc: becomes variableGenerator.cc * SMT_VariableGenerator.hh: becomes variableGenerator.hh 2014-07-28 Steven Eker * SMT_VariableGenerator.cc: created * SMT_VariableGenerator.hh: created ===================================Maude104=========================================== 2014-06-04 Steven Eker * execute.cc (check): clean up; extra sanity checks (check): use QUOTE() in warnings * dagNodePrint.cc (prettyPrint): deleted commented out code * termPrint.cc (prettyPrint): deleted commented out code * bufferPrint.cc (prettyPrint): deleted commented out code 2014-06-03 Steven Eker * termPrint.cc (handleSMT_Number): use getRangeSort() * mixfixModule.cc (findSMT_NumberSymbol): use getRangeSort() * makeGrammar.cc (makeSymbolProductions): use getRangeSort() * graphPrint.cc (graphPrint): use getRangeSort() * dagNodePrint.cc (handleSMT_Number): use getRangeSort() * bufferPrint.cc (prettyPrint): pass argRangeKnown to recursive call to fix bug we introduced when we rewrote the function (handleSMT_NumberSymbol): use getRangeSort() 2014-06-02 Steven Eker * bufferPrint.cc (prettyPrint): use rangeOfArgumentsKnown() * dagNodePrint.cc (prettyPrint): use rangeOfArgumentsKnown() * termPrint.cc (prettyPrint): use rangeOfArgumentsKnown() * sharedPrint.cc (ambiguous): added comments * mixfixModule.hh (SharedTokens): added decl for rangeOfArgumentsKnown() * sharedPrint.cc (rangeOfArgumentsKnown): added * bufferPrint.cc (handleFloat, handleString) (handleQuotedIdentifier): added (prettyPrint): call handleFloat(), handleString(), handleQuotedIdentifer() * mixfixModule.hh (SharedTokens): added decls for handleFloat(), handleString(), handleQuotedIdentifier() 2014-05-30 Steven Eker * mixfixModule.hh (SharedTokens): updated decls for handleIter(), handleMinus(), handleDivision(), handleSMT_NumberSymbol() * bufferPrint.cc (handleIter): rewritten (handleMinus): rewritten (handleDivision): rewritten (handleSMT_NumberSymbol): rewritten * mixfixModule.hh (SharedTokens): added decls for buffer print versions of prefix() and suffix() * bufferPrint.cc (prefix, suffix): added * mixfixModule.cc (getSortMap): fill out kindsWithMinus * entry.cc (addOpDeclaration): use PSEUDO_ZERO * sharedPrint.cc (ambiguous): check PSEUDO_ZERO and kindsWithZero * mixfixModule.hh (SharedTokens): added PSEUDO_ZERO to enum InternalFlags (SharedTokens): added data member kindsWithZero 2014-05-29 Steven Eker * entry.cc (addOpDeclaration): treat ZERO case as PSEUDO_NAT so the SMT Integer disambiguation works for 0 * mixfixModule.hh (SharedTokens): added comments for InternalFlags * sharedPrint.cc (prefix): moved here from dagNodePrint.cc 2014-05-21 Steven Eker * execute.cc: deepSelfDestruct() term 2014-05-20 Steven Eker * token.cc (int64ToCode): fix bug where we weren't checking for ZERO property - in practice this bug can't be exercised since code it only called from the metalevel, and the prelude will generate a 0 token before we can 2014-05-19 Steven Eker * mixfixModule.hh (SharedTokens): added decl for getSMT_NumberToken() * mixfixModule.cc (getSMT_NumberToken): added * token.cc (looksLikeRational): allow 0/n 2014-05-16 Steven Eker * makeGrammar.cc (makeSymbolProductions): added production for ZERO as an SMT_NUMBER * prettyPrint.cc (<<): added ConnectedComponent version * entry.cc (addOpDeclaration): fill out SMT_NumberSymbols map * mixfixModule.cc (findSMT_NumberSymbol): implemented 2014-05-15 Steven Eker * mixfixModule.hh (SharedTokens): added SMT_NumberSymbols data member * mixfixModule.cc (findSMT_NumberSymbol): added stub * mixfixModule.hh (SharedTokens): updated comments now that we use kindsWith* sets slightly differently (SharedTokens): added decl for findSMT_NumberSymbol * mixfixModule.cc (getSortMap): record SMT integers as belonging to kindsWithMinus 2014-05-14 Steven Eker * mixfixModule.hh (SharedTokens): added decl for buffer version of handleSMT_NumberSymbol() * bufferPrint.cc (handleSMT_NumberSymbol): added (prettyPrint): call handleSMT_NumberSymbol() * graphPrint.cc (graphPrint): handle SMT numbers * mixfixParser.cc (makeTerm): call canonicalize() on newly created SMT number * mixfixModule.hh (SharedTokens): added decl for handleSMT_Number() * dagNodePrint.cc (prettyPrint): call handleSMT_Number() (handleSMT_Number): added 2014-05-13 Steven Eker * makeGrammar.cc (makeSymbolProductions): added SMT production for SMALL_NAT * mixfixParser.cc (makeTerm): added MAKE_SMT_NUMBER case * mixfixParser.hh (M): added MAKE_SMT_NUMBER to enum SemanticActions * makeGrammar.cc (makeSymbolProductions): addd productions for SMT numbers * mixfixModule.cc (getSortMap): track kinds containing things that look like integers or rational numbers for pretty printing disambiguation * mixfixModule.hh (SharedTokens): added decl for handleSMT_Number() * termPrint.cc (prettyPrint): added SMT_NUMBER_SYMBOL case (handleSMT_Number): added 2014-05-08 Steven Eker * symbolType.hh (S): added SMT_NUMBER_SYMBOL * entry.cc (newFancySymbol): added SMT_NumberSymbol * specialSymbolTypes.cc: added SMT_NumberSymbol 2014-05-07 Steven Eker * execute.cc (check): pass sort map to dagToCVC4() 2014-05-06 Steven Eker * execute.cc (check): handle integer and real variables (check): fix bug where we were making Boolean rather than Integer variable * mixfixModule.cc (getSortMap): added * mixfixModule.hh (SharedTokens): addded decl for getSortMap() (SharedTokens): added data member sortMap 2014-04-30 Steven Eker * execute.cc (check): rewritten to use new dagToCVC4 convention 2014-04-29 Steven Eker * interpreter.hh (ViewDatabase): added decl for check() * commands.yy (command): added syntax for check command * top.yy: added KW_CHECK * lexer.ll: added KW_CHECK 2014-04-25 Steven Eker * symbolType.hh (S): added SMT_SYMBOL * entry.cc (newFancySymbol): added SMT_Symbol * specialSymbolTypes.cc: added SMT_Symbol ===================================Maude103=========================================== 2014-02-28 Steven Eker * search.cc (getVariants): handle irredundant flag (getVariants): output timing information after each variant number in incremental mode (variantUnify): output timing information after each unifier number * lexer.ll: added KW_IRREDUNDANT * top.yy: added type for optIrredundant; added KW_IRREDUNDANT * commands.yy (optIrredundant): added (command): use optIrredundant 2014-02-27 Steven Eker * interact.cc (stackOverflowHandler, internalErrorHandler): added (void) casts 2014-02-26 Steven Eker * global.hh: added alwaysAdviseFlag * global.cc: added alwaysAdviseFlag * commands.yy (command): honor alwaysAdviseFlag ===================================Maude101=========================================== 2014-02-14 Steven Eker * execute.cc (sreduce): use term2InstructionSequence() to get initial sequence of stack machine instructions 2014-02-07 Steven Eker * banner.cc (printBanner): update copyright yearl 2014-02-06 Steven Eker * mixfixParser.cc (makePrintList): delete unused typedef IntPair * renaming.hh (SyntaxContainer): added virtual dtor to placate gcc 2014-02-03 Steven Eker * lexerAux.cc (eatComment): added IssueAdvisory() for null characters in comments 2014-01-31 Steven Eker * execute.cc (sreduce): call stackMachineCompile() * syntacticPreModule.cc (getFlatModule): use < rather than != for comparing against THEORY_CLOSED ===================================Maude100a=========================================== * execute.cc (sreduce): convert abstract slots in the dummyBuilder into the concrete slots that StackMachineRhsCompiler now expects (sreduce): removed old if'd out code 2013-10-29 Steven Eker * execute.cc (sreduce): rewritten ===================================Maude100=========================================== 2013-09-24 Steven Eker * modules.yy (viewEndOpMap): add missing ; after lexBubble call * commands.yy (command): add missing ; after lexBubble() calls ===================================Maude98=========================================== 2013-08-15 Steven Eker * execute.cc (sreduce): use new execute() mechanism 2013-03-06 Steven Eker * loopMode.cc (printBubble): fixed a bug where printing the empty token caused an out-of-bounds memory reference 2012-11-01 Steven Eker * userLevelRewritingContext.cc (tracePreEqRewrite): added call to flush() ===================================Maude96b=========================================== 2012-08-06 Steven Eker * commands.yy (command): call getVariants() * lexer.ll: KW_GENERATE becomes KW_GET * top.yy: KW_GENERATE becomes KW_GET * commands.yy (command): support debug in variant unify command (command): generate variants becomes get variants and takes debug prefix (genvars): deleted * interpreter.hh (ViewDatabase): updated decl for variantUnify(); decl for getVariants() replaces decl for generateVariants() * search.cc (variantUnify): added debug flag (generateVariants): added debug flag; becomes getVariants() * lexerAux.hh: don't declare getInput() here because yy_size_t is only available within the flex output file * lexerAux.cc (getInput): use yy_size_t rather than int because Mac version of flex is 64-bit clean * lexer.ll: moved decl for getInput() here; hack to deal with int vs yy_size_t for YY_INPUT 2nd argument 2012-07-31 Steven Eker * search.cc (variantUnify): call clearDebug() (generateVariants): call clearDebug() 2012-07-27 Steven Eker * search.cc (generateVariants): call unprotect() (variantUnify): use makeUnificationProblemDag(); call unprotect() (variantUnify): pass unificationMode flag to VariantSearch() * mixfixModule.hh (SharedTokens): added decl for makeUnificationProblemDag() * mixfixModule.cc (makeUnificationProblemDag): created * mixfixModule.hh (SharedTokens): added decl for createInternalTupleSymbol(); added types IntList and InternalTupleMap; added data member tupleSymbols * mixfixModule.cc (createInternalTupleSymbol): added * symbolType.hh (S): added INTERNALTUPLE 2012-07-26 Steven Eker * search.cc (variantUnify): is parseVariantUnifyCommand(); echo constraint * mixfixParser.hh (M): added decl for makeVariantUnifyCommand() * mixfixParser.cc (makeVariantUnifyCommand): added * makeGrammar.cc (makeComplexProductions): added productions for VARIANT_UNIFY_COMMAND * mixfixModule.hh (SharedTokens): added decl for parseVariantUnifyCommand() * doParse.cc (parseVariantUnifyCommand): added * mixfixModule.hh (SharedTokens): added VARIANT_UNIFY_COMMAND * search.cc (variantUnify): added * interpreter.hh (ViewDatabase): added decl for variantUnify * commands.yy (command): added syntax for variant unify command * top.yy: added KW_VARIANT * lexer.ll: added KW_VARIANT 2012-07-23 Steven Eker * search.cc (generateVariants): output no variants message in the case that there are no variants because a blocker dag is reducible (generateVariants): use term2Dag() and deepSelfDestruct() instead of makeDag() (generateVariants): call normalize() after all to make sure hash values are valid * syntacticPreModule.hh (SharedTokens): removed two declarations for makeDag() that don't seem to be used 2012-07-19 Steven Eker * search.cc (generateVariants): echo constraint list (generateVariants): turn constraint list in to blocker dags; # variables from variableInfo is no longer accurate because of variables in blocker dags * mixfixParser.hh (M): added decl for makeTermList() (M): added MAKE_TERM_LIST * mixfixParser.cc (makeGetVariantsCommand): use makeTermList() (makeTermList): added * makeGrammar.cc (makeComplexProductions): added syntax for get variants with irreducibility constraint; added syntax for hetrogeneous term lists (makeComplexProductions): use emptyGather for "such that" and "s.t." * mixfixModule.hh (SharedTokens): added TERM_LIST * search.cc (generateVariants): use parseGetVariantsCommand() * mixfixParser.hh (M): added decl for makeGetVariantsCommand() * mixfixParser.cc (makeGetVariantsCommand): added * makeGrammar.cc (makeComplexProductions): added a production for GET_VARIANTS_COMMAND * mixfixModule.hh (SharedTokens): added decl for parseGetVariantsCommand() * doParse.cc (parseGetVariantCommand): added * specialTokens.cc: added irreducible * mixfixModule.hh (SharedTokens): added GET_VARIANTS_COMMAND * search.cc: deleted commented out functions (generateVariants): respect limit 2012-07-18 Steven Eker * search.cc (generateVariants): pass blocker dags to VariantSearch 2012-07-09 Steven Eker * freshVariableSource.cc (getFreshVariableName): reenable % variables (variableNameConflict): reenable % variables 2012-07-06 Steven Eker * freshVariableSource.cc (getFreshVariableName) (variableNameConflict): updated comments ===================================Maude96a=========================================== 2012-05-23 Steven Eker * freshVariableSource.cc (variableNameConflict): disable % variables for the moment (getFreshVariableName): disable % variables for the moment 2012-05-22 Steven Eker * search.cc (generateVariants): ignore limit as this seems to be breaking things 2012-05-21 Steven Eker * search.cc (generateVariants): check for traceAbort() (generateVariants): check counter against limit (generateVariants): delete freshVariableGenerator when we are done (generateVariants): pass responsibility for deleting context and freshVariableGenerator to ~VariantSearch() - this cleans interface for metalevel * execute.cc (printStats): print number of narrowing and variant narrowing steps * userLevelRewritingContext.hh (ObjectSystemRewritingContext): updated decl for traceVariantNarrowingStep() * userLevelRewritingContext.cc (traceVariantNarrowingStep): take originalVariables argument and use it when printing out substitution part of old and new variants * search.cc (generateVariants): make output of variants consistent with previous conventions 2012-05-18 Steven Eker * userLevelRewritingContext.hh (ObjectSystemRewritingContext): added decl for traceVariantNarrowingStep() * userLevelRewritingContext.cc (traceVariantNarrowingStep): added 2012-05-17 Steven Eker * lexer.ll: allow get as a synonym for generate 2012-05-11 Steven Eker * freshVariableSource.cc (getFreshVariableName): support odd field (variableNameConflict): check for names beginning with % * freshVariableSource.hh (FreshVariableGenerator): added odd field to getFreshVariableName() decl (FreshVariableGenerator): added data member oddCache 2012-05-03 Steven Eker * prettyPrint.cc (printAttributes): print variant attribute * importModule.cc (donateStatements2): copy variant attribute * mixfixParser.cc (makeStatementPart): hande VARIANT attribute * specialTokens.cc: added variant * mixfixParser.hh (M): added MAKE_VARIANT_ATTRIBUTE to enum SemanticActions (M): added VARIANT to enum Flags * mixfixParser.cc (makeAttributePart): support VARIANT attribute * makeGrammar.cc (makeAttributeProductions): added production for variant attribute 2012-04-19 Steven Eker * search.cc (generateVariants): use new version of UnifierFilter (generateVariants): examine all non-variable positions in dag 2012-03-30 Steven Eker * quotedIdentifierSymbol.cc (termify): added 2012-03-29 Steven Eker * search.cc (generateVariants): added 2012-03-28 Steven Eker * commands.yy (command): added syntax for generate variants command * lexer.ll: added initial mode keywords generate and variant ===================================Maude96=========================================== 2010-12-09 Steven Eker * modules.yy (skipStrayArrow): added (viewDeclaration): use skipStrayArrow to overparse var X : -> Foo . (declaration): ditto (skipStrayArrow): get line number from stray token (skipStrayColon): added 2010-11-30 Steven Eker * profileModule.cc (ProfileModule::profileFragment): added Asserts() to check for bad ModuleInfo * trial.cc (UserLevelRewritingContext::traceEndFragment): check for undefined trialRef before calling the profiler since this generally means we are tracing a Pattern (which doesn't belong to a module and can't be profiled in the current implementation) ===================================Maude95b=========================================== 2010-10-19 Steven Eker * quotedIdentifierSymbol.cc (QuotedIdentifierSymbol::makeCanonicalCopyEagerUptoReduced): deleted * quotedIdentifierSymbol.hh (class QuotedIdentifierSymbol): deleted decl for makeCanonicalCopyEagerUptoReduced() ===================================Maude95a=========================================== 2010-10-06 Steven Eker * renameModule.cc (ImportModule::donateOps2): use new symbol name rather than old symbol name in Advisory() * moduleCache.cc (ModuleCache::makeRenamedCopy): don't cache bad renamed modules * interpreter.cc (Interpreter::makeModule): simplified now that ModuleCache::makeRenamedCopy() converts bad renamed copies to null * renameModule.cc (ImportModule::makeRenamedCopy): handle ModuleCache::makeRenamedCopy() returning null * interpreter.cc (Interpreter::makeModule): simplified now that ModuleCache::makeInstatiation() converts bad summations to null * moduleCache.cc (ModuleCache::makeInstatiation): update Advisory() for bad instantiations (ModuleCache::makeSummation): don't cache bad summations * parameterization.cc (ImportModule::makeInstantiation): don't call finishCopy() on bad modules (ImportModule::instantiateBoundParameters): added static_cast<>s (ImportModule::makeInstantiation): added static_cast<>s * moduleCache.cc (ModuleCache::makeParameterCopy): Assert() that we never have a bad parameter copy 2010-10-05 Steven Eker * moduleCache.cc (ModuleCache::makeInstatiation): don't cache bad modules; instead return null (ModuleCache::makeInstatiation): deep self destruct bad modules (ModuleCache::makeInstatiation): remove ourself as a user of the bad module before self destructing it * interpreter.cc (Interpreter::makeModule): new makeInstatiation() convention * parameterization.cc (ImportModule::handleRegularImports): check for instantiateBoundParameters() returning 0 (ImportModule::instantiateBoundParameters): handle makeInstatiation() returning 0 (ImportModule::instantiateBoundParameters): handle instantiateBoundParameters() returning 0 * importModule.cc (ImportModule::donateOps) (ImportModule::donateSorts): added Assert() to check bad flag * renameModule.cc (ImportModule::finishCopy): added Assert() to check bad flag (ImportModule::donateOps2, ImportModule::donateSorts2): added Assert() to check bad flag * parameterization.cc (ImportModule::makeInstantiation): added Assert() to check bad flag 2010-09-29 Steven Eker * quotedIdentifierSymbol.hh (class QuotedIdentifierSymbol): added decl for makeCanonicalCopyEagerUptoReduced() * quotedIdentifierSymbol.cc (QuotedIdentifierSymbol::makeCanonicalCopyEagerUptoReduced): added 2010-09-08 Steven Eker * lexer.ll (id): fix a bug in where identifiers such as .foo were being split by the first rule because there wasn't a match longer than one charater ===================================Maude95=========================================== 2010-06-29 Steven Eker * prettyPrint.cc (operator<<): handle null pointer NamedEntity* case 2010-06-11 Steven Eker * view.cc (View::handleOpTermMappings): updated warning message for two lhs variables with same base name 2010-06-10 Steven Eker * importTranslation.hh (class ImportTranslation): updated decl for translateRegularSymbol() * importTranslation.cc (ImportTranslation::translateTerm): fix bug where were weren't considering renamings before the first op->term mapping by making use of extra translateRegularSymbol() arg (ImportTranslation::translateRegularSymbol): use extra argument to pass back the opToTerm index (ImportTranslation::translate): use new translateRegularSymbol() convention 2010-06-02 Steven Eker * syntacticPreModule.hh (SyntacticPreModule::addSortDecl): don't add empty sort declarations; this fixes a bug where empty sort declarations crashed show module command 2010-05-19 Steven Eker * execute.cc (Interpreter::sreduce): added * interpreter.hh (endif): added decl for sreduce * commands.yy (command): added sreduce command * top.yy: added KW_SREDUCE * lexer.ll: added sreduce ===================================Maude94=========================================== 2010-05-07 Steven Eker * mixfixModule.cc (MixfixModule::instantiatePolymorph): avoid calling deepSelfDestruct() on copy of term hook since attachTerm() already does this when it fails ===================================Maude93d=========================================== 2010-04-01 Steven Eker * unify.cc (Interpreter::unify): don't pass withExtension flag to UnificationProblem() ctor ===================================Maude93a=========================================== 2010-03-18 Steven Eker * token.cc (Token::bubbleToPrefixNameCode): removed r1 branch since we only ever return r2 * parameterization.cc (ImportModule::translateComponent): removed cerr from Assert() * bottom.yy (cleanUpParser): delete commented out broken code * entry.cc (MixfixModule::addOpDeclaration): print number of underscore in warning (MixfixModule::addPolymorph): ditto * token.cc (operator<<): removed commented out code (Token::getInt): removed commented out version (Token::checkForSpecialProperty): removed commented out Int64 code (Token::extractMixfix): treat mixfixSyntax of size 1 to be not mixfix syntax after all * lexer.ll: allow \t in stringContent for overparsing * token.cc (Token::fixUp): handle tab characters ===================================Maude93=========================================== 2010-03-05 Steven Eker * bufferPrint.cc (MixfixModule::printTails): bug where we were appending leftParen rather that rightParen in needAssocParen case ===================================Maude92c=========================================== 2009-12-24 Steven Eker * trial.cc (traceBeginRuleTrial): added missing '\n' (traceBeginScTrial): symmetric fix ===================================Maude92b=========================================== 2009-11-06 Steven Eker * entry.cc (newFancySymbol): pass strategy to MetaLevelOpSymbol() 2009-09-23 Steven Eker * interact.cc (setHandlers): call BddUser::setErrorHandler() ===================================Maude92a=========================================== 2009-08-19 Steven Eker * parameterization.cc (handleInstantiationByTheoryView): reorg sort mapping code (handleInstantiationByTheoryView): added DebugAdvisory() (handleInstantiationByTheoryView): check if a sort is moduleDeclared() wrt the target theory before sticking a parameter prefix on it in the sort mapping * moduleCache.cc (makeRenamedCopy, makeParameterCopy) (makeInstatiation, makeSummation): updated and added DebugAdvisory()s 2009-08-12 Steven Eker * interact.cc (internalErrorHandler): updated internal error message 2009-08-11 Steven Eker * view.hh (User): make OpTermMap public 2009-08-07 Steven Eker * view.hh (getFrom): added (getTo): added 2009-07-22 Steven Eker * syntacticPreModule.cc (finishModule): call destructUnusedModules() here * process.cc (processImports): don't call destructUnusedModules() because we may be in a recursive call and there may be partially built modules with no users in the cache 2009-02-27 Steven Eker * makeGrammar.cc (makeComplexProductions): allow rewrite conditions in search command 2009-02-19 Steven Eker * preModule.cc (PreModule): init owner data member * preModule.hh (getOwner): added (User): added data member owner * banner.cc (printBanner): update copyright notice * entity.cc (operator<<): use PreModule* rather than SyntacticPreModule* * preModule.hh (operator<<): added * syntacticPreModule.hh (operator<<): deleted * preModule.hh: inherit from Entity::User * syntacticPreModule.hh: no longer inherit from Entity::User 2009-02-13 Steven Eker * interpreter.hh: decl for getModuleOrIssueWarning() * interpreter.cc (getModuleOrIssueWarning): was getModule() but we were occluding needed function from base class * syntacticPreModule.hh: removed decls for makeModule() and getModule() * interpreter.hh: added decls for makeModule() and new getModule() * interpreter.cc (getModule): moved here * import.cc: deleted * interpreter.cc (makeModule): moved here - becomes part of Interpreter class * process.cc (processImports): moved here 2009-02-12 Steven Eker * import.cc (getModule): use PreModule * moduleDatabase.cc: go back to using PreModule * syntacticPreModule.cc (SyntacticPreModule): call PreModule ctor * syntacticPreModule.hh: derive from PreModule * preModule.cc: gutted * preModule.hh (class PreModule): gutted * modules.yy: PreModule -> SyntacticPreModule * top.yy: PreModule -> SyntacticPreModule * import.cc: PreModule -> SyntacticPreModule * process.cc: PreModule -> SyntacticPreModule * fixUp.cc: PreModule -> SyntacticPreModule * ops.cc: PreModule -> SyntacticPreModule * command.cc: PreModule -> SyntacticPreModule * renaming.cc: PreModule -> SyntacticPreModule * entity.cc (operator<<): PreModule -> SyntacticPreModule * compiler.cc: PreModule -> SyntacticPreModule * mixfix.hh: added class SyntacticPreModule * moduleDatabase.hh: PreModule -> SyntacticPreModule * interpreter.hh: PreModule -> SyntacticPreModule * compiler.hh: PreModule -> SyntacticPreModule 2009-02-06 Steven Eker * preModule.hh: made process() private 2009-01-29 Steven Eker * renameModule.cc (donateOps2): fix DebugAdvisory() * entry.cc (newFancySymbol): added InterpreterManagerSymbol case * specialSymbolTypes.cc: added entry for InterpreterManagerSymbol 2009-01-09 Steven Eker * view.cc (handleOpTermMappings): call resetImports() after handleVarDecls() failure to avoid importPhase weirdness later on * importModule.cc (donateSorts, donateOps, fixUpDonatedOps) (donateStatements): added Assert() for bad importPhase * view.cc (finishModule1, finishModule2): added Asserts() that module under construction shouldn't become bad * renameModule.cc (finishCopy): check bad flag in module under construction and stop construction early if it becomes set to avoid memory corruption * moduleCache.cc (makeSummation): check bad flag in module under construction and stop construction early if it becomes set to avoid memory corruption 2009-01-08 Steven Eker * modules.yy (colon2): added 2008-12-12 Steven Eker * interpreter.hh: added Environment as a base class ===================================Maude92=========================================== 2008-09-16 Steven Eker * execute.cc: removed commented out eRewrite() and eRewriteCont() * search.cc (search): same issue as below * match.cc (match): same issue as below * srewrite.cc (sRewrite): same issue as below * erewrite.cc (eRewrite): same issue as below * execute.cc (reduce): same issue as below (rewrite): same issue as below (fRewrite): same issue as below * unify.cc (unify): make sure we output an endl after the command to flush the output buffer - otherwise we could get error messages getting ahead of the command that produced them * view.hh (operator<<): added missing return statement * symbolType.cc (operator<<): added missing return statement * interact.cc (handleDebug): added return statement to silence compiler warning * importModule.hh (operator<<): added missing return statement * entity.hh (class Entity): use a virtual dtor rather than dummyToAllowDynamicCasts() * entity.cc (operator<<): fixed missing return value (both versions) * interact.cc (sigsegvHandler): rewritten to avoid compiler warning 2008-09-12 Steven Eker * preModule.hh (operator<<): added missing return value * process.cc (processOps): added a check to see of we are subsort overloading an operator from one of our parameters 2008-09-11 Steven Eker * view.cc (checkSorts): clean up and comment code; use transKind * mixfixParser.cc (parseSentence): don't make second call to getErrorPosition() (makeStrategyCommand): aviod duplicated parser.getChild() calls * import.cc (makeModule): avoid sign/unsigned comparison warning (processImports): push using check into Assert() * mixfixModule.cc (copyFixUpBubbleSpec): use newSymbol rather than do another translation * doParse.cc (getParserStats): commented out unused variable nrKinds * makeGrammar.cc (makePolymorphProductions): commented out unused variable type * importModule.cc (deepCopyCondition): assign dummy value to n to avoid compiler warning * moduleExpression.cc (deepSelfDestruct): added case MODULE to avoid compiler warning 2008-09-04 Steven Eker * interact.cc (where): fix char constness * prettyPrint.cc (printAttributes): fix char constness * top.yy: fix duplicated KW_OPS by renaming the non token returning version to KW_OPS2 * commands.yy (command): KW_OPS -> KW_OPS2 * lexer.ll: KW_OPS -> KW_OPS2 for non token returning version 2008-08-27 Steven Eker * userLevelRewritingContext.cc (checkForPrintAttribute): fix bug where we were checking PRINT_ATTRIBUTE instead of PRINT_ATTRIBUTE_NEWLINE 2008-08-26 Steven Eker * mixfixParser.cc (makeStatementPart): test PRINT flag rather than number of items (makeAttributePart): set PRINT flag; handle empty print attribute case * mixfixParser.hh (class MixfixParser): added PRINT to enum Flags * makeGrammar.cc (makeAttributeProductions): added production for empty print attribute 2008-08-21 Steven Eker * prettyPrint.cc (printAttributes): rewritten * userLevelRewritingContext.cc (checkForPrintAttribute): rewritten * importModule.cc (copyMetadata): rewritten * mixfixParser.hh (class MixfixParser): updated decls * metadataStore.hh (class MetadataStore): updated decls * metadataStore.cc (getPrintAttribute, insertPrintAttribute): rewritten to use new convention * mixfixParser.cc (makePrintList): rewritten to use two vector convention (makeStatement): update convention (makeStatementPart): update convention * printAttribute.cc: created * printAttribute.hh: created * mixfix.hh: added class PrintAttribute 2008-08-20 Steven Eker * userLevelRewritingContext.hh (class UserLevelRewritingContext): added decl for checkForPrintAttribute() * userLevelRewritingContext.cc (tracePreScApplication) (tracePreRuleRewrite, tracePreEqRewrite): call checkForPrintAttribute() (checkForPrintAttribute): added * commands.yy (command): added syntax for set print attribute and set print attribute newline * lexer.ll: added attr as abbreviation for attribute * interpreter.hh (endif): added flags PRINT_ATTRIBUTE and PRINT_ATTRIBUTE_NEWLINE 2008-08-19 Steven Eker * top.yy: added KW_ATTRIBUTE, KW_NEWLINE * lexer.ll: added keywords attribute and newline * mixfixParser.hh (class MixfixParser): updated decls for makeAttributePart(), makePrintList(), makeStatementPart() * mixfixParser.cc (makePrintList): take and fill out printList argument (makeAttributePart): take and pass printList argument (makeStatement): pass printList argument 2008-08-14 Steven Eker * metadataStore.cc (insertMetadata, insertPrintAttribute) (getPrintAttribute): const-ness change * metadataStore.hh (class MetadataStore): changed const-ness for ModuleItem* item in 3 declarations * mixfixModule.hh (SharedTokens): update decl for printAttributes() * prettyPrint.cc (printAttributes): handle printAttribute (operator<<): pass extra argument to printAttributes() (SortConstraint*, Equation*, Rule* versions) (printAttributes): rewritten; no longer static (operator<<): use new printAttributes() convention * importModule.cc (copyMetadata): added (donateStatements2): use copyMetadata (3 places) * metadataStore.cc (insertPrintAttribute): added (getPrintAttribute): added * metadataStore.hh (class MetadataStore): added data member printAttributeMap and decls for insertPrintAttribute() and getPrintAttribute() 2008-08-13 Steven Eker * token.hh (tokenize): added Assert() * mixfixParser.cc (makePrintList): fix bug where we doing extra getChild() step 2008-08-12 Steven Eker * unify.cc (unify): support systems of equations * mixfixModule.hh (SharedTokens): update decl for parseUnifyCommand() * doParse.cc (parseUnifyCommand): handle systems of equations * mixfixParser.hh (class MixfixParser): updated decl for makeUnifyCommand() * mixfixParser.cc (makeUnifyCommand): parse systems of equations * mixfixParser.hh (class MixfixParser): added UNIFY_LIST to enum SemanticActions * makeGrammar.cc (makeComplexProductions): allow UNIFY_COMMAND to consist of multiple UNIFY_PAIRs 2008-05-16 Steven Eker * mixfixParser.hh (class MixfixParser): added decl for makePrintList * mixfixParser.cc (makePrintList): added * makeGrammar.cc (makeAttributeProductions): pass MAKE_STRING and MAKE_VARIABLE to appropriate items 2008-05-15 Steven Eker * makeGrammar.cc (makeComponentProductions): added VARIABLE version of 4 variable productions (makeVariableProductions): added VARIABLE version of variable production (makeSpecialProductions): added VARIABLE version of variable production * mixfixParser.hh (class MixfixParser): added MAKE_PRINT_LIST to enum SemanticActions * mixfixModule.hh (SharedTokens): added VARIABLE, PRINT_ITEM and PRINT_LIST to enum NonTerminal; made extra nonterminals use relative numbering * makeGrammar.cc (makeAttributeProductions): added syntax for print items and print lists 2008-05-14 Steven Eker * mixfixParser.hh (class MixfixParser): added MAKE_PRINT_ATTRIBUTE to enum SemanticActions * specialTokens.cc (MACRO): added print * makeGrammar.cc (makeAttributeProductions): added syntax for print attribute 2008-05-08 Steven Eker * unify.cc (doUnification): deleted extension handling code * top.yy: deleted decl for nonterminal unify * commands.yy (command): don't pass withExtension arg to unify (unify): deleted * interpreter.hh (endif): updated declf for unify() * unify.cc (unify): remove with extension argument ===================================Maude91a=========================================== 2008-04-20 Steven Eker * unify.cc (unify): fix bug where we were not deleting problem after problemOK failed, allowing a garbage collect to call the bad problems markReachableNodes() ===================================Maude91=========================================== 2008-03-23 Steven Eker * top.yy: deleted KW_XUNIFY * commands.yy (command): deleted xunify * lexer.ll: deleted xunify ===================================Maude90a=========================================== 2008-03-12 Steven Eker * interact.cc (internalErrorHandler): update message 2008-03-07 Steven Eker * userLevelRewritingContext.hh (class UserLevelRewritingContext): added declaration for void internalErrorHandler(); removed old decls * interact.cc (setHandlers): rewritten, dead code eliminated (segmentationFaultHandler): becomes internalErrorHandler(); dead code eliminated 2008-03-05 Steven Eker * userLevelRewritingContext.hh (class UserLevelRewritingContext): added decls for stackOverflowHandler() and sigsegvHandler() * interact.cc: try using stackoverflow_install_handler() (stackOverflowHandler, sigsegvHandler): added 2008-02-28 Steven Eker * lexer.ll (END_STATEMENT_MODE): treat whitespace after "." as something that is left to global rule 2008-02-27 Steven Eker * lexer.ll: flag a nasty bug - we need to deal with white space and comments after the end of statement . before we see a keyword that tells us it is in fact the end of statement 2008-02-26 Steven Eker * lexer.ll (END_COMMAND_MODE,END_STATEMENT_MODE): handle . combined common code (END_COMMAND_MODE,END_STATEMENT_MODE): if we see a regular token we need to push it back on the input and parse it in bubble mode since it might have some special properties in bubble mode 2008-02-25 Steven Eker * commands.yy (opSelect, endSelect, badSelect): added (command): use opSelect * modules.yy (endBubble): use missingSpace() (moduleExprDot, sortDot, dot, badType): use missingSpace() * commands.yy (miscEndBubble): use missingSpace() * top.yy: added decl for missingSpace(); * bottom.yy: added * modules.yy (endBubble): better error message for missing space * commands.yy: allow ENS_IN _DOT everywhere IDENTIFIER is used * lexer.ll: added SEEN_DOT mode * commands.yy (initialEndBubble): added (moduleAndTerm, numberModuleTerm, numbersModuleTerm): use initialEndBubble 2008-02-22 Steven Eker * modules.yy (badType): use singleton (typeName): use singleton (simpleOpName): use singleton * commands.yy (cSimpleOpName): use singleton * top.yy: added variable singleton * commands.yy (miscEndBubble): added; use throughout * top.yy: declare badType to return token * modules.yy (domainRangeAttr): dra3 -> dra2 (rangeAttr): added (dra2): use rangeAttr (dra2): fuse empty and nonempty typeList cases (domainRangeAttr): use rangeAttr (badType): return token 2008-02-21 Steven Eker * top.yy: deleted cToken cTokenBarDot * commands.yy (command): use lexBubble() for select/dump (command): use parenBubble to handle (...) commands (cSimpleOpName): use parenBubble (cToken, cTokenBarDot, cTokens, cTokensBarDot): deleted * lexerAux.hh: updated decl for lexContinueBubble() * lexerAux.cc (lexContinueBubble): take pCount arg * top.yy: deleted cTokenBarDotColon * lexerAux.hh: update decl for lexBubble() * lexerAux.cc (lexBubble): check to see if first token is "(" (lexBubble): support pCount argument instead * commands.yy (command): use lexerBubble for rewrite/srewrite/match/unify (numbersModuleTerm*): 7 nonterminals rewritten (command): use lexerBubble for frewrite/erewrite/search * lexerAux.hh: added decls for lexSave(), lexContinueSave() * lexerAux.cc (lexSave, lexContinueSave): added * commands.yy (command): use lexerBubble for parse/cred/red commands (moduleAndTerm, inEnd): rewritten using lexBubble() (command): use lexerBubble for loop (numberModuleTerm, numberModuleTerm1, numberModuleTerm2): rewritten using lexBubble() * lexer.ll (id): support switching to END_COMMAND_MODE * lexerAux.hh (enum TERMINATION_TOKENS): added END_COMMAND * lexer.ll (id): handle identifiers ending in "." in END_STATEMENT_MODE; added END_COMMAND_MODE 2008-02-20 Steven Eker * lexer.ll: END_BUBBLE_MODE -> END_STATEMENT_MODE * lexerAux.hh: deleted decl for lexerTokenTreeMode() * lexerAux.cc (lexerTokenTreeMode): deleted * lexer.ll (id): delete TOKEN_TREE_MODE (id): delete END_STATEMENT_MODE * commands.yy (command): bubble -> tokenSequence * modules.yy: bubble -> tokenSequence * top.yy: added FORCE_LOOKAHEAD; deleted identityChunk; bubble becomes tokenSequence * modules.yy (attribute): reimplement identity attribute using lexerBubble (tokenTree): deleted * lexerAux.hh (enum TERMINATION_TOKENS): added BAR_RIGHT_BRACKET * lexer.ll (id): added BAR_RIGHT_BRACKET case * token.cc (peelParens): don't peel bubbles of size 2 2008-02-19 Steven Eker * lexer.ll (id): added BAR_OP_ATTRIBUTE case * modules.yy (declaration): use lexerBubble for cmb/eq/ceq/rl/crl (endTree): deleted (parenBubble): added (opName, simpleOpName): use parenBubble (declaration): moved : into op/msg decls (domainRangeAttr): deleted (dra2): becomes domainRangeAttr (declaration): use lexBubble() instead of opName for op/msg decls (declaration): need to use peelParens() (opName): deleted (hook): use parenBubble rather than parenTree (parenTree): deleted (neTokenTree): deleted * lexerAux.hh: added decl for lexContinueBubble() * lexerAux.cc (lexContinueBubble): added * modules.yy (declaration): use lexerBubble for mb * lexerAux.hh: added decl for new version of lexerBubble() * lexerAux.cc (lexBubble): added new version that allows an initial token to be placed in the bubble * modules.yy (endBubble): added (viewEndOpMap): use endBubble (2 places) * lexer.ll (id): do lexerBubble length checks in . and ENDS_IN_DOT cases 2008-02-15 Steven Eker * modules.yy (mapping): use lexBubble(); delete fromOpName and toOpName * top.yy: added decl for lexerBubble * lexerAux.hh: added decl for lexBuble() * lexer.ll: FIX_UP() -> RETURN_FIX_UP(); don't fix up .{} in command mode; removed redundant code that would pass , as an IDENTIFIER 2008-02-14 Steven Eker * modules.yy (identityChunk): use tokenTree (tokens): deleted * top.yy: deleted decls for tokenBarEqual tokenBarIf tokenBarArrow2 endToken tokenBarCommaLeft tokenBarColonTo * modules.yy (viewDeclaration): use neTokenTree (opName): use tokenTree/neTokenTree (parenTree): added (fromOpName, toOpName, opName, simpleOpName): use parenTree (hook): use parenTree (endStatement, tokensBarColon, tokensBarColonTo) (tokensBarCommaLeft, tokensBarEqual): deleted (noTrailingDot, endTokens, tokensBarIf, tokensBarArrow2): deleted (endToken): deleted (tokenBarEqual, tokenBarIf, tokenBarColonTo, tokenBarCommaLeft): deleted (tokenBarArrow2): deleted * lexerAux.hh (enum TERMINATION_TOKENS): added BAR_RIGHT_PAREN * lexer.ll (id): support BAR_RIGHT_PAREN; fix BAR_LEFT_BRACKET * modules.yy (endTree): added (declaration): use tokenTree/endTree (viewEndOpMap): use endTree (fromOpName): use tokenTree * search.cc (search): fix missing space in show cmd output * lexer.ll (id): added END_STATEMENT_MODE; SAVE(), SAVE_FIX_UP(), RETURN_SAVED() macros; savedToken, savedReturn variables 2008-02-13 Steven Eker * lexerAux.hh: added decl for lexerLatexMode() * modules.yy (tokenTree): added * lexerAux.cc (lexerTokenTreeMode): added * lexerAux.hh (enum EXCLUDE_TOKENS): added added decl for lexerTokenTreeMode() * lexer.ll (id): added token tree mode 2008-01-21 Steven Eker * top.yy: added yySearchKind to %union; updated decl for search * lexer.ll: added keyword xg-narrow * commands.yy (conceal): support xg-narrow * interpreter.hh (endif): updated decl for search() * search.cc (search): added support for xg-narrow * interpreter.hh (endif): added enum SearchKind * search.cc (search): pass flags arg to NarrowingSequenceSearch * banner.cc (printBanner): update copyright date * userLevelRewritingContext.cc (traceNarrowingStep): rewritten to support trace options * userLevelRewritingContext.hh (class UserLevelRewritingContext): update decl for traceNarrowingStep() 2008-01-18 Steven Eker * userLevelRewritingContext.cc (traceNarrowingStep): added * userLevelRewritingContext.hh (class UserLevelRewritingContext): added decl for traceNarrowingStep() ===================================Maude90=========================================== 2007-11-27 Steven Eker * freshVariableSource.hh (class FreshVariableSource): added cache data member * freshVariableSource.cc (getFreshVariableName): cache computed codes and check cache before computing a new code 2007-11-21 Steven Eker * token.cc (bubbleToPrefixNameCode): commented out problematic Assert() until further investigation 2007-10-31 Steven Eker * interpreter.hh (endif): added decl for doNarrowing() * search.cc (doNarrowing): added (search): use doNarrowing 2007-10-29 Steven Eker * search.cc (search): use class NarrowingSequenceSearch 2007-10-11 Steven Eker * unify.cc (doUnification): use getVariableInfo() 2007-10-01 Steven Eker * top.yy: declare type of search * search.cc (search): partial handling of narrowing flag * interpreter.hh (endif): update decl for search() * commands.yy (search): added (command): hijack search code to handle narrowing case 2007-09-20 Steven Eker * trial.cc (traceBeginEqTrial): removed the equation == 0 case since this should never occur and could cause a null deref in profileEqConditionStart() if it did (discovered by coverity); added Assert() (traceBeginRuleTrial, traceBeginScTrial): symmetric changes to above 2007-09-19 Steven Eker * userLevelRewritingContext.cc (tracePreScApplication): added comment to flag coverity discovered bug - need interface change to fix this properly * mixfixParser.cc (makeTerm): return 0 in (unreachable) default case rather than setting t to 0 inorder to avoid coverity warning ===================================Maude89h=========================================== 2007-08-24 Steven Eker * unify.cc (unify): variablesOK() -> problemOK() 2007-08-06 Steven Eker * interpreter.cc (setCurrentModule): fix bug where we were printing out "in" as part of the "no module" warning ===================================Maude89e=========================================== 2007-07-06 Steven Eker * unify.cc (doUnification): support extension (unify): support extension 2007-06-21 Steven Eker * top.yy (directive): non need to eatComment() now that this in done in file name lexing * lexerAux.cc (lexerFileNameMode): erase accumulator * lexer.ll: latexCode -> accumulator thoughout; added FILE_NAME_QUOTE_MODE * lexerAux.cc (lexerLatexMode): latexCode becomes accumulator * lexer.ll: handle file names enclosed in quotes 2007-06-19 Steven Eker * unify.cc (unify): use new UnificationProblem() interface 2007-06-14 Steven Eker * freshVariableSource.cc (variableNameConflict): remember to unflag codes * unify.cc (unify): use variablesOK() * freshVariableSource.cc (variableNameConflict): implemented (getFreshVariableName): use baseNumber in +ve form (FreshVariableSource): store baseNumber in +ve form 2007-06-13 Steven Eker * freshVariableSource.cc (getFreshVariableName): rewritten to use mpz_class * freshVariableSource.hh (class FreshVariableSource): fix bug where we forgot to use INT64_TEXT_SIZE (class FreshVariableSource): base number becomes a mpz_class (class FreshVariableSource): deleted data member name 2007-06-11 Steven Eker * freshVariableSource.cc (variableNameConflict): added stub * freshVariableSource.hh (class FreshVariableSource): added data member baseNumber; updated decl for ctor * freshVariableSource.cc (FreshVariableSource): handle 64 bit numbers and baseNumber (getFreshVariableName): handle 64 bit numbers and baseNumber 2007-06-07 Steven Eker * prettyPrint.cc (printVariable): handle variables with flagged name codes * token.hh (flaggedCode, isFlagged, unflaggedCode): added ===================================Maude89c=========================================== 2007-03-16 Steven Eker * renaming.cc (addOpMapping): give safe dummy values to name and term fields to fail gracefully in the case where syntax error prevents addOpTarget() from being called ===================================Maude89a=========================================== 2007-03-14 Steven Eker * lexerAux.hh: added decl for checkForPending() * lexerAux.cc (checkForPending): added ===================================Maude89=========================================== 2007-03-13 Steven Eker * freshVariableSource.cc (reset): deleted (getFreshVariableName): rewritten (FreshVariableSource): don't clear counter * freshVariableSource.hh (class FreshVariableSource): rewritten 2007-02-13 Steven Eker * unify.cc (doUnification): use getSolution() 2007-02-09 Steven Eker * freshVariableSource.cc (reset): added * freshVariableSource.hh (FreshVariableGenerator): added decl for reset() ===================================Maude88f=========================================== 2007-01-23 Steven Eker * interpreter.cc (Interpreter): clear savedStrategicSearch (fixed bug) 2007-01-22 Steven Eker * interpreter.hh (endif): added data member savedUnificationProblem (endif): added decls for doUnification() and unifyCont(); switched decl for printMatchTiming() to printDecisionTime() * execute.cc (clearContinueInfo): delete and clear savedUnificationProblem * interpreter.cc (Interpreter): clear savedUnificationProblem * match.cc (printMatchTiming): becomes printDecisionTime() (doMatching): use printDecisionTime() * unify.cc (doUnification): added (unifyCont): added (unify): rewritten using doUnification() 2007-01-17 Steven Eker * unify.cc (unify): use FreshVariableSource (Namer): deleted (unify): create a new FreshVariableSource on the heap rather than on the stack * mixfix.hh: added class FreshVariableSource * freshVariableSource.hh: created * freshVariableSource.cc: created 2007-01-16 Steven Eker * interpreter.hh (endif): deleted decl for findOrderSortedUnifiers() * unify.cc (getFreshVariableName): use Token:encode() (findOrderSortedUnifiers): deleted 2007-01-12 Steven Eker * unify.cc (findOrderSortedUnifiers): use AllSat to extract sort assignments from bdd 2007-01-11 Steven Eker * unify.cc (findOrderSortedUnifiers): created 2007-01-10 Steven Eker * unify.cc (unify): generate mgu bdd (unify): use makeVariableBdd() 2007-01-09 Steven Eker * unify.cc (unify): generate unifier bdd 2006-12-11 Steven Eker * unify.cc (unify): clear solution 2006-12-07 Steven Eker * specialTokens.cc (MACRO): added unifies * makeGrammar.cc (makeComponentProductions): added syntax for UNIFY_PAIR (makeComplexProductions): added syntax for UNIFY_COMMAND * mixfixModule.hh: UNIFY_PAIR and UNIFY_COMMAND to enum NonTerminal * doParse.cc (parseUnifyCommand): added * mixfixModule.hh: added decl for parseUnifyCommand() * mixfixParser.cc (makeUnifyCommand): added * mixfixParser.hh (class MixfixParser): added decl for makeUnifyCommand() * interpreter.hh (endif): added decl for unify() * unify.cc: created * top.yy: added unify nonterminal * commands.yy (command): added syntax for unify 2006-12-01 Steven Eker * userLevelRewritingContext.cc (dontTrace): check TRACE_BUILTIN if pe null * top.yy: added KW_BUILTIN * lexer.ll: added KW_BUILTIN * commands.yy (traceOption): added KW_BUILTIN * interpreter.hh (endif): added TRACE_BUILTIN to enum Flags ===================================Maude88d=========================================== 2006-11-20 Steven Eker * bufferPrint.cc (printKind): fix bug where we were printing all but the first sort twice * erewrite.cc (doExternalRewriting): rewritten using fairTraversal() (eRewrite): rewritten using fairStart() (eRewriteCont): don't use fairContinue() 2006-11-15 Steven Eker * interpreter.hh (endif): added decl for doExternalRewriting() * erewrite.cc (eRewrite): moved here (eRewriteCont): moved here (eRewriteCont): rewritten using doExternalRewriting() (doExternalRewriting): added (eRewrite): rewritten using doExternalRewriting() ===================================Maude88c=========================================== 2006-11-10 Steven Eker * userLevelRewritingContext.cc (makeSubcontext): fix bug where we were checking TRACE_EQ rather than TRACE_CONDITION * interpreter.hh (endif): added decls for doStrategicSearch() and sRewriteCont() * srewrite.cc: created * interpreter.hh (endif): added data member savedStrategicSearch * execute.cc (sRewrite): clean up output (clearContinueInfo): clear savedStrategicSearch 2006-11-09 Steven Eker * execute.cc (sRewrite): print rewrite count and timing info 2006-11-08 Steven Eker * strategyPrint.cc (prettyPrint): added BranchStrategy and TestStrategy cases 2006-11-07 Steven Eker * execute.cc (sRewrite): use StrategyExpression version of operator<<() * strategyPrint.cc (prettyPrint): added * mixfixModule.hh (SharedTokens): added decl for StrategyExpression* version of prettyPrint(); make StrategyExpression* verison of operator<<() a friend * strategyPrint.cc: created 2006-11-02 Steven Eker * makeGrammar.cc (makeStrategyLanguageProductions): use new MAKE_APPLICATION semantics to handle all four cases * mixfixParser.hh (class MixfixParser): deleted MAKE_APPLICATION_WITH_SUBSTITUTION and MAKE_APPLICATION_WITH_STRATEGY_LIST * mixfixParser.cc (makeStrategy): combine all four application cases * makeGrammar.cc (makeStrategyLanguageProductions): added syntax for applications with substitutions and strategy lists 2006-11-01 Steven Eker * mixfixModule.hh (SharedTokens): added STRATEGY_LIST to enum NonTerminal * makeGrammar.cc (makeStrategyLanguageProductions): added syntax for strategy lists and applications with strategy lists * mixfixParser.hh (class MixfixParser): added decl for makeStrategyList() (class MixfixParser): added MAKE_APPLICATION_WITH_STRATEGY_LIST and MAKE_STRATEGY_LIST to enum SemanticActions * mixfixParser.cc (makeStrategy): added MAKE_APPLICATION_WITH_STRATEGY_LIST case (makeStrategyList): created 2006-10-11 Steven Eker * specialTokens.cc (MACRO): added amatch * makeGrammar.cc (makeStrategyLanguageProductions): xmatch becomes amatch; added new xmatch 2006-10-09 Steven Eker * banner.cc (printBanner): update copyright notice ===================================Maude88b=========================================== * modules.yy (domainRangeAttr): fix type clash 2006-10-06 Steven Eker * modules.yy (domainRangeAttr): remove dra3 production for op : Foo [ctor] . case because [ctor] is a legal kind name and after seeing the [ we can't be sure where we should process the next token as an attribute or sort name * global.cc: created to hold global stuff that used to live in main.cc * global.hh: created to hold things that used to live in main.hh * term-order.maude: created 2006-10-03 Steven Eker * prelude.maude: STO-SET becomes STRICT-TOTAL-ORDER, SWO-SET becomes STRICT-WEAK-ORDER; added TOTAL-PREORDER, TOTAL-ORDER and a version of all the order dependent stuff based on them; fix confluent bug in SORTABLE-LIST-AND-SET 2006-09-26 Steven Eker * specialTokens.cc (MACRO): removed colon3 * makeGrammar.cc (makeBoolProductions): removed syntax for lazy sort test operators (makeComponentProductions): removed syntax for COLON3_PAIR 2006-09-25 Steven Eker * specialTokens.cc (MACRO): "orelse" -> "or-else" * preModule.cc (addParameter): don't allow parameters to be added to a theory 2006-09-22 Steven Eker * quotedIdentifierTerm.cc (instantiate2): added * quotedIdentifierTerm.hh (class QuotedIdentifierTerm): added decl for instantiate2() * modules.yy (domainRangeAttr): support over parsing of constant declarations with missing -> * prelude.maude: fmod IDENTICAL expunged 2006-09-18 Steven Eker * prelude.maude: rewrote MAP and ARRAY to fix non-confluence; changed prec of _[_] to 23 2006-09-15 Steven Eker * prelude.maude: make _[_] in ARRAY always return a result at the sort level. 2006-09-14 Steven Eker * mixfixModule.hh (SharedTokens): lowered STRAT_TEST_PREC to 93 * mixfixParser.cc (makeStrategy): handle match/xmatch without "such that" clause * makeGrammar.cc (makeStrategyLanguageProductions): match strategy expression takes a term rather than a match pair (makeStrategyLanguageProductions): added match/xmatch without "such that" clause 2006-09-13 Steven Eker * mixfixParser.cc (makeStrategy): new TestStrategy() convention * makeGrammar.cc (makeConditionProductions): implement RULE_CONDITION_FRAGMENT in terms of CONDITION_FRAGMENT via PASS_THRU rather than duplicating productions (makeBoolProductions): no longer need RULE_CONDITION_FRAGMENT version of MAKE_TRUE * mixfixParser.cc (makeConditionFragment): added PASS_THRU case * prelude.maude: fix bug that the filter functions were reversing the order of the list 2006-09-12 Steven Eker * prelude.maude: replace old LIST-AND-SET fmod with new accumulator based one; move makeList to SORTABLE-LIST-AND-SET 2006-09-11 Steven Eker * prelude.maude: added th & view TOSET; renamed SORTABLE-LIST to PARTIALLY-SORTABLE-LIST, added new SORTABLE-LIST; turned predefined TAOSET views into TOSET views 2006-09-07 Steven Eker * prelude.maude: change importion in SORTABLE-LIST to avoid renaming a module with free parameters 2006-09-01 Steven Eker * mixfixParser.cc (makeStrategy): handle MAKE_TEST case * mixfixParser.hh (class MixfixParser): rm MAKE_UNARY; added MAKE_TEST * makeGrammar.cc (makeStrategyLanguageProductions): fix gather bug in ?: syntax * mixfixParser.cc (makeStrategy): don't pass data2 to IterationStrategy() * makeGrammar.cc (makeStrategyLanguageProductions): don't pass data2 for + or * * execute.cc (sRewrite): removed commented out set generator based code 2006-08-31 Steven Eker * mixfixModule.hh (SharedTokens): added STRAT_ORELSE_PREC to enum Precedence; changed STRAT_BRANCH_PREC to 101 * mixfixParser.cc (makeStrategy): removed MAKE_UNARY case * mixfixParser.hh (class MixfixParser): removed MAKE_UNARY from enum SemanticActions * makeGrammar.cc (makeStrategyLanguageProductions): added syntax for orelse * specialTokens.cc (MACRO): added orelse * makeGrammar.cc (makeStrategyLanguageProductions): pass NEW_STRATEGY data to insertProduction() (makeStrategyLanguageProductions): use MAKE_BRANCH for ! (makeStrategyLanguageProductions): use MAKE_BRANCH for not, test and try * mixfixParser.cc (makeStrategy): rewrote MAKE_BRANCH case to be very general 2006-08-30 Steven Eker * makeGrammar.cc (makeStrategyLanguageProductions): use BranchStrategy options for not, test and try (makeStrategyLanguageProductions): implement s! as a unary branch strategy (makeStrategyLanguageProductions): fix gather for ! * mixfixParser.cc (makeStrategy): use new BranchStrategy() convention (makeStrategy): use BranchStrategy() to implement stuff that was previously implemented by UnaryStrategy() * prelude.maude: made sort() stable wrt incomparable elements; added _subset_ and _psubset_ to SET and SET* 2006-08-15 Steven Eker * execute.cc (sRewrite): use class StrategicSearch (sRewrite): added Assert() 2006-07-25 Steven Eker * prelude.maude: use /\ instead of and for first TAO-SET ceq as suggest by Narcisso ===================================Maude88a=========================================== 2006-07-20 Steven Eker * maudemlBuffer.hh (class MaudemlBuffer): update decl for generateSearch() * maudemlBuffer.cc (generateFrewrite): fix bug where we were testing limit rather than gas (generateErewrite): symmetric bug (generateSearch): handle depth * search.cc (search): pass extra arg to generateSearch() * prelude.maude: added metaNormalize * machine-int.maude: now part of the distribution * top.yy: type decl for cTokenBarDotCommaNumber * commands.yy (cTokenBarDotCommaNumber): added (numbersModuleTerm1): use cTokenBarDotCommaNumber * execute.cc (printModifiers): fix whitespace bug * commands.yy (numbersModuleTerm6): fix missing moduleAndTerm * doParse.cc (parseSentence): added Assert() to check for empty sentence 2006-07-19 Steven Eker * search.cc (search): use printModifiers() (search): pass depth arg to RewriteSequenceSearch() ctor * execute.cc (fRewrite): use printModifiers() (eRewrite): use printModifiers() * interpreter.hh (endif): added decl for printModifiers() * execute.cc (printModifiers): added * interpreter.hh (endif): decl for search() now takes depth arg * commands.yy (command): allow search to take 2 parameters 2006-07-18 Steven Eker * fixUp.cc (fixUpSymbols): use shared tokens * process.cc (processOps): use shared tokens * specialTokens.cc (MACRO): added hook tokens * makeGrammar.cc (makeSpecialProductions): use shared pseudo-tokens * specialTokens.cc (MACRO): added pseudo-tokens * makeGrammar.cc (makeComponentProductions): use shared tokens * specialTokens.cc: added tokens <=? and <- * makeGrammar.cc (makeStrategyLanguageProductions): don't use Token::encode() now that we store these things in SharedTokens * specialTokens.cc (MACRO): added strategy keywords * import.cc (processImports): don't use Token::encode() now that we store these things in SharedTokens * specialTokens.cc: added import keywords * preModule.hh (User): derive from SharedTokens rather than CommonTokens * mixfixModule.hh (SharedTokens): derive from SharedTokens rather than CommonTokens * sharedTokens.cc: created from commonTokens.cc * sharedTokens.hh (class SharedTokens): was commonTokens.hh * commonTokens.hh (class CommonTokens): use specialTokens.cc * specialTokens.cc (MACRO): added smod/endsm * preModule.cc (PreModule): handle smod * specialTokens.cc: created 2006-07-17 Steven Eker * preModule.cc (compatible): handle smod/endsm * lexer.ll (id): added syntax for smod, endsm * model-checker.maude: {_,_} : State RuleName -> Transition becomes a ctor * prelude.maude: _{_} : Qid ParameterDeclList -> Header becomes a ctor ===================================Maude88=========================================== 2006-07-13 Steven Eker * mixfixModule.cc (findSymbol): for assoc op, domainAndRange[2] and not domainAndRange[nrArgs] holds the range sort 2006-04-24 Steven Eker * mixfixParser.hh (class MixfixParser): added MAKE_UNARY to enum SemanticActions * mixfixParser.cc (makeStrategy): added MAKE_UNARY case * makeGrammar.cc (makeStrategyLanguageProductions): fix bad gather in top() syntax (makeStrategyLanguageProductions): added syntax for not, test and try strategies 2006-04-18 Steven Eker * mixfixParser.cc (makeStrategy): support normalForm flag for IterationStrategy() * makeGrammar.cc (makeStrategyLanguageProductions): syntax for ! operator 2006-04-13 Steven Eker * makeGrammar.cc (makeStrategyLanguageProductions): added syntax for top() modifier * mixfixParser.hh (class MixfixParser): added MAKE_TOP to * mixfixParser.cc (makeStrategy): added case for MAKE_TOP 2006-04-12 Steven Eker * mixfixParser.hh (class MixfixParser): MAKE_SEQUENCE -> MAKE_CONCATENATION * makeGrammar.cc (makeStrategyLanguageProductions): MAKE_SEQUENCE -> MAKE_CONCATENATION * mixfixParser.cc (makeStrategy): use ConcatenationStrategy() in place of StrategySequence() (makeStrategy): MAKE_SEQUENCE -> MAKE_CONCATENATION 2006-03-23 Steven Eker * execute.cc (sRewrite): handle limit = NONE case * commands.yy (command): handle number for srewrite (command): fix bug where erewrite wasn't allowed to take two numbers * interpreter.hh (endif): updated decl for sRewrite() * execute.cc (sRewrite): support limit; garbage collect context/gen/strategy; tidy up after aborts * mixfixParser.cc (makeAssignment): check for and recover from assignment to nonvariable 2006-03-22 Steven Eker * mixfixParser.hh (class MixfixParser): added decls for makeAssignment() and makeSubstitution() (class MixfixParser): added MAKE_SUBSTITUTION to enum SemanticActions (class MixfixParser): added MAKE_APPLICATION_WITH_SUBSTITUTION to enum SemanticActions * mixfixParser.cc (makeStrategy): added semantics for applications with substitutions (makeSubstitution): added * makeGrammar.cc (makeComponentProductions): added syntax for assignments (makeComplexProductions): added syntax for substitutions (makeStrategyLanguageProductions): added syntax for applications with substitutions * mixfixModule.hh (CommonTokens): added ASSIGNMENT and SUBSTITUTION to enum NonTerminal * mixfixParser.hh (class MixfixParser): added MAKE_ALL to enum SemanticActions * mixfixParser.cc (makeStrategy): added MAKE_ALL case * makeGrammar.cc (makeStrategyLanguageProductions): added syntax for all 2006-03-21 Steven Eker * mixfixParser.hh (class MixfixParser): MAKE_ALTERNATION -> MAKE_UNION * mixfixParser.cc (makeStrategy): added semantics for MAKE_UNION * mixfixModule.hh (CommonTokens): STRAT_ALT_PREC -> STRAT_UNION_PREC * makeGrammar.cc (makeStrategyLanguageProductions): added union syntax 2006-03-20 Steven Eker * mixfixParser.cc (makeStrategy): added semantics for MAKE_BRANCH * mixfixModule.hh (CommonTokens): added STRAT_BRANCH_PREC to enum Precedence * makeGrammar.cc (makeStrategyLanguageProductions): added syntax for branch strategy; code cleaning 2006-03-17 Steven Eker * mixfixParser.cc (makeStrategy): added iterator and pass thru cases * makeGrammar.cc (makeStrategyLanguageProductions): added syntax for iterators and parens * execute.cc (sRewrite): need to reduce term first to ensure it has sort info * mixfixParser.cc (makeStrategy): handle trivial and sequence cases * makeGrammar.cc (makeStrategyLanguageProductions): added syntax for fail, idle, sequencing * mixfixModule.hh (CommonTokens): added STRAT_SEQ_PREC and STRAT_ALT_PREC to enum Precedence * makeGrammar.cc (makeComplexProductions): fix bad gathers for arrow productions * mixfixParser.hh (class MixfixParser): added more strategy actions to enum SemanticActions 2006-03-16 Steven Eker * mixfixParser.cc (makeStrategy): added (makeStrategyCommand): use makeStrategy() 2006-03-15 Steven Eker * makeGrammar.cc (makeStrategyLanguageProductions): fix resize bug (makeStrategyLanguageProductions): handle labels (makeGrammar): don't call makeLabelProductions() for complex parsers * mixfixParser.hh (class MixfixParser): added decl for makeStrategyCommand() * mixfixParser.cc (makeStrategyCommand): added * doParse.cc (parseStrategyCommand): implement * mixfixModule.hh (CommonTokens): added decl for makeStrategyLanguageProductions() * makeGrammar.cc (makeStrategyLanguageProductions): created (makeGrammar): call makeStrategyLanguageProductions() 2006-03-08 Steven Eker * makeGrammar.cc (makeComplexProductions): quick hack for strategy command syntax * mixfixModule.hh (CommonTokens): added decl for parseStrategyCommand() (CommonTokens): added STRATEGY_EXPRESSION and STRATEGY_COMMAND to enum NonTerminal; renumbered * doParse.cc (parseStrategyCommand): added stub * execute.cc: added stub for sRewrite() * lexer.ll: added sred; deleted ored * top.yy: added KW_SREWRITE; deleted KW_OREWRITE * interpreter.hh (endif): added decl for sRewrite() * commands.yy (command): added syntax for srewrite 2006-01-06 Steven Eker * visibleModule.cc (showSortsAndSubsorts): for each line of output, show main sort in color ===================================Maude87=========================================== 2005-11-28 Steven Eker * symbolType.hh: added decl for operator<<() * symbolType.cc (operator<<): added * entry.cc (addOpDeclaration): added DebugAdvisory for when attributes differ ===================================Maude86e=========================================== 2005-11-17 Steven Eker * prelude.maude: op nil : -> HookList is now a ctor; EmptyQidList deleted; EmptyCommaList added; fixed confusion between __ and _,_ based lists of Qids ===================================Maude86d2=========================================== 2005-11-16 Steven Eker * prelude.maude: sortLeq now defined on types * interact.cc (commandLoop): fix bad endXmlLog() call 2005-11-10 Steven Eker * mixfixModule.cc (MixfixModule): fix memory leak: deepSelfDestruct() identities * prelude.maude: added QID-SET; use QID-SET in META-MODULE; added extra sorts and declarations to achieve preregularity and associativity of _;_ 2005-11-09 Steven Eker * interact.cc (commandLoop): call endXmlLog() 2005-11-08 Steven Eker * moduleDatabase.hh (class ModuleDatabase): delete decl for ~ModuleDatabase(); add decl for deleteNamedModules() * moduleDatabase.cc (deleteNamedModules): added (~ModuleDatabase): deleted * interact.cc (commandLoop): delete interpreter here * preModule.cc (~PreModule): fix memory leak where we weren't deleting module expressions for parameter theories * viewDatabase.cc (~ViewDatabase): delete views 2005-11-07 Steven Eker * moduleCache.hh (User): updated decl for showCreatedModules() * moduleDatabase.hh (class ModuleDatabase): updated decl for showNamedModules() * moduleDatabase.cc (showNamedModules): take ostream& parameter * moduleCache.cc (showCreatedModules): take ostream& parameter * interpreter.cc (showModules): pass cout to showNamedModules() and showCreatedModules() * main.hh: update decl for interpreter * main.cc: make interpreter a reference to chase down memory leak 2005-11-02 Steven Eker * view.cc (clearOpTermMap): added (~View): use clearOpTermMap() (regretToInform): use clearOpTermMap() for fix stale term bug 2005-10-26 Steven Eker * prelude.maude: fixed large number of white space issues; in particular line no longer start with tab which messes with tecla * renameModule.cc (donateOps2): fixed nasty scoping bug that left format uninitialized in if branch 2005-10-25 Steven Eker * entry.cc (newFancySymbol): put pairs returned by insert() into local variables to appease purify (3 places) 2005-10-14 Steven Eker * prelude.maude: use protecting rather than inc in LIST-AND-SET ===================================Maude86d=========================================== 2005-10-07 Steven Eker * prelude.maude: added view TRIV * view.cc (View): fix memory leak: deepSelfDestruct() fromExpr and toExpr * auxProperty.cc (splitParameterList): fixed nasty new[]/delete bug (splitParameterizedSort): symmetric bug * main.cc (main): add -no-wrap flag (printHelp): mention -no-wrap flag 2005-10-06 Steven Eker * view.cc (handleOpTermMappings): fix nasty bug where we were forgetting to return a value at the end of function (evaluate): same bug! * interact.cc (segmentationFaultHandler): write \n\n after error message 2005-10-05 Steven Eker * prelude.maude: added fmod LIST-AND-SET 2005-10-04 Steven Eker * prelude.maude: X$Elt -> Item{X} for several declarations in LIST* * modules.yy (expectedIs, expectedDot): fix type mismatch bug only found by older (1.28) version of bison 2005-09-29 Steven Eker * parameterization.cc (instantiateBoundParameters): much simplification 2005-09-28 Steven Eker * importModule.hh (User): updated decl for instantiateBoundParameters() * parameterization.cc (instantiateBoundParameters): greatly simplified now that we don't have to deal with nested bound parameter instantiations (instantiateBoundParameters): eagerly rebind escaped parameters (handleRegularImports): deleted recapture code * importModule.hh (User): updated decls: extraParameterMap -> extraParameterSet * parameterization.cc (handleInstantiationByTheoryView): remove oldParameterName stuff now that parameters cannot clash and change name (handleInstantiationByTheoryView): extraParameterMap -> extraParameterSet (handleParameterizedSorts): extraParameterMap -> extraParameterSet (makeInstantiation, instantiateBoundParameters) (instantiateSortName): extraParameterMap -> extraParameterSet (instantiateRenaming): extraParameterMap -> extraParameterSet * importModule.hh (User): added typedef ParameterSet * parameterization.cc (instantiateBoundParameters): fix bug where we putting the view name in extraParameterMap 2005-09-27 Steven Eker * parameterization.cc (instantiateBoundParameters): compute parameterMap and extraParameterMap * renaming.cc (makeTypeName): fix bug by using Token::sortName instead of Token::name * parameterization.cc (instantiateSortName): added (instantiateRenaming): use instantiateSortName() (instantiateBoundParameters): use instantiateRenaming() * importModule.hh (User): added decl for instantiateRenaming() * parameterization.cc (instantiateRenaming): added * renaming.hh (class Renaming): added decl for addOpMappingPartialCopy() * renaming.cc (makeCanonicalVersion): clear term field of newly created op mapping in specific case for cleanliness (addOpMappingPartialCopy): added 2005-09-21 Steven Eker * importModule.cc (parametersBound): moved here; made recursive to deal with renaming modules having bound parameters 2005-09-20 Steven Eker * import.cc (makeModule): allow bound parameters in a module that is to be renamed * renameModule.cc (makeRenamedCopy): allow bound parameters * parameterization.cc (instantiateBoundParameters): added back old hacky code to deal with renamings * modules.yy (renameExpr): added (instantExpr): added (moduleExpr2): use renameExpr (moduleExpr3): use instantExpr, parenExpr (expectedDot): added (parenExpr): added (moduleExprDot): use tokenBarDot, expectedDot, parenExpr, renameExpr, instantExpr in order to detect and recover from missing period (typeDot): use expectedDot (typeAttr): use expectedDot (expectedIs, expectedDot): improve warnings 2005-09-19 Steven Eker * modules.yy (module): use expectedIs (expectedIs): added (view): use expectedIs 2005-09-16 Steven Eker * import.cc (makeModule): check for having both a theory-view and a PEM 2005-09-15 Steven Eker * importModule.cc (ImportModule): don't clear nrBoundParameters * renameModule.cc (makeRenamedCopy): use parametersBound() in place of nrBoundParameters * view.cc (evaluate): getNrFreeParameters() -> getNrParameters() * visibleModule.cc (showModule): remove "Free" from function calls * import.cc (processImports): use parametersBound() rather than getNrFreeParameters() (makeModule): use getNrParameters() rather than getNrFreeParameters() (makeModule): use getParameterTheory() rather than getFreeParameterTheory() (2 places) (makeModule): use parametersBound() rather than getNrBoundParameters() * parameterization.cc (handleRegularImports): use getParameterName() in place of getFreeParameterName() (instantiateBoundParameters): use getParameterName() in place of getFreeParameterName() (handleRegularImports): use parametersBound() in place of getNrFreeParameters() (instantiateBoundParameters): use getNrParameters() in place of getNrFreeParameters() * importModule.hh (getNrBoundParameters): deleted (getNrFreeParameters): deleted (parametersBound): added (User): deleted data member nrBoundParameters (getFreeParameterTheory): deleted (getFreeParameterName): becomes getParameterName() * parameterization.cc (makeInstantiation): don't set nrBoundParameters (handleInstantiationByParameter): don't use nrBoundParameters (handleInstantiationByTheoryView): don't use nrBoundParameters (handleInstantiationByModuleView): don't use nrBoundParameters (handleInstantiationByTheoryView): simplified (handleInstantiationByModuleView): simplified (handleInstantiationByTheoryView): replaced code to resolve parameter clash with an Assert() that the clash does not happen (handleRegularImports): use parametersBound() rather than testing nrBoundParameters (handleRegularImports): simplified now that we know we will have no bound parameters (handleRegularImports): check parametersBound rather than nrBoundParameters (makeInstantiation): check that we don't have bound parameters; use getNrParameters() in place of getNrFreeParameters() (makeInstantiation): don't copy bound parameters - there shouldn't be any (instantiateBoundParameters): check parametersBound rather than nrBoundParameters (instantiateBoundParameters): rearranged Asserts() (makeInstantiation): rearranged Asserts() (instantiateBoundParameters): commented out code for recursive call (instantiateBoundParameters): no need to check index against nrBoundParameters since we only have bound parameters 2005-09-14 Steven Eker * parameterization.cc (handleRegularImports): made escaped parameter Assert() very detail to try an nail obscure bug (instantiateBoundParameters): added DebugAdvisory() for escapees 2005-09-08 Steven Eker * renaming.cc (makeCanonicalVersion): genericsToAdd -> genericsToConsider (makeCanonicalVersion): clean up and fix bug that we weren't generating an advisory when user tried to rename a parameter polymorph 2005-09-07 Steven Eker * main.cc (dioTest): deleted 2005-08-31 Steven Eker * prelude.maude: changed prec for _;_ operator in ARRAY 2005-08-30 Steven Eker * ops.cc (setFlag): watn about duplicate simple attributes (setIdentity): warn about multiple identities (setPrec): warn about multiple precs (setGather): warn about multiple gathers (setMetadata): warn about multiple metadatas (setFormat): warn about multiple formats (setFrozen): warn about multiple frozens (setPoly): want about multiple polys (setLatexMacro): warn about multiple latexs (setStrat): warn about multiple strats * symbolType.hh (class SymbolType): added SIMPLE_ATTRIBUTES 2005-08-25 Steven Eker * linear.maude: built in natSystemSolve now takes a String; added op-hook stringSymbol 2005-08-23 Steven Eker * linear.maude: fix _,_ renaming 2005-08-17 Steven Eker * modules.yy (mappingList): added error handling to mappingList to ensure we swap back syntax containers (renaming2): place error handling here instead (viewDeclaration): addded error handling 2005-08-16 Steven Eker * linear.maude: created * fixUp.cc (defaultFixUp): added DebugAdvisory()s * prelude.maude: SPARSE-MAP becomes ARRAY 2005-08-15 Steven Eker * prelude.maude: added fth DEFAULT and associated views; added SPARSE-MAP ===================================Maude86c=========================================== 2005-07-29 Steven Eker * renaming.cc (makeCanonicalVersion): change the way generics are added (makeCanonicalVersion): rewritten to avoid renaming symbols and polymorphs from parameters (makeCanonicalVersion): added hack to that we generate advisory in the generic non-polymorph case * renaming.hh (class Renaming): added typedef IdSet * renaming.cc (makeCanonicalVersion): ignore mappings for sorts that come from parameters * renameModule.cc (makeRenamedCopy): deleted commented out line to copy nrBoundParameters - we do not rename modules with bound parameters * importModule.hh (parameterDeclared): added Symbol* and Sort* vesions (parameterDeclaredPolymorph): added * importModule.cc (importOps): set nrSymbolsFromParameters and nrPolymorphsFromParameters (importSorts): set nrSortsFromParameters (ImportModule): clear nrSortsFromParameters, nrSymbolsFromParameters, nrPolymorphsFromParameters * importModule.hh (User): added data members nrSortsFromParameters, nrSymbolsFromParameters, and nrPolymorphsFromParameters 2005-07-28 Steven Eker * parameterization.cc (addOpMappingsFromView): check moduleDeclaredPolymorph() * view.cc (checkPolymorphicOps): don't allow view to map module declared polymorphs * importModule.hh (User): added data member polymorphDeclaredInModule (moduleDeclaredPolymorph): added * renameModule.cc (donateOps2): keep track of polymorphs declared in modules and donated to theories * parameterization.cc (addOpMappingsFromView): handle polymorphs * view.hh (User): added decl for checkPolymorphicOps() * view.cc (checkOps): check for bad mapping between non-algebraic operators (checkPolymorphicOps): created to hold polymorph checking code (evaluate): use checkPolymorphicOps() (checkPolymorphicOps): look at all polymorphs rather than just imported ones * symbolType.hh (nonAlgebraic): added * view.cc (~View): deepSelfDestruct() terms in opTermMap 2005-07-27 Steven Eker * parameterization.cc (addOpMappingsFromView): don't map operators that have a module declaration (addOpMappingsFromView): prefer op->term mappings over op->op mappings * view.cc (checkOps): don't map operators that have a module declaration * view.hh (User): added decl for checkOps() * view.cc (checkOps): created to hold op checking code (evaluate): use checkOps() * importModule.hh (moduleDeclared): added Symbol* version * renameModule.cc (donateOps2): update opDeclaredInModule * importModule.hh (moduleDeclared): added * view.cc (checkSorts): don't allow mapping of module declared sorts 2005-07-26 Steven Eker * import.cc (makeModule): check badFlag in summation case (makeModule): reorg'd so that bad flag is always tested for modules made by interpreter * renameModule.cc (donateSorts2): handle the case where we have a sort imported from both a module and a theory * importModule.cc (addImport): changed messages; switch importation module to including for theories and don't allow other illegal imports at all. (addParameter): deleted commented out parameterTheories code 2005-07-25 Steven Eker * renameModule.cc (donateSorts2): update sortDeclaredInModule * importModule.hh (User): added data members sortDeclaredInModule, opDeclaredInModule 2005-07-21 Steven Eker * preModule.hh (getNrParameters, getParameterName, getParameter): added * parameterization.cc (handleInstantiationByTheoryView) (handleInstantiationByModuleView, instantiateBoundParameters): use new version of isTheory() (makeParameterCopy): use new version of isTheory() (instantiateBoundParameters): deleted commented out code to handle the instantiation of a renaming of a module with bound parameters since we no longer allow the renaming of modules with bound parameters * view.cc (evaluate): use new version of isTheory() 2005-07-20 Steven Eker * mixfixModule.hh (isTheory): added non-static version * prelude.maude: added hooks for headerSymbol, parameterDeclSymbol, parameterDeclListSymbol * view.cc (evaluate): check for free parameters in toModule 2005-07-19 Steven Eker * prelude.maude: replace metalevel modules with experimental metalevel; defined QID-LIST in terms of LIST{Qid} and added NeTypeList to fix preregularity problems; defined NAT-LIST in terms of LIST{Nat}; added op-hook for instantiation symbol 2005-07-18 Steven Eker * view.cc (evaluate): fullstop in "reexamining view" message * importModule.cc (deepSelfDestruct): remove ourself as a user from each view argument * parameterization.cc (makeInstantiation): always keep track pf view arguments * importModule.hh (User): update comment on viewArgs * parameterization.cc (handleInstantiationByModuleView): make copy a user of argumentView (handleInstantiationByTheoryView): make copy a user of argumentView * moduleCache.cc (destructUnusedModules): fix bug; we now look for modules with a single user since _we_ are that user * entity.hh (hasUsers): becomes getNrUsers() * entity.cc (removeUser): fix {} problem * view.cc (finishModule2): don't call addUser() - this is already done by ImportModule() * entity.cc (addUser): fix {} problem (DebugAdvisory() macro contains an if statement) * importModule.cc (ImportModule): replace delete canonicalRenaming with an Assert() (deepSelfDestruct): delete canonicalRenaming here 2005-07-15 Steven Eker * modules.yy (view): need to insert view _before_ we finish it to avoid the existence of two views with the same name when a view is replaced * view.hh (User): UNKNOWN -> STALE * view.cc (evaluate): added more DebugAdvisory()s (regretToInform): UNKNOWN -> STALE (evaluate): UNKNOWN -> STALE * preModule.hh (operator<<): added (User): made Entity::User derivation public * view.hh (operator<<): added * importModule.hh (operator<<): added * entity.cc (operator<<): added Entity* and Entity::User* versions (removeUser): rewritten (addUser): rewritten (informUsers): added DebugAdvisory() * view.cc (regretToInform): rewritten (~View): deepSelfDestruct() newFromTheory and newToModule (finishModule2): call addUser() (~View): call informUsers() * importModule.cc (deepSelfDestruct): deleted commented out parameterTheories code * view.hh (User): derive from Entity * entity.cc (informUsers): simplified by fusing loops 2005-07-14 Steven Eker * renaming.cc: unmake change * renaming.hh (class Renaming): unmake change * importModule.hh (User): unmake change * parameterization.cc: unmake previous changes since the deepCopy() idea is a dead duck - both because of a chicken & egg over sorts/symbols and the loss of variable index info from the original * renaming.cc (~Renaming): added * renaming.hh (class Renaming): adde decl for dtor * importModule.hh (User): updated decl for addOpMappingsFromView() * parameterization.cc (addOpMappingsFromView): take instance parameter; deepCopy() term part of op->term mappings into instance rather than using the original (handleInstantiationByTheoryView): pass instance parameter to addOpMappingsFromView() (handleInstantiationByModuleView): pass instance parameter to addOpMappingsFromView() 2005-07-13 Steven Eker * importModule.hh (User): added decl for translateComponent() (User): deleted commented out parameterTheories data member * parameterization.cc (addOpMappingsFromView): use translateComponent() (translateComponent): added * importTranslation.cc (translate): use FIRST_USER_SORT 2005-06-30 Steven Eker * view.cc (evaluate): skip to symbol existence check for ops that are being mapped to terms * importTranslation.cc (translateTerm): added translation splitting (translateTerm): added DebugAdvisory()s * importTranslation.hh (class ImportTranslation): added typedef ModuleList (ImportTranslation): added private ctor 2005-06-29 Steven Eker * importTranslation.hh (class ImportTranslation): updated decl for translateRegularSymbol() * importTranslation.cc (translateRegularSymbol): need to fill out opToTerm when we hit op->term mapping (translateRegularSymbol): pass back const_iterator (translateTerm, translate): use const_iterator * view.cc (evaluate): quick hack to allow bad views to be used for testing * importTranslation.cc (translateTerm): crude first implementation 2005-06-28 Steven Eker * parameterization.cc (addOpMappingsFromView): handle op->term mappings * view.hh (User): updated decls for getOpMapTerm() and both versions of typeMatch() * view.cc (typeMatch): rewritten (both versions) (getOpMapTerm): rewritten * parameterization.cc (addOpMappingsFromView): removed qualification for renameOp() call * view.cc (evaluate): removed qualification for renameOp() call * renaming.hh (class Renaming): de-virtualized renameOp() * view.cc (getOpMapTerm): removed CantHappen() (renameOp): deleted * view.hh (User): deleted decl for renameOp() * importTranslation.cc (translateRegularSymbol): handle id == NONE (translateRegularSymbol): moved Assert() checking for missing translation here * renaming.cc (printRenaming): added Assert() to check that we don't try to print a renaming that contains an op->term mapping * renaming.hh (class Renaming): added decl for getOpTargetTerm() (getOpTargetTerm): added * renaming.cc (addOpTarget): (both versions) clear term field (addOpTargetTerm): added * renaming.hh (class Renaming): added term field to struct OpMapping (class Renaming): added decl for addOpTargetTerm(Term* term) 2005-06-27 Steven Eker * parameterization.cc (addOpMappingsFromView): qualify renameOp() call * view.hh (User): added decls for typeMatch() (both versions) * view.cc (typeMatch): added (two versions) (renameOp): added (getOpMapTerm): added (evaluate): qualify renameOp() call * view.hh (User): added decls for getOpMapTerm() and renameOp() * renaming.hh (class Renaming): virtualize id version of renameOp() * importTranslation.cc (translate): only store mapping int directMap if it is non-null, i.e. op->op; comment out Assert() that mapping is non-null 2005-06-24 Steven Eker * importTranslation.cc (translateTerm): term is const Term* * importTranslation.hh (class ImportTranslation): updated decl for translateTerm() * importTranslation.cc (findTargetVersionOfSymbol): added (translateTerm): new calling convention for instantiate() * importTranslation.hh (class ImportTranslation): added decl for findTargetVersionOfSymbol() 2005-06-23 Steven Eker * importTranslation.cc (translate): use translateRegularSymbol() (translateTerm): partly implemented * importTranslation.hh (class ImportTranslation): added decl for translateRegularSymbol() * importTranslation.cc (translateRegularSymbol): added (translate, translateLabel): using RenamingList * renaming.hh (class Renaming): added decls for new member functions * renaming.cc (renameOp): added id version (typeMatch): added Vector version * importTranslation.hh (class ImportTranslation): added typedef RenamingList 2005-06-22 Steven Eker * importTranslation.cc (makeTranslatedTerm): becomes translateTerm() * importTranslation.hh (class ImportTranslation): replaced makeTranslatedTerm() with translateTerm() 2005-06-17 Steven Eker * parameterization.cc (makeParameterCopy): simplified using new addSortMapping(), parameterRename() and addLabelMapping() functions (handleInstantiationByParameter): simplified using new addSortMapping(), parameterRename() (handleInstantiationByTheoryView): simplified using new addSortMapping(), parameterRename() (handleInstantiationByModuleView): simplified using new addSortMapping() (handleParameterizedSorts): simplified using new addSortMapping() (handleInstantiationByTheoryView): call addOpMappingsFromView() to handle op mappings in the theory-view * token.hh (class Token): updated decl for parameterRename() * token.cc (parameterRename): now work on ints rather than tokens * renaming.hh (class Renaming): added decls for new addSortMapping() and addLabelMapping() versions * renaming.cc (addSortMapping): added int version (addLabelMapping): added int version 2005-06-16 Steven Eker * mixfixModule.hh (CommonTokens): updated decl for findSort() * mixfixModule.cc (findSort): made const * parameterization.cc (addOpMappingsFromView): crude first implementation * renaming.hh (class Renaming): added decls for new functions * renaming.cc (addType): added component* version (addOpTarget): added int version (addOpMapping): added int version 2005-06-15 Steven Eker * parameterization.cc (handleInstantiationByModuleView): call addOpMappingsFromView() * importModule.hh (User): added decl for addOpMappingsFromView() * parameterization.cc (makeInstantiation): use handleInstantiationByTheoryView() (handleInstantiationByModuleView): added (makeInstantiation): use handleInstantiationByModuleView() (addOpMappingsFromView): added stub * importModule.hh (User): added decl for handleInstantiationByTheoryView() * parameterization.cc (handleInstantiationByTheoryView): added (makeInstantiation): use handleInstantiationByParameter() * importModule.hh (User): added decl for handleInstantiationByParameter() * parameterization.cc (handleInstantiationByParameter): created (makeInstantiation): use handleParameterizedSorts() * importModule.hh (User): added decl for handleRegularImports() * parameterization.cc (makeInstantiation): use handleRegularImports() (handleParameterizedSorts): added * importModule.hh (User): added decl for handleRegularImports() * parameterization.cc (handleRegularImports): created 2005-06-14 Steven Eker * parameterization.cc (makeInstantiation): changed importation mode for modules that are the target of module-views from INCLUDING to PROTECTING 2005-06-13 Steven Eker * importTranslation.cc (translate): ERROR_SORT -> KIND 2005-06-10 Steven Eker * view.hh (User): deleted struct OpTermMapping; updated typedef OpTermMap * view.cc (mapComponent, mapSort): moved here (handleOpTermMappings): store from and to (showView): print op->term mappings * view.hh (User): updated decl for indexRhsVariables() * view.cc (handleOpTermMappings): use mapSort(); put sort info in VarMap * view.hh (mapSort): added * view.cc (handleOpTermMappings): use mapComponent() (evaluate): simplified using mapComponent() * view.hh (mapComponent): added * view.cc (indexRhsVariables): use VarMap; check variables sort * view.hh (User): added decl for indexRhsVariables() (User) IntMap becomes VarMap * view.cc (handleOpTermMappings): use indexRhsVariables() (indexRhsVariables): added 2005-06-09 Steven Eker * view.cc (handleOpTermMappings): added to handle op->term mapping code (evaluate): use handleOpTermMappings() (handleOpTermMappings): check lhs arguments (handleOpTermMappings): check for double use of variable name in lhs * view.hh (User): added decls for checkSorts(), handleVarDecls() * view.cc (evaluate): handle variable aliases (evaluate): fix line numbers for warnings in new code (handleVarDecls): added to hold variable alias code (evaluate): use handleVarDecls() (checkSorts): added to hold sort checking code (evaluate): use checkSorts() * preModule.hh (User): deleted friend decl for operator<<() * command.cc (operator<<): PreModule::Type& version; moved to syntaxContainer.cc * syntaxContainer.cc: created 2005-06-08 Steven Eker * view.hh (User): added decls for finishModule1(), finishModule2() * view.cc (finishModule): added (finishModule): split into finishModule1() and finishModule2() (evaluate): generate and use newFromTheory, newToModule * importModule.hh (User): added VIEW_LOCAL to enum Origin * view.hh (User): added data members newFromTheory, newToModule * view.cc (showView): handle variables (View): clear newFromTheory, newToModule * mixfix.hh: added class SyntaxContainer * view.cc (addVarDecl): implemented (addType): implemented * view.hh (User): added struct VarDecl; typedef VarDeclList, typedef TypeList; added data members varDecls and varDefs * preModule.hh (User): deleted struct Type * syntaxContainer.hh (class SyntaxContainer): added struct Type 2005-06-07 Steven Eker * modules.yy (view): set currentSyntaxContainer (viewDeclaration): use varNameList, typeDot (viewBadType, viewTypeDot, viewTypeList, viewType): deleted (viewVarNameList, viewVarNameList): deleted (viewEndOpMap): use typeList and typeName * top.yy: added variable oldSyntaxContainer * modules.yy (module): set currentSyntaxContainer (varNameList): use currentSyntaxContainer (badType): use currentSyntaxContainer (typeName): use currentSyntaxContainer (fromSpec): use typeList and typeName (fromTypeList): deleted (fromType): deleted (renaming): save, set and restore currentSyntaxContainer * top.yy: added variable currentSyntaxContainer * view.hh (User): declaration for addType2() becomes addType() * view.cc (addType2): becomes addType() * renaming.cc (addVarDecl): added (addType): updated * renaming.hh (class Renaming): derive from SyntaxContainer (class Renaming): added decl for addVarDecl(); updated decl for addType() * preModule.hh (User): derive from SyntaxContainer * syntaxContainer.hh: created * modules.yy (viewDeclaration): added syntax for variable declarations (viewVarNameList, viewBadType, viewTypeDot, viewTypeDot): added * view.cc (addVarDecl): added stub (addType2): added stub * view.hh (User): added decls for addVarDecl() and addType2() * doParse.cc (parseSentence): fix longstanding bug where we were testing firstBad against nrTokens rather than begin + nrTokens * view.cc (addOpTermMapping): implemented (evaluate): parse op->term mapping bubbles (evaluate): make sure we parse destination term into the correct component * view.hh (User): added struct BubblePair, struct OpTermMapping, typedef OpTermList, typedef OpTermMap; added data members opTermList and opTermMap 2005-06-06 Steven Eker * lexer.ll: deleted KW_TERM * view.hh (User): updated decl for addOpTermMapping(); deleted decl for addOpTargetTerm() * view.cc (addOpTermMapping): updated stub (addOpTargetTerm): deleted stub * top.yy: deleted decl for KW_TERM * modules.yy (viewFromBubble): deleted (viewDeclaration): use tokensBarColonTo (viewEndOpMap): rewritten (tokenBarTerm): deleted; removed all mention of KW_TERM * token.hh (class Token): added decl for peelParens() * token.cc (peelParens): added * modules.yy (viewTypeList): was viewFromTypeList (viewType): was viewFromType (tokenBarDot, endToken, tokenBarCommaLeft, sortToken, identifier): added KW_TERM (inert): removed KW_TERM (tokenBarColonTo): added KW_TERM (tokenBarTerm): added (viewFromBubble): set parenFlag 2005-06-03 Steven Eker * view.cc (addOpTermMapping): added stub (addOpTargetTerm): added stub * view.hh (User): added decls for addOpTermMapping() and addOpTargetTerm() * modules.yy (inert): added KW_TERM * lexer.ll: added KW_TERM * top.yy: added decl for KW_TERM * modules.yy (viewFromType): added (viewFromTypeList): added (viewEndOpMap): added (view): dont use currentRenaming = CV trick (viewFromBubble): added (viewDeclaration): rewritten to use viewFromBubble and viewEndOpMap 2005-06-02 Steven Eker * importTranslation.hh (class ImportTranslation): added decl for makeTranslatedTerm() * importTranslation.cc (makeTranslatedTerm): added stub ===================================Maude86b=========================================== 2005-04-29 Steven Eker * main.cc (main): added -no-advise flag (printHelp): mention -no-advise flag 2005-04-27 Steven Eker * moduleCache.cc (makeSummation): don't put parens around name (makeRenamedCopy): put parens around module arg if it is a summation (makeInstatiation): put parens around module arg if it is a renaming * visibleModule.cc (VisibleModule): pass TEXT to ImportModule() * importModule.cc (ImportModule): init origin from argument * renameModule.cc (makeRenamedCopy): pass RENAMING to ImportModule() * parameterization.cc (makeParameterCopy): pass PARAMETER to ImportModule() (makeInstantiation): pass INSTANTIATION to ImportModule() * moduleCache.cc (makeSummation): pass ImportModule::SUMMATION to ImportModule() * importModule.hh (User): added data member origin (getOrigin): added (User): update decl for ctor * importModule.cc (ImportModule): init origin to TEXT * importModule.hh (User): added enum Origin * renameModule.cc (makeRenamedCopy): comment out code to copy nrBoundParameters; Assert that nrBoundParameters == 0 * parameterization.cc (instantiateBoundParameters): comment out code for handling renaming case; add Assert() to check that our original arguments and base module exist * import.cc (makeModule): don't allow renaming of modules with bound parameters * importModule.hh (getNrBoundParameters): added 2005-04-26 Steven Eker * prelude.maude: do renaming on LIST{TAO-SET} in SORTABLE-LIST 2005-04-25 Steven Eker * parameterization.cc (makeInstantiation): added DebugAdvisory() for rebinding case (makeInstantiation): rewrote code that generates instantiations for imports so that it can handle imports that share both free and bound parameters (instantiateBoundParameters): added DebugAdvisory() for bound parameters that escape during the construction of a new foundation (instantiateBoundParameters): rewrote code that generates new instantiations of foundations so that it rebinds escaped parameters * importModule.hh (User): updated decl of instantiateBoundParameters() and make it private * parameterization.cc (instantiateBoundParameters): keep track of escaped parameters (makeInstantiation): check for escaped parameters from imports and generate rebinding instantiations if needed 2005-04-21 Steven Eker * parameterization.cc (makeInstantiation): generate extra argument lists for sorts parameterized by parameter instantiated by theory-view (makeInstantiation): added assert to check for free parameters in instance of imported module 2005-04-20 Steven Eker * parameterization.cc (instantiateBoundParameters): added (makeInstantiation): save arguments if we have bound parameters; use instantiateBoundParameters() rather than ModuleCache::makeInstatiation() to handle imports with bound parameters (makeInstantiation): simplified and reorganized, now that we never have to instantiate bound parameters (instantiateBoundParameters): rewritten for a first crude attempt at handling renamed modules * importModule.hh (User): added data members viewArgs, paramArgs (User): added decl for instantiateBoundParameters() 2005-04-19 Steven Eker * mixfixModule.cc (findSymbol): use new firstSymbols convention * entry.cc (addOpDeclaration): use new firstSymbols convention * mixfixModule.hh (CommonTokens): deleted data member symbolNames; data member firstSymbols becomes an IntMap * moduleDatabase.cc (setOmodInclude): substract() -> erase() * moduleDatabase.hh (class ModuleDatabase): added typedef ImportSet (class ModuleDatabase): defaultOmodIncludes becomes an ImportSet * bufferPrint.cc (printDotSort, printVarSort, printSort): AUX_PARAMETERIZED_SORT -> AUX_STRUCTURED_SORT * mixfixParser.cc (makeTerm): AUX_PARAMETERIZED_SORT -> AUX_STRUCTURED_SORT * quotedIdentifierSymbol.cc (determineSort): AUX_PARAMETERIZED_SORT -> AUX_STRUCTURED_SORT * makeGrammar.cc (makeComponentProductions) (makeParameterizedSortProductions): AUX_PARAMETERIZED_SORT -> AUX_STRUCTURED_SORT * parameterization.cc (makeInstantiation): AUX_PARAMETERIZED_SORT -> AUX_STRUCTURED_SORT * token.hh (class Token): AUX_PARAMETERIZED_SORT -> AUX_STRUCTURED_SORT * auxProperty.cc (computeAuxProperty, sortName) (splitParameterizedSort, splitParameterList): AUX_PARAMETERIZED_SORT -> AUX_STRUCTURED_SORT * renaming.cc (printRenaming): use sortName for printing sort mappings (printRenamingType): use sortName * visibleModule.cc (showModule): print parameters * importModule.hh (getFreeParameterName): added * command.cc (showModule): print parameters 2005-04-18 Steven Eker * command.cc (showModule): use printSortTokenVector() (2 places) * preModule.hh (User): added decl for printSortTokenVector() * command.cc (showModule): use sortName() on sort and subsort tokens (operator<<): PreModule::Type& version; use sortName() (printSortTokenVector): added * prettyPrint.cc (operator<<): (Sort* version) simplified; no longer check PRINT_MIXFIX flag * view.cc (evaluate): use sortName() in error message about missing sort * import.cc (makeModule): use getFreeParameterTheory() rather than getParameterTheory() in 2 of 3 places to fix bug in the case there are bound parameters * importModule.hh (getFreeParameterTheory): added * parameterization.cc (makeParameterCopy): moved here from renameModule.cc (makeInstantiation): moved here from renameModule.cc (makeInstantiation): allow promotion from fmod to mod if a view has a system module as a target 2005-04-14 Steven Eker * banner.cc (printBanner): update copyright notice to 2005 * prelude.maude: changed prec and added format for _,_ in MAP; changed prec for _,_ in META-TERM ===================================Maude86a=========================================== 2005-04-13 Steven Eker * modules.yy (parameters): fixed value bug that is picked up by bison on darwin but not by bison on linux * process.cc (processSorts): avoid using name() for redecl'd sort (getSort): avoid using name() for undecl'd sort * renameModule.cc (localSort2): use sortName() * renaming.cc (makeCanonicalName): use sortName() * prettyPrint.cc (operator<<): Sort* version: use sortName() * auxProperty.cc (sortName): added * token.hh (class Token): added decl for sortName() * prelude.maude: added occurs op to LIST; added many standard views; changed the way split works in an attempt to get stable sort if incomparability happens to be transitive; added LIST*, SET*, MAP 2005-04-12 Steven Eker * prelude.maude: added append() operator to LIST * import.cc (makeModule): don't allow modules with parameters to be summed (processImports): don't allow modules with free parameters to be imported * importModule.hh (getNrParameters): added (getParameterTheory): use getNrParameters() * renameModule.cc (makeRenamedCopy): rewritten to handle parameters correctly * prelude.maude: added SET, moved COUNTER 2005-04-11 Steven Eker * prelude.maude: added TAO-SET, LIST and SORTABLE-LIST * importModule.hh (User): added decl for finishCopy() * renameModule.cc (makeInstantiation): rewritten to maintain a parameter map for parameter names in sorts that need to be mapped - this allows use to handle $ prefixing properly (makeInstantiation): avoid generating identity sort mappings when parameter X is instantiated by parameter X (makeInstantiation): avoid added identity sort mappings in the theory view case (finishCopy): added (makeInstantiation): use finishCopy() (makeParameterCopy): use finishCopy() (makeRenamedCopy): use finishCopy() * importModule.hh (User): added typedef ParameterMap * prelude.maude: give an explicit format for the _=[_]_ operator 2005-04-06 Steven Eker * renameModule.cc (makeInstantiation): fix argument indexing * importModule.hh (getNrFreeParameters): missing return (why didn't g++ catch this?) * renameModule.cc (makeInstantiation): added advisory for parameter clash (makeInstantiation): resolve parameter clashes by prefixing $ on free parameter name * moduleCache.cc (makeInstatiation): changed naming convention for parameters instantiated by parameters * renameModule.cc (makeInstantiation): only instantiate free parmeters OR bound parameters; copy bound parameters if we are not instantiating them (makeInstantiation): fixed bug: passing parameterArgs rather than names to makeInstatiation() for instantiating parameterized imports (makeInstantiation): added Assert()s for number of arguments (makeInstantiation): fixed bug where we were checking if findParameterIndex() returned != NONe rather than == NONE * importModule.cc (ImportModule): clear nrBoundParameters * importModule.hh (getParameterTheory): update Assert() * import.cc (makeModule): use getNrFreeParameters() * importModule.hh (getNrParameters): becomes getNrFreeParameters() * renameModule.cc (makeInstantiation): keep track of number of bound parameters * importModule.cc (deepSelfDestruct): comment out parameterTheories code * renameModule.cc (makeInstantiation): split parameter and theory view cases into seperate loops * importModule.hh (User): added data member nrBoundParameters; commented out data member parameterTheories 2005-04-04 Steven Eker * modules.yy (view): clear currentRenaming at the end in order to avoid memory corruption on subsequent call to cleanUpModuleExpression() 2005-04-01 Steven Eker * prelude.maude: added fth TRIV 2005-03-29 Steven Eker * renameModule.cc (makeInstantiation): keep track of parameters from enclosing module that have been used so we can handle things like PAIR{X,X} without adding duplicate parameters 2005-03-28 Steven Eker * import.cc (makeModule): rewritten to check instantiation arguments rigorously and provide detailed warnings * importModule.cc (findParameterIndex): added (addParameter): use findParameterIndex() * preModule.hh (User): updated decl for makeModule() * import.cc (processImports): pass flatModule to makeModule() (makeModule): take and pass enclosingModule * renameModule.cc (makeInstantiation): don't replace parameter in a parameterized sort if it is instantiated by a parameter form an enclosing module (localSort2): addded more info to Assert() (makeInstantiation): crude hack to make sure that paramaterized sorts coming from an imported parameterized module have their parameters replaced (makeInstantiation): do correct replacement of a parameter in a parameterized sort if it is instantiated by a parameter form an enclosing module 2005-03-25 Steven Eker * moduleCache.cc (makeInstatiation): rewrote name generation code * renameModule.cc (makeInstantiation): handle parameters instantiated by parameters from an enclosing module * import.cc (makeModule): gross hack to generate a vector for parameterArgs * importModule.hh (User): updated decl for makeInstatiation() * moduleCache.hh (User): updated decl for makeInstatiation() * moduleCache.cc (makeInstatiation): accept and pass parameterArgs * renameModule.cc (makeInstantiation): make instantiations of our parameterized imports rather than merely importing them (makeInstantiation): accept and pass parameterArgs 2005-03-23 Steven Eker * renameModule.cc: added handling for "theory views" (makeInstantiation): don't replace parameters in a parameterized sort that got instantiated by a "theory view" * auxProperty.cc (joinParameterList): fixed doubled { bug * renameModule.cc (makeInstantiation): added crude first attempt at parameterized sorts * token.hh (class Token): added decls for splitParameterList() and joinParameterList() * auxProperty.cc (joinParameterList): added (splitParameterList): added * import.cc (makeModule): check that the number of arguments matches the number of parameters in instantiation case; and check that parameter theories agree with from theories * view.hh (getToModule): added * importModule.hh (getParameterTheory): added (getNrParameters): added 2005-03-22 Steven Eker * renameModule.cc (makeInstantiation): fix bad use of renameSort() (makeInstantiation): only import modules that aren't parameters into copy * view.cc (evaluate): set status to GOOD if we pass all the checks * moduleCache.hh (User): added decl for makeInstatiation() * moduleCache.cc (makeInstatiation): added * import.cc (makeModule): first crude attempt at handling instantiation * importModule.hh (User): added decl for makeInstantiation() * renameModule.cc (makeInstantiation): added * view.hh (getToModule): added * view.cc (showView): use printRenaming() (showView): print final .\n * renaming.hh (class Renaming): added decls for printRenamingType() and printRenaming() * renaming.cc (printRenaming): added (operator<<): use printRenaming (printRenamingType): turn into member function * view.cc (showView): added * view.hh (isComplete): added * modules.yy (view): use setCurrentView(), CV (viewDeclaration): use CV * interpreter.cc (Interpreter): clear currentView * top.yy: added macro CV; delete variable currentView * view.hh (User): added decls for isComplete(), showView() * commands.yy (command): added "show view {name} ." command * interpreter.hh (endif): added decl for showView() * interpreter.cc (setCurrentView): added (complex version) (showView): added * interpreter.hh (setCurrentView): added (simple version) * interpreter.cc (makeClean): discard incomplete view * interpreter.hh (endif): added decls for getCurrentView(), setCurrentView() (*2) (getCurrentView): added (endif): added data member currentView * commands.yy (command): added "show views ." command * top.yy: declare KW_VIEWS * lexer.ll: added KW_VIEWS 2005-03-21 Steven Eker * modules.yy (view): call insertView() * interpreter.hh (endif): derive from ViewDatabase * mixfix.hh: added class ModuleDatabase and class ViewDatabase * viewDatabase.cc: created * viewDatabase.hh (class ViewDatabase): created * top.yy: added decl for sortDot * modules.yy (sortDot): added (viewDeclaration): use sortDot to allow overparsing for view sort mappings * view.cc (evaluate): added code to check for existence of polymorphic operators * modules.yy (viewDeclaration): clear bubble before viewToOpName (viewToOpName): allow single token operator names (viewToOpName): deleted (viewDeclaration): use endStatement in place of viewToOpName * view.cc (evaluate): added code to do basic operator existence check 2005-03-18 Steven Eker * moduleExpression.cc (deepSelfDestruct): rewritten to handle INSTANTIATION case (operator<<): parenthsize syntactically legal but semantically invalid module expressions correctly to avoid generating unparsable nonsense from users mistakes * moduleExpression.hh (getArguments): added * moduleExpression.cc (operator<<): handle INSTANTIATION case * import.cc (makeModule): warning for INSTANTIATION case * moduleExpression.cc (ModuleExpression): (instantiation version) added * moduleExpression.hh (class ModuleExpression): added INSTANTIATION to enum Type (class ModuleExpression): added decl for instantiation ctor (getModule): allow for instantiation (class ModuleExpression): added arguments data member * modules.yy (moduleExpr3): added (moduleExpr): use moduleExpr3 (argList): added * view.cc (evaluate): added code to check kinds and subsort relations * view.hh (User): added enum Status and data member status; added decl for evaluate() (User): added decl for dtor * view.cc (View): set status to INITIAL (regretToInform): set status to UNKNOWN (View): added dtor (regretToInform): self destruct all calculated stuff (finishView): use evaluate() (evaluate): added 2005-03-17 Steven Eker * view.hh (User): don't derive from BadFlag - a view should not become irredeemably bad * entity.cc (addUser): turned the Assert() for "already added user" into a DebugAdvisory() since it's possible for a module or view to use a module or view multiple times or in multiple ways (removeUser): turned the Assert() for "missing user" into DebugAdvisory() since if we add a user multiple times we may well remove the user that number of times * view.cc (regretToInform): added (View): init fromTheory, toModule (regretToInform): handle the case where fromTheory == toModule * view.hh (User): derive from Entity::User (User): added decl for regretToInform(); * entity.cc (removeUser): add entity name to debugging message if it is an ImportModule * entity.hh (class Entity): added decl for dummyToAllowDynamicCasts() if we are debugging * entity.cc (removeUser): fancier debugging messages * preModule.cc (regretToInform): removed removeUser() hack * moduleCache.cc (regretToInform): removed removeUser() hack * entity.hh (class Entity): moved definition of UserLt here * entity.cc (UserLt): added (addUser): use insert() rather than push_back() (removeUser): rewritten using set operations (informUsers): rewritten to be robust in the face of not knowing whether a call to regretToInform() will remove any particular user * entity.hh (class Entity): added struct UserLt and typedef UserSet; deleted typedef UserList; users becomes a UserSet 2005-03-16 Steven Eker * entity.cc (informUsers): 2nd attempt at fixing iterator invalidation bug * moduleCache.cc (regretToInform): call removeUser() * preModule.cc (regretToInform): call removeUser() * entity.cc (informUsers): fix nasty iterator invalidation bug * importModule.cc (ImportModule): Parent -> Entity::User * renameModule.cc (makeRenamedCopy, makeParameterCopy): dependentModules.append() -> addUser() * visibleModule.cc (VisibleModule): Parent -> Entity::User * visibleModule.hh (class VisibleModule): Parent -> Entity::User * preModule.cc (regretToInform): now takes Entity* * preModule.hh (User): derive from Entity::User rather than ImportModule::Parent; update decl for regretToInform() * moduleCache.hh (Parent): derive from Entity::User rather than ImportModule::Parent; update decl for regretToInform() * moduleCache.cc (destructUnusedModules): hasUsers() in place of hasDependents() (regretToInform): need to cast doomedEntity * importModule.cc (addImport): addUser() in place of dependentModules.append() (addParameter): addUser() in place of dependentModules.append() (deepSelfDestruct): removeUser() in place of removeDependent() (deepSelfDestruct): use informUsers() in place of much special purpose code() (regretToInform): added (removeDependent): deleted * importModule.hh (hasDependents): deleted (User): added decl for regretToInform() * entity.hh (hasUsers): added * importModule.hh (User): derive from Entity and Entity::User (User): deleted class Parent, updated ctor decl (User): deleted data members parent and dependentModules (User): deleted decl for removeDependent() * mixfix.hh: added class Entity * entity.cc: created * entity.hh: created * view.cc (finishView): evaluate from and to parts; check that from part is a theory * view.hh (class View): added data members fromTheory, toModule (class View) derive from BadFlag 2005-03-15 Steven Eker * view.cc (finishView): added stub * view.hh (class View): added decl for finishView() * modules.yy (viewToOpName): added (viewDeclaration): use viewToOpName to fix shift/reduce conflict and allow overparsing * top.yy: declare KW_VIEW to have type yyToken * lexer.ll: use RETURN() for KW_VIEW * modules.yy (view): add calls to fileTable; reset lexer mode at the end * top.yy: added currentView * modules.yy (view): add semantics (viewDeclaration): add op mappings * view.cc: created * mixfix.hh: added class View * view.hh: created 2005-03-11 Steven Eker * mixfixModule.hh (CommonTokens): added decks for printDotSort() and printVarSort() * bufferPrint.cc (prettyPrint): use printDotSort() (printDotSort): added (printVarSort): added (handleVariable): use printVarSort() * mixfixModule.hh (CommonTokens): updated decls for handleVariable(), printKind(); added decl for printSort() * bufferPrint.cc (printKind): take printFlags argument (handleVariable): take printFlags and pass it to printKind() (prettyPrint): pass printFlags to handleVariable() (printSort): added (printKind): use printSort() 2005-03-10 Steven Eker * prettyPrint.cc (operator<<): (Sort* version) only print parameterized sorts as multitoken if PRINT_MIXFIX flag is set * visibleModule.cc (showPolymorphAttributes): don't use operator<< for sorts in op-hooks (showPolymorphAttributes): handle the case that sorts in an op-hook might be kinds (showAttributes): don't use operator<< for sorts in op-hooks * mixfixModule.cc (nonTerminal): (Sort* version) fix potential rather than actual bug in that we were passing TERM_TYPE rather than type (in all current uses, type is bound to TERM_TYPE) * doParse.cc (getParserStats): pass back correct value for nrNonterminals now that iter & oft variable nonterminals are allocated on demand * makeGrammar.cc (makeParameterizedSortProductions): use GARBAGE as initial map entry (makeSymbolProductions): use GARBAGE as initial map entry * prettyPrint.cc (operator<<): (Sort* version) be recursive in the kind case (operator<<): (Sort* version) handle parameterized sorts 2005-03-09 Steven Eker * mixfixParser.cc (makeTerm): changed Assert() to allow for parameterized sorts in MAKE_VARIABLE case * makeGrammar.cc (makeComponentProductions): add syntax for otf variables of parameterized sorts; update syntax for otf variables of non parameterized sorts that happen to be the lead token of a parameterized sort (makeSpecialProductions): take leadTokens into account for the CONTAINS_COLON case (makeParameterizedSortProductions): fixed nasty bug where we were using iterSymbols instead of leadTokens (makeComponentProductions): use gatherAny rather than emptyGather where we have a nonterminal * mixfixModule.hh (CommonTokens): added decl for makeParameterizedSortProductions() * makeGrammar.cc (makeParameterizedSortProductions): added (makeGrammar): call makeParameterizedSortProductions() * mixfixModule.hh (CommonTokens): added data member leadTokens * makeGrammar.cc (makeSymbolProductions): handle the case where we've already seen an iter symbol with the same name * mixfixModule.hh (CommonTokens): deletd decl for iterSymbolNonTerminal() (CommonTokens): typedef IntMap; * mixfixModule.cc (iterSymbolNonTerminal): deleted * entry.cc (addOpDeclaration): don't update iterSymbols * makeGrammar.cc (makeSymbolProductions): use new iterSymbols together with newNonTerminal() (makeSpecialProductions): use new iterSymbols semantics (2 places) * mixfixModule.hh (CommonTokens): iterSymbols changed from IntSet to map * makeGrammar.cc (makeGrammar): initialize nextNonTerminal; don't use iterSymbols * mixfixModule.hh (CommonTokens): added decl for newNonTerminal() * mixfixModule.cc (newNonTerminal): added * mixfixModule.hh (findIterSymbolIndex): deleted (CommonTokens): added data member nextNonTerminal 2005-03-08 Steven Eker * makeGrammar.cc (makeSpecialProductions): use new insertIterSymbolTerminal() convention * mixfixParser.hh (class MixfixParser): updated decl for insertIterSymbolTerminal() * mixfixParser.cc (insertIterSymbolTerminal): use iterSymbolNameCode rather than iterSymbolIndex; no need to resize iterSymbolTerminals (translateSpecialToken): use new definition of iterSymbolTerminals * mixfixParser.hh (class MixfixParser): updated decl for insertVariableTerminal() (class MixfixParser): added typedef IntMap; change iterSymbolTerminals from Vector to IntMap * mixfixParser.cc (insertVariableTerminal): use sortNameCode rather than sortIndex (MixfixParser): don't initialize variableTerminals (translateSpecialToken): use map rather than Vector; look up sortNameCode directly rather than sortIndex * makeGrammar.cc (makeComponentProductions): pass sortNameCode rather than sortIndex to insertVariableTerminal() * mixfixParser.hh (class MixfixParser): change variableTerminals from Vector to map * token.hh (class Token): fix decl for skipSortName() * auxProperty.cc (skipSortName): parameterized arg needs to be passed by reference * makeGrammar.cc (makeComponentProductions): insert productions for multitoken versions of parameterized sorts (makeComponentProductions): removed comment - sortIndex is actually used in MixfixParser::getSort() * token.hh (class Token): added decl for splitParameterizedSort() * auxProperty.cc (splitParameterizedSort): added * token.cc (splitKind): use clear() 2005-03-07 Steven Eker * token.hh (class Token): updated decl for skipSortName() * token.cc (splitKind): use new skipSortName * auxProperty.cc (skipSortName): rewritten to take account of parameterized sorts and moved here (computeAuxProperty): rewritten to take account of parameterized sorts and moved here * token.cc (computeAuxProperty): handle AUX_PARAMETERIZED_SORT * quotedIdentifierSymbol.cc (determineSort): handle AUX_PARAMETERIZED_SORT * token.hh (class Token): added AUX_PARAMETERIZED_SORT 2005-02-28 Steven Eker * modules.yy (sortName): rewritten to fix a bunch of symmetric reduce/reduce conflicts 2005-02-25 Steven Eker * top.yy: added fragClear(), fragStore(), fragments * modules.yy (sortNameFrags): added (sortNameFrag): added (sortName): rewritten * top.yy: add back sortToken * modules.yy (sortName): recursive definition * top.yy: sortToken -> sortName * modules.yy: type -> typeName, sortToken -> sortName, sortTokens -> sortNames, sortTokenList -> sortNameList 2005-02-24 Steven Eker * modules.yy (startKeyword): added KW_ENDV (inert): added KW_FROM (midKeyword): moved KW_IS to inert (endToken, tokenBarEqual, tokenBarIf, tokenBarColon) (tokenBarColonTo): removed KW_IS * lexer.ll: added KW_VIEW, KW_FROM, KW_ENDV * top.yy (item): added view; added KW_VIEW, KW_FROM, KW_ENDV * modules.yy (view, viewDecList, viewDeclaration): added 2005-02-23 Steven Eker * renameModule.cc (makeParameterCopy): first attempt at label renaming (makeParameterCopy): do local stuff first and imported stuff second since with our naive approach will could get dup label mappings which will safely be ignored by addSortAndLabelMappings() * makeGrammar.cc (makeComponentProductions): use find() on bubbleComponents (2 places) (makePolymorphProductions): use find() on bubbleComponents * mixfixModule.hh (CommonTokens): bubbleComponents becomes a set 2005-02-22 Steven Eker * makeGrammar.cc (makeLabelProductions): use potentialLabels * mixfixModule.hh (insertLabels): becomes insertPotentialLabels(); take const set& (CommonTokens): IntSet labels becomes set potentialLabels * process.cc (process): use insertPotentialLabels() and potentialLabels * preModule.cc (addStatement): use potentialLabels * preModule.hh (Parent): IntSet labels becomes set potentialLabels 2005-02-18 Steven Eker * import.cc (processImports): use makeParameterCopy() * importModule.cc (addParameter): store parameterTheory in importModules rather than parameterTheories * moduleCache.hh (Parent): added decl for makeParameterCopy() * moduleCache.cc (makeParameterCopy): added * token.hh (class Token): added declaration for parameterRename() * token.cc (parameterRename): added * renaming.cc (addSortAndLabelMappings): added * renaming.hh (class Renaming): added decl for addSortAndLabelMappings() * renameModule.cc (makeParameterCopy): added 2005-02-15 Steven Eker * import.cc (processImports): handle module expression for parameter theory * preModule.hh (Parent): updated decl for addParameter() (Parent): updated struct Parameter * preModule.cc (addParameter): take module expression * modules.yy (parameter): allow parameters to be module expressions 2005-02-10 Steven Eker * importModule.cc (deepSelfDestruct): use FOR_EACH_CONST() on importedModules; handle parameters * modules.yy (module): need to set current module before we parse parameters so that parameters get added to the correct module * import.cc (processImports): use FOR_EACH_CONST() in explicity import code (processImports): handle parameters * modules.yy (parameter): call addParameter() * preModule.hh (Parent): added decl for addParameter() (Parent): added data member parameters * preModule.cc (addParameter): added * preModule.hh (Parent): added struct Parameter * importModule.hh (class ImportModule): added decl for addParameter() * mixfixModule.hh (canHaveAsParameter): added * importModule.cc (addParameter): added * importModule.hh (class ImportModule): added data members parameterNames and parameterTheories * importModule.cc (addImport): simplified condition 2005-02-08 Steven Eker * lexer.ll (id): recognize :: { } tokens * top.yy: declare inert, '{', '}', KW_COLON2 * modules.yy (parameters): added parameter syntax (inert): added (identifier): use inert (tokenBarDot): use inert (endToken): use inert (tokenBarColonTo, tokenBarCommaLeft): use inert * import.cc (processImports): no automatic imports for theories 2005-01-19 Steven Eker * mixfixModule.hh (CommonTokens): deleted static data member concealed and decl for concealSymbols() * dagNodePrint.cc (prettyPrint): use concealedSymbol() * interpreter.hh (endif): added decl for concealedSymbol() * interpreter.cc (concealedSymbol): added * prettyPrint.cc (concealSymbols): deleted * userLevelRewritingContext.hh (class UserLevelRewritingContext): deleted decls for selectSymbols(), excludeModules(), selectBreakSymbols(); deleted static data members selected, excluded, breakSymbols * interpreter.hh (traceId, excludedModule): added * userLevelRewritingContext.cc (excludeModules, selectSymbols): deleted (dontTrace): use excludedModule and traceId instead of excluded and selected * interpreter.hh (breakId): added * interact.cc (selectBreakSymbols): deleted (handleDebug): use breakId() instead of breakSymbols * interpreter.hh (printConceal, traceExclude, breakSelect) (traceSelect): rewritten, moved here (endif): added decl for updateSet() * interpreter.cc (updateSet): added * interpreter.hh (endif): added data members traceIds, breakIds, excludedModules, concealedSymbols * userLevelRewritingContext.cc (dontTrace): update testing of excluded, selected * interact.cc (selectBreakSymbols): rewritten * userLevelRewritingContext.cc (selectSymbols): rewritten (excludeModules): rewritten * interact.cc (handleDebug): update testing of breakSymbols * userLevelRewritingContext.cc: selected, breakSymbols changed from IntSet to set * userLevelRewritingContext.hh (class UserLevelRewritingContext): selected, excluded, breakSymbols changed from IntSet to set (class UserLevelRewritingContext): updated decls for selectSymbols(), excludeModules(), selectBreakSymbols() * interpreter.cc (printConceal, traceExclude, breakSelect) (traceSelect): clear() replaces makeEmpty() * interpreter.hh (endif): selected changed from IntSet to set 2005-01-18 Steven Eker * userLevelRewritingContext.cc (tracePreScApplication) (tracePreRuleRewrite, tracePreEqRewrite): support TRACE_BODY option * interpreter.hh (endif): added TRACE_REWRITE and TRACE_BODY to DEFAULT_FLAGS * userLevelRewritingContext.cc (tracePreScApplication) (tracePostRuleRewrite, tracePreRuleRewrite, tracePostEqRewrite) (tracePreEqRewrite): implement TRACE_REWRITE option * trial.cc (traceBeginRuleTrial): use getFlag() rather than traceRuleFlag, traceSubstitutionFlag (traceBeginScTrial): use getFlag() rather than traceScFlag, traceSubstitutionFlag (traceEndFragment): use getFlag() rather than traceSubstitutionFlag * userLevelRewritingContext.cc (tracePreRuleRewrite) (tracePreScApplication): use getFlag() rather than traceSubstitutionFlag * trial.cc (traceBeginEqTrial): use getFlag() rather than traceEqFlag (traceBeginEqTrial): use getFlag() rather than traceSubstitutionFlag * userLevelRewritingContext.cc: deleted defs for trace flags below * userLevelRewritingContext.hh (class UserLevelRewritingContext): deleted static members traceConditionFlag, traceWholeFlag, traceSubstitutionFlag, traceSelectFlag, traceScFlag, traceEqFlag, traceRuleFlag (setTraceConditionFlag, setTraceWholeFlag) (setTraceSubstitutionFlag, setTraceSelectFlag, setTraceScFlag) (setTraceEqFlag, setTraceRuleFlag): deleted * userLevelRewritingContext.cc (dontTrace): use getFlag() rather than traceSelectFlag (tracePreEqRewrite): use getFlag() rather than traceEqFlag (tracePostEqRewrite): use getFlag() rather than traceWholeFlag (tracePreEqRewrite): use getFlag() rather than traceWholeFlag (tracePreRuleRewrite): use getFlag() rather than traceRuleFlag (tracePreRuleRewrite): use getFlag() rather than traceWholeFlag (tracePostRuleRewrite): use getFlag() rather than traceWholeFlag (tracePreScApplication): use getFlag() rather than traceScFlag (tracePreScApplication): use getFlag() rather than traceWholeFlag (tracePreEqRewrite): use getFlag() rather than traceSubstitutionFlag (makeSubcontext): use getFlag() rather than traceConditionFlag 2005-01-17 Steven Eker * interpreter.hh (endif): added TRACE_REWRITE and TRACE_BODY to enum Flags * top.yy: declare traceOption and KW_BODY; delete decl for KW_CONTEXT * lexer.ll: added KW_BODY; deleted KW_CONTEXT * commands.yy (command): use traceOption (traceOption): added; include syntax for set trace rewrite and set trace body * mixfixModule.hh (CommonTokens): deleted decls for 7 setPrint*() functions and the commented out functions themselves 2005-01-07 Steven Eker * prelude.maude: added rat print option 2005-01-06 Steven Eker * prelude.maude: added print option hooks 2005-01-05 Steven Eker * prelude.maude: added PrintOptions; metaPrettyPrint() now takes PrintOptionSet arg; backward compatibility metaPrettyPrint() added * interpreter.hh (endif): renumbered enum PrintFlags * main.cc (main): use setPrintFlag() instead of setPrintMixfix() * mixfixModule.hh (CommonTokens): updated decls for printTokens(), printTails() and printPrefixName() * bufferPrint.cc (printTokens): use printFlags instead of printFormat (printPrefixName, printTails): use printFlags instead of printFormat (printTokens): added printFlags arg (printTails): added printFlags arg (printPrefixName): added printFlags arg (prettyPrint): pass printFlags to printTokens(), printTails() (handleIter): pass printFlags to printPrefixName() (prettyPrint): pass printFlags to printPrefixName() * prettyPrint.cc (printVariable): use getPrintFlag() instead of printWithAliases * bufferPrint.cc (prettyPrint): use printFlags instead of printMixfix, printWithParens, printFlat * mixfixModule.hh (setPrintMixfix, setPrintWithParens) (setPrintWithAliases, setPrintFlat, setPrintGraph) (setPrintConceal, setPrintFormat): deleted * prettyPrint.cc: deleted static print* variables (operator<<): use getPrintFlag() in place of printGraph (printTokens): use getPrintFlag() in place of printFormat (printPrefixName): use getPrintFlag() in place of printFormat (printTails): use getPrintFlag() in place of printFormat * mixfixModule.hh (CommonTokens): deleted static data members printMixfix, printWithParens, printWithAliases, printFlat, printGraph, printConceal, printFormat * dagNodePrint.cc (prettyPrint): use getPrintFlag() in place of printMixfix, printWithParens, printFlat, printConceal * termPrint.cc (prettyPrint): use getPrintFlag() in place of printMixfix, printWithParens, printFlat * top.yy: added yyPrintFlag added decl for printOption * commands.yy (command): use setPrintFlag() for 3 print cases (printOption): added (command): combine all print options using printOption and setPrintFlag() * bufferPrint.cc (bufferPrint): handle printFlags arg * mixfixModule.hh (CommonTokens): updated buffer print op decls * bufferPrint.cc (handleIter): handle printFlags arg (handleMinus): handle printFlags arg (handleDivision): handle printFlags arg (prettyPrint): pass printFlags arg to handleIter(), handleMinus(), handleDivision() (prettyPrint): take printFlags arg * dagNodePrint.cc (computeColor, handleIter, handleMinus) (handleDivision, prettyPrint): use getPrintFlag() * termPrint.cc (computeColor, handleIter, handleMinus) (handleDivision): use getPrintFlag() * interpreter.hh (getPrintFlag): added * prettyPrint.cc (operator<<): use getPrintFlag() * interpreter.cc (Interpreter): init printFlags * interpreter.hh (endif): added decl for setPrintFlag() * interpreter.cc (setPrintFlag): added * interpreter.hh (endif): added enum PrintFlags; moved print flags here (endif): added data member printFlags (getPrintFlags): added 2005-01-04 Steven Eker * loopMode.cc (printBubble): print unknown tokens of the form \c with naively rather than skipping them altogther - this at least handles _\/_ pretty printed in mixfix mode correctly ===================================Maude86=========================================== 2004-12-23 Steven Eker * execute.cc (eRewrite): call clearInterrupt() after eventLoop() exits with an interrupt * userLevelRewritingContext.hh (class UserLevelRewritingContext): added decl for clearInterrupt() * interact.cc (clearInterrupt): added 2004-12-22 Steven Eker * prelude.maude: added portal <> operator; made Portal a subsort of Configuration * socket.maude: removed Nat args from receive message; allowing specification of min and max number of bytes we will deal with seems more trouble than its worth removed protocol family arg from createClientTcpSocket and createServerTcpSocket; it seems unlikely we will support anything other than IPv4 for the immediate future and we can always rewrite outgoing messages for backwards compatibity if we go to a more general interface added reason arg to closedSocket message since sometimes we will want to know if a socket closed naturally or because of a fatal error 2004-12-21 Steven Eker * socket.maude: createServerTcpSocket now takes a backlog length; acceptedClientMsg now passes back a client IP address * execute.cc (eRewrite): call root() to force the virtual dag to be concretized before doing another fairRewrite() 2004-12-20 Steven Eker * execute.cc (eRewrite): call eventLoop() 2004-12-15 Steven Eker * commands.yy (command): fixed nasty bug with optDebug KW_EREWRITE where we were failing to initialize number2 to NONE * execute.cc (eRewrite): call generateErewrite() rather than generateFrewrite() 2004-12-09 Steven Eker * prelude.maude: added _&_ : Nat Int -> Nat since anding with a nat will remove any high order 1s 2004-12-08 Steven Eker * number-sorts.maude: created * visibleModule.cc (showPolymorphAttributes): handle metadata * renameModule.cc (donateOps2): handle metadata in polymorphs * process.cc (processOps): pass metadata to addPolymorph() * mixfixModule.hh (CommonTokens): updated addPolymorph() decl (getPolymorphMetadata): added * entry.cc (addPolymorph): take and handle metadata arg * mixfixModule.hh (CommonTokens): added metadata field to struct Polymorph * renameModule.cc (donateOps2): copy metadata * command.cc (printAttributes): handle metadata 2004-12-07 Steven Eker * visibleModule.hh (class VisibleModule): updated decl for showAttributes() * visibleModule.cc (showAttributes): take declIndex rather than decl; handle metadata (showDecls): new showAttributes() convention * entry.cc (addOpDeclaration): store metadata * ops.cc (setMetadata): check that metadata is actually a string * modules.yy (attrKeyword2): added KW_METADATA * lexer.ll (ID_MODE): added metadata * top.yy: added KW_METADATA * preModule.hh (Parent): added decl for setMetadata() * ops.cc (setMetadata): added * modules.yy (attribute): allow metadata in operator attributes * preModule.cc (OpDef): initialize metadata to NONE * preModule.hh (Parent): added metadata field to struct OpDef * renameModule.cc (donateOps2): pass dummy metadata arg to addOpDeclaration() * process.cc (processOps): pass metadata arg to addOpDeclaration() * mixfixModule.hh (CommonTokens): updated decl for addOpDeclaration() * entry.cc (addOpDeclaration): added metadata arg * metadataStore.cc (insertMetadata): added opdecl version (getMetadata): added opdecl version * metadataStore.hh (class MetadataStore): rewritten to handle symbol/opdecls * prelude.maude: fixed 3 missing ctors ===================================Maude85a=========================================== 2004-12-06 Steven Eker * loopMode.cc (doLoop): check AUTO_CLEAR_RULES before calling resetRules() 2004-12-02 Steven Eker * prelude.maude: lift idempotence equation to TypeListSet combined kind sets with sort sets and type sets deleted kindSetSymbol and emptyKindSetSymbol op hooks added EmptyTypeSet to avoid the issue of whether none belongs to SortSet or KindSet use ditto for TermList ctor 2004-12-01 Steven Eker * prelude.maude: added TypeListSets, maximalAritySet; change prec of _;_ : SortSet SortSet-> SortSetto 43 to avoid interaction with __ : TypeList TypeList -> TypeList * execute.cc (rewrite): make calling resetRules() conditional on AUTO_CLEAR_RULES (fRewrite, eRewrite): make calling resetRules() conditional on AUTO_CLEAR_RULES * commands.yy (command): set clear counters -> set clear rls * top.yy: removed KW_COUNTERS * lexer.ll: removed counters; rule|rules synonym for rls * interpreter.hh (endif): AUTO_CLEAR_COUNTERS -> AUTO_CLEAR_RULES 2004-11-30 Steven Eker * top.yy: added KW_COUNTERS * lexer.ll: added counters * commands.yy (command): added set clear counters on/off * interpreter.hh (endif): added AUTO_CLEAR_COUNTERS to enum Flags; added to DEFAULT_FLAGS 2004-11-22 Steven Eker * prelude.maude: added format attr to trace ctor 2004-11-17 Steven Eker * prelude.maude: added trace ctors; added metaSearchPath() 2004-11-16 Steven Eker * profileModule.cc: output a percentage for number of rewrites * commands.yy (command): added show search path labels . * interpreter.hh (endif): added decl for showSearchPathLabels() * lexer.ll: recognize label in initial mode * search.cc (showSearchPathLabels): added 2004-10-14 Steven Eker * diophantine.maude: diophantineSystemSolve -> natSystemSolve 2004-09-16 Steven Eker * dagNodePrint.cc (prettyPrint): added handling for null pointer in debugging case 2004-09-14 Steven Eker * entry.cc (newFancySymbol): handle MATRIX_OP_SYMBOL * specialSymbolTypes.cc (MACRO): added MatrixOpSymbol * symbolType.hh (class SymbolType): added MATRIX_OP_SYMBOL 2004-09-10 Steven Eker * prelude.maude: glbSorts now defined on types 2004-09-09 Steven Eker * prelude.maude: made notFound and unbounded into ctors; added TypeSet 2004-08-26 Steven Eker * prelude.maude: added extra decl for _/_ to solve ctor problem 2004-08-25 Steven Eker * prelude.maude: added PosRat to RAT to solve assoc problems with max op decls 2004-08-24 Steven Eker * prelude.maude: added min and max to NAT, INT and RAT ===================================Maude85=========================================== 2004-08-03 Steven Eker * commands.yy (command): handle erewrite * interpreter.hh (endif): added decls for eRewrite() and eRewriteCont() * maudemlBuffer.hh (class MaudemlBuffer): added decl for generateErewrite() * maudemlBuffer.cc (generateErewrite): added * execute.cc (eRewrite): added (eRewriteCont): added 2004-07-12 Steven Eker * entry.cc (newFancySymbol): handle SocketManagerSymbol rather than SystemSymbol * symbolType.hh (class SymbolType): SYSTEM_SYMBOL replaced by SOCKET_MANAGER_SYMBOL * specialSymbolTypes.cc (MACRO): SystemSymbol replaced by SocketManagerSymbol 2004-07-09 Steven Eker * entry.cc (newFancySymbol): handle SYSTEM_SYMBOL * specialSymbolTypes.cc (MACRO): added SYSTEM_SYMBOL * symbolType.hh (class SymbolType): added SYSTEM_SYMBOL 2004-06-29 Steven Eker * prelude.maude: make module selectors work on theories ===================================Maude84d=========================================== 2004-06-15 Steven Eker * renaming.cc (typeMatch): fixed bug where we weren't catching the case where the arities differed 2004-06-03 Steven Eker * entry.cc (newFancySymbol): added case for CounterSymbol * specialSymbolTypes.cc (MACRO): added CounterSymbol * symbolType.hh (class SymbolType): added COUNTER_SYMBOL 2004-06-02 Steven Eker * main.cc (main): handle -random-seed= flag (printHelp): added lines for -random-seed= and -xml-log= flags * entry.cc (newFancySymbol): added case for RandomOpSymbol * specialSymbolTypes.cc (MACRO): added RandomOpSymbol * symbolType.hh (class SymbolType): added RANDOM_OP_SYMBOL 2004-06-01 Steven Eker * prelude.maude: added fmod RANDOM ===================================Maude84c=========================================== 2004-05-25 Steven Eker * import.cc (getModule): don't fall into mutually recursive import warning * fixUp.cc (fixUpSymbols): added check for missing identity * ops.cc (setIdentity): check for missing identity (setIdentity): unmade change - parser never calls this function with an empty bubble! 2004-05-24 Steven Eker * mixfixModule.cc (fixUpBubbleSpec): pass qidSymbol as a Symbol* and check it * fixUp.cc (fixUpSymbols): use new fixUpBubbleSpec() convention * mixfixModule.hh (CommonTokens): updated decl for fixUpBubbleSpec() * fixUp.cc (fixUpSymbols): use dynamic_cast<> instead of safeCast() * mixfixModule.cc (fixUpBubbleSpec): check for missing symbols 2004-05-19 Steven Eker * fixUp.cc (fixUpSymbols): use safeCast() (findHookSymbol): rewritten to avoid running of the end of the Vector if the hook has bad syntax * entry.cc (addOpDeclaration): added warnings for ad hoc overloaded operators that have same domain but different ranges 2004-05-18 Steven Eker * prelude.maude: changed definition of ['FOO] so that it works with theories * importModule.hh (class ImportModule): updated decl for * importModule.cc (addImport): pass lineNumber by value addImport() 2004-05-17 Steven Eker * commands.yy (importMode): ModuleDatabase -> ImportModule (3 places) * moduleCache.cc (makeSummation): use new addImport() conventions * import.cc (processImports): rewritten to use new addImport() conventions * moduleDatabase.cc (setAutoImport): ImportMode now belongs to ImportModule * moduleDatabase.hh (class ModuleDatabase): deleted enum ImportMode * importModule.hh (class ImportModule): added enum ImportMode; updated decl for addImport() * importModule.cc (addImport): take mode and lineNumber; do importation checks here * prelude.maude: added thSymbol and fthSymbol * import.cc (processImports): added warnings for violation of importation rules by automatic imports * modules.yy (declaration): use moduleExprDot (moduleExprDot): added (moduleExprDot): added (mapping): use sortToken rather than token for sort mappings; use token rather than identifier for label mappings 2004-05-12 Steven Eker * top.yy: added decl for endsInDot * modules.yy (endStatement): added (endsInDot): added (endToken): redefined to eliminate ENDS_IN_DOT (endTokens): endsInDot replaces '.' (2 places) (tokenBarDot): redefined to eliminate ENDS_IN_DOT (endStatement): use dot * top.yy: deleted decl for tokenBarLt * modules.yy (subsortList): added (listBarLt): deleted (listBarDot): deleted (typeAttr): added (domainRangeAttr): use typeAttr (typeDot): added (badType): added (typeAttr): use badType (tokenBarLt): deleted * token.cc (dropChar): added * modules.yy (identifier): added ENDS_IN_DOT (tokenBarColonTo): added ENDS_IN_DOT (tokenBarCommaLeft): added ENDS_IN_DOT (sortToken): rule out ENDS_IN_DOT and , (sortTokenList): added (dot): added to try to recover from missing space * lexer.ll (id): added decl for ENDS_IN_DOT * top.yy: added ENDS_IN_DOT 2004-05-11 Steven Eker * import.cc (processImports): check to see that theories are only imported using the including mode (processImports): check that module types are legal for import * mixfixModule.hh (CommonTokens): added enum Bits (isTheory): added (canImport): added * preModule.cc (addStatement): check for rules in functional theory/module * preModule.hh (Parent): added decl for compatible() * preModule.cc (PreModule): init startTokenCode (compatible): added (finishModule): use compatible() * preModule.hh (Parent): added data member startTokenCode * modules.yy (startModule): added * lexer.ll: seperated out omod * top.yy: put KW_OMOD back added nonterminal startModule * preModule.cc (PreModule): handle start token * commonTokens.cc (CommonTokens): added th fth mod fmod omod obj endth endfth endm endfm endom endo jbo * commonTokens.hh (class CommonTokens): added th fth mod fmod omod obj endth endfth endm endfm endom endo jbo * preModule.hh (Parent): updated decls for ctor and finishModule() * modules.yy (startKeyword2): deleted KW_ENDTH KW_ENDFTH KW_ENDFM KW_ENDOM * top.yy: deleted KW_ENDTH KW_ENDFTH KW_ENDFM KW_ENDOM KW_TH KW_FTH KW_FMOD KW_OMOD * lexer.ll: merged th fth fmod omod into mod; merged endth endfth endfm into endm * modules.yy: deleted productions for endfm notEndfm endm notEndm endom notEndom (module): simplified to a single production (oDecList): deleted (fDecList): deleted (declaration): merged with fDeclaration and oDeclaration * top.yy: deleted nonterminals notEndfm notEndm notEndom * modules.yy (startKeyword2): added KW_ENDTH KW_ENDFTH * top.yy: added KW_TH KW_FTH KW_ENDTH KW_ENDFTH * lexer.ll (id): added keywords th fth endth endfth 2004-05-07 Steven Eker * ops.cc (setIdentity): added check for empty identity; didn't fix our proble though since we never get here with an empy identity; reverted change ===================================Maude84b=========================================== 2004-04-27 Steven Eker * command.cc (showModule): use moduleEndString() * visibleModule.cc (showModule): use moduleEndString() * mixfixModule.cc (moduleEndString): added * mixfixModule.hh (CommonTokens): added decl for moduleEndString() * moduleCache.cc (showCreatedModules): use moduleTypeString() * moduleDatabase.cc (showNamedModules): use moduleTypeString() * command.cc (showModule): use moduleTypeString() * mixfixModule.cc (moduleTypeString): added * mixfixModule.hh (CommonTokens): added FUNCTIONAL_THEORY and SYSTEM_THEORY to enum ModuleType (CommonTokens): added decl for moduleTypeString() * import.cc (processImports): use new autoImports * preModule.hh (Parent): data member autoImports becomes a ModuleDatabase::ImportMap (getAutoImport): becomes getAutoImports() (getNrAutoImports): deleted * preModule.cc (finishModule): use getAutoImports() in place of getIncludes() * moduleDatabase.cc (setAutoImport): use autoImports instead of defaultIncludes * moduleDatabase.hh (class ModuleDatabase): added ImportMap typedef; getIncludes() becomes getAutoImports(); data member defaultIncludes becomes autoImports (getAutoImports): replaces getIncludes() * prelude.maude: set include BOOL becomes set protect BOOL * moduleDatabase.cc (setInclude): becomes setAutoImport() * moduleDatabase.hh (class ModuleDatabase): setInclude() becomes setAutoImport() * top.yy: added yyImportMode to union * commands.yy (importMode): added (command): use setAutoImport() * moduleDatabase.hh (class ModuleDatabase): added enum ImportMode * top.yy: added tokens KW_PROTECT and KW_EXTEND * lexer.ll: added keywords protect and extend ===================================Maude84a=========================================== 2004-03-10 Steven Eker * modules.yy (fDeclaration): fixed nasty bug where we were not popping the final module expression from the stack with the result that syntax errors caused the deletion of live module expressions via cleanUpModuleExpression() with resulting memory corruption 2004-03-03 Steven Eker * prelude.maude: strats for _and-then_ and _or-else_ become (1 0) 2004-02-27 Steven Eker * main.cc (main): added -no-banner option (printHelp): added -no-banner option * interpreter.cc: removed extern ModuleCache moduleCache hack * import.cc: deleted moduleCache global variable (processImports): use interpreter instead of moduleCache * interpreter.cc (showModules): don't use moduleCache * interpreter.hh (endif): inherit from ModuleCache * interpreter.cc (showModules): use showCreatedModules() * moduleCache.cc (showModules): becomes showCreatedModules() * moduleCache.hh (Parent): showModules() -> showCreatedModules() * mixfixModule.cc (copyPolymorph): deleted * mixfixModule.hh (CommonTokens): deleted commented out decl for copyPolymorph() ===================================Maude84=========================================== 2004-02-25 Steven Eker * commands.yy (command): remove show all modules . as it conflicts with show all . * interpreter.cc (showModules): use showNamedModules() * moduleDatabase.cc (showModules): renamed to showNamedModules() * moduleDatabase.hh (class ModuleDatabase): showModules() -> showNamedModules() * commands.yy (command): added commands show modules . and show all modules . * top.yy: added KW_MODULES * lexer.ll: added keyword modules * moduleDatabase.hh (class ModuleDatabase): added decl for showModules() * moduleDatabase.cc (showModules): added * preModule.hh (getModuleType): added * moduleCache.hh (Parent): adde decl for showModules * moduleCache.cc (showModules): added * interpreter.hh (endif): added decl for showModules() * interpreter.cc (showModules): added 2004-02-24 Steven Eker * modules.yy (fDeclaration): added call to cleanUpModuleExpression() * top.yy: added forward decl for cleanUpModuleExpression() * bottom.yy (cleanUpModuleExpression): added * moduleCache.cc (makeRenamedCopy): fixed bug where we were forgetting to delete the canonical renaming that we made if the module we wanted was in cache * top.yy: use explicit stack to hold module expressions; updated %union; fixed + vs * prec bug * modules.yy (moduleExpr): rewritten so that module expression pointers are stored on an explicit stack rather than the bison stack; this allows us to free memory after an error (renaming): same trick as above (fDeclaration): new module expression conventions * mixfixModule.cc (findSymbol): check that true and false are in the same connected component before trying to make a sort test * makeGrammar.cc (makeBoolProductions): check that true and false are in the same connected component before adding syntax for sort tests * entry.cc (addOpDeclaration): check for duplicate SystemTrue and SystemFalse symbols 2004-02-23 Steven Eker * fixUp.cc (fixUpSymbols): check for identity clash between dupicate polymorphic operators * entry.cc (addPolymorph): check for dups * mixfixModule.hh (CommonTokens): added decl for domainAndRangeMatch() (CommonTokens): updated decl for findPolymorphIndex() * mixfixModule.cc (findPolymorphIndex): handle domain and range argument (domainAndRangeMatch): added * renameModule.cc (fixUpDonatedOps2): rewrote polymorph fixup code to handle distinct polymorphs with the same name 2004-02-20 Steven Eker * import.cc (processImports): call destructUnusedModules() * moduleCache.cc: (destructUnusedModules): added * importModule.hh (hasDependents): added * moduleCache.hh (Parent): added decl for destructUnusedModules() 2004-02-17 Steven Eker * prelude.maude: added metasyntax and hooks for summation and renaming * moduleExpression.cc (deepSelfDestruct): can't assume module member is valid unless we are a renaming * preModule.hh (Parent): deleted decl for importModule() * import.cc (processImports): use getModule() (makeModule): rewritten using getModule() (importModule): deleted * moduleExpression.cc (ModuleExpression): store module name as a token (operator<<): new getModuleName() semantics * moduleExpression.hh (class ModuleExpression): moduleName becomes a token in order to have line number (getModuleName): updated return type * import.cc (getModule): added * moduleCache.cc (makeSummation): compute correct module type using join() * mixfixModule.hh (join): added 2004-02-13 Steven Eker * importModule.hh (class ImportModule): added decl for dtor * importModule.cc (~ImportModule): added * preModule.cc (PreModule): use deepSelfDestruct() * moduleExpression.cc (deepSelfDestruct): added * moduleExpression.hh (class ModuleExpression): added decl for deepSelfDestruct() * import.cc (makeModule): handle list<> for summations * moduleExpression.cc (ModuleExpression): handle flattening of nested summations (operator<<): handle list<> for summations * moduleExpression.hh (class ModuleExpression): store summations as a list<> 2004-02-11 Steven Eker * import.cc (makeModule): use ModuleCache version of makeRenamedCopy() * importModule.hh (class ImportModule): deleted decls for makeSummation() and moduleCompare() * renameModule.cc (makeSummation): deleted (moduleCompare): deleted * importModule.hh (class ImportModule): updated decl for makeRenamedCopy() * renameModule.cc (makeRenamedCopy): rewritten using new conventions * mixfix.hh: added class ModuleCache * import.cc (makeModule): use ModuleCache version of makeSummation() * moduleCache.hh: created * moduleCache.cc: created * renameModule.cc (makeRenamedCopy): copy becomes one of our dependent modules * importModule.cc (deepSelfDestruct): remove self from dependent modules of baseModule 2004-02-09 Steven Eker * import.cc (makeModule): check for recursive imports * preModule.hh (Parent): added decl for makeModule() * import.cc (processImports): rewritten to use makeModule() (makeModule): added 2004-02-06 Steven Eker * importModule.hh (class ImportModule): added decls for makeSummation() and moduleCompare() * renameModule.cc (makeSummation): added (moduleCompare): added 2004-02-05 Steven Eker * renameModule.cc (makeRenamedCopy): crude first attempt at caching * userLevelRewritingContext.cc (printSubstitution): added DebugAdvisory() * renaming.cc (makeCanonicalName): handle attributes * renaming.hh (class Renaming): added decl for makeTypeName() * renaming.cc (makeTypeName): added * renameModule.cc (makeRenamedCopy): new makeCanonicalName() convention * renaming.cc (makeCanonicalVersion): fix same bug in polymorph case (makeCanonicalName): handle labels and op mappings * renameModule.cc (makeRenamedCopy): use makeCanonicalName() * renaming.cc (makeCanonicalName): added * renaming.hh (class Renaming): added decl for makeCanonicalName() * renaming.cc (makeCanonicalVersion): fix bug where we could potentially miss an operator renaming by using upper_bound() and lower_bound() instead of end() and find() 2004-02-04 Steven Eker * importModule.cc (donateStatements2): use translateLabel() * importTranslation.hh (class ImportTranslation): added decl for translateLabel() * importTranslation.cc (translateLabel): added * importModule.hh (getLabels): added * renaming.cc: handle labels * renameModule.cc (localStatementsComplete): moved here * importModule.cc (localStatementsComplete): handle labels and label renaming * importModule.hh (class ImportModule): added data member labels 2004-02-03 Steven Eker * importModule.cc (fixUpDonatedOps): use fixUpDonatedOps2() * importModule.hh (class ImportModule): fixUpRenamedOps() decl -> fixUpDonatedOps2() * renameModule.cc (localSort2): renamed from localSort() (localSort): added version that handles kinds (donateSorts2): use localSort2() (fixUpDonatedOps2): renamed from fixUpRenamedOps() (fixUpDonatedOps2): fix Vector copy bug (fixUpDonatedOps2): handle polymorphs in fully general way (makeRenamedCopy): use fixUpDonatedOps2() 2004-02-02 Steven Eker * importModule.cc (donateOps): use donateOps2() * importModule.hh (class ImportModule): decl for donateRenamedOps() becomes donateOps2() * renameModule.cc (donateRenamedOps): deleted renameTranslation local variable (donateRenamedOps): use localSort() (2 places) (donateRenamedOps): Warning for imports from multiple places without a common ancestor downgraded to an advisory (donateRenamedOps): fix nasty bug where we were accidentally copying Vector of symbol pointers (donateRenamedOps): renamed to donateOps2() (makeRenamedCopy): donateRenamedOps() -> donateOps2() * importModule.hh (class ImportModule): findSort() -> localSort() * renameModule.cc (donateRenamedStatements): deleted (findSort): renamed to localSort() (donateSorts2): findSort() -> localSort() * importModule.hh (class ImportModule): repaced decl for findSort() donateRenamedSorts() with donateSorts2(); added decl for (class ImportModule): deleted decl for donateRenamedStatements() * renameModule.cc (makeRenamedCopy): use donateSorts2() * importModule.cc (donateSorts): use donateSorts2() * renameModule.cc (makeRenamedCopy): don't call donateRenamedStatements() (donateRenamedSorts): becomes donateSorts2(); handle null renaming correctly; issue advisory rather than warning for dup sort (findSort): added * importTranslation.cc (ImportTranslation): use push(), take renaming argument (translate): rewrote all 3 versions so that we can handle imports of symbols into renamed modules for fixups * importTranslation.hh (class ImportTranslation): deleted data member importer; updated decl for ctor 2004-01-30 Steven Eker * importTranslation.hh (class ImportTranslation): added decl for static version of translate() * importTranslation.cc (translate): added static version * importModule.cc (donateStatements2): use ImportTranslation::push() * importTranslation.cc (ImportTranslation): no intialization for renamings (translate): use new definition for renamings * importTranslation.hh (push): added (class ImportTranslation): updated data member renamings; added data member targets; upated decl for ImportTranslation() 2004-01-29 Steven Eker * renameModule.cc (makeRenamedCopy): set canonicalRenaming and baseModule * importModule.cc (donateStatements): use donateStatements2() (ImportModule): initialize canonicalRenaming and baseModule * importModule.hh (class ImportModule): added decl for donateStatements2(); added data members canonicalRenaming and baseModule * importModule.cc (donateStatements2): added * renameModule.cc (fixUpRenamedOps): don't use firstPolymorphCopy (donateRenamedOps): don't set firstPolymorphCopy * importModule.hh (class ImportModule): deleted data member firstPolymorphCopy * importModule.cc (donateOps): don't set firstPolymorphCopy (fixUpDonatedOps): use findPolymorphIndex() rather than firstPolymorphCopy * mixfixModule.hh (CommonTokens): added decl for findPolymorphIndex() * mixfixModule.cc (findPolymorphIndex): added * mixfixModule.hh (findIterSymbolIndex): made const 2004-01-28 Steven Eker * importModule.hh (class ImportModule): deleted data member responsibleForFixUp * renameModule.cc (donateRenamedOps): don't initialize or fill out the responsibleForFixUp set (fixUpRenamedOps): rewritten to avoid needing the responsibleForFixUp set * importModule.cc (fixUpDonatedOps): rewritten to avoid needing the responsibleForFixUp set (donateOps): don't initialize or fill out the responsibleForFixUp set 2004-01-27 Steven Eker * renameModule.cc (donateRenamedOps): handle bubbles (fixUpRenamedOps): new copyFixUpBubbleSpec() convention * importModule.cc (donateOps): new copyBubbleSpec() convention (fixUpDonatedOps): new copyFixUpBubbleSpec() convention * mixfixModule.hh (CommonTokens): updated decls for copyBubbleSpec() and copyFixUpBubbleSpec() * mixfixModule.cc (copyFixUpBubbleSpec): rewritten with new semantics to allow incremental/multiple fixups (copyBubbleSpec): rewritten with new semantics; also fix a nasty bug where we were copying the bubble spec from the wrong module 2004-01-26 Steven Eker * renameModule.cc (donateRenamedOps): removed static stuff for cleanliness (fixUpRenamedOps): implemented * renaming.cc (makeCanonicalVersion): fixed bug where we had to test for whether we had already added a generic op renaming the wrong way around. * renameModule.cc (donateRenamedOps): handle polymorphs * renaming.hh (class Renaming): added decl for renamePolymorph() * renaming.cc (makeCanonicalVersion): handle polymorphs (renamePolymorph): added 2004-01-23 Steven Eker * renameModule.cc (donateRenamedOps): use assignFlags() (4 places) (donateRenamedOps): use gather.clear() * symbolType.hh (assignFlags): added 2003-12-23 Steven Eker * renameModule.cc (makeRenamedCopy): use makeCanonicalVersion() * renaming.hh (class Renaming): added decl for setType() * renaming.cc (setType): added * renaming.hh (class Renaming): added decl for makeCanonicalVersion() * renaming.cc (typeMatch): updated args (both versions) (addType): don't take kind arg (convertSortsToKinds): deleted (printRenamingType): don't check isKind() (makeCanonicalVersion): added * renaming.hh (class Renaming): updated decl for addType(); deleted decl for convertSortsToKinds(); delete struct Type (isKind): deleted (getTypeSorts): updated * modules.yy (fromType): use new addType() convention; don't use convertSortsToKinds() * renaming.hh (class Renaming): typeConflict() decls become typeMatch() * renaming.cc (addType): use new Type (typeConflict): becomes typeMatch() (both versions) (renameOp): use typeMatch() (printRenamingType): added (operator<<): use printRenamingType() * renaming.hh (class Renaming): updated struct Type; replaced decl for getTypeTokens() with getTypeSorts() (getTypeTokens): becomes getTypeSorts() 2003-12-19 Steven Eker * importTranslation.cc (ImportTranslation): handle renamings argument (translate): (sort version) handle renamings * importTranslation.hh (class ImportTranslation): updated decl for ctor, added data member renamings 2003-12-09 Steven Eker * importModule.hh (class ImportModule): added decls for donateRenamedSorts(), donateRenamedOps(), fixupRenamedOps(), donateRenamedStatements() * renameModule.cc (donateRenamedOps): added (fixupRenamedOps): added stub (donateRenamedStatements): added stub (makeRenamedCopy): call donateRenamedOps(), fixupRenamedOps() and donateRenamedStatements() * renaming.cc (renameLabel): added * renaming.hh (class Renaming): adeed decls for renameLabel(), renameOp() and both versions of typeConflict() * renaming.cc (addOpMapping): set index field (renameOp): added (typeConflict): added two versions * renaming.hh (class Renaming): added index field to struct OpMapping 2003-12-08 Steven Eker * renameModule.cc (donateRenamedSorts): added * importModule.hh (class ImportModule): added decl for donateRenamedSorts() * import.cc (processImports): quick hack to handle simple renaming * renaming.hh (class Renaming): added decl for renameSort() * renaming.cc (renameSort): added * importModule.hh (class ImportModule): added decl for makeRenamedCopy() * renameModule.cc: created 2003-12-01 Steven Eker * command.cc (printAttributes): use printGather() and printFormat() * renaming.cc (operator<<): handle attributes * preModule.hh (Parent): added decls for printGather() and printFormat() * command.cc (printGather): added (printFormat): added * renaming.cc (setPrec): don't set symbolType member (setGather): don't set symbolType member (setFormat): don't set symbolType member (setLatexMacro): don't set symbolType member (addOpMapping): initialize prec member to invalid value * renaming.hh (getPrec): added (getGather): added (getFormat): added (class Renaming): deleted symbolType member from struct OpMapping * renaming.cc (setPrec): implemented (setFormat): implemented (setLatexMacro): implemented (addSortMapping): handle line number (addLabelMapping): handle line number * ops.cc (setPrec): use getInt() * token.cc (getInt): added * token.hh (class Token): added decl for getInt() * renaming.cc (setGather): implemented 2003-11-24 Steven Eker * renaming.cc (convertSortsToKinds): added * renaming.hh (class Renaming): added decl forconvertSortsToKinds() * modules.yy (fromSpec): handle ~> semantics * token.hh (class Token): added decl for printTokens(); * token.cc (printTokens): added * renaming.hh (isKind): added (getTypeTokens): added (getNrTypes): added * renaming.cc (addType): added * renaming.hh (class Renaming): added data member lastOpMapping; added symbolType member to struct OpMapping (getOpFrom): added (getOpTo): added (class Renaming): added struct Type; added data member types to struct OpMapping * renaming.cc (operator<<): handle sort and label mappings * renaming.hh (getSortFrom): added (getSortTo): added (getLabelFrom): added (getLabelTo): aded * modules.yy (moduleExpr): use new ModuleExpression convention * renaming.cc (addSortMapping): rewritten (addLabelMapping): rewritten * renaming.hh (class Renaming): added data members sortMapIndex, labelMapIndex, opMapIndex (getNrSortMappings): added (getNrLabelMappings): added (getNrOpMappings): added * moduleExpression.hh (class ModuleExpression): updated decl for ModuleExpression() * moduleExpression.cc (ModuleExpression): take Token rather than int * modules.yy (fDeclaration): fix the bug that bubble gets reused for parsing identifiers in renamings * renaming.cc (operator<<): added * moduleExpression.cc (operator<<): handle summation and renaming 2003-11-20 Steven Eker * top.yy: added decls for tokenBarColonTo, tokenBarCommaLeft * modules.yy (mapping): added semantics for sort and label mappings (tokenBarColonTo): added (tokensBarColonTo): added (tokenBarCommaLeft): added (tokensBarCommaLeft): added (mapping): added semantics for op mappings * top.yy: added global variable current renaming * renaming.cc: created * renaming.hh: created ===================================Maude83a=========================================== 2003-11-12 Steven Eker * preModule.cc (PreModule): delete module expressions in imports 2003-11-11 Steven Eker * command.cc: added support for special and poly attributes 2003-11-10 Steven Eker * prelude.maude: added format attributes to meta hook ops * termPrint.cc (disambiguatorSort): added (prettyPrint): use suffix (suffix): use disambiguatorSort() 2003-11-07 Steven Eker * ops.cc (addHook): only set basic type if it is not STANDARD; this fixes the object level Bubble Exclude bug * mixfixModule.hh (CommonTokens): findBubbleSpecIndex() decl replaces findBubbleSpec() decl * mixfixModule.cc (copyFixUpBubbleSpec): use findBubbleSpecIndex() (findBubbleSpecIndex): was findBubbleSpec() (copyBubbleSpec): use findBubbleSpecIndex() (getDataAttachments): use findBubbleSpecIndex() (getSymbolAttachments): use findBubbleSpecIndex() * mixfixModule.hh (CommonTokens): updated decl for findBubbleSpec() * mixfixModule.cc (getSymbolAttachments): handle bubbles (getDataAttachments): handle bubbles (findBubbleSpec): made const * visibleModule.cc (showAttributes): use MixfixModule versions of getDataAttachments(), getSymbolAttachments(), getTermAttachments() * mixfixModule.cc (getDataAttachments): added (getSymbolAttachments): added (getTermAttachments): added * mixfixModule.hh (CommonTokens): added decls for getDataAttachments(), getSymbolAttachments(), getTermAttachments() * visibleModule.cc (showAttributes): use hasSpecial() rather than hasAttachments() (showPolymorphAttributes): use hasSpecial() rather than hasAttachments() * symbolType.hh (hasSpecial): added 2003-11-06 Steven Eker * mixfixModule.cc (getPolymorphDataAttachment): added (getPolymorphSymbolAttachment): added (getPolymorphTermAttachment): added * mixfixModule.hh (CommonTokens): added decls for getPolymorphDataAttachment(), getPolymorphSymbolAttachment(), getPolymorphTermAttachment() * visibleModule.cc: simplified using hookSort() (showPolymorphAttributes): handle attachments * mixfixModule.hh (hookSort): added * symbolType.hh (class SymbolType): reordered enum BasicTypes to make those that are instantiated with the special attribute contiguous * visibleModule.hh (class VisibleModule): updated showDecls() decl * visibleModule.cc (showOps): don't print internally created symbols, even in "all" case (showDecls): don't print internally created decls; take index rather than sort (showOps): new showDecls() convention 2003-11-05 Steven Eker * quotedIdentifierOpSymbol.cc (getDataAttachments): use CODE_CASE() * loopSymbol.cc (getDataAttachments): use APPEND_DATA() * visibleModule.cc (showAttributes): changed formatting of specials * loopSymbol.cc (getDataAttachments): added (getSymbolAttachments): added * quotedIdentifierOpSymbol.cc (getSymbolAttachments): call FreeSymbol::getSymbolAttachments() for cleaness * loopSymbol.hh (class LoopSymbol): added decls for getDataAttachments() and getSymbolAttachments() 2003-11-04 Steven Eker * visibleModule.cc (showDecls): use new showAttributes() calling convention * visibleModule.hh (class VisibleModule): updated decl for showAttributes() * visibleModule.cc (showAttributes): handle attachments; take OpDeclaration arg 2003-11-03 Steven Eker * quotedIdentifierOpSymbol.cc (eqRewrite): use safeCast() (getDataAttachments): added (getSymbolAttachments): added * quotedIdentifierOpSymbol.hh (class QuotedIdentifierOpSymbol): added decls for getDataAttachments() and getSymbolAttachments() * quotedIdentifierSymbol.cc (getDataAttachments): added * quotedIdentifierSymbol.hh (class QuotedIdentifierSymbol): added decl for getDataAttachments() 2003-10-29 Steven Eker * prelude.maude: added upOpDecls(), upImports() * preModule.hh (getNrAutoImports): added (getNrImports): added (getAutoImport): added (getImportMode): added (getImport): added 2003-10-28 Steven Eker * prelude.maude: added upSorts(), upSubsortDecls() * visibleModule.cc (showAttributes): code cleaning * mixfixModule.hh (getPolymorphPrec): added (getPolymorphGather): added (getPolymorphFormat): added * visibleModule.cc (showPolymorphAttributes): added handling for prec, gather and format * mixfixModule.hh (getPolymorphIdentity): added (getPolymorphStrategy): added (getPolymorphFrozen): added * visibleModule.cc (showPolymorphAttributes): added handling for identity, strategy and frozen 2003-10-27 Steven Eker * visibleModule.hh (class VisibleModule): added decl for showPolymorphAttributes() * visibleModule.cc (showModule): call showPolymorphs() (showPolymorphAttributes): added * interpreter.cc (showOps): call showPolymorphs() * mixfixModule.hh (getPolymorphName): added (getPolymorphDomainAndRange): added * visibleModule.hh (class VisibleModule): added decls for showPolymorphs() and showPolymorphDecl() * visibleModule.cc (showVars): rewritten using FOR_EACH_CONST() (showSummary): split symbols into user symbols and total symbols; print number of polymorphic operators (showPolymorphDecl): added (showPolymorphs): added * mixfixModule.cc (copyFixUpPolymorph): don't copy specialTerms (~MixfixModule): deepSelfDestruct() term hook terms rather than specialTerms * mixfixModule.hh (CommonTokens): deleted decls for fixUpPolymorph() (CommonTokens): deleted specialTerms and shareWithSymbol from struct Polymorph * entry.cc (addPolymorph): don't clear shareWithSymbol * mixfixModule.cc (fixUpPolymorph): deleted both versions (copyFixUpPolymorph): deleted support for shareWithSymbol (copyPolymorph): don't clear shareWithSymbol * importModule.hh (getNrImportedPolymorphs): added 2003-10-24 Steven Eker * mixfixModule.hh (getPolymorphType): added * mixfixModule.cc (instantiatePolymorph): no need to create Token from name (instantiatePolymorph): set symbol line number * entry.cc (addPolymorph): copy name Token * mixfixModule.hh (CommonTokens): made Polymorph name field into a Token 2003-10-23 Steven Eker * entry.cc (newFancySymbol): don't pass term args to EqualitySymbol() or BranchSymbol() (addPolymorph): set overloaded flags in symbolInfo.iflags 2003-10-22 Steven Eker * mixfixModule.cc (instantiatePolymorph): deep copy term hooks * fixUp.cc (fixUpSymbols): handle identities for polymorphs (fixUpSymbols): fixed warning messages for bad special * process.cc (processSorts): use lessThan from CommonTokens * fixUp.cc (findHookSymbol): use colon and partial from CommonTokens * commonTokens.hh (class CommonTokens): added lessThan and partial * commonTokens.cc (CommonTokens): added lessThan and partial 2003-10-20 Steven Eker * prelude.maude: added op poly : NatList -> Attr [ctor] and polySymbol hook * specialSymbolTypes.cc (MACRO): deleted UP_SYMBOL, DOWN_SYMBOL instantiations * symbolType.hh (class SymbolType): deleted UP_SYMBOL, DOWN_SYMBOL from enum BasicTypes 2003-10-17 Steven Eker * mixfixModule.cc (instantiatePolymorph): fixed bug where we were using idHooks purpose for attaching an opHook * prelude.maude: updated definitions of if_then_else_fi, upTerm and downTerm 2003-10-16 Steven Eker * fixUp.cc (fixUpSymbols): rewritten * preModule.hh (Parent): added decl for polymorph version of defaultFixUp() * fixUp.cc (defaultFixUp): added polymorph version * mixfixModule.cc (instantiatePolymorph): rewritten to use standardized method for polymorphs 2003-10-15 Steven Eker * entry.cc (addPolymorph): zero polymorph identity * mixfixModule.cc (addIdHookToPolymorph): added (addOpHookToPolymorph): added (addTermHookToPolymorph): added (copyFixUpPolymorph): copy identity and hooks (addIdentityToPolymorph): added (copyPolymorph): zero polymorph identity * mixfixModule.hh (CommonTokens): added structs IdHook, OpHook and TermHook (CommonTokens): added identity, idHooks, opHooks, termHooks to struct Polymorph * entry.cc (newFancySymbol): handle BRANCH_SYMBOL and EQUALITY_SYMBOL * symbolType.hh (hasAttachments): BRANCH_SYMBOL and EQUALITY_SYMBOL now are treated as having attachments * fixUp.cc (fixUpSymbols): check for polymorphs using POLY flag; reorganized 2003-10-14 Steven Eker * mixfixModule.cc (findSymbol): rewritten to handle polymorphs in a generic way and to be more picky about matching components (instantiatePolymorph): must not change original polymorph domainAndRange now that we rely on it to know which arguments are polymorphic - make a copy 2003-10-13 Steven Eker * process.cc (processOps): don't pass polyArgs to addPolymorph() * entry.cc (addPolymorph): don't take polyArgs argument * mixfixModule.hh (CommonTokens): removed polyArgs from struct Polymorph (CommonTokens): updated decl for addPolymorph() * mixfixModule.cc (copyPolymorph): use domainAndRange to decide how to copy sorts; copy frozen * makeGrammar.cc (makeVariableProductions): use new nonTerminal() (makeBoolProductions): use new nonTerminal() (makePolymorphProductions): rewritten to use new nonTerminal() and polyArgs (makePolymorphProductions): use domainAndRange instead of polyArgs * mixfixModule.cc (nonTerminal): added Sort* version * mixfixModule.hh (CommonTokens): added decl for Sort* version of nonTerminal() * entry.cc (addPolymorph): handle frozen and polyArgs atrguments * mixfixModule.hh (CommonTokens): updated decl for addPolymorph() (CommonTokens): added polyArgs and frozen to struct Polymorph * symbolType.hh (isPolymorph): deleted (isCreatedOnTheFly): don't use isPolymorph() * process.cc (checkOpTypes): rewritten using polyArgs (computeOpTypes): rewritten using polyArgs (processOps): don't use isPolymorph(); use new addPolymorph() convention * ops.cc (setLatexMacro): set LATEX flag 2003-10-10 Steven Eker * preModule.hh (Parent): added polyArgs to struct OpDef; added decl for setPoly() * ops.cc (setPoly): added * symbolType.hh (class SymbolType): added POLY to enum Flags * modules.yy (attrKeyword): added KW_POLY (attribute): added KW_POLY * top.yy: added decl for KW_POLY * lexer.ll (id): added keywords poly, polymorphic ===================================Maude83=========================================== 2003-10-09 Steven Eker * command.cc (printAttributes): need to check for DITTO in first if (printAttributes): fix spacing before [ 2003-10-08 Steven Eker * import.cc (processImports): handle struct Import * command.cc (showModule): handle struct Import * preModule.hh (Parent): updated decl for addImport() * preModule.cc (addImport): moved here; now handle mode * preModule.hh (Parent): added struct Import * moduleExpression.cc (operator<<): added * command.cc (printAttributes): handle format properly 2003-09-29 Steven Eker * mixfixModule.hh (CommonTokens): added decl for Symbol* version of fixUpPolymorph() * mixfixModule.cc (fixUpPolymorph): added Symbol* version * fixUp.cc (fixUpSymbols): handle UP_SYMBOL and DOWN_SYMBOL * makeGrammar.cc (makePolymorphProductions): handle UP_SYMBOL and DOWN_SYMBOL * mixfixModule.hh (CommonTokens): added shareWithSymbol to struct Polymorph * mixfixModule.cc (copyPolymorph): clear shareWithSymbol * entry.cc (addPolymorph): clear shareWithSymbol * mixfixModule.cc (findSymbol): handle UP_SYMBOL and DOWN_SYMBOL (instantiatePolymorph): handle UP_SYMBOL and DOWN_SYMBOL (copyFixUpPolymorph): handle shareWithSymbol (copyPolymorph): handle UP_SYMBOL and DOWN_SYMBOL * process.cc (checkOpTypes): handle UP_SYMBOL and DOWN_SYMBOL (computeOpTypes): handle UP_SYMBOL and DOWN_SYMBOL * symbolType.hh (isPolymorph): rewritten (isCreatedOnTheFly): rewritten * specialSymbolTypes.cc (MACRO): added UpSymbol and DownSymbol * symbolType.hh (class SymbolType): added UP_SYMBOL and DOWN_SYMBOL 2003-09-23 Steven Eker * interact.cc (handleDebug): check to see if pe is 0 before checking its label 2003-09-17 Steven Eker * termPrint.cc (prefix): deleted (this was commented out before) * mixfixModule.hh (CommonTokens): added decl for handleVariable() * bufferPrint.cc (handleVariable): added (prettyPrint): use handleVariable() * mixfixModule.hh (CommonTokens): added decl for printKind() * bufferPrint.cc (printKind): replaces printSort() (prettyPrint): use printKind in variable case 2003-09-15 Steven Eker * bufferPrint.cc (printSort): added 2003-09-09 Steven Eker * modules.yy (listBarDot): added (endTokens2): deleted (noTrailingDot2): deleted (oDeclaration): listBarDot replaces endTokens2 (3 places) 2003-09-08 Steven Eker * visibleModule.cc (showAttributes): print space after left/right when printing identity 2003-09-05 Steven Eker * command.cc (printAttributes): added (printOpDef): rewritten to use printAttributes( 2003-09-04 Steven Eker * mixfix.hh: added class Renaming * top.yy: added yyModuleExpression to union * modules.yy (fDeclaration): use moduleExpr * import.cc (processImports): quick hack to use ModuleExpression * preModule.hh (addImport): updated (Parent): imports is now a Vector * moduleExpression.cc: created * moduleExpression.hh: created * mixfix.hh: added class ModuleExpression 2003-09-03 Steven Eker * top.yy: added KW_TO, KW_LABEL, '+', '*' * lexer.ll: added KW_TO, KW_LABEL, '+', '*' * modules.yy (identifier): added KW_TO, KW_LABEL, '+', '*' 2003-08-20 Steven Eker * prettyPrint.cc (operator<<): added Assert() to check for null component (operator<<): decided to make sort print function bullet proof instead; it can now be called before connnected components are calculated and sort indices are assigned ===================================Maude82=========================================== 2003-07-22 Steven Eker * main.cc (printHelp): added (printVersion): added (main): added --help and --version flags * interact.cc (segmentationFaultHandler): use PACKAGE_BUGREPORT 2003-07-21 Steven Eker * quotedIdentifierDagNode.cc (compareArguments): use new internal ordering on quoted identifiers * quotedIdentifierTerm.cc (compareArguments): use new internal ordering on quoted identifiers (both versions) 2003-07-16 Steven Eker * token.hh: use ropeStuff.hh * entry.cc (addOpDeclaration): if we detect empty syntax for a single argument operator, clear PREC, GATHER and FORMAT flags and clear mixfix syntax to avoid infinite recursion in MSCP later on 2003-07-01 Steven Eker * banner.cc: #include ===================================Maude81=========================================== 2003-05-31 Steven Eker * interact.cc (segmentationFaultHandler): use system call rather than stream to output message since line wrapper can't be relied on * fixUp.cc (findHookSymbol): made slightly more robust in the case of a missing sort 2003-05-30 Steven Eker * maudemlBuffer.cc (generate): (Term* version) use variable q (generate): (DagNode* version) use variable q * lexerAux.cc: deleted SUNOS #ifdef 2003-05-28 Steven Eker * banner.cc: replaced LIBv3 #ifdef 2003-05-23 Steven Eker * importModule.cc (donateStatements): copy metadata (this fixes a bug) * prelude.maude: added config, object, message and nonexec ops to META-MODULE; removed frozen hack * mixfixParser.cc (makeStatementPart): use setNonexec() * prettyPrint.cc (printAttributes): handle nonexec * importModule.cc (donateStatements): copy nonexec status 2003-05-21 Steven Eker * execute.cc (fRewrite): call setObjectMode() * entry.cc (addOpDeclaration): don't fill out configSymbols * userLevelRewritingContext.cc (UserLevelRewritingContext): call ObjectSystemRewritingContext() (both versions) * userLevelRewritingContext.hh (class UserLevelRewritingContext): derive from ObjectSystemRewritingContext rather than RewritingContext * mixfixModule.cc (setConfigMode): deleted (closeSignature): reverted * mixfixModule.hh (CommonTokens): deleted data member configSymbols and decl for setConfigMode() - setting state info like this would play havoc with re-entrancy * execute.cc (fRewrite): call setConfigMode() * mixfixModule.cc (closeSignature): use configSymbols * mixfixModule.hh (CommonTokens): added data member configSymbols * mixfixModule.cc (setConfigMode): rewritten to use configSymbols * entry.cc (addOpDeclaration): put symbols with config attribute in configSymbols 2003-05-20 Steven Eker * mixfixModule.hh (CommonTokens): added decl for setConfigMode() * mixfixModule.cc (setConfigMode): added * entry.cc (addOpDeclaration): warn about operators that have both object and msg attributes or that have an object or msg attribute and no arguments 2003-05-05 Steven Eker * banner.cc: removed SUNOS and LIBv3 #ifdefs ===================================Maude80a=========================================== 2003-05-03 Steven Eker * prelude.maude: added 2003-05-01 Steven Eker * compiler.cc (makeBaseName): use ostringstream * quotedIdentifierOpSymbol.cc (eqRewrite): use ostringstream * quotedIdentifierDagNode.cc (overwriteWithClone): rewritten (makeClone): rewritten 2003-04-18 Steven Eker * loopSymbol.cc (extractQidList): use DagArgumentIterator 2003-04-09 Steven Eker * mixfixModule.hh (CommonTokens): updated many decls for color arg * termPrint.cc (computeColor): added (prefix): deleted (suffix): take color arg (handleIter): take color arg (handleMinus): take color arg (handleDivision): take color arg (handleFloat): take color arg (handleString): take color arg (handleQuotedIdentifier): take color arg (handleVariable): take color arg (prettyPrint): pass color arg to many functions 2003-04-07 Steven Eker * model-checker.maude: added => and <=> LTL operators ===================================Maude80=========================================== 2003-03-21 Steven Eker * execute.cc (reduce): added threshold search version 2003-03-18 Steven Eker * search.cc (search): fixed symmetric bug * match.cc (match): fixed bug where we were printing patternTerm when we printed the command even though this may have been invalidated by normalization 2003-02-26 Steven Eker * xmlBuffer.cc: removed #pragma (endElement): updated Assert() * xmlBuffer.hh: removed #pragma * visibleModule.cc: removed #pragma (showDecls): updated Assert() * visibleModule.hh: removed #pragma * userLevelRewritingContext.cc: removed #pragma (tracePostEqRewrite): updated Assert() (printSubstitution): updated Assert() * userLevelRewritingContext.hh: removed #pragma * token.cc: removed #pragma (codeToInt64): DebugAdvisoryCheck() -> DebugAdvisory() (codeToInt64): updated Assert() (codeToDouble): updated Assert() (bubbleToPrefixNameCode): updated Assert() (getRational): updated Assert() * token.hh: removed #pragma * symbolType.cc: removed #pragma * symbolType.hh: removed #pragma * quotedIdentifierTerm.cc: removed #pragma * quotedIdentifierTerm.hh: removed #pragma * quotedIdentifierSymbol.cc: removed #pragma * quotedIdentifierSymbol.hh: removed #pragma * quotedIdentifierOpSymbol.cc: removed #pragma (eqRewrite): updated Assert() * quotedIdentifierOpSymbol.hh: removed #pragma * quotedIdentifierDagNode.cc: removed #pragma * quotedIdentifierDagNode.hh: removed #pragma * profileModule.cc: removed #pragma * profileModule.hh: removed #pragma * process.cc (computeType): updated Assert()s * prettyPrint.cc (computeGraphStatus): updated Assert() * preModule.cc: removed #pragma (regretToInform): updated Assert() * preModule.hh: removed #pragma * ops.cc (convertSortsToKinds): updated Assert() * moduleDatabase.cc: removed #pragma * moduleDatabase.hh: removed #pragma * mixfixParser.cc: removed #pragma (parseSentence): updated DebugAdvisoryCheck() (parseSentence): updated Assert() (makeTerms): updated Assert() (insertStatement): updated Assert() (makeMatchCommand): updated Assert() (makeSearchCommand): updated Assert() (makeTerm): updated Assert()s * mixfixParser.hh: removed #pragma * mixfixModule.cc: removed #pragma (findSymbol): updated Assert() (computePrecAndGather): updated Assert()s * mixfixModule.hh: removed #pragma * metadataStore.cc: removed #pragma * metadataStore.hh: removed #pragma * maudemlBuffer.cc: removed #pragma * maudemlBuffer.hh: removed #pragma * loopSymbol.cc: removed #pragma * loopSymbol.hh: removed #pragma * interpreter.cc: removed #pragma * interpreter.hh: removed #pragma * importTranslation.cc: removed #pragma (translate): updated Assert() (both versions) * importTranslation.hh: removed #pragma * importModule.cc: removed #pragma (donateOps): updated Assert()s (fixUpDonatedOps): updated Assert()s * importModule.hh: removed #pragma * graphPrint.cc (graphCount): updated Assert()s * fileTable.cc: removed #pragma * fileTable.hh: removed #pragma * execute.cc (cont): fixed buggy IssueWarning() * entry.cc (addSort): updated Assert() (hasSameDomain): updated Assert()s (addOpDeclaration): updated Assert() * dagNodePrint.cc (computeColor): updated Assert() * compiler.cc: removed #pragma (makeExecutable): fixed buggy IssueWarning() * compiler.hh: removed #pragma * commonTokens.cc: removed #pragma * commonTokens.hh: removed #pragma ===================================Maude79=========================================== 2003-02-20 Steven Eker * interact.cc (segmentationFaultHandler): updated bug report address * entry.cc (addOpDeclaration): added WarningCheck for 1 arg ops with empty syntax * model-checker.maude: split off fmod SATISFACTION; use modelCheck for model checker * prelude.maude: NUMBER-CONVERSION -> CONVERSION 2003-02-19 Steven Eker * makeGrammar.cc (makeComplexProductions): use =>1 instead of => for one step rewriting * commonTokens.hh (class CommonTokens): added arrowOne * commonTokens.cc (CommonTokens): addedarrowOne * search.cc (search): use =>1 instead of => for one step rewriting ===================================Maude78=========================================== 2003-01-06 Steven Eker * main.cc (main): removed various commented out crap 2003-01-03 Steven Eker * lexerAux.cc (includeFile): save fakeNewline status (handleEof): restore fakeNewline status (cleanUpLexer): clear fakeNewline flag 2003-01-02 Steven Eker * lexerAux.cc (getInput): set result = YY_NULL if there are no more characters available from file (rather than , for portability). 2002-11-27 Steven Eker * main.cc (findPrelude): removed extraneous quote from IssueWarning() * banner.cc: fixed #include for LIBv3 2002-11-25 Steven Eker * interpreter.cc (setCurrentModule): removed default arg 2002-11-15 Steven Eker * entry.cc (addOpDeclaration): use new style IssueWarning()/WarningCheck()s (addVariableAlias): use new style WarningCheck() (newFancySymbol): use new style IssueWarning()s (addPolymorph): use new style IssueWarning()/WarningCheck()s * doParse.cc (parseTerm): use new style IssueWarning()s (parseStatement): use new style IssueWarning()s (parseMatchCommand): use new style IssueWarning()s (parseSearchCommand): use new style IssueWarning()s (parseSentence): use new style IssueWarning()s * moduleDatabase.cc (insertModule): use new style IssueAdvisory() * fixUp.cc (fixUpSymbols): use new style IssueWarning()/WarningCheck() * import.cc (processImports): use new style IssueWarning()/WarningCheck() (importModule): use new style IssueWarning()s * importModule.cc (donateSorts): use new style IssueWarning() (donateOps): use new style IssueWarning() * interact.cc (commandLoop): use new style IssueWarning() * interpreter.cc (setCurrentModule): use new style IssueWarning()s (makeClean): use new style IssueAdvisory() * loopMode.cc (contLoop2): use new style IssueWarning()s (contLoop): use new style IssueAdvisory()s * main.cc (findPrelude): use new style IssueWarning() (main): use new style IssueWarning() (findFile): use new style IssueWarning() * match.cc (match): use new style IssueWarning() * mixfixParser.cc (makeStatementPart): use new style WarningCheck()s * lexerAux.cc (includeFile): use new style IssueWarning()s * lexer.flex: use new style IssueWarning()s * bottom.y (yyerror): use new style IssueWarning() * modules.y: use new style IssueWarning()s * top.y: use new style IssueWarning()s * ops.cc (convertSortsToKinds): use new style IssueWarning() (setPrec): use new style IssueWarning() (setGather): use new style IssueWarning()s (setFormat): use new style IssueWarning()s (setFrozen): use new style IssueWarning()/WarningCheck()s (setStrat): use new style IssueWarning() * preModule.cc (getFlatModule): use new style IssueWarning() (getFlatSignature): use new style IssueAdvisory() * process.cc (process): use new style IssueWarning()s (processSorts): use new style IssueWarning()/WarningCheck() (getSort): use new style IssueWarning() * search.cc (search): use new style IssueWarning() (showSearchPath): use new style IssueWarning()s (showSearchGraph): use new style IssueWarning() 2002-11-14 Steven Eker * mixfixParser.cc (parseSentence): Assert() to check for bad error position being returned from MSCP * interpreter.cc (parse): use getFlatModule() rather than getFlatSignature() since we have now deferred sort table calculations until the module is flattened 2002-11-12 Steven Eker * dagNodePrint.cc (handleIter): only compute color info if PRINT_COLOR is set to avoid UMRs (prettyPrint): only compute color info if PRINT_COLOR is set to avoid UMRs 2002-11-11 Steven Eker * prelude.maude: added owise meta attribute * mixfixParser.cc (makeStatementPart): added line number to warnings * mixfixModule.hh (CommonTokens): updated decl for printAttributes() * prettyPrint.cc (printAttributes): handle owise * importModule.cc (donateStatements): pass owise flag to Equation() * mixfixParser.cc (makeAttributePart): handle MAKE_OWISE_ATTRIBUTE (makeStatementPart): pass owise flag to Equation() * mixfixParser.hh (class MixfixParser): added MAKE_OWISE_ATTRIBUTE to enum SemanticActions (class MixfixParser): added enum Flags (class MixfixParser): updated decls for makeAttributePart() and makeStatementPart() * makeGrammar.cc (makeAttributeProductions): added syntax for otherwise and owise * commonTokens.hh (class CommonTokens): added otherwise and owise * commonTokens.cc (CommonTokens): added otherwise and owise 2002-11-07 Steven Eker * lexerAux.cc (getInput): deleted commented out i/o code * userLevelRewritingContext.hh (class UserLevelRewritingContext): added decl for changePrompt() * interact.cc (changePrompt): added (handleDebug): call changePrompt() (setHandlers): call changePrompt(), setContPrompt() (commandLoop): deleted messy prompt setting code (setHandlers): deleted commented out SIGWINCH code * match.cc (doMatching): DagNode::okToCollectGarbage() -> MemoryCell::okToCollectGarbage() 2002-11-06 Steven Eker * bufferPrint.cc (handleFormat): use ansiEscapeSequences.cc * loopMode.cc (printBubble): use ansiEscapeSequences.cc * ops.cc (checkFormatString): use ansiEscapeSequences.cc * prettyPrint.cc (fancySpace): use ansiEscapeSequences.cc * ansiEscapeSequences.cc: added * ops.cc (checkFormatString): added 14 extra allow chars * prettyPrint.cc (fancySpace): added remaining 14 ANSI escape sequences 2002-11-04 Steven Eker * token.cc (fixUp): added * token.hh (class Token): added decl for fixUp() * lexer.flex: allow \ newline in stringContent; added FIX_UP macro; use it to fix up identifiers with \ newline in them 2002-10-22 Steven Eker * prelude.maude: added extra decl for _^_ in NAT, INT and RAT 2002-10-21 Steven Eker * commands.y: use MemoryCell::setShowGC() (2 places) * prelude.maude: corrected declaration for abs in RAT 2002-10-08 Steven Eker * entry.cc (newFancySymbol): check that iter symbols only have a single domain sort * ops.cc (setFrozen): handle case where list of arguments is empty; check for trying to set frozen attribute on a constant * modules.y: use setFrozen() even for case where there is no frozen list * visibleModule.cc (showAttributes): updated printout of frozen attribute * command.cc (printOpDef): updated printout of frozen attribute * preModule.hh (Parent): struct OpDef data member frozen is now a NatSet * ops.cc (setFrozen): frozen is now a NatSet; check for duplicate args * mixfixModule.hh (CommonTokens): updated decl for addOpDeclaration() * entry.cc (addOpDeclaration): new frozen handling * importModule.cc (donateOps): cleaned up frozen handling 2002-10-03 Steven Eker * command.cc (printOpDef): fix missing ( in frozen case 2002-10-02 Steven Eker * command.cc (printOpDef): handle frozen attribute with list of arg numbers * visibleModule.cc (showAttributes): handle frozen attribute with list of arg numbers * importModule.cc (donateOps): pass frozen arg to addOpDeclaration() * process.cc (processOps): pass frozen arg to addOpDeclaration() * mixfixModule.hh (CommonTokens): updated decl for addOpDeclaration() * entry.cc (addOpDeclaration): take and handle frozen arg * modules.y: added syntax for partially frozen attribute * ops.cc (setFrozen): added * preModule.hh (Parent): added data member frozen to struct OpDef (Parent): added decl for setFrozen() 2002-09-27 Steven Eker * modules.y: use KW_ convention for keywords * top.y: use KW_ convention for keywords * lexer.flex: use KW_ convention for keywords * interact.cc (setHandlers): don't call new_GetLine() or gl_trap_signal() * userLevelRewritingContext.hh (class UserLevelRewritingContext): deleted decls for getInput(), displayPrompt(), setAutoWrap() * interact.cc (commandLoop): don't call resetCursor() (setAutoWrap): deleted (displayPrompt): deleted (getInput): deleted (setInteractive): don't call displayPrompt() * main.cc (main): use ioManager.setAutoWrap() 2002-09-26 Steven Eker * lexerAux.cc (getInput): use ioManager.getInput() * main.cc (main): use ioManager.setCommandLineEditing(); added global variable ioManager * interact.cc (setHandlers): use gl_trap_signal() 2002-09-25 Steven Eker * interact.cc (setHandlers): added hack to init tecla (commandLoop): don't call displayPrompt() (setInteractive): don't call displayPrompt() (commandLoop): call resetCursor() (commandLoop): clear continuation flag (getInput): use continuation flag (getInput): rewritten to respect max_size * userLevelRewritingContext.hh (class UserLevelRewritingContext): added decl for getInput() * interact.cc (getInput): added * lexerAux.cc (getInput): use UserLevelRewritingContext::getInput() 2002-09-06 Steven Eker * mixfixModule.hh (CommonTokens): many decls added and changed to accomodate new Term* -> ostream& pretty printer * termPrint.cc: complete rewrite to handle disambiguation for nats/ints/rats/vars * prettyPrint.cc (fancySpace): don't output attributes if we're are in print color mode * entry.cc (addOpDeclaration): added WarningCheck() for pseudo variable that cannot be distinguished from the real thing * dagNodePrint.cc (handleVariable): handle disambiguation (except for kinds) and color * entry.cc (addOpDeclaration): fill out overloadedVariables * mixfixModule.hh (CommonTokens): added data memeber overloadedVariables 2002-09-05 Steven Eker * dagNodePrint.cc (handleDivision): handle disambiguation (prettyPrint): new handleDivision() calling convention (handleIter): handle disambiguation in succ case (prettyPrint): hoist common coloringInfo calcs * mixfixModule.hh (CommonTokens): updated decl for handleDivision() * dagNodePrint.cc (prettyPrint): new handleMinus() calling convention * mixfixModule.hh (CommonTokens): updated decl for handleMinus() * dagNodePrint.cc (handleMinus): handle disambiguation * sharedPrint.cc: created * dagNodePrint.cc: major rewrite * mixfixModule.hh (CommonTokens): added PSEUDOS to enum InternalFlags (CommonTokens): added decls for ambiguous() and prefix() (CommonTokens): added decls for handleFloat(), handleString(), handleQuotedIdentifier(), handleVariable(), suffix() * dagNodePrint.cc (prettyPrint): check for PSEUDO_NAT, PSEUDO_NEG and PSEUDO_RAT * entry.cc (newFancySymbol): update kindsWithMinus and kindsWithDivision * mixfixModule.hh (CommonTokens): made newFancySymbol() non static * entry.cc (newFancySymbol): update kindsWithSucc * prettyPrint.cc (operator<<): check PRINT_COLOR flag * mixfixModule.hh (CommonTokens): deleted static data member printCtors * dagNodePrint.cc (computeColor): check PRINT_COLOR flag * interpreter.hh: added PRINT_COLOR to enum Flags * commands.y: added set print color on/off * top.y: added KW_COLOR * lexer.flex: added KW_COLOR 2002-09-04 Steven Eker * token.hh (class Token): added decl for getRational() * token.cc (getRational): added * entry.cc (addOpDeclaration): support for PSEUDO_NAT, PSEUDO_NEG and PSEUDO_RAT * mixfixModule.hh (CommonTokens): added decl for hasSameDomain() (CommonTokens): added data members overloadedIntegers, overloadedRationals, kindsWithSucc, kindsWithMinus, kindsWithDivision (CommonTokens): added PSEUDO_NAT, PSEUDO_NEG, PSEUDO_RAT to enum InternalFlags * entry.cc (hasSameDomain): added, in order to deal with assoc domain overloading (addOpDeclaration): use hasSameDomain() * quotedIdentifierSymbol.hh (class QuotedIdentifierSymbol): added decl for isConstructor() * quotedIdentifierSymbol.cc (isConstructor): added 2002-09-03 Steven Eker * mixfixModule.hh (CommonTokens): updated decls for prettyPrint(), handleIter(), computeColor( * dagNodePrint.cc (computeColor): use struct ColoringInfo (handleIter): use struct ColoringInfo * prettyPrint.cc (operator<<): use struct ColoringInfo * mixfixModule.hh (CommonTokens): updated decls for DagNode* versions of handleIter(), handleMinus(), handleDivision() (CommonTokens): added decl for computeColor() (CommonTokens): added struct ColoringInfo * dagNodePrint.cc (prettyPrint): handle coloring in unflatten assoc case (handleIter): handle color arg (handleMinus): handle color arg (computeColor): added (prettyPrint): use computeColor() (prettyPrint): pass color arg to handleIter(), handleMinus() and handleDivision() * prettyPrint.cc (operator<<): pass ectra arg to prettyPrint() * mixfixModule.hh (CommonTokens): updated decl for DagNode* version of prettyPrint() * dagNodePrint.cc (handleIter): pass reducedDirectlyAbove arg to prettyPrint() (prettyPrint): use cyan for unreduced node that have a reduced node above them but not directly above them 2002-08-29 Steven Eker * mixfixModule.hh (CommonTokens): updated decls for printTokens() and printTails() * prettyPrint.cc (printTokens): handle color arg (printTails): handle color arg * dagNodePrint.cc (prettyPrint): handle printCtors in mixfix case 2002-08-28 Steven Eker * dagNodePrint.cc (prettyPrint): handle printCtors in prefix case * mixfixModule.hh (CommonTokens): updated decls for DagNode* versions of handleIter() and prettyPrint() * dagNodePrint.cc (handleIter): take and pass visited, statusVec and reducedAbove (prettyPrint): take and pass visited, statusVec and reducedAbove * prettyPrint.cc (operator<<): (DagNode* version) call computeGraphStatus() * mixfixModule.hh (CommonTokens): added enum DagNodeStatus (CommonTokens): added decl for computeGraphStatus() (CommonTokens): added static data member printCtors * prettyPrint.cc (graphStatus): added * lexer.flex: added : space to skipped IssueWarning() 2002-08-27 Steven Eker * importModule.cc (donateOps): set or clear CTOR flag before passing symbolType to MixfixModule::addOpDeclaration() * entry.cc (addOpDeclaration): don't store ctor flag in symbolInfo[].symbolType since this is a per-symbol struct whereas ctor flag can vary between op decls for the same symbol 2002-08-26 Steven Eker * symbolType.hh (class SymbolType): added decl for dittoProblem() * entry.cc (addOpDeclaration): use dittoProblem() * symbolType.cc (dittoProblem): added (compatible): exclude DITTO when checking for compatibility * entry.cc (addOpDeclaration): allow ditto to be combined with ctor * prelude.maude: made QID-LIST ops ctors; use ditto for op __ : TypeList TypeList in fmod META-MODULE; made true and false ctors * modules.y: use setFlag(SymbolType::CTOR) * visibleModule.cc (showDecls): use isConstructor() (showAttributes): handle iter theory * bufferPrint.cc (prettyPrint): deleted miValue * dagNodePrint.cc (prettyPrint): deleted miValue * termPrint.cc (prettyPrint): deleted miValue * visibleModule.cc (showDecls): use new getOpDeclarations() semantics * quotedIdentifierSymbol.cc (compileOpDeclarations): use new getOpDeclarations() semantics * prettyPrint.cc (chooseDisambiguator): use new getOpDeclarations() semantics * importModule.cc (donateOps): use new getOpDeclarations() semantics * mixfixModule.cc (instantiatePolymorph): use new addOpDeclarations() semantics (copyBubbleSpec): use new getOpDeclarations() semantics (mayAssoc): use new getOpDeclarations() semantics (findSymbol): use new getOpDeclarations() semantics (instantiateVariable): use new addOpDeclarations() semantics; variables are always constructors (instantiateSortTest): use new addOpDeclarations() semantics; sort tests are never constructors * entry.cc (addBubbleSpec): use new getOpDeclarations() semantics (addOpDeclaration): use new getOpDeclarations() and addOpDeclarations() semantics 2002-08-23 Steven Eker * userLevelRewritingContext.cc (dontTrace): added Assert to tray and catch bug reported by Paco (dontTrace): removed Assert(); handle the case where pe == 0, fixing bug reported by Paco ===================================Maude75================================================== 2002-08-02 Steven Eker * modules.y: added KW_ENDOM to startKeyword2 2002-08-01 Steven Eker * token.cc (codeToRope): replaced Assert(false,...) with CantHappen() * prettyPrint.cc (operator<<): replaced Assert(false,...) with CantHappen() * mixfixParser.cc (makeTerm): replaced Assert(false,...) with CantHappen() (makeConditionFragment): replaced Assert(false,...) with CantHappen() (makeStatementPart): replaced Assert(false,...) with CantHappen() * interact.cc (handleDebug): replaced Assert(false,...) with CantHappen() * importModule.cc (removeDependent): replaced Assert(false,...) with CantHappen() (deepCopyCondition): replaced Assert(false,...) with CantHappen() (deepSelfDestruct): replaced DebugAdvisoryCheck(false, ...) with DebugAdvisory() (unprotect): replaced DebugAdvisoryCheck(false, ...) with DebugAdvisory() (removeDependent): replaced DebugAdvisoryCheck(false, ...) with DebugAdvisory() 2002-07-31 Steven Eker * visibleModule.cc (showAttributes): fix bug that we were not setting space after comm (showAttributes): handle MESSAGE, OBJECT and CONFIG flags * command.cc (printOpDef): handle MESSAGE, OBJECT and CONFIG flags * lexer.flex: move in to * modules.y: removed KW_PWD, KW_CD, KW_PUSHD, KW_POPD, KW_LS, IN, KW_LOAD, KW_QUIT, KW_EOF from startKeyword2; removed directive from fDeclaration * top.y: tokens KW_PWD KW_CD KW_PUSHD KW_POPD KW_LS KW_LOAD KW_QUIT KW_EOF no longer declared to have a type * lexer.flex: moved in, load, pwd, cd, pushd, popd, ls, quit, q, eof, from to 2002-07-30 Steven Eker * lexer.flex (id): added | , class and subclass to tokens that are return in ID_MODE * modules.y: added '|' to identifier; added syntax for subclasses; added KW_CLASS and KW_SUBCLASS to startKeyword2 * top.y: added tokens KW_CLASS, KW_SUBCLASS * modules.y: added syntax for class definitions 2002-07-29 Steven Eker * top.y: added decl for startKeyword2 nonterminal * modules.y: added KW_MSG and KW_MSGS to startKeyword; removed KW_MSG from attrKeyword2; added startKeyword2 so we can exclude msg from identity chunks 2002-07-26 Steven Eker * modules.y: reorganized declarations so that rules cannot appear in fmods; added syntax for msg/msgs statements * top.y: added decls for nonterminals notEndfm and notEndm * modules.y: added omod ... endom syntax; handle ended by warings in an extensible way * top.y: added tokens KW_MSGS and KW_ENDOM; added decl for nonterminal notEndom * lexer.flex (id): added keywords msgs and endom 2002-07-25 Steven Eker * makeGrammar.cc (makeSymbolProductions): deleted MACHINE_INTEGER case * mixfixParser.hh (class MixfixParser): deleted MAKE_MACHINE_INT from enum SemanticActions * symbolType.hh (class SymbolType): deleted MACHINE_INTEGER and MACHINE_INTEGER_OP from enum BasicTypes (hasAttachments): use FLOAT_OP instead of MACHINE_INTEGER_OP * specialSymbolTypes.cc (MACRO): deleted MachineIntegerSymbol and MachineIntegerOpSymbol cases * mixfixParser.cc (makeTerm): deleted MAKE_MACHINE_INT case * mixfixModule.cc (findMachineIntegerSymbol): deleted * maudemlBuffer.cc (generate): (both versions) deleted MachineIntegerSymbol case * entry.cc (addOpDeclaration): deleted PSEUDO_MACHINE_INTEGER and overloadedMachineIntegers stuff (addOpDeclaration): don't update machineIntegerSymbols (newFancySymbol): don't make MachineIntegerSymbols or MachineIntegerOpSymbols * termPrint.cc (prettyPrint): deleted handling for PSEUDO_MACHINE_INTEGERs and MACHINE_INTEGERs * graphPrint.cc (graphPrint): deleted MACHINE_INTEGER case * dagNodePrint.cc (prettyPrint): deleted handling for PSEUDO_MACHINE_INTEGERs and MACHINE_INTEGERs * bufferPrint.cc (prettyPrint): deleted handling for PSEUDO_MACHINE_INTEGERs and MACHINE_INTEGERs * mixfixModule.hh (CommonTokens): deleted decl for findMachineIntegerSymbol(); deleted PSEUDO_MACHINE_INTEGER from enum InternalFlags; deleted data members overloadedMachineIntegers and machineIntegerSymbols ===================================Maude74================================================== 2002-06-17 Steven Eker * prettyPrint.cc (printCondition): don't print "." (operator<<): (SortConstraint* version) use printAttributes() (printAttributes): added (operator<<): (Equation* version) use printAttributes() * mixfix.hh: added class MetadataStore * mixfixModule.hh (CommonTokens): derive from MetadataStore * metadataStore.hh (class MetadataStore): created from metadata stuff in MixfixModule * metadataStore.cc (getMetadata): moved here (insertMetadata): moved here * mixfixModule.cc (insertMetadata): added (getMetadata): added * mixfixModule.hh (CommonTokens): added MetadataMap, data member metadataMap, enum ItemType and decls for insertMetadata() and getMetadata() * mixfixParser.cc (makeAttributePart): handle metadata attribute (makeStatementPart): insert metadata 2002-06-14 Steven Eker * mixfixParser.hh (class MixfixParser): added MAKE_LABEL_ATTRIBUTE, MAKE_METADATA_ATTRIBUTE, MAKE_NONEXEC_ATTRIBUTE and MAKE_ATTRIBUTE_LIST to enum SemanticActions (class MixfixParser): added decl for makeAttributePart(), updated decl for makeStatementPart() * mixfixParser.cc (makeAttributePart): added (makeStatementPart): added metadata and flags arguments (makeStatement): call makeAttributePart() * commonTokens.cc (CommonTokens): added label, metadata and nonexec * commonTokens.hh (class CommonTokens): added label, metadata and nonexec * preModule.cc (addStatement): check for labels in attribute list; use CommonTokens (addRule): deleted * preModule.hh (PreModule): derive from ComonTokens (PreModule): deleted decl for addRule() * makeGrammar.cc (makeAttributeProductions): added label and nonexec attributes * mixfixModule.hh (CommonTokens): added decl for makeAttributeProductions() * makeGrammar.cc (makeStatementProductions): added production for statement with attributes (makeAttributeProductions): created (makeGrammar): call makeAttributeProductions() 2002-06-13 Steven Eker * prettyPrint.cc (operator<<): (SortConstraint* version) handle label (operator<<): (Equation* version) handle label * userLevelRewritingContext.hh (class UserLevelRewritingContext): updated decl for handleDebug() * userLevelRewritingContext.cc (tracePreEqRewrite): pass equation to handleDebug() (tracePreScApplication): pass sc to handleDebug() * trial.cc (traceBeginEqTrial): pass equation to handleDebug() (traceBeginScTrial): pass sc to handleDebug() * interact.cc (handleDebug): deal with PreEquation* rather than Rule* * userLevelRewritingContext.hh (dontTrace): delete 1 arg version (class UserLevelRewritingContext): updated decl for dontTrace() * userLevelRewritingContext.cc (tracePreEqRewrite): pass equation to dontTrace() (tracePreScApplication): pass sc to dontTrace() * trial.cc (traceBeginRuleTrial): test traceRuleFlag (traceBeginEqTrial): pass equation to dontTrace() (traceBeginScTrial): pass sc to dontTrace() * userLevelRewritingContext.cc (dontTrace): moved here; deal with PreEquation* rather than Rule* (dontTrace): don't check traceRuleFlag (tracePreRuleRewrite): test traceRuleFlag * modules.y: use addStatement() rather than addRule() * preModule.cc (addStatement): moved here; check for labels * mixfixModule.hh (CommonTokens): added decl for makeComponentProductions() (CommonTokens): RULE_BODY -> RL_BODY; added STATEMENT_PART, ATTRIBUTE_PART, MB_BODY, EQ_BODY to enum NonTerminal * makeGrammar.cc (makeStatementProductions): rewritten; statements now consists of statment parts; now have MB_BODY, EQ_BODY so that mbs and eqs can be prefixed by a label; RULE_BODY becomes RL_BODY (makeConditionProductions): added to contain all the condition code from makeStatementProductions() (makeGrammar): call makeConditionProductions(); * mixfixParser.hh (class MixfixParser): added decl for makeStatementPart() (class MixfixParser): added MAKE_ATTRIBUTE_PART to enum SemanticActions * mixfixParser.cc (makeStatementPart): added (makeStatement): use makeStatementPart() 2002-06-12 Steven Eker * importModule.cc (donateStatements): copy label arg for eqs and mbs * mixfixParser.cc (makeStatement): pass NONE as first arg of Equation() and SortConstraint() * quotedIdentifierOpSymbol.cc (eqRewrite): oracle "or" changed to "mo" for "mos-oracle" 2002-06-10 Steven Eker * makeGrammar.cc (makeSymbolProductions): MACHINE_FLOAT -> FLOAT * mixfixParser.hh (class MixfixParser): MACHINE_FLOAT -> FLOAT * symbolType.hh (class SymbolType): MACHINE_FLOAT -> FLOAT * specialSymbolTypes.cc (MACRO): MachineFloat -> Float * termPrint.cc (prettyPrint): MachineFloat -> Float * mixfixParser.cc (makeTerm): MachineFloat -> Float * mixfixModule.cc: MachineFloat -> Float * maudemlBuffer.cc (generate): MachineFloat -> Float * graphPrint.cc (graphPrint): MachineFloat -> Float * entry.cc: MachineFloat -> Float * dagNodePrint.cc (prettyPrint): MachineFloat -> Float * bufferPrint.cc (prettyPrint): MachineFloat -> Float * mixfixModule.hh: MachineFloat -> Float 2002-06-03 Steven Eker * maudemlBuffer.cc (generate): (term and dagnode versions) handle iter theory * graphPrint.cc (graphPrint): moved here (graphCount): moved here (graphPrint): deleted comment out code from pre mpz_class implementation (graphPrint): handle iter theory 2002-05-24 Steven Eker * mixfixModule.hh (CommonTokens): added decl for buffer versions of handleMinus() and handleDivision() * termPrint.cc (prettyPrint): removed old iter code * bufferPrint.cc (handleMinus): added (handleDivision): added (prettyPrint): use handleMinus() and handleDivision() * mixfixModule.hh (CommonTokens): added decl for buffer version of handleIter() * bufferPrint.cc (handleIter): added (prettyPrint): use handleIter() * termPrint.cc (handleIter): use makeIterName() * dagNodePrint.cc (handleIter): use makeIterName() * mixfixModule.hh (CommonTokens): added decl for makeIterName() * prettyPrint.cc (makeIterName): added * interact.cc (commandLoop): treat an error from yyparse() just like a ctrl-C for cleanup purposes. This fixes a bug where if the user quits part way through a module with ^D we have a module in a bad state that we don't delete 2002-05-23 Steven Eker * termPrint.cc (prettyPrint): (Term* version) use handleMinus() and handleDivision() (handleDivision): added Term* version * mixfixModule.hh (CommonTokens): added decls for Term* versions of handleIter(), handleMinus(), handleDivision() * termPrint.cc (prettyPrint): (Term* version) moved here (prettyPrint): use handleIter() (handleIter): added Term* version * dagNodePrint.cc (handleDivision): use PRINT_RAT flag * interpreter.hh (endif): added PRINT_RAT to enum Flags * commands.y: added syntax for set print rat on/off . * top.y: added KW_RAT * lexer.flex: added KW_RAT * makeGrammar.cc (makeSymbolProductions): added DIVISION_SYMBOL case (makeSpecialProductions): added RATIONAL cases for both seen and unseen tokens * mixfixModule.hh (CommonTokens): added RATIONAL to enum NonTerminal and renumbered * mixfixParser.cc: added MAKE_RATIONAL case * mixfixParser.hh (class MixfixParser): added MAKE_RATIONAL to enum SemanticActions * token.hh (class Token): added decl for looksLikeRational() * token.cc (looksLikeRational): added (checkForSpecialProperty): use looksLikeRational() * token.hh (class Token): added RATIONAL to enum SpecialProperties * mixfixModule.hh (CommonTokens): added decl for handleDivision() * dagNodePrint.cc (handleMinus): rewritten to be simpler as the cost if an extra mpz_class copy (handleDivision): added (prettyPrint): use handleDivision() 2002-05-22 Steven Eker * token.cc (bubbleToPrefixNameCode): patched second (old) algorithm to avoid spurious backquote between token that ends in _ and token that starts with nonspecial. (extractMixfix): allow prefix name with ITER_SYMBOL special property such as |_|^2 to be spit into mixfix syntax 2002-05-21 Steven Eker * symbolType.hh (class SymbolType): added DIVISION_SYMBOL to enum BasicTypes * specialSymbolTypes.cc (MACRO): added DivisionSymbol * commands.y: added syntax for set print number on/off command * top.y: added KW_NUMBER * lexer.flex: added KW_NUMBER * dagNodePrint.cc (handleIter): respect PRINT_NUMBER flag (handleMinus): respect PRINT_NUMBER flag * interpreter.hh (endif): added 9 print flags to enum Flags 2002-05-20 Steven Eker * mixfixModule.hh (CommonTokens): added decl for handleMinus() * dagNodePrint.cc (handleMinus): added (prettyPrint): use handleMinus() * mixfixModule.hh (CommonTokens): added decl for handleIter() * dagNodePrint.cc (prettyPrint): (DagNode* version) moved here (handleIter): added (prettyPrint): use handleIter() * prettyPrint.cc (prettyPrint): (DagNode* version) added SUCC_SYMBOL case * token.cc (codeToInt64): added hack to catch out of range integer errors that are now possible; this will go away with MachineInts * mixfixParser.cc (makeTerm): make sure that the C-string -> mpz_class conversion is done base 10 even if string start with a 0 * token.cc (checkForSpecialProperty): support arbitrary precision integers * mixfixParser.cc (makeTerm): added MAKE_INTEGER case * mixfixParser.hh (class MixfixParser): added MAKE_INTEGER to * makeGrammar.cc (makeSymbolProductions): added negative integer syntax for MINUS_SYMBOL case * mixfixModule.hh (CommonTokens): added ZERO to enum NonTerminal and renumbered following constants * makeGrammar.cc (makeSymbolProductions): handle Token::ZERO case (makeSpecialProductions): handle Token::ZERO case * token.cc (checkForSpecialProperty): handle ZERO case * entry.cc (addOpDeclaration): handle Token::ZERO case when checking for PSEUDO_MACHINE_INTEGERs * token.hh (class Token): added ZERO to enum SpecialProperties * mixfixParser.hh (class MixfixParser): added MAKE_NATURAL to enum SemanticActions * mixfixParser.cc (makeTerm): added MAKE_NATURAL case * makeGrammar.cc (makeSymbolProductions): added natural number syntax for SUCC_SYMBOL case 2002-05-17 Steven Eker * specialSymbolTypes.cc (MACRO): MINUS_SYMBOL added * entry.cc (newFancySymbol): added MINUS_SYMBOL case * symbolType.hh (class SymbolType): added MINUS_SYMBOL to enum BasicTypes 2002-05-15 Steven Eker * importModule.cc (fixUpDonatedOps): for all symbol types where hasAttachments() is true we handle fixups in an incremental manner; previous we only did this for symbol type QUOTED_IDENTIFIER and actually for a QUOTED_IDENTIFIER where we were responsibleForFixUp we would do it twice! * specialSymbolTypes.cc (MACRO): added CUI_NumberOpSymbol * entry.cc (newFancySymbol): support CUI_NUMBER_OP_SYMBOL within CUI_SYMBOL case * symbolType.hh (class SymbolType): added CUI_NUMBER_OP_SYMBOL to enum BasicTypes 2002-05-13 Steven Eker * entry.cc (newFancySymbol): added ACU_NUMBER_OP_SYMBOL case * specialSymbolTypes.cc (MACRO): added ACU_NumberOpSymbol * symbolType.hh (class SymbolType): added ACU_NUMBER_OP_SYMBOL to enum BasicTypes 2002-05-09 Steven Eker * symbolType.hh (hasAttachments): test against END_OF_SYMBOLS_WITH_ATTACHMENTS rather than LOOP_SYMBOL (class SymbolType): added END_OF_SYMBOLS_WITH_ATTACHMENTS to enum BasicTypes * entry.cc (newFancySymbol): added SUCC_SUMBOL and NUMBER_OP_SYMBOL cases * symbolType.hh (class SymbolType): added SUCC_SUMBOL and NUMBER_OP_SYMBOL to enum BasicTypes * specialSymbolTypes.cc (MACRO): added SuccSymbol and NumberOpSymbol 2002-05-08 Steven Eker * prettyPrint.cc (prettyPrint): (DagNode* version) don't use s^n notation when n = 1 (prettyPrint): (Term* version) support s^n notation 2002-05-02 Steven Eker * prettyPrint.cc (prettyPrint): (DagNode* version) simplified using mpz_class operator<<() * mixfixParser.cc (makeTerm): BigNum -> mpz_class (translateSpecialToken): BigNum -> mpz_class * makeGrammar.cc (makeSpecialProductions): BigNum -> mpz_class * token.cc (split): becomes mpz_class version * token.hh: decl for BigNum split() becomes decl for mpz_class split() * prettyPrint.cc (graphPrint): mpz_class replaces class BigNum (graphCount): mpz_class replaces class BigNum * mixfixModule.hh (CommonTokens): updated decl for graphCount() 2002-05-01 Steven Eker * mixfixParser.cc (insertIterSymbolTerminal): resize() if needed * makeGrammar.cc (makeSpecialProductions): handle productions and terminal insertion for iter symbols * mixfixModule.hh (findIterSymbolIndex): added * mixfixParser.hh (class MixfixParser): added decl for insertIterSymbolTerminal() * mixfixParser.cc (insertIterSymbolTerminal): added * mixfixParser.hh (class MixfixParser): added data member iterSymbolTerminals * mixfixParser.cc (translateSpecialToken): added ITER_SYMBOL case * token.cc (checkForSpecialProperty): check for ITER_SYMBOL property * makeGrammar.cc (makeSymbolProductions): add foo^n(t) syntax for symbols foo with the iter attribute * mixfixParser.hh (class MixfixParser): added MAKE_ITER to enum SemanticActions * mixfixParser.cc (makeTerm): added MAKE_ITER case * token.hh (class Token): added decl for BigNum version of split() * token.cc (split): added BigNum version * mixfixModule.hh (CommonTokens): added decl foriterSymbolNonTerminal() * mixfixModule.cc (iterSymbolNonTerminal): added * makeGrammar.cc (makeGrammar): take iterSymbols into account when calculating componentNonTerminalBase * entry.cc (addOpDeclaration): update iterSymbols * mixfixModule.hh (CommonTokens): added data member iterSymbols * mixfixModule.cc (nonTerminal): use componentNonTerminalBase * makeGrammar.cc (makeGrammar): set componentNonTerminalBase * mixfixModule.hh (CommonTokens): added data member componentNonTerminalBase * token.hh (class Token): added ITER_SYMBOL to SpecialProperties 2002-04-24 Steven Eker * prettyPrint.cc (prettyPrint): (DagNode* version) handle ITER flag/S_Symbol * entry.cc (newFancySymbol): support ITER flag/S_Symbol * modules.y: added syntax for iter attribute * top.y: added KW_ITER * lexer.flex: added iter token * symbolType.hh (class SymbolType): added ITER to enum Flags 2002-04-19 Steven Eker * mixfixParser.cc (insertBubbleProduction): set bubblesAllowed = true; this fixes a nasty bug we introduced when we split out class MixfixParser * mixfixModule.hh (CommonTokens): deleted decl for old instantiatePolymorph() * mixfixModule.cc (instantiatePolymorph): collapse the two versions into a single function (findSymbol): use new instantiatePolymorph() interface * visibleModule.hh (class VisibleModule): updated decl for showSummary() * visibleModule.cc (showSummary): use getParserStats() (showSummary): can't be const since we may force creation of a parser * mixfixParser.hh (getNrProductions): added * mixfixModule.hh (CommonTokens): added decl for getParserStats() * doParse.cc (getParserStats): added * makeGrammar.cc (makeComplexProductions): use new CommonTokens (makeStatementProductions): use new CommonTokens * commonTokens.hh (class CommonTokens): added static data members arrowPlus, arrowStar, arrowBang, suchThat, such, that, mb, cmb, eq, ceq, rl, crl, cq, ifToken * commonTokens.cc (CommonTokens): added tokens arrowPlus, arrowStar, arrowBang, suchThat, such, that, mb, cmb, eq, ceq, rl, crl, cq, ifToken * makeGrammar.cc (makeComponentProductions): arrow2 -> arrow * commonTokens.cc (CommonTokens): arrow2 -> arrow * commonTokens.hh (class CommonTokens): arrow2 -> arrow * mixfix.hh: added fwd decl for class CommonTokens * mixfixModule.cc (MixfixModule): don't init token codes * mixfixModule.hh (MixfixModule): derive from CommonTokens; delete own static token data members * commonTokens.hh: created * commonTokens.cc: created * mixfixModule.hh (class MixfixModule): deleted decl for parseCommand() 2002-04-17 Steven Eker * commands.y: added set omod include command * top.y: added token KW_OMOD * lexer.flex: added keyword omod * mixfixModule.hh (class MixfixModule): deleted decls for showOps(), showVars(), showMbs(), showEqs(), showRls(), showAll(), showSummary() and printAttributes() * prettyPrint.cc (showOps): deleted (printAttributes): deleted (showVars): deleted (showMbs): deleted (showEqs): deleted (showRls): deleted (showAll): deleted (showSummary): deleted * interpreter.hh (endif): added decls for showModule() and showVars() * interpreter.cc (showVars): added (showModule): added * commands.y: use interpreter.showModule(true) for show all command; use interpreter.showVars() for show vars * visibleModule.cc (showVars): added * mixfixModule.hh (class MixfixModule): deletd decl for showSorts(); made AliasMap public (getVariableAliases): added * prettyPrint.cc (showSorts): deleted * commands.y: use showSortsAndSubsorts() * interpreter.hh (endif): added decl for showSortsAndSubsorts() * interpreter.cc (showSortsAndSubsorts): added * visibleModule.hh (class VisibleModule): added decl for showSortsAndSubsorts() * visibleModule.cc (showSortsAndSubsorts): added * mixfixModule.hh (getModuleType): made const * visibleModule.hh (class VisibleModule): added decls for showSorts1(), showSubsorts(), showModule() * visibleModule.cc (showSubsorts): added (showSorts1): added (showModule): added * importModule.cc (donateSorts): use getNrImportedSubsortSorts() * importModule.hh (getNrImportedSorts): added (getNrUserSorts): added (getNrImportedSubsortSorts): added * commands.y: use Interpreter version of showOps() * interpreter.hh (endif): added decl for showOps() * interpreter.cc (showOps): added * visibleModule.cc (showDecls): added (printAttributes): becomes showAttributes() * importModule.cc (donateOps): use getNrImportedDeclarations() (fixUpDonatedOps): use getNrImportedDeclarations() * importModule.hh (getNrImportedSymbols): added (getNrUserSymbols): added (getNrImportedDeclarations): added (getNrUserDeclarations): added * visibleModule.cc (showOps): added 2002-04-16 Steven Eker * visibleModule.hh (class VisibleModule): added decl for printAttributes() * visibleModule.cc (printAttributes): added * symbolType.hh (class SymbolType): added ATTRIBUTES toenum Flags * commands.y: use Interpreter version of showSummary() * interpreter.cc (showSummary): added * interpreter.hh (endif): added decl for showSummary() * mixfixModule.hh (class MixfixModule): deleted decl for showComponents() * prettyPrint.cc (showComponents): deleted * commands.y: use showKinds() in place of showComponents() * interpreter.hh (endif): added decl for showKinds() * interpreter.cc (showKinds): added * visibleModule.cc (showSummary): added * visibleModule.hh (class VisibleModule): added decls for showSummary() and showKinds() * visibleModule.cc (showKinds): added * commands.y: use Interpreter versions of showMbs(), showEqs(), showRls() * interpreter.cc (showMbs): added (showEqs): added (showRls): added * interpreter.hh (endif): added decls for showMbs(), showEqs() and showRls() * compiler.cc (fullCompile): ImportModule -> VisibleModule * loopMode.cc: renamed from loopMode2.cc; ImportModule -> VisibleModule in 4 places * search.cc: renamed from search2.cc; ImportModule -> VisibleModule in 3 places * match.cc: renamed from match2.cc; ImportModule -> VisibleModule in 3 places * execute.cc: renamed from execute2.cc; ImportModule -> VisibleModule in many places * interpreter.hh: ImportModule -> VisibleModule in many places * process.cc (process): ImportModule -> VisibleModule * import.cc (importModule): ImportModule -> VisibleModule * preModule.cc: ImportModule -> VisibleModule in 3 places * preModule.hh: ImportModule -> VisibleModule in many places * visibleModule.hh: created * visibleModule.cc: created 2002-04-15 Steven Eker * mixfixModule.hh (class MixfixModule): deleted decl for specialNameToBasicType() * mixfixModule.cc (specialNameToBasicType): deleted * ops.cc (addHook): use SymbolType::specialNameToBasicType() * symbolType.hh (class SymbolType): added decl for specialNameToBasicType() * symbolType.cc (specialNameToBasicType): added 2002-04-12 Steven Eker * mixfixParser2.cc (getTokenSet): moved here (insertVariableTerminal): fix bug where we were inserting into specialTerminals rather than variableTerminals * mixfixParser.hh (getTokenSet): added * makeGrammar.cc (makeSpecialProductions): use getTokenSet() * prettyPrint.cc (showSummary): temporarily commented out grammar stuff * mixfixModule.hh (class MixfixModule): data member parser becomes a MixfixParser* (class MixfixModule): deleted data members actions, data, specialTerminals, currentSentence, currentOffset, tokens (class MixfixModule): deleted enum Actions (class MixfixModule): delete data member variableTokenCode (class MixfixModule): deleted decl for insertProd() * mixfixModule.cc (makeGrammar): deleted (makeVariableProductions): deleted (makeSpecialProductions): deleted (makePolymorphProductions): deleted (makeBoolProductions): deleted (makeComplexProductions): deleted (makeStatementProductions): deleted (makeComponentProductions): deleted (makeSymbolProductions): deleted (makeLabelProductions): deleted (makeBubbleProductions): deleted * mixfix.hh: added fwd decl for class MixfixParser * doParse.cc: created * mixfixParser2.cc (parseSentence): use nrParses (makeTerms): added (insertStatement): added (parseSentence): treat -ve number of parses as INT_MAX rather than 2 (makeMatchCommand): added (makeSearchCommand): added * mixfixParser.hh (class MixfixParser): added data member nrParses * mixfixParser2.cc (parseSentence): was parseSentence2() (parseSentence): set currentSentence & currentOffset * makeGrammar.cc: created * mixfixParser.hh (class MixfixParser): added decls for insertBubbleProduction(), insertSpecialTerminal(), insertVariableTerminal(), translateSpecialToken() * mixfixParser2.cc (insertVariableTerminal): added (translateSpecialToken): added (parseSentence2): added (MixfixParser): initialize specialTerminals and variableTerminals to maximum needed size (insertVariableTerminal): no need to resize variableTerminals (insertSpecialTerminal): no need to resize specialTerminals (insertProduction): renamed from insertProd() (insertBubbleProduction): added 2002-04-11 Steven Eker * mixfixParser2.cc (insertSpecialTerminal): added * mixfixParser.hh (class MixfixParser): added bubblesAllowed data member * mixfixParser2.cc (MixfixParser): initialize bubblesAllowed flag * mixfixModule.hh (class MixfixModule): updated decl for makeBubble() * mixfixModule.cc (makeBubble): make token arg const * mixfixParser2.cc (makeTerm): removed new variable hack now that new variable symtax is properly supported; use makeBubble() 2002-04-10 Steven Eker * mixfixModule.cc (makeBubble): added * mixfixModule.hh (class MixfixModule): added decl for makeBubble * mixfixParser2.cc (MixfixParser): initialize client * mixfixParser.hh (class MixfixParser): make client a reference rather than a const pointer 2002-04-09 Steven Eker * mixfixParser2.cc: created * mixfixParser.hh: created * mixfixModule.cc (makeTrueTerm): moved here * mixfixModule.hh (class MixfixModule): added decl for makeTrueTerm() (makeTrueTerm): added * mixfixModule.cc (instantiatePolymorph): added new version * mixfixModule.hh (class MixfixModule): added decl for instantiatePolymorph() version that takes a polymorphIndex and a kindIndex * compiler.cc: renamed from compiler2.cc * import.cc (findModule): deleted * preModule.hh (PreModule): deleted decl for findModule() ===================================Maude72================================================== 2002-04-08 Steven Eker * main.hh: added decl for findExecutableDirectory(); updated decl for findPrelude() * main.cc (findExecutableDirectory): added (findPrelude): use executableDirectory; also look for prelude in current directory (findFile): use executableDirectory; also look for users file in executable directory 2002-04-05 Steven Eker * bufferPrint.cc (handleFormat): implemented (bufferPrint): clear globalIndent * execute2.cc (reduce): check getFlag(SHOW_COMMAND) (fRewriteCont): check getFlag(SHOW_COMMAND) (fRewrite): check getFlag(SHOW_COMMAND) (rewriteCont): check getFlag(SHOW_COMMAND) (rewrite): check getFlag(SHOW_COMMAND) * search2.cc (showSearchGraph): check getFlag(SHOW_COMMAND) (showSearchPath): check getFlag(SHOW_COMMAND) (search): check getFlag(SHOW_COMMAND) (searchCont): check getFlag(SHOW_COMMAND) * maudemlBuffer.hh (class MaudemlBuffer): added decls for generateShowSearchPath() and generateShowSearchGraph() * maudemlBuffer.cc (generateShowSearchGraph): added (generateShowSearchGraph): added * search2.cc (showSearchPath): call generateSearchPath() (showSearchGraph): use generateSearchGraph() * maudemlBuffer.cc (generate): renamed to generateSearchGraph() * maudemlBuffer.hh (class MaudemlBuffer): added decl for generateSearchPath() * maudemlBuffer.cc (generateSearchResult): handle NONE case (generateSearchPath): added * search2.cc (doSearching): use new generateSearchResult(); * maudemlBuffer.hh (class MaudemlBuffer): added decl for generateStats(), updated decl for generateSearchResult() * maudemlBuffer.cc (generateSubstitution): removed const_cast (generateStats): added (generateResult): use generateStats() (generateSearchResult): use generateStats() * userLevelRewritingContext.cc (printSubstitution): removed const_cast * mixfixParser.cc (parseTerm2): call makeGrammar() to make sure complex parser is set one way or the other (we fixed the same bug in parseTerm() on 2001-05-01) 2002-04-04 Steven Eker * search2.cc (doSearching): call generateSearchResult() * maudemlBuffer.cc (generateSearchResult): added (generateSubstitution): added (generateAssignment): added * maudemlBuffer.hh (class MaudemlBuffer): added decls for generateSearchResult(), generateSubstitution(), generateAssignment() * search2.cc (searchCont): call generateContinue() * execute2.cc (fRewriteCont): call generateContinue() * maudemlBuffer.hh (class MaudemlBuffer): added decl for generateContinue() * maudemlBuffer.cc (generateContinue): added * execute2.cc (rewriteCont): call enerateContinue() * maudemlBuffer.hh (class MaudemlBuffer): added decls for generateReduce(), generateRewrite(), generateFrewrite(), generateSearch() * maudemlBuffer.cc (generateSearch): added (generateFrewrite): added (generateRewrite): added * execute2.cc (fRewrite): call generateFrewrite() (rewrite): call generateRewrite() * search2.cc (search): call generateSearch() * maudemlBuffer.cc (generateReduce): added * execute2.cc (reduce): call generateReduce() * mixfixModule.hh (class MixfixModule): added decl for buffer version of printPrefixName() * bufferPrint.cc (printPrefixName): added buffer version (prettyPrint): use printPrefixName() * mixfixModule.hh (class MixfixModule): updated decls for buffer versions of printTokens() and printTails(); added decl for handleFormat() * bufferPrint.cc (prettyPrint): pass const SymbolInfo& to printTokens() and printTails() (printTokens): handle format attribute (printTails): handle format attribute (handleFormat): added * preModule.hh (Parent): made checkFormatString() public for metalevel use * loopMode2.cc (printBubble): support \s for space plus ANSI stuff * profileModule.hh (class ProfileModule): added decl for showSymbol() * profileModule.cc (showSymbol): added (showProfile): print builtin/memo rewrites 2002-04-03 Steven Eker * interpreter.cc (showProfile): moved here * interact.cc (clearDebug): moved here * userLevelRewritingContext.hh (clearDebug): use getFlag(Interpreter::EXCEPTION_FLAGS) * interact.cc (commandLoop): use getFlag(Interpreter::EXCEPTION_FLAGS) (handleDebug): use getFlag(Interpreter::TRACE) (2 places) (handleDebug): use getFlag(Interpreter::EXCEPTION_FLAGS) (handleDebug): use interpreter.getFlag(Interpreter::BREAK) * userLevelRewritingContext.hh (setTraceFlag): deleted (setBreakFlag): deleted (class UserLevelRewritingContext): deleted static data members traceFlag and breakFlag * commands.y: use setFlag(Interpreter::TRACE, ) in place of setTraceFlag(); use setFlag(Interpreter::BREAK, ) in place of setBreakFlag(); * interpreter.cc (setFlag): moved here, support EXCEPTION_FLAGS * interpreter.hh (Interpreter): added EXCEPTION_FLAGS to enum Flags * execute2.cc (makeDag): simplified normalize() call * importModule.hh (getNrOriginalMembershipAxioms): added (getNrOriginalEquations): added * mixfixParser.cc (parseSentence2): fixed bug where we were testing for r < 1 rather than r < 0 and treating the no-parse case and ambiguous * importModule.hh (getNrOriginalRules): added 2002-04-02 Steven Eker * mixfix.hh: added few decl for class Compiler * interpreter.hh (endif): added AUTO_CLEAR_PROFILE to DEFAULT_FLAGS * profileModule.cc (clearProfileInfo): beocmes clearProfile() * profileModule.hh (class ProfileModule): clearProfileInfo() -> clearProfile() * execute2.cc (startUsingModule): call clearProfile() if AUTO_CLEAR_PROFILE flag is set * trial.cc (traceBeginEqTrial): call profileEqConditionStart() (traceBeginRuleTrial): call profileRlConditionStart() (traceBeginScTrial): call profileMbConditionStart() (traceEndFragment): call profileFragment() * userLevelRewritingContext.cc (tracePreEqRewrite): call profileEqRewrite() (tracePreRuleRewrite): call tracePreRuleRewrite() (tracePreScApplication): call profileMbRewrite() * interpreter.hh (showProfile): added * commands.y: added commands set profile on/off . set clear profile on/off . show profile . * top.y: added token KW_PROFILE * lexer.flex: TRACE -> KW_TRACE added keyword KW_PROFILE * commands.y: TRACE -> KW_TRACE * top.y: TRACE -> KW_TRACE * mixfixModule.cc (MixfixModule): call ProfileModule ctor * mixfixModule.hh (class MixfixModule): derive from ProfileModule * profileModule.hh (class ProfileModule): added decls for showProfile() and showFragmentProfile() * profileModule.cc (showFragmentProfile): added (showProfile): added * profileModule.hh (class ProfileModule): added decls for profileFragment() and updateFragmentInfo() * profileModule.cc (profileFragment): added (updateFragmentInfo): added 2002-04-01 Steven Eker * profileModule.hh: created * profileModule.cc: created * trial.cc (traceEndFragment): use *preEquation rather than variableInfo * userLevelRewritingContext.hh (class UserLevelRewritingContext): updated traceEndFragment() decl * interact.cc (segmentationFaultHandler): call _exit() rather than exit() because machine state could be very screwed up 2002-03-29 Steven Eker * mixfixParser.cc (parseSentence2): patch possible wrap around error in MSCP10 for highly ambiguous sentences; added DebugAdvisoryCheck() to look for this * trial.cc (traceBeginFragment): rewritten using preEquation and fragmentIndex rather than fragment (traceEndFragment): rewritten using preEquation and fragmentIndex rather than fragment * userLevelRewritingContext.hh (class UserLevelRewritingContext): updated traceBeginFragment() and traceEndFragment() decls to take const PreEquation* and an index rather than ConditionFragment* 2002-03-28 Steven Eker * preModule.hh (Parent): deleted static data member defaultImports * commands.y: use ModuleDatabase::setInclude() * moduleDatabase.hh: NameSet -> IntSet for simplicity * preModule.cc (finishModule): use getIncludes() * moduleDatabase.hh (getIncludes): added (getOmodIncludes): added (class ModuleDatabase): added decls for setInclude() and getOmodIncludes() * moduleDatabase.cc (setInclude): moved here from import.hh (setOmodInclude): added * interpreter.hh (Interpreter): removed creduce() friendship hack * preModule.hh (PreModule): deleted decl for parse() * interpreter.hh (Interpreter): added decl for parse() * commands.y: use Interpreter::parse() * interpreter.cc (parse): moved here from command.cc 2002-03-27 Steven Eker * preModule.cc (PreModule): don't clear isCompiled * preModule.hh (PreModule): delete all the decls for the compilation functions; deleted the various flag static data members; deleted data member isCompiled * compiler2.cc (invalidate): added * preModule.cc (regretToInform): call invalidate() * commands.y: use Interpreter::creduce() * interact.cc (commandLoop): removed hack to unlink executable * compiler2.cc (~Compiler): unlink executable * interpreter.hh (Interpreter): derive from Compiler (Interpreter): added decl for creduce() * execute2.cc (creduce): moved here * commands.y: is Interpreter versions of addSelected(), traceSelect(), breakSelect(), traceExclude(), printConceal() * interpreter.hh (class Interpreter): added data member selected; added decls for addSelected(), traceSelect(), breakSelect(), traceExclude(), printConceal() * interpreter.cc (addSelected): moved here from command.cc (traceSelect): moved here from command.cc (breakSelect): moved here from command.cc (traceExclude): moved here from command.cc (printConceal): moved here from command.cc * commands.y: don't call setShowStats(), setShowLoopStats(), setShowTiming(), setShowBreakdown(), setShowLoopTiming(), setShowCmd(), setAutoClearMemo(), setCompileCount() * preModule.hh (setShowStats): deleted (setShowLoopStats): deleted (setShowCmd): deleted (setShowTiming): deleted (setShowLoopTiming): deleted (setCompileCount): deleted (setAutoClearMemo): deleted * command.cc (selectModule): deleted * interpreter.cc (setCurrentModule): (Vector& version) now implement the guts of selectModule() rather than calling it (setCurrentModule): (PreModule* version) check if the new current module is really the same as the old current module * import.cc ((importModule): use getModule() (findModule): use getModule() * preModule.cc (finishModule): use insertModule() * preModule.hh (PreModule): deleted all continuation data members; deleted savedLoopSubject; deleted the decls for functions that were moved to Interpreter * interpreter.hh (class Interpreter): derive from class ModuleDatabase * compiler.cc (creduce): added hacks * command.cc (loseFocus): don't call clearContinueInfo() * moduleDatabase.hh: created * moduleDatabase.cc: created * interpreter.cc (setCurrentModule): call clearContinueInfo(); * interpreter.hh (setFlag): fixed bug where we were ignoring polarity * match2.cc (match): this -> currentModule * search2.cc (search): this -> currentModule * execute2.cc (reduce): fix bug: need to print currentModule and not this (rewrite): this -> currentModule (fRewrite): this -> currentModule * interpreter.hh (class Interpreter): added DEFAULT_FLAGS to enum Flags * interpreter.cc (Interpreter): use DEFAULT_FLAGS 2002-03-26 Steven Eker * commands.y: rewritten using CM and interpreter * bottom.y (cleanUpParser): call makeClean() * modules.y: rewritten using CM and interpreter * top.y: added #defined CM; commented out definition of currentModule * interpreter.hh (class Interpreter): added many decls * interpreter.cc (setCurrentModule): added PreModule* version (makeClean): added * match2.cc: created from PreModule's match.cc * search2.cc: created from PreModule's search.cc * loopMode2.cc: created from PreModule's loopMode.cc * interpreter.cc (setCurrentModule): added * interpreter.hh (getCurrentModule): added (class Interpreter): added decl for setCurrentModule() * execute2.cc: created from PreModule's execute.cc * interpreter.cc (Interpreter): initialize the new data members * interpreter.hh (setFlag): added (getFlag): added (class Interpreter): added enum Flags, together with a bunch of data members that were static data in PreModule * maudemlBuffer.cc (MaudemlBuffer): pass flushLevel = 1 * xmlBuffer.hh (class XmlBuffer): updated ctor decl; added data member flushLevel * xmlBuffer.cc (endElement): support flushLevel (XmlBuffer): set flushLevel ===================================Maude71a================================================== 2002-03-22 Steven Eker * execute.cc (endRewriting): use generateResult() * maudemlBuffer.cc (generate): (DagNode*) fixed bug with visit PointerSet use (generateResult): added * mixfix.hh: MaudeML_Buffer -> MaudemlBuffer, XML_Buffer -> XmlBuffer * search.cc (showSearchGraph): MaudeML_Buffer -> MaudemlBuffer * execute.cc (endRewriting): MaudeML_Buffer -> MaudemlBuffer * interpreter.cc (beginXmlLog): MaudeML_Buffer -> MaudemlBuffer * interpreter.hh (class Interpreter): MaudeML_Buffer -> MaudemlBuffer * maudemlBuffer.cc: was MaudeML_Buffer.cc * maudemlBuffer.hh: was MaudeML_Buffer.hh * xmlBuffer.cc: was XML_Buffer.cc * xmlBuffer.hh: was XML_Buffer.hh * MaudeML_Buffer.hh (class MaudeML_Buffer): added decls for below functions * MaudeML_Buffer.cc (generate): (DagNode* version) fixed opName bug in string case (generate): added Term* version (generate): added Rule* version (generate): added ConditionFragment* version (generateCondition): added * MaudeML_Buffer.hh (class MaudeML_Buffer): added decl for RewriteSequenceSearch* version of generate() * MaudeML_Buffer.cc (generate): added RewriteSequenceSearch* version * execute.cc (endRewriting): use getXmlBuffer() * main.hh: deleted decl for xmlBuffer global variable * main.cc: added def for global variable interpreter; deleted xmlBuffer global variable (main): support -xml-log= flag * main.hh: added global decl for interpreter * mixfix.hh: removed metalevel decls (should have gone long ago); added decls for classes SymbolType, XML_Buffer, MaudeML_Buffer and Interpreter * interpreter.cc: created * interpreter.hh: created 2002-03-20 Steven Eker * execute.cc (endRewriting): use xmlBuffer->generate() * main.hh: added decl for xmlBuffer global variable * main.cc: added xmlBuffer global variable * MaudeML_Buffer.cc: created * MaudeML_Buffer.hh (class MaudeML_Buffer): created * XML_Buffer.cc: const char* -> const string& throughout * XML_Buffer.hh: created const char* -> const string& * XML_Buffer.cc: created 2002-03-11 Steven Eker * preModule.cc: deleted explicit template instantiations * mixfixModule.cc: deleted explicit template instantiations * main.cc: deleted explicit template instantiations ===================================Maude71================================================== 2002-03-08 Steven Eker * autoWrapBuffer.cc: complete rewrite using new representation (breakLine): fix bug where we were always erasing buffer after printing it out * autoWrapBuffer.hh: rewritten using a string as the pendingBuffer; since we now handle escape sequences there is no bound on the growth of the pending buffer; keep pending width to hold the number of buffered chars excluding tabs and escape sequences * autoWrapBuffer.cc (~AutoWrapBuffer): deleted * autoWrapBuffer.hh (streambuf): added decl for handleChar() * autoWrapBuffer.cc (handleChar): added (overflow): don't call breakLine() if we are processing an escape sequence; since the escape sequence will not increase cursorPosition, any decision on inserting a newline can be deferred. Although a \n following an escape sequence is unlikely it is possible with the format attribute (overflow): use handleChar() (3 places) (resetCursor): clear inEscape flag (AutoWrapBuffer): call resetCursor() * prettyPrint.cc (printPrefixName): addded (prettyPrint): (both versions) use printPrefixName(), in prefix case execute 2nd format exstrcut after prefix name rather than after closing paren 2002-02-28 Steven Eker * entry.cc (newFancySymbol): ModelSymbol -> ModelCheckerSymbol; MODEL_SYMBOL -> MODEL_CHECKER_SYMBOL * specialSymbolTypes.cc (MACRO): ModelSymbol -> ModelCheckerSymbol; MODEL_SYMBOL -> MODEL_CHECKER_SYMBOL * symbolType.hh (class SymbolType): MODEL_SYMBOL -> MODEL_CHECKER_SYMBOL 2002-02-22 Steven Eker * specialSymbolTypes.cc: added SatSolverSymbol * entry.cc (newFancySymbol): added SatSolverSymbol * symbolType.hh (class SymbolType): added SAT_SOLVER_SYMBOL 2002-02-20 Steven Eker * main.cc (main): call isatty() on standard output when deciding whether to enable ANSI escape codes in default case 2002-02-14 Steven Eker * symbolType.hh (hasAllFlags): fixed nasty precedence bug * main.cc (main): replaced -no-escape flag with -ansi-color and -no-ansi-color 2002-02-13 Steven Eker * main.cc (main): handle -no-escape flag (main): don't print banner until we've handled flags * autoWrapBuffer.cc (AutoWrapBuffer): initialize inEscape (overflow): handle escape sequences * autoWrapBuffer.hh (streambuf): added data member inEscape * entry.cc (addPolymorph): allow format attribute for non-mixfix polymorphs (addOpDeclaration): allow format attribute for non-mixfix operators * prettyPrint.cc (prettyPrint): (Term and DagNode versions) support format attribute in not mixfix syntax case * mixfixModule.hh (class MixfixModule): added static data member attributeUsed * prettyPrint.cc (operator<<): (Term and DagNode versions) handle attributeUsed flag (fancySpace): set attributeUsed flag when attribute used * banner.cc (printBanner): colorized "Maude" * prettyPrint.cc (fancySpace): support colors, underlining, bold * ops.cc (checkFormatString): added characters for colors, underlining, bold and original 2002-02-12 Steven Eker * prelude.maude: metaMatch now takes a condition; added format attributes 2002-02-11 Steven Eker * prelude.maude: added op nil : -> EqCondition * match.cc (doMatching): call clearCount() 2002-02-07 Steven Eker * prettyPrint.cc (operator<<): (ConditionFragment version) rewritten to handle EqualityConditionFragment, SortTestConditionFragment, AssignmentConditionFragment and RewriteConditionFragment * mixfixModule.cc: added #includes for new classes * mixfixParser.cc (makeConditionFragment): rewritten to classes EqualityConditionFragment, SortTestConditionFragment, AssignmentConditionFragment and RewriteConditionFragment * importModule.cc (deepCopyCondition): rewritten to handle EqualityConditionFragment, SortTestConditionFragment, AssignmentConditionFragment and RewriteConditionFragment 2002-02-05 Steven Eker * quotedIdentifierOpSymbol.hh (class QuotedIdentifierOpSymbol): deleted static data member eagerStrategy * quotedIdentifierOpSymbol.cc (QuotedIdentifierOpSymbol): deleted strategy argument passed to FreeSymbol() * modules.y: fixed bug where we weren't able to parse "format" as an ordinary identifier since it was not in attrKeyword2 2002-02-04 Steven Eker * prettyPrint.cc (printTokens): fix off by 1 error in final fancySpace() call * mixfixModule.hh (class MixfixModule): updated decl for printTails() * prettyPrint.cc (printTails): handle formatted printing (prettyPrint): (both versions) new printTails() calling convention * mixfixModule.hh (class MixfixModule): updated decl for printTokens() * prettyPrint.cc (printTokens): handle formatted printing (prettyPrint): (both versions) new printTokens() calling convention * entry.cc (addPolymorph): check for bad format length; clear gather/prec/format flags if number of underscore is wrong (this may fix an unobserved bug) (addOpDeclaration): check for bad format length; clear gather/prec/format flags if number of underscore is wrong (this may fix an unobserved bug) * process.cc (processOps): pass format arg to addOpDeclaration() and addPolymorph() * mixfixModule.cc (copyPolymorph): copy format info * importModule.cc (donateOps): pass format to addOpDeclaration() * mixfixModule.hh (getFormat): added (class MixfixModule): added decl for getFormat(); udated decls for addOpDeclaration() and addPolymorph() * entry.cc (addOpDeclaration): support format arg (addPolymorph): support format arg 2002-02-01 Steven Eker * mixfixModule.hh (setPrintFormat): added (class MixfixModule): added format field to struct SymbolInfo * commands.y: added syntax for set print format on/off command * mixfixModule.hh (class MixfixModule): added static data member printFormat * preModule.hh: added decl for check FormatString() * ops.cc (checkFormatString): added * preModule.hh: added decl for setFormat(); added format field to struct OpDef * ops.cc (setFormat): added * modules.y: added syntax for format attribute * top.y: added token KW_FORMAT * lexer.flex: added format token * prettyPrint.cc (operator<<): (DagNode* and Term* versions) clear globalIndent * mixfixModule.hh (class MixfixModule): added static data member globalIndent; (class MixfixModule): added decl for fancySpace() * prettyPrint.cc (fancySpace): added * prelude.maude: simplify using ditto attribute * entry.cc (addOpDeclaration): deleted code that checked for redecl of a variable; added Assert() that this function doesn't handle variables anymore (addOpDeclaration): added check for illegal use of ditto with other attributes (addOpDeclaration): allow symbolTypes to differ if new symbolType just DITTO flag; check for use of ditto without previous declaration to refer to * command.cc (printOpDef): handle ditto attribute * symbolType.hh (class SymbolType): added DITTO to enum Flags * modules.y: added syntax for ditto attribute * top.y: added token KW_DITTO * lexer.flex: added ditto token * prettyPrint.cc (graphPrint): fixed bug where we weren't handling variables, floats and strings as special cases (graphPrint): fixed simalr bug for Qids * mixfixModule.cc (makeSpecialProductions): fix fall thru bug where CONTAINS_COLON fell into ENDS_IN_COLON, creating a spurious production 2002-01-31 Steven Eker * modules.y: rewritten using class SymbolType * ops.cc (addVarDecl): use setBasicType() * command.cc (printOpDef): rewritten using class SymbolType (showModule): rewritten using class SymbolType * mixfixModule.cc (specialNameToFlag): becomes specialNameToBasicType() * ops.cc (setFlag): rewritten using class SymbolType (setPrec): rewritten using class SymbolType (setGather): rewritten using class SymbolType (setStrat): rewritten using class SymbolType (addHook): rewritten using class SymbolType * fixUp.cc (fixUpSymbols): rewritten using class SymbolType * process.cc (checkOpTypes): rewritten using class SymbolType (computeOpTypes): rewritten using class SymbolType (processOps): rewritten using class SymbolType * preModule.hh (Parent): flags field in struct OpDef becomes symbolType * preModule.cc (OpDef): don't clear flags * importModule.cc (donateOps): rewritten using class SymbolType (fixUpDonatedOps): rewritten using class SymbolType * bufferPrint.cc (prettyPrint): rewritten using class SymbolType * prettyPrint.cc: rewritten using class SymbolType 2002-01-30 Steven Eker * specialSymbolTypes.cc (MACRO): use class SymbolType * symbolType.cc: created * symbolType.hh: created * entry.cc: rewritten using class SymbolType * mixfixModule.cc (findSymbol): don't take flags arguments (findSymbol): use getBasicType() (instantiateSortTest): use setBasicType() (instantiateVariable): use setBasicType() (instantiatePolymorph): use getBasicType() (copyPolymorph): use getBasicType() (computePrecAndGather): use hasFlag() (makeSymbolProductions): use hasFlag() and getBasicType() * mixfixModule.hh (class MixfixModule): deleted enum SymbolFlags; int flags replaced by SymbolType symbolType throughout * token.hh: ifdef LIBv3 for libstdc++-v3 * autoWrapBuffer.cc (sync): ifdef LIBv3 for libstdc++-v3 ===================================Maude70================================================== 2002-01-24 Steven Eker * top.y: declared KW_VERBOSE * lexer.flex: added KW_VERBOSE * commands.y: added syntax/semantics for set verbose on/off . 2002-01-23 Steven Eker * search.cc (doSearching): print a "No more solutions" message with timing info after last solution found 2002-01-21 Steven Eker * execute.cc (cont): limit == 0 is a no-op * lexer.flex: don't allow 0 in NUMBER_TOK * search.cc (printSearchTiming): use printStats() (doSearching): clear rewrite count stored in RewriteSequenceSearch context * preModule.hh: updated decl for printSearchTiming() * search.cc (printSearchTiming): print number of rewrites (doSearching): pass RewriteSequenceSearch* to printSearchTiming() (2 places) 2002-01-18 Steven Eker * lexer.flex: allo 0 to be recognized as a NUMBER_TOK in allow 0 to be recognized as a NUMBER in * search.cc (doSearching): use getSubstitition() rather than getContext() (showSearchPath): don't call getStateRule() on state 0 2001-12-21 Steven Eker * userLevelRewritingContext.hh (beAdoptedBy): added (class UserLevelRewritingContext): parent is no longer a const 2001-12-10 Steven Eker * autoWrapBuffer.cc (sync): sync() -> pubsync() (breakLine): xsputc() -> sputc() (2 places) (overflow): xsputc() -> sputc() (3 places) * interact.cc (segmentationFaultHandler): (...) -> int (interruptHandler): (...) -> (int) * entry.cc (newFancySymbol): replaced nested ?: with nested if-then-else to avoid problem with distinct pointers * token.hh: #include -> #include ===================================Maude69================================================== 2001-10-23 Steven Eker * prelude.maude: added trueTerm and falseTerm hooks to op _|=_ 2001-08-08 Steven Eker * search.cc (showSearchGraph): added * lexerAux.cc (getInput): fake a \n for files that don't end in \n in order that commands on the last line work properly, and so that we keep line numbers straight * trial.cc (traceBeginRuleTrial): use new handleDebug() convention * userLevelRewritingContext.cc (tracePreRuleRewrite): use new handleDebug() convention * userLevelRewritingContext.hh (class UserLevelRewritingContext): updated decl for handleDebug() * interact.cc (handleDebug): handle breaking on rule labels * userLevelRewritingContext.hh (dontTrace): delete old version * userLevelRewritingContext.cc (tracePreEqRewrite): use new dontTrace() (tracePreRuleRewrite): use new dontTrace(); don't check traceRuleFlag (tracePreScApplication): use new dontTrace() * trial.cc (traceBeginEqTrial): use new dontTrace() (traceBeginScTrial): use new dontTrace() (traceBeginRuleTrial): use new dontTrace(); don't check traceRuleFlag * userLevelRewritingContext.hh (dontTrace): added two new versions of dontTrace() 2001-06-05 Steven Eker * specialSymbolTypes.cc: added macro for ModelSymbol * entry.cc (newFancySymbol): handle ModelSymbol * mixfixModule.hh (class MixfixModule): added MODEL_SYMBOL to enum SymbolFlags 2001-05-14 Steven Eker * loopMode.cc (doLoop): don't call unprotect(); copy module into savedModule instead (loop): call startUsingModule() (doLoop): don't call clearContinueInfo(), clearTrialCount(), clearMemo() or protect() (contLoop): call startUsingModule() when we try to reinitialize 2001-05-11 Steven Eker * search.cc (doSearching): use UserLevelRewritingContext::aborted() * loopMode.cc (doLoop): use UserLevelRewritingContext::aborted() * match.cc (doMatching): use UserLevelRewritingContext::aborted() (match): use UserLevelRewritingContext::aborted() * execute.cc (endRewriting): use UserLevelRewritingContext::aborted() * userLevelRewritingContext.hh (aborted): added so that we can check the abortFlag in otehr classes of mixfix frontend without having a UserLevelRewritingContext object on which to make a virtual function call to traceAbort() * preModule.hh (Parent): updated decl for printStats() * execute.cc (printStats): take timingFlag (endRewriting): pass timing flag to printStats() * loopMode.cc (doLoop): pass timing flag to printStats() * search.cc (printSearchTiming): test showTiming and isRunning() * match.cc (printMatchTiming): test showTiming and isRunning() * execute.cc (printStats): test showTiming flag * timer.cc (Timer): don't test timingOn (start): don't test timingOn (stop): don't test timingOn (getTimes): don't test timingOn * timer.hh (class Timer): deleted timingOn static data member (setTiming): deleted (isRunning): added 2001-05-10 Steven Eker * search.cc (doSearching): always save state and module so that we can run showSearchPath() on it * preModule.hh (Parent): added decl for showSearchPath() * search.cc (showSearchPath): added * commands.y: added syntax for show path command * top.y: added token KW_PATH * lexer.flex: added keyword path * search.cc (doSearching): print state info with soluntions 2001-05-09 Steven Eker * preModule.hh: added decls for doSearching() and searchCont() * search.cc (doSearching): added (search): rewritten using startUsingModule() and doSearching() (searchCont): added * preModule.hh: added decl for data member savedRewriteSequenceSearch * execute.cc (clearContinueInfo): delete savedRewriteSequenceSearch * match.cc (doMatching): call clearContinueInfo(), clearDebug() and okToCollectGarbage() after we're done matching (match): rewritten using doMatching() and startUsingModule() (doMatching): take Timer& arg and call printMatchTiming() (doMatching): code cleaning * commands.y: make static call to cont(); don't use selectModule() * preModule.hh: make cont() static * execute.cc (cont): use continueFunc for simple function call * preModule.hh : updated decl for beginRewriting(); added decl for startUsingModule(); added decl for static data member savedModule; added static data members savedMatchSearchState and savedSolutionCount (Parent): made rewriteCont(), fRewriteCont(), matchCont() static; make ContinueFuncPtr type a simple pointer to functionn type * execute.cc (clearContinueInfo): unprotect savedModule (startUsingModule): added (beginRewriting): don't call clearTrialCount(), clearMemo(), protect() or clearContinueInfo() here (endRewriting): rewritten (reduce): call startUsingModule(); (rewriteCont): rewritten (rewrite): rewritten (fRewrite): rewritten (fRewriteCont): rewritten 2001-05-08 Steven Eker * loopMode.cc (doLoop): store &PreModule::ruleCont in continueFunc * preModule.hh: updated def for ContinueFuncPtr; added decls for rewriteCont() and fRewriteCont() * execute.cc (rewriteCont): added (fRewriteCont): added (fRewrite): pass &fRewriteCont to endRewriting() (rewrite): pass &rewriteCont to endRewriting() (cont): rewritten 2001-05-07 Steven Eker * match.cc (match): pass duty of garbage collecting pattern to MatchSearchState * preModule.hh: added decl for Term* version of makeDag() * mixfixModule.hh (class MixfixModule): added decl for Vector& version of printCondition() * prettyPrint.cc (printCondition): added const Vector& version (printCondition): use Vector& version * match.cc (match): print out condition when printing out command * search.cc (search): print command if showCmd flag set * match.cc (match): handle NONE rather than UNBOUNDED in no limit case * commands.y: pass NONE to match in no limit case * search.cc (search): use makeDag() * match.cc (match): use makeDag() * execute.cc (makeDag): added Term* version (makeDag): use Term* version 2001-05-04 Steven Eker * preModule.hh (Parent): delete static data member init * loopMode.cc (doLoop): use class timer * preModule.hh (Parent): updated decls for printStats() and endRewriting() * execute.cc (beginRewriting): don't call setitimer() (reduce): use class timer (rewrite): use class timer (fRewrite): use class timer (cont): use class timer (endRewriting): take Timer& arg (printStats): rewritten * preModule.hh (Parent): updated decls for printMatchTiming() and printSearchTiming() * search.cc (search): don't call setitimer(); use class Timer (printSearchTiming): use class Timer * match.cc (match): don't call setitimer(); use class Timer (printMatchTiming): use class Timer * interact.cc (setHandlers): don't ignore SIGALRM, SIGVTALRM, SIGPROF since these are handled by class Timer now * timer.cc: created * timer.hh: created 2001-05-03 Steven Eker * mixfixParser.cc (parseMatchCommand): handle such that condition (parseSearchCommand): handle such that condition * mixfixModule.hh (class MixfixModule): added SUCH_THAT to enum NonTerminal * mixfixModule.cc (makeComplexProductions): allow "s.t." and "such that" syntax for attching conditions to match and search commands * top.y: deleted decls for cTokenBarMatchLeq, cTokenBarMatchLeqColon, cTokenBarMatchLeqNumber, cTokenBarMatchLeqRight; delete static variable pattern * commands.y: deleted MATCH_LEQ and UNIFY_EQ from command mode token types; deleted nonterminals mNumberModuleTerm, mNumberModuleTerm1, mNumberModuleTerm2, mModuleAndTerm, mInEnd, cTokensBarMatchLeq, cTokensBarMatchLeqColon, cTokenBarMatchLeq, cTokenBarMatchLeqColon, cTokenBarMatchLeqNumber, cTokenBarMatchLeqRight * top.y: deleted tokens MATCH_LEQ and UNIFY_EQ * lexer.flex: deleted tokens "<=?" and "=?" from * mixfixParser.cc (parseMatchCommand): added * mixfixModule.hh (class MixfixModule): added decl for parseMatchCommand() * commands.y: changed syntax of match/xmatch commands to parse pattern and subject in a single bubble * preModule.hh (Parent): updated decl for match() * match.cc (printMatchTiming): moved here (match): moved here; now take single bubble argument and use parseMatchCommand() 2001-05-02 Steven Eker * preModule.hh: deleted decls for tryMatch() and dagNodeLt() * search.cc (tryMatch): deleted (search): support limit arg * preModule.hh: updated decl for search() * commands.y: support number in search command * userLevelRewritingContext.hh (class UserLevelRewritingContext): updated decl for printSubstitution() * userLevelRewritingContext.cc (printSubstitution): made Substitution arg a const ref * search.cc (search): rewritten using class RewriteSequenceSearch * mixfixParser.cc (parseSearchCommand): pass searchType via int& for simplicity * mixfixModule.cc (makeComplexProductions): use RewriteSequenceSearch::SearchType * mixfixModule.hh (class MixfixModule): deleted enum SearchType (class MixfixModule): updated decl for parseSearchCommand() * preModule.hh: added decl for tryMatch() * search.cc (tryMatch): added (search): rewritten using tryMatch() and supporting searchType 2001-05-01 Steven Eker * mixfixParser.cc (parseSearchCommand): handle SearchType arg * mixfixModule.hh (class MixfixModule): added enum SearchType (class MixfixModule): parseSearchCommand() decl takes searchType arg * search.cc (search): rewritten using parseSearchCommand() (search): check for variables that are bound before they are used in condition * mixfixModule.hh (class MixfixModule): added decl for parseSearchCommand() * mixfixParser.cc (parseSearchCommand): added * mixfixModule.cc (makeComplexProductions): added productions for SEARCH_CONNECTIVE, SEARCH_COMMAND and MATCH_COMMAND * mixfixModule.hh (class MixfixModule): added static data member gatherAnyAnyAny * mixfixModule.cc (makeComponentProductions): add productions for MATCH_PAIR and SEARCH_PAIR in the complexParser case * mixfixParser.cc (parseTerm): call makeGrammar() to make sure complex parser is set one way or the other * mixfixModule.hh (class MixfixModule): makeCommandProductions() decl becomes makeComplexProductions() (class MixfixModule): decl for nonTerminal() is no longer static * mixfixParser.cc (parseSentence2): don't test before calling makeGrammar() (parseCommand): call makeGrammar() to ensure we have a complex parser * prettyPrint.cc (showSummary): don't test before calling makeGrammar() since makeGrammar() now tests for th existence of parser (showSummary): use nonTerminal() to calculate number of nonterminals * mixfixModule.cc (makeGrammar): take complex flag; check for existence of appropriate kind of parser (makeCommandProductions): becomes makeComplexProductions() (nonTerminal): now depend on complexParser flag * mixfixModule.hh (class MixfixModule): split enum NonTerminal into complex and simple parts (class MixfixModule): added data member complexParser (class MixfixModule): makeGrammar() now takes complex flag 2001-04-27 Steven Eker * search.cc (search): rewritten using MatchSearchState and RewriteSearchState inseatd on OneStep 2001-04-26 Steven Eker * search.cc: removed various experimental crud and got old search facility working (doesn't handle new conditions correctly though) * execute.cc (match): use new MatchSearchState() interface; pattern and context are now local objects rather than pointers to objects on the heap that need to be garbage collected 2001-04-17 Steven Eker * mixfixModule.hh (class MixfixModule): printAttributes() made non-static * prettyPrint.cc (printAttributes): handle config, object and msg attributes * mixfixModule.cc (closeSignature): add object and message info to ConfigSymbols * mixfixModule.hh (class MixfixModule): added data members objectSymbols and messageSymbols * entry.cc (addOpDeclaration): handle OBJECT and MESSAGE flags (newFancySymbol): handle ConfigSymbol * mixfixModule.hh (class MixfixModule): added CONFIG, OBJECT and MESSAGE to enum SymbolFlags * modules.y: added syntax for config, obj and msg attributes * top.y: added tokens KW_CONFIG, KW_OBJ, KW_MSG * lexer.flex (id): added keywords obj, msg and config 2001-04-04 Steven Eker * preModule.hh: added decl for breakSelect() * command.cc (breakSelect): added * commands.y: added set break on/off command; added break select/deselect command . * top.y: aded token KW_BREAK * lexer.flex: added keyword break * userLevelRewritingContext.hh (class UserLevelRewritingContext): added decls for selectBreakSymbols(), setBreakFlag() * interact.cc (selectBreakSymbols): added * userLevelRewritingContext.hh (setBreakFlag): added * interact.cc (commandLoop): take breakFlag into account when calling setTraceStatus() (handleDebug): take breakFlag into account when calling setTraceStatus() * userLevelRewritingContext.hh (clearDebug): take breakFlag into account when calling setTraceStatus() (setTraceFlag): take breakFlag into account when calling setTraceStatus() * interact.cc (handleDebug): support breakFlag * userLevelRewritingContext.hh (class UserLevelRewritingContext): updated decl for handleDebug(); added static data members breakFlag and breakSymbols * userLevelRewritingContext.cc (tracePreEqRewrite): pass redex to handleDebug() (tracePreRuleRewrite): pass redex to handleDebug() (tracePreScApplication): pass subject to handleDebug() * trial.cc (traceBeginEqTrial): pass subject to handleDebug() (traceBeginRuleTrial): pass subject to handleDebug() (traceBeginScTrial): pass subject to handleDebug() ===================================Engine65================================================== 2001-03-30 Steven Eker * preModule.hh (Parent): delete decl for eRewrite() * lexer.flex: use yyInt64 and stringToInt64() * top.y: number and number2 now Int64; yyInt becomes yyInt64 * commands.y: use Token::codeToInt64() throughout * execute.cc (eRewrite): deleted * command.cc (printOpDef): handle frozen attribute * prettyPrint.cc (printAttributes): handle frozen attribute 2001-03-29 Steven Eker * prelude.maude: added ops frozen and metaFrewrite 2001-03-28 Steven Eker * loopMode.cc (doLoop): call resetRules() * execute.cc (beginRewriting): call clearContinueInfo() (rewrite): call resetRules() (fRewrite): call resetRules() * loopMode.cc (doLoop): rewritten * preModule.hh (Parent): updated endRewriting() decl * execute.cc (cont): save continueFunc and savedContext on the stack in case they get overwritten in the debugger; only restore them if we did not abort (endRewriting): rewritten; now handle store of savedContext and continueFunc (rewrite): rewritten (fRewrite): rewritten (cont): rewritten (reduce): rewritten 2001-03-27 Steven Eker * entry.cc (addOpDeclaration): call setFrozen() for frozen symbols * mixfixModule.hh (class MixfixModule): added FROZEN flag to enum SymbolFlags * modules.y: added semantics for frozen attribute * execute.cc (cont): limit is now an Int64 * commands.y: use new rewrite(), eRewrite() and cont() conventions * preModule.hh (Parent): updated decls for rewrite(), eRewrite() and cont() * execute.cc (beginRewriting): don't do saved.setNode(0) (rewrite): use NONE (-1) rather than UNBOUNDED for no limit case, limit is now an Int64 (eRewrite): ditto * command.cc (loseFocus): call clearContinueInfo() rather than doing saved.setNode(0) * preModule.hh: deleted static member saved * loopMode.cc (loop): moved here (contLoop2): moved here (contLoop): moved here (doLoop): moved here (printBubble): moved here (contLoop2): rewritten using savedContext rather than saved (doLoop): rewritten using savedContext rather than saved 2001-03-26 Steven Eker * main.cc (main): support interactive flag; call createRootBuffer() after processing flags and pass forceInteractive flag * lexerAux.cc (handleEof): fixed bug: only include a pending file if we have returned to the top level. (cleanUpLexer): use rootInteractive flag rather than isatty() (createRootBuffer): take forceInteractive flag; set rootInteractive flag (includeFile): pass false to setInteractive() rather than using isatty() (handleEof): only call UserLevelRewritingContext::setInteractive() after we have returned to the top level; use rootInteractive flag rather than isatty() 2001-03-23 Steven Eker * execute.cc (endRewriting): call clearContinueInfo() if module disappears after being unprotected; don't save result (reduce): call clearContinueInfo() * preModule.hh (Parent): added decl for clearContinueInfo() * execute.cc (rewrite): rewritten using savedContext and continueFunc (cont): rewritten using savedContext and continueFunc (fRewrite): rewritten using savedContext and continueFunc (cont): call clearCount() (clearContinueInfo): added * preModule.hh: added static data member savedContext, typedef ContinueFuncPtr and static data member continueFunc * execute.cc (cont): support fairContinue() (fRewrite): use savedContext 2001-03-22 Steven Eker * execute.cc (fRewrite): take gas argument * preModule.hh: updated decl for fRewrite() * commands.y: updated all token rules now that "," is a special token; added syntax for [,] in : . updated syntax for frewrite command * lexer.flex: added "," to tokens that are treated as special in command mode * modules.y: support frozen attribute syntax * preModule.hh: updated decl for printStats(); added static data member showBreakdown (setShowBreakdown): added * execute.cc (endRewriting): pass context to printStats() (doLoop): pass context to printStats() (printStats): support showBreakdown flag 2001-03-20 Steven Eker * top.y: added tokens KW_FROZEN and KW_BREAKDOWN * lexer.flex: added keywords frozen and breakdown 2001-03-16 Steven Eker * execute.cc (endRewriting): count() -> getTotalCount() (doLoop): count() -> getTotalCount() * quotedIdentifierOpSymbol.cc (eqRewrite): incrementCount() -> incrementEqCount() (3 places) 2001-03-13 Steven Eker * preModule.hh (Parent): added decl for fRewrite() * execute.cc (fRewrite): added * commands.y: added syntax for frewrite command 2001-03-06 Steven Eker * preModule.hh (Parent): added decl for eRewrite() * execute.cc (eRewrite): added * commands.y: added syntax for erewite command * top.y: added tokens KW_EREWRITE, KW_FREWRITE, KW_OREWRITE * lexer.flex: added keywords erewrite, frewrite and orewrite 2001-02-22 Steven Eker * importModule.cc (ImportModule): removed unneeded #includes * preModule.cc: removed unneeded #includes ===================================Engine65================================================== 2001-02-21 Steven Eker * fixUp.cc (fixUpSymbols): use dynamic_cast to check that symbol we're about to add an identity to is really a BinarySymbol and not a FreeSymbol created to fix up an error detected earlier 2001-02-20 Steven Eker * descentFunctions.cc (dagifySubstitution): fixed nasty bug where we were failing to delete last created DagRoot if the substitution was badly sorted - this leads to dag nodes that are still reachable after their module (and symbols) have been deleted, causing chaos during the mark phase of the next garbage collect (metaXmatch): fixed bug where we we're counting rewrites done during solve phase of matching (metaMatch): symmetric bug fix 2001-02-14 Steven Eker * metaDownOps.cc (downOpDecl): handle polymorphs having arbitrary junk in "Universal" positions of meta op decl (downOpDecls): static_cast -> safeCast (downBubbleSpec): static_cast -> safeCast (3 places) (downOpDecl): static_cast -> safeCast * metaDownFixUps.cc (fixUpPolymorph): implemented * metaDownOps.cc (downOpDecl): don't call setLineNumber() in normal case (addOpDeclaration() does this if needed) (downOpDecl): added IssueAdvisory() * metaDownFixUps.cc: IssueWarning() becomes IssueAdvisory() (downOpHook): added AdvisoryCheck() (fixUpBubble): simplified using downOpHook() * metaDownOps.cc (downAttr): IssueWarning() becomes IssueAdvisory() * mixfixModule.cc (findSymbol): only try to make a sort test operator if trueSymbol and falseSymbol are defined; actually if they're not both defined we won't get the grammar rules for sort tests but that doesn't stop the user from trying to make them at the meta level, causing a seg fault * metaDownOps.cc (downAttrSet): handle identity arg (downAttr): handle identity arg * metaLevel.hh (class MetaLevel): updated many decls * metaDownOps.cc (downOpDecl): rewritten using new addComplexSymbol() calls (downHookList): renamed to checkHookList() (downIdHook): renamed to checkHook() and rewritten using specialNameToFlag() (downAttr): use checkHookList() * mixfixModule.hh (class MixfixModule): added POLYMORPH to enum SymbolFlags * ops.cc (addHook): simplified using specialNameToFlag() * mixfixModule.hh (class MixfixModule): added decl for specialNameToFlag() * mixfixModule.cc (specialNameToFlag): added * metaDownFixUps.cc (downFixUps): meta fixup stuff moved here * metaDownOps.cc (downHook): handle idHookSymbol case (fixUpPolymorph): added (downFixUpBubble): renamed to fixUpBubble() 2001-02-13 Steven Eker * metaDownOps.cc (downDefaultFixUp): renamed to fixUpSpecialSymbol() (downFixUps): rewritten * metaLevel.hh (class MetaLevel): added ComplexSymbolType * metaModule.cc: rewritten * metaModule.hh: rewritten * metaDownOps.cc: move op/attr/special functions here * importModule.cc (fixUpDonatedOps): allow the case where a donated symbol has both an identity and a special * fixUp.cc (fixUpSymbols): allow a symbol to have both an identity and a special 2001-02-12 Steven Eker * metaLevel.hh (class MetaLevel): added decls for downDefaultFixUp(), downHook(), downOpHook() * metaDown.cc (downOpDecl): use HAS_ATTACHMENTS and don't consider originator flag for ops that have identity or HAS_ATTACHMENTS (downDefaultFixUp): added (downHook): added (downOpHook): added (downFixUps): call downDefaultFixUp() * fixUp.cc (fixUpSymbols): no longer treat QUOTED_IDENTIFIER as a special case * mixfixModule.hh (class MixfixModule): added QUOTED_IDENTIFIER to HAS_ATTACHMENTS disjuction * fixUp.cc (fixUpSymbols): no longer consider originator flag for HAS_ATTACHMENTS symbols (fixUpSymbols): qidBaseSymbol -> qidSymbol (fixUpSymbols): no longer consider originator flag identities; check for and issue warning in case of clashing identities * metaLevelOpSymbol.cc (copyAttachments): added test to protect from multiple calls * metaLevel.cc (bind): Term* version: avoid potential memory leak by using BIND_TERM() macro * interact.cc (commandLoop): flush() cout before input in the case we're no going to call displayPrompt() 2001-02-08 Steven Eker * metaDown.cc (downIdHook): rewritten using specialSymbolTypes.cc * ops.cc (addHook): rewritten using specialSymbolTypes.cc * specialSymbolTypes.cc: created * metaDown.cc: qidBaseSymbol -> qidSymbol throughout (downMachineInt): machineIntBaseSymbol -> machineIntSymbol * metaUp.cc: qidBaseSymbol -> qidSymbol throughout (upMachineInt): machineIntBaseSymbol -> machineIntSymbol * loopSymbol.cc: qidBaseSymbol -> qidSymbol throughout * loopSymbol.hh (class LoopSymbol): qidBaseSymbol -> qidSymbol * metaLevelSignature.cc (MACRO): qidBaseSymbol -> qidSymbol, machineIntBaseSymbol -> machineIntSymbol 2001-02-06 Steven Eker * metaLevelOpSymbol.hh (class MetaLevelOpSymbol): added decls for getCachedRewriteSearchState() and getCachedMatchSearchState(); deleted decl for getCachedState() * descentFunctions.cc (getCachedRewriteSearchState): added (getCachedMatchSearchState): added (getCachedMatchSearchState): added (getCachedState): deleted (metaApply): use getCachedRewriteSearchState() and class RewriteSearchState (metaXapply): use getCachedRewriteSearchState() and class RewriteSearchState (metaMatch): use getCachedMatchSearchState() and class MatchSearchState (metaXmatch): use getCachedMatchSearchState() and class MatchSearchState * execute.cc (match): SearchState -> MatchSearchState * descentFunctions.cc (metaApply): don't pass arg to findNextRewrite(); use addInCount() (metaXapply): don't pass arg to findNextRewrite(); use addInCount() 2001-02-05 Steven Eker * descentFunctions.cc (metaMatch): use getPattern(), getContext() instead of getMatch() (metaXmatch): use getPattern(), getContext() instead of getMatch() (metaApply): use getRule(), getReplacement() and getContext() instead of getResult() (metaXapply): use getRule(), getReplacement() and getContext() instead of getResult() * execute.cc (match): use getPattern(), getContext(), getExtensionInfo() instead of getMatch() * descentFunctions.cc (metaXapply): use PositionState::rebuildDag() (metaApply): use PositionState::rebuildDag() (metaXmatch): use PositionState::rebuildDag() 2001-02-02 Steven Eker * descentFunctions.cc (metaXmatch): getTerm() -> getLhs() * mixfixParser.cc (makeStatement): simplified using default last arg of Equation ctor (makeStatement): simplified using default last arg of Rule and SortConstraint ctors 2001-02-01 Steven Eker * preModule.hh: added decl for printSearchTiming() * search.cc (printSearchTiming): added (search): simplified using printSearchTiming() * execute.cc (match): call clearDebug() since the user may have interrupted rewriting and may have set some debug state (match): check context->traceAbort() after calling state.findNextMatch() (two places) since the user may have interrupted rewriting and then issued an abort command (match): check context->traceAbort() after calling computeTrueSort() (match): call clearMemo() if needed; move context->traceAbort() after contruction of state to aviod memory leak 2001-01-29 Steven Eker * execute.cc (match): handle extension info * descentFunctions.cc (metaXmatch): pass dummy 3rd arg to getMatch() (metaMatch): pass dummy 3rd arg to getMatch() * execute.cc (match): reimplemented using classes Pattern and SearchState 2001-01-23 Steven Eker * lexer.flex: fixed extremely minor bug in that the Maude identifiers .*** and .--- were being treated at end-of-command . followed by comment in CMD_MODE * metaLevelSignature.cc (MACRO): deleted existingModuleSymbol * metaDown.cc (downModule): deleted existingModuleSymbol code 2001-01-19 Steven Eker * quotedIdentifierSymbol.hh (class QuotedIdentifierSymbol): deleted declarations for fixUp() and copyFixUp() * quotedIdentifierSymbol.cc (fixUp): deleted (copyFixUp): deleted * importModule.cc (fixUpDonatedOps): use copyAttachments() in QUOTED_IDENTIFIER case * fixUp.cc (fixUpSymbols): use defaultFixUp() in QUOTED_IDENTIFIER case * quotedIdentifierSymbol.hh (class QuotedIdentifierSymbol): added decls for attachData() and copyAttachments() * quotedIdentifierSymbol.cc (attachData): added (attachData): added (COPY_SORT): added (copyAttachments): added * loopSymbol.cc (attachData): call FreeSymbol::attachData() (copyAttachments): simplified using COPY_SYMBOL and COPY_TERM; call FreeSymbol::copyAttachments() * quotedIdentifierOpSymbol.cc (eqRewrite): use CODE() * quotedIdentifierOpSymbol.hh (class QuotedIdentifierOpSymbol): deleted enum OpType * quotedIdentifierOpSymbol.cc (attachData): don't handle name and type operations (eqRewrite): don't handle name and type operations (copyAttachments): simplified using COPY_SYMBOL and COPY_TERM; call FreeSymbol::copyAttachments() (attachData): simplified using BIND_OP; call FreeSymbol::attachData() (attachSymbol): call FreeSymbol::attachSymbol() 2001-01-18 Steven Eker * preModule.cc (getFlatModule): need to call resetImports() after importStatements() regardless of what happens. This fixes a nasty bug where if we imported statements from the same included module twice in a row (to different importers) without an intervening signature importation the second importantion would quietly fail (because the flag indicate that the statemenst have already been imported) and the second importer would not get the statements. 2001-01-17 Steven Eker * prelude.maude: getName() and getType() are now defined in maude rather than being builtin 2001-01-16 Steven Eker * metaLevelOpSymbol.cc (attachSymbol): simplified using bind() return value (attachTerm): simplified using bind() return value * metaLevel.hh (class MetaLevel): updated decls for bind() (both versions) * metaLevel.cc (bind): return bool (both versions) * metaLevelOpSymbol.hh (class MetaLevelOpSymbol): deleted decls for fixUp(), copyFixUp() * metaLevelOpSymbol.cc (attachSymbol): simplified using BIND_SYMBOL() (fixUp): deleted (copyFixUp): deleted 2001-01-15 Steven Eker * loopSymbol.hh (class LoopSymbol): deleted decls for fixUp(), copyFixUp() * loopSymbol.cc (attachSymbol): simplified using BIND_SYMBOL() (fixUp): deleted (copyFixUp): deleted * quotedIdentifierOpSymbol.hh (class QuotedIdentifierOpSymbol): deleted decls for fixUp(), copyFixUp() * quotedIdentifierOpSymbol.cc (fixUp): deleted (copyFixUp): deleted (attachSymbol): simplified using BIND_SYMBOL() 2001-01-12 Steven Eker * importModule.cc (fixUpDonatedOps): removed special handling for LOOP_SYMBOL * fixUp.cc (fixUpSymbols): removed special handling for LOOP_SYMBOL * mixfixModule.hh (class MixfixModule): added LOOP_SYMBOL to HAS_ATTACHMENTS * loopSymbol.cc (LoopSymbol): clear qidBaseSymbol, nilQidListSymbol, qidListSymbol (copyAttachments): added (attachSymbol): added 2001-01-11 Steven Eker * loopSymbol.cc (attachData): added * loopSymbol.hh (class LoopSymbol): added decls for attachData(), attachSymbol(), copyAttachments() * importModule.cc (fixUpDonatedOps): don't handle QUOTED_IDENTIFIER_OP as a special case * fixUp.cc (fixUpSymbols): don't handle QUOTED_IDENTIFIER_OP as a special case * quotedIdentifierOpSymbol.hh (class QuotedIdentifierOpSymbol): added decls for attachData(), attachSymbol(), copyAttachments() (class QuotedIdentifierOpSymbol): make op an int * quotedIdentifierOpSymbol.cc (QuotedIdentifierOpSymbol): initialize op, quotedIdentifierSymbol, stringSymbol (attachData): added (attachSymbol): added (copyAttachments): added * fixUp.cc (fixUpSymbols): don't handle META_LEVEL_OP_SYMBOL as a special case * importModule.cc (fixUpDonatedOps): don't handle META_LEVEL_OP_SYMBOL as a special case * metaLevelOpSymbol.hh (class MetaLevelOpSymbol): added decls for attachSymbol(), attachTerm(), copyAttachments(), okToBind() * metaLevelOpSymbol.cc (postInterSymbolPass): set metaLevel = shareWith->metaLevel here since we no that this pass will only happen after all fix ups have been done (eqRewrite): don't test and set metaLevel here because in the shareWith case it will already have been done in postInterSymbolPass (copyAttachments): added (attachTerm): added (attachSymbol): added (okToBind): added 2001-01-10 Steven Eker * metaLevelOpSymbol.hh (class MetaLevelOpSymbol): added decl for attachData() * metaLevelOpSymbol.cc (attachData): added * fixUp.cc (fixUpSymbols): use defaultFixUp() for MACHINE_INTEGER_OP, MACHINE_FLOAT_OP, STRING_OP cases * preModule.hh (Parent): added decl for defaultFixUp() * fixUp.cc (defaultFixUp): added * importModule.cc (fixUpDonatedOps): use copyAttachments() in MACHINE_INTEGER_OP, MACHINE_FLOAT_OP, STRING_OP cases 2001-01-05 Steven Eker * descentFunctions.cc (metaXmatch): fixed memory leak where if we obtained a state with remove() but didn't use it because of solutionNr we were not deleting it. (metaMatch): fixed symmetric memory leak (getCachedState): added (metaXapply): fixed memory leak using getCachedState() (metaMatch): use getCachedState() (metaApply): use getCachedState() 2001-01-03 Steven Eker * descentFunctions.cc (metaXmatch): implemented * metaLevel.hh (class MetaLevel): added decls for upNoMatchPair() and upMatchPair() * metaUp.cc (upMatchPair): added (upNoMatchPair): added * descentFunctions.cc (metaMatch): implemented * metaLevel.hh (class MetaLevel): added decl for upNoMatchSubst() * metaUp.cc (upNoMatchSubst): added * metaLevel.hh (class MetaLevel): made upSubstition() public 2000-12-22 Steven Eker * descentFunctions.cc (metaXapply): implemented (metaApply): add 1 to rewrite count for apply here (metaXapply): add 1 to rewrite count for apply here (metaXapply): clone the replacement so we have a dagnode that is only pointed to from one place - so context will build correctly (metaXapply): bring minDepth and maxDepth into int range * metaUp.cc (upFailure4Tuple): added * metaLevel.hh (class MetaLevel): added decls for upResult4Tuple(), upFailure4Tuple(), upContext() * metaUp.cc (upContext): added (upResult4Tuple): added * descentFunctions.cc (metaApply): delete state if we fail 2000-12-21 Steven Eker * descentFunctions.cc (metaApply): added 3 loops to destruct stuff we've finishded with * metaOpCache.cc (insert): must clone metaOp to avoid overwriting (remove): fixed bug where we were return incorrect lastSolutionNr 2000-12-20 Steven Eker * metaOpCache.hh: created * descentFunctions.cc (metaApply): rewritten using MetaOpCache * metaLevel.hh (class MetaLevel): updated decl for downModule() * metaDown.cc (downModule): commented out existingModule code; return MetaModule* rather than ImportModule* * metaModule.hh (class MetaModule): derive from MetaOpCache * metaOpCache.cc: created * descentFunctions.cc (metaWellFormedSubstitution): use DagRoot * metaLevelOpSymbol.hh (class MetaLevelOpSymbol): updated decl for dagifySubstitution() * descentFunctions.cc (dagifySubstitution): use DagRoot (metaApply): use DagRoot for substitutions 2000-12-19 Steven Eker * descentFunctions.cc (metaApply): use new SearchState interface; fix bug where we weren't counting objectContext2 rewrites 2000-12-18 Steven Eker * metaUp.cc (upTerm): const correctness (upAssignment): const correctness * metaLevel.hh (class MetaLevel): const correctness for upTerm() and upAssignment() * quotedIdentifierTerm.hh (getIdIndex): made const * descentFunctions.cc (metaApply): pass substitution and variable infor to upResultTriple() * metaLevel.hh (class MetaLevel): added decls for upSubstition(), upAssignment(); updated decl for upResultTriple() * metaUp.cc (upSubstition): added (upAssignment): added (upSubstition): use upSubstition() * descentFunctions.cc (metaApply): call setInitialSubstitution() 2000-12-14 Steven Eker * descentFunctions.cc (metaApply): make sure state goes out of scope and is deleted before we delete objectContext since ~SearchState writes into this context (can we avoid doing this?) * metaLevel.hh (class MetaLevel): added decls for upResultTriple() and upFailureTriple() * metaUp.cc (upResultTriple): added (upFailureTriple): added * metaLevelOpSymbol.hh (class MetaLevelOpSymbol): added dec for term2RewritingContext() 2000-12-06 Steven Eker * descentFunctions.cc (term2RewritingContext): added 2000-12-05 Steven Eker * descentFunctions.cc (metaWellFormedSubstitution): call dagifySubstitution() (dagifySubstitution): added * metaLevelOpSymbol.hh (class MetaLevelOpSymbol): added decl for noDuplicates() * descentFunctions.cc (noDuplicates): added (metaWellFormedSubstitution): use noDuplicates 2000-12-04 Steven Eker * descentFunctions.cc (metaWellFormedTerm): fixed memory leak where we weren't destructed term (metaWellFormedSubstition): added * descentSignature.cc (MACRO): added decl for metaWellFormedSubstitution * metaDown.cc (downSubstitution): rewritten to treat variables as terms (downAssignment): rewritten to treat variables as terms 2000-11-28 Steven Eker * descentSignature.cc (MACRO): increased the number of args for metaXapply and metaXmatch 2000-11-20 Steven Eker * lexerAux.cc (eatComment): `( and `) no longer count for balancing parens in multiline comments * execute.cc (printBubble): rewritten to do the right thing with \`( etc 2000-11-14 Steven Eker * metaLevelSignature.cc (MACRO): delete decls for membPredSymbol and lazyMembPredSymbol * metaDown.cc (downTerm): commented out special case code for SORT_TEST operators * metaUp.cc (upDagNode): commented out special case code for SORT_TEST operators (upTerm): commented out special case code for SORT_TEST operators * mixfixModule.cc (findSymbol): check for sort tests * metaLevelOpSymbol.hh (class MetaLevelOpSymbol): added decls for metaMaximalSorts() and metaMinimalSorts() * descentSignature.cc (MACRO): added decls for metaMaximalSorts and metaMinimalSorts * descentFunctions.cc (metaMinimalSorts): added (metaMaximalSorts): added * metaLevelOpSymbol.hh (class MetaLevelOpSymbol): added decl for metaGetKinds() * descentFunctions.cc (metaGetKinds): added * descentSignature.cc: added decl for metaGetKinds * metaLevel.hh (class MetaLevel): added decl for upKindSet() * metaUp.cc (upKindSet): added * metaLevelSignature.cc (MACRO): added decls for emptyKindSetSymbol and kindSetSymbol * descentSignature.cc (MACRO): added decl for metaGetKind * metaLevelOpSymbol.hh (class MetaLevelOpSymbol): added decl for metaGetKind() * descentFunctions.cc (metaGetKind): added 2000-11-13 Steven Eker * descentSignature.cc (MACRO): added decls for metaWellFormedModule and metaWellFormedTerm * metaLevelOpSymbol.hh (class MetaLevelOpSymbol): added decls for metaWellFormedModule() and metaWellFormedTerm() * descentFunctions.cc (metaWellFormedModule): added (metaWellFormedTerm): added 2000-11-10 Steven Eker * userLevelRewritingContext.hh (class UserLevelRewritingContext): updated decls for traceBeginFragment() and traceEndFragment() * trial.cc (traceEndTrial): check abortFlag before printing message (traceExhausted): check abortFlag before printing message (traceBeginFragment): take trialRef argument and test it and abortFlag before printing message (traceEndFragment): take trialRef argument and test it and abortFlag before printing message ===================================Engine64================================================== 2000-11-08 Steven Eker * execute.cc (printBubble): rewritten to not print spaces arround special characters 2000-11-01 Steven Eker * descentFunctions.cc (metaLeastSort): rewritten to calculate semantic sort 2000-10-24 Steven Eker * descentFunctions.cc (metaParse): use new upAmbiguity() * metaLevel.hh (class MetaLevel): updated decl for upAmbiguity() * metaUp.cc (upAmbiguity): now take Term*s as arguments * descentFunctions.cc (metaParse): use Term* version of upResultPair() * metaLevel.hh (class MetaLevel): added decl for Term* version of upResultPair() * metaUp.cc (upResultPair): added Term* version * metaLevel.hh (class MetaLevel): added decl for upTerm() * metaUp.cc (upTerm): added * descentFunctions.cc (metaParse): rewritten with new semantics (metaSortLeq): don't call FreeSymbol::eqRewrite() (metaSameKind): don't call FreeSymbol::eqRewrite() * metaLevel.hh (class MetaLevel): added decl for downComponent() * metaDown.cc (downComponent): added * descentSignature.cc (MACRO): metaParse now take 3 arguments * metaLevelSignature.cc (MACRO): added decl for anyTypeSymbol * mixfixModule.hh (class MixfixModule): added decl for parseTerm2() (class MixfixModule): added decl for parseSentence2() * mixfixParser.cc (parseSentence2): added (parseSentence): rewritten in terms of parseSentence2() (parseTerm): allow for parseSentence() returning -1 (parseStatement): allow for parseSentence() returning -1 (parseCommand): allow for parseSentence() returning -1 (parseTerm2): added 2000-10-11 Steven Eker * metaUp.cc (upDagNode): fix bug: Vector args(2) cannot be static because of recursion 2000-10-10 Steven Eker * metaLevelOpSymbol.hh (class MetaLevelOpSymbol): deleted data member op; deleted enum OpType * metaLevelOpSymbol.cc (fixUp): use descentSignature.cc to set descentFunction * descentSignature.cc: created * descentFunctions.cc (metaApply): added stub (metaXapply): added stub (metaMatch): added stub (metaXmatch): added stub * metaLevelOpSymbol.hh (class MetaLevelOpSymbol): deleted decls for errorRewrite() and errorRewrite2() (class MetaLevelOpSymbol): added decls for metaXapply(), metaMatch() and metaXmatch() * metaLevelOpSymbol.cc (eqRewrite): call FreeSymbol::eqRewrite() if our descent function fails * metaLevelSignature.cc: updated noParseSymbol, added ambiguitySymbol, deleted all error constructors * metaLevel.hh (class MetaLevel): added decl for upAmbiguity(); deleted decl for upErrorResultPair(); updated decl for upNoParse() * metaUp.cc (upErrorResultPair): deleted (upMachineInt): added (upNoParse): take badTokenIndex arg (upAmbiguity): added * descentFunctions.cc: descent functions moved here (metaReduce): don't rewrite in error case (metaRewrite): don't rewrite in error case (metaParse): don't rewrite in error case * metaLevelOpSymbol.cc (eqRewrite): greatly simplified using descentFunction pointer to memberFunction 2000-10-09 Steven Eker * token.cc (checkForSpecialProperty): handle null strings rather than asserting that they don't arise ===================================Engine63================================================== 2000-09-14 Steven Eker * bufferPrint.cc (prettyPrint): ugly hack to print variables correctly * metaLevel.hh (class MetaLevel): added decl for upQidList() * metaUp.cc (upQidList): added * metaLevelOpSymbol.cc (metaPrettyPrint): rewritten * metaLevel.hh (class MetaLevel): added decl for upNoParse() * metaUp.cc (upNoParse): added * metaLevelOpSymbol.cc (metaParse): rewritten * metaLevel.hh (class MetaLevel): added decl for upSortSet() * metaUp.cc (upSortSet): added * metaLevelOpSymbol.cc (metaCompleteName): added (eqRewrite): call metaCompleteName() (metaGlbSorts): rewritten (metaLesserSorts): rewritten * metaLevel.hh (class MetaLevel): made downSimpleSort() and downType() public * metaLevelOpSymbol.hh (class MetaLevelOpSymbol): META_SAME_COMPONENT -> META_SAME_KIND; metaSameComponent() -> metaSameKind() * metaLevelOpSymbol.cc (metaLeastSort): rewritten (metaSameComponent): becomes metaSameKind() (metaSameKind): use downType() (fixUp): sameComponent -> sameKind (fixUp): deleted sortInKind (eqRewrite): call metaSameKind() * metaLevel.hh (class MetaLevel): make upType() public * metaLevelOpSymbol.cc (metaSortLeq): rewritten (metaSameComponent): rewritten * metaLevel.hh (class MetaLevel): added decl for upBool() * metaUp.cc (upDagNode): handle MACHINE_FLOAT case (upBool): added * metaDown.cc (downTerm): added FLOAT case * mixfixModule.hh (class MixfixModule): added decl for findMachineFloatSymbol() * mixfixModule.cc (findMachineFloatSymbol): added 2000-09-13 Steven Eker * metaDown.cc (downTerm): support Strings; added missing break * mixfixModule.hh (class MixfixModule): added decl for findStringSymbol() * mixfixModule.cc (findStringSymbol): added * metaDown.cc (downTerm): use downType2() (2 places) * metaLevel.hh (class MetaLevel): added decl for downType2() * metaDown.cc (downType2): added (downType): use downType2() * metaLevelOpSymbol.cc (metaRewrite): rewritten * metaDown.cc (downTerm): fixed bug where we were useing id rather than cName * token.cc (doubleToCode): fill in auxProperties (int64ToCode): fill in auxProperties * metaLevelOpSymbol.cc (metaReduce): rewritten * metaUp.cc (upResultPair): added (upType): added (upErrorResultPair): added * metaLevel.hh (class MetaLevel): added decls for upQid(), upJoin(), upConstant(), upVariable(), upDagNode() * metaUp.cc: created 2000-09-12 Steven Eker * metaLevel.hh (class MetaLevel): deleted downVariable() * metaDown.cc (downTerm): rewritten (downVariable): deleted * metaLevel.hh (class MetaLevel): added decls for downCondition(), downConditionFragment() * metaDown.cc (downCondition): added (downConditionFragment): added (downMembAx): use downCondition() (downEquation): use downCondition() (downRule): use downCondition() * token.cc (splitKind): added * token.hh (class Token): added decl for splitKind() * metaLevel.hh (class MetaLevel): added decls for downTypeList() and downType() * metaDown.cc (downMachineIntList): don't recognize empty MachineInt lists (downTypeList): added (downType): added (downOpDecl): use downTypeList() and downType() 2000-09-11 Steven Eker * metaLevel.hh (class MetaLevel): added decl for downSort() (class MetaLevel): deleted decls for downQidSet() downVarDecls(), downVarDecl() * metaDown.cc (downModule): don't call downVarDecls(); vhanged arg number for md, eq and rl parts (downImport): handle protectingSymbol (downQidSet): becomes downSortSet() (downSort): added (downSortSet): becomes donwSorts() (downVarDecls): deleted (downVarDecl): deleted * metaLevelOpSymbol.hh (class MetaLevelOpSymbol): added META_XAPPLY, META_MATCH, META_XMATCH, META_COMPLETE_NAME, META_SORT_IN_KIND to enum OpType * metaLevelOpSymbol.cc (fixUp): added meta-xapply, meta-match, meta-xmatch, completeName, sortInKind * metaLevelSignature.cc (MACRO): deleted nilMachineIntListSymbol (MACRO): complete rewrite 2000-09-08 Steven Eker * quotedIdentifierOpSymbol.hh (class QuotedIdentifierOpSymbol): enum OpType simplified * quotedIdentifierOpSymbol.cc: implemented "constantName", "constantType", "variableName" and "variableType" operations (fixUp): simplified just to "name" and "type" due to subsort polymorphic overloading * quotedIdentifierOpSymbol.hh (class QuotedIdentifierOpSymbol): added new constants to enum OpType * quotedIdentifierOpSymbol.cc (fixUp): added opNames "constantName", "constantType", "variableName" and "variableType" * token.cc (split): split og '.' as well as ':' * quotedIdentifierSymbol.cc (determineSort): use Token::auxProperty() * token.hh (class Token): added decls for computeAuxProperty() and skipSortName() * token.cc (computeAuxProperty): added (skipSortName): added (checkForSpecialProperty): call computeAuxProperty() * token.hh (class Token): removed CONTAINS_DOT, BRACKETED from enum SpecialProperties; (class Token): added enum AuxProperties (class Token): added static data member auxProperties (auxProperty): added (class Token): added decl for auxProperty() * importModule.cc (fixUpDonatedOps): do incremental fixup for symbols with QUOTED_IDENTIFIER flag 2000-09-06 Steven Eker * quotedIdentifierSymbol.cc (copyFixUp): fix bug where we were translating our sorts rather than original sorts * fixUp.cc (fixUpSymbols): call fixUp() on QuotedIdentifierSymbols * importModule.cc (fixUpDonatedOps): call copyFixUp() on QuotedIdentifierSymbols * metaLevelSignature.cc (MACRO): NA_Symbol* -> QuotedIdentifierSymbol* * metaDown.cc (downTerm): NA_Symbol* -> QuotedIdentifierSymbol* (downFixUpBubble): NA_Symbol* -> QuotedIdentifierSymbol* (2 places) * fixUp.cc (fixUpSymbols): cast to QuotedIdentifierSymbol* (3 places) * entry.cc (newFancySymbol): create new QuotedIdentifierSymbol * mixfixParser.cc (makeTerm): cast to QuotedIdentifierSymbol* * mixfixModule.cc (findQuotedIdentifierSymbol): cast to and return QuotedIdentifierSymbol* (copyFixUpBubbleSpec): cast to QuotedIdentifierSymbol* (fixUpBubbleSpec): 2nd arg is now a QuotedIdentifierSymbol* * mixfixModule.hh (class MixfixModule): updated decl for fixUpBubbleSpec() (class MixfixModule): updated decl for findQuotedIdentifierSymbol() (class MixfixModule): qidSymbol in struct BubbleSpec becomes a QuotedIdentifierSymbol* * loopSymbol.cc (fixUp): first arg is now a QuotedIdentifierSymbol* (copyFixUp): cast to QuotedIdentifierSymbol* * loopSymbol.hh (class LoopSymbol): qidBaseSymbol becomes a QuotedIdentifierSymbol (class LoopSymbol): updated fixUp() decl * quotedIdentifierOpSymbol.cc (fixUp): 2nd arg now a QuotedIdentifierSymbol* (copyFixUp): cast to QuotedIdentifierSymbol* * quotedIdentifierOpSymbol.hh (class QuotedIdentifierOpSymbol): updated decl for fixUp(); quotedIdentifierSymbol is now a QuotedIdentifierSymbol* * quotedIdentifierDagNode.cc (QuotedIdentifierDagNode): first arg is now a QuotedIdentifierSymbol* (overwriteWithClone): cast to QuotedIdentifierSymbol* (makeClone): cast to QuotedIdentifierSymbol* * quotedIdentifierDagNode.hh (class QuotedIdentifierDagNode): updated ctor decl * quotedIdentifierTerm.cc (QuotedIdentifierTerm): first arg is now a QuotedIdentifierSymbol* (deepCopy2): cast to QuotedIdentifierSymbol* (overwriteWithDagNode): cast to QuotedIdentifierSymbol* (makeDagNode): cast to QuotedIdentifierSymbol* * quotedIdentifierTerm.hh (class QuotedIdentifierTerm): updated ctor decl * mixfix.hh: added class QuotedIdentifierSymbol * quotedIdentifierSymbol.cc: created * token.hh (class Token): added CONTAINS_DOT and BRACKETED * quotedIdentifierSymbol.hh: created 2000-08-30 Steven Eker * prettyPrint.cc (showAll): don't display kinds (showSorts): use new formula for nrSorts * command.cc (parse): use Term::getSort() rather than ComplexSort() * prettyPrint.cc (showOps): don't use ComplexSort() * compiler.cc (creduce): use DagNode::getSort() rather than ComplexSort() * execute.cc (endRewriting): use DagNode::getSort() rather than ComplexSort() (doLoop): use DagNode::getSort() rather than ComplexSort() * userLevelRewritingContext.cc (tracePreScApplication): use DagNode::getSort() rather than ComplexSort() * prettyPrint.cc (operator<<): treat nil sort pointer as "(SORT UNKNOWN)" * command.cc (operator<<): don't put space after comma in kind name * mixfixParser.cc (makeTerm): allow sortName to be NONE in MAKE_VARIABLE case * token.cc (split): return suffix as NONE for tokens ending in : * mixfixModule.hh (class MixfixModule): added ENDS_IN_COLON_NT to enum NonTerminal; BASE = -22 * mixfixModule.cc (makeComponentProductions): support ( ) . [ ] disambiguation (makeComponentProductions): added syntax for sort lists (makeSpecialProductions): handle ENDS_IN_COLON * mixfixModule.hh (class MixfixModule): added SORT_LIST_TYPE to enum NonTerminalType; NUMBER_OF_TYPES = 5 * prettyPrint.cc (showSummary): fix # user sorts, now that sorts and error sorts (kinds) end up in sort vector (showComponents): don't use ComplexSort (showSorts): don't output information on kinds (showSummary): call makeGrammar if we don't have any productions * fixUp.cc (findHookSymbol): look for ~> rather than -> in op-hooks ===================================Engine62================================================== 2000-08-29 Steven Eker * top.y: added decl for indentifier; added decl for ',' * modules.y: added identifier nonterminal * lexer.flex: ',' now returns ',' rather than IDENTIFIER in ID_MODE * preModule.hh (Parent): added friend decl for operator<< * command.cc (printOpDef): use types rathe than domainAndRangeTokens (operator<<): added for PreModule::Type * preModule.hh (Parent): added decls for checkOpTypes(), checkType(), computeOpTypes(), computeType() * process.cc (checkOpTypes): added (checkType): added (computeOpTypes): added (computeType): added (processSorts): don't look up sorts occuring in op declarations (process): call checkOpTypes() and computeOpTypes() 2000-08-28 Steven Eker * ops.cc (addVarDecl): now just take a token * modules.y: deleted listBarColon; added varNameList * preModule.hh: addSortSpec() -> addType(); struct SortSpec -> struct type * ops.cc (addSortSpec): becomes addType() (addType): rewrittenusing types nomenclature (convertSortsToKinds): rewritten using types nomenclature * modules.y: sortSpec -> type; sortSpecList -> typeList; addSortSpec() -> addType() * top.y: deleted tokenBarArrow; arrow declared type ; sortToken declared type * preModule.hh (Parent): added decls for addSortSpec() and convertSortsToKinds(); deleted decl for setDomainAndRange() * ops.cc (setDomainAndRange): deleted (convertSortsToKinds): added * lexer.flex: added KW_PARTIAL * top.y: added KW_PARTIAL * modules.y: added PARTIAL to most nonterminal that accept ARROW; deleted nonterminal tokenBarArrow 2000-08-25 Steven Eker * modules.y: deleted listBarArrow; added arrow and call to convertSortsToKinds() 2000-08-22 Steven Eker * modules.y: added non-terminals attrKeyword2, sortToken, sortTokens and sortSpec added non-terminal sortSpecList and redefined domainRangeAttr * ops.cc (addSortSpec): added * preModule.hh: added struct SortSpec; domainAndRangeTokens becomes sortSpecs 2000-07-31 Steven Eker * importModule.cc (donateOps): use an ImportTranslation to translate sorts in operator decls so that error sorts are translated correctly * importTranslation.cc (translate): (Sort* version): moved here (translate): (Sort* version): translate error sorts correctly * prettyPrint.cc (operator<<): added Sort* version * metaFastUp.cc (fastUpSort): removed hack for handling union sorts since they should no longer exist ===================================Engine61================================================== 2000-07-28 Steven Eker * trial.cc (traceBeginFragment): handle firstAttempt arg * userLevelRewritingContext.hh (class UserLevelRewritingContext): added firstAttempt arg to traceBeginFragment() decl * prettyPrint.cc (operator<<): (ConditionFragment*) version (printCondition): use ConditionFragment* operator<< * trial.cc (traceBeginFragment): added (traceEndFragment): added * userLevelRewritingContext.hh (class UserLevelRewritingContext): added decls for traceBeginFragment() and traceEndFragment() * execute.cc (match): use getNrProtectedVariables() instead of nrVariables() (2 places) * userLevelRewritingContext.cc (printSubstitution): use getNrRealVariables() instead of nrVariables(); now assert that we're not dealing with an abstraction variable * metaFastUp.cc (fastUpSubstitution): use getNrRealVariables() instead of nrVariables() * metaLevelOpSymbol.cc (metaApply): use getNrRealVariables() instead of nrVariables() (initializeSubstitution): use getNrRealVariables() instead of nrVariables() 2000-07-25 Steven Eker * command.cc (dump): added * preModule.hh (Parent): added decl for dump() * commands.y: added dump command * top.y: added KW_DUMP * lexer.flex: added KW_DUMP 2000-07-21 Steven Eker * userLevelRewritingContext.cc (printSubstitution): handle unbound variables 2000-07-19 Steven Eker * mixfixModule.cc (instantiateSortTest): changed concrete syntax for sort test operators * mixfixModule.hh (class MixfixModule): update friend decl * prettyPrint.cc (printCondition): print /\ bewteen fragments (operator<<): term version now takes const 2nd arg (operator<<): cast away const for the moment * mixfixModule.hh (class MixfixModule): updated makeCondition() decl; added makeConditionFragment() decl * mixfixParser.cc (makeCondition): rewritten (makeConditionFragment): added (makeStatement): use new makeCondition() * mixfixModule.cc (makeStatementProductions): generate productiosn for complex conditions (makeBoolProductions): now we allow condition fragments just to be a bool 2000-07-18 Steven Eker * mixfixModule.cc (MixfixModule): initialize assign, colon3 and wedge (makeBoolProductions): use COLON2_PAIR in place of COLON_PAIR and COLON3_PAIR in place of COLON2_PAIR * mixfixModule.hh (class MixfixModule): added static data members assign, colon3 and wedge (class MixfixModule): added COLON3_PAIR, ASSIGN_PAIR, RULE_CONDITION, CONDITION_FRAGMENT, RULE_CONDITION_FRAGMENT to enum NonTerminal * userLevelRewritingContext.cc (tracePreScApplication): use getSort() * prettyPrint.cc (operator<<): use getLhs(), getSort() (operator<<): use getLhs(), getRhs() (operator<<): use getLhs(), getRhs(), getLabel() * metaLevelOpSymbol.cc (metaApply): use getLabel() * importModule.cc (deepCopyCondition): use Sort* translate() (donateStatements): use Sort* translate() (donateStatements): use deepCopyCondition() (3 places) and new statement ctors (donateStatements): use getLhs(), getRhs() (donateStatements): use getSort() (donateStatements): use getLabel() * importTranslation.cc (translate): simplified using new translate() functions * importTranslation.hh (class ImportTranslation): added decl for Sort* version of translate() (translate): (Sort* version) added (class ImportTranslation): added decl for ConnectedComponent* version of translate() (translate): (ConnectedComponent* version) added 2000-07-17 Steven Eker * importModule.hh (class ImportModule): added decl for deepCopyCondition() * importModule.cc (deepCopyCondition): added * mixfixParser.cc (makeStatement): use new Rule and SortConstraint ctors * mixfixModule.hh (class MixfixModule): added decl for printCondition() * prettyPrint.cc (printCondition): added (operator<<): (Rule, Equation and SortConstraint versions) use printCondition() 2000-07-14 Steven Eker * mixfixParser.cc (makeStatement): use new Equation ctor 2000-06-28 Steven Eker * mixfixModule.hh (class MixfixModule): changed overloadedMachineFloats from set to set * prettyPrint.cc (prettyPrint): handle pseudo variables (both versions) * mixfixParser.cc (parseSentence): use findSort() * mixfixModule.cc (makeSpecialProductions): use findSort() * entry.cc (addSort): rewritten (addOpDeclaration): use findSort() to check for existance of sort * mixfixModule.cc (findSort): rewritten using map * mixfixModule.hh (class MixfixModule): changed sortNames from an IntSet to a map * entry.cc (addOpDeclaration): check for pseudo variables * mixfixModule.hh (class MixfixModule): added PSEUDO_VARIABLE to InternalFlags * entry.cc (newFancySymbol): no longer create variable symbols here * lexerAux.cc (eatComment): use outputLine() * fileTable.hh (class FileTable): added decl for outputLine() * fileTable.cc (beginModule): use outputLine() (outputLine): added * lexerAux.cc (eatComment): handle OBJ3 style pass-through comments * lexer.flex: treat ---> equal to ***> and replace char with yyless(0); treat --- equal to *** * mixfixModule.hh (class MixfixModule): added decl for printVariable() * prettyPrint.cc (printVariable): added (prettyPrint): use printVariable() (both versions) * mixfixModule.hh (class MixfixModule): added decl for setPrintWithAliases() and static data member printWithAliases (setPrintWithAliases): added * lexer.flex: added KW_ALIASES; made paren synonym for parens * top.y: added KW_ALIASES * commands.y: added syntax for print with aliases on/off . * userLevelRewritingContext.cc (printSubstitution): use const_cast<> default pretty printer is used for variable term * mixfixModule.cc (makeSymbolProductions): need to use if-then-continue after all since we can makeGrammar() at any time now that parsers get deleted and reconstructed * mixfixModule.hh (class MixfixModule): deleted INVISIBLE from enum SymbolFlags; deleted decl for findInvisibleVariable() * mixfixModule.cc (makeSymbolProductions): check for VARIABLE rather than INVISIBLE; use Assert() that than if-then-continue since these kind of symbols should not have be created prior to generating the grammar (findSymbol): no need to check for INVISIBLE symbols now (findInvisibleVariable): deleted * entry.cc (addOpDeclaration): removed uses of INVISIBLE flag 2000-06-27 Steven Eker * prettyPrint.cc (showVars): use variableAliases * mixfixModule.cc (instantiateVariable): cannot use variableTokenCode since we may not have made the grammar (nowadays it's only made when we need to parse something); instead we use sort->id() - ugly but it should never be seen by user * importTranslation.cc (translate): use instantiateVariable() * importModule.cc (donateOps): check for variable and sort test symbols; these shound no longer be among user symbols to be donated * mixfixParser.cc (makeTerm): handle MAKE_VARIABLE_FROM_ALIAS * mixfixModule.hh (class MixfixModule): added decl for makeVariableProductions() * mixfixModule.cc (makeVariableProductions): added (makeGrammar): call makeVariableProductions() * mixfixModule.hh (class MixfixModule): added decl for addVariableAlias() * entry.cc (addVariableAlias): added * mixfixModule.hh (class MixfixModule): added variableAliases data member * process.cc (processOps): use addVariableAlias() * prettyPrint.cc (prettyPrint): support variables (both versions) * mixfixModule.cc (instantiateVariable): translate variableTokenCode to actual variable token code * token.cc (checkForSpecialProperty): get CONTAINS_COLON, ENDS_IN_COLON the right way around (extractMixfix): need to do processing on tokens with CONTAINS_COLON and ENDS_IN_COLON otherwise we could lose mixfix syntax for sort test operators 2000-06-26 Steven Eker * mixfixModule.hh (class MixfixModule): added decl for instantiateSortTest() * mixfixModule.cc (instantiateVariable): added * mixfixParser.cc (parseSentence): handle undeclared variables (makeTerm): handle makeVariable * mixfixModule.cc (makeComponentProductions): fill out variableTokenCode and add productions for undeclared variables * mixfixModule.hh (class MixfixModule): added data members variableTokenCode and variableBase * token.hh (class Token): added decl for split * token.cc (split): added * mixfixModule.hh (class MixfixModule): added MAKE_VARIABLE and MAKE_VARIABLE_FROM_ALIAS to enum Actions * mixfixModule.cc (makeSpecialProductions): added code for ::= X:Foo where X:Foo is known token * token.cc (checkForSpecialProperty): check for colons * token.hh (class Token): added special properties CONTAINS_COLON and ENDS_IN_COLON * userLevelRewritingContext.cc (printSubstitution): use VariableTerm* instead of VariableSymbol*; use getSort() (printSubstitution): use safeCast() ===================================Engine57================================================== 2000-06-19 Steven Eker * fixUp.cc (fixUpSymbols): pass decFloatSymbol to string op fixUp() 2000-06-13 Steven Eker * fixUp.cc (fixUpSymbols): pass machineFloatSymbol to string op fixUp() 2000-06-12 Steven Eker * fixUp.cc (fixUpSymbols): pass machineIntegerSymbol to fix up of MachineFloatOpSymbol * importModule.cc (fixUpDonatedOps): handle importation of MACHINE_FLOAT_OPs * fixUp.cc (fixUpSymbols): support MACHINE_FLOAT_OP * mixfixModule.hh (class MixfixModule): added FLOAT_NT to enum NonTerminal * mixfixModule.cc (makeSpecialProductions): support floats * token.hh (class Token): added LAST_PROPERTY to enum SpecialProperties * mixfixModule.cc (makeSymbolProductions): support MACHINE_FLOAT * mixfixModule.hh (class MixfixModule): added MAKE_MACHINE_FLOAT to enum Actions * mixfixParser.cc (makeTerm): support MAKE_MACHINE_INT * bufferPrint.cc (prettyPrint): support machine floats * prettyPrint.cc (prettyPrint): (both versions) support machine floats * token.hh (class Token): added decls for codeToDouble() and doubleToCode() * token.cc (codeToDouble): added (doubleToCode): added * entry.cc (addOpDeclaration): update machineFloatSymbols (newFancySymbol): support MACHINE_FLOAT and MACHINE_FLOAT_OP * mixfixModule.hh (class MixfixModule): added data members overloadedMachineFloats and machineFloatSymbols (class MixfixModule): added PSEUDO_MACHINE_FLOAT to enum InternalFlags * entry.cc (addOpDeclaration): added check for pseudo machine floats * ops.cc (addHook): added MachineFloatSymbol and MachineFloatOpSymbol hooks 2000-06-09 Steven Eker * mixfixModule.hh (class MixfixModule): added MACHINE_FLOAT and MACHINE_FLOAT_OP to enum SymbolFlags * token.cc (checkForSpecialProperty): added identification for Floats * token.hh (class Token): added FLOAT to enum SpecialProperties 2000-05-23 Steven Eker * metaDown.cc (downModule): check for bad module after closing sort set and after downing fixups 2000-05-19 Steven Eker * token.cc (bubbleToPrefixNameCode): fixed nasty bug where we were putting ` at start 2000-05-17 Steven Eker * token.cc (extractMixfix): rewritten to handle strings * token.hh (class Token): deleted decl for prefixNameCode() * token.cc (prefixNameCode): deleted prefixNameCode() * ops.cc (addOpDecl): no longer treat one token as a special case * fixUp.cc (findHookSymbol): use bubbleToPrefixNameCode() * command.cc (addSelected): use bubbleToPrefixNameCode() * token.hh (makePrefixName): use bubbleToPrefixNameCode() (class Token): added decl for bubbleToPrefixNameCode() * token.cc (ropeToPrefixNameCode): handle quoted strings within rope (bubbleToPrefixNameCode): added * lexer.flex: redefined maudeId to allow multiple double quoted strings with in a maudeId * quotedIdentifierOpSymbol.cc (eqRewrite): use ropeToPrefixNameCode() * token.hh (class Token): added decl for ropeToPrefixNameCode() * token.cc (ropeToPrefixNameCode): added 2000-05-16 Steven Eker * fixUp.cc (fixUpSymbols): don't pass machineIntegerSymbol, trueTerm and falseTerm to QuotedIdentifierOpSymbol * quotedIdentifierOpSymbol.cc (postInterSymbolPass): deleted (copyFixUp): don't copy trueTerm and falseTerm * quotedIdentifierOpSymbol.hh (class QuotedIdentifierOpSymbol): deleted decls for reset() and postInterSymbolPass(); updated decl for fixUp() * quotedIdentifierOpSymbol.cc (fixUp): don't set trueTerm and falseTerm (reset): deleted * quotedIdentifierOpSymbol.hh (class QuotedIdentifierOpSymbol): deleted data members trueTerm and falseTerm * quotedIdentifierOpSymbol.cc (fixUp): don't set machineIntegerSymbol; don't handle CONC, INDEX, STRIP, CONVERT and LESS_THAN (copyFixUp): don't copy machineIntegerSymbol (eqRewrite): don't handle CONC, INDEX, STRIP, CONVERT and LESS_THAN * quotedIdentifierOpSymbol.hh (class QuotedIdentifierOpSymbol): deleted data member machineIntegerSymbol; (class QuotedIdentifierOpSymbol): updated fixUp() decl (class QuotedIdentifierOpSymbol): deleted CONC, INDEX, STRIP, CONVERT and LESS_THAN from enum OpType * fixUp.cc (fixUpSymbols): support stringBaseSymbol for QuotedIdentiferOpSymbols * quotedIdentifierOpSymbol.cc (fixUp): hanle stringSymbol arg (copyFixUp): copy stringSymbol (eqRewrite): added QID and STRING operations * quotedIdentifierOpSymbol.hh (class QuotedIdentifierOpSymbol): added data member stringSymbol; (class QuotedIdentifierOpSymbol): updated fixUp() decl * quotedIdentifierOpSymbol.cc (fixUp): added support for STRING and QID * quotedIdentifierOpSymbol.hh (class QuotedIdentifierOpSymbol): added STRING and QID to enum OpType * token.cc (checkForSpecialProperty): use stringToInt64() to decide if a token could represent a MachineInt * quotedIdentifierOpSymbol.cc (eqRewrite): use new int64ToString() * metaFastUp.cc (fastUpTerm): (both versions) use int64ToCode() * bufferPrint.cc: use int64ToCode() * token.hh (class Token): int64ToString() decl becomes int64ToCode() * token.cc (codeToInt64): use stringToInt64() (int64ToString): becomes int64ToCode(); (int64ToCode): use int64ToString() 2000-05-15 Steven Eker * token.cc (ropeToString): support \a (alert/bell) and \v (vertical tab) (codeToRope): support \a (alert/bell) and \v (vertical tab) * lexer.flex: exclude control chars from stringContent; fix \\" bug; exclude control chars from normal token -> maudeId, stringToken -> stringId, regularToken -> regularId; use RETURN(*yytext) in 2 places 2000-05-12 Steven Eker * lexer.flex: reformulated notion of token to make it simpler and to exclude "s except as part of a double quoted identifier (or quoted double quoted identifier (actually token really corresponds to MaudeId in other discussions) 2000-05-08 Steven Eker * modules.y: use setLatexMacro() * preModule.hh (Parent): added decl for setLatexMacro() * ops.cc (setLatexMacro): added * preModule.hh: added latexMacro field to struct OpDef 2000-05-04 Steven Eker * lexerAux.cc (lexerLatexMode): clear latexCode * lexer.flex: use latexCode variable to assemble latex string, to avoid what looks tike a flex bug when we try to assemble it implicitly in yytext 2000-05-03 Steven Eker * top.y: added token decl for LATEX_TOK * modules.y: use lexerLatexMode() * lexerAux.cc (lexerLatexMode): added * lexer.flex: added start condition LATEX_MODE * compiler.cc (fullCompile): changed names for environment variables; don't unlink source files ifdef ANNOTATE 2000-04-25 Steven Eker * entry.cc (newFancySymbol): use class StringSymbol * fixUp.cc (fixUpSymbols): use StringSymbol* * mixfixParser.cc (makeTerm): use StringSymbol* 2000-04-24 Steven Eker * token.cc (ropeToString): alway generate 3 octal digits for numeric escape codes (codeToRope): only look at max 3 octal digits afer \; don't use strtol() * entry.cc (addOpDeclaration): clear any axioms flags if we fail to create a fancy symbol * mixfixModule.hh (class MixfixModule): added AXIOMS to enum SymbolFlags * fixUp.cc (fixUpSymbols): use dynamic_cast() since there is no guarentee that our symbol is not a FreeSymbol (due to an earlier error); this fixes a nasty bug. * autoWrapBuffer.cc (AutoWrapBuffer): initialize seenBackSlash and inString (overflow): update seenBackSlash and inString; only treat space, ",", [, (, and { as special if !inString (resetCursor): clear seenBackQuote, seenBackSlash and inString (overflow): return EOF if our arg is EOF * autoWrapBuffer.hh (class AutoWrapBuffer): added data members seenBackSlash and inString; seenBackQuote made a Bool 2000-04-19 Steven Eker * mixfixModule.cc (findMachineIntegerSymbol): moved here; no longer inline (findQuotedIdentifierSymbol): moved here; no longer inline * bufferPrint.cc (prettyPrint): use machineIntegerSymbols instead of machineIntegerComponents and quotedIdentifierSymbols instead of quotedIdentifierComponents; use new interface to overloadedQuotedIdentifiers * prettyPrint.cc (prettyPrint): (both versions) use machineIntegerSymbols instead of machineIntegerComponents and quotedIdentifierSymbols instead of quotedIdentifierComponents; use new interface to overloadedQuotedIdentifiers * entry.cc (addOpDeclaration): use new machineIntegerSymbols def * mixfixModule.hh (class MixfixModule): quotedIdentifierSymbols and machineIntegerSymbols become map<>s; overloadedQuotedIdentifiers becomes a set<>; machineIntegerComponents and quotedIdentifierComponents deleted (findMachineIntegerSymbol): rewritten using new machineIntegerSymbols def; made const; made arg const ptr (findQuotedIdentifierSymbol): rewritten using new machineIntegerSymbols def; made const; made arg const ptr * bufferPrint.cc (prettyPrint): handle strings and pseudo strings * prettyPrint.cc (prettyPrint): (Term* version) added code for string case (prettyPrint): (DagNode* version) use new ropeToString() interface * token.hh (class Token): updated decl for ropeToString() * token.cc (ropeToString): now built result in string arg for efficiency 2000-04-18 Steven Eker * prettyPrint.cc (prettyPrint): use stringSymbols.size() rather than stringComponents.cardinality * entry.cc (addOpDeclaration): fill out stringSymbols rather than stringComponents * mixfixModule.hh (class MixfixModule): added stringSymbols, commented out stringComponents; * prettyPrint.cc (prettyPrint): (DagNode* version) do string and pseudo-string disambiguation * entry.cc (addOpDeclaration): fill in overloadedStrings; set PSEUDO_STRING flag if needed (addOpDeclaration): add entry to stringComponents when needed * mixfixModule.hh (class MixfixModule): added data members overloadedStrings and stringComponents * token.cc (codeToRope): handle \t and \b (ropeToString): handle \t and \b (ropeToString): cast unprintable chars to to make sure we don't get negative numbers when converting to octal; only generate needed number of octal digits. (ropeToString): now "\0" is handled by default case code * fixUp.cc (fixUpSymbols): fixed bug where we were setting falseterm instead of notFoundTerm * token.cc (codeToRope): initialize seenBackslash 2000-04-17 Steven Eker * prettyPrint.cc (prettyPrint): use Token::ropeToString (DagNode* version) * mixfixParser.cc: use Token::codeToRope() * token.cc (codeToRope): added (ropeToString): added * token.hh (class Token): added decls for codeToRope() and ropeToString() * prettyPrint.cc (prettyPrint): fixed bug where we were check flags rather tha iflags for PSEUDO_QUOTED_IDENTIFIER (prettyPrint): crude handling of strings (DagNode* version) * mixfixParser.cc (makeTerm): added MAKE_STRING case * mixfixModule.hh (class MixfixModule): added MAKE_STRING to enum Actions * mixfixModule.cc (makeSpecialProductions): added production for new "anonymous string" ("[ STRING ]") token (makeSymbolProductions): added productions for string base symbol(s) * mixfixModule.hh (class MixfixModule): added STRING_NT to enum NonTerminal * mixfixModule.cc (makeSpecialProductions): add special productions for identifiers that look like strings * lexer.flex: recognize string tokens properly * token.cc (prefixNameCode): don't process single tokens that are STRINGS * lexer.flex: fixed stringCont def so that we can have spaces in strings * token.cc (extractMixfix): don't try to extract mixfix syntax for tokens with special properties * token.hh (class Token): added STRING to enum SpecialProperties * token.cc (checkForSpecialProperty): added recognition for strings 2000-04-14 Steven Eker * importModule.cc (fixUpDonatedOps): handle StringOpSymbol * fixUp.cc (fixUpSymbols): handle StringOpSymbol 2000-04-12 Steven Eker * ops.cc (addHook): recognize StringSymbol and StringOpSymbol hooks * entry.cc (newFancySymbol): handle STRING and STRING_OP flags * lexer.flex: STRING -> STRING_TOK * top.y: STRING -> STRING_TOK * entry.cc (addOpDeclaration): use iflags thoughout (addPolymorph): clear iflags * mixfixModule.cc (instantiateSortTest): set iflags (copyPolymorph): copy iflags (computePrecAndGather): use iflags thoughout * bufferPrint.cc (prettyPrint): use iflags thoughout * prettyPrint.cc (prettyPrint): (both versions) use iflags thoughout * mixfixModule.hh (class MixfixModule): added enum InternalFlags to take LEFT_BARE, RIGHT_BARE, ADHOC_OVERLOADED, DOMAIN_OVERLOADED, RANGE_OVERLOADED, PSEUDO_MACHINE_INTEGER, PSEUDO_QUOTED_IDENTIFIER; removed these from enum SymbolFlags; renumbered both enums (class MixfixModule): META_LEVEL_OP deleted (class MixfixModule): added PSEUDO_STRING to InternalFlags (class MixfixModule): added STRING and STRING_OP to SymbolFlags (class MixfixModule): rearranged SymbolInfo and added iflags ===================================Maude 1.0.5 finished======================================= 2000-04-05 Steven Eker * main.cc (findFile): look for .fm extension * interact.cc: sunos 4 ifdef 2000-03-30 Steven Eker * mixfixParser.cc (parseCommand): ifdef'd (makeCommand): ifdef'd 2000-03-29 Steven Eker * prettyPrint.cc (graphPrint): fixed delete bug (need to use delete[] for BigNum strings) 2000-03-21 Steven Eker * autoWrapBuffer.cc (sync): don't output pending buffer unless it consists of a single space or tab; this avoids outputing stuff where it turns out we don't have a save point to line break later on. the drawback is that we violate the semnatics of sync() somewhat * fileTable.cc (printLineNumber): fixed bug where we were using "cout" rather than "s" 2000-03-20 Steven Eker * process.cc (process): check for bad module before calling closeSignature() * entry.cc (addOpDeclaration): now call markAsBad() when ther is a clash of symbol attributes; there is a problem that translating of terms assumes that FooSymbol maps to a FooSymbol; bad things happen if this is violated so we don't want to translate terms 2000-03-17 Steven Eker * search.cc (search): if def'd guts 2000-03-16 Steven Eker * process.cc (process): added extra check for bad module before calling closeFixUps() just incase we had a bad identity * metaDown.cc (downFixUpBubble): WarningCheck() -> IssueWarning() (downAttr): WarningCheck() -> IssueWarning() * execute.cc (cont): standardized IssueWarning() * command.cc (selectModule): standardized IssueWarning()s * ops.cc (addVarDecl): standardized IssueWarning() (setPrec): standardized IssueWarning() (setGather): standardized IssueWarning() * process.cc (processSorts): standardized IssueWarning() and WarningCheck() (getSort): standardized IssueWarning() * import.cc (findModule): standardized IssueWarning() (importModule): standardized IssueWarning()s * compiler.cc (fullCompile): standardized IssueAdvisory() (makeExecutable): standardized IssueWarning() * preModule.cc (getFlatSignature): standardized IssueAdvisory() (finishModule): standardized IssueAdvisory() * mixfixParser.cc (parseTerm): standardized IssueWarning() (parseSentence): standardized IssueWarning() * entry.cc (addOpDeclaration): standardized IssueWarning()s * metaDown.cc (downFixUpBubble): standardized IssueAdvisory() (downSorts): standardized IssueAdvisory() (downSimpleSort): standardized IssueAdvisory() (downTerm): standardized IssueAdvisory()s (downVariable): standardized IssueAdvisory() * metaFastUp.cc (fastUpSort): standardized IssueAdvisory() * main.cc (main): standardized IssueWarning() * lexerAux.cc (handleEof): pass lineNr arg to includeFile() * main.cc (main): pass lineNr arg to includeFile() * top.y: pass lineNr arg to includeFile() * lexerAux.hh (eatComment): updated decl for includeFile() * lexerAux.cc (includeFile): take lineNr arg; standardized IssueWarning()s * importTranslation.hh (class ImportTranslation): use NO_COPYING() macro * fileTable.hh (class FileTable): use NO_COPYING() macro * metaDown.cc (downFixUps): check that identity is in the correct component * mixfixModule.cc (~MixfixModule): only self destrcut special terms that actually exist * fixUp.cc (fixUpSymbols): extensive use of FIX_UP_FAILED macro in an attempt to make specials slightly more robust * preModule.cc (PreModule): init isCompiled * ops.cc (makeOpDeclsConsistent): fixed bug where we were trying to delete op decls beyond start be vector * execute.cc (match): print maxNrSolutions if != UNBOUNDED * preModule.hh (Parent): added decl for printMatchTiming() * execute.cc (printMatchTiming): added * preModule.hh (Parent): added decl for printStats(), updated decl for printTiming(), deleted decl for printTiming2() * compiler.cc (creduce): use printTiming() rather than printTiming2() * execute.cc (beginRewriting): always set timers as showStats and showTiming flags could be changed during rewriting (doLoop): always set timers as showStats and showTiming flags could be changed during rewriting (match): reorganized; call printMatchTiming(); (printStats): adapted from old printTiming() (printTiming2): renamed to printTiming() (endRewriting): use printStats() (doLoop): use printStats() 2000-03-15 Steven Eker * importModule.cc (fixUpDonatedOps): use copyFixUpBubbleSpec() * mixfixModule.hh (class MixfixModule): added decls for findBubbleSpec(), copyFixUpBubbleSpec(), copyBubbleSpec() * mixfixModule.cc (findBubbleSpec): added (copyFixUpBubbleSpec): added (copyBubbleSpec): added * importModule.cc (donateOps): use copyBubbleSpec() * mixfixParser.cc (parseTerm): don't print term in "no parse for term" message (original code didn't work anyway because end was usually DEFAULT = -1) * preModule.hh (Parent): added decl for contLoop2() * execute.cc (loop): copy sucesfully parsed subject to savedLoopSubject (contLoop2): added (contLoop): rewritten using contLoop2() and savedLoopSubject * preModule.hh (Parent): added static data member savedLoopSubject * importTranslation.cc (translate): init importerVersion = 0; use flags rather than dynamic_cast<>s * metaFastUp.cc (fastUpSort): HACK to try and find non error sort to up in union sort case; fixes Delias problem 2000-03-14 Steven Eker * main.cc (findPrelude): handle case where executableName contains a full path name * fileTable.hh (class FileTable): added AUTOMATIC to enum SpecialLineNumbers * main.cc (findPrelude): output FileTable::AUTOMATIC as line number of warning * top.y: save line number for findFile() before calling eatComment() (both places) * main.hh: updated findFile() decl * top.y: pass lineNumber to findFile() (both places) * lexerAux.cc (handleEof): pass COMMAND_LINE to findFile() * main.cc (findFile): take line number argument * fileTable.cc (printLineNumber): handle COMMAND_LINE * fileTable.hh (class FileTable): added COMMAND_LINE to enum SpecialLineNumbers * quotedIdentifierOpSymbol.cc (eqRewrite): simplified using C++ strings rather than C strings * token.cc (dotNameCode): simplified using C++ strings rather than C strings * metaFastUp.cc (fastUpTerm): (both versions) simplified using quoteNameCode() * bufferPrint.cc (prettyPrint): use quoteNameCode() * token.hh (class Token): added decl for quoteNameCode() * token.cc (quoteNameCode): added * bufferPrint.cc (prettyPrint): simplified using C++ strings rather than C strings * mixfixModule.cc (instantiateSortTest): simplified using C++ strings rather than C strings * directoryManager.cc (realPath): code cleaning (realPath): get find(value, stratIndex) args around the right way 2000-03-13 Steven Eker * directoryManager.hh (class DirectoryManager): deleted static data member buffer (class DirectoryManager): updated decls for cd() and pushd() * directoryManager.cc (cd): take C++ string (pushd): take C++ string (initialize): use local buffer * top.y: use realPath() for "cd" and "pushd" commands * lexerAux.cc (includeFile): rewritten (handleEof): rewritten * top.y: rewrite "in" and "load" commands in terms of new findFile() and includeFile() * main.cc (findPrelude): rewritten (main): use new findPrelude() and includeFile() conventions * main.hh: added decl for findPrelude() and findFile() * main.cc (findPath): deleted (findFile): rewritten * directoryManager.cc (checkAccess): added hack to deal with missing compare() functions in GNU C++ stdlib * directoryManager.hh (class DirectoryManager): updated decl for realPath(), added decl for checkAccess() and searchPath() * directoryManager.cc (realPath): completely rewritten using C++ strings (checkAccess): added (searchPath): added 2000-03-07 Steven Eker * main.hh: added decl for findFile() * main.cc (findFile): added * execute.cc: change init value for counters to 0us; this might avoid the strange results we see on linux 2000-03-06 Steven Eker * metaDown.cc (downModule): call closeFixUps() * process.cc (process): call closeFixUps() * mixfixParser.cc (makeStatement): fixed bug where we weren't setting line number for conditional equations * execute.cc (beginRewriting): call clearMemo() if autoClearMemo (endRewriting): no longer call clearMemo() * commands.y: call setAutoClearMemo() * preModule.hh (Parent): added static data member autoClearMemo (setAutoClearMemo): added (Parent): added decl for setAutoClearMemo() * execute.cc (endRewriting): call clearMemo() if autoClearMemo flag set (endRewriting): call clearMemo() if autoClearMemo flag set * command.cc (loseFocus): call clearMemo(); 2000-03-03 Steven Eker * mixfixModule.hh (class MixfixModule): added decl for newFancySymbol() * entry.cc (newFancySymbol): added (addOpDeclaration): greatly simplified using newFancySymbol * main.cc (main): deleted old auto wrap code * interact.cc (displayPrompt): call resetCursor(); * mixfix.hh: added class AutoWrapBuffer * userLevelRewritingContext.hh (class UserLevelRewritingContext): added decls for setAutoWrap() and static data members wrapOut and wrapErr * main.cc (main): call setAutoWrap() * interact.cc (setAutoWrap): added * autoWrapBuffer.cc (resetCursor): added * autoWrapBuffer.hh (class AutoWrapBuffer): added decl for resetCursor(); * metaModuleCache.cc (insert): don't economize former LRU module after all; the fragmentation from constantly regenerating parsers seems to be worse than keeping old parsers around (moveToFront): don't economize former LRU module after all * mixfixModule.cc (makeBubbleProductions): fix bubble bug: don't modify original excludedTokens; instead use temporary vector; this is because we need the original values if we have to rebuild the parser, or if we ever allow bubbles to be imported 2000-03-02 Steven Eker * userLevelRewritingContext.hh (class UserLevelRewritingContext): use NO_COPYING() macro * quotedIdentifierOpSymbol.hh (class QuotedIdentifierOpSymbol): use NO_COPYING() macro * quotedIdentifierTerm.hh (class QuotedIdentifierTerm): use NO_COPYING() macro * quotedIdentifierDagNode.hh (class QuotedIdentifierDagNode): use NO_COPYING() macro * metaModule.hh (class MetaModule): use NO_COPYING() macro * metaLevelOpSymbol.hh (class MetaLevelOpSymbol): use NO_COPYING() macro * loopSymbol.hh (class LoopSymbol): use NO_COPYING() macro * metaLevel.hh (class MetaLevel): use NO_COPYING() macro * autoWrapBuffer.hh (class AutoWrapBuffer): use NO_COPYING() macro * lexerAux.cc (handleEof): read pending files in silent mode * fileTable.cc (FileTable): added in order to initialize firstSilent * userLevelRewritingContext.hh (class UserLevelRewritingContext): deleted decl for beginModule() * interact.cc (beginModule): deleted * modules.y: don't call UserLevelRewritingContext::beginModule() (2 places) * fileTable.cc (beginModule): print module name & line of =s here if we are inside an in'd file and no in silent mode * lexerAux.cc: deleted firstSilent global variable (cleanUpLexer): don't use firstSilent (includeFile): don't use firstSilent or call UserLevelRewritingContext::setSilentFlag(true); pass silent arg to openFile() (handleEof): don't use firstSilent or call UserLevelRewritingContext::setSilentFlag(true) (cleanUpLexer): don't call UserLevelRewritingContext::setSilentFlag(false) * fileTable.hh (class FileTable): added data member firstSilent (class FileTable): updated decl for openFile() * fileTable.cc (openFile): take silent argument; set firstSilent if neccessary; don't print "Reading..." message if in silent mode (closeFile): don't print "Done..." message if in silent mode; set firstSilent to NONE if we just close the first silent file (abortEverything): set firstSilent to NONE if we had files to close * userLevelRewritingContext.hh (class UserLevelRewritingContext): deleted static data member silentFlag (setSilentFlag): deleted (class UserLevelRewritingContext): deleted decl for setSilentFlag() * interact.cc: deleted silentFlag (beginModule): don't check silentFlag 2000-03-01 Steven Eker * top.y: added load directive * modules.y: added KW_LOAD to startKeyword * top.y: added decl for KW_LOAD * lexer.flex: added KW_LOAD * lexerAux.cc (handleEof): update use of includeFile() * main.cc (main): update decl and use for includeFile() * lexerAux.hh: update decl of includeFile() * top.y: update decl and use for includeFile() * lexerAux.cc: added global variable firstSilent() (cleanUpLexer): set firstSilent = NONE; (includeFile): take silent arg and call setSilentFlag() and set firstSilent when neccessary (handleEof): handle firstSilent * compiler.cc (makeBaseName): nasty hack because string streams are not yet supported in GNU libstdc++ * quotedIdentifierOpSymbol.cc (eqRewrite): replace sprintf() with ostrstream; should use ostringstream * interact.cc (commandLoop): use new makeBaseName() result * preModule.cc (regretToInform): use new makeBaseName() result * compiler.cc (fullCompile): use new makeBaseName() result (outputGraph): use new makeBaseName() result (inputGraph): use new makeBaseName() result (creduce): use new makeBaseName() result * preModule.hh (Parent): updated decl for makeBaseName() * compiler.cc (makeBaseName): rewritten using C++ strings and string streams * top.y: simplify "ls" command code using C++ strings * lexer.flex: use yyless() in STRING_MODE so that line number will be correct in null string case * top.y: added token decl for KW_LATEX * modules.y: added KW_LATEX to attrKeyword * lexer.flex: added KW_LATEX * modules.y: removed NUMBER_TOK from alternatives for token and tokenBarDot since these should never be generated while lexer in ID_MODE and token/tokenBarDot are never used outside of ID_MODE; Added syntax for latex attribute 2000-02-29 Steven Eker * importModule.hh (class ImportModule): use NO_COPYING() macro * mixfixModule.hh (class MixfixModule): use NO_COPYING() macro * metaModuleCache.cc (moveToFront): economize former LRU module (insert): economize former LRU module * metaModuleCache.hh (Parent): use NO_COPYING() macro * mixfixModule.hh (getGather): rewritten using revertGather(), made inline and moved here (class MixfixModule): updated decl for getGather() * importModule.cc (donateOps): use new getGather() interface * entry.cc (addPolymorph): print line number in new prec/gather warnings (addOpDeclaration): print line number in new prec/gather warnings * mixfixModule.cc (revertGather): added (copyPolymorph): use revertGather(); set symbolInfo.next = NONE * mixfixModule.hh (class MixfixModule): added decl for revertGather() 2000-02-28 Steven Eker * entry.cc (addPolymorph): set symbolInfo.next = NONE * mixfixModule.cc (copyPolymorph): do a deep copy of SymbolInfo rather than copying members * entry.cc (addPolymorph): if PREC or GATHER flags are set for an operator without mixfix syntax, give a warning and clear them * command.cc (parse): fixed memory leak by deleting parsed term * entry.cc (addOpDeclaration): if PREC or GATHER flags are set for an operator without mixfix syntax, give a warning and clear them 2000-02-25 Steven Eker * preModule.hh (Parent): updated decl for printBubble() * execute.cc (printBubble): fixed bug where we weren't passing Vector arg by ref ===================================Engine56================================================== 2000-02-24 Steven Eker * interact.cc (commandLoop): added hack to unlink executable whether or not we made one; rely on OS for now... * compiler.cc (makeExecutable): rewritten using isCompiled flag * preModule.cc (regretToInform): clear isCompiled and unlink executable if it is set * preModule.hh (Parent): added data member isCompiled * compiler.cc (makeExecutable): now return bool to say whether we succeeded (creduce): don't both trying to run executable if makeExecutable() return false (fullCompile): unlink gernrated .hh and .cc files (inputGraph): unlink .in and .out files * preModule.hh (Parent): updated decls for fullCompile() and makeExecutable() * compiler.cc (fullCompile): added code to generate inFileName and outFileName (outputGraph): more here; use makeBaseName() (depthFirstTraversal): moved here (inputGraph): more here; use makeBaseName() (fullCompile): now return bool to say whether we succeeded * preModule.cc (generateEval): deleted * compiler.cc (makeBaseName): added (fullCompile): use makeBaseName() (creduce): use makeBaseName() * preModule.hh (Parent): added decl for makeBaseName() 2000-02-23 Steven Eker * compiler.cc (creduce): use printTiming2() (fullCompile): use STL string class to build compilation command by looking at environment * preModule.hh (Parent): updated decl for inputGraph() * preModule.cc (inputGraph): pass back cpu and real time as microseconds in 64bit ints * compiler.cc (creduce): rewritten using makeDag() and makeExecutable() * preModule.hh (Parent): added decl for printTiming2(), updated decl for printTiming(), added decl for makeExecutable() * execute.cc (printTiming2): added (printTiming): rewritten using printTiming2() and using 64bit ints to hold number of microseconds rather than 32bit ints to hold number of milliseconds (printTiming): take number of rewrites rather than context (doLoop): use new printTiming() convention (endRewriting): use new printTiming() convention * compiler.cc (makeExecutable): added * execute.cc (match): completely rewritten; much simplified; now call protect() and unprotect() since computeTrueSort() and solve() may do rewriting, which if we were incredibly unlucky could end up in the debugger, allowing the user to to enter a module that invalidates the module we are matching in (printTiming): result and result2 no longer static 2000-02-22 Steven Eker * execute.cc (match): moved here (match): use makeDag() to preprocess subject * compiler.cc (creduce): moved here * preModule.hh (Parent): deleted members importSymbol, importPolymorphIndex and importOriginator from struct OpDecl (Parent): NO_DEFAULTS() -> NO_COPYING() * metaLevelOpSymbol.cc (metaReduce): call protect() and unprotect() (metaRewrite): call protect() and unprotect() (metaApply): call protect() and unprotect() * metaLevel.hh (class MetaLevel): updated decl for downModule() * metaDown.cc (downModule): return ImportModule* rather than MixfixModule* * execute.cc (doLoop): call protect() and unportect() (loop): pass module arg to doLoop() (contLoop): pass module arg to doLoop() (printTiming): decl for result and result2 moved here * importModule.cc (unprotect): return true if unprotect() call results in the module being deleted (ImportModule): initialize protectCount to 0 * preModule.hh (Parent): updated decl for beginRewriting() and endRewriting() * execute.cc (endRewriting): take module arg; call unprotect(); clear saved if we had a traceAbort, or unprotect() deleted module (beginRewriting): call protect() (reduce): pass module arg to beginRewriting() and endRewriting() (rewrite): pass module arg to beginRewriting() and endRewriting() (cont): pass module arg to beginRewriting() and endRewriting() * metaDown.cc (downModule): call localStatementsComplete() * importModule.hh (class ImportModule): added decls for protect() and unprotect() * importModule.cc (unprotect): added (deepSelfDestruct): if we have a > 0 protectCount, mark as DOOMED, rather than doing the delete * importModule.hh (class ImportModule): added data member protect count (protect): added 2000-02-21 Steven Eker * commands.y: added set show loop timing and set show loop stats commands * preModule.hh (setShowLoopTiming): added (setShowLoopStats): added (Parent): added decls for setShowLoopTiming() and setShowLoopStats() 2000-02-18 Steven Eker * preModule.hh (Parent): added decl for printTiming() * execute.cc (printTiming): added; use all integer arithmetic for more stable results (endRewriting): use printTiming() (doLoop): use printTiming() * preModule.hh (Parent): added decl for doLoop(); added static data members showLoopStats and showLoopTiming * execute.cc (endLoop): added (contLoop): simplified using endLoop() (loop): simplified using endLoop() (endLoop): use dynamic_cast to figure out if we have a LoopSymbol since out flat module is no longer reliable (if it got replaced during debug) (contLoop): rewritten, use dynamic_cast to figure out if we have a LoopSymbol (startLoop): added (contLoop): simplified using startLoop() (loop): simplified using startLoop() (doLoop): replaces startLoop() and endLoop() (loop): use doLoop() (contLoop): use doLoop() * preModule.hh (Parent): added decls for beginRewriting(), endRewriting() and makeDag() * execute.cc (beginRewriting): added (endRewriting): added (reduce): moved here, rewritten using beginRewriting() and endRewriting() (rewrite): moved here, rewritten using beginRewriting() and endRewriting() (cont): moved here, rewritten using beginRewriting() and endRewriting() (makeDag): added (reduce): simplified using makeDag() (cont): simplified (rewrite): simplified using makeDag() (loop): simplified using makeDag() * importModule.cc (donateStatements): put line numbers into statement copies 2000-02-17 Steven Eker * lexer.flex: added keywords ctor = constructor * top.y: added decl for KW_CTOR * modules.y: added KW_CTOR * metaLevelSignature.cc (MACRO): added macro for ctorSymbol * metaDown.cc (downAttr): ignore ctorSymbol in attribute list * prelude.maude: added ctor constant to META-LEVEL * metaLevelOpSymbol.cc (metaParse): fixed memory leak by calling deepSelfDestruct() on term obtained from parsing * command.cc (loseFocus): moved here (loseFocus): clear saved to fix contLoop bug (selectModule): no need to clear saved here now (loseFocus): call reset() on flatModule (creduce): don't call reset() (reduce): don't call reset() (rewrite): don't call reset() (cont): don't call reset() (loop): don't call reset() (contLoop): don't call reset() (rewrite): fixed memory leak by calling deepSelfDestruct() on subject term (loop): fixed memory leak by calling deepSelfDestruct() on subject term * preModule.hh (Parent): regretToInform() decl made private (Parent): use NO_DEFAULTS() macro * metaModuleCache.hh (Parent): derivation has to be public * metaDown.cc (downModule): pass cache as parent * metaModule.cc (MetaModule): pass parent arg to ImportModule * metaModule.hh (class MetaModule): added parent arg to ctor * metaModuleCache.hh (Parent): added decls for Pair::clear() and regretToInform() * metaModuleCache.cc (clear): added (regretToInform): added (flush): use clear() (insert): use clear() * metaModuleCache.hh (Parent): have private base ImportModule::Parent (Parent): added decl for regretToInform() * preModule.hh (Parent): updated decl for regretToInform() * preModule.cc (regretToInform): use doomedModule arg * importModule.cc (deepSelfDestruct): have regretToInform() pass back pointer to doomed module for the beefit of parents that have multiple children * preModule.hh (loseFocus): use economize() * mixfixModule.hh (class MixfixModule): changed loseFocus() decl to economize() * mixfixModule.cc (loseFocus): renamed to economize() * metaModuleCache.cc (insert): added DebugAdvisoryCheck() 2000-02-16 Steven Eker * metaDown.cc (downModule): use new cache data member * metaLevel.cc (~MetaLevel): no longer delete cacheModule since this data member has been replaced (MetaLevel): no longer initialize cachedModule (reset): flush the cache; don't reset defunct data members * metaLevel.hh (class MetaLevel): use MetaModuleCache * metaModuleCache.hh: created * metaModuleCache.cc: created * fixUp.cc (fixUpSymbols): moved here (findHookSymbol): moved here (findHook): moved here * process.cc (process): moved here * search.cc (search): call getFlatModule() * preModule.cc (generateEval): use getFlatSignature() (inputGraph): use getFlatSignature() * compiler.cc (fullCompile): don't look at flatModule to get name of module for advisory (fullCompile): use getFlatModule() 2000-02-14 Steven Eker * preModule.cc (PreModule): don't pass type arg to NamedEntity * import.cc (importModule): added call to loseFocus() on imported module to make sure any parser we might have made by importing it is deleted; this is a bit of a hack - need a cleaner method * importModule.cc (removeDependent): added DebugAdvisoryCheck() * import.cc (processImports): use autoImports rather than defaultImports (importModule): added (processImports): use importModule() * preModule.cc (finishModule): set autoImports * preModule.hh (class PreModule): added data member autoImports * preModule.cc (getFlatSignature): use this rather than moduleName (finishModule): use id() rather than moduleName; use this rather than moduleName (process): use id() rather than moduleName * command.cc (showModule): use this rather than moduleName * preModule.cc (PreModule): initialize NamedEntity base * preModule.hh (class PreModule): derive from NamedEntity; deleted data member moduleName * import.cc (processImports): check for null flat module and issue recursive import warning (2 places) * preModule.cc (getFlatSignature): don't return pointer to flatten module that is still being processed; this can only happen because of a recursive import 2000-02-11 Steven Eker * importModule.cc (deepSelfDestruct): no longer use DOOMED state; let a module remove itself from all dependent lists but take this into account when traversing dependent lists * preModule.cc (process): need to pass pointer to us to ImportModule ctor! * preModule.hh (loseFocus): check to be sure flatModule != 0 * preModule.cc (process): call localStatementsComplete() * importModule.hh (class ImportModule): added decl for localStatementsComplete() * importModule.cc (localStatementsComplete): added as a nasty hack to overcome initialization problem (importStatements): no longer set nrOriginal* here * preModule.cc (finishModule): set isCompleteFlag * command.cc (parse): use getFlatSignature() (creduce): use getFlatModule() (reduce): use getFlatModule() (loop): use getFlatModule() (cont): use getFlatModule() (contLoop): use getFlatModule() (selectModule): use getFlatSignature() (match): use getFlatSignature() (showModule): use moduleName and moduleType * preModule.cc (PreModule): clear isCompleteFlag * preModule.hh (class PreModule): added decl for isComplete() (class PreModule): added data member isCompleteFlag (isComplete): added * bottom.y (cleanUpParser): use isComplete() * commands.y: use getFlatSignature() in places where we don't need the statements * metaDown.cc (downImport): use getFlatSignature() * import.cc (processImports): rewritten, using closeSignature() * preModule.cc (PreModule): call deepSelfDestruct() (finishModule): added (process): create ImportModule (process): don't import statements or close theory * preModule.hh (class PreModule): derive from ImportModule::Parent * preModule.cc (getFlatModule): moved here (getFlatSignature): created (PreModule): don't create ImportModule, initialize LineNumber, moduleName and moduleType * preModule.hh (class PreModule): derive from LineNumber (class PreModule): added moduleName and moduleType data members (class PreModule): added decl for getFlatSignature(); getFlatModule() no longer const * symbolTranslation.hh: deleted * symbolTranslation.cc: deleted * metaModule.cc: deleted obsolete imporation code 2000-02-10 Steven Eker * preModule.cc (PreModule): delete init of importPhase * importModule.cc (deepSelfDestruct): status -> importPhase * importModule.hh (class ImportModule): DOOMED moved from enum Status to enum Phase; enum Status deleted (class ImportModule): data member status deleted * preModule.hh (class PreModule): deleted tons of old import decls * preModule.cc: deleted old versions of process() and nativeCompile() * import.cc: deleted tons of old import code * metaModule.hh (addImport): deleted * metaDown.cc (downImport): use new importation conventions * preModule.hh (getFlatModule): return ImportModule* (class PreModule): updated decl for getFlatModule() * metaDown.cc (downModule): use new importation conventions * metaModule.cc (MetaModule): init ImportModule * metaModule.hh (class MetaModule): derive from ImportModule; delete out all importation decls; all import functionality purged from file 2000-02-09 Steven Eker * mixfixModule.cc (getGather): move here; now do conversion from internal rep to interface rep * importTranslation.cc (translate): handle sort test symbols * mixfixModule.cc (copyPolymorph): must translate sorts! 2000-02-08 Steven Eker * importTranslation.cc (translate): treat variables specially since we know they will be invisible in importer (translate): fixed bug in domain component traslation * mixfixModule.hh (class MixfixModule): added decl for findInvisibleVariable() * mixfixModule.cc (findInvisibleVariable): added * entry.cc (addOpDeclaration): add invisible symbols to linked list just like normal symbols; don't check for overloading between an invisible symbol an any other symbol * importModule.cc (donateOps): make imported variables invisible * process.cc (processOps): commented out what appears to be a sperfluous call to setLineNumber() * importModule.cc (donateOps): fixed no common ancestor warning bug for ops with > 1 decl (donateOps): set prec correctly * import.cc (processImports): rewritten to use ImportModule * importModule.cc (importStatements): set nrOriginalMembershipAxioms, nrOriginalEquations and nrOriginalRules * importModule.hh (class ImportModule): added decls for resetImports() and resetImportPhase() * importModule.cc (resetImports): added (resetImportPhase): added * preModule.cc (PreModule): use ImportModule (process): rewritten using ImportModule * mixfix.hh: added class ImportModule and class ImportTranslation * importModule.hh (class ImportModule): added decl for addImport() * importModule.cc (fixUpDonatedOps): handle polymorphs (addImport): added * importModule.hh (class ImportModule): added data members nrImportedPolymorphs and firstPolymorphCopy * importModule.cc (donateOps): handle polymorphs 2000-02-07 Steven Eker * mixfixModule.hh (class MixfixModule): added decls for copyPolymorph(), getNrPolymorphs() (getNrPolymorphs): added * mixfixModule.cc (copyPolymorph): added * mixfix.hh: added forward decl for class LoopSymbol * importModule.hh (class ImportModule): added decls for fixUpImportedOps() and fixUpDonatedOps() * importModule.cc (fixUpImportedOps): added (fixUpDonatedOps): added * mixfixModule.hh (getPrec): added (getGather): added (class MixfixModule): made getFlags() const * importModule.hh (class ImportModule): added decls for importOps() and donateOps(); added data member responsibleForFixUp() * importModule.cc (donateOps): rewritten using nrImportedDecls[] and nrUserDecls[] 2000-02-04 Steven Eker * importModule.cc (donateStatements): added (importStatements): added * importTranslation.cc: created * importTranslation.hh: created * importModule.cc (buildTranslationTable): deleted (insertTranslations): deleted 2000-02-03 Steven Eker * importModule.cc: added DEBUG_ADVISORY() 2000-02-02 Steven Eker * preModule.cc (process): fixed missing & bug which cause us to copy sort vector rather than take a reference * importModule.hh: created * importModule.cc: created 2000-02-01 Steven Eker * lexer.flex: make q a synonym for even inside module * top.y: make quit work correctly inside of module * ops.cc (makeOpDeclsConsistent): handle the no defs, no decls case correctly by doing nothing * lexer.flex: added q as a synonym for quit but only on the in command mode 2000-01-31 Steven Eker * preModule.cc (inputGraph): set sort index of top dag node 2000-01-27 Steven Eker * compiler.cc (fullCompile): call generateSortVector() on each sort ===================================Engine55================================================== 1999-12-20 Steven Eker * compiler.cc (fullCompile): handle compileCount flag * command.cc (creduce): handle compileCount flag * preModule.hh (class PreModule): added decl for setCompileCount() (setCompileCount): moved here * command.cc (setCompileCount): added * lexer.flex: added keywords compile and count * top.y: added tokens for compile and count * commands.y: added set compile count on/off command 1999-12-07 Steven Eker * lexer.flex: recognize "." as a "." in command mode if followed by eather "***" or "---" as well as "\n". this enable us to handle commands with comments on their ends correctly * interact.cc (setHandlers): pass bus errors to segmentation fault handler as a stop gap; don't bother setting up an alternative signal stack since there does seem to be a reliable way to distinguish between stack overflows and normal seg faults 1999-12-06 Steven Eker * trial.cc (traceBeginEqTrial): use dontTrace() (traceBeginRuleTrial): use dontTrace() (traceBeginScTrial): use dontTrace() * preModule.hh (class PreModule): added decl for traceExclude() * command.cc (traceExclude): added * top.y: added nonterminal exlcude and toekn KW_EXCLUDE * commands.y: added syntax for trace exclude/include * userLevelRewritingContext.cc (tracePreEqRewrite): use dontTrace() (tracePreRuleRewrite): use dontTrace() (tracePreScApplication): use dontTrace() (excludeModules): added * userLevelRewritingContext.hh (class UserLevelRewritingContext): added static data member excluded (dontTrace): added (class UserLevelRewritingContext): added decl for dontTrace() 1999-12-03 Steven Eker * metaLevelOpSymbol.cc (reset): check to see that metaLevel != 0 since we can rely on our symbol having been fixed up when we're called (say because of deletion of an incompletely built meta module) (MetaLevelOpSymbol): initialize shareWith amd metaLevel so their in safe states for deletion and reset() 1999-11-08 Steven Eker * preModule.hh (class PreModule): added decl for fullCompiler 1999-11-05 Steven Eker * compiler.cc: created 1999-11-04 Steven Eker * interact.cc (setHandlers): HACK for alpha in !defined(_XOPEN_SOURCE_EXTENDED) case * preModule.cc (nativeCompile): added Alpha case; removed absolute paths from other cases 1999-11-02 Steven Eker * main.cc (findPath): added 1999-11-01 Steven Eker * token.cc (int64ToString): added special case for INT64_MIN to ensure we don't rely on the implementation of % and / on negative 64 bit integers 1999-10-29 Steven Eker * metaDown.cc (downAttr): handle Int64 in prec * metaLevelOpSymbol.cc (metaRewrite): almost do Int64 right (metaApply): almost do Int64 right * quotedIdentifierOpSymbol.cc (eqRewrite): use Token::codeToInt64() (eqRewrite): use int64ToString() * metaFastUp.cc (fastUpTerm): (both versions), use Token::int64ToString() * entry.cc (addOpDeclaration): use Token::codeToInt64() * mixfixModule.hh (class MixfixModule): overloadedMachineIntegers is now a set * bufferPrint.cc (prettyPrint): handle 64 bit machine ints correctly * prettyPrint.cc (prettyPrint): (both versions), handle 64 bit machine ints correctly * token.cc (codeToInt64): added (int64ToString): added * token.hh (class Token): added decls for codeToInt64() and int64ToString() * mixfixParser.cc (makeTerm): use Token::codeToInt64() * metaDown.cc (downMachineIntList): cast Int64 to int before making list * metaLevel.hh (class MetaLevel): updated decl for downMachineInt() * metaDown.cc (downMachineInt): int -> Int64 (downTerm): use Token::codeToInt64() * prettyPrint.cc (printAttributes): use dynamic_cast() before checking for strategy; handle memo (printAttributes): removed dynamic_cast() * main.cc (findPrelude): rindex() -> strrchr() * lexerAux.cc (includeFile): rindex() -> strrchr() * directoryManager.cc (realPath): index() -> strchr() (*2) ===================================Engine53================================================== 1999-10-26 Steven Eker * interact.cc (setHandlers): added code to catch segmentation faults * prettyPrint.cc (showOps): VariableSymbol::dynamicCast() -> dynamic_cast (showVars): VariableSymbol::dynamicCast() -> dynamic_cast (printAttributes): use dynamic_casts()s rather than comparisons on theory strings (printAttributes): use variable decls inside of ifs * entry.cc (addOpDeclaration): updated calls to AU_Symbol, ACU_Symbol and CUI_Symbo to pass memo flags 1999-10-25 Steven Eker * userLevelRewritingContext.cc: take extra argument, handle memo table case * userLevelRewritingContext.hh (class UserLevelRewritingContext): updated decl for tracePreEqRewrite() * quotedIdentifierOpSymbol.cc (eqRewrite): updated 3 calls to tracePreEqRewrite() 1999-10-22 Steven Eker * lexer.flex: recognize memo in INITIAL as well as ID_MODE; recognize do and clear * top.y: added tokens KW_DO KW_CLEAR * commands.y: added do clear memo command added syntax for * entry.cc (addOpDeclaration): support memo for free symbols 1999-10-19 Steven Eker * search.cc (struct hashDagNode): added (search): try using hash_set instead of set (struct dagNodeEq): added (search): try using DagNodeSet instead of hash_set * quotedIdentifierDagNode.cc (getHashValue): added * quotedIdentifierDagNode.hh (class QuotedIdentifierDagNode): added decl for getHashValue() 1999-10-14 Steven Eker * prettyPrint.cc (operator<<): (Term* and DagNode* versions); hack removed * bufferPrint.cc (bufferPrint): hack removed * mixfixModule.cc (loseFocus): no longer inline (closeSignature): added in order to compute pretty print info whether or not we generate a parser (makePolymorphProductions): don't call computePrecAndGather() (makeSymbolProductions): don't call computePrecAndGather() * mixfixModule.hh (class MixfixModule): added decl for closeSignature() * prettyPrint.cc (operator<<): (Term* and DagNode* versions); call makeGrammar() as a HACK to set up gather info ===================================Engine52================================================== 1999-10-07 Steven Eker * top.y: added ADVISE as a token * lexer.flex: added advise keyword * commands.y: added syntax for set show advise on/off 1999-10-06 Steven Eker * bufferPrint.cc (bufferPrint): call makeGrammar() as a HACK to set up gather info 1999-10-04 Steven Eker * banner.cc (printBanner): long -> time_t 1999-09-01 Steven Eker * preModule.cc (nativeCompile): #ifdef'd system args to do the best compile for solaris and linux 1999-08-27 Steven Eker * mixfixModule.cc (makeSymbolProductions): don't add productions for any polymorph instances that happen to exists at this moment * modules.y: call loseFocus() for old module when new module is created * command.cc (selectModule): call loseFocus() for old module * mixfixModule.cc (loseFocus): added * mixfixModule.hh (class MixfixModule): added decl for loseFocus() * preModule.hh (class PreModule): added decl for loseFocus() (loseFocus): added 1999-08-26 Steven Eker * mixfixParser.cc (parseSentence): do makeGrammar() first thing so that tokens will be set up * metaDown.cc (downModule): don't call makeGrammar() * mixfixModule.hh (class MixfixModule): added decl for insertLabels() * preModule.cc (process): call insertLabels() rather than makeGrammar() * mixfixModule.cc (makeGrammar): don't pass labels argument to makeLabelProductions() * mixfixModule.hh (class MixfixModule): makeGrammar() becomes private and loses arg; makeLabelProductions() loses arg; * mixfixModule.cc (makeGrammar): no longer take labels arg (makeLabelProductions): no longer take labels arg * mixfixModule.hh (insertLabels): added (class MixfixModule): added data member labels * mixfixParser.cc (parseSentence): call makeGrammar() if parser is null * mixfixModule.cc (makeGrammar): parser = new Parser (MixfixModule): parser = 0 (~MixfixModule): delete parser * mixfixParser.cc (insertProd): deref parser (parseTerm): deref parser (2 places) (makeCommand): deref parser (5 places) (parseSentence): deref parser (3 places) (makeTerm): deref parser (many places) (makeCondition): deref parser (many places) (makeStatement): deref parser (many places) * mixfixModule.cc (makeBubbleProductions): deref parser * mixfixModule.hh (class MixfixModule): paser data member is now a pointer to a parser 1999-08-10 Steven Eker * metaDown.cc (downEquations): handle to handle AU equation sets * metaLevelSignature.cc (MACRO): equationSetSymbol made just a Symbol so it can either be ACU or AU (for MOS!), removed need comm attribute 1999-08-05 Steven Eker * preModule.hh (class PreModule): added decl for dagNodeLt() * search.cc (search): don't make initial UserLevelRewritingContext automatic; allocate it on the heap like all the others (search): delete all the UserLevelRewritingContexts we create (search): use STL set class template (dagNodeLt): added 1999-08-03 Steven Eker * search.cc (search): delete matching subproblem after we're done with it (search): delete patternAutomaton * top.y: for "in" directive we now have a call to eatComment() to swallow the \n and get the line number correct for the included file 1999-07-28 Steven Eker * metaLevel.hh (class MetaLevel): added decl for ~MetaLevel() * metaLevelOpSymbol.hh (class MetaLevelOpSymbol): added decl for ~MetaLevelOpSymbol() ===================================Engine51================================================== 1999-07-21 Steven Eker * preModule.cc (nativeCompile): make functions generated for pure constructors be inline 1999-07-19 Steven Eker * preModule.hh (class PreModule): updated decl for inputGraph() * command.cc (creduce): print number of rewrites and timing * preModule.cc (inputGraph): read in number of rewrites and timing 1999-07-16 Steven Eker * preModule.cc (nativeCompile): compile and link (nativeCompile): destroy ofstream objects before trying to compile to ensure that they are flushed (nativeCompile): issue advisory before compiling * command.cc (creduce): run executable * preModule.cc (generateEval): generate correct index for storing pointer to evaluated copy after last arg of original 1999-07-15 Steven Eker * preModule.cc (generateEval): get value for #define EVAL correct (nativeCompile): output decl for collectGarbage() 1999-07-14 Steven Eker * preModule.hh (class PreModule): added decl for generateEval() * preModule.cc: added (nativeCompile): call generateEval() 1999-06-29 Steven Eker * preModule.hh (class PreModule): added decl for inputGraph() * preModule.cc (nativeCompile): pass hfile to Symbol::generateCode() (inputGraph): added * command.cc (creduce): call outputGraph() * preModule.hh (class PreModule): added decls for outputGraph() and depthFirstTraversal(); * preModule.cc (outputGraph): added (depthFirstTraversal): added 1999-06-28 Steven Eker * preModule.cc (process): don't call compileToC * preModule.hh (class PreModule): added decls for creduce() and nativeCompile() * preModule.cc (nativeCompile): adapted from compileToC() * command.cc (creduce): added * lexer.flex: added creduce keyword * top.y: declared KW_CREDUCE * commands.y: added syntax for creduce * preModule.cc (compileToC): generate arity table (compileToC): generate forward declarations 1999-06-14 Steven Eker * preModule.hh (class PreModule): added decl for compileToC() * preModule.cc (compileToC): added (process): call compileToC() 1999-06-10 Steven Eker * main.cc: added #include in LINUX case ===================================Engine50================================================== 1999-06-09 Steven Eker * prettyPrint.cc (concealSymbols): added (prettyPrint): (DagNode* version) support print conceal added definitions for printConceal and concealed * mixfixModule.hh (class MixfixModule): added decls for setPrintConceal() and concealSymbols() (class MixfixModule): added static data member concealed (class MixfixModule): added static data member printConceal (setPrintConceal): added * preModule.hh (class PreModule): added decl for printConceal() * command.cc (printConceal): added * top.y: added tokens KW_CONCEAL, KW_REVEAL added type for conceal nonterminal * lexer.flex: added conceal, reveal keywords * commands.y: added syntax for print conceal foo . print reveal foo . set print conceal on/off . ===================================Maude 1.0.3 released======================================= * autoWrapBuffer.cc (sync): handle tabs (breakLine): handle tabs (overflow): handle tabs * autoWrapBuffer.hh (nextTabPosition): added 1999-06-04 Steven Eker * lexer.flex: use %option noyywrap and no longer link with lfl * prettyPrint.cc (graphPrint): handle ^C interrupt * command.cc (showModule): handle ^C interrupt * prettyPrint.cc (showRls): handle ^C interrupt (showEqs): handle ^C interrupt (showVars): handle ^C interrupt (showSorts): handle ^C interrupt (showOps): handle ^C interrupt (showAll): handle ^C interrupt * interact.cc (where): handle ^C interrupt * mixfixModule.hh (class MixfixModule): updated printTails() decl * prettyPrint.cc (prettyPrint): (DagNode*) version added checks for ^C interrupt (5 places) (printTails): added checkForInterrupt arg and ^C interrupt handling * autoWrapBuffer.hh (class AutoWrapBuffer): added decl for ~AutoWrapBuffer() * autoWrapBuffer.cc (~AutoWrapBuffer): added * autoWrapBuffer.hh (class AutoWrapBuffer): deleted decl for flushPending(); updated decl for breakLine() * autoWrapBuffer.cc (flushPending): only set nrPending to UNDEFINED if we actually output something more tha a single space in order to preserve the break point (overflow): delete incorrect test in space case; need to do normal thing even after breakLine() since we may not have been able to break the line and therefore we can afford to lose the space char (sync): don't call flushBuffer() (breakLine): now do cursorPosition check here; return true if we inserted a new line (flushPending): deleted (overflow): don't call flushPending() in \n case 1999-06-03 Steven Eker * main.cc (main): handle case where window width is zero by defaulting to 80 * autoWrapBuffer.cc (breakLine): support left margin (AutoWrapBuffer): support right margin (overflow): get break line test correct (2 places) 1999-06-02 Steven Eker * ops.cc (makeOpDeclsConsistent): added to handle clean up after syntax error. Idea is that after an addOpDecl() we either see a setDomainAndRange() or a statement level error which calls makeOpDeclsConsistent() or both (the setDomainAndRange() can never follow the error). * preModule.hh (class PreModule): added decl for makeOpDeclsConsistent() * modules.y: added call to makeOpDeclsConsistent() in error case 1999-05-28 Steven Eker * quotedIdentifierOpSymbol.hh (class QuotedIdentifierOpSymbol): counter made static * quotedIdentifierOpSymbol.cc (eqRewrite): reset counter here if 'RESET is our arg (reset): don't reset count here (QuotedIdentifierOpSymbol): don't zero counter here 1999-05-27 Steven Eker * quotedIdentifierOpSymbol.hh (class QuotedIdentifierOpSymbol): added MOS ORACLE to enum OpType * quotedIdentifierOpSymbol.cc (reset): clear MOS counter (fixUp): added code for MOS oracles (QuotedIdentifierOpSymbol): clear MOS counter (eqRewrite): added semantics for MOS oracles * quotedIdentifierOpSymbol.hh (class QuotedIdentifierOpSymbol): added MOS counter 1999-05-26 Steven Eker * autoWrapBuffer.cc (sync): rewritten (breakLine): added (flushPending): added (overflow): rewritten (flushPending): added 1999-05-25 Steven Eker * autoWrapBuffer.cc (xsputn): added (xsputn): rewritten for first approc at newline inserting 1999-05-20 Steven Eker * autoWrapBuffer.hh: created * autoWrapBuffer.cc: created 1999-05-19 Steven Eker * search.cc (search): print timing and number of states 1999-05-14 Steven Eker * metaDown.cc (downModule): support existingModuleSymbol * metaLevelSignature.cc (MACRO): added existingModuleSymbol * metaLevel.hh (class MetaLevel): updated decls for all functions below: * metaDown.cc (downSorts): MetaModule -> MixfixModule (downSubsort): MetaModule -> MixfixModule (downSubsorts): MetaModule -> MixfixModule (downVarDecls): MetaModule -> MixfixModule (downVarDecl): MetaModule -> MixfixModule (downMembAx): MetaModule -> MixfixModule (downMembAxs): MetaModule -> MixfixModule (downEquations): MetaModule -> MixfixModule (downEquation): MetaModule -> MixfixModule (downRule): MetaModule -> MixfixModule (downRules): MetaModule -> MixfixModule 1999-05-13 Steven Eker * metaLevel.hh (class MetaLevel): updated decl for downModule() * metaDown.cc (downModule): return MixfixModule rather than MetaModule * metaLevelOpSymbol.cc: replaced MetaModule with MixfixModule throughout file * metaLevel.hh (class MetaLevel): updated decl for downTermList() * metaDown.cc (downTermList): MetaModule -> MixfixModule * metaLevel.hh (class MetaLevel): updated decls for downTerm(), downSubstitution(), downAssignment() and downVariable() * metaDown.cc (downTerm): MetaModule -> MixfixModule (downSubstitution): MetaModule -> MixfixModule (downAssignment): MetaModule -> MixfixModule (downVariable): MetaModule -> MixfixModule * metaModule.cc (locateSpecialReps): deleted * metaModule.hh (class MetaModule): deleted data members machineIntegerSymbols, quotedIdentifierSymbols (findMachineIntegerSymbol): deleted (findQuotedIdentifierSymbol): deleted (class MetaModule): deleted decls for findMachineIntegerSymbol(), findQuotedIdentifierSymbol() and locateSpecialReps() * metaDown.cc (downModule): don't call locateSpecialReps() * entry.cc (addOpDeclaration): fill out machineIntegerSymbols and quotedIdentifierSymbols * mixfixModule.hh (class MixfixModule): added data members machineIntegerSymbols and quotedIdentifierSymbols (findMachineIntegerSymbol): added (findQuotedIdentifierSymbol): added (class MixfixModule): added decls for findMachineIntegerSymbol() and findQuotedIdentifierSymbol() * metaLevel.hh (class MetaLevel): updated decls for downSimpleSort(), downSimpleSortList(), downSimpleSortSet(), downSort() * metaDown.cc (downSimpleSort): MetaModule -> MixfixModule (downSimpleSortList): MetaModule -> MixfixModule (downSimpleSortSet): MetaModule -> MixfixModule (downSort): MetaModule -> MixfixModule * metaLevel.hh (class MetaLevel): updated decls for fastUpTerm() (both versions), fastUpSubstitution() and fastUpResultPair() * metaFastUp.cc (fastUpTerm): (DagNode* version) MetaModule -> MixfixModule (fastUpTerm): (Term* version) MetaModule -> MixfixModule (fastUpSubstitution): MetaModule -> MixfixModule (fastUpResultPair): MetaModule -> MixfixModule 1999-05-12 Steven Eker * interact.cc (handleDebug): only call cleanUpLexer() if we weren't interactive; if we do call cleanUpLexer() output a \n to start a new line after the users ^C 1999-05-11 Steven Eker * interact.cc (handleDebug): call cleanUpLexer() after ^C * bufferPrint.cc (prettyPrint): use chooseDisambiguator(); use rangeComponent() rather than getComponent() * prettyPrint.cc (prettyPrint): (Term* version) use chooseDisambiguator() (prettyPrint): (Term* version) use rangeComponent() rather than getComponent() (prettyPrint): (DagNode* version) use chooseDisambiguator() * mixfixModule.hh (class MixfixModule): added decl for chooseDisambiguator() * prettyPrint.cc (chooseDisambiguator): added * entry.cc (addOpDeclaration): use FreeSymbol::newFreeSymbol() (2 places) ===================================Engine49================================================== 1999-04-30 Steven Eker * search.cc (search): rewritten to handle problems of the form search subject => pattern . * mixfixModule.hh (class MixfixModule): added CONDITIONAL_COMMAND to enum Actions (class MixfixModule): added decl for makeCommand() (class MixfixModule): added decl for parseCommand() (class MixfixModule): added decl for makeCommandProductions() * mixfixParser.cc (makeCommand): added * mixfixModule.cc (makeCommandProductions): added (makeGrammar): call makeCommandProductions() * mixfixModule.hh (class MixfixModule): added COMMAND to enum NonTerminal; updated BASE * search.cc (search): don't rely on OneStep::findNextRewrite() to reduce its result 1999-04-29 Steven Eker * search.cc (search): now do naive breadth first search to find all states * preModule.hh (class PreModule): added decl for search() * search.cc: created * top.y: added KW_SEARCH as token * command.cc (search): added * lexer.flex: added search keyword * commands.y: added first approximation at syntax for search command 1999-04-26 Steven Eker * userLevelRewritingContext.cc (tracePreScApplication): changed message to make it more readable 1999-04-22 Steven Eker * preModule.cc (fixUpSymbols): use new QuotedIdentifierOpSymbol::fixUp() * quotedIdentifierOpSymbol.hh (class QuotedIdentifierOpSymbol): added decls for postInterSymbolPass() and reset() * quotedIdentifierOpSymbol.cc (fixUp): handle LESS_THAN case (eqRewrite): handle LESS_THAN case (postInterSymbolPass): added (reset): added (copyFixUp): copy trueTerm and falseTerm (fixUp): handle trueTerm and falseTerm * quotedIdentifierOpSymbol.hh (class QuotedIdentifierOpSymbol): added data members trueTerm and falseTerm (class QuotedIdentifierOpSymbol): updated fixUp decl (class QuotedIdentifierOpSymbol): added LESS_THAN to enum OpType 1999-04-20 Steven Eker * mixfixModule.cc (instantiateSortTest): don't pass boolSort to SortTestSymbol() (instantiatePolymorph): use new EqualitySymbol() conventions (instantiatePolymorph): use new BranchSymbol() conventions * prettyPrint.cc (showOps): remove " : (implemented by C++ code)" case and assert that we alays have declarations * mixfixModule.cc (instantiatePolymorph): call addOpDeclaration() for each polymorph symbol created (instantiateSortTest): call addOpDeclaration() for each sort test symbol created * prettyPrint.cc (operator<<): (DagNode* version) changed convention for calling graphPrint() (showOps): use ComplexSort since some built in ops will get error sorts in their domain and range in the near future * mixfixModule.hh (class MixfixModule): graphPrint() decl no longer static * prettyPrint.cc (prettyPrint): use instance-free version of rangeComponent() * quotedIdentifierDagNode.cc (specialPrint): deleted * quotedIdentifierDagNode.hh (class QuotedIdentifierDagNode): deleted specialPrint() decl * quotedIdentifierTerm.cc (specialPrint): deleted * quotedIdentifierTerm.hh (class QuotedIdentifierTerm): deleted specialPrint() decl * prettyPrint.cc (graphPrint): eliminate use of DagNode::specialPrint() 1999-04-19 Steven Eker * quotedIdentifierOpSymbol.hh (class QuotedIdentifierOpSymbol): added CONVERT to enum OpType * quotedIdentifierOpSymbol.cc (eqRewrite): added semantics for CONVERT (fixUp): added CONVERT case * lexerAux.cc (eatComment): last change should have corrected problem; the bug is now in flex 2.5.3 which is fixed in 2.5.4 1999-04-18 Steven Eker * lexerAux.cc (eatComment): try to handle the EOF in comment case ===================================Engine48================================================== ===================================Maude 1.0.2 released======================================= 1999-03-12 Steven Eker * prettyPrint.cc (prettyPrint): (Term* and DagNode* versions) fixed bug: ` instead of ' for quoted identifier ===================================Maude 1.0.1 released======================================= 1999-03-03 Steven Eker * bufferPrint.cc (prettyPrint): ignore printMixfix flag for SORT_TESTs * prettyPrint.cc (prettyPrint): ignore printMixfix flag for SORT_TESTs (both versions) * metaLevelSignature.cc (MACRO): unmade last change; to difficult to implement with existing meta level structure; wait until new meta level * metaDown.cc: use downQid() on 1st arg * metaLevelSignature.cc (MACRO): added MACRO for existingModuleSymbol * mixfixModule.cc (instantiateSortTest): set gather, no longer RIGHT_BARE, set prefix name correctly (instantiateSortTest): fillout mixfixSyntax 1999-03-02 Steven Eker * bufferPrint.cc (prettyPrint): made symmetric * prettyPrint.cc (prettyPrint): (DagNode* version) use flags local var (prettyPrint): (Term* version) symmetric changes with DagNode* version * entry.cc (addOpDeclaration): only worry about pseudo stuff when nrArgs == 0 * prettyPrint.cc (prettyPrint): (DagNode* version) handle disambiguation of machine integers, pseudo machine integers, quoted identifiers and pseudo quoted identifiers correctly * mixfixModule.hh (class MixfixModule): added PSEUDO_MACHINE_INTEGER and PSEUDO_QUOTED_IDENTIFIER to enum SymbolFlags (class MixfixModule): added data members machineIntegerComponents, quotedIdentifierComponents, overloadedMachineIntegers, overloadedQuotedIdentifiers * entry.cc (addOpDeclaration): fill out machineIntegerComponents and quotedIdentifierComponents; set PSEUDO_MACHINE_INTEGER and PSEUDO_QUOTED_IDENTIFIER flags; fill out overloadedMachineIntegers and overloadedQuotedIdentifiers 1999-02-26 Steven Eker * entry.cc (addOpDeclaration): make underscore warning more informative (addPolymorph): make underscore warning more informative 1999-02-16 Steven Eker * directoryManager.cc (pushd): temporary hack to fix possible compiler bug: we store directoryStack[oldLength - 1] in a local variable (pushd): Actually it's not a compiler bug but a subtle reference bug; added comment in code to this effect ===================================VectorExperiment========================================== 1999-02-09 Steven Eker * mixfixModule.cc (makeComponentProductions): only have parens for non-bubble components (makePolymorphProductions): only put polymorphic ops in non-bubble components 1999-02-05 Steven Eker * main.cc: added template for Vector 1999-02-03 Steven Eker * command.cc (parse): replaced Symbol::parse() with Symbol::fillInSortInfo() (match): replaced Symbol::parse() with Symbol::fillInSortInfo(); deleted Assert() * metaLevelOpSymbol.cc (metaLeastSort): replaced Symbol::parse() with Symbol::fillInSortInfo(); assume that there won't be any component errors in down'd term (metaParse): replaced Symbol::parse() with Symbol::fillInSortInfo() * mixfixParser.cc (parseTerm): replaced Symbol::parse() with Symbol::fillInSortInfo() (2 places) * bufferPrint.cc (prettyPrint): replaced Symbol::parse() with Symbol::fillInSortInfo() * prettyPrint.cc (prettyPrint): replaced Symbol::parse() with Symbol::fillInSortInfo() 1999-01-29 Steven Eker * directoryManager.cc (cd): use realPath() (pushd): use realPath() (realPath): remember to move cursor forward after we copy in a home directory path name (realPath): fix off-by-one error in .. handling loop (realPath): delete null case and resolve empty path to that of the current directory (pushd): optimization for "." to avoid chdir (popd): optimization for the case where the directory doesn't change * directoryManager.hh (class DirectoryManager): added decl for realPath() * directoryManager.cc (realPath): tidied up 1999-01-28 Steven Eker * directoryManager.cc (realPath): added ===================================Engine47================================================== ===================================Maude 1.00 released======================================= 1999-01-22 Steven Eker * import.cc (processImports): added check for us/using importation mode * mixfixModule.hh (class MixfixModule): added decl for ~MixfixModule() * mixfixModule.cc (~MixfixModule): added in order to deepSelfDestruct special terms within polymorphs 1999-01-21 Steven Eker * metaLevelOpSymbol.cc (~MetaLevelOpSymbol): added, to delete metaLevel * metaLevel.cc (reset): clear cachedMetaModule to fix nasty bug where we were keep a dag whose symbols had been deleted; delete cached module as well (~MetaLevel): added, to delete cachedModule; probably not really necessary since metalevel will be reset 2 GCs before it is deleted 1999-01-20 Steven Eker * directoryManager.cc (popd): fixed another bug where we were not using directoryStack * lexerAux.cc (cleanUpLexer): restore directory stack after closing files (includeFile): handle directories in a relative way; keep track of directory stack markers (handleEof): restore directory stack after end of file * top.y: use new pushd() return value * directoryManager.hh (class DirectoryManager): updated decls for pushd() and popd() * directoryManager.cc (popd): fixed off-by-one error (popd): take arg to allow poping to an arbitrary previous context (pushd): now return index to old context on successful pushd and UNDEFINED owise * preModule.cc (process): check for bad module after closing sort set * metaFastUp.cc (fastUpSort): turned ErrorCheck() for union sorts into an IssueAdvisory() * metaDown.cc (downImport): don't import bad modules * command.cc (selectModule): don't allow bad modules to be used * preModule.cc (process): don't call closeTheory() on bad modules (fixUpSymbols): mark module as bad if we couldn't parse an identity * import.cc (processImports): don't allow importation of bad modules 1999-01-19 Steven Eker * preModule.hh (class PreModule): updated decls for addSelected(), parse(), reduce(), rewrite(), loop(), contLoop(), selectModule() and match() * command.cc (addSelected): don't clear opName (parse): don't waste time swapping subject (reduce): don't waste time swapping subject (rewrite): don't waste time swapping subject (loop): don't waste time swapping subject (contLoop): don't clear input (2 places) (selectModule): don't clear moduleExpr (2 places) (match): made patternBubble and subjectBubble const * preModule.hh (class PreModule): updated decls for addImport(), addSortDecl(), addSubsortDecl(), addStatement() and addRule() * preModule.cc (addRule): rule is now const * preModule.hh (class PreModule): updated decls for addOpDecl(), setDomainAndRange(), setIdentity(), addVarDecl(), setGather(), setStrat(), addHook() (addImport): use copy ctor rather than swap on import (addSortDecl): use copy ctor rather than swap on sortDecl (addSubsortDecl): use copy ctor rather than swap on subsortDecl (addStatement): use copy ctor rather than swap on statement * ops.cc (addOpDecl): don't clear opName (setDomainAndRange): copy rather than swap domainAndRange (setIdentity): copy rather than swap identity (addVarDecl): don't clear varDecl (setGather): don't clear gather (2 places) (setStrat): don't clear strategy (2 places) (addHook): don't clear details * bottom.y (cleanUpParser): don't clear bubble, moduleExpr and pattern * commands.y: heavily rewritten to clear bubble & moduleExp before they are used rather than after * top.y (clear): added * modules.y: major rewrite to simplify grammar and clear bubble before it is used rather than relying on function that bubble is passed to clearing it afterwards; introduced new non-terminals domainRangeAttr and idKeyword to factor grammar * metaDown.cc (downSorts): handle redeclaration of a sort gracefully 1999-01-18 Steven Eker * metaDown.cc (downModule): try deleting cached module * metaLevel.hh (class MetaLevel): added decl for downVariable() * metaDown.cc (downVariable): added (downAssignment): simplified using downVariable() (downTerm): simplified using downVariable() (downTerm): check that operator actually exists before we use it (downTerm): reorganized and simplified; now check for existance of constants in appropriate sort 1999-01-17 Steven Eker * metaDown.cc (downSimpleSortSet): fixed non-negated condition bug (downSimpleSortList): fixed non-negated condition bug * entry.cc (addOpDeclaration): removed ErrorCheck()s and added error recovery code for the cases where assoc/com/id/idem ops have domain length != 2 * metaLevelOpSymbol.cc (metaPrettyPrint): return false rather than errorRewrite() if module or term cannot be brought down (metaPrettyPrint): deepSelfDestruct() term after we are finished with it 1999-01-16 Steven Eker * metaLevel.hh (class MetaLevel): added decl for downSimpleSortSet() * metaDown.cc (downSimpleSortSet): added downSimpleSortSet() * metaLevel.hh (class MetaLevel): added decls for downSimpleSortList() and downSimpleSort() * metaDown.cc (downSimpleSort): added (downSubsort): use downSimpleSort() (2 places) (downSimpleSort): issue advisory when can't find a named sort (downSimpleSortList): added (downFixUpBubble): use downSimpleSortList() (downOpDecl): use downSimpleSortList() and downSimpleSort() (downVarDecl): use downSimpleSort() (downMembAx): use downSimpleSort() (downTerm): use downSimpleSort() (2 places) (downSort): use downSimpleSortSet() and downSimpleSort() 1999-01-14 Steven Eker * interact.cc (commandLoop): unmade yesterdays change since we need to display prompt after ^C in most cases (commandLoop): clear ctrlC_Flag after calling cleanUpLexer() * command.cc (match): term ErrorCheck() into Assert() (match): check for ^C interrupts (match): reorganized to ensure that garbage is collected under error conditions (match): call DagNode::okToCollectGarbage() * lexerAux.cc (cleanUpLexer): use setSilentFlag() (handleEof): use setSilentFlag() * main.cc (main): use setSilentFlag() * userLevelRewritingContext.hh (class UserLevelRewritingContext): added static data member silentFlag (setSilentFlag): added * interact.cc: added silentFlag (beginModule): check silentFlag 1999-01-13 Steven Eker * command.cc (reduce): call UserLevelRewritingContext::beginCommand() (rewrite): call UserLevelRewritingContext::beginCommand() (match): call UserLevelRewritingContext::beginCommand() * modules.y: use UserLevelRewritingContext::beginModule() (2 places) * fileTable.cc (beginModule): no longer print ====== and module name here * userLevelRewritingContext.hh (class UserLevelRewritingContext): added decls for beginModule() and beginCommand() * interact.cc (beginModule): added (beginCommand): added * lexerAux.cc (cleanUpLexer): use fileTable.abortEverything() instead of multiple calls to fileTable.closeFile() (cleanUpLexer): rewritten to switch to each active buffer in turn so we can close its file. * fileTable.hh (class FileTable): added decl for abortEverything() * fileTable.cc (abortEverything): added * lexerAux.cc (cleanUpLexer): call IssueAdvisory() before setInteractive() so we get prompt after Advisory * interact.cc (commandLoop): when recovering from a control-C, don't call displayPrompt() since setInteractive() will doe this if needed when called from cleanUpLexer(); ===================================Engine46================================================== 1999-01-11 Steven Eker * mixfixParser.cc (parseSentence): added ifdef HACK so that we can still link to Earley parser to make comparisons * preModule.hh (class PreModule): modules becomes a reference rather than a vector so avoid automatic deletion at exit which causes purify to report spurious memory leaks * preModule.cc (PreModule): use new to initialize PreModule::modules * directoryManager.hh (class DirectoryManager): added decl for initialize() * directoryManager.cc (DirectoryManager): becomes initialize; to avoid a race condition between directoryStack, directoryNames and a static instance of ourself 1999-01-07 Steven Eker * main.cc (main): fixed bug where we were incrementing argv and then usng as if we had not. 1999-01-06 Steven Eker * top.y: added syntax to allow ls to take flags implemented semantics for ls with flags * lexerAux.cc (lexerFileNameMode): use to be lexerInMode() (lexerStringMode): added * lexer.flex: IN_MODE become FILE_NAME_MODE yyFileName becomes yyString added STRING_MODE * top.y (union): yyFileName becomes yyString 1998-12-24 Steven Eker * mixfixParser.cc (parseTerm): use printTokenVector() (parseStatement): tidied error messages (parseSentence): use printTokenVector() * token.hh (class Token): added decl for printTokenVector() * token.cc (printTokenVector): added (operator<<): implemented using printTokenVector() * main.cc (main): added -no-prelude option 1998-12-23 Steven Eker * mixfixParser.cc (parseSentence): added code to show use where first offending token is in the event of a syntax error * import.cc (donateStatements): don't import bad rule, sort constraints or equations 1998-12-22 Steven Eker * token.cc (operator<<): (Vector& version) handle spacing around special chars * bufferPrint.cc (prettyPrint): handle QIDs and MACHINE-INTs * metaFastUp.cc (fastUpQid): use Token::backQuoteSpecials() (fastUpQidSet): use Token::backQuoteSpecials() (2 places) (fastUpQidList): use Token::backQuoteSpecials() (2 places) * metaLevelOpSymbol.cc (metaParse): don't bother with unbackquoting here as it is down in downQid() * metaDown.cc (downQid): do unbackquoting here; use unBackQuoteSpecials() * loopSymbol.cc (extractQid): use unBackQuoteSpecials() * token.hh (unBackQuoteSpecials): created from unBackQuote(); basically its dangerous to strip backquotes from anything except lone special chars * loopSymbol.cc (extractQid): simplified using Token::unBackQuote() (createQidList): greatly simplified using Token::backQuoteSpecials() * token.hh (backQuoteSpecials): added (unBackQuote): added * metaLevelOpSymbol.hh (class MetaLevelOpSymbol): added META_PRETTY_PRINT to enum OpType (class MetaLevelOpSymbol): added decl for metaPrettyPrint() * metaLevelOpSymbol.cc (metaPrettyPrint): added (eqRewrite): added meta-pretty-print case * metaLevel.hh (class MetaLevel): added decl for fastUpQidList() * metaFastUp.cc (fastUpQidList): added * mixfixModule.hh (class MixfixModule): added decls for bufferPrint() and buffer versions of prettyPrint(), printTokens(), printTails() * bufferPrint.cc: created 1998-12-21 Steven Eker * commands.y: don't use moduleExp in select command * top.y: deleted tokens '*', '+', TO and KW_LABEL * modules.y: added KW_LS to startKeyword use endTokens rather than moduleExp in import decl syntax deleted moduleExp nonterminal deleted renamingList and renamingItem non terminals * top.y: added decl for token KW_LS added syntax and symnatics for ls command simplified top level syntax, deleting loop and item nonterminals * lexer.flex: added token for ls deleted old prompt stuff * top.y: check for failure and give warning for cd/pushd/popd directives * token.cc (extractMixfix): fixed nasty bug where we were mishandling ` * top.y: added syntax and symnatics for pushd and popd * directoryManager.cc (cd): greatly simplified, making use of realpath()s ability to resolve relative names. (popd): implemented (pushd): implemented * top.y (union): added const char* yyFileName to parser union added token FILE_NAME added syntax and semantics for cd directive * lexer.flex: IN_MODE now returns file name rather than calling includeFile() - should really be renamed 1998-12-20 Steven Eker * directoryManager.cc (DirectoryManager): use getenv() (cd): implemented using realpath() * lexer.flex: added keywords pwd, pushd, popd, cd * main.hh: added fwd decl for directoryManager * top.y: added token decls for PWD, CD, PUSHD and POPD added syntax and semantics for PWD * modules.y: added PWD, CD, PUSHD and POPD to startKeyword * main.cc: added global directoryManager object * directoryManager.cc: created * directoryManager.hh (class DirectoryManager): created * command.cc (printOpDef): handle assoc, comm, left/right id, idem, strat, memo, prec, gather * mixfixModule.hh (class MixfixModule): deleted MAY_NOT_LEFT_ASSOC and MAY_NOT_RIGHT_ASSOC from enum SymbolFlags (class MixfixModule): updated decls for mayAssoc() and computePrecAndGather() (class MixfixModule): added ATTRIBUTES to enum SymbolFlags * mixfixModule.cc (mayAssoc): now return UNDEFINED if diff components or no sort info (computePrecAndGather): handle special default gathering case in a cleaner more efficient way; and avoid using these special case unless leftmost arg, rightmost arg and range are all in the same component. (computePrecAndGather): take symbol arg (makeSymbolProductions): don't call mayAssoc(); pass symbol to computePrecAndGather() in op case 1998-12-19 Steven Eker * entry.cc (addOpDeclaration): detect and recover from the case where the number of underscores is not equal to the number of arguments (addPolymorph): detect and recover from the case where the number of underscores is not equal to the number of arguments * token.hh (class Token): updated decl for extractMixfix() * token.cc (extractMixfix): now return number of underscores 1998-12-18 Steven Eker * preModule.hh (class PreModule): added decl for printOpDef() * command.cc (showModule): rewritten (printOpDef): added * mixfixModule.hh (getModuleType): added * command.cc (showModule): deleted old stub Fri Dec 18 18:50:43 1998 Steven Eker * preModule.hh (class PreModule): added decl for showModule() Fri Dec 18 18:49:01 1998 Steven Eker * preModule.hh (class PreModule): deleted decl for dump() Fri Dec 18 18:48:08 1998 Steven Eker * command.cc (showModule): added Fri Dec 18 18:46:44 1998 Steven Eker * preModule.cc (dump): deleted Thu Dec 17 15:31:00 1998 Steven Eker * mixfixParser.cc (parseSentence): removed previous cq handling code Thu Dec 17 15:29:09 1998 Steven Eker * mixfixModule.cc (makeStatementProductions): added rule for cq conditional equations Thu Dec 17 15:16:50 1998 Steven Eker * mixfixModule.cc (mayAssoc): put leq() test arround the correct way ===================================Engine45================================================== Wed Dec 16 10:26:10 1998 Steven Eker * mixfixModule.cc (computePrecAndGather): use MAY_NOT_LEFT_ASSOC and MAY_NOT_RIGHT_ASSOC to do a smarter computation of default gathering (makeSymbolProductions): fix bug where we weren't calling computePrecAndGather() for unary symbols * mixfixModule.hh (class MixfixModule): added decl for mayAssoc() * mixfixModule.cc (makeSymbolProductions): call mayAssoc() and set MAY_NOT_LEFT_ASSOC / MAY_NOT_RIGHT_ASSOC as appropriate for mixfix symbols (mayAssoc): added * mixfixModule.hh (class MixfixModule): added MAY_NOT_LEFT_ASSOC and MAY_NOT_RIGHT_ASSOC to enum SymbolFlags * mixfixParser.cc (parseSentence): change cq to ceq just before giving statement to CFG parser * import.cc (donateOps): fixed bug where in a var was declared twice in an imported module we would import it twice since first importing is invisible. * lexerAux.cc (handleEof): need to restore old buffer from stack, even if we're about to read a pending file so that inputFile() has something to stack * lexerAux.hh (eatComment): updated includeFile() decl * main.cc (main): support pending files * lexerAux.cc (handleEof): support pending file idea (includeFile): return a bool to say if we included file ok (cleanUpLexer): avoid reading anymore pending files after we're called * main.cc (main): use setHandlers() * userLevelRewritingContext.hh (class UserLevelRewritingContext): replace decl for initialize() with that for setHandlers() * interact.cc (initialize): now take handleCtrlC flag instead of interactive flag; assume interactive flag is correctly set before entry (initialize): changed to setHandlers() * main.cc (main): handle command line file as an inclusion (main): changed calculation of whether to handle ctrl-C * lexerAux.cc (createRootBuffer): call UserLevelRewritingContext::setInteractive() Tue Dec 15 11:08:08 1998 Steven Eker * lexerAux.hh: includeFile() decl * lexerAux.cc (includeFile): arg is now const char* * main.cc (findPrelude): added (main): use find prelude * mixfixModule.cc (findSymbol): support assoc symbols with args > 2 (i.e. in flattened form) * metaFastUp.cc (fastUpTerm): (Term* version) added hack to handle metaDisambigSymbol for MACHINE_INTEGERs (fastUpTerm): (DagNode* version) added hacks to handle metaDisambigSymbol for MACHINE_INTEGERs and QUOTED_IDENTIFIERs Mon Dec 14 10:27:18 1998 Steven Eker * metaDown.cc (downModule): call locateSpecialReps() (downTerm): rearranged so we look for machine ints and qid first * metaModule.hh (class MetaModule): added decl for locateSpecialReps() * metaModule.cc (locateSpecialReps): added (addComplexSymbol): (non-polymorph version) don't keep track of machine int and quoted identifiers anymore; this is now the job of locateSpecialReps() * metaModule.hh (class MetaModule): data members machineIntegerSymbols and quotedIdentifierSymbols become PointerMaps (findMachineIntegerSymbol): moved here; made inline; rewritten using pointer map (findQuotedIdentifierSymbol): moved here; made inline; rewritten using pointer map Sun Dec 13 16:47:11 1998 Steven Eker * mixfixModule.cc (findSymbol): can't use range component to generate polymorph since at metalevel we won't know this; use domainComponents[1] in BRANCH_SYMBOL case * metaDown.cc (downModule): rewritten to handle imports * metaModule.hh (addImport): added * preModule.hh (class PreModule): made importation functions public; the whole area of module classes needs to be cleaned up when we have the time. * metaModule.cc (importStatements): added (fixUpImportedOps): added (importOps): added (importSorts): added (resetImports): added * metaModule.hh (class MetaModule): added data member importedModules (should really combine common parts of this class with PreModule sometime/somehow) * preModule.hh (class PreModule): added decl for findModule() * import.cc (findModule): added * metaDown.cc (downImports): handle lists of imports (downImport): added * metaLevelSignature.cc (MACRO): added call for includingSymbol (MACRO): added call for importListSymbol * metaLevel.cc (MetaLevel): clear all symbol pointers on creation Fri Dec 11 10:08:33 1998 Steven Eker * preModule.hh (class PreModule): added decl for setInclude() * import.cc (setInclude): added * lexer.flex: deleted BOOL/bool keywords * top.y: deleted decl for KW_BOOL * commands.y: generalize set include BOOL on/off syntax to set include on/off syntax * import.cc (processImports): handle default imports * preModule.hh (class PreModule): added static data member defaultImports * metaLevel.cc (MetaLevel): fixed bug where we setting trueTerm twice rather than setting falseTerm * mixfixModule.cc (createSortTest): deleted * mixfixModule.hh (class MixfixModule): CREATE_SORT_TEST -> MAKE_SORT_TEST in enum Actions (class MixfixModule): deleted decl for * mixfixModule.cc (makeBoolProductions): CREATE_SORT_TEST -> MAKE_SORT_TEST (2 places) * mixfixParser.cc (makeTerm): use instantiateSortTest() rather than createSortTest() (makeTerm): CREATE_SORT_TEST -> MAKE_SORT_TEST * metaDown.cc (downTerm): use instantiateSortTest() rather than createSortTest() * mixfixModule.hh (class MixfixModule): deleted decls for insertPolymorph() and makePolymorph() * mixfixModule.cc (makePolymorph): deleted * mixfixParser.cc (makeTerm): use instantiatePolymorph() instead of makePolymorph() (makeTerm): reorganized the polymorph case code * entry.cc (addOpDeclaration): changed test for different flags so we ignore overloaded flags * import.cc (fixUpDonatedOps): remember to translate sort as well as sort test symbol! * mixfixModule.hh (class MixfixModule): added decl for instantiateSortTest() * entry.cc (addOpDeclaration): added more detailed error meesage for incompatable overloading * mixfixModule.cc (instantiateSortTest): added * import.cc (fixUpDonatedOps): first crude attempt at creating sort test ops that will be needed for importing equations etc (fixUpDonatedOps): pass flags to findSymbol() * main.cc (main): check for multiple files on command line * lexerAux.cc (includeFile): removed yesterdays hack * main.cc (main): use createRootBuffer(); don't access yyin * lexerAux.cc (createRootBuffer): added Thu Dec 10 13:17:41 1998 Steven Eker * lexerAux.cc (includeFile): added hack so that we can call this before calling yylex() * main.cc (main): read in preamble before processing users commands * mixfixModule.hh (class MixfixModule): added decl for instantiatePolymorph() * mixfixModule.cc (instantiatePolymorph): added (findSymbol): handle polymorphs using instantiatePolymorph() * import.cc (fixUpDonatedOps): make instatiations of polymorphs in importer for those taht already exist in our flat module so that our equations etc that use those instantiations can be translated * mixfixModule.cc (makePolymorph): pass extra component arg to ctors for BranchSymbol() and EqualitySymbol() * preModule.cc (process): set firstOnTheFlySymbol * preModule.hh (class PreModule): added data member firstOnTheFlySymbol * symbolTranslation.hh (translationExists): added Wed Dec 9 09:53:59 1998 Steven Eker * mixfixModule.hh (class MixfixModule): added decl for copyFixUpPolymorph() * mixfixModule.cc (copyFixUpPolymorph): added * import.cc (fixUpDonatedOps): use copyFixUpPolymorph() to fixup imported polymorphs * mixfixModule.hh (class MixfixModule): updated decl for addPolymorph() * metaDown.cc (downOpDecl): pass Token as first arg of addPolymorph() * entry.cc (addPolymorph): take Token as first arg * process.cc (processOps): pass Token as fisrt arg of addPolymorph() * import.cc (donateOps): first crude attempt at handling polymorphs * metaDown.cc (downOpDecl): use new tokenize() (downVarDecl): use new tokenize() * token.hh (tokenize): added 2nd version * mixfixModule.hh (class MixfixModule): update decl for addOpDeclaration() * entry.cc (addOpDeclaration): set line number for created symbol; take first arg as a Token rather than as an int * token.hh (makePrefixName): added * preModule.cc (dump): use prefixName rather than prefixNameCode (two places) * import.cc (donateOps): use prefixName rather than prefixNameCode (two places) * process.cc (processOps): use prefixName rather than prefixNameCode (two places) * ops.cc (addVarDecl): set prefixName rather than prefixNameCode (addOpDecl): set prefixName rather than prefixNameCode; use makePrefixName() * preModule.hh (class PreModule): Token prefixName replaces int prefixNameCode in struct OpDecl * preModule.cc (fixUpSymbols): (LOOP_SYMBOL section) updated cast on qidListSymbol; fixed bad cast on nilQidListSymbol * loopSymbol.cc (fixUp): 3 arg now AU_Symbol* * loopSymbol.hh (class LoopSymbol): data member qidListSymbol becomes an AU_Symbol*; added decl for copyFixUp() (class LoopSymbol): updated decl for fixUp() * loopSymbol.cc (copyFixUp): added * import.cc (fixUpDonatedOps): handle LOOP_SYMBOLs using LoopSymbol::copyFixUp() Tue Dec 8 10:35:21 1998 Steven Eker * import.cc (fixUpDonatedOps): handle META_LEVEL_OP_SYMBOLs using MetaLevelOpSymbol::copyFixUp() * metaLevelOpSymbol.hh (class MetaLevelOpSymbol): added decl for copyFixUp() * metaLevelOpSymbol.cc (copyFixUp): added, using new MetaLevel ctor * metaLevel.hh (class MetaLevel): added decl for new ctor * metaLevel.cc (bind): rewritten using macro expansion to generate the huge branching code fragment (MetaLevel): new ctor, using macro expansion to copy and translate an original MetaLevel object * metaLevelSignature.cc: created * metaLevel.hh (class MetaLevel): replace long list of data member decls with macro expansion version * mixfixModule.hh (class MixfixModule): added SYMBOL_TYPE to enum SymbolFlags * import.cc (fixUpDonatedOps): use OPS_FIXED_UP (fixUpDonatedOps): simplified using MachineIntegerOpSymbol::copyFixUp() (fixUpDonatedOps): simplified QuotedIdentifierOpSymbol case * preModule.hh (class PreModule): added OPS_FIXED_UP to enum Phase Mon Dec 7 10:31:50 1998 Steven Eker * quotedIdentifierOpSymbol.hh (class QuotedIdentifierOpSymbol): added decl for copyFixUp() * quotedIdentifierOpSymbol.cc (copyFixUp): added * import.cc (fixUpDonatedOps): handle MACHINE_INTEGER_OPs (fixUpDonatedOps): handle QUOTED_IDENTIFIER_OPs * mixfixParser.cc (parseTerm): put \n before -versus- * entry.cc (addOpDeclaration): check for variable overloading and overloading with incompatable flags Sun Dec 6 18:52:51 1998 Steven Eker * preModule.cc (process): call fixUpImportedOps() * preModule.hh (class PreModule): added op decls for fixUpImportedOps() and fixUpDonatedOps() * import.cc (donateOps): set opDecl.importSymbol if we are the importOriginator; could try setting this to zero if not and avoid the need for the importOriginator flag; but this might cause a problem with polymorphs later on (fixUpImportedOps): added (fixUpDonatedOps): added * preModule.hh (class PreModule): added importOriginator field to struct OpDecl; the idea is we set this during an import of this PreModule to know if we have responsibility for fixing up this particular symbol (class PreModule): added fields importSymbol and importPolymorphIndex to struct OpDecl Sat Dec 5 17:23:31 1998 Steven Eker * metaLevelOpSymbol.cc (metaApply): added hack to make sure all dagNodes in substitution have sorts (they might be identities or pulled out from under lazy function symbols). Fri Dec 4 11:07:21 1998 Steven Eker * preModule.cc (dump): use MixfixModule:: qualification on enums * mixfixModule.hh (class MixfixModule): enum Precedence made public * preModule.cc (fixUpSymbols): use MixfixModule:: qualification on enums (fixUpSymbols): use flatModule 11 (dump): use flatModule * ops.cc (addVarDecl): use MixfixModule:: qualification on enums (setPrec): use MixfixModule:: qualification on enums (setGather): use MixfixModule:: qualification on enums (setStrat): use MixfixModule:: qualification on enums (addHook): use MixfixModule:: qualification on enums * command.cc (parse): use flatModule (reduce): use flatModule (3 places) (rewrite): use flatModule (3 places) (cont): use flatModule (loop): use flatModule (3 places) (contLoop): qualify LOOP_SYMBOL (contLoop): use flatModule (3 places) (match): use flatModule (3 places) (loop): qualify LOOP_SYMBOL * preModule.cc (findHookSymbol): use flatModule (2 more places) * process.cc (processSorts): use flatModule (2 places) (processSorts): use MixfixModule:: qualification on enums (getSort): use flatModule (2 places) (processOps): use MixfixModule:: qualification on enums (processOps): use flatModule (3 places) (processStatements): use flatModule * import.cc (importOps): use flatModule (importStatements): use flatModule (donateStatements): use flatModule (3 places) (donateOps): use flatModule (2 places) (donateSorts): use flatModule (donateOps): use MixfixModule:: qualification on enums (importSorts): use flatModule * preModule.cc (PreModule): set flatModule = new MixfixModule; this is a temporary hack; once we have lazy updating we should do something else (~PreModule): delete flatModule (PreModule): don't initialize our now non-existant base (findHookSymbol): use flatModule (process): use flatModule (11 places) * modules.y: qualify attribute enums with MixfixModule rather than PreModule * bottom.y (cleanUpParser): use getFlatModule() * commands.y: use getFlatModule() in all show commands that are actually implemented in class MixfixModule * preModule.hh (class PreModule): no longer derived from MixfixModule (class PreModule): added data member flat module (getFlatModule): added Thu Dec 3 17:09:15 1998 Steven Eker * interact.cc (initialize): ignore interval timer signals in order to allow for very long runs * main.hh: deleted currentModule decl * top.y: currentModule var def moved here * main.cc (main): recognize -batch flag; issue warning rather than error for unrecognized flag; get interactive flag correct Wed Dec 2 10:32:38 1998 Steven Eker * top.y: added decls for cTokenBarMatchLeqNumber and cTokenBarMatchLeqRight * commands.y: moduleAndTerm2 -> mModuleAndTerm inEnd2 -> mInEnd added mNumberModuleTerm, mNumberModuleTerm1 and mNumberModuleTerm2 added cTokenBarMatchLeqNumber and cTokenBarMatchLeqRight modified match syntax to handle [] * preModule.hh (class PreModule): added decl for match() * command.cc (match): added * commands.y: deleted inExp and nonInTerm use moduleAndTerm2 in match command syntax added match; use in place of MATCH * top.y: added decl for cTokenBarMatchLeqColon * commands.y: added moduleAndTerm2 and inEnd2 added cTokenBarMatchLeqColon and cTokensBarMatchLeqColon Tue Dec 1 12:07:34 1998 Steven Eker * commands.y: use cTokens rather than tokens in "(" ")"; parse this in command mode * top.y: added decl for cSimpleTokenBarDot * commands.y: added cSimpleTokenBarDot, use this in place of tokenBarDot in cSimpleOpName * top.y: ctoken -> cToken cTokenBarNumber -> cTokenBarDotNumber cTokenBarRight -> cTokenBarDotRight * commands.y: allow cTokenBarIn to take '.' hacked inEnd to disallow empty term in the "in module" case (for consistancy) revert to using moduleAndTerm for parse and reduce commands allow cTokenBarLeftIn to take '.' cTokenBarNumber -> cTokenBarDotNumber cTokenBarRight -> cTokenBarDotRight nrModuleTerm* replaced by numberModuleTerm* which handle things like rew [ . and rew [42 . in a consistant way use ctokens rather than tokens in cSimpleOpName ctokens -> cTokens ctoken -> cToken * top.y: cTokenBarColon -> cTokenBarDotColon * commands.y: cTokenBarColon -> cTokenBarDotColon cTokensBarColon -> cTokensBarDotColon * top.y: added decls for select, optDebug and optNumber * commands.y: debug -> optDebug fused both continue productions added optNumber fused trace select and trace deselect commands added select non-terminal opNamesList2 -> cOpNameList simpleNameList2 -> cSimpleNameList ===================================Engine44================================================== Mon Nov 30 16:52:02 1998 Steven Eker * command.cc (rewrite): don't print result or set saved dag if aborting * lexerAux.cc (includeFile): use IssueWarning() rather than ErrorCheck() to handle errors Wed Nov 25 08:58:32 1998 Steven Eker * mixfixModule.cc (makeComponentProductions): nasty little hack for Paco - we don't add production ::= if Foo is a bubble component * quotedIdentifierOpSymbol.cc (eqRewrite): use traceAbort() * metaLevelOpSymbol.cc (metaSortLeq): return the value of builtInReplace() since we now have to deal with abort (metaSameComponent): ditto (metaLeastSort): ditto (metaLesserSorts): ditto (metaGlbSorts): ditto (metaParse): ditto (errorRewrite): ditto (errorRewrite2): ditto (metaReduce): reorg to handle abort correctly; use UserLevelRewritingContext::META_EVAL (metaRewrite): ditto (metaApply): ditto, but much more complicated - may want to simplify at some point * command.cc (reduce): only print result if we didn't abort * userLevelRewritingContext.hh (class UserLevelRewritingContext): added decl for traceAbort() * userLevelRewritingContext.cc (tracePostEqRewrite): stripped abortFlag handling code since this should now no longer be called if abortFlag set; added Assert() to check this property; not quit true; may be called after tracePreEqRewrite() thats sets abort flag; Assert moved inside if stmt * interact.cc (traceAbort): added * userLevelRewritingContext.hh (clearDebug): clear abortFlag * interact.cc (handleDebug): handle abortFlag; decremeted debugLevel before going into abort mode * userLevelRewritingContext.cc (tracePostEqRewrite): first attempt at recognizing abortFlag * trial.cc: created to hold all trial code from userLevelRewritingContext.cc * preModule.hh (class PreModule): updated cont() decl * commands.y: added syntax and semantics for debug cont command * command.cc (cont): call UserLevelRewritingContext::setDebug() if debug arg true and UserLevelRewritingContext::clearDebug() at the end anyway Tue Nov 24 14:57:44 1998 Steven Eker * command.cc (rewrite): call UserLevelRewritingContext::setDebug() if debug arg true and UserLevelRewritingContext::clearDebug() at the end anyway * preModule.hh (class PreModule): updated rewrite() decl * commands.y: added syntax and semantics for debug rewrite * userLevelRewritingContext.hh (setTraceFlag): added * commands.y: use UserLevelRewritingContext::setTraceFlag() instead of RewritingContext::setTraceStatus() * top.y: move empty case from item to top added loop nonterminal so we can treat the empty case specially * userLevelRewritingContext.hh (class UserLevelRewritingContext): added decl for displayPrompt() * interact.cc (setInteractive): call display prompt if we changed from non-interactive to interactive and we didn't see a ctrl-C (displayPrompt): added (commandLoop): use displayPrompt() * userLevelRewritingContext.hh (setInteractive): moved to interact.cc * top.y: now have recursive top def; do YYACCEPT more selectively; in particular do not do an YYACCEPT immediatly after recognizing "in" since we don't want a spurious prompt; or after we successfully handle an "eof" Mon Nov 23 11:08:39 1998 Steven Eker * mixfixModule.cc (findSymbol): temp hack to find bug * userLevelRewritingContext.hh (setDebug): added (clearDebug): added (class UserLevelRewritingContext): added decls for setDebug() and clearDebug() * preModule.hh (class PreModule): updated decl for reduce() * command.cc (reduce): call UserLevelRewritingContext::setDebug() if debug arg true and UserLevelRewritingContext::clearDebug() at the end anyway * lexer.flex: added keyword debug * top.y: added debug non terminal decl and token KW_DEBUG * commands.y: added debug non terminal; added "debug reduce" command * interact.cc (commandLoop): restore trace status after handling ctrl-C interrupt * userLevelRewritingContext.hh (class UserLevelRewritingContext): added static data members stepFlag and abortFlag; deleted static data member parseResult * interact.cc (handleDebug): rewritten using stepFlag and abortFlag Sat Nov 21 12:29:23 1998 Steven Eker * top.y: set parseResult to QUIT for empty command * main.cc (main): update call to commandLoop() * userLevelRewritingContext.hh (class UserLevelRewritingContext): updated commandLoop() decl * interact.cc (commandLoop): use new yyparse() convention; return parseResult (handleDebug): use new commandLoop() convention * userLevelRewritingContext.hh (setParseResult): deleted (class UserLevelRewritingContext): deleted static data member parseResult * commands.y: use PARSER_RESULT macro rather than UserLevelRewritingContext::setParseResult() to avoid reentrancy problem * top.y: added back non-terminal "item"; now do a YYACCEPT; after each item to avoid hanging on look-a-head use YYPARSE_PARAM to avoid reentrancy problem Fri Nov 20 11:44:35 1998 Steven Eker * main.cc (main): use MixfixModule::setPrintMixfix(false) * lexer.flex: use UserLevelRewritingContext::interrupted(), QUIT -> KW_QUIT * bottom.y (yyerror): use UserLevelRewritingContext::interrupted() * commands.y (command): debugging commands rewritten using UserLevelRewritingContext::setParseResult() * top.y (directive): rewritten using UserLevelRewritingContext::setParseResult() * userLevelRewritingContext.hh (setParseResult): added * top.y: don't touch prompt global variable; top is no longer a recursive list of items deleted non-terminal "item" token QUIT -> KW_QUIT * main.hh: deleted decls for ctrlC_Interrupt and prompt global variables * main.cc (main): call UserLevelRewritingContext::initialize() (interruptHandler): deleted (setSignalHandlers): deleted deleted ctrlC_Interrupt global variable (main): don't call setSignalHandlers() * userLevelRewritingContext.hh (setInteractive): added * lexerAux.cc (getInput): use UserLevelRewritingContext::interrupted() (cleanUpLexer): call UserLevelRewritingContext::setInteractive() (includeFile): call UserLevelRewritingContext::setInteractive() (handleEof): call UserLevelRewritingContext::setInteractive() deleted global variable "interactive" * userLevelRewritingContext.hh (class UserLevelRewritingContext): deleted static data members debugMode, savedTraceStatus, debugStatus (class UserLevelRewritingContext): added static data members interactiveFlag, traceFlag, debugLevel and parseResult (class UserLevelRewritingContext): enum ParseResult replaces enum DebugCommand (class UserLevelRewritingContext): deleted decls for handleCtrlC(), clearCtrlC(), debugCommand(), printPrompt() (class UserLevelRewritingContext): added decls for interruptHandler(), initialize() (interrupted): added Thu Nov 19 15:42:33 1998 Steven Eker * interact.cc: created by splitting off user interaction code from userLevelRewritingContext.cc (clearCtrlC): deleted (handleCtrlC): deleted (commandLoop): rewritten (handleDebug): rewritten (printPrompt): deleted (debugCommand): deleted (initialize): added (interruptHandler): added Wed Nov 18 11:47:25 1998 Steven Eker * userLevelRewritingContext.hh (class UserLevelRewritingContext): added WHERE to enum DebugCommand * lexer.flex: added keyword where * commands.y: added syntax for where command * top.y: added token KW_WHERE * userLevelRewritingContext.hh (class UserLevelRewritingContext): added decl for where() * userLevelRewritingContext.cc (where): added * lexerAux.cc (getInput): call printPrompt() * userLevelRewritingContext.hh (class UserLevelRewritingContext): added decl for printPrompt() * userLevelRewritingContext.cc (debugCommand): added (printPrompt): added * userLevelRewritingContext.hh (class UserLevelRewritingContext): added DebugCommand (class UserLevelRewritingContext): added decl for debugCommand() and static data member debugStatus * lexer.flex: added keyword resume, abort and step * commands.y: added syntax and actions for resume, abort and step * top.y: added tokens for resume, abort and step Mon Nov 16 10:39:06 1998 Steven Eker * lexerAux.cc (cleanUpLexer): need to goto INITIAL mode, not ID_MODE * userLevelRewritingContext.hh (class UserLevelRewritingContext): added decls for commandLoop(), handleCtrlC(), clearCtrlC() (class UserLevelRewritingContext): added decl for handleDebug() * userLevelRewritingContext.cc (traceBeginEqTrial): call handleDebug() (traceBeginRuleTrial): call handleDebug() (traceBeginScTrial): call handleDebug() (tracePreEqRewrite): call handleDebug() (tracePreRuleRewrite): call handleDebug() (tracePreScApplication): call handleDebug() (commandLoop): added (handleDebug): added * userLevelRewritingContext.hh (class UserLevelRewritingContext): added static data members ctrlC_Flag, debugMode, savedTraceStatus * userLevelRewritingContext.cc (clearCtrlC): added (handleCtrlC): added * userLevelRewritingContext.hh (class UserLevelRewritingContext): updated makeSubcontext() decl * metaLevelOpSymbol.cc (metaSortLeq): use RewritingContext::builtInReplace() (metaSameComponent): use RewritingContext::builtInReplace() (metaLeastSort): use RewritingContext::builtInReplace() (metaLesserSorts): use RewritingContext::builtInReplace() (metaGlbSorts): use RewritingContext::builtInReplace() (metaReduce): use RewritingContext::builtInReplace() (metaParse): use RewritingContext::builtInReplace() (metaRewrite): use RewritingContext::builtInReplace() (metaApply): use RewritingContext::builtInReplace() (errorRewrite): use RewritingContext::builtInReplace() (errorRewrite2): use RewritingContext::builtInReplace() * quotedIdentifierOpSymbol.cc (eqRewrite): traceStatus() -> getTraceStatus() * userLevelRewritingContext.hh (class UserLevelRewritingContext): updated complex ctor decl * commands.y: setTraceFlag() -> setTraceStatus() * userLevelRewritingContext.hh (setTraceFlag): deleted (class UserLevelRewritingContext): deleted static data member traceFlag * userLevelRewritingContext.cc (UserLevelRewritingContext): (simple version): init parent, purpose and localTraceFlag (UserLevelRewritingContext): (complex version): take extra args parent and purpose; init parent, purpose and localTraceFlag (makeSubcontext): purpose is now an int, pass parent and purpose to ctor; use localTraceFlag (traceBeginEqTrial): check localTraceFlag (traceBeginRuleTrial): check localTraceFlag (traceBeginScTrial): check localTraceFlag (tracePreScApplication): check localTraceFlag (tracePreRuleRewrite): check localTraceFlag (tracePreEqRewrite): check localTraceFlag * userLevelRewritingContext.hh (class UserLevelRewritingContext): added enum OtherPurpose; data members parent, purpose, localTraceFlag Sat Nov 14 21:17:50 1998 Steven Eker * main.cc (interruptHandler): take arg list (...) for ANSI compliance No longer need decl for sigvec() Fri Nov 13 11:39:46 1998 Steven Eker * main.cc (main): call cleanUpLexer() rather than returnToTopLevel() and lexerInitialMode() * lexerAux.cc (returnToTopLevel): becomes cleanUpLexer(), now restore initial lexer mode * main.cc (main): call returnToTopLevel() when recovering from an interrrupt * lexer.flex: don't call handleEof() in start of yylex() code; clean up will be handled by outside caller via returnToTopLevel() (<>): call yyterminate() if ctrlC_Interrupt; handleEof() will now only handle real eofs and eof directives; not eofs generated by ctrl-C handling; maybe we should use yywrap()? * lexerAux.cc (getInput): rewritten using read() system call to avoid slow system call restart problem in linux stdio lib (returnToTopLevel): added * lexer.flex: MAUDE_EOF -> KW_EOF * top.y: MAUDE_EOF -> KW_EOF * lexer.flex: define YY_DECL; use pure parser calling convention instead of yylval * top.y: added %pure_parser directive Thu Nov 12 11:19:29 1998 Steven Eker * lexer.flex: added code to check for ctrlC_Interrupt and call yyterminate() if true; the reason for this is that if we are reading from a file we may grab a huge chunk of the file with a single call to YY_INPUT and then end up ignore ctrl-C while we processs it; * fileTable.cc (beginModule): only print module name type and name if file stack is non-empty; this is a temporary hack we really need some consistant way of check for an interactive file and quiet reading mode (closeFile): print message about being down with file (openFile): print message about reading file * lexerAux.cc (handleEof): deleted prompt code * fileTable.cc (beginModule): print module name type and name * lexer.flex: deleted promptSave * lexerAux.cc (eatComment): don't increment line number for \r (includeFile): set interactive (handleEof): set interactive * main.cc (setSignalHandlers): use sigaction mechanism rather than sigvec mechanism for compatibility with non-bsd 4.2 based unixes Wed Nov 11 14:01:33 1998 Steven Eker * main.cc: made ctrlC_Interrupt volatile * main.hh (yylex): made ctrlC_Interrupt volatile Tue Nov 10 11:53:24 1998 Steven Eker * bottom.y (cleanUpParser): handle case where there is no currentModule * lexerAux.cc (getInput): now return void * bottom.y (cleanUpParser): if currentModule is incomplete, print an advisory and delete it (yyerror): be quiet if handling a ctrl-C * lexer.flex: don't handle prompting anymore * lexerAux.cc (handleEof): don't allow inStackPtr to go -ve during ctrl-C handling (getInput): call clearerr() if we get an EOF due to ctrl-C (getInput): handle prompting * main.cc (main): use cleanUpParser() after ctrl-C * bottom.y (cleanUpParser): added * main.cc (main): reset lexer and recall parser after ctrl-C * bottom.y (yyerror): issue advisory in ctrl-C case * main.cc (main): use sigvec() * main.hh (yylex): added decl for ctrlC_Interrupt * main.cc: added global variable ctrlC_Interrupt * lexer.flex: redefine YY_INPUT to use getInput() * lexerAux.hh (handleEof): added decl for getInput() * lexerAux.cc (getInput): added Mon Nov 9 11:40:20 1998 Steven Eker * modules.y: opNameList2 and simpleOpName2 moved to command.y * parser.bison: split into top.y, modules.y, commands.y, bottom.y Fri Nov 6 16:34:11 1998 Steven Eker * lexer.flex: added tokens MATCH_LEQ and UNIFY_EQ to command mode * parser.bison (command): added syntax for match command; have select command use moduleExp (ctokens): added (ctoken): added (cTokenBarDot): accept MATCH_LEQ, UNIFY_EQ; use ctokens (cTokenBarColon): accept MATCH_LEQ, UNIFY_EQ; use ctokens (cTokenBarMatchLeq): accept UNIFY_EQ; use ctokens (cTokenBarIn): accept MATCH_LEQ, UNIFY_EQ; use ctokens (cTokenBarLeftIn): accept MATCH_LEQ, UNIFY_EQ; use ctokens (cTokenBarNumber): accept MATCH_LEQ, UNIFY_EQ; use ctokens (cTokenBarRight): accept MATCH_LEQ, UNIFY_EQ; use ctokens * quotedIdentifierTerm.cc (deepCopy): -> deepCopy2() * quotedIdentifierTerm.hh (class QuotedIdentifierTerm): deepCopy() -> deepCopy2() Thu Nov 5 16:11:48 1998 Steven Eker * parser.bison (renamingItem): made syntax consistant with OBJ3 (renamingList): made syntax consistant with OBJ3 (command): modified red and parse command to use inExp and nonInTerm nonterminals; this means that (at least for the moment - some flex hacking may be possible) we will no longer accept command like "red in(0) .", but we can now use the bison parser to directly parse complex module expressions occuring in commands * lexer.flex: added keywords include and BOOL * parser.bison (command): added syntax for set include BOOL on/off command Wed Nov 4 11:24:34 1998 Steven Eker * metaDown.cc (downOpDecl): set line number of symbol to FileTable::META_LEVEL_CREATED (downVarDecl): set line number of symbol to FileTable::META_LEVEL_CREATED * process.cc (processOps): set line number of symbol if we are the originator * import.cc (donateOps): set line number of symbol if we are the original; check for symbol clash and give informative message * preModule.cc (PreModule): set our line number * import.cc (donateSorts): set line number of added sorts to that of original sort (donateSorts): have very detailed sort clash message incorporating line numbers and modules of clashing sorts. * metaDown.cc (downSorts): set line number of added sorts to FileTable::META_LEVEL_CREATED * process.cc (processSorts): set line number of added sorts (getSort): set line number of added sort to FileTable::SYSTEM_CREATED; don't need findSort() hack any more * mixfixModule.hh (class MixfixModule): updated addSort() decl * entry.cc (addSort): return ptr to new sort * metaLevelOpSymbol.cc (metaParse): pass line number as FileTable::META_LEVEL_CREATED when turning Qids into tokens * mixfixParser.cc (makeStatement): use LineNumber::setLineNumber() in 6 places to store a line number in each mb/eq/rl (makeTerm): restructured; store line number of first token of parse in each term ===================================Engine43================================================== Sat Oct 31 13:06:55 1998 Steven Eker * mixfixModule.hh (class MixfixModule): updated decl for prettyPrint() (Term* version) * prettyPrint.cc (showAll): get fmod/mod endfm/endm correct (prettyPrint): (Term* version) modified algorithm to take capture components into account - now symmetric with DagNode* version Fri Oct 30 17:25:08 1998 Steven Eker * lexer.flex: added kinds and components keywords * parser.bison (command): added syntax for show kinds command * mixfixModule.hh (class MixfixModule): added decl for showComponents() * prettyPrint.cc: added * lexer.flex: added summary keyword * parser.bison (command): added syntax for show summary command * mixfixModule.hh (class MixfixModule): added decl for showSummary() * prettyPrint.cc (showSummary): added * parser.bison (moduleExp): temporary hack to allow simple imports to work again Thu Oct 29 11:46:18 1998 Steven Eker * parser.bison (endfm): added (endm): added (module): use endfm and endm to handle incorrect end of module keyword (moduleExp): added (renamingList): added (renamingItem): added * prettyPrint.cc (operator<<): (Rule* version) print labels as "[foo]:" rather than "[foo] :" * import.cc (donateStatements): handle rules (donateStatements): handle membership axioms * preModule.cc (process): insert module into module database here (PreModule): don't do it here Tue Oct 27 10:56:35 1998 Steven Eker * prettyPrint.cc (showVars): don't print invisible variables * import.cc (donateOps): add translations for symbols we imported into importers symbols so that our equations can be correctly imported in the next phase (donateOps): need to translate sort components! do this by finding name of 1st user sort of component, looking up the corresponding sort in the importer, and taking its component * preModule.hh (class PreModule): added data member nrImportedOps * import.cc (donateStatements): onlt import native equations * preModule.cc (process): set nrImportedMembershipAxioms, nrImportedEquations, nrImportedRules * symbolTranslation.cc (translate): added assert to catch no translation case Mon Oct 26 09:27:19 1998 Steven Eker * preModule.cc (process): call importStatements() * preModule.hh (class PreModule): added decls for importStatements() and donateStatements() * import.cc (donateStatements): added (importStatements): added * mixfixModule.cc (makeSymbolProductions): don't make productions for invisible symbols * import.cc (donateOps): make imported variables invisible * entry.cc (addOpDeclaration): support INVISIBLE flag * mixfixModule.hh (class MixfixModule): added INVISIBLE to enum SymbolFlags * preModule.hh (class PreModule): added decls for importOps() and donateOps() * import.cc (donateOps): added (importOps): added * symbolTranslation.hh (class SymbolTranslation): created * symbolTranslation.cc: created Fri Oct 23 11:28:35 1998 Steven Eker * preModule.cc (process): fill out nrImportedSubsorts vector * import.cc (donateSorts): handle subsorts * preModule.hh (class PreModule): added decl for resetImportPhase() (class PreModule): added data member nrImportedSubsorts; * import.cc (donateSorts): import from flatten sort vector rather than from sort declarations; this is simpler and does the right thing for automatically created sorts (resetImportPhase): added * preModule.cc (process): set nrImportedSorts and nrUserSorts * preModule.hh (class PreModule): added data members nrUserSorts, nrImportedSorts, nrImportedMembershipAxioms, nrImportedEquations, nrImportedRules * preModule.cc (process): call resetImports() * import.cc (donateSorts): need to update importPhase (resetImports): added Thu Oct 22 11:01:05 1998 Steven Eker * import.cc (processImports): prohibit recursive importation * preModule.cc (process): call importSorts() * preModule.hh (class PreModule): added decls for processImports(), importSorts(), donateSorts() * import.cc: created (donateSorts): added * preModule.cc (PreModule): set importPhase = UNVISITED (process): call processImports() * preModule.hh (class PreModule): added data member importedModules (class PreModule): added data member importPhase; (class PreModule): added enum Phase * process.cc (processSorts): use LineNumber ctor (processSorts): use IssueWarning() and LineNumber ctor (getSort): use IssueWarning() and LineNumber ctor * ops.cc (addVarDecl): use IssueWarning() and LineNumber ctor (setPrec): use IssueWarning() and LineNumber ctor (setGather): use IssueWarning() and LineNumber ctor (2 places) (setStrat): use IssueWarning() and LineNumber ctor * mixfixParser.cc (parseTerm): use IssueWarning() and LineNumber ctor (2 places) (parseStatement): use IssueWarning() and LineNumber ctor (2 places) (parseSentence): use IssueWarning() and LineNumber ctor * parser.bison (attrKeyword): use IssueWarning() and LineNumber ctor * lexer.flex: use IssueWarning() and LineNumber ctor thoughout * fileTable.cc (printLineNumber): don't bother printing (command) when we're not in a module * lexer.flex: have FMOD and MOD return Token * parser.bison: have FMOD and MOD return Token (module): call FileTable::beginModule() and FileTable::endModule() * fileTable.cc (printLineNumber): print file name correctly * lexerAux.cc (includeFile): added call to FileTable::openFile() (handleEof): added call to FileTable::closeFile() * main.cc: added global variable fileTable * fileTable.cc (closeFile): rewritten using new scheme (endModule): implemented Wed Oct 21 11:27:03 1998 Steven Eker * fileTable.cc (closeFile): created * fileTable.hh (class FileTable): created Fri Oct 16 16:03:13 1998 Steven Eker * mixfixModule.cc (findSort): added AdvisoryCheck() for the case where we couldn't find sort (findSymbol): added AdvisoryCheck() for the case where we couldn't find symbol (findSort): removed AdvisoryCheck() since we often look for non-existant sorts at object level Thu Oct 15 15:14:01 1998 Steven Eker * metaLevelOpSymbol.hh (class MetaLevelOpSymbol): dded decls for postInterSymbolPass() and reset() * metaLevelOpSymbol.cc (postInterSymbolPass): added (reset): added * metaLevel.hh (class MetaLevel): added decls for postInterSymbolPass() and reset() * metaLevel.cc (postInterSymbolPass): added (reset): added Wed Oct 14 15:49:11 1998 Steven Eker * metaLevelOpSymbol.cc (eqRewrite): get META_SORT_LEQ and META_SAME_COMPONENT cases arround the correct way * metaDown.cc (downFixUps): fix up identities * metaFastUp.cc (fastUpBool): implemented using CachedDag::getDag() * metaLevel.cc (bind): Term* version added * metaLevel.hh (class MetaLevel): added data members trueTerm and falseTerm (class MetaLevel): added decl for Term* version of bind() * preModule.cc (fixUpSymbols): handle TERM_HOOK in MetaLevel Tue Oct 13 18:52:07 1998 Steven Eker * metaLevelOpSymbol.cc (metaSameComponent): added (eqRewrite): added META_SAME_COMPONENT case (fixUp): added META_SAME_COMPONENT case * metaLevelOpSymbol.hh (class MetaLevelOpSymbol): added META_SAME_COMPONENT to OpType (class MetaLevelOpSymbol): added decl for metaSameComponent() ===================================Engine42================================================== Fri Oct 9 15:29:00 1998 Steven Eker * quotedIdentifierDagNode.hh (getIdIndex): made const (class QuotedIdentifierDagNode): updated decl of getIdIndex() Thu Oct 8 14:49:12 1998 Steven Eker * quotedIdentifierDagNode.cc (compareArguments): simplified * quotedIdentifierTerm.cc (compareArguments): (DagNode* version) added const and simplified (compareArguments): (Term* version) added const and simplified * quotedIdentifierDagNode.cc (compareArguments): added const * metaFastUp.cc (fastUpQid): added const_cast Wed Sep 30 15:50:48 1998 Steven Eker * mixfixModule.hh (class MixfixModule): updated decl for prettyPrint() (DagNode* version) * prettyPrint.cc (prettyPrint): (DagNode* version) added idea of leftCaptureComponent and rightCaptureComponent to avoid introducing unnecessary parens to avoid captures that can't happen anyway because of component clashes (operator<<): (DagNode* version) use new prettyPrint() conventions ===================================Engine41================================================== Mon Sep 21 10:32:40 1998 Steven Eker * metaLevel.hh (class MetaLevel): updated decls for downSort() and fastUpSort() * metaFastUp.cc (fastUpSort): deleted SortCode arg * metaDown.cc (downSort): deleted SortCode arg * metaLevelOpSymbol.cc (metaSortLeq): use new sort mechanisms (metaLeastSort): use new sort mechanisms (metaLesserSorts): use new sort mechanisms (metaGlbSorts): use new sort mechanisms * prettyPrint.cc (showSorts): use leq(Sort*, int) (showSorts): use leq(int, Sort*) (showSorts): use leq(Sort*, Sort*) (2 places) ===================================Engine40================================================== Thu Aug 27 13:47:16 1998 Steven Eker * prettyPrint.cc (prettyPrint): (term version) modified needParen condition and capture calcs to ensure we get capture values correct in the case that we insert parens or sort disambiguation (prettyPrint): (prettyPrint): (dagnode version) symmetric changes made * preModule.hh (class PreModule): added decl for printBubble() * command.cc (printBubble): added (contLoop): use printBubble() (loop): use printBubble() Wed Aug 26 16:54:11 1998 Steven Eker * prettyPrint.cc (prettyPrint): updated rangeKnown propagation calc to take into account once we decide to insert sort disambiguation then we will know range (both versions). * mixfixModule.hh (class MixfixModule): updated decl for prettyPrint() (dagnode version) * prettyPrint.cc (operator<<): (dagnode version) pass rangeKnown = false (prettyPrint): (dagnode version) added rangeKnown and code for sort disambiguation * loopSymbol.cc (createQidList): backquote ( ) [ ] { } , (extractQid): remove backquote if backquoted thing is a single char NOTE: need to come up with global policy and functions for backquoted and unbackquoting * token.hh (class Token): made specialChar public Mon Aug 24 11:12:03 1998 Steven Eker * mixfixModule.hh (class MixfixModule): updated decl for prettyPrint() (term version) * prettyPrint.cc (operator<<): (term version) pass rangeKnown = false (prettyPrint): (term version) added rangeKnown and code for sort disambiguation Fri Aug 21 10:24:05 1998 Steven Eker * process.cc (processSorts): handle "Universal" sort slots of polymorphs correctly * preModule.cc (findSymbol): deleted (extractSpecialSymbol): deleted (extractSpecialTerms): deleted * command.cc (loop): implemented (contLoop): implemented * loopSymbol.hh (class LoopSymbol): added decls for createQidList(), extractQid(), extractQidList() * loopSymbol.cc (injectInput): added (extractOutput): added (extractQid): added (extractQidList): added (createQidList): added * loopSymbol.hh (class LoopSymbol): added decls for extractOutput() and injectInput() Thu Aug 20 10:48:49 1998 Steven Eker * preModule.hh (class PreModule): added decls for loop() and contLoop() * command.cc (loop): added stub (contLoop): added stub * parser.bison (command): added "( tokens )" command * lexer.flex: added loop keyword now recognize ( and ) in initial mode * parser.bison (command): added loop command * preModule.cc (fixUpSymbols): hand LoopSymbols * entry.cc (addOpDeclaration): handle LOOP_SYMBOL flag * loopSymbol.cc: added * loopSymbol.hh (class LoopSymbol): created * preModule.cc (fixUpSymbols): rewritten using new functions and data structure and supporting new notation notation * process.cc (processOps): use findHook() * preModule.hh (class PreModule): added decls for findHook() and findHookSymbol() * preModule.cc (findHook): added (findHookSymbol): added * process.cc (processOps): handle new Bubble special format Wed Aug 19 11:18:48 1998 Steven Eker * ops.cc (addHook): check for LoopSymbol * mixfixModule.hh (class MixfixModule): added LOOP_SYMBOL to enum SymbolFlags * ops.cc (setSpecial): deleted (addHook): created * preModule.hh (class PreModule): deleted decl for setSpecial(); added decl for addHook() (class PreModule): added struct Hook; OpDef.special is now Vector * lexer.flex: added id-hook, op-hook, term-hook * parser.bison (attrKeyword): added KW_ID_HOOK, KW_OP_HOOK, KW_TERM_HOOK (attribute): special now takes hook list (hookList): added (hook): added * token.cc (prefixNameCode): simplified using specialChar() (prefixNameCode): added fast case for 1 token without leading special char (extractMixfix): use bufferExpandTo() and specialChar() (extractMixfix): simplified removing all backQuote warnings under the assumption that prefix code will always be legal * token.hh (specialChar): added (class Token): added decl for specialChar() * token.cc (prefixNameCode): simplified using new semantics of bufferExpandTo() * token.hh (bufferExpandTo): use reallocateBuffer() (class Token): added decl for reallocateBuffer() * token.cc (reallocateBuffer): added Tue Aug 18 10:39:19 1998 Steven Eker * token.cc (prefixNameCode): rewritten and greatly simpified; handle difficult cases correctly * lexer.flex: completely rewrote definition of tokens: no longer worry about starting with *** or ---> We now have strict idea about where ` can appear in a token - only between normal characters or in front of ( ) [ ] { } , Amount matched by comments increased so that will prevail * metaLevel.cc (MetaLevel): remove UMR bug by setting cachedModule = 0 * metaLevel.hh (class MetaLevel): added ctor decl * lexer.flex: don't allow stray backquotes in tokens ` becomes an unexpected token in initial mode detect stray ` in id mode unmade these chnange since ` is allowed in id's to indicate a space Mon Aug 10 16:16:46 1998 Steven Eker * lexer.flex: prevent tokens from containing the string *** so that comments do not have to have a space after *** Now only rule out *** at the begining of a token Fri Jul 31 12:29:13 1998 Steven Eker * metaDown.cc (downBubbleSpec): handle excluded tokens * process.cc (processOps): pass dummy vector to addBubbleSpec() * mixfixModule.hh (class MixfixModule): updated addBubbleSpec() decl * entry.cc (addBubbleSpec): take excludedTokens arg * mixfixParser.cc (makeTerm): need to resize rather than contract to deal with 0 length bubbles * metaDown.cc (downBubbleSpec): strip back quotes from parens * metaLevel.hh (class MetaLevel): added decls for downFixUps() and downFixUpBubble() * metaDown.cc (downFixUpBubble): added (downFixUps): added * metaModule.hh (class MetaModule): make MetaLevel into a friend for a really nasty hack * metaFastUp.cc (fastUpTerm): nasty hack to get qids to go up right - need to fix many other cases * metaDown.cc (downOpDecl): handle bubbles specially (downBubbleSpec): added * metaLevel.hh (class MetaLevel): added decls for downHookList() and downIdHook() * metaDown.cc (downAttr): handle special list (downHookList): added (downIdHook): added * preModule.cc (fixUpSymbols): hack for call to fixUpBubbleSpec() * mixfixModule.hh (class MixfixModule): updated fixUpBubbleSpec() decl * mixfixModule.cc (makeBubbleProductions): handle excluded tokens (fixUpBubbleSpec): handle nilQidListSymbol * metaLevel.cc (bind): handle hookListSymbol, idHookSymbol, opHookSymbol, termHookSymbol * metaLevel.hh (class MetaLevel): added hookListSymbol, idHookSymbol, opHookSymbol, termHookSymbol data members * metaDown.cc (downAttr): handle prec and gather * metaLevelOpSymbol.cc (metaParse): use new fastUpTerm() (errorRewrite): cast first arg in call to fastUpTerm() to disambiguate (old one should really be renamed to fastUpDag() * quotedIdentifierTerm.hh (getIdIndex): added; together with decl * metaFastUp.cc (fastUpTerm): Term* version added * metaDown.cc (downModule): rewritten to inter leave down calls with module processing calls in proper order * metaLevelOpSymbol.cc (fixUp): link in META_PARSE (eqRewrite): call metaParse() * metaLevel.hh (class MetaLevel): made downQidList() public * metaLevelOpSymbol.cc (metaParse): implemented is a really hacky way * metaLevelOpSymbol.hh (class MetaLevelOpSymbol): added decl for metaParse(); added META_PARSE to enum OpType * metaLevel.cc (bind): opDeclListSymbol and nilOpDeclListSymbol goto opDeclSetSymbol * metaDown.cc (downOpDecls): opDeclListSymbol and nilOpDeclListSymbol goto opDeclSetSymbol; set ctor is now ACU * metaLevel.hh (class MetaLevel): opDeclSetSymbol and emptyOpDeclSetSymbol replace opDeclListSymbol and nilOpDeclListSymbol Thu Jul 30 12:38:46 1998 Steven Eker * preModule.cc (fixUpSymbols): implemented shareWith feature for MetaLevelOpSymbols * metaLevel.cc (bind): support data memebrs just added * metaLevel.hh (class MetaLevel): added data members memoSymbol, precSymbol, gatherSymbol, specialSymbol * mixfixModule.hh (class MixfixModule): added nilQidListSymbol to struct BubbleSpec * mixfixParser.cc (makeTerm): backquote ()[]{}, before turning them into qids (makeTerm): deal with empty bubble case * metaLevel.hh (class MetaLevel): updated decls for downAttrSet() and downAttr() * metaDown.cc (downAttrSet): rewritten (downAttr): rewritten * mixfixModule.cc (findSymbol): fixed nasty bug where we were using index rather than firstSymbols[index] to start our search * metaFastUp.cc (fastUpQid): added (fastUpTerm): use fastUpQid * mixfixModule.cc (createSortTest): set SORT_TEST flag * mixfixModule.hh (getFlags): added (class MixfixModule): added SORT_TEST to enum SymbolFlags Wed Jul 29 11:13:54 1998 Steven Eker * preModule.cc (extractSpecialSymbol): added (fixUpSymbols): fix up MetaLevelOpSymbols * metaFastUp.cc: adapted from old version * mixfix.hh: created * entry.cc (addOpDeclaration): create MetaLevelOpSymbols * ops.cc (setSpecial): recognize MetaLevelOpSymbol * process.cc (processOps): don't call MachineIntegerSymbol::fixUp() * metaLevelOpSymbol.cc: adapted from old version (fixUp): added * metaLevelOpSymbol.hh: adapted from old version * metaDown.cc (downOpDecl): rewritten Tue Jul 28 16:39:20 1998 Steven Eker * metaDown.cc: MixfixModule -> MetaModule (downTerm): rewritten * metaLevel.hh (class MetaLevel): added data member metaDisambigSymbol; MixfixModule -> MetaModule * metaModule.cc: created * metaModule.hh: created * mixfixModule.cc (findSymbol): added * entry.cc (addOpDeclaration): only compare domains if arities are the same! * mixfixModule.hh (class MixfixModule): added decl for findSymbol.cc * metaDown.cc (downQidSet): deal with repeated elements correctly (downMembAx): rewritten (downVarDecl): rewritten (downSubsort): rewritten (downEquation): rewritten Mon Jul 27 10:37:17 1998 Steven Eker * command.cc (showModule): added stub * preModule.hh (class PreModule): added decl for showModule() * parser.bison (command): use selectModule() in cont and many of the show commands * command.cc (rewrite): print number of rewrites limit in showCmd case (if not UNBOUNDED) * parser.bison (command): pass start = 1 to selectModule() in parse, red and rew commands to skip over "in" * preModule.hh (class PreModule): updated decl for selectModule() * command.cc (selectModule): added start arg * preModule.hh (class PreModule): added decl for selectModule(); deleted decl for findModule() * preModule.cc (findModule): deleted * command.cc (selectModule): added * parser.bison (command): use selectModule() in select, parse, red and rew commands * preModule.cc (findModule): added * preModule.hh (class PreModule): added decl for findModule * preModule.cc: added moduleNames and modules static data (PreModule): save pointer to new module together with name in modules and moduleNames * preModule.hh (class PreModule): added static data members moduleNames and modules; * preModule.cc (PreModule): don't initialize moduleName, pass moduleType (dump): don't use moduleName * mixfixModule.hh (class MixfixModule): added moduleType arg to ctor (class MixfixModule): added data member moduleType * preModule.hh (class PreModule): added moduleType arg to ctor (class PreModule): delete data member moduleName; * mixfixModule.cc (MixfixModule): now take module type arg Sat Jul 25 12:56:50 1998 Steven Eker * parser.bison (tokenBarDot): added NUMBER_TOK since we use this in command mode in "trace select" (maybe we should have a complete split between cmd mode and id mode?) * lexer.flex: added keyword select * parser.bison: bubble2 -> moduleExpr (command): added syntax for select command * command.cc (rewrite): removed hack to recognize limit within bubble since we can now resolve this in the bison parser * lexer.flex: need to distinguish NUMBER from NUMBER_TOK because of return types * parser.bison (cTokensBarColon): need to distinguish NUMBER from NUMBER_TOK because of return types * lexer.flex: have command mode recognize [ ] and numbers * parser.bison (cTokenBarRight): added (cTokenBarNumber): added (cTokenBarLeftIn): added (nrModuleTerm): added (nrModuleTerm1): added (nrModuleTerm2): added (token): added NUMBER since we may use this is command mode where numbers are now recognized * metaDown.cc: created from old front end metaDown.cc Fri Jul 24 15:02:37 1998 Steven Eker * metaLevel.hh: created from old maudeModule.hh * mixfixModule.cc (makeBubbleProductions): hacked to new parser-bubble conventions Thu Jul 23 11:31:15 1998 Steven Eker * mixfixModule.hh (class MixfixModule): added MAKE_BUBBLE action * mixfixParser.cc (parseSentence): handle previously unseen tokens if we have bubble specs present (makeTerm): added code to MAKE_BUBBLE * mixfixModule.hh (class MixfixModule): added decl for makeBubbleProductions() * mixfixModule.cc (makeBubbleProductions): added (makeGrammar): call makeBubbleProductions(); * preModule.cc (fixUpSymbols): call fixUpBubbleSpec() if op is a bubble * mixfixModule.hh (class MixfixModule): added decls for addBubbleSpec() and fixUpBubbleSpec() * mixfixModule.cc (fixUpBubbleSpec): added * entry.cc (addBubbleSpec): added * ops.cc (setSpecial): recognize Bubble * process.cc (processOps): call addBubbleSpec() if op is a bubble * mixfixParser.cc (parseTerm): use ROOT_NODE (2 places) (parseStatement): use ROOT_NODE * mixfixModule.hh (class MixfixModule): added BUBBLE flag (class MixfixModule): added data member bubble components Wed Jul 22 10:55:16 1998 Steven Eker * mixfixModule.hh (class MixfixModule): deleted INSTANTIATE_POLYMORPH, PREVIOUS, CREATE_ITEF, CREATE_EQUALITY actions (class MixfixModule): deleted instantiatePolymorph() and fixupPolymorphs() decls * mixfixModule.cc (MixfixModule): deleted gatherAnyAnyAny * mixfixModule.hh (class MixfixModule): deleted decls for insertSymbol() (both versions), insertSort(), createItef(), createEquality(); deleted EQUALITY_PREC; deleted gatherAnyAnyAny * mixfixModule.cc (makePolymorph): get condition for expanding instantiations vector correct (makeGrammar): don't call fixupPolymorphs() * mixfixParser.cc (makeTerm): get polymorphIndex, componentIndex around the right way * mixfixModule.cc (makePolymorphProductions): compute nrArgs correctly * ops.cc (setSpecial): recognize BranchSymbol and EqualitySymbol * process.cc (getSort): hack to make sure we return the correct sort * preModule.hh (class PreModule): added polymorphIndex to struct OpDecl (actually a union with symbol) * mixfixModule.hh (class MixfixModule): added decls for makePolymorph() and fixUpPolymorph() (class MixfixModule): added MAKE_POLYMORPH to enum Actions * mixfixModule.cc (createItef): deleted (createEquality): deleted * mixfixParser.cc (makeTerm): don't handle PREVIOUS, CREATE_EQUALITY, CREATE_ITEF, INSTANTIATE_POLYMORPH (makeTerm): handle MAKE_POLYMORPH * process.cc (processOps): add polymorphs * preModule.cc (fixUpSymbols): fix up polymorphs as well * mixfixModule.cc (makePolymorphProductions): heavily rewritten (insertSort): deleted (insertSymbol): deleted (both versions) (insertPolymorph): deleted (makePolymorph): added (instantiatePolymorph): deleted (fixupPolymorph): added (fixupPolymorphs): deleted * mixfixModule.hh (class MixfixModule): reorganized struct Polymorph * entry.cc (addPolymorph): added Tue Jul 21 11:34:36 1998 Steven Eker * mixfixModule.hh (class MixfixModule): added decl for makeBoolProductions(); deleted decl for protectingBool() * mixfixModule.cc (protectingBool): deleted (makeBoolProductions): added (makeGrammar): call makeBoolProductions(); * entry.cc (addOpDeclaration): set trueSymbol, falseSymbol, boolSort * preModule.cc (fixUpSymbols): fix up QuotedIdentifierOpSymbols * quotedIdentifierOpSymbol.hh (class QuotedIdentifierOpSymbol): updated fixUp() decl * quotedIdentifierOpSymbol.cc (fixUp): take op arg as a string; this will avoid having to do this translation in several places in the future * quotedIdentifierOpSymbol.hh (class QuotedIdentifierOpSymbol): added decl for fixUp(), deleted decl for setSymbols(), updated decl for ctor * quotedIdentifierOpSymbol.cc (fixUp): added (setSymbols): deleted (QuotedIdentifierOpSymbol): now just take id and nrArgs * entry.cc (addOpDeclaration): can't use domainComponent(0 and rangeComponent() here since the symbols have yet to be compiled; take a look at the first op decl instead * mixfixModule.hh (class MixfixModule): made findMatchingParen() protected * preModule.hh (class PreModule): added decl for extractSpecialTerms() * preModule.cc: added (fixUpSymbols): fix up MachineIntegerOpSymbols * process.cc (processOps): added code to fixUp() MachineIntegerSymbols * quotedIdentifierTerm.hh (class QuotedIdentifierTerm): added decl for deepCopy() * quotedIdentifierTerm.cc (deepCopy): added * preModule.hh (class PreModule): tidying up of old decls Mon Jul 20 10:43:11 1998 Steven Eker * preModule.hh (class PreModule): fixUpIdentities() -> fixUpSymbols() * preModule.cc (fixUpIdentities): -> fixUpSymbols() (process): call fixUpSymbols() * process.cc (getSort): use addSort() * preModule.cc (makeSymbol): deleted (process): don't call protectingBool() * lexer.flex (id): BUILTIN -> SPECIAL * parser.bison (attribute): BUILTIN -> SPECIAL (attribute): use setSpecial() * preModule.hh (class PreModule): deleted connectedOpDefs(), protectingBoolSort() and protectingBoolOps() decls * process.cc (processOps): rewritten using MixfixModule::addOpDeclaration() * production.cc (connectedOpDefs): deleted (processOps): moved to process.cc * preModule.cc (getSort): moved to process.cc (processStatements): moved to process.cc (processSorts): moved to process.cc * process.cc (processSorts): updated to use new struct OpDef * ops.cc (addVarDecl): updated to use new struct OpDef (setGather): updated to use new struct OpDef (setStrat): updated to use new struct OpDef * preModule.hh (class PreModule): setBuiltIn() ->setSpecial(), setDomain() -> setDomainAndRange(),setRange() deleted * ops.cc (setSpecial): replaces setBuiltIn() * preModule.hh (class PreModule): struct OpDef completely reorganized * ops.cc (setDomainAndRange): replaces setDomain() (setRange): deleted * parser.bison (declaration): use setDomainAndRange * entry.cc (addOpDecl): -> addOpDeclaration() * mixfixModule.hh (class MixfixModule): updated insertSort() decl (class MixfixModule): addOpDecl() -> addOpDeclaration() * entry.cc (addSort): reverted to previous version * preModule.hh (class PreModule): added originator field to struct OpDecl * lexer.flex (id): added KW_ prefixes to COMM, IDEM, PREC, GATHER, STRAT and MEMO * parser.bison (attribute): removed OP_ prefixes to flags added KW_ prefixes to COMM, IDEM, PREC, GATHER, STRAT and MEMO * preModule.cc (dump): OP_VARIABLE -> VARIABLE * ops.cc (addVarDecl): OP_VARIABLE -> VARIABLE (setPrec): OP_PREC -> PREC (setGather): OP_GATHER -> GATHER (setStrat): OP_STRAT -> STRAT * preModule.hh (class PreModule): deleted enum Flags * mixfixModule.hh (class MixfixModule): data member sorts deleted * mixfixModule.cc (insertSymbol): MACHINE_INT -> MACHINE_INTEGER (makeSymbolProductions): MACHINE_INT -> MACHINE_INTEGER (findSort): sorts -> sortNames (insertSort): sorts -> sortNames * mixfixModule.hh (class MixfixModule): updated addSort() and addOpDecl() decls * entry.cc (addOpDecl): major rewrite; removed special arg since how this will be generated will be very different between object level and metalevel; pass domain and range as vector of sorts (addSort): major rewrite; now return sort and have firstDecl flag * mixfixModule.hh (class MixfixModule): added data members sortNames, symbolNames, firstSymbols (class MixfixModule): added decls for addOpDecl() and addSort() * entry.cc (addOpDecl): added special arg; handle parts of builtins that don't rely on other symbols Sun Jul 19 18:35:29 1998 Steven Eker * mixfixModule.hh (class MixfixModule): enum SyntaxFlags changed to enum SymbolFlags; added many new values * entry.cc (addSort): added (addOpDecl): added Fri Jul 17 18:27:03 1998 Steven Eker * mixfixModule.cc (createEquality): use new ctor convention for EqualitySymbol (instantiatePolymorph): use new ctor convention for EqualitySymbol ===================================Engine39================================================== Thu Jul 16 10:34:26 1998 Steven Eker * mixfixModule.cc (makePolymorphProductions): fixed precedence bug (<< vs +) * mixfixModule.hh (class MixfixModule): added data member currentOffset * mixfixParser.cc (parseStatement): set currentOffset = 0 (parseTerm): set currentOffset = begin (makeTerm): use currentOffset (2 places) * mixfixModule.hh (class MixfixModule): added decl for fixupPolymorphs() * mixfixModule.cc (fixupPolymorphs): added (instantiatePolymorph): use specialTerms (makeGrammar): call fixupPolymorphs() * mixfixModule.hh (class MixfixModule): added specialTerms to struct Polymorph * token.cc (extractMixfix): fixed nasty memory bug where we were freeing mismatched memory; delete rather than delete [] Wed Jul 15 11:52:09 1998 Steven Eker * production.cc (processOps): horrible hack to recognize polymorphic symbols. * mixfixModule.cc (makeGrammar): call makePolymorphProductions() (instantiatePolymorph): added handling for BranchSymbol * production.cc (processOps): horrible hack to insert polymorphs * mixfixModule.hh (class MixfixModule): added decl for findMatchingParen() * mixfixModule.cc (findMatchingParen): added * mixfixModule.hh (class MixfixModule): updated insertPolymorph() decl * mixfixModule.cc (insertPolymorph): domainSorts and special becomes Vectors, rangeSort becomes a Token Tue Jul 14 11:21:46 1998 Steven Eker * lexer.flex: added NUMBER tokens * preModule.hh (class PreModule): added decl for cont() * lexer.flex: added continue/cont keyword * parser.bison (command): added syntax and action for cont command * command.cc (rewrite): hack to recognize limit within bubble; probably need better solution (cont): added * lexerAux.cc (lexerInMode): use yy_push_state() rather tha BEGIN() * lexer.flex (IN_MODE): use yy_pop_state() to restore original state rather than just going to initial state * mixfixModule.hh (class MixfixModule): added decl for instantiatePolymorph() Mon Jul 13 11:02:57 1998 Steven Eker * mixfixModule.hh (class MixfixModule): updated decls for parseTerm() and parseSentence() * mixfixParser.cc (makeTerm): handle PREVIOUS and INSTANTIATE_POLYMORPH actions (parseSentence): handle begin and end arguments (parseTerm): take and pass on begin and end arguments Sat Jul 11 15:21:25 1998 Steven Eker * userLevelRewritingContext.cc (tracePreRuleRewrite): added \n's to make big rewrites more readable (tracePreEqRewrite): added \n's to make big rewrites more readable Fri Jul 10 17:34:01 1998 Steven Eker * mixfixModule.hh (class MixfixModule): added decl for makePolymorphProductions() (class MixfixModule): added INSTANTIATE_POLYMORPH and PREVIOUS to enum Actions * mixfixModule.cc (makePolymorphProductions): added * mixfixModule.hh (class MixfixModule): added decl for insertPolymorph() and data member polymorphs * mixfixModule.cc (insertPolymorph): added * bool.cc (protectingBoolSort): don't use non-existant data member sorts * mixfixModule.hh (class MixfixModule): added decl for findSort() * mixfixModule.cc (findSort): added * preModule.cc (getSort): rewritten using MixfixModule::findSort() (processSorts): rewritten using MixfixModule::findSort() * preModule.hh (class PreModule): deleted data member sorts * mixfixModule.hh (class MixfixModule): added decl for insertSort() and data member sorts * mixfixModule.cc (insertSort): added * mixfixModule.hh (class MixfixModule): updated computePrecAndGather() decl * mixfixModule.cc (computePrecAndGather): first arg is now nrArgs; do computation of LEFT_BARE/RIGHT_BARE here (insertSymbol): no longer do computation of LEFT_BARE/RIGHT_BARE here (makeSymbolProductions): pass nrArgs to computePrecAndGather() * mixfixModule.hh (class MixfixModule): added struct Polymorph Thu Jul 9 10:32:27 1998 Steven Eker * token.cc (checkForSpecialProperty): avoid mistaking "-" for a SMALL_NEG and "" for a SMALL_NAT * production.cc (processOps): ugly hack to prevent adding op decl for symbol derived from NA_Symbol since class ctor automatically adds and op decl (should it? - probably want to change this later) * mixfixModule.cc (makeSpecialProductions): handle QUOTED_IDENTIFIERs * mixfixModule.hh (class MixfixModule): MAKE_QUOTED_IDENTIFIER added to enum Actions * production.cc (processOps): hack to pass quotedIdentifier flag to insertSymbol() * mixfixModule.hh (class MixfixModule): added QUOTED_ID to enum NonTerminal (class MixfixModule): added QUOTED_IDENTIFIER to enum SyntaxFlags (class MixfixModule): updated insertSymbol() decl * mixfixParser.cc (makeTerm): handle MAKE_QUOTED_IDENTIFIER case * mixfixModule.cc (insertSymbol): handle quotedIdentifier flag (makeSymbolProductions): handle quoted id case * preModule.cc (fixUpIdentities): fix up QuotedIdentifierOpSymbols here for want of a better place * quotedIdentifierOpSymbol.cc (setSymbols): added * quotedIdentifierOpSymbol.hh (class QuotedIdentifierOpSymbol): machineIntegerSymbol no longer a constant; added decl for setSymbols() * quotedIdentifierOpSymbol.cc (QuotedIdentifierOpSymbol): quotedIdentifierSymbol and machineIntegerSymbol are no longer initialized as constants * preModule.cc (makeSymbol): handle QuotedIdentifierSymbol and QuotedIdentifierOpSymbol special cases * quotedIdentifierOpSymbol.cc: adapted from old frontend; removed all refs to idTable; use class Token * quotedIdentifierOpSymbol.hh: copied from old frontend * quotedIdentifierTerm.cc: adapted from old frontend; removed all refs to idTable; use class Token * quotedIdentifierTerm.hh: adapted from old frontend; removed internal StringTable reference * quotedIdentifierDagNode.cc: adapted from old frontend; removed all refs to idTable; use class Token * quotedIdentifierDagNode.hh: adapted from old frontend; removed internal StringTable reference * token.cc (checkForSpecialProperty): detect quoted identifiers * token.hh (class Token): added QUOTED_IDENTIFIER to enum SpecialProperties * preModule.hh (class PreModule): added decl for findSymbol() * preModule.cc (fixUpIdentities): fix up MachineIntegerOpSymbols here for want of a better place (findSymbol): added Wed Jul 8 10:41:24 1998 Steven Eker * production.cc (processOps): quick hack to handle machine ints; need to do something less ugly once other things crystalize * mixfixModule.cc (insertSymbol): handle machineInt flag (makeSymbolProductions): handle machine ints * mixfixModule.hh (class MixfixModule): added data member current sentence (class MixfixModule): added syntax flag MACHINE_INT (class MixfixModule): updated insertSymbol() decl * mixfixParser.cc (makeTerm): handle MAKE_MACHINE_INT case (parseStatement): set currentSentence (parseTerm): set currentSentence * mixfixModule.hh (class MixfixModule): added MAKE_MACHINE_INT to enum Actions * mixfixParser.cc (parseSentence): check for specialProperties of previously unseen tokens and use special terminals * mixfixModule.hh (class MixfixModule): added data member specialTerminals and decl for makeSpecialProductions() * mixfixModule.cc (makeSpecialProductions): added (makeGrammar): call makeSpecialProductions() * token.hh (class Token): added enum SpecialProperties, and decls for static and non-static versions of specialProperty() (specialProperty): added non-static version (specialProperty): added static version * token.cc (dotNameCode): use our encode() rather than StringTable::encode() (prefixNameCode): use our encode() rather than StringTable::encode() (extractMixfix): use our encode() rather than StringTable::encode() (*6) (checkForSpecialProperty): added * token.hh (encode): if it is the first time we've seen this string, check to see if it has a special property. (tokenize): use our encode() rather than StringTable::encode() * mixfixModule.hh (class MixfixModule): added SMALL_NAT and SMALL_NEG to enum NonTerminal Tue Jul 7 10:56:56 1998 Steven Eker * preModule.hh (class PreModule): updated decl for makeSymbol() * production.cc (processOps): pass this pointer to makeSymbol() * preModule.cc (makeSymbol): added module arg and handling for MachineIntegerSymbol and MachineIntegerOpSymbol * preModule.hh (class PreModule): added builtIn field to struct OpDef; added decl for setBuiltIn(); * ops.cc (setBuiltIn): added * lexer.flex (id): added builtin * parser.bison (attribute): added builtin attribute syntax and action (attrKeyword): added BUILTIN as attribute * lexer.flex (OP_MODE): deleted * lexerAux.cc (lexerOpMode): deleted * preModule.hh (class PreModule): added decls for addSelected() and traceSelect() and static data member selected * userLevelRewritingContext.hh (class UserLevelRewritingContext): updated decl for selectSymbols() * userLevelRewritingContext.cc (selectSymbols): made first arg const * command.cc (traceSelect): added * parser.bison (command): added actions for trace select/deselect. * command.cc (addSelected): added * parser.bison (simpleOpName2): adde (opNameList2): made symmetric with opNameList Mon Jul 6 09:27:26 1998 Steven Eker * preModule.hh (class PreModule): removed name member from struct OpDecl * preModule.cc (dump): use prefix name code rather than full mixfix name * ops.cc (addOpDecl): don't store full op name * parser.bison (opName): removed lexer mode changes (opNameList): removed lexer mode changes (opName2): deleted since we no longer need to flip lexer state (opNameList2): eleted since we no longer need to flip lexer state (command): added new opNameList2 and syntax for trace select/deselect * mixfixModule.hh (class MixfixModule): 1 arg version of insertSymbol(0 is private * mixfixModule.cc (insertSymbol): had to put in 1 arg version for protectingBool; want to remove this eventually * production.cc (processOps): only use the one remaining insertSymbol() * mixfixModule.hh (class MixfixModule): updated one insertSymbol() decl and deleted other * mixfixModule.cc (insertSymbol): make use of extractMixfix() to get mixfix syntax from prefix name rather than mixfixSyntax arg (insertSymbol): deleted mixfixSyntax arg (insertSymbol): deleted 2 arg version * token.hh (class Token): added decl for extractMixfix() * token.cc (extractMixfix): heavily rewritten Sat Jul 4 13:59:41 1998 Steven Eker * token.cc (extractMixfix): first attempt at an implementation for this function Thu Jul 2 11:43:16 1998 Steven Eker * mixfixParser.cc (parseTerm): print out first two parses in ambiguous case * preModule.hh (class PreModule): updated parse() decl * parser.bison (command): use new parse() * command.cc (parse): added * preModule.cc (reduce): deleted (parse): deleted * preModule.hh (setShowStats): added (setShowCmd): added (setShowTiming): added (class PreModule): added decls for above * parser.bison (command): added PreModule calls for set show ... commands * preModule.hh (class PreModule): added decls for reduce() and rewrite() * parser.bison (command): use rewrite() and new reduce() * command.cc (rewrite): added * preModule.hh (class PreModule): added static data members showCmd, showStats, showTiming, saved Wed Jul 1 11:14:10 1998 Steven Eker * command.cc: created * mixfixParser.cc (makeStatement): handle labels correctly * mixfixModule.cc (makeLabelProductions): pass MAKE_LABEL as action and label token number as data to insertProd() * mixfixParser.cc (makeStatement): added mb, cmb, rl, crl cases * mixfixModule.cc (makeStatementProductions): added actions to several productions * mixfixModule.hh (class MixfixModule): added actions MAKE_RL, MAKE_CRL, MAKE_LABEL, MAKE_MB, MAKE_CMB * mixfixParser.cc (makeStatement): added (makeCondition): added (makeTerm): removed MAKE_EQ and MAKE_CEQ code (parseStatement): call makeStatement() rather than makeTerm() * preModule.cc (fixUpIdentities): use parseTerm() rather than parseSentence() (processStatements): use parseStatement() rather than parseTerm() (parse): use parseTerm() rather than parseSentence() (reduce): use parseTerm() rather than parseSentence() * mixfixParser.cc (parseSentence): now just do first part of pass; don't call makeTerm() * mixfixModule.hh (class MixfixModule): parseSentence() now returns int and is private, makeTerm() is private; adde decls for parseTerm() and parseStatement() * mixfixParser.cc (parseTerm): added (parseStatement): added * mixfixModule.hh (domainComponentIndex): moved to mixfixModule.cc * mixfixModule.cc (protectingBool): don't call setBool() * mixfixParser.cc: now becomes another implementation file for class MixfixModule (setBool): deleted (insertProd): use data member parser (parseSentence): use data member parser (makeTerm): no need to reference module. * mixfixModule.hh (class MixfixModule): no longer derived from MixfixParser (class MixfixModule): added enum Actions and data members tokens, parser, actions, data. Tue Jun 30 10:24:27 1998 Steven Eker * userLevelRewritingContext.cc: copied from old front end; selected becomes an IntSet (selectSymbols): symbols becomes an IntSet (traceBeginEqTrial): selected becomes an IntSet so check symbols id() (traceBeginRuleTrial): selected becomes an IntSet so check symbols id() (traceBeginScTrial): selected becomes an IntSet so check symbols id() (tracePreEqRewrite): selected becomes an IntSet so check symbols id() (tracePreRuleRewrite): selected becomes an IntSet so check symbols id() (tracePreScApplication): selected becomes an IntSet so check symbols id() * userLevelRewritingContext.hh: copied from old front end (class UserLevelRewritingContext): make selected an IntSet rather than a PointerSet * parser.bison: added semantic actions for set trace ... commands * prettyPrint.cc (showOps): use printAttributes(); print symbols attributes even when sort calcs are implemented by C++ (no op decls for symbol) * mixfixModule.hh (class MixfixModule): added decls for printAttributes() and showAll() * prettyPrint.cc (printAttributes): added (showAll): added * mixfixModule.hh (class MixfixModule): added enum ModuleType * prettyPrint.cc (showEquations): becomes showEqs() (showRls): added (showMbs): added (showVars): added (showSorts): added (showOps): added * parser.bison (command): call calls to showSorts(), showOps(), showVars(), showMbs(), showRls(); showEquations() becomes showEqs() * mixfixModule.hh (class MixfixModule): added decls for showSorts(), showOps(), showVars(), showMbs(), showRls(); showEquations() becomes showEqs() Mon Jun 29 10:36:29 1998 Steven Eker * mixfixModule.hh (class MixfixModule): added decl for showEquations() * prettyPrint.cc (operator<<): added operator<<() for const NamedEntity*, const SortConstraint*, const Equation* and const Rule* (showEquations): added * lexer.flex: added sorts, ops, vars, mbs, eqs, rls keyword in INITIAL mode * parser.bison (command): added syntax for show sorts, show ops, show vars, show mbs, show eqs, show rls * lexer.flex: added "all" and "module" keywords * parser.bison: added syntax for show mod, show module and show all * ops.cc (setStrat): allow -ve strat arg positions * preModule.cc (makeSymbol): pass users strategy to symbol ctors * preModule.hh (class PreModule): added strategy member to struct OpDef (class PreModule): added decl for setStrat() * ops.cc (setGather): clear opDef.gather and gather in error case (setStrat): added * parser.bison (attribute): call setStrat() Sat Jun 27 16:54:43 1998 Steven Eker * prettyPrint.cc (graphCount): added (graphPrint): added Fri Jun 26 10:58:51 1998 Steven Eker * prettyPrint.cc (prettyPrint): created Term* version * mixfixModule.hh (class MixfixModule): make prettyPrint() private, remove default args; make printTokens() and printTails() static (class MixfixModule): make operator<<() for Term* and DagNode* friends * prettyPrint.cc (prettyPrint): set needAssocParen if symbol is associative and printWithParens is true Move operator<< for DagNode* here Move operator<< for Term* here * mixfixModule.hh (setPrintMixfix): added (setPrintWithParens): added (setPrintFlat): added (setPrintGraph): added * parser.bison (command): added actions for set print ... commmands * prettyPrint.cc: created to hold all pretty printer code (prettyPrint): simplified use of arg (printTails): set noSpace if pos == 0 so that multi token constants don't get an extra leading space (prettyPrint): handle printFlat flag * mixfixModule.cc (prettyPrint): mixfixFlag -> printMixfix, maxParenFlag -> printWithParens * mixfixModule.hh (class MixfixModule): added static data members printFlat and printGraph; mixfixFlag -> printMixfix, maxParenFlag -> printWithParens * lexer.flex (id): ASSOC -> KW_ASSOC, CONDITION -> KW_CONDITION * parser.bison (attrKeyword): ASSOC -> KW_ASSOC, CONDITION -> KW_CONDITION to prevent defines clashing with enums in included header files * mixfixModule.hh (nonTerminal): moved to mixfixModule.cc * lexer.flex: added extra keywords needed for set commands * parser.bison (command): added syntax for set commands Thu Jun 25 15:18:18 1998 Steven Eker * mixfixModule.cc (computePrecAndGather): don't let gather values go -ve by prec 0 and gather e (computePrecAndGather): give assoc infix operator with prec > 0 the gather pattern (e E) (printTails): handle needAssocParen flag (prettyPrint): take into account the possible need for parens inside the right associative unflattening of a flatten assoc term (printTails): don't set noSpace = true when we print an assoc paren because if we were really unflatten first before printing then thisparen can have no effect on a tail that is really above it in the unfattened term (printTails): set noSpace = false at the start of each out loop iteration based on similar reasoning * mixfixParser.hh (class MixfixParser): MAKE_TRUE replaces MAKE_CEQ2 * mixfixParser.cc (makeTerm): fuse CEQ and CEQ2 cases to handle CONDITION nonterminal * mixfixModule.cc (protectingBool): simplified now that we have a non-terminal for condition (makeStatementProductions): use CONDITION and give its (initial) definition * mixfixModule.hh (class MixfixModule): added CONDITION to enum NonTerminal * mixfixModule.cc (createEquality): use EQUALITY_PREC * mixfixModule.hh (class MixfixModule): added static member gatherPrefix * mixfixModule.cc (MixfixModule): initialize gatherPrefix (makeSymbolProductions): use gatherPrefix for assoc case Wed Jun 24 15:55:23 1998 Steven Eker * mixfixModule.cc (makeSymbolProductions): use PREFIX_GATHER rather than any (MixfixModule): initialize gatherPrefixPrefix (makeComponentProductions): use gatherPrefixPrefix and PREFIX_GATHER for assoc lists * preModule.cc (OpDef): set prec to default * ops.cc (setGather): use enum GatherSymbols constants * production.cc (processOps): don't process opdefs here since default prec depends on exact syntax of operator, and computation of default gather might even depend on sort info (processOps): all syntax processing removed * mixfixModule.hh (class MixfixModule): added enum GatherSymbols; added decl for computePrecAndGather() * mixfixModule.cc (computePrecAndGather): added (makeSymbolProductions): call computePrecAndGather() * mixfixModule.hh (class MixfixModule): added EQUALITY_PREC to enum Precedence Tue Jun 23 17:45:34 1998 Steven Eker * mixfixModule.cc (printTokens): try to get spacing correct (printTails): try to get spacing correct * mixfixModule.hh (class MixfixModule): updated prettyPrint() decl * main.cc (operator<<): updated call to prettyPrint() * mixfixModule.cc (insertSymbol): set flags field (insertSymbol): set flags field (createItef): set flags field (createEquality): set flags field (createSortTest): set flags field (makeSymbolProductions): use si.flags (prettyPrint): rewritten to handle left and right capture and new flags * mixfixModule.hh (class MixfixModule): added static data members mixfixFlag and maxParenFlag (class MixfixModule): added PREFIX_PREC, PREFIX_GATHER, UNARY_PREC, INFIX_PREC to enum Precedence (class MixfixModule): SymbolInfo assoc field changes to flags; added enum SyntaxFlags Wed Jun 17 10:50:22 1998 Steven Eker * mixfixParser.cc (makeTerm): updated to use new createSortTest() conventions (makeTerm): fixed really nasty bug where we were using node number rather than production number to find data (sort index) for CREATE_SORT_TEST (insertProd): print action and data numbers * mixfixModule.hh (class MixfixModule): updated createSortTest(); added data members eagerSortTests and lazySortTests * mixfixModule.cc (createEquality): added (protectingBool): insert productions for mixfix version of equalities (createSortTest): added (makeComponentProductions): pass sort index as data field in sort production (createSortTest): changed so we return Term* and store pointers to created sort test symbols in MinfixModule rather than MixfixParser * mixfixModule.hh (class MixfixModule): added decls for createEquality() and createSortTest() * mixfixParser.cc (makeTerm): added CREATE_EQUALITY and CREATE_SORT_TEST cases * mixfixModule.cc (protectingBool): use class boolSort, trueSymbol and falseSymbol variables * mixfixParser.cc (makeTerm): use createItef() * mixfixModule.hh (class MixfixModule): added decl for createItef and data members boolSort, trueSymbol and falseSymbol * mixfixModule.cc (createItef): added Tue Jun 16 14:59:22 1998 Steven Eker * mixfixModule.hh (class MixfixModule): added static data member getAnyAnyAny * mixfixModule.cc (MixfixModule): initialize gatherAnyAnyAny; * mixfixParser.cc (makeTerm): handle CREATE_ITEF * mixfixModule.cc (protectingBool): add syntax for if_then_else_fi in each component * mixfixParser.cc (setBool): added; replaces setTrueSymbol() * mixfixParser.hh (class MixfixParser): added data members falseSymbol and boolSort (class MixfixParser): added decl for setBool(), deleted decl for setTrueSymbol() * mixfixParser.cc (insertProd): take datum arg (makeTerm): make use of data vec * mixfixParser.hh (class MixfixParser): added data member data (class MixfixParser): module now a pointer to MixfixModule (class MixfixParser): actions are no longer -ve; added MAKE_TERM (class MixfixParser): updated insertProd() decl Mon Jun 15 17:16:49 1998 Steven Eker * preModule.cc (process): call protectingBool(); don't pass 2nd arg to makeGrammar() * mixfixModule.hh (class MixfixModule): make protectingBool() public (class MixfixModule): reverted makeGrammar() decl * mixfixModule.cc (makeGrammar): removed protectingBool() stuff * production.cc (processOps): don't call protectingBoolOps() * mixfixModule.hh (class MixfixModule): updated makeGrammar() decl * preModule.cc (process): pass 0 as 2nd arg to makeGrammar() * mixfixModule.cc (protectingBool): added (makeGrammar): take boolSortIndex arg; call protectingBool if necessary * mixfixModule.hh (class MixfixModule): added decl for protectingBool() * preModule.cc (getSort): compare index to NONE rather than 0 Fri Jun 12 09:57:02 1998 Steven Eker * bool.cc (protectingBoolSort): use insert() instead of int2Index() * preModule.cc (processSorts): use insert() instead of int2Index() (getSort): use insert() instead of int2Index(); no need to use contains * production.cc (makeLabelProductions): use cardinality() instead of nrElements() * preModule.cc (addRule): use insert() instead of int2Index() Thu Jun 11 18:26:40 1998 Steven Eker * mixfixParser.cc (insertProd): use insert() instead of int2Index() (parseSentence): no need to use contains * preModule.hh (class PreModule): IntTable -> IntSet ===================================Engine38================================================== Mon Jun 8 18:21:46 1998 Steven Eker * parser.bison (opNameList): added; old opNameList becomes opNameList2 inorder to switch lex mode (opName2): changed paren case to allow _(_); also allows completely empty syntax which we must now check for elsewhere (simpleOpName): changed paren case to allow _(_); also allows completely empty syntax which we must now check for elsewhere Fri Jun 5 09:32:11 1998 Steven Eker * preModule.cc (insertSymbol): added (prettyPrint): added (printTokens): added (printTails): added * production.cc (processOps): call new insertSymbol() with syntax info * preModule.cc (process): call makeLabelProductions() * preModule.hh (class PreModule): added struct SymbolInfo to maintain info for pretty printing and eventually symbol production rule generation (want to do it after signature closed so we can attempt automagic gather generation for say list ctors based on complete sort info; also we may want to deal with imported symbols) (class PreModule): added data member symbolInfo * production.cc (makeLabelProductions): added * preModule.hh (class PreModule): added LABEL and RULE_BODY to enum NonTerminal * intTable.hh (nrElements): added * preModule.cc (addRule): added * preModule.hh (class PreModule): added labels data member * parser.bison (declaration): use addRule() for rules so that we can identify any possible labels. Thu Jun 4 10:34:19 1998 Steven Eker * production.cc (makeStatementProductions): added productions for RULE_BODY, but not sure this is a good idea. * preModule.cc (fixUpIdentities): added (fixUpIdentities): parse identity starting with root determined by approriate domain connected component. (makeSymbol): must create variables! * production.cc (processOps): set opDecl.symbol in the case its a polymorphic overloading of an existing symbol Wed Jun 3 17:56:27 1998 Steven Eker * ops.cc (setFlag): take int so we can set several flags at once * production.cc (processOps): use makeSymbol() * preModule.cc (makeSymbol): added * parser.bison (attribute): call setIdentity() where needed * ops.cc (setIdentity): added * preModule.hh (class PreModule): added identity to OpDef() * Mixfix2 stable enough to start ChangeLog * parser.bison (attribute): call setFlag() where needed maude-3.1/src/Mixfix/viewCache.cc0000644000175200017520000001247413620701455013650 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2019 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class ViewCache. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "strategyLanguage.hh" #include "mixfix.hh" // front end class definitions #include "renaming.hh" #include "view.hh" #include "viewCache.hh" #include "fileTable.hh" ViewCache::ViewCache() { } ViewCache::~ViewCache() { // // Cached views must have named or cached modules as their // from-theory so we expect them to have been destructed and // removed when the modules are destructed, ahead of the // destruction of the ViewCache object. // Assert(viewMap.empty(), "viewMap not empty"); } void ViewCache::regretToInform(Entity* doomedEntity) { View* doomedView = safeCast(View*, doomedEntity); ViewMap::iterator pos = viewMap.find(doomedView->id()); Assert(pos != viewMap.end(), "could find self-destructing view " << doomedView); DebugAdvisory("removing view " << doomedView << " from cache"); viewMap.erase(pos); } bool ViewCache::viewCompare(const View* v1, const View* v2) { return v1->id() < v2->id(); } View* ViewCache::makeViewInstantiation(View* view, const Vector& arguments) { // // Make the name and the cleanName of the view we want. // cleanName looks like name, except: // (1) No []s for bound parameters. // (2) No spaces after commas. // (3) The special characters {,} are backquoted. // (4) We use cleanName of any nested view. // cleanName is intended for forming sort names that contain view names. // Rope name(Token::name(view->id())); Rope cleanName(name); const char* sep = "{"; const char* cleanSep = "`{"; int nrParameters = arguments.size(); for (int i = 0; i < nrParameters; ++i) { name += sep; sep = ", "; cleanName += cleanSep; cleanSep = "`,"; Argument* a = arguments[i]; if (View* v = dynamic_cast(a)) { name += Token::name(v->id()); cleanName += Token::name(v->getCleanName()); } else { // // Place brackets around parameter arguments in name so that // we don't confuse them with views having the same name. // name += '['; name += Token::name(a->id()); name += ']'; // // cleanName only makes sense within a module so there is no // confusion between parameters and view with the same name - // parameters occlude views. // cleanName += Token::name(a->id()); } } name += "}"; cleanName += "`}"; // // Now check if a view having our name is already in cache. // int nameCode = Token::ropeToCode(name); ViewMap::const_iterator c = viewMap.find(nameCode); if (c != viewMap.end()) { DebugAdvisory("using existing copy of view " << name); return c->second; } // // Create new view; and insert it in cache. // DebugAdvisory("making view instantiation " << name); int cleanNameCode = Token::ropeToCode(cleanName); View* copy = view->makeInstantiation(nameCode, cleanNameCode, arguments); DebugAdvisory("finished view instantiation " << name); if (copy->isBad()) { // // It is possible for the instantiation of a non-bad view to be bad; // for example, instantiating a parameter that has a self-conflict // with a theory-view. // // We never want to cache bad views. // IssueAdvisory(*copy << ": unable to make view instantiation " << QUOTE(name) << " due to earlier errors."); copy->removeUser(this); // since we are not adding a bad module to the cache delete copy; return 0; } viewMap[nameCode] = copy; return copy; } void ViewCache::destructUnusedViews() { // // This O(n^2) solution to finding unused cached views is slow but // simple. If the number of cached modules grows beyond a few hundred // a more complex O(n) solution based on keeping a linked list of // candidates would be appropriate. We would need a call back from // ImportModule to tell us when a module is down to 1 user (us!). // restart: { FOR_EACH_CONST(i, ViewMap, viewMap) { int nrUsers = i->second->getNrUsers(); Assert(nrUsers >= 1, "no users"); // we are a user if (nrUsers == 1) { DebugAdvisory("view " << i->second << " has no other users"); delete i->second; // invalidates i goto restart; } } } } void ViewCache::showCreatedViews(ostream& s) const { // // We display true name rather than cleanName. // FOR_EACH_CONST(i, ViewMap, viewMap) s << "view " << Token::name(i->first) << '\n'; } maude-3.1/src/Mixfix/moduleDatabase.cc0000644000175200017520000000544713576050735014676 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class ModuleDatabase. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "strategyLanguage.hh" #include "mixfix.hh" // front end class definitions #include "preModule.hh" #include "moduleDatabase.hh" void ModuleDatabase::deleteNamedModules() { // // We can't do this in our dtor because we don't know what // data structures may have already be destroyed. // const ModuleMap::const_iterator e = moduleMap.end(); for (ModuleMap::const_iterator i = moduleMap.begin(); i != e; ++i) delete i->second; } bool ModuleDatabase::insertModule(int name, PreModule* module) { pair p = moduleMap.insert(ModuleMap::value_type(name, module)); if (p.second) return false; IssueAdvisory("redefining module " << QUOTE(module) << '.'); delete p.first->second; p.first->second = module; return true; } PreModule* ModuleDatabase::getModule(int name) const { const ModuleMap::const_iterator t = moduleMap.find(name); return (t == moduleMap.end()) ? 0 : t->second; } bool ModuleDatabase::deleteModule(int name) { const ModuleMap::iterator t = moduleMap.find(name); if (t == moduleMap.end()) return false; delete t->second; moduleMap.erase(t); return true; } void ModuleDatabase::setAutoImport(ImportModule::ImportMode importMode, Token name, bool polarity) { int code = name.code(); if (polarity) autoImports[code] = importMode; else autoImports.erase(code); } void ModuleDatabase::setOmodInclude(Token name, bool polarity) { int code = name.code(); if (polarity) defaultOmodIncludes.insert(code); else defaultOmodIncludes.erase(code); } void ModuleDatabase::showNamedModules(ostream& s) const { FOR_EACH_CONST(i, ModuleMap, moduleMap) { PreModule* m = i->second; s << MixfixModule::moduleTypeString(m->getModuleType()) << ' ' << m << '\n'; } } maude-3.1/src/Mixfix/doParse.cc0000644000175200017520000002222613720015042013332 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Functions that initiate parsing and analyse result. // void MixfixModule::getParserStats(int& nrNonterminals, int& nrTerminals, int& nrProductions) { makeGrammar(); nrNonterminals = parser->getNrNonTerminals(); nrTerminals = parser->getNrTerminals(); nrProductions = parser->getNrProductions(); } Term* MixfixModule::parseTerm(const Vector& bubble, ConnectedComponent* component, int begin, int end) { makeGrammar(); int r = parseSentence(bubble, ((component == 0) ? TERM : nonTerminal(component->getIndexWithinModule(), TERM_TYPE)), begin, end); if (r <= 0) { IssueWarning(LineNumber(bubble[0].lineNumber()) << ": no parse for term."); return 0; } Term* t1; Term* t2; parser->makeTerms(t1, t2); /* cerr << "t1 = " << t1 << endl; if (r > 1) cout << "t2 = " << t2 << endl; */ if (r > 1) { if (getStatus() >= THEORY_CLOSED) { // // We have semi-compiled operator declarations so sort // diagrams are valid and sort computations can safely be done. // t1->symbol()->fillInSortInfo(t1); t2->symbol()->fillInSortInfo(t2); } /* IssueWarning(LineNumber(bubble[0].lineNumber()) << ": ambiguous term, two parses are:\n" << t1 << "\n-versus-\n" << t2 << "\n\nArbitrarily taking the first as correct."); */ IssueWarning(LineNumber(bubble[0].lineNumber()) << ": ambiguous term, two parses are:\n" << t1->getSort() << " : " << t1 << "\n-versus-\n" << t2->getSort() << " : " << t2 << "\n\nArbitrarily taking the first as correct."); t2->deepSelfDestruct(); } return t1; } int MixfixModule::parseTerm2(const Vector& bubble, ConnectedComponent* component, Term*& parse1, Term*& parse2, int& firstBad) { makeGrammar(); int r = parser->parseSentence(bubble, ((component == 0) ? TERM : nonTerminal(component->getIndexWithinModule(), TERM_TYPE)), firstBad, 0, bubble.length()); if (r > 0) parser->makeTerms(parse1, parse2); return r; } StrategyExpression* MixfixModule::parseStrategyExpr(const Vector& bubble, int begin, int end) { makeGrammar(true); int r = parseSentence(bubble, STRATEGY_EXPRESSION, begin, end); if (r <= 0) { IssueWarning(LineNumber(bubble[0].lineNumber()) << ": no parse for strategy expression\n" << bubble << " ."); return 0; } StrategyExpression *e1, *e2; parser->makeStrategyExprs(e1, e2); if (r > 1) { IssueWarning(LineNumber(bubble[0].lineNumber()) << ": multiple distinct parses for strategy expression."); delete e2; } return e1; } int MixfixModule::parseStrategyExpr2(const Vector& bubble, StrategyExpression*& parse1, StrategyExpression*& parse2, int& firstBad) { makeGrammar(true); int r = parser->parseSentence(bubble, STRATEGY_EXPRESSION, firstBad, 0, bubble.length()); if (r > 0) parser->makeStrategyExprs(parse1, parse2); return r; } void MixfixModule::parseStatement(const Vector& bubble) { // Activate strategy language productions only in strategy definitions bool complexFlag = bubble[0].code() == sd || bubble[0].code() == csd; makeGrammar(complexFlag); int r = parseSentence(bubble, STATEMENT); if (r <= 0) { IssueWarning(LineNumber(bubble[0].lineNumber()) << ": no parse for statement\n" << bubble << " ."); return; } if (r > 1) { IssueWarning(LineNumber(bubble[0].lineNumber()) << ": multiple distinct parses for statement\n" << bubble << " ."); } parser->insertStatement(); } bool MixfixModule::parseMatchCommand(const Vector& bubble, Term*& pattern, Term*& subject, Vector& condition) { makeGrammar(true); int r = parseSentence(bubble, MATCH_COMMAND); if (r <= 0) { IssueWarning(LineNumber(bubble[0].lineNumber()) << ": no parse for command."); return false; } if (r > 1) { IssueWarning(LineNumber(bubble[0].lineNumber()) << ": multiple distinct parses for command."); } parser->makeMatchCommand(pattern, subject, condition); return true; } bool MixfixModule::parseUnifyCommand(const Vector& bubble, Vector& lhs, Vector& rhs) { makeGrammar(true); int r = parseSentence(bubble, UNIFY_COMMAND); if (r <= 0) { IssueWarning(LineNumber(bubble[0].lineNumber()) << ": no parse for command."); return false; } if (r > 1) { IssueWarning(LineNumber(bubble[0].lineNumber()) << ": multiple distinct parses for command."); } parser->makeUnifyCommand(lhs, rhs); return true; } bool MixfixModule::parseSearchCommand(const Vector& bubble, Term*& initial, int& searchType, Term*& target, Vector& condition) { makeGrammar(true); int r = parseSentence(bubble, SEARCH_COMMAND); if (r <= 0) { IssueWarning(LineNumber(bubble[0].lineNumber()) << ": no parse for command."); return false; } if (r > 1) { IssueWarning(LineNumber(bubble[0].lineNumber()) << ": multiple distinct parses for command."); } parser->makeSearchCommand(initial, searchType, target, condition); return true; } bool MixfixModule::parseGetVariantsCommand(const Vector& bubble, Term*& initial, Vector& constraints) { makeGrammar(true); int r = parseSentence(bubble, GET_VARIANTS_COMMAND); if (r <= 0) { IssueWarning(LineNumber(bubble[0].lineNumber()) << ": no parse for command."); return false; } if (r > 1) { IssueWarning(LineNumber(bubble[0].lineNumber()) << ": multiple distinct parses for command."); } parser->makeGetVariantsCommand(initial, constraints); return true; } bool MixfixModule::parseVariantUnifyCommand(const Vector& bubble, Vector& lhs, Vector& rhs, Vector& constraints) { makeGrammar(true); int r = parseSentence(bubble, VARIANT_UNIFY_COMMAND); if (r <= 0) { IssueWarning(LineNumber(bubble[0].lineNumber()) << ": no parse for command."); return false; } if (r > 1) { IssueWarning(LineNumber(bubble[0].lineNumber()) << ": multiple distinct parses for command."); } parser->makeVariantUnifyOrMatchCommand(lhs, rhs, constraints); return true; } bool MixfixModule::parseVariantMatchCommand(const Vector& bubble, Vector& lhs, Vector& rhs, Vector& constraints) { makeGrammar(true); int r = parseSentence(bubble, VARIANT_MATCH_COMMAND); if (r <= 0) { IssueWarning(LineNumber(bubble[0].lineNumber()) << ": no parse for command."); return false; } if (r > 1) { IssueWarning(LineNumber(bubble[0].lineNumber()) << ": multiple distinct parses for command."); } parser->makeVariantUnifyOrMatchCommand(lhs, rhs, constraints); return true; } bool MixfixModule::parseStrategyCommand(const Vector& bubble, Term*& subject, StrategyExpression*& strategy) { makeGrammar(true); int r = parseSentence(bubble, STRATEGY_COMMAND); if (r <= 0) { IssueWarning(LineNumber(bubble[0].lineNumber()) << ": no parse for command."); return false; } if (r > 1) { IssueWarning(LineNumber(bubble[0].lineNumber()) << ": multiple distinct parses for command."); } parser->makeStrategyCommand(subject, strategy); return true; } int MixfixModule::parseSentence(const Vector& bubble, int root, int begin, int end) { Assert(bubble.length() >= 1, "empty sentence"); if (end == DEFAULT) end = bubble.length() - 1; int nrTokens = end - begin + 1; int firstBad; int r = parser->parseSentence(bubble, root, firstBad, begin, nrTokens); if (r <= 0) { if (r == -1) { IssueWarning(LineNumber(bubble[firstBad].lineNumber()) << ": bad token " << QUOTE(bubble[firstBad].name()) << '.'); } else if (firstBad == begin + nrTokens) { IssueWarning(LineNumber(bubble[end].lineNumber()) << " : unexpected end of tokens."); } else { IssueWarning(LineNumber(bubble[firstBad].lineNumber()) << ": didn't expect token " << QUOTE(bubble[firstBad]) << ':'); Token::printTokenVector(cerr, bubble, begin, firstBad, false); // HACK cerr << " <---*HERE*\n"; } } return r; } maude-3.1/src/Mixfix/xmlBuffer.cc0000644000175200017520000000564213576050735013713 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class XmlBuffer. // // utility stuff #include "macros.hh" #include "xmlBuffer.hh" XmlBuffer::XmlBuffer(ostream& output, int flushLevel) : output(output), flushLevel(flushLevel) { output << "\n"; indentLevel = 0; startTagIncomplete = false; } XmlBuffer::~XmlBuffer() { while (!(elements.empty())) endElement(); } void XmlBuffer::characterData(const string& charData) { if (startTagIncomplete) { output << ">\n"; startTagIncomplete = false; } output << charData; } void XmlBuffer::comment(const string& text) { if (startTagIncomplete) { output << ">\n"; startTagIncomplete = false; } indent(); output << "\n"; } void XmlBuffer::beginElement(const string& name) { if (startTagIncomplete) output << ">\n"; indent(); output << '<' << name; startTagIncomplete = true; ++indentLevel; elements.push(name); } void XmlBuffer::endElement() { Assert(!(elements.empty()), "empty element stack"); --indentLevel; if (startTagIncomplete) { output << "/>\n"; startTagIncomplete = false; } else { indent(); output << "\n"; } if (indentLevel <= flushLevel) output.flush(); elements.pop(); } void XmlBuffer::attributePair(const string& name, const string& value) { output << ' ' << name << "=\""; translate(value); output << '"'; } void XmlBuffer::attributePair(const string& name, const string& value, int index) { output << ' ' << name << "=\""; translate(value); output << index << '"'; } void XmlBuffer::indent() { for (int i = indentLevel; i > 0 ; i--) output << ' '; } void XmlBuffer::translate(const string& value) { const string::const_iterator e = value.end(); for (string::const_iterator i = value.begin(); i != e; ++i) { switch (*i) { case '<': output << "<"; break; case '&': output << "&"; break; case '"': output << """; break; default: output << *i; } } } maude-3.1/src/Mixfix/interpreter.cc0000755000175200017520000004526413717641647014340 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class Interpreter. // // utility stuff #include "macros.hh" #include "vector.hh" #include "tty.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "variable.hh" #include "AU_Theory.hh" #include "higher.hh" #include "strategyLanguage.hh" #include "mixfix.hh" #include "SMT.hh" // interface class definitions #include "term.hh" #include "extensionInfo.hh" // higher class definitions #include "pattern.hh" #include "matchSearchState.hh" #include "rewriteSequenceSearch.hh" #include "unificationProblem.hh" #include "irredundantUnificationProblem.hh" #include "narrowingSequenceSearch.hh" #include "variantSearch.hh" #include "filteredVariantUnifierSearch.hh" // variable class definitions #include "variableDagNode.hh" // object system class definitions #include "pseudoThread.hh" // strategy languages definitions #include "strategyExpression.hh" #include "depthFirstStrategicSearch.hh" #include "fairStrategicSearch.hh" // front end class definitions #include "timer.hh" #include "cacheableRewritingContext.hh" #include "maudemlBuffer.hh" #include "syntacticPreModule.hh" #include "syntacticView.hh" #include "visibleModule.hh" #include "loopSymbol.hh" #include "freshVariableSource.hh" #include "viewExpression.hh" #include "moduleExpression.hh" #include "interpreter.hh" // our stuff #include "execute.cc" #include "match.cc" #include "unify.cc" #include "variantUnify.cc" #include "variantMatch.cc" #include "getVariants.cc" #include "search.cc" #include "loopMode.cc" #include "erewrite.cc" #include "srewrite.cc" Interpreter::Interpreter() { xmlLog = 0; xmlBuffer = 0; flags = DEFAULT_FLAGS; printFlags = DEFAULT_PRINT_FLAGS; currentModule = 0; currentView = 0; savedState = 0; savedModule = 0; continueFunc = 0; } Interpreter::~Interpreter() { // // Must delete modules before other destruction takes place to avoid // accessing free'd stuff. Deletion of named modules implicitly forces // deletion of cached modules since cached modules must be derived from // and hence dependent on named modules. It also implicitly forces the // deletion of cached views since such views must have a named or cached // module as their from-theory. // deleteNamedModules(); clearContinueInfo(); delete xmlBuffer; delete xmlLog; } void Interpreter::setFlag(Flags flag, bool polarity) { if (polarity) flags |= flag; else flags &= ~flag; RewritingContext::setTraceStatus(flags & EXCEPTION_FLAGS); } void Interpreter::setPrintFlag(PrintFlags flag, bool polarity) { if (polarity) printFlags |= flag; else printFlags &= ~flag; } void Interpreter::showProfile() const { currentModule->getFlatModule()->showProfile(cout); } void Interpreter::beginXmlLog(const char* fileName) { delete xmlBuffer; delete xmlLog; xmlLog = new ofstream(fileName); xmlBuffer = new MaudemlBuffer(*xmlLog); } void Interpreter::endXmlLog() { delete xmlBuffer; xmlBuffer = 0; delete xmlLog; xmlLog = 0; } bool Interpreter::setCurrentModule(const Vector& moduleExpr, int start) { // // Commands use this to set the current module to moduleExpr, which could // be empty if no module was specified in the command. // // This also serves as the gatekeeper, to prevent commands executing in // a module on which markAsBad() has been called. // SyntacticPreModule* m; if (moduleExpr.empty()) { // // No module specified. See if there is a usable currentModule. // if (currentModule == 0) { IssueWarning("no module expression provided and no last module."); return false; } else if (currentModule->getFlatSignature()->isBad()) m = currentModule; // fall into bad case below else return true; // we have a good current module } else { // // We have a module specified by the tokens, however we may // need to skip start tokens, typically "in". // int nrTokens = moduleExpr.length() - start; if (nrTokens == 1) { m = safeCast(SyntacticPreModule*, getModule(moduleExpr[start].code())); // HACK if (m != 0) { if (m->getFlatSignature()->isBad()) goto bad; setCurrentModule(m); return true; } IssueWarning(LineNumber(moduleExpr[start].lineNumber()) << ": no module " << QUOTE(moduleExpr[start]) << '.'); } else { IssueWarning(LineNumber(moduleExpr[start].lineNumber()) << ": module expressions not supported in commands."); } return false; } bad: IssueWarning(*m << ": module " << QUOTE(m) << " is unusable due to unpatchable errors."); return false; } void Interpreter::setCurrentModule(SyntacticPreModule* module) { if (currentModule != module) { if (currentModule != 0) { clearContinueInfo(); currentModule->loseFocus(); } currentModule = module; } } bool Interpreter::setCurrentView(const Vector& viewExpr) { switch (viewExpr.size()) { case 0: { if (currentView == 0) { IssueWarning("no view expression provided and no last view."); return false; } return true; } case 1: { if (View* v = getView(viewExpr[0].code())) { setCurrentView(safeCast(SyntacticView*, v)); return true; } // fall thru } default: { IssueWarning(LineNumber(viewExpr[0].lineNumber()) << ": no view " << QUOTE(viewExpr) << '.'); } } return false; } void Interpreter::makeClean(int lineNumber) { if (currentModule != 0 && !(currentModule->isComplete())) { IssueAdvisory(LineNumber(lineNumber) << ": discarding incomplete module."); delete currentModule; currentModule = 0; } else if (currentView != 0 && !(currentView->isComplete())) { IssueAdvisory(LineNumber(lineNumber) << ": discarding incomplete view."); delete currentView; currentView = 0; } } void Interpreter::addSelected(const Vector& opName) { selected.insert(Token::bubbleToPrefixNameCode(opName)); // opName.contractTo(0); } void Interpreter::updateSet(set& target, bool add) { if (add) target.insert(selected.begin(), selected.end()); else { FOR_EACH_CONST(i, set, selected) target.erase(*i); } selected.clear(); } bool Interpreter::concealedSymbol(Symbol* symbol) { return getPrintFlag(PRINT_CONCEAL) && concealedSymbols.find(symbol->id()) != concealedSymbols.end(); } void Interpreter::parse(const Vector& subject) { // // We need to use getFlatModule() rather than getFlatSignature() // since operator sort info is not computed until the statements are // flattened in and the theory is closed. // Term* s = currentModule->getFlatModule()->parseTerm(subject); if (s != 0) { if (s->getSortIndex() == Sort::SORT_UNKNOWN) s->symbol()->fillInSortInfo(s); cout << s->getSort() << ": " << s << '\n'; s->deepSelfDestruct(); } } void Interpreter::showSortsAndSubsorts() const { currentModule->getFlatModule()->showSortsAndSubsorts(cout); } void Interpreter::showModule(bool all) const { currentModule->getFlatModule()->showModule(cout, all); } void Interpreter::showView() const { if (currentView->evaluate()) // in case it became stale currentView->showView(cout); else IssueWarning("view " << QUOTE(currentView) << " cannot be used due to earlier errors."); } void Interpreter::showModules(bool all) const { showNamedModules(cout); if (all) showCreatedModules(cout); } void Interpreter::showViews(bool all) const { showNamedViews(cout); if (all) showCreatedViews(cout); } void Interpreter::showOps(bool all) const { currentModule->getFlatModule()->showPolymorphs(cout, false, all); currentModule->getFlatModule()->showOps(cout, false, all); } void Interpreter::showVars() const { currentModule->getFlatModule()->showVars(cout, false); } void Interpreter::showMbs(bool all) const { currentModule->getFlatModule()->showMbs(cout, false, all); } void Interpreter::showEqs(bool all) const { currentModule->getFlatModule()->showEqs(cout, false, all); } void Interpreter::showRls(bool all) const { currentModule->getFlatModule()->showRls(cout, false, all); } void Interpreter::showStrats(bool all) const { currentModule->getFlatModule()->showStrats(cout, false, all); } void Interpreter::showSds(bool all) const { currentModule->getFlatModule()->showSds(cout, false, all); } void Interpreter::showKinds() const { currentModule->getFlatModule()->showKinds(cout); } void Interpreter::showSummary() const { currentModule->getFlatModule()->showSummary(cout); } ImportModule* Interpreter::getModuleOrIssueWarning(int name, const LineNumber& lineNumber) { if (PreModule* m = getModule(name)) { if (ImportModule* fm = m->getFlatSignature()) { // // We might have had to build a parser for this // module in order to deal with local statements, // term hooks and identities. // We delete the parser since we don't // have any further use for it. // fm->economize(); if (fm->isBad()) { IssueWarning(lineNumber << ": unable to use module " << QUOTE(m) << " due to unpatchable errors."); } else return fm; } else { IssueWarning(lineNumber << ": mutually recursive import of module " << QUOTE(m) << " ignored."); } } else { IssueWarning(lineNumber << ": module " << QUOTE(Token::name(name)) << " does not exist."); } return 0; } Argument* Interpreter::handleArgument(const ViewExpression* expr, EnclosingObject* enclosingObject, ImportModule* requiredParameterTheory, int argNr) { // // An argument must be the name of a parameter from an enclosing object or the name of // a view or an instantiation of a view. // In all cases the fromTheory of the view or the theory of the parameter must match // requiredParameterTheory. // if (expr->isInstantiation()) { //IssueAdvisory("evaluation of view instantiation " << expr << " is experimental"); // // We have the instantiation of a parameterized view. // ViewExpression* baseViewExpr = expr->getView(); // // Base view must be a named view or a view expression - cannot be a parameter. // Argument* baseArg = handleArgument(baseViewExpr, enclosingObject, requiredParameterTheory, NONE); if (baseArg == 0) return 0; View* baseView = safeCast(View*, baseArg); // // Number of parameters in base view must match number of arguments passed // in instantiation. // int nrParameters = baseView->getNrParameters(); const Vector& argumentExpressions = expr->getArguments(); int nrArguments = argumentExpressions.size(); if (nrArguments != nrParameters) { IssueWarning(nrArguments << (nrArguments == 1 ? " argument" : " arguments") << " passed in view instantiation " << QUOTE(expr) << " whereas " << nrParameters << " expected."); return 0; } // // We now construct an argument list of Parameters and Views. // Vector arguments(nrParameters); bool hasTheoryView = false; // theory-view maintain free parameters bool hasPEO = false; // parameters from an enclosing object (PEO) create bound parameters bool hasViewWithBoundParameters = false; for (int i = 0; i < nrParameters; ++i) { DebugInfo("----- looking argument " << i << " which is " << argumentExpressions[i] << " --------"); Argument* a = handleArgument(argumentExpressions[i], enclosingObject, baseView->getParameterTheory(i), i); if (a == 0) return 0; if (View* v = dynamic_cast(a)) { if (v->hasFreeParameters()) { IssueWarning("view " << QUOTE(v) << " has free parameter " << QUOTE(Token::name(v->getParameterName(0))) << " and cannot be used in view instantiation " << QUOTE(expr) << "."); return 0; } if (v->hasBoundParameters()) hasViewWithBoundParameters = true; if (v->getToModule()->isTheory()) hasTheoryView = true; } else hasPEO = true; arguments[i] = a; } if (hasTheoryView && hasPEO) { IssueWarning("Instantiation " << QUOTE(expr) << " uses both a theory-view and a parameter from enclosing " << enclosingObject->getObjectType() << " " << QUOTE(enclosingObject->getObjectName()) << '.'); return 0; } if (hasTheoryView && hasViewWithBoundParameters) { IssueWarning("Nonfinal instantiation " << QUOTE(expr) << " uses both a theory-view and a view with bound parameters from enclosing " << enclosingObject->getObjectType() << " " << QUOTE(enclosingObject->getObjectName()) << '.'); } return makeViewInstantiation(baseView, arguments); } // // Base case: parameter name or view name. // Token name = expr->getName(); int code = name.code(); if (enclosingObject != 0 && argNr != NONE) { // // Because we have an enclosing object and we're in an argument list we // check for a parameter from the enclosing object. // int index = enclosingObject->findParameterIndex(code); if (index != NONE) { // // Parameters from an enclosing object occlude views. // ImportModule* enclosingObjectParameterTheory = enclosingObject->getParameterTheory(index); if (enclosingObjectParameterTheory != requiredParameterTheory) { IssueWarning(LineNumber(name.lineNumber()) << ": parameter " << QUOTE(name) << " from enclosing " << enclosingObject->getObjectType() << ' ' << QUOTE(enclosingObject->getObjectName()) << " is of theory " << QUOTE(enclosingObjectParameterTheory) << " whereas theory " << QUOTE(requiredParameterTheory) << " is required."); return 0; } return getParameter(code); } } // // Must be a view // if (View* v = getView(code)) { // // Instantiation argument is a view. // if (!(v->evaluate())) { IssueWarning(LineNumber(name.lineNumber()) << ": unusable view " << QUOTE(v) << '.'); return 0; } ImportModule* fromTheory = v->getFromTheory(); if (fromTheory != requiredParameterTheory) { IssueWarning(LineNumber(name.lineNumber()) << ": view " << QUOTE(name) << " is from theory " << QUOTE(fromTheory) << " whereas theory " << QUOTE(requiredParameterTheory) << " is required."); return 0; } return v; } IssueWarning(LineNumber(name.lineNumber()) << ": could not find a parameter or view " << QUOTE(name) << "."); return 0; } ImportModule* Interpreter::makeModule(const ModuleExpression* expr, EnclosingObject* enclosingObject) { switch (expr->getType()) { case ModuleExpression::MODULE: { Token name = expr->getModuleName(); if (ImportModule* fm = getModuleOrIssueWarning(name.code(), name.lineNumber())) return fm; break; } case ModuleExpression::RENAMING: { if (ImportModule* fm = makeModule(expr->getModule(), enclosingObject)) { if (fm->hasBoundParameters()) { // // We allow this because we have to deal with this case when // a module with free parameters whose imports have bound parameters // is renamed, and we make use of it in the prelude. // } return makeRenamedCopy(fm, expr->getRenaming()); } break; } case ModuleExpression::SUMMATION: { const list& modules = expr->getModules(); Vector fms; FOR_EACH_CONST(i, list, modules) { if (ImportModule* fm = makeModule(*i, enclosingObject)) { if (fm->hasFreeParameters()) { IssueWarning("summand module " << fm << " has free parameters."); return 0; } fms.append(fm); } } if (!fms.empty()) return makeSummation(fms); break; } case ModuleExpression::INSTANTIATION: { if (ImportModule* fm = makeModule(expr->getModule(), enclosingObject)) { int nrParameters = fm->getNrParameters(); const Vector& argumentExpressions = expr->getArguments(); int nrArguments = argumentExpressions.size(); if (nrArguments != nrParameters) { IssueWarning("wrong number of parameters in module instantiation " << QUOTE(expr) << "; " << nrParameters << " expected."); break; } Vector arguments(nrParameters); bool hasTheoryView = false; bool hasPEO = false; bool hasViewWithBoundParameters = false; for (int i = 0; i < nrParameters; ++i) { Argument* a = handleArgument(argumentExpressions[i], enclosingObject, fm->getParameterTheory(i), i); if (a != 0) { if (View* v = dynamic_cast(a)) { if (v->hasFreeParameters()) { IssueWarning("view " << QUOTE(v) << " has free parameter " << QUOTE(Token::name(v->getParameterName(0))) << " and cannot be used in module instantiation " << QUOTE(expr) << "."); return 0; } if (v->hasBoundParameters()) hasViewWithBoundParameters = true; if (v->getToModule()->isTheory()) hasTheoryView = true; } else hasPEO = true; } else return 0; arguments[i] = a; } if (hasTheoryView && hasPEO) { IssueWarning("Instantiation " << QUOTE(expr) << " uses both a theory-view and a parameter from enclosing " << enclosingObject->getObjectType() << " " << QUOTE(enclosingObject->getObjectName()) << '.'); return 0; } if (hasTheoryView && hasViewWithBoundParameters) { IssueWarning("Nonfinal instantiation " << QUOTE(expr) << " uses both a theory-view and a view with bound parameters from enclosing " << enclosingObject->getObjectType() << " " << QUOTE(enclosingObject->getObjectName()) << '.'); return 0; } return makeModuleInstantiation(fm, arguments); // may return null but never has bad flag set } break; } default: CantHappen("bad module expression"); } return 0; } maude-3.1/src/Mixfix/parameterDatabase.hh0000644000175200017520000000273213576050635015374 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2019 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class to hold database of parameters. // // This is just a pool of Parameter objects that we make and reuse as needed. // A Parameter is just a NamedEntity that can be passed as an Argument in // instantiations, and that we can test that it is a Parameter, rather than a View. // #ifndef _parameterDatabase_hh_ #define _parameterDatabase_hh_ #include #include "parameter.hh" class ParameterDatabase { NO_COPYING(ParameterDatabase); public: ParameterDatabase(){} ~ParameterDatabase(); Parameter* getParameter(int parameterName); private: typedef map ParameterMap; ParameterMap parameterMap; }; #endif maude-3.1/src/Mixfix/execute.cc0000755000175200017520000003140013576050735013415 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2017 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Code for commands that do rewriting. // #ifdef QUANTIFY_REWRITING #include "quantify.h" #endif void Interpreter::clearContinueInfo() { delete savedState; savedState = 0; continueFunc = 0; if (savedModule != 0) { (void) savedModule->unprotect(); savedModule = 0; } } DagNode* Interpreter::makeDag(Term* subjectTerm) { subjectTerm = subjectTerm->normalize(false); NatSet eagerVariables; Vector problemVariables; subjectTerm->markEager(0, eagerVariables, problemVariables); DagNode* d = subjectTerm->term2Dag(); subjectTerm->deepSelfDestruct(); return d; } DagNode* Interpreter::makeDag(const Vector& subject) { if (Term* s = currentModule->getFlatModule()->parseTerm(subject)) return makeDag(s); return 0; } void Interpreter::startUsingModule(VisibleModule* module) { clearContinueInfo(); UserLevelRewritingContext::clearTrialCount(); if (getFlag(AUTO_CLEAR_MEMO)) module->clearMemo(); if (getFlag(AUTO_CLEAR_PROFILE)) module->clearProfile(); module->protect(); } void Interpreter::beginRewriting(bool debug) { UserLevelRewritingContext::clearInfo(); if (debug) UserLevelRewritingContext::setDebug(); else RewritingContext::setTraceStatus(flags & EXCEPTION_FLAGS); // in case traceFlag was set by SIGINFO #ifdef QUANTIFY_REWRITING quantify_start_recording_data(); #endif } void Interpreter::printModifiers(Int64 number, Int64 number2) { if (number != NONE || number2 != NONE) { cout << '['; if (number != NONE) cout << number; if (number2 != NONE) cout << ", " << number2; cout << "] "; } cout << "in " << currentModule << " : "; } void Interpreter::printTiming(Int64 nrRewrites, Int64 cpu, Int64 real) { cout << " in " << cpu / 1000 << "ms cpu (" << real / 1000 << "ms real) ("; if (cpu > 0) cout << (1000000 * nrRewrites) / cpu; else cout << '~'; cout << " rewrites/second)"; } void Interpreter::printStats(const Timer& timer, RewritingContext& context, bool timingFlag) { Int64 nrRewrites = context.getTotalCount(); cout << "rewrites: " << nrRewrites; Int64 real; Int64 virt; Int64 prof; if (timingFlag && timer.getTimes(real, virt, prof)) printTiming(nrRewrites, prof, real); cout << '\n'; if (getFlag(SHOW_BREAKDOWN)) { cout << "mb applications: " << context.getMbCount() << " equational rewrites: " << context.getEqCount() << " rule rewrites: " << context.getRlCount() << " variant narrowing steps: " << context.getVariantNarrowingCount() << " narrowing steps: " << context.getNarrowingCount() << '\n'; } } void Interpreter::endRewriting(Timer& timer, CacheableRewritingContext* context, VisibleModule* module, ContinueFuncPtr cf) { timer.stop(); #ifdef QUANTIFY_REWRITING quantify_stop_recording_data(); #endif clearContinueInfo(); // just in case debugger left info if (UserLevelRewritingContext::aborted()) { delete context; (void) module->unprotect(); } else { if (getFlag(SHOW_STATS)) printStats(timer, *context, getFlag(SHOW_TIMING)); DagNode* r = context->root(); cout << "result " << r->getSort() << ": " << r << '\n'; cout.flush(); if (xmlBuffer != 0) { xmlBuffer->generateResult(*context, timer, getFlag(SHOW_STATS), getFlag(SHOW_TIMING), getFlag(SHOW_BREAKDOWN)); } if (cf == 0) { delete context; (void) module->unprotect(); } else { savedState = context; savedModule = module; continueFunc = cf; } } UserLevelRewritingContext::clearDebug(); // even if we didn't start in debug mode } #if 1 //int CONVERT_THRESHOLD = 8; //int MERGE_THRESHOLD = 16; void Interpreter::reduce(const Vector& subject, bool debug) { if (DagNode* d = makeDag(subject)) { CacheableRewritingContext* context = new CacheableRewritingContext(d); if (getFlag(SHOW_COMMAND)) { UserLevelRewritingContext::beginCommand(); cout << "reduce in " << currentModule << " : " << d << " ." << endl; if (xmlBuffer != 0) xmlBuffer->generateReduce(d); } VisibleModule* fm = currentModule->getFlatModule(); startUsingModule(fm); beginRewriting(debug); Timer timer(getFlag(SHOW_TIMING)); context->reduce(); endRewriting(timer, context, fm); } } #else int CONVERT_THRESHOLD; int MERGE_THRESHOLD; void Interpreter::reduce(const Vector& subject, bool debug) { if (DagNode* d = makeDag(subject)) { for (int i = 0; i < 2; ++i) { for (CONVERT_THRESHOLD = 0; CONVERT_THRESHOLD <= 20; CONVERT_THRESHOLD += 1) { for (MERGE_THRESHOLD = 0; MERGE_THRESHOLD <= 20; MERGE_THRESHOLD += 1) { cout << "CONVERT_THRESHOLD = " << CONVERT_THRESHOLD << "\tMERGE_THRESHOLD = " << MERGE_THRESHOLD << endl; DagNode* d = makeDag(subject); CacheableRewritingContext* context = new CacheableRewritingContext(d); VisibleModule* fm = currentModule->getFlatModule(); startUsingModule(fm); beginRewriting(debug); Timer timer(getFlag(SHOW_TIMING)); context->reduce(); endRewriting(timer, context, fm); } } } } } #endif void Interpreter::rewrite(const Vector& subject, Int64 limit, bool debug) { if (DagNode* d = makeDag(subject)) { if (getFlag(SHOW_COMMAND)) { UserLevelRewritingContext::beginCommand(); cout << "rewrite "; if (limit != NONE) cout << '[' << limit << "] "; cout << "in " << currentModule << " : " << d << " ." << endl; if (xmlBuffer != 0) xmlBuffer->generateRewrite(d, limit); } CacheableRewritingContext* context = new CacheableRewritingContext(d); VisibleModule* fm = currentModule->getFlatModule(); startUsingModule(fm); if (getFlag(AUTO_CLEAR_RULES)) fm->resetRules(); beginRewriting(debug); Timer timer(getFlag(SHOW_TIMING)); context->ruleRewrite(limit); endRewriting(timer, context, fm, &Interpreter::rewriteCont); } } void Interpreter::rewriteCont(Int64 limit, bool debug) { CacheableRewritingContext* context = safeCast(CacheableRewritingContext*, savedState); VisibleModule* fm = savedModule; savedState = 0; savedModule = 0; continueFunc = 0; if (xmlBuffer != 0 && getFlag(SHOW_COMMAND)) xmlBuffer->generateContinue("rewrite", fm, limit); context->clearCount(); beginRewriting(debug); Timer timer(getFlag(SHOW_TIMING)); context->ruleRewrite(limit); endRewriting(timer, context, fm, &Interpreter::rewriteCont); } void Interpreter::fRewrite(const Vector& subject, Int64 limit, Int64 gas, bool debug) { if (DagNode* d = makeDag(subject)) { if (getFlag(SHOW_COMMAND)) { UserLevelRewritingContext::beginCommand(); cout << "frewrite "; printModifiers(limit, gas); cout << d << " ." << endl; if (xmlBuffer != 0) xmlBuffer->generateFrewrite(d, limit, gas); } CacheableRewritingContext* context = new CacheableRewritingContext(d); context->setObjectMode(ObjectSystemRewritingContext::FAIR); VisibleModule* fm = currentModule->getFlatModule(); startUsingModule(fm); if (getFlag(AUTO_CLEAR_RULES)) fm->resetRules(); beginRewriting(debug); Timer timer(getFlag(SHOW_TIMING)); context->fairRewrite(limit, (gas == NONE) ? 1 : gas); endRewriting(timer, context, fm, &Interpreter::fRewriteCont); } } void Interpreter::fRewriteCont(Int64 limit, bool debug) { CacheableRewritingContext* context = safeCast(CacheableRewritingContext*, savedState); VisibleModule* fm = savedModule; savedState = 0; savedModule = 0; continueFunc = 0; if (xmlBuffer != 0 && getFlag(SHOW_COMMAND)) xmlBuffer->generateContinue("frewrite", fm, limit); context->clearCount(); beginRewriting(debug); Timer timer(getFlag(SHOW_TIMING)); context->fairContinue(limit); endRewriting(timer, context, fm, &Interpreter::fRewriteCont); } void Interpreter::cont(Int64 limit, bool debug) { if (limit != 0) { if (continueFunc != 0) (this->*continueFunc)(limit, debug); else IssueWarning("can't continue."); } } void Interpreter::creduce(const Vector& subject) { #ifdef COMPILER if (DagNode* d = makeDag(subject)) { if (makeExecutable(currentModule, getFlag(COMPILE_COUNT))) { if (getFlag(SHOW_COMMAND)) { UserLevelRewritingContext::beginCommand(); cout << "creduce in " << currentModule << " : " << d << " ." << endl; } // // Write dag to file, run executable and read result from file. // outputGraph(d); runExecutable(); Int64 nrRewrites; Int64 cpu; Int64 real; DagNode* r = inputGraph(nrRewrites, cpu, real); // // Print number of rewrites, timing and result. // if (getFlag(SHOW_STATS)) { cout << "rewrites: " << nrRewrites; if (getFlag(SHOW_TIMING)) printTiming(nrRewrites, cpu, real); cout << '\n'; } cout << "result " << r->getSort() << ": " << r << '\n'; cout.flush(); } } #endif } #include "stackMachine.hh" #include "stackMachineRhsCompiler.hh" #include "frame.hh" void Interpreter::sreduce(const Vector& subject) { if (Term* t = currentModule->getFlatModule()->parseTerm(subject)) { // // Partly normalize term (don't flatten). // t = t->normalize(false); // // Set EAGER flag in eager terms since term2InstructionSequence() needs this // to determine subterm sharability. // NatSet eagerVariables; Vector problemVariables; t->markEager(0, eagerVariables, problemVariables); // // Now compile a sequence of instructions to build the term, evaluating alond the way. // Instruction* instructionSequence = t->term2InstructionSequence(); // // If some function symbol didn't generate an instruction we get the null sequence to // flag unsupported feature. // if (instructionSequence == 0) { IssueWarning("sreduce unsupported operator (Maude VM compiler)."); return; } // // Now run the sequence in a stack machine. // VisibleModule* fm = currentModule->getFlatModule(); fm->stackMachineCompile(); startUsingModule(fm); Timer timer(getFlag(SHOW_TIMING)); if (getFlag(SHOW_COMMAND)) { UserLevelRewritingContext::beginCommand(); cout << "sreduce in " << currentModule << " : " << t << " ." << endl; } t->deepSelfDestruct(); StackMachine sm; DagNode* r = sm.execute(instructionSequence); Int64 nrRewrites = sm.getEqCount(); // // End of stack based reduction. // if (getFlag(SHOW_STATS)) { cout << "rewrites: " << nrRewrites; Int64 real; Int64 virt; Int64 prof; if (getFlag(SHOW_TIMING) && timer.getTimes(real, virt, prof)) printTiming(nrRewrites, prof, real); cout << '\n'; } cout << "result " << r->getSort() << ": " << r << '\n'; cout.flush(); delete instructionSequence; (void) fm->unprotect(); } } #include "SMT_Info.hh" #include "variableGenerator.hh" void Interpreter::check(const Vector& subject) { if (Term* term = currentModule->getFlatModule()->parseTerm(subject)) { term = term->normalize(false); DagNode* d = term->term2Dag(); if (getFlag(SHOW_COMMAND)) { UserLevelRewritingContext::beginCommand(); cout << "check in " << currentModule << " : " << d << " ." << endl; } VisibleModule* fm = currentModule->getFlatModule(); startUsingModule(fm); const SMT_Info& smtInfo = fm->getSMT_Info(); VariableGenerator vg(smtInfo); VariableGenerator::Result result = vg.checkDag(d); if (result == VariableGenerator::BAD_DAG) IssueWarning (*term << ": term " << QUOTE(term) << " is not a valid SMT Boolean expression."); else { cout << "Result from sat solver is: " << ((result == VariableGenerator::SAT) ? "sat" : ((result == VariableGenerator::UNSAT) ? "unsat" : "undecided")) << endl; } term->deepSelfDestruct(); fm->unprotect(); } } void Interpreter::test(const Vector& subject) { } maude-3.1/src/Mixfix/prettyPrint.cc0000755000175200017520000003350113576050735014323 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Code for pretty printing all kinds of things. // int MixfixModule::globalIndent = 0; bool MixfixModule::attributeUsed = false; ostream& operator<<(ostream& s, const NamedEntity* e) { return s << ((e == 0) ? "(null)" : Token::name(e->id())); } ostream& operator<<(ostream& s, const Sort* sort) { if (sort == 0) return s << "(sort not calculated)"; ConnectedComponent* c = sort->component(); if (c != 0 && sort->index() == Sort::KIND) { s << '[' << c->sort(1); int nrMax = c->nrMaximalSorts(); for (int i = 2; i <= nrMax; i++) s << ',' << c->sort(i); return s << ']'; } return s << Token::sortName(sort->id()); } ostream& operator<<(ostream& s, const ConnectedComponent* component) { // // We identify a connect component (aka kind) with its ERROR (aka KIND) sort. // return s << component->sort(Sort::KIND); } ostream& operator<<(ostream& s, const Term* term) { MixfixModule::globalIndent = 0; static_cast(term->symbol()->getModule())-> prettyPrint(s, const_cast(term), UNBOUNDED, UNBOUNDED, 0, UNBOUNDED, 0, false); // HACK if (MixfixModule::attributeUsed) { MixfixModule::attributeUsed = false; s << Tty(Tty::RESET); } return s; } ostream& operator<<(ostream& s, DagNode* dagNode) { if (dagNode == 0) { s << "(null DagNode*)"; return s; } MixfixModule::globalIndent = 0; MixfixModule* module = static_cast(dagNode->symbol()->getModule()); if (interpreter.getPrintFlag(Interpreter::PRINT_GRAPH)) module->graphPrint(s, dagNode); else { MixfixModule::ColoringInfo coloringInfo; if (interpreter.getPrintFlag(Interpreter::PRINT_COLOR)) { MixfixModule::computeGraphStatus(dagNode, coloringInfo.visited, coloringInfo.statusVec); coloringInfo.reducedAbove = false; coloringInfo.reducedDirectlyAbove = false; } module->prettyPrint(s, coloringInfo, dagNode, UNBOUNDED, UNBOUNDED, 0, UNBOUNDED, 0, false); } if (MixfixModule::attributeUsed) { MixfixModule::attributeUsed = false; s << Tty(Tty::RESET); } return s; } void MixfixModule::printAttributes(ostream& s, const PreEquation* pe, ItemType itemType) { const Label& l = pe->getLabel(); int id = l.id(); const Equation* eq = dynamic_cast(pe); const Rule* rl = dynamic_cast(pe); bool owise = eq != 0 && eq->isOwise(); bool variant = eq != 0 && eq->isVariant(); bool narrowing = rl != 0 && rl->isNarrowing(); bool nonexec = pe->isNonexec(); int metadata = getMetadata(itemType, pe); const PrintAttribute* printAttribute = getPrintAttribute(itemType, pe); if (!nonexec && !owise && !variant && !narrowing && id == NONE && metadata == NONE && printAttribute == 0) return; s << " ["; const char* space = ""; if (nonexec) { s << "nonexec"; space = " "; } if (owise) { s << space << "owise"; space = " "; } if (variant) { s << space << "variant"; space = " "; } if (narrowing) { s << space << "narrowing"; space = " "; } if (id != NONE) { s << space << "label " << &l; space = " "; } if (metadata != NONE) { s << space << "metadata " << Token::name(metadata); space = " "; } if (printAttribute != 0) { s << space; printAttribute->print(s, *pe); } s << ']'; } ostream& operator<<(ostream& s, const SortConstraint* sc) { if (sc->hasCondition()) s << 'c'; s << "mb "; s << sc->getLhs() << " : " << sc->getSort(); if (sc->hasCondition()) MixfixModule::printCondition(s, sc); MixfixModule* m = safeCast(MixfixModule*, sc->getModule()); m->printAttributes(s, sc, MixfixModule::MEMB_AX); s << " ."; return s; } ostream& operator<<(ostream& s, const Equation* e) { if (e->hasCondition()) s << 'c'; s << "eq "; s << e->getLhs() << " = " << e->getRhs(); if (e->hasCondition()) MixfixModule::printCondition(s, e); MixfixModule* m = safeCast(MixfixModule*, e->getModule()); m->printAttributes(s, e, MixfixModule::EQUATION); s << " ."; return s; } ostream& operator<<(ostream& s, const Rule* r) { if (r->hasCondition()) s << 'c'; s << "rl "; s << r->getLhs() << " => " << r->getRhs(); if (r->hasCondition()) MixfixModule::printCondition(s, r); MixfixModule* m = safeCast(MixfixModule*, r->getModule()); m->printAttributes(s, r, MixfixModule::RULE); s << " ."; return s; } ostream& operator<<(ostream& s, const ConditionFragment* c) { if (const EqualityConditionFragment* e = dynamic_cast(c)) s << e->getLhs() << " = " << e->getRhs(); else if (const SortTestConditionFragment* t = dynamic_cast(c)) s << t->getLhs() << " : " << t->getSort(); else if(const AssignmentConditionFragment* a = dynamic_cast(c)) s << a->getLhs() << " := " << a->getRhs(); else if(const RewriteConditionFragment* r = dynamic_cast(c)) s << r->getLhs() << " => " << r->getRhs(); else CantHappen("bad condition fragment"); return s; } ostream& operator<<(ostream& s, const RewriteStrategy* rs) { s << "strat " << Token::name(rs->id()) << " "; // Prints domain sorts const Vector& domain = rs->getDomain(); int arity = rs->arity(); if (arity > 0) { s << ": "; for (int i = 0; i < arity; i++) s << domain[i] << ' '; } s << "@ " << rs->getSubjectSort(); // Print attributes (only metadata is allowed) MixfixModule* m = safeCast(MixfixModule*, rs->getModule()); int metadata = m->getMetadata(MixfixModule::STRAT_DECL, rs); if (metadata != NONE) s << " [metadata " << Token::name(metadata) << "] "; s << " ."; return s; } inline void MixfixModule::printStrategyTerm(ostream& s, RewriteStrategy* strat, Term* term) { // The term itself is not what we want to print because it contains // the auxiliary symbol label instead of the strategy label s << Token::name(strat->id()); if (strat->arity() > 0 || ruleLabels.find(strat->id()) != ruleLabels.end()) { s << "("; bool first = true; for (ArgumentIterator it(*term); it.valid(); it.next()) { if (first) first = false; else s << ", "; s << it.argument(); } s << ")"; } } ostream& operator<<(ostream& s, const StrategyDefinition* e) { if (e->hasCondition()) s << 'c'; s << "sd "; // Prints the LHS with the strategy label MixfixModule* m = safeCast(MixfixModule*, e->getModule()); m->printStrategyTerm(s, e->getStrategy(), e->getLhs()); s << " := " << e->getRhs(); if (e->hasCondition()) MixfixModule::printCondition(s, e); m->printAttributes(s, e, MixfixModule::STRAT_DEF); s << " ."; return s; } void MixfixModule::printCondition(ostream& s, const Vector& condition) { int nrFragments = condition.length(); for (int i = 0; i < nrFragments; i++) { s << condition[i]; if (i + 1 < nrFragments) s << " /\\ "; } } void MixfixModule::printCondition(ostream& s, const PreEquation* pe) { s << " if "; printCondition(s, pe->getCondition()); } void MixfixModule::printVariable(ostream& s, int name, Sort* sort) const { if (Token::isFlagged(name)) { // // Variables with flagged codes are used internally to distinguish between two variables // with identical names during disjoint unification, and might be seen in a debugging // print statement. // s << "(flagged)"; name = Token::unflaggedCode(name); } s << Token::name(name); if (interpreter.getPrintFlag(Interpreter::PRINT_WITH_ALIASES)) { AliasMap::const_iterator i = variableAliases.find(name); if (i != variableAliases.end() && (*i).second == sort) return; } s << ':' << sort; } void MixfixModule::printPrefixName(ostream& s, const char* prefixName, SymbolInfo& si) { if (interpreter.getPrintFlag(Interpreter::PRINT_FORMAT) && (si.format.length() == 2)) { fancySpace(s, si.format[0]); s << prefixName; fancySpace(s, si.format[1]); } else s << prefixName; } int MixfixModule::printTokens(ostream& s, const SymbolInfo& si, int pos, const char* color) { bool noSpace = (pos == 0); bool hasFormat = interpreter.getPrintFlag(Interpreter::PRINT_FORMAT) && (si.format.length() > 0); for (;;) { int token = si.mixfixSyntax[pos++]; if (token == underscore) break; bool special = (token == leftParen || token == rightParen || token == leftBracket || token == rightBracket || token == leftBrace || token == rightBrace || token == comma); if (!((hasFormat && fancySpace(s, si.format[pos - 1])) || special || noSpace)) s << ' '; noSpace = special; if (color != 0) s << color; s << Token::name(token); if (color != 0) s << Tty(Tty::RESET); } if (!((hasFormat && fancySpace(s, si.format[pos - 1])) || noSpace)) s << ' '; return pos; } void MixfixModule::printTails(ostream& s, const SymbolInfo& si, int pos, int nrTails, bool needAssocParen, bool checkForInterrupt, const char* color) { bool hasFormat = interpreter.getPrintFlag(Interpreter::PRINT_FORMAT) && (si.format.length() > 0); int mixfixLength = si.mixfixSyntax.length(); for (int i = 0;;) { if (checkForInterrupt && UserLevelRewritingContext::interrupted()) return; bool noSpace = (pos == 0); for (int j = pos; j < mixfixLength; j++) { int token = si.mixfixSyntax[j]; bool special = (token == leftParen || token == rightParen || token == leftBracket || token == rightBracket || token == leftBrace || token == rightBrace || token == comma); if (!((hasFormat && fancySpace(s, si.format[j])) || special || noSpace)) s << ' '; noSpace = special; if (color != 0) s << color; s << Token::name(token); if (color != 0) s << Tty(Tty::RESET); } if (hasFormat) (void) fancySpace(s, si.format[mixfixLength]); if (++i == nrTails) break; if (needAssocParen) s << ')'; } } bool MixfixModule::fancySpace(ostream& s, int spaceToken) { bool space = false; for (const char* cmd = Token::name(spaceToken); *cmd; cmd++) { char c = *cmd; switch (c) { case '+': { ++globalIndent; break; } case '-': { if (globalIndent > 0) --globalIndent; break; } case 'n': { s << '\n'; space = true; break; } case 't': { s << '\t'; space = true; break; } case 's': { s << ' '; space = true; break; } case 'i': { if (globalIndent > 0) { for (int i = 0; i < globalIndent; i++) s << ' '; space = true; } break; } default: { if (interpreter.getPrintFlag(Interpreter::PRINT_COLOR)) break; switch (c) { #define MACRO(m, t) \ case m: { s << Tty(Tty::t); attributeUsed = true; break; } #include "ansiEscapeSequences.cc" #undef MACRO case 'o': { s << Tty(Tty::RESET); break; } } break; } } } return space; } int MixfixModule::chooseDisambiguator(Symbol* s) { // // Choose the index of a disambiguating sort for an ad-hoc overloaded symbol. // // Return smallest non-error sort index (largest sort) that the symbol can produce // or 1 if such an index does not exist. // const Vector& opDecls = s->getOpDeclarations(); int nrOpDecls = opDecls.length(); int nrArgs = s->arity(); int chosenIndex = UNBOUNDED; for (int i = 0; i < nrOpDecls; i++) { int index = opDecls[i].getDomainAndRange()[nrArgs]->index(); if (index > Sort::ERROR_SORT && index < chosenIndex) chosenIndex = index; } return (chosenIndex == UNBOUNDED) ? 1 : chosenIndex; } void MixfixModule::makeIterName(string& name, int id, const mpz_class& number) { name = Token::name(id); name += '^'; char* numberStr = mpz_get_str(0, 10, number.get_mpz_t()); name += numberStr; free(numberStr); } int MixfixModule::computeGraphStatus(DagNode* dagNode, PointerSet& visited, Vector& statusVec) { visited.insert(dagNode); int index = statusVec.length(); Assert(index == visited.pointer2Index(dagNode), "statusVec out of step"); statusVec.resize(index + 1); // // We have strangeness below if we are reduced and one of our arguments // (a) has strangeness below // (b) is unreduced // (c) is a non constructor // int status = 0; bool reduced = dagNode->isReduced(); if (reduced && dagNode->symbol()->isConstructor(dagNode)) status |= CONSTRUCTOR; for(DagArgumentIterator a(*dagNode); a.valid(); a.next()) { DagNode* d = a.argument(); int childIndex = visited.pointer2Index(d); int childStatus = (childIndex == NONE) ? computeGraphStatus(d, visited, statusVec) : statusVec[childIndex]; if (reduced && ((childStatus & STRANGENESS_BELOW) || !(d->isReduced()) || !(childStatus & CONSTRUCTOR))) status |= STRANGENESS_BELOW; } statusVec[index] = status; return status; } maude-3.1/src/Mixfix/unify.cc0000755000175200017520000000760713703742646013122 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Code for unify command. // void Interpreter::unify(const Vector& bubble, Int64 limit, bool irredundant) { VisibleModule* fm = currentModule->getFlatModule(); Vector lhs; Vector rhs; if (!(fm->parseUnifyCommand(bubble, lhs, rhs))) return; if (getFlag(SHOW_COMMAND)) { UserLevelRewritingContext::beginCommand(); cout << "unify "; if (limit != NONE) cout << '[' << limit << "] "; cout << "in " << currentModule << " : "; int nrPairs = lhs.size(); for (int i = 0; i < nrPairs; ++i) cout << lhs[i] << " =? " << rhs[i] << ((i == nrPairs - 1) ? " ." : " /\\ "); cout << endl; } startUsingModule(fm); #ifdef QUANTIFY_REWRITING quantify_start_recording_data(); #endif Timer timer(getFlag(SHOW_TIMING)); FreshVariableSource* freshVariableSource = new FreshVariableSource(fm); UnificationProblem* problem = irredundant ? new IrredundantUnificationProblem(lhs, rhs, freshVariableSource) : new UnificationProblem(lhs, rhs, freshVariableSource); if (problem->problemOK()) doUnification(timer, fm, problem, 0, limit); else { delete problem; fm->unprotect(); #ifdef QUANTIFY_REWRITING quantify_stop_recording_data(); #endif } } void Interpreter::doUnification(Timer& timer, VisibleModule* module, UnificationProblem* problem, int solutionCount, int limit) { int i = 0; for (; i != limit; i++) { bool result = problem->findNextUnifier(); // // If the user interrupted, we need to bail before outputing a unifier // (which won't display correctly anyway). // if (UserLevelRewritingContext::interrupted()) break; if (!result) { if (solutionCount == 0) { printDecisionTime(timer); cout << "No unifier.\n"; } if (problem->isIncomplete()) IssueWarning("Some unifiers may have been missed due to incomplete unification algorithm(s)."); break; } ++solutionCount; if (solutionCount == 1) printDecisionTime(timer); cout << "\nUnifier " << solutionCount << '\n'; UserLevelRewritingContext::printSubstitution(problem->getSolution(), problem->getVariableInfo()); } #ifdef QUANTIFY_REWRITING quantify_stop_recording_data(); #endif clearContinueInfo(); // just in case debugger left info if (i == limit) // possible to continue { savedState = problem; savedSolutionCount = solutionCount; savedModule = module; continueFunc = &Interpreter::unifyCont; } else // tidy up { delete problem; module->unprotect(); } UserLevelRewritingContext::clearDebug(); MemoryCell::okToCollectGarbage(); } void Interpreter::unifyCont(Int64 limit, bool /* debug */) { UnificationProblem* problem = safeCast(UnificationProblem*, savedState); VisibleModule* fm = savedModule; savedState = 0; savedModule = 0; continueFunc = 0; #ifdef QUANTIFY_REWRITING quantify_start_recording_data(); #endif Timer timer(getFlag(SHOW_TIMING)); doUnification(timer, fm, problem, savedSolutionCount, limit); } maude-3.1/src/Mixfix/importTranslation.cc0000755000175200017520000003140313576050735015507 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class ImportTranslation. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "freeTheory.hh" #include "strategyLanguage.hh" #include "mixfix.hh" // interface class definitions #include "term.hh" // core class definitions #include "argumentIterator.hh" #include "rewriteStrategy.hh" // variable class definitions #include "variableSymbol.hh" // built in class definitions #include "sortTestSymbol.hh" // front end class definitions #include "importModule.hh" #include "importTranslation.hh" #include "renaming.hh" // strategy class definitions #include "callStrategy.hh" ImportTranslation::ImportTranslation(ImportModule* target, Renaming* renaming) { push(renaming, target); } Sort* ImportTranslation::translate(const Sort* sort) { if (sort->index() == Sort::KIND) return translate(sort->component())->sort(Sort::KIND); int id = sort->id(); FOR_EACH_CONST(i, RenamingList, renamings) { if (Renaming* r = *i) id = r->renameSort(id); } Sort* s = targets.back()->findSort(id); Assert(s != 0, "no translation for sort " << sort << " in " << targets.back()); return s; } int ImportTranslation::translateLabel(int id) { if (id != NONE) { FOR_EACH_CONST(i, RenamingList, renamings) { if (Renaming* r = *i) id = r->renameLabel(id); } } return id; } Symbol* ImportTranslation::translate(Symbol* symbol) { Symbol* s = static_cast(directMap.getMap(symbol)); if (s != 0) return s; switch (safeCast(MixfixModule*, symbol->getModule())-> getSymbolType(symbol).getBasicType()) { case SymbolType::VARIABLE: { Sort* sort = translate(safeCast(VariableSymbol*, symbol)->getSort()); s = targets.back()->instantiateVariable(sort); break; } case SymbolType::SORT_TEST: { SortTestSymbol* t = safeCast(SortTestSymbol*, symbol); s = targets.back()->instantiateSortTest(translate(t->sort()), t->eager()); break; } default: { RenamingList::const_iterator dummyIterator; int dummyIndex; s = translateRegularSymbol(symbol, dummyIterator, dummyIndex); break; } } if (s != 0) directMap.setMap(symbol, s); return s; } RewriteStrategy* ImportTranslation::translate(RewriteStrategy* strat) { RewriteStrategy* s = static_cast(directMap.getMap(strat)); // If we have already translated it if (s) return s; RenamingList::const_iterator dummyIterator; int dummyIndex; s = translateStrategy(strat, dummyIterator, dummyIndex); // Saves the translated strategy for other runs if (s) directMap.setMap(strat, s); return s; } RewriteStrategy* ImportTranslation::translateStrategy(RewriteStrategy* strat, RenamingList::const_iterator& stratToExpr, int& stratToExprIndex) const { int nrArgs = strat->arity(); int label = strat->id(); const Vector& domain = strat->getDomain(); Vector sortNames(nrArgs); for (int i = 0; i < nrArgs; i++) sortNames[i] = domain[i]->id(); FOR_EACH_CONST(i, RenamingList, renamings) { Renaming* r = *i; if (r != 0) { // // Translate name. // int index = r->renameStrat(label, sortNames); if (index != NONE) { label = r->getStratTo(index); if (label == NONE) { stratToExpr = i; stratToExprIndex = index; return 0; // must be an strat->expr mapping } } // // Translate domain sorts. // for (int j = 0; j < nrArgs; ++j) sortNames[j] = r->renameSort(sortNames[j]); } } // Looks for the strategy in the module ImportModule* target = targets.back(); Vector domainComponents(nrArgs); for (int i = 0; i < nrArgs; i++) domainComponents[i] = target->findSort(sortNames[i])->component(); RewriteStrategy* s = target->findStrategy(label, domainComponents); Assert(s, "no translation for strategy " << strat << " in " << targets.back()); return s; } void ImportTranslation::splitTranslation(RenamingList::const_iterator firstMapping, ImportTranslation*& prefix, ImportTranslation*& suffix) { prefix = this; suffix = 0; ++firstMapping; const RenamingList::const_iterator end = renamings.end(); if (firstMapping != end) { // // The problem renaming wasn't the last one so we need a real // split into prefix and suffix import translations. // prefix = new ImportTranslation; RenamingList::const_iterator i = renamings.begin(); ModuleList::const_iterator j = targets.begin(); for (; i != firstMapping; ++i, ++j) { prefix->renamings.push_back(*i); prefix->targets.push_back(*j); } DebugAdvisory("prefix has size " << prefix->renamings.size()); suffix = new ImportTranslation; for (; i != end; ++i, ++j) { suffix->renamings.push_back(*i); suffix->targets.push_back(*j); } DebugAdvisory("suffix has size " << suffix->renamings.size()); } } StrategyExpression* ImportTranslation::translateExpr(const CallStrategy* cs) { DebugAdvisory("translateExpr() on " << cs << " we have size " << renamings.size()); RewriteStrategy* strat = cs->getStrategy(); RenamingList::const_iterator firstStratToExpr; int index; (void) translateStrategy(strat, firstStratToExpr, index); const Vector vars = (*firstStratToExpr)->getStratVarIndices(index); StrategyExpression* toExpr = (*firstStratToExpr)->getStratTargetExpr(index); ImportTranslation *prefix, *suffix; splitTranslation(firstStratToExpr, prefix, suffix); // // Collect the arguments under the top symbol, and use them to instantiate // toTerm via the prefix importTranslation. // Vector varBindings(strat->arity()); int j = 0; for (ArgumentIterator i(*(const_cast(cs->getTerm()))); i.valid(); i.next(), ++j) varBindings[j] = i.argument(); StrategyExpression* instantiated = ImportModule::instantiateExpression(toExpr, vars, varBindings, prefix); // // If there are more renamings to apply, apply them and tidy up. // if (suffix != 0) { StrategyExpression* s = ImportModule::deepCopyStrategyExpression(suffix, instantiated); delete instantiated; delete prefix; delete suffix; instantiated = s; } return instantiated; } Term* ImportTranslation::translateTerm(const Term* term) { DebugAdvisory("translateTerm() on " << term << " we have size " << renamings.size()); Symbol* symbol = term->symbol(); // // We are called because the translation for the top symbol of term // involves at least one op->term mapping. We locate that first by rerunning // the translateRegularSymbol() and using the information passed back by the // extra arguments. // RenamingList::const_iterator firstOpToTerm; // this will be the Renaming with the op->term mappng int index; // this will be the index of the op->term mapping withing the Renaming. (void) translateRegularSymbol(symbol, firstOpToTerm, index); Term* toTerm = (*firstOpToTerm)->getOpTargetTerm(index); // // Usually there will be more renamings after the first op->term mapping; // If this is so we need to split our import translation into prefix and // suffix parts. We can only do the prefix portion before we need to instantiate // the term part of the op->term mapping. Only then can we do the suffix portion. // ImportTranslation *prefix, *suffix; splitTranslation(firstOpToTerm, prefix, suffix); // // Collect the arguments under the top symbol. Note that these // will need to undergo translation by prefix. However we can't // do this here since we cannot have subterm sharing. Rather // translations will be done on demand in the variable instantiation // code. // Vector varBindings(symbol->arity()); int j = 0; for (ArgumentIterator i(*(const_cast(term))); i.valid(); i.next(), ++j) varBindings[j] = i.argument(); // // Now we can instantiate the toTerm on copies of these // made for each variable occurance using using prefix translator. // // Note that the toTerm lives in the target module TM of a view V // whereas the module M{...V...} we are translating into is an instantiation // of some other module M, that imports TM via V. So translating sorts and // operators to the final module in prefix during the instantiation of // toTerm is mandatory. // Term* translatedTerm = toTerm->instantiate(varBindings, prefix); // // If there are more renamings to apply, apply them and tidy up. // if (suffix != 0) { Term* t = translatedTerm->deepCopy(suffix); translatedTerm->deepSelfDestruct(); translatedTerm = t; delete prefix; delete suffix; } return translatedTerm; } Symbol* ImportTranslation::translateRegularSymbol(Symbol* symbol, RenamingList::const_iterator& opToTerm, int& opToTermIndex) const { //cerr << "translating " << symbol << endl; int nrArgs = symbol->arity(); int id = symbol->id(); Vector sortNames(nrArgs + 1); for (int i = 0; i < nrArgs; ++i) sortNames[i] = symbol->domainComponent(i)->sort(1)->id(); sortNames[nrArgs] = symbol->rangeComponent()->sort(1)->id(); //cerr << "pushing through " << renamings.size() << " renamings " << // " from " << symbol->getModule() << " to " << targets.back() << endl; FOR_EACH_CONST(i, RenamingList, renamings) { Renaming* r = *i; if (r != 0) { //cerr << "applying renaming " << r << endl; // // Translate name. // int index = r->renameOp(id, sortNames); if (index != NONE) { id = r->getOpTo(index); if (id == NONE) { opToTerm = i; opToTermIndex = index; return 0; // must be an op->term mapping cerr << "return ing an op->term mapping" << endl; } } //cerr << "new id = " << Token::name(id) << endl; // // Translate domain and range sorts. // for (int j = 0; j <= nrArgs; ++j) sortNames[j] = r->renameSort(sortNames[j]); } } // // Look up symbol in target module. // ImportModule* target = targets.back(); Vector domainComponents(nrArgs); for (int i = 0; i < nrArgs; ++i) domainComponents[i] = target->findSort(sortNames[i])->component(); Symbol* s = target->findSymbol(id, domainComponents, target->findSort(sortNames[nrArgs])->component()); // // Because we use a return value of 0 to indicate an op->term mapping we never // want to return 0 due to an internal error - even in the optimized build. // AlwaysAssert(s != 0, "no translation for " << symbol << " in " << target << " was looking for " << Token::name(id)); return s; } Symbol* ImportTranslation::findTargetVersionOfSymbol(Symbol* symbol) { ImportModule *target = targets.back(); switch (safeCast(MixfixModule*, symbol->getModule())-> getSymbolType(symbol).getBasicType()) { case SymbolType::VARIABLE: { Sort* sort = target->findSort(safeCast(VariableSymbol*, symbol)->getSort()->id()); return target->instantiateVariable(sort); } case SymbolType::SORT_TEST: { SortTestSymbol* t = safeCast(SortTestSymbol*, symbol); return target->instantiateSortTest(target->findSort(t->sort()->id()), t->eager()); } } int nrArgs = symbol->arity(); Vector domainComponents(nrArgs); for (int i = 0; i < nrArgs; ++i) domainComponents[i] = target->findSort(symbol->domainComponent(i)->sort(1)->id())->component(); ConnectedComponent* rangeComponent = target->findSort(symbol->rangeComponent()->sort(1)->id())->component(); return target->findSymbol(symbol->id(), domainComponents, rangeComponent); } ConnectedComponent* ImportTranslation::translate(Renaming* renaming, ImportModule* target, const ConnectedComponent* old) { Sort* sort = old->sort(Sort::FIRST_USER_SORT); int id = sort->id(); if (renaming != 0) id = renaming->renameSort(id); Sort* s = target->findSort(id); Assert(s != 0, "no translation for sort " << sort << " in " << target); return s->component(); } maude-3.1/src/Mixfix/enclosingObject.cc0000644000175200017520000001324613576050735015070 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2019 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class EnclosingObject. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" //#include "strategyLanguage.hh" #include "mixfix.hh" // interface class definitions //#include "term.hh" //#include "binarySymbol.hh" // core class definitions //#include "equation.hh" //#include "rule.hh" //#include "sortConstraint.hh" //#include "conditionFragment.hh" #include "namedEntity.hh" // higher class definitions //#include "equalityConditionFragment.hh" //#include "sortTestConditionFragment.hh" //#include "assignmentConditionFragment.hh" //#include "rewriteConditionFragment.hh" // front end class definitions //#include "renaming.hh" //#include "view.hh" //#include "importModule.hh" //#include "moduleCache.hh" //#include "importTranslation.hh" //#include "quotedIdentifierSymbol.hh" #include "token.hh" #include "enclosingObject.hh" int EnclosingObject::instantiateSortName(int sortId, const ParameterMap& parameterMap, const ParameterSet& extraParameterSet) { // // We are passed the id of a sort whose name may contain parameters, a map // which gives the instantiation of each parameter and a set of parameters // that are instantiated by theory-views and thus don't disappear, but rather // are tacked on the end of the sort name as extra instantiation. // if (Token::auxProperty(sortId) == Token::AUX_STRUCTURED_SORT) { bool mapped = false; // // We have a sort that looks like: // header{p1,p2,...,pn} // where each pi could be a parameter, simple view or a structured // view which may contain parameters that also need instantiation. // int header; Vector parameters; Token::splitParameterList(sortId, header, parameters); // // We accumulate parameters that have been instantiated by theory-views. // Vector extraParameters; // // We now check each parameter to see if we can map it to something else. // int nrParameters = parameters.size(); for (int i = 0; i < nrParameters; ++i) { int original = parameters[i]; ParameterMap::const_iterator m = parameterMap.find(original); if (m != parameterMap.end()) { mapped = true; // // original is an instantiated parameter; replace it by its // instantiation and check to see if survives as an extra // parameter. // parameters[i] = m->second; } else { // // original wasn't instantiated. However it could be // a structured view that contains parameters so we // make a recursive call to check for this. // int instantiatedParameter = instantiateSortName(original, parameterMap, extraParameterSet); if (instantiatedParameter != original) { mapped = true; parameters[i] = instantiatedParameter; continue; // original can't be an extra parameter } } // // If the original parameter was instantiated by a theory-view // it survives as an extra parameter. // if (extraParameterSet.find(original) != extraParameterSet.end()) extraParameters.append(original); } if (mapped) sortId = Token::joinParameterList(header, parameters); if (!extraParameters.empty()) sortId = Token::joinParameterList(sortId, extraParameters); } return sortId; } void EnclosingObject::addConflict(int parameterName1, int parameterName2) { if (parameterName2 < parameterName1) swap(parameterName1, parameterName2); conflicts.insert(Conflict(parameterName1, parameterName2)); DebugNew("For " << getObjectType() << " " << Token::name(getObjectName()->id()) << " adding conflict between " << Token::name(parameterName1) << " and " << Token::name(parameterName2)); } void EnclosingObject::addInAllConflicts(const EnclosingObject* innerObject) { conflicts.insert(innerObject->conflicts.begin(), innerObject->conflicts.end()); DebugNew("For " << getObjectType() << " " << Token::name(getObjectName()->id()) << " adding in conflicts from " << innerObject->getObjectType() << " " << Token::name(innerObject->getObjectName()->id())); } void EnclosingObject::addConflictsWithBoundParameters(const EnclosingObject* innerObject, int bareParameterName) { FOR_EACH_CONST(i, ParameterSet, innerObject->boundParameters) addConflict(*i, bareParameterName); } bool EnclosingObject::hasConflict(int parameterName1, int parameterName2) const { if (parameterName2 < parameterName1) swap(parameterName1, parameterName2); return conflicts.find(Conflict(parameterName1, parameterName2)) != conflicts.end(); } int EnclosingObject::findFirstClash(const ParameterSet& chosen, int candidate) const { FOR_EACH_CONST(i, ParameterSet, chosen) { if (hasConflict(*i, candidate)) return *i; } return NONE; } maude-3.1/src/Mixfix/fixUp.cc0000644000175200017520000001770713576050735013061 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Code for fixing up special symbols. // int SyntacticPreModule::findHook(const Vector& hookList, HookType type, int name) { int nrHooks = hookList.length(); for (int i = 0; i < nrHooks; i++) { const Hook& h = hookList[i]; if (h.type == type && h.name == name) return i; } return NONE; } Symbol* SyntacticPreModule::findHookSymbol(const Vector& fullName) { Vector name; int len = fullName.size(); for (int pos = 0; pos < len; pos++) { if (fullName[pos].code() == colon) { int prefixName = Token::bubbleToPrefixNameCode(name); Vector domain; for (pos++; pos < len; pos++) { int code = fullName[pos].code(); if (code == partial) // ~> token { if (++pos < len) // range sort given { if (Sort* s = flatModule->findSort(fullName[pos].code())) // range sort found return flatModule->findSymbol(prefixName, domain, s->component()); } break; } else { Sort* s = flatModule->findSort(fullName[pos].code()); if (s == 0) break; domain.append(s->component()); } } break; } else name.append(fullName[pos]); } return 0; } bool SyntacticPreModule::defaultFixUp(OpDef& opDef, Symbol* symbol) { const Vector& hookList = opDef.special; int nrHooks = hookList.length(); for (int i = 0; i < nrHooks; i++) { const Hook& h = hookList[i]; const char* name = Token::name(h.name); switch (h.type) { case ID_HOOK: { int nrDetails = h.details.length(); Vector hd(nrDetails); for (int j = 0; j < nrDetails; j++) hd[j] = h.details[j].name(); if (!(symbol->attachData(opDef.domainAndRange, name, hd))) { DebugAdvisory("ID_HOOK " << name << " failed"); return false; } break; } case OP_HOOK: { Symbol* hs = findHookSymbol(h.details); if (hs == 0 || !(symbol->attachSymbol(name, hs))) { DebugAdvisory("OP_HOOK " << name << " failed"); return false; } break; } case TERM_HOOK: { Term* ht = flatModule->parseTerm(h.details); // potential component problem if (ht == 0 || !(symbol->attachTerm(name, ht))) { DebugAdvisory("TERM_HOOK " << name << " failed"); return false; } break; } } } return true; } bool SyntacticPreModule::defaultFixUp(OpDef& opDef, int index) { const Vector& hookList = opDef.special; int nrHooks = hookList.length(); for (int i = 0; i < nrHooks; i++) { const Hook& h = hookList[i]; switch (h.type) { case ID_HOOK: { int nrDetails = h.details.length(); Vector hd(nrDetails); for (int j = 0; j < nrDetails; j++) hd[j] = h.details[j].code(); flatModule->addIdHookToPolymorph(index, h.name, hd); break; } case OP_HOOK: { Symbol* hs = findHookSymbol(h.details); if (hs == 0) return false; flatModule->addOpHookToPolymorph(index, h.name, hs); break; } case TERM_HOOK: { Term* ht = flatModule->parseTerm(h.details); // potential component problem if (ht == 0) return false; flatModule->addTermHookToPolymorph(index, h.name, ht); break; } } } return true; } #define FIX_UP_FAILED {flatModule->markAsBad(); continue;} void SyntacticPreModule::fixUpSymbols() { int nrOpDecls = opDecls.length(); for (int i = 0; i < nrOpDecls; i++) { OpDecl& opDecl = opDecls[i]; OpDef& opDef = opDefs[opDecl.defIndex]; // // Handle identities. // if (opDef.identity.length() != 0) { if (opDef.symbolType.hasFlag(SymbolType::POLY)) { int nonPolyIndex = opDef.symbolType.hasFlag(SymbolType::LEFT_ID) ? 0 : 1; Sort* wanted = opDef.domainAndRange[nonPolyIndex]; if (wanted == 0) { static const char* lr[] = {"left", "right"}; IssueWarning(LineNumber(opDecl.prefixName.lineNumber()) << ": polymorphic operator " << QUOTE(opDecl.prefixName) << " cannot have a " << lr[nonPolyIndex] << " identity."); FIX_UP_FAILED; } Term* id = flatModule->parseTerm(opDef.identity, wanted->component()); if (id == 0) FIX_UP_FAILED; int index = opDecl.polymorphIndex; if (Term* oldId = flatModule->getPolymorphIdentity(index)) { WarningCheck(id->equal(oldId), *id << ": declaration of identity " << QUOTE(id) << " for polymorphic operator " << QUOTE(opDecl.prefixName) << " clashes with previously declared identity " << QUOTE(oldId) << " in " << *oldId << '.'); id->deepSelfDestruct(); } else flatModule->addIdentityToPolymorph(opDecl.polymorphIndex, id); } else { // // Might not be a binary symbol if it got converted to // a free symbol during error recovery. // if (BinarySymbol* s = dynamic_cast(opDecl.symbol)) { Sort* wanted = opDef.domainAndRange[opDef.symbolType.hasFlag(SymbolType::LEFT_ID) ? 0 : 1]; Term* id = flatModule->parseTerm(opDef.identity, wanted->component()); if (id == 0) FIX_UP_FAILED; if (Term* oldId = s->getIdentity()) { WarningCheck(id->equal(oldId), *id << ": declaration of identity " << QUOTE(id) << " for operator " << QUOTE(s) << " clashes with previously declared identity " << QUOTE(oldId) << " in " << *oldId << '.'); id->deepSelfDestruct(); } else s->setIdentity(id); } } } else { if (opDef.symbolType.hasFlag(SymbolType::LEFT_ID | SymbolType::RIGHT_ID)) { IssueWarning(LineNumber(opDecl.prefixName.lineNumber()) << ": missing identity for operator " << QUOTE(opDecl.prefixName) << '.'); FIX_UP_FAILED; } } // // Handle specials. // if (opDef.symbolType.hasAttachments()) { if (opDef.symbolType.hasFlag(SymbolType::POLY)) { if (!defaultFixUp(opDef, opDecl.polymorphIndex)) { IssueWarning(LineNumber(opDecl.prefixName.lineNumber()) << ": bad special for polymorphic operator " << QUOTE(opDecl.prefixName) << '.'); FIX_UP_FAILED; } } else { if (!defaultFixUp(opDef, opDecl.symbol)) { IssueWarning(LineNumber(opDecl.prefixName.lineNumber()) << ": bad special for operator " << QUOTE(opDecl.prefixName) << '.'); FIX_UP_FAILED; } } } else if (opDef.symbolType.getBasicType() == SymbolType::BUBBLE) { Symbol* quotedIdentifierSymbol = 0; Symbol* nilQidListSymbol = 0; Symbol* qidListSymbol = 0; int h = findHook(opDef.special, OP_HOOK, qidSymbolToken); if (h != NONE) quotedIdentifierSymbol = findHookSymbol(opDef.special[h].details); h = findHook(opDef.special, OP_HOOK, nilQidListSymbolToken); if (h != NONE) nilQidListSymbol = findHookSymbol(opDef.special[h].details); h = findHook(opDef.special, OP_HOOK, qidListSymbolToken); if (h != NONE) qidListSymbol = findHookSymbol(opDef.special[h].details); flatModule->fixUpBubbleSpec(opDecl.bubbleSpecIndex, quotedIdentifierSymbol, nilQidListSymbol, qidListSymbol); } } } maude-3.1/src/Mixfix/cvc4_Bindings.hh0000644000175200017520000000430013576050635014434 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2017 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for generating SMT variables, version for CVC4 support. // #ifndef _cvc4_Bindings_hh_ #define _cvc4_Bindings_hh_ #include #include "cvc4/expr/expr_manager.h" #include "cvc4/smt/smt_engine.h" using namespace CVC4; class VariableGenerator : public SMT_EngineWrapper { public: VariableGenerator(const SMT_Info& smtInfo); ~VariableGenerator(); // // Virtual functions for SMT solving. // Result assertDag(DagNode* dag); Result checkDag(DagNode* dag); void clearAssertions(); void push(); void pop(); VariableDagNode* makeFreshVariable(Term* baseVariable, const mpz_class& number); private: // // We identify Maude variables that correspond to SMT variables by a pair // where the first component in the variable's sort's index within its module // and the second component is the variables name. // typedef pair SortIndexVariableNamePair; // // When we generate SMT variables on-the-fly we keep track of them in a map. // typedef map VariableMap; Expr makeVariable(VariableDagNode* v); Expr makeBooleanExpr(DagNode* dag); Expr makeRationalConstant(const mpq_class& rational); Expr dagToCVC4(DagNode* dag); const SMT_Info& smtInfo; VariableMap variableMap; int pushCount; // // CVC4 objects. // ExprManager* exprManager; SmtEngine* smtEngine; }; #endif maude-3.1/src/Mixfix/quotedIdentifierTerm.hh0000644000175200017520000000331613576050635016122 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for terms containing quoted identifiers (references to real identifiers). // #ifndef _quotedIdentifierTerm_hh_ #define _quotedIdentifierTerm_hh_ #include "NA_Term.hh" class QuotedIdentifierTerm : public NA_Term { public: QuotedIdentifierTerm(QuotedIdentifierSymbol* symbol, int idIndex); Term* deepCopy2(SymbolMap* map) const; Term* normalize(bool full, bool& changed); int compareArguments(const Term* other) const; int compareArguments(const DagNode* other) const; void overwriteWithDagNode(DagNode* old) const; NA_DagNode* makeDagNode() const; // // Needed because we have hidden data. // Term* instantiate2(const Vector& varBindings, SymbolMap* translator); int getIdIndex() const; private: NO_COPYING(QuotedIdentifierTerm); const int idIndex; }; inline int QuotedIdentifierTerm::getIdIndex() const { return idIndex; } #endif maude-3.1/src/Mixfix/auxProperty.cc0000755000175200017520000001643113576050735014324 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2010 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Code for handling auxiliary properties of Tokens. // const char* Token::skipSortName(const char* tokenString, bool& parameterized) { // // A sort name may contain any characters except for // . : `[ `] `{ `} `, // An exception is made for `{ `} `, iff they occur as part of // a sort name constructed by: // ::= | `{ `} // ::= | `, // // A sort name can be terminated by \0, `, `] `} // If a legal sort name followed by a legal terminator is seen, the // addess of the first terminator charater is returned otherwise 0 is // returned. // In the first case, parameterized is true iff the sort name contained `{ // In the second case, parameterized is undefined. // parameterized = false; int depth = 0; bool seenName = false; for (const char* p = tokenString;; p++) { switch (*p) { case '\0': return (seenName && depth == 0) ? p : 0; case '.': case ':': return 0; case '`': { switch (*(p + 1)) { case ']': return (seenName && depth == 0) ? p : 0; case '{': { if (seenName) { parameterized = true; ++depth; seenName = false; ++p; } else return 0; break; } case ',': { if (seenName) { if (depth == 0) return p; else { seenName = false; ++p; } } else return 0; break; } case '}': { if (seenName && depth > 0) { --depth; ++p; } else return 0; break; } case '[': case '\0': return 0; default: { seenName = true; ++p; break; } } break; } default: { seenName = true; break; } } } } int Token::computeAuxProperty(const char* tokenString) { { // // Check for kind or sort. // const char* p = tokenString; if (*p++ == '`' && *p == '[') { for(;;) { bool dummy; p = skipSortName(p, dummy); if (p != 0 && *p++ == '`') { switch (*p++) { case ']': { if (*p == '\0') return AUX_KIND; break; } case ',': continue; } } break; } } else { bool parameterized; const char* p = skipSortName(tokenString, parameterized); if (p != 0 && *p == '\0') return parameterized ? AUX_STRUCTURED_SORT : AUX_SORT; } } { // // Check for constant or variable. // int len = strlen(tokenString); for (int i = len - 1; i > 0; i--) { char c = tokenString[i]; if (c == '.') { int t = computeAuxProperty(tokenString + i + 1); if (t == AUX_SORT || t == AUX_STRUCTURED_SORT || t == AUX_KIND) return AUX_CONSTANT; break; } else if (c == ':') { int t = computeAuxProperty(tokenString + i + 1); if (t == AUX_SORT || t == AUX_STRUCTURED_SORT || t == AUX_KIND) return AUX_VARIABLE; break; } } } return NONE; } Rope Token::sortName(int code) { const char* name = stringTable.name(code); if (auxProperty(code) != AUX_STRUCTURED_SORT) return Rope(name); Rope acc; for (;; ++name) { char c = *(name); switch (c) { case '\0': return acc; case '`': { c = *(++name); if (c != '{' && c != ',' && c != '}') acc += '`'; break; } } acc += c; } } void Token::splitParameterizedSort(int code, Vector& codes) { Assert(auxProperty(code) == AUX_STRUCTURED_SORT, "called on " << stringTable.name(code)); // // Breaks a structured sort such as: // Foo{TRIV,TRIV}{Bar{X,Baz},Z} // in to lexical pieces: // Foo { TRIV , TRIV } { Bar { X , Baz } , Z } // for grammar construction and meta-pretty-printing. // codes.clear(); const char* name = stringTable.name(code); char* t = new char[strlen(name) + 1]; char* p = strcpy(t, name); for (char* i = p;; ++i) { switch (*i) { case '\0': { Assert(p == i, "surplus characters " << p); delete [] t; return; } case '`': { const char* sep; switch (*(i + 1)) { case '{': { sep = "{"; break; } case ',': { sep = ","; break; } case '}': { sep = "}"; break; } default: continue; } if (i != p) { *i = 0; codes.append(encode(p)); } codes.append(encode(sep)); ++i; p = i + 1; } } } } void Token::splitParameterList(int code, int& header, Vector& parameters) { Assert(auxProperty(code) == AUX_STRUCTURED_SORT, "called on " << stringTable.name(code)); // // Breaks the structured sort such as: // Foo{TRIV,TRIV}{Bar{X,Baz},Z} // in to a header: // Foo{TRIV,TRIV} // and final parameter list: // Bar{X,Baz} Z // for the instantiation of parameterized sorts. // parameters.clear(); const char* n = name(code); int len = strlen(n); char* t = new char[len + 1]; char* p = strcpy(t, n); // // Search backwards for the '{' that marks the start of parameter list. // Assert(t[len - 1] == '}', "missing }"); Assert(t[len - 2] == '`', "missing `"); int depth = 1; for(p += len - 3;; --p) { Assert(p > t, "missing {"); // first character is never '{' if (*p == '{') { --depth; if (depth == 0) break; } else if (*p == '}') ++depth; } // // Now split out header and parameters. // Assert(*(p - 1) == '`', "missing `"); *(p - 1) = '\0'; header = encode(t); do { ++p; char* s = p; for (p += 2;; ++p) { if (*p == '{') ++depth; else if (*p == ',' && depth == 0) break; else if (*p == '}') { if (depth == 0) break; else --depth; } } Assert(*(p - 1) == '`', "missing `"); *(p - 1) = '\0'; parameters.append(encode(s)); } while (*p != '}'); delete [] t; } int Token::joinParameterList(int header, const Vector& parameters) { // // Joins a header such as: // Foo{TRIV,TRIV} // and a parameter list: // Bar{X,Baz} Z // to make a new parameterized sort // Foo{TRIV,TRIV}{Bar{X,Baz},Z} // for the instantiation of parameterized sorts. // Rope n(name(header)); const char* sep = "`{"; FOR_EACH_CONST(i, Vector, parameters) { n += sep; sep = "`,"; n += name(*i); } n += "`}"; // // If it's the first time we've seen this token, ropeToCode() will // check for special properties. // return ropeToCode(n); } maude-3.1/src/Mixfix/narrowing.cc0000644000175200017520000001266513576050735013772 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2017 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Code for narrowing commands. // void Interpreter::doNarrowing(Timer& timer, VisibleModule* module, NarrowingSequenceSearch* state, Int64 solutionCount, Int64 limit) { RewritingContext* context = state->getContext(); const VariableInfo* variableInfo = state->getGoal(); Int64 i = 0; for (; i != limit; i++) { bool result = state->findNextMatch(); if (UserLevelRewritingContext::aborted()) break; if (!result) { cout << ((solutionCount == 0) ? "\nNo solution.\n" : "\nNo more solutions.\n"); printStats(timer, *context, getFlag(SHOW_TIMING)); if (state->isIncomplete()) IssueWarning("Some solutions may have been missed due to incomplete unification algorithm(s)."); break; } ++solutionCount; cout << "\nSolution " << solutionCount << "\n"; printStats(timer, *context, getFlag(SHOW_TIMING)); DagNode* d = state->getStateDag(); cout << "state: " << d << endl; UserLevelRewritingContext::printSubstitution(*(state->getSubstitution()), *variableInfo); } QUANTIFY_STOP(); clearContinueInfo(); // just in case debugger left info if (i == limit) { // // The loop terminated because we hit user's limit so // continuation is still possible. We save the state, // solutionCount and module, and set a continutation function. // state->getContext()->clearCount(); savedState = state; savedSolutionCount = solutionCount; savedModule = module; continueFunc = &Interpreter::narrowingCont; } else { // // Either user aborted or we ran out of solutions; either // way we need to tidy up. // delete state; module->unprotect(); } UserLevelRewritingContext::clearDebug(); } void Interpreter::narrowingCont(Int64 limit, bool debug) { NarrowingSequenceSearch* state = safeCast(NarrowingSequenceSearch*, savedState); VisibleModule* fm = savedModule; savedState = 0; savedModule = 0; continueFunc = 0; if (debug) UserLevelRewritingContext::setDebug(); QUANTIFY_START(); Timer timer(getFlag(SHOW_TIMING)); doNarrowing(timer, fm, state, savedSolutionCount, limit); } void Interpreter::vuNarrowingCont(Int64 limit, bool debug) { NarrowingSequenceSearch3* state = safeCast(NarrowingSequenceSearch3*, savedState); VisibleModule* fm = savedModule; savedState = 0; savedModule = 0; continueFunc = 0; if (debug) UserLevelRewritingContext::setDebug(); QUANTIFY_START(); Timer timer(getFlag(SHOW_TIMING)); doVuNarrowing(timer, fm, state, savedSolutionCount, limit); } void Interpreter::doVuNarrowing(Timer& timer, VisibleModule* module, NarrowingSequenceSearch3* state, Int64 solutionCount, Int64 limit) { RewritingContext* context = state->getContext(); Int64 i = 0; for (; i != limit; i++) { bool result = state->findNextUnifier(); if (UserLevelRewritingContext::aborted()) break; if (!result) { cout << ((solutionCount == 0) ? "\nNo solution.\n" : "\nNo more solutions.\n"); printStats(timer, *context, getFlag(SHOW_TIMING)); if (state->isIncomplete()) IssueWarning("Some solutions may have been missed due to incomplete unification algorithm(s)."); break; } ++solutionCount; cout << "\nSolution " << solutionCount << "\n"; printStats(timer, *context, getFlag(SHOW_TIMING)); DagNode* stateDag; int variableFamily; Substitution* accumulatedSubstitution; state->getStateInfo(stateDag, variableFamily, accumulatedSubstitution); cout << "state: " << stateDag << endl; cout << "accumulated substitution:" << endl; UserLevelRewritingContext::printSubstitution(*accumulatedSubstitution, state->getInitialVariableInfo()); cout << "variant unifier:" << endl; UserLevelRewritingContext::printSubstitution(*(state->getUnifier()), state->getUnifierVariableInfo()); } QUANTIFY_STOP(); clearContinueInfo(); // just in case debugger left info if (i == limit) // possible to continue { // // The loop terminated because we hit user's limit so // continuation is still possible. We save the state, // solutionCount and module, and set a continutation function. // context->clearCount(); savedState = state; savedSolutionCount = solutionCount; savedModule = module; continueFunc = &Interpreter::vuNarrowingCont; } else { // // Either user aborted or we ran out of solutions; either // way we need to tidy up. // delete state; module->unprotect(); } UserLevelRewritingContext::clearDebug(); } maude-3.1/src/Mixfix/viewDatabase.cc0000644000175200017520000000441413620700653014343 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class ViewDatabase. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "strategyLanguage.hh" #include "mixfix.hh" // front end class definitions #include "view.hh" #include "viewDatabase.hh" ViewDatabase::~ViewDatabase() { // // Cleaning up makes for a slow exit, but is essential now that // interpreters can be created and destroyed on-the-fly. // const ViewMap::const_iterator e = viewMap.end(); for (ViewMap::const_iterator i = viewMap.begin(); i != e; ++i) delete i->second; } bool ViewDatabase::insertView(int name, View* view) { pair p = viewMap.insert(ViewMap::value_type(name, view)); if (p.second) return false; IssueAdvisory("redefining view " << QUOTE(static_cast(view)) << '.'); delete p.first->second; p.first->second = view; return true; } View* ViewDatabase::getView(int name) const { const ViewMap::const_iterator t = viewMap.find(name); return (t == viewMap.end()) ? 0 : t->second; } bool ViewDatabase::deleteView(int name) { const ViewMap::iterator t = viewMap.find(name); if (t == viewMap.end()) return false; delete t->second; viewMap.erase(t); return true; } void ViewDatabase::showNamedViews(ostream& s) const { FOR_EACH_CONST(i, ViewMap, viewMap) s << "view " << static_cast(i->second) << '\n'; } maude-3.1/src/Mixfix/smtSearch.cc0000644000175200017520000000570313576050735013710 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2017 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Code for smt-search commands. // void Interpreter::doSmtSearch(Timer& timer, VisibleModule* module, SMT_RewriteSequenceSearch* state, Int64 solutionCount, Int64 limit) { Int64 i = 0; for (; i != limit; i++) { bool result = state->findNextMatch(); if (UserLevelRewritingContext::aborted()) break; if (!result) { cout << ((solutionCount == 0) ? "\nNo solution.\n" : "\nNo more solutions.\n"); printStats(timer, *(state->getContext()), getFlag(SHOW_TIMING)); break; } ++solutionCount; cout << "\nSolution " << solutionCount << endl; printStats(timer, *(state->getContext()), getFlag(SHOW_TIMING)); int stateNr = state->getCurrentStateNumber(); DagNode* d = state->getState(stateNr); cout << "state: " << d << endl; UserLevelRewritingContext::printSubstitution(*(state->getSubstitution()), *state, state->getSMT_VarIndices()); cout << "where " << state->getFinalConstraint() << endl; } QUANTIFY_STOP(); clearContinueInfo(); // just in case debugger left info if (i == limit) { // // The loop terminated because we hit user's limit so // continuation is still possible. We save the state, // solutionCount and module, and set a continutation function. // state->getContext()->clearCount(); savedState = state; savedSolutionCount = solutionCount; savedModule = module; continueFunc = &Interpreter::smtSearchCont; } else { // // Either user aborted or we ran out of solutions; either // way we need to tidy up. // delete state; module->unprotect(); } UserLevelRewritingContext::clearDebug(); } void Interpreter::smtSearchCont(Int64 limit, bool debug) { SMT_RewriteSequenceSearch* state = safeCast(SMT_RewriteSequenceSearch*, savedState); VisibleModule* fm = savedModule; savedState = 0; savedModule = 0; continueFunc = 0; if (debug) UserLevelRewritingContext::setDebug(); QUANTIFY_START(); Timer timer(getFlag(SHOW_TIMING)); doSmtSearch(timer, fm, state, savedSolutionCount, limit); } maude-3.1/src/Mixfix/viewExpression.hh0000644000175200017520000000505513576050635015022 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2019 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for view expressions. // // Parameters from an enclosing module or view are also stored // using this class since they have the same syntactic appearance // as unparameterized named views, and can only be distinguished from // them by context. // #ifndef _viewExpression_hh_ #define _viewExpression_hh_ #include "token.hh" class ViewExpression { public: // // A view expression is the name of a view or parameter: // ViewExpression(Token name); // // OR a view expression with an instantiation which is // a vector of view expressions: // ViewExpression(ViewExpression* view, const Vector& arguments); bool isInstantiation() const; // // For the non-instantiation case only. // Token getName() const; // // For the instantiation case only. // ViewExpression* getView() const; const Vector& getArguments() const; void deepSelfDestruct(); private: // // For the non-instantiation case only. // Token name; // // For the instantiation case only. // ViewExpression* view; Vector arguments; }; ostream& operator<<(ostream& s, const ViewExpression* expr); inline bool ViewExpression::isInstantiation() const { return !(arguments.isNull()); } inline Token ViewExpression::getName() const { Assert(!isInstantiation(), "instantiation, not named view/parameter " << this); return name; } inline ViewExpression* ViewExpression::getView() const { Assert(isInstantiation(), "named view/parameter not instantiation " << this); return view; } inline const Vector& ViewExpression::getArguments() const { Assert(isInstantiation(), "named view/parameter not instantiation " << this); return arguments; } #endif maude-3.1/src/Mixfix/metadataStore.cc0000644000175200017520000000530613576050735014553 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class MetadataStore. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" //#include "variable.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" // core class definitions #include "preEquation.hh" // front end class definitions #include "metadataStore.hh" void MetadataStore::insertMetadata(ItemType itemType, const ModuleItem* item, int metadata) { if (metadata != NONE) metadataMap[itemType | item->getIndexWithinModule()] = metadata; } int MetadataStore::getMetadata(ItemType itemType, const ModuleItem* item) const { MetadataMap::const_iterator i = metadataMap.find(itemType | item->getIndexWithinModule()); if (i == metadataMap.end()) return NONE; return (*i).second; } void MetadataStore::insertMetadata(ModuleItem* symbol, int opDeclIndex, int metadata) { if (metadata != NONE) metadataMap[(static_cast(opDeclIndex) << 32) | symbol->getIndexWithinModule()] = metadata; } int MetadataStore::getMetadata(ModuleItem* symbol, int opDeclIndex) const { MetadataMap::const_iterator i = metadataMap.find((static_cast(opDeclIndex) << 32) | symbol->getIndexWithinModule()); if (i == metadataMap.end()) return NONE; return (*i).second; } void MetadataStore::insertPrintAttribute(ItemType itemType, const PreEquation* statement, const Vector& names, const Vector& sorts) { printAttributeMap[itemType | statement->getIndexWithinModule()].fillOut(*statement, names, sorts); } const PrintAttribute* MetadataStore::getPrintAttribute(ItemType itemType, const ModuleItem* item) const { PrintAttributeMap::const_iterator i = printAttributeMap.find(itemType | item->getIndexWithinModule()); if (i == printAttributeMap.end()) return 0; return &(*i).second; } maude-3.1/src/Mixfix/moduleCache.cc0000755000175200017520000002273513620700252014161 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class MetaModuleCache. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "strategyLanguage.hh" #include "mixfix.hh" // front end class definitions #include "renaming.hh" #include "view.hh" #include "moduleCache.hh" #include "fileTable.hh" #include "parameter.hh" ModuleCache::ModuleCache() { } ModuleCache::~ModuleCache() { // // We expect that all cached modules will have been destructed when the // modules they depend on are destructed - ahead of the deletion of the // ModuleCache object. We check this in debug mode. // Assert(moduleMap.empty(), "moduleMap not empty"); } void ModuleCache::regretToInform(Entity* doomedEntity) { ImportModule* doomedModule = static_cast(doomedEntity); ModuleMap::iterator pos = moduleMap.find(doomedModule->id()); Assert(pos != moduleMap.end(), "could find self-destructing module " << doomedModule); DebugAdvisory("removing module " << doomedModule << " from cache"); moduleMap.erase(pos); } ImportModule* ModuleCache::makeRenamedCopy(ImportModule* module, Renaming* renaming) { // // Step 1 // Build a canonical renaming based on modules signature. // If empty, just return ourselves. // Renaming* canonical = renaming->makeCanonicalVersion(module); if (canonical == 0) return module; // // Build the canonical name of the module we want. // Rope name; if (module->getOrigin() == ImportModule::SUMMATION) name = '('; name += Token::name(module->id()); if (module->getOrigin() == ImportModule::SUMMATION) name += ')'; name += " * ("; name += canonical->makeCanonicalName() + ")"; int t = Token::ropeToCode(name); // // Check if we already have a renamed copy in cache. // If so, just return it. // ModuleMap::const_iterator c = moduleMap.find(t); if (c != moduleMap.end()) { DebugAdvisory("using existing copy of " << name); delete canonical; return c->second; } // // Create new module; and insert it in cache. // DebugAdvisory("making renamed copy " << name); ImportModule* copy = module->makeRenamedCopy(t, canonical, this); DebugAdvisory("finish renamed copy " << name); if (copy->isBad()) { // // Renaming a good module can produce a bad module. // // We never want to cache bad modules. // IssueAdvisory(*copy << ": unable to make renamed module " << QUOTE(name) << " due to earlier errors."); copy->removeUser(this); // since we are not adding a bad module to the cache copy->deepSelfDestruct(); return 0; } moduleMap[t] = copy; return copy; } ImportModule* ModuleCache::makeParameterCopy(int parameterName, ImportModule* module) { // // Make the name of the module we want. // Rope name(Token::name(parameterName)); name += " :: "; name += Token::name(module->id()); int t = Token::ropeToCode(name); // // Check if we already have a parameter copy in cache. // If so, just return it. // ModuleMap::const_iterator c = moduleMap.find(t); if (c != moduleMap.end()) { DebugAdvisory("using existing copy of " << name); return c->second; } // // Create new module; and insert it in cache. // DebugAdvisory("making parameter copy " << name); ImportModule* copy = module->makeParameterCopy(t, parameterName, this); DebugAdvisory("finished parameter copy " << name); if (copy->isBad()) { // // It is possible for a parameter copy of a good theory // to be bad, for example if a parameter copy of a sort // clashed with a weirdly named sort imported from a module // by the base theory. // copy->removeUser(this); // since we are not adding a bad parameter copy to the cache copy->deepSelfDestruct(); return 0; } moduleMap[t] = copy; return copy; } ImportModule* ModuleCache::makeModuleInstantiation(ImportModule* module, const Vector& arguments) { // // Make the name of the module we want. // Rope name; if (module->getOrigin() == ImportModule::RENAMING) name = '('; name += Token::name(module->id()); if (module->getOrigin() == ImportModule::RENAMING) name += ')'; const char* sep = "{"; int nrParameters = arguments.size(); for (int i = 0; i < nrParameters; ++i) { name += sep; sep = ", "; Argument* a = arguments[i]; if (dynamic_cast(a)) { // // Place brackets around parameter arguments so that we don't confuse // them with views having the same name. // name += '['; name += Token::name(a->id()); name += ']'; } else name += Token::name(a->id()); } name += "}"; int t = Token::ropeToCode(name); // // Check if we already have an instantiation in cache. // If so, just return it. // ModuleMap::const_iterator c = moduleMap.find(t); if (c != moduleMap.end()) { DebugAdvisory("using existing copy of module " << name); return c->second; } // // Create new module; and insert it in cache. // DebugInfo("making instantiation " << name); ImportModule* copy = module->makeInstantiation(t, arguments, this); DebugInfo("finished instantiation " << name); if (copy->isBad()) { // // It is possible for the instantiation of a non-bad module to be bad; // for example, by an attribute clash between an operator from the module // and one from the to-module in the instantiation; or perhaps the // instantiation of an import went bad. // // We never want to cache bad modules. // IssueAdvisory(*copy << ": unable to make module instantiation " << QUOTE(name) << " due to earlier errors."); copy->removeUser(this); // since we are not adding a bad module to the cache copy->deepSelfDestruct(); return 0; } moduleMap[t] = copy; return copy; } bool ModuleCache::moduleCompare(const ImportModule* m1, const ImportModule* m2) { return m1->id() < m2->id(); } ImportModule* ModuleCache::makeSummation(const Vector& modules) { // // Sort and delete duplicates. // Vector local(modules); sort(local.begin(), local.end(), moduleCompare); const Vector::const_iterator e = unique(local.begin(), local.end()); if (e - local.begin() == 1) return local[0]; // // Make name. // Rope name; for (Vector::const_iterator i = local.begin(); i != e; ++i) { if (!name.empty()) name += " + "; name += Token::name((*i)->id()); } int t = Token::ropeToCode(name); // // Check if it is already in cache. // ModuleMap::const_iterator c = moduleMap.find(t); if (c != moduleMap.end()) { DebugAdvisory("using existing copy of " << name); return c->second; } // // Otherwise build it. // DebugAdvisory("making summation " << name); ImportModule* sum = ImportModule::makeSummation(t, local, this); DebugAdvisory("finished summation " << name); if (sum->isBad()) { // // Summing good modules can produce a bad module. // // We never want to cache bad modules. // IssueAdvisory(*sum << ": unable to make module summation " << QUOTE(name) << " due to earlier errors."); sum->removeUser(this); // since we are not adding a bad module to the cache sum->deepSelfDestruct(); return 0; } moduleMap[t] = sum; return sum; } void ModuleCache::destructUnusedModules() { // // This O(n^2) solution to finding unused cached modules is slow but // simple. If the number of cached modules grows beyond a few hundred // a more complex O(n) solution based on keeping a linked list of // candidates would be appropriate. We would need a call back from // ImportModule to tell us when a module is down to 1 user (us!). // restart: { FOR_EACH_CONST(i, ModuleMap, moduleMap) { int nrUsers = i->second->getNrUsers(); Assert(nrUsers >= 1, "no users"); // we are a user if (nrUsers == 1) { DebugAdvisory("module " << i->second << " has no other users"); i->second->deepSelfDestruct(); // invalidates i goto restart; } } } } void ModuleCache::showCreatedModules(ostream& s) const { FOR_EACH_CONST(i, ModuleMap, moduleMap) { ImportModule* m = i->second; s << MixfixModule::moduleTypeString(m->getModuleType()) << ' ' << m << '\n'; #if 0 if (globalAdvisoryFlag) //HACK { cout << Tty(Tty::RED); m->dumpImports(s); cout << Tty(Tty::GREEN); const Vector& sorts = m->getSorts(); FOR_EACH_CONST(j, Vector, sorts) s << " " << *j; cout << Tty(Tty::RESET); s << endl; } #endif } } maude-3.1/src/Mixfix/importTranslation.hh0000644000175200017520000000670413576050635015523 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class to translate symbols from imported module to importing module. // #ifndef _importTranslation_hh_ #define _importTranslation_hh_ #include #include "strategyLanguage.hh" #include "symbolMap.hh" #include "pointerMap.hh" class ImportTranslation : public SymbolMap { NO_COPYING(ImportTranslation); public: ImportTranslation(ImportModule* target, Renaming* renaming = 0); void push(Renaming* renaming, ImportModule* target); // // These three functions are required by our base class. // Symbol* translate(Symbol* symbol); // returns 0 to indicate op->term mapping in play Term* translateTerm(const Term* term); // handles op->term mappings on a whole term basis Symbol* findTargetVersionOfSymbol(Symbol* symbol); // // Other public functions that we provide. // Sort* translate(const Sort* sort); ConnectedComponent* translate(const ConnectedComponent* component); int translateLabel(int id); RewriteStrategy* translate(RewriteStrategy* strat); StrategyExpression* translateExpr(const CallStrategy* cs); private: ImportTranslation(); // // Typically we have a list of renamings that move stuff from module to module // until we arrive at the final target module. // typedef list RenamingList; typedef list ModuleList; static ConnectedComponent* translate(Renaming* renaming, ImportModule* target, const ConnectedComponent* old); Symbol* translateRegularSymbol(Symbol* symbol, RenamingList::const_iterator& opToTerm, int& opToTermIndex) const; RewriteStrategy* translateStrategy(RewriteStrategy* strat, RenamingList::const_iterator& stratToExpr, int& stratToExprIndex) const; void splitTranslation(RenamingList::const_iterator firstMapping, ImportTranslation*& prefix, ImportTranslation*& suffix); RenamingList renamings; // // Usually we only need the last target module because that's the one // we're translating into. But in the case of an op->term mapping // we may need to split the ImportTranslation and to do this we // need an intermediate target. // ModuleList targets; // // Because translating symbols is the most frequent operation and also // fairly expensive, we cache translations here. // PointerMap directMap; }; inline ImportTranslation::ImportTranslation() { } inline ConnectedComponent* ImportTranslation::translate(const ConnectedComponent* component) { return translate(component->sort(1))->component(); } inline void ImportTranslation::push(Renaming* renaming, ImportModule* target) { renamings.push_front(renaming); targets.push_front(target); } #endif maude-3.1/src/Mixfix/ops.cc0000644000175200017520000003007013576050735012553 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ #define LINE_NUMBER LineNumber(opDef.types[0].tokens[0].lineNumber()) void SyntacticPreModule::addVarDecl(Token varName) { if (!lastSawOpDecl) { int nrOpDefs = opDefs.length(); opDefs.expandBy(1); opDefs[nrOpDefs].symbolType.setBasicType(SymbolType::VARIABLE); isStrategy = false; } int nrOpDecls = opDecls.length(); opDecls.expandBy(1); opDecls[nrOpDecls].prefixName = varName; opDecls[nrOpDecls].defIndex = opDefs.length() - 1; lastSawOpDecl = true; } void SyntacticPreModule::addOpDecl(const Vector& opName) { if (!lastSawOpDecl) { opDefs.expandBy(1); isStrategy = false; } int nrOpDecls = opDecls.length(); opDecls.expandBy(1); opDecls[nrOpDecls].prefixName.makePrefixName(opName); opDecls[nrOpDecls].defIndex = opDefs.length() - 1; lastSawOpDecl = true; } void SyntacticPreModule::addStratDecl(Token stratName) { if (!lastSawOpDecl) { if (!MixfixModule::isStrategic(getModuleType())) // Now a message is shown and they will be ignored later IssueWarning(LineNumber(stratName.lineNumber()) << ": strategy declaration only allowed in a strategy module or theory."); stratDecls.expandBy(1); isStrategy = true; } StratDecl& decl = stratDecls[stratDecls.length() - 1]; decl.names.append(stratName); lastSawOpDecl = true; } void SyntacticPreModule::addType(bool kind, const Vector& tokens) { // Used to avoid repeating the common code Vector& types = isStrategy ? stratDecls[stratDecls.length() - 1].types : opDefs[opDefs.length() - 1].types; types.expandBy(1); Type& type = types[types.length() - 1]; type.kind = kind; type.tokens = tokens; // deep copy lastSawOpDecl = false; } void SyntacticPreModule::convertSortsToKinds() { Assert(!lastSawOpDecl, "missing sort specs"); OpDef& opDef = opDefs[opDefs.length() - 1]; int nrTypes = opDef.types.length(); for (int i = 0; i < nrTypes; i++) { if (opDef.types[i].kind) { IssueWarning(LineNumber(opDef.types[i].tokens[0].lineNumber()) << ": superfluous [] notation in operation declaration"); } else opDef.types[i].kind = true; } } void SyntacticPreModule::setIdentity(const Vector& identity) { OpDef& opDef = opDefs[opDefs.length() - 1]; if (opDef.identity.empty()) opDef.identity = identity; // deep copy else IssueWarning(LINE_NUMBER << ": multiple identity declarations."); } void SyntacticPreModule::setFlag(int flag) { OpDef& opDef = opDefs[opDefs.length() - 1]; if (opDef.symbolType.hasFlag(flag)) { if (flag & SymbolType::SIMPLE_ATTRIBUTES) IssueWarning(LINE_NUMBER << ": duplicate attributes."); } else opDef.symbolType.setFlags(flag); } void SyntacticPreModule::setPrec(Token precTok) { int prec; if (precTok.getInt(prec) && prec >= MixfixModule::MIN_PREC && prec <= MixfixModule::MAX_PREC) { OpDef& opDef = opDefs[opDefs.length() - 1]; if (opDef.symbolType.hasFlag(SymbolType::PREC)) IssueWarning(LINE_NUMBER << ": multiple precedence attributes."); else { opDef.prec = prec; opDef.symbolType.setFlags(SymbolType::PREC); } } else { IssueWarning(LineNumber(precTok.lineNumber()) << ": bad value " << QUOTE(precTok) << " for prec attribute."); } } void SyntacticPreModule::setGather(const Vector& gather) { OpDef& opDef = opDefs[opDefs.length() - 1]; if (opDef.symbolType.hasFlag(SymbolType::GATHER)) { IssueWarning(LINE_NUMBER << ": multiple gather attributes."); return; } int length = gather.length(); if (length != opDef.types.length() - 1) { IssueWarning(LINE_NUMBER << ": bad gather length."); return; } for (int i = 0; i < length; i++) { const char* string = gather[i].name(); if (string[0] != '\0' && string[1] == '\0') { switch(string[0]) { case '&': opDef.gather.append(MixfixModule::GATHER_AMP); continue; case 'E': opDef.gather.append(MixfixModule::GATHER_E); continue; case 'e': opDef.gather.append(MixfixModule::GATHER_e); continue; } } IssueWarning(LineNumber(gather[i].lineNumber()) << ": bad value " << QUOTE(string) << " in gather attribute. Recovering by ignoring gather attribute."); opDef.gather.clear(); // for safety return; } opDef.symbolType.setFlags(SymbolType::GATHER); } void SyntacticPreModule::setMetadata(Token metaDataTok) { int& metadata = isStrategy ? stratDecls[stratDecls.length() - 1].metadata : opDefs[opDefs.length() - 1].metadata; if (metaDataTok.specialProperty() == Token::STRING) { if (metadata == NONE) metadata = metaDataTok.code(); else { const Type& anchor = isStrategy ? stratDecls[stratDecls.length() - 1].types[0] : opDefs[opDefs.length() - 1].types[0]; IssueWarning(anchor.tokens[0].lineNumber() << ": multiple metadata attributes."); } //opDef.symbolType.setFlags(SymbolType::METADATA); } else { IssueWarning(LineNumber(metaDataTok.lineNumber()) << ": bad value " << QUOTE(metaDataTok) << " for metadata attribute."); } } bool SyntacticPreModule::checkFormatString(const char* string) { if (string[0] == 'd' && string[1] == '\0') return true; for(;;) { switch (*string++) { case '\0': return true; case '+': case '-': case 's': case 't': case 'n': case 'i': #define MACRO(m, t) case m: #include "ansiEscapeSequences.cc" #undef MACRO case 'o': continue; default: return false; } } } void SyntacticPreModule::setFormat(const Vector& format) { OpDef& opDef = opDefs[opDefs.length() - 1]; if (opDef.symbolType.hasFlag(SymbolType::FORMAT)) { IssueWarning(LINE_NUMBER << ": multiple format attributes."); return; } int length = format.length(); for (int i = 0; i < length; i++) { const char* str = format[i].name(); if (checkFormatString(str)) opDef.format.append(format[i].code()); else { IssueWarning(LineNumber(format[i].lineNumber()) << ": bad value " << QUOTE(str) << " in format attribute. Recovering by ignoring format attribute."); opDef.format.clear(); // for safety return; } } opDef.symbolType.setFlags(SymbolType::FORMAT); } void SyntacticPreModule::setFrozen(const Vector& frozen) { OpDef& opDef = opDefs[opDefs.length() - 1]; if (opDef.symbolType.hasFlag(SymbolType::FROZEN)) { IssueWarning(LINE_NUMBER << ": multiple frozen attributes."); return; } int maxArgPos = opDef.types.length() - 1; int length = frozen.length(); if (length == 0) { if (maxArgPos == 0) { IssueWarning("cannot have frozen attribute for constant."); return; } for (int i = 0; i < maxArgPos; i++) opDef.frozen.insert(i); } else { for (int i = 0; i < length; i++) { const char* str = frozen[i].name(); char* pointer; long argPos = strtol(str, &pointer, 10); if (pointer != str && *pointer == '\0' && argPos >= 1 && argPos <= maxArgPos) { WarningCheck(!(opDef.frozen.contains(argPos - 1)), LineNumber(frozen[i].lineNumber()) << ": argument " << QUOTE(argPos) << " mentioned twice in frozen attribute."); opDef.frozen.insert(argPos - 1); } else { IssueWarning(LineNumber(frozen[i].lineNumber()) << ": bad value " << QUOTE(str) << " in frozen attribute. Recovering by ignoring frozen attribute."); opDef.frozen.clear(); // for safety return; } } } opDef.symbolType.setFlags(SymbolType::FROZEN); } void SyntacticPreModule::setStrat(const Vector& strategy) { OpDef& opDef = opDefs[opDefs.length() - 1]; if (opDef.symbolType.hasFlag(SymbolType::STRAT)) { IssueWarning(LINE_NUMBER << ": multiple strategy attributes."); return; } int maxArgPos = opDef.types.length(); int length = strategy.length(); for (int i = 0; i < length; i++) { const char* str = strategy[i].name(); char* pointer; long argPos = strtol(str, &pointer, 10); if (pointer != str && *pointer == '\0' && argPos >= -maxArgPos && argPos <= maxArgPos) opDef.strategy.append(static_cast(argPos)); else { IssueWarning(LineNumber(strategy[i].lineNumber()) << ": bad value " << QUOTE(str) << " in strategy attribute. Recovering by ignoring strategy attribute."); opDef.strategy.clear(); // for safety return; } } opDef.symbolType.setFlags(SymbolType::STRAT); } void SyntacticPreModule::setPoly(const Vector& polyArgs) { OpDef& opDef = opDefs[opDefs.length() - 1]; if (opDef.symbolType.hasFlag(SymbolType::POLY)) { IssueWarning(LINE_NUMBER << ": multiple polymorphic attributes."); return; } int maxArgPos = opDef.types.length(); int length = polyArgs.length(); for (int i = 0; i < length; i++) { const char* str = polyArgs[i].name(); char* pointer; long argPos = strtol(str, &pointer, 10); if (pointer != str && *pointer == '\0' && argPos >= 0 && argPos <= maxArgPos) { WarningCheck(!(opDef.polyArgs.contains(argPos)), LineNumber(polyArgs[i].lineNumber()) << ": argument " << QUOTE(argPos) << " mentioned twice in polymorphic attribute."); opDef.polyArgs.insert(argPos); } else { IssueWarning(LineNumber(polyArgs[i].lineNumber()) << ": bad value " << QUOTE(str) << " in polymorphic attribute. Recovering by ignoring value."); } } opDef.symbolType.setFlags(SymbolType::POLY); } void SyntacticPreModule::setLatexMacro(const string& latexMacro) { OpDef& opDef = opDefs[opDefs.length() - 1]; if (opDef.symbolType.hasFlag(SymbolType::LATEX)) IssueWarning(LINE_NUMBER << ": multiple latex attributes."); else { opDef.latexMacro = latexMacro; opDef.symbolType.setFlags(SymbolType::LATEX); } } void SyntacticPreModule::addHook(HookType type, Token name, const Vector& details) { int code = name.code(); OpDef& opDef = opDefs[opDefs.length() - 1]; int nrHooks = opDef.special.length(); opDef.special.expandBy(1); Hook& hook = opDef.special[nrHooks]; hook.type = type; hook.name = code; hook.details = details; // deep copy if (type == ID_HOOK) { int b = SymbolType::specialNameToBasicType(name.name()); if (b != SymbolType::STANDARD) opDef.symbolType.setBasicType(b); } } void SyntacticPreModule::makeDeclsConsistent() { // // Call if we encounter a syntax error while parsing module to make sure // opDefs/opDecls are left in a good state. // int nrOpDefs = opDefs.length(); if (nrOpDefs != 0) { int lastDefIndex = nrOpDefs - 1; if(opDefs[lastDefIndex].types.length() == 0) { // // Problem: we have op decls for which op def has not been // properly filled in; quietly delete them and reset // lastSawOpDecl flag // int m = opDecls.length(); while (m > 0 && opDecls[m - 1].defIndex == lastDefIndex) --m; opDecls.contractTo(m); lastSawOpDecl = false; } } // // Strategy declarations are handled in the same way. // int nrStratDecls = stratDecls.length(); if (nrStratDecls == 0) return; if (stratDecls[nrStratDecls - 1].types.length() == 0) { stratDecls.contractTo(nrStratDecls - 1); lastSawOpDecl = false; } } maude-3.1/src/Mixfix/mixfixModule.hh0000755000175200017520000007500313720015107014427 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for modules with mixfix syntax. // #ifndef _mixfixModule_hh_ #define _mixfixModule_hh_ #include #include #include #include #include "profileModule.hh" #include "metadataStore.hh" #include "sharedTokens.hh" #include "freeTheory.hh" #include "builtIn.hh" #include "token.hh" #include "pointerSet.hh" #include "symbolType.hh" #include "SMT_Info.hh" #include "SMT_NumberSymbol.hh" class MixfixModule : public ProfileModule, public MetadataStore, protected SharedTokens { NO_COPYING(MixfixModule); enum Bits { SYSTEM = 1, THEORY = 2, STRATEGY = 4 }; public: enum ModuleType { FUNCTIONAL_MODULE = 0, SYSTEM_MODULE = SYSTEM, STRATEGY_MODULE = SYSTEM | STRATEGY, FUNCTIONAL_THEORY = THEORY, SYSTEM_THEORY = SYSTEM | THEORY, STRATEGY_THEORY = SYSTEM | STRATEGY | THEORY }; enum GatherSymbols { GATHER_e = -1, GATHER_E = 0, GATHER_AMP = 1 }; typedef map AliasMap; MixfixModule(int name, ModuleType moduleType); ~MixfixModule(); void closeSortSet(); void closeSignature(); void economize(); // // Functions to insert stuff. // void insertPotentialLabels(const set& l); void insertPotentialRuleLabels(const set& rls); Sort* addSort(int name); Symbol* addOpDeclaration(Token prefixName, const Vector& domainAndRange, SymbolType symbolType, const Vector& strategy, const NatSet& frozen, int prec, const Vector& gather, const Vector& format, int metadata, bool& firstDecl); void addVariableAlias(Token name, Sort* sort); int addPolymorph(Token prefixName, const Vector& domainAndRange, SymbolType symbolType, const Vector& strategy, const NatSet& frozen, int prec, const Vector& gather, const Vector& format, int metadata); int addStrategy(Token name, const Vector& domainSorts, Sort* subjectSort, int metadata = NONE, bool imported = false); void addIdentityToPolymorph(int polymorphIndex, Term* identity); void addIdHookToPolymorph(int polymorphIndex, int purpose, const Vector& data); void addOpHookToPolymorph(int polymorphIndex, int purpose, Symbol* symbol); void addTermHookToPolymorph(int polymorphIndex, int purpose, Term* term); // // Allow a temporary change op variable aliases for the benefit of processing // op->term mappings in views. // void swapVariableAliasMap(AliasMap& other, MixfixParser*& otherParser); // // Functions to make things. // Symbol* instantiateSortTest(Sort* sort, bool eager); Symbol* instantiateVariable(Sort* sort); Symbol* instantiatePolymorph(int polymorphIndex, int kindIndex); Term* makeTrueTerm(); Term* makeBubble(int bubbleSpecIndex, const Vector& tokens, int first, int last); DagNode* makeUnificationProblemDag(Vector& lhs, Vector& rhs); pair makeMatchProblemDags(Vector& lhs, Vector& rhs); static void printCondition(ostream& s, const Vector& condition); static void printCondition(ostream& s, const PreEquation* pe); void printAttributes(ostream& s, const PreEquation* pe, ItemType itemType); void printStrategyTerm(ostream& s, RewriteStrategy* strat, Term* term); // // Parsing functions. // Term* parseTerm(const Vector& bubble, ConnectedComponent* component = 0, int begin = 0, int end = DEFAULT); int parseTerm2(const Vector& bubble, ConnectedComponent* component, Term*& parse1, Term*& parse2, int& firstBad); StrategyExpression* parseStrategyExpr(const Vector& bubble, int begin = 0, int end = DEFAULT); int parseStrategyExpr2(const Vector& bubble, StrategyExpression*& parse1, StrategyExpression*& parse2, int& firstBad); void parseStatement(const Vector& bubble); bool parseSearchCommand(const Vector& bubble, Term*& initial, int& searchType, Term*& target, Vector& condition); bool parseMatchCommand(const Vector& bubble, Term*& pattern, Term*& subject, Vector& condition); bool parseUnifyCommand(const Vector& bubble, Vector& lhs, Vector& rhs); bool parseStrategyCommand(const Vector& bubble, Term*& subject, StrategyExpression*& strategy); bool parseGetVariantsCommand(const Vector& bubble, Term*& initial, Vector& constraints); bool parseVariantUnifyCommand(const Vector& bubble, Vector& lhs, Vector& rhs, Vector& constraints); bool parseVariantMatchCommand(const Vector& bubble, Vector& lhs, Vector& rhs, Vector& constraints); // // Get functions. // ModuleType getModuleType() const; static const char* moduleTypeString(ModuleType type); static const char* moduleEndString(ModuleType type); SymbolType getSymbolType(Symbol* symbol) const; int getPrec(Symbol* symbol) const; void getGather(Symbol* symbol, Vector& gather) const; const Vector& getFormat(Symbol* symbol) const; const AliasMap& getVariableAliases() const; void getParserStats(int& nrNonterminals, int& nrTerminals, int& nrProductions); void getDataAttachments(Symbol* symbol, const Vector& opDeclaration, Vector& purposes, Vector >& data) const; void getSymbolAttachments(Symbol* symbol, Vector& purposes, Vector& symbols) const; void getTermAttachments(Symbol* symbol, Vector& purposes, Vector& terms) const; Sort* getStrategyRangeSort() const; // // Find functions. // Sort* findSort(int name) const; RewriteStrategy* findStrategy(int name, const Vector& domainComponents) const; Symbol* findSymbol(int name, const Vector& domainComponents, ConnectedComponent* rangeComponent); QuotedIdentifierSymbol* findQuotedIdentifierSymbol(const ConnectedComponent* component) const; StringSymbol* findStringSymbol(const ConnectedComponent* component) const; FloatSymbol* findFloatSymbol(const ConnectedComponent* component) const; SMT_NumberSymbol* findSMT_NumberSymbol(const ConnectedComponent* component, SMT_Info::SMT_Type type); int findPolymorphIndex(int polymorphName, const Vector& domainAndRange) const; // // Polymorph functions. // void copyFixUpPolymorph(int polymorphIndex, const MixfixModule* originalModule, int originalPolymorphIndex, SymbolMap* map); int getNrPolymorphs() const; Token getPolymorphName(int index) const; SymbolType getPolymorphType(int index) const; const Vector& getPolymorphDomainAndRange(int index) const; Term* getPolymorphIdentity(int index) const; const Vector& getPolymorphStrategy(int index) const; const NatSet& getPolymorphFrozen(int index) const; int getPolymorphPrec(int index) const; void getPolymorphGather(int index, Vector& gather) const; const Vector& getPolymorphFormat(int index) const; int getPolymorphMetadata(int index) const; bool getPolymorphDataAttachment(int index, int nr, int& purpose, Vector& items) const; bool getPolymorphSymbolAttachment(int index, int nr, int& purpose, Symbol*& op) const; bool getPolymorphTermAttachment(int index, int nr, int& purpose, Term*& term) const; // // Bubble functions. // int addBubbleSpec(Symbol* topSymbol, int lowerBound, int upperBound, int leftParenToken, int rightParenToken, const Vector& excludedTokens); void copyBubbleSpec(Symbol* originalSymbol, Symbol* newSymbol); void copyFixUpBubbleSpec(Symbol* originalSymbol, SymbolMap* map); void fixUpBubbleSpec(int bubbleSpecIndex, Symbol* qidSymbol, Symbol* nilQidListSymbol, Symbol* qidListSymbol); // // Pretty print functions. // void bufferPrint(Vector& buffer, Term* term, int printFlags); void bufferPrint(Vector& buffer, StrategyExpression* term, int printFlags); static Sort* disambiguatorSort(const Term* term); int getSMT_NumberToken(const mpq_class& value, Sort* sort); // // Misc. // static Sort* hookSort(Sort* sort); static ModuleType join(ModuleType t1, ModuleType t2); static bool isTheory(ModuleType t); bool isTheory() const; static bool isStrategic(ModuleType t); bool isStrategic() const; static bool canImport(ModuleType t1, ModuleType t2); static bool canHaveAsParameter(ModuleType t1, ModuleType t2); const SMT_Info& getSMT_Info(); bool validForSMT_Rewriting(); void checkFreshVariableNames(); static Term* findNonlinearVariable(Term* term, VariableInfo& variableInfo); Symbol* findSMT_Symbol(Term* term); protected: static int findMatchingParen(const Vector& tokens, int pos); // We need to account rule labels here (before importing statements) because // strategy statements can use them set ruleLabels; public: // HACK enum Precedence { MIN_PREC = 0, MAX_PREC = 127, ANY = 127, PREFIX_PREC = 0, PREFIX_GATHER = 95, // to allow _,_ to work correctly UNARY_PREC = 15, // backward compatibility with OBJ3 defaults INFIX_PREC = 41, // backward compatibility with OBJ3 defaults // // Precedences for complex syntax // ASSIGNMENT_PREC = 75, // // Precedences for strategy language. // STRAT_BASIC_PREC = 0, STRAT_TEST_PREC = 21, STRAT_REW_PREC = 21, STRAT_SEQ_PREC = 39, STRAT_UNION_PREC = 41, STRAT_ORELSE_PREC = 43, STRAT_BRANCH_PREC = 55, STRAT_USING_LIST_PREC = 61, STRAT_USING_PREC = 21 }; private: enum InternalFlags { LEFT_BARE = 0x1, // operator name has leading argument underscore RIGHT_BARE = 0x2, // operator name has trailing argument underscore ADHOC_OVERLOADED = 0x4, // another operator with the same name exists DOMAIN_OVERLOADED = 0x8, // another operator with the same name and domain kinds exists RANGE_OVERLOADED = 0x10, // another operator with the same name and range kind exists PSEUDO_STRING = 0x40, // nullary operator looks like a built-in string PSEUDO_QUOTED_IDENTIFIER = 0x80, // nullary operator looks like a built-in quoted identifier PSEUDO_FLOAT = 0x100, // nullary operator looks like a built-in float PSEUDO_VARIABLE = 0x200, // nullary operator looks like a explicit variable (i.e. X:Foo) PSEUDO_NAT = 0x1000, // nullary operator looks like a positive integer PSEUDO_NEG = 0x2000, // nullary operator looks like a negative integer PSEUDO_RAT = 0x4000, // nullary operator looks like a rational PSEUDO_ZERO = 0x8000, // nullary operator looks like zero integer PSEUDOS = PSEUDO_VARIABLE | PSEUDO_FLOAT | PSEUDO_STRING | PSEUDO_QUOTED_IDENTIFIER | PSEUDO_NAT | PSEUDO_NEG | PSEUDO_RAT | PSEUDO_ZERO }; enum NonTerminal { // // Nonterminals needed to parse modules and simple commands. // TERM = -1, SMALL_NAT = -2, SMALL_NEG = -3, QUOTED_ID = -4, STRING_NT = -5, FLOAT_NT = -6, ENDS_IN_COLON_NT = -7, COLON_PAIR = -8, COLON2_PAIR = -9, COLON3_PAIR = -10, EQUALITY_PAIR = -11, ARROW_PAIR = -12, ASSIGN_PAIR = -13, LABEL = -14, RULE_LABEL = -15, CONDITION_FRAGMENT = -16, RULE_CONDITION_FRAGMENT = -17, CONDITION = -18, RULE_CONDITION = -19, MB_BODY = -20, EQ_BODY = -21, RL_BODY = -22, STATEMENT_PART = -23, ATTRIBUTE_PART = -24, ATTRIBUTE_LIST = -25, ATTRIBUTE = -26, STATEMENT = -27, ZERO = -28, RATIONAL = -29, VARIABLE = -30, PRINT_ITEM = -31, PRINT_LIST = -32, SIMPLE_BASE = -33, // // Extra nonterminals needed to parse complex commands. // SEARCH_CONNECTIVE = SIMPLE_BASE, MATCH_PAIR = SIMPLE_BASE - 1, SEARCH_PAIR = SIMPLE_BASE - 2, SUCH_THAT = SIMPLE_BASE - 3, STRATEGY_EXPRESSION = SIMPLE_BASE - 4, STRATEGY_CALL_EXPRESSION = SIMPLE_BASE - 5, MATCH_COMMAND = SIMPLE_BASE - 6, SEARCH_COMMAND = SIMPLE_BASE - 7, STRATEGY_COMMAND = SIMPLE_BASE - 8, ASSIGNMENT = SIMPLE_BASE - 9, SUBSTITUTION = SIMPLE_BASE - 10, STRATEGY_LIST = SIMPLE_BASE - 11, UNIFY_PAIR = SIMPLE_BASE - 12, UNIFY_COMMAND = SIMPLE_BASE - 13, GET_VARIANTS_COMMAND = SIMPLE_BASE - 14, TERM_LIST = SIMPLE_BASE - 15, // for command separated list of hetrogeneous terms VARIANT_UNIFY_COMMAND = SIMPLE_BASE - 16, VARIANT_MATCH_COMMAND = SIMPLE_BASE - 17, MULTI_MATCH_COMMAND = SIMPLE_BASE - 18, USING_PAIR = SIMPLE_BASE - 19, USING_LIST = SIMPLE_BASE - 20, SD_BODY = SIMPLE_BASE - 21, STRATEGY_PAIR = SIMPLE_BASE - 22, COMPLEX_BASE = SIMPLE_BASE - 23 }; enum NonTerminalType { NUMBER_OF_TYPES = 5, TERM_TYPE = 0, SORT_TYPE = 1, DOT_SORT_TYPE = 2, ASSOC_LIST_TYPE = 3, SORT_LIST_TYPE = 4 }; enum SMT_Status { UNCHECKED = -1, BAD = 0, GOOD = 1 }; struct SymbolInfo { void revertGather(Vector& gatherSymbols) const; Vector mixfixSyntax; Vector gather; Vector format; int prec; SymbolType symbolType; int iflags; int next; }; struct IdHook { int purpose; Vector data; }; struct OpHook { int purpose; Symbol* symbol; }; struct TermHook { int purpose; Term* term; }; struct Polymorph { Token name; Vector domainAndRange; Vector strategy; NatSet frozen; Term* identity; int metadata; Vector idHooks; Vector opHooks; Vector termHooks; Vector instantiations; SymbolInfo symbolInfo; }; // // Information needed for node coloring in pretty printer. // enum DagNodeStatus { CONSTRUCTOR = 1, STRANGENESS_BELOW = 2 }; struct ColoringInfo { PointerSet visited; // set of all nodes visited on 1st pass Vector statusVec; // status computed on 1st pass bool reducedAbove; // updated on 2nd pass bool reducedDirectlyAbove; // updated on 2nd pass }; int nonTerminal(int componentIndex, NonTerminalType type); int nonTerminal(const Sort* sort, NonTerminalType type); static int domainComponentIndex(const Symbol* symbol, int argNr); static int mayAssoc(Symbol* symbol, int argNr); Symbol* newFancySymbol(Token prefixName, const Vector& domainAndRange, SymbolType symbolType, const Vector& strategy); void makeGrammar(bool complexFlag = false); void makeComplexProductions(); void makeStrategyLanguageProductions(); void makeStatementProductions(); void makeConditionProductions(); void makeAttributeProductions(); void makeParameterizedSortProductions(); void makeComponentProductions(); void makeSymbolProductions(); void makeVariableProductions(); void makeBoolProductions(); void makeLabelProductions(); void makeSpecialProductions(); void makePolymorphProductions(); void makeBubbleProductions(); void computePrecAndGather(int nrArgs, SymbolInfo& si, Symbol* symbol = 0); static Term* findNonlinearVariable(Term* term, NatSet& seenIndices); void printVariable(ostream& s, int name, Sort* sort) const; void graphPrint(ostream& s, DagNode* dagNode); static void printPrefixName(ostream& s, const char* prefixName, SymbolInfo& si); static int printTokens(ostream& s, const SymbolInfo& si, int pos, const char* color = 0); static void printTails(ostream& s, const SymbolInfo& si, int pos, int nrTails, bool needAssocParen, bool checkForInterrupt = false, const char* color = 0); static bool fancySpace(ostream& s, int spaceToken); static int chooseDisambiguator(Symbol* s); static void graphCount(DagNode* dagNode, PointerSet& visited, Vector& counts); static void makeIterName(string& name, int id, const mpz_class& number); static int computeGraphStatus(DagNode* dagNode, PointerSet& visited, Vector& statusVec); // // Member functions for Term* -> Vector& pretty printer. // static void prefix(Vector& buffer, bool needDisambig); static void suffix(Vector& buffer, Term* term, bool needDisambig, int printFlags); void prettyPrint(Vector& buffer, Term* term, int requiredPrec, int leftCapture, const ConnectedComponent* leftCaptureComponent, int rightCapture, const ConnectedComponent* rightCaptureComponent, bool rangeKnown, int printFlags); void handleVariable(Vector& buffer, Term* term, int printFlags); bool handleIter(Vector& buffer, Term* term, SymbolInfo& si, bool rangeKnown, int printFlags); bool handleMinus(Vector& buffer, Term* term, bool rangeKnown, int printFlags); bool handleDivision(Vector& buffer, Term* term, bool rangeKnown, int printFlags); void handleFloat(Vector& buffer, Term* term, bool rangeKnown, int printFlags); void handleString(Vector& buffer, Term* term, bool rangeKnown, int printFlags); void handleQuotedIdentifier(Vector& buffer, Term* term, bool rangeKnown, int printFlags); void handleSMT_NumberSymbol(Vector& buffer, Term* term, bool rangeKnown, int printFlags); static void printKind(Vector& buffer, const Sort* kind, int printFlags); static void printSort(Vector& buffer, const Sort* sort, int printFlags); static void printDotSort(Vector& buffer, const Sort* sort, int printFlags); static void printVarSort(Vector& buffer, string& fullName, const Sort* sort, int printFlags); int printTokens(Vector& buffer, const SymbolInfo& si, int pos, int printFlags); void printTails(Vector& buffer, const SymbolInfo& si, int pos, int nrTails, bool needAssocParen, int printFlags); void printPrefixName(Vector& buffer, int prefixName, SymbolInfo& si, int printFlags); void handleFormat(Vector& buffer, int spaceToken); // // Member functions for StrategyExpression* -> Vector& pretty printer. // void prettyPrint(Vector& buffer, StrategyExpression* term, int requiredPrec, int printFlags); void prettyPrint(Vector& buffer, const Vector& condition, int printFlags); void prettyPrint(Vector& buffer, const ConditionFragment* fragment, int printFlags); static Vector emptyGather; static Vector gatherAny; static Vector gatherAnyAny; static Vector gatherAnyAnyAny; static Vector gatherAny4; static Vector gatherPrefix; static Vector gatherPrefixPrefix; static Vector gatherAny0; static int globalIndent; static bool attributeUsed; const ModuleType moduleType; Sort* boolSort; Sort* strategyRangeSort; FreeSymbol* trueSymbol; FreeSymbol* falseSymbol; Vector variableBase; // for each sort Vector eagerSortTests; Vector lazySortTests; AliasMap variableAliases; Vector symbolInfo; Vector polymorphs; // // Mixfix parsing stuff. // int parseSentence(const Vector& bubble, int root, int begin = 0, int end = DEFAULT); int parseSentence2(const Vector& bubble, int root, int& firstBad, int begin, int nrTokens); Term* makeTerm(int node); void makeStatement(int node); void makeCondition(int node, Vector& condition); ConditionFragment* makeConditionFragment(int node); void makeCommand(int node, Vector& terms); MixfixParser* parser; // // These two data structures are filled out during the construction // of a grammar and cleared immediately after. Thus they need not // be preserved during parser swapping. // typedef map IntMap; IntMap iterSymbols; // maps from name code to unique nonterminals IntMap leadTokens; // maps from lead tokens of structured sort to unique nonterminals typedef map SortMap; SortMap sortNames; // maps from name codes to sort pointers IntMap firstSymbols; // names from name codes to index of first symbol with that name struct BubbleSpec { QuotedIdentifierSymbol* qidSymbol; Symbol* nilQidListSymbol; Symbol* qidListSymbol; Symbol* topSymbol; int lowerBound; int upperBound; int leftParenToken; int rightParenToken; int componentIndex; Vector excludedTokens; }; int findBubbleSpecIndex(Symbol* topSymbol) const; set potentialLabels; set bubbleComponents; Vector bubbleSpecs; // // These sets and maps are needed to decided when to // disambiguate by sort in the pretty printer and to // find builtin symbols from their kind index. // set overloadedFloats; map floatSymbols; set overloadedStrings; map stringSymbols; set overloadedQuotedIdentifiers; map quotedIdentifierSymbols; map SMT_NumberSymbols; // // We keep sets of integers and rationals whose decimal i/o // representation has been used for user symbols of arity 0. // set overloadedIntegers; set > overloadedRationals; // // We also keep sets of kinds that have succ, minus and division // symbols defined on them, or that have an non-explicit zero. // set kindsWithSucc; // also holds kinds with built-in constants that look like positive integers set kindsWithMinus; // also holds kinds with built-in constants that look like negative integers set kindsWithDivision; // also holds kinds with built-in that look like rationals set kindsWithZero; // holds kinds with a built-in constnat that look like zero set > overloadedVariables; // // We keep track of symbols whose name looks like iterated notation // typedef multimap NumberToSymbolMap; typedef map PseudoIteratedMap; PseudoIteratedMap pseudoIteratedMap; // // We also keep track of iterated symbols. // typedef multimap IteratedMap; IteratedMap iteratedMap; static bool hasSameDomain(const Vector& domainAndRange1, bool assoc1, const Vector& domainAndRange2, bool assoc2); static bool domainAndRangeMatch(const Vector& domainAndRange1, const Vector& domainAndRange2); bool ambiguous(int iflags); static bool rangeOfArgumentsKnown(int iflags, bool rangeKnown, bool rangeDisambiguated); void decideIteratedAmbiguity(bool rangeKnown, Symbol* symbol, const mpz_class& number, bool& needToDisambiguate, bool& argumentRangeKnown); int checkPseudoIterated(Symbol* symbol, const Vector& domainAndRange); void checkIterated(Symbol* symbol, const Vector& domainAndRange); // // Member functions for DagNode* -> ostream& pretty printer. // const char* computeColor(ColoringInfo& coloringInfo, DagNode* dagNode); static void prefix(ostream& s, bool needDisambig, const char* color); static void suffix(ostream& s, DagNode* dagNode, bool needDisambig, const char* color); void handleFloat(ostream& s, DagNode* dagNode, bool rangeKnown, const char* color); void handleString(ostream& s, DagNode* dagNode, bool rangeKnown, const char* color); void handleQuotedIdentifier(ostream& s, DagNode* dagNode, bool rangeKnown, const char* color); void handleVariable(ostream& s, DagNode* dagNode, bool rangeKnown, const char* color); bool handleIter(ostream& s, ColoringInfo& coloringInfo, DagNode* dagNode, SymbolInfo& si, bool rangeKnown, const char* color); bool handleMinus(ostream& s, DagNode* dagNode, bool rangeKnown, const char* color); bool handleDivision(ostream& s, DagNode* dagNode, bool rangeKnown, const char* color); void handleSMT_Number(ostream& s, DagNode* dagNode, bool rangeKnown, const char* color); void prettyPrint(ostream& s, ColoringInfo& coloringInfo, DagNode* dagNode, int requiredPrec, int leftCapture, const ConnectedComponent* leftCaptureComponent, int rightCapture, const ConnectedComponent* rightCaptureComponent, bool rangeKnown); // // Member functions for Term* -> ostream& pretty printer. // static const char* computeColor(SymbolType st); static void suffix(ostream& s, Term* term, bool needDisambig, const char* color); bool handleIter(ostream& s, Term* term, SymbolInfo& si, bool rangeKnown, const char* color); bool handleMinus(ostream& s, Term* term, bool rangeKnown, const char* color); bool handleDivision(ostream& s, Term* term, bool rangeKnown, const char* color); void handleFloat(ostream& s, Term* term, bool rangeKnown, const char* color); void handleString(ostream& s, Term* term, bool rangeKnown, const char* color); void handleQuotedIdentifier(ostream& s, Term* term, bool rangeKnown, const char* color); void handleVariable(ostream& s, Term* term, bool rangeKnown, const char* color); void handleSMT_Number(ostream& s, Term* term, bool rangeKnown, const char* color); void prettyPrint(ostream& s, Term* term, int requiredPrec, int leftCapture, const ConnectedComponent* leftCaptureComponent, int rightCapture, const ConnectedComponent* rightCaptureComponent, bool rangeKnown); static bool prettyPrint(ostream& s, StrategyExpression* strategy, int requiredPrec); NatSet objectSymbols; NatSet messageSymbols; // // Stuff for internal tuples. // Symbol* createInternalTupleSymbol(const Vector& domain, ConnectedComponent* range); typedef list IntList; typedef map InternalTupleMap; InternalTupleMap tupleSymbols; SMT_Info smtInfo; SMT_Status smtStatus; friend ostream& operator<<(ostream& s, const Term* term); friend ostream& operator<<(ostream& s, DagNode* dagNode); friend ostream& operator<<(ostream& s, StrategyExpression* strategy); }; inline SymbolType MixfixModule::getSymbolType(Symbol* symbol) const { Assert(symbol->getModule() == this, "symbol " << symbol << " belongs to " << symbol->getModule() << " and not " << this); return symbolInfo[symbol->getIndexWithinModule()].symbolType; } inline Token MixfixModule::getPolymorphName(int index) const { return polymorphs[index].name; } inline SymbolType MixfixModule::getPolymorphType(int index) const { return polymorphs[index].symbolInfo.symbolType; } inline const Vector& MixfixModule::getPolymorphDomainAndRange(int index) const { return polymorphs[index].domainAndRange; } inline Term* MixfixModule::getPolymorphIdentity(int index) const { return polymorphs[index].identity; } inline const Vector& MixfixModule::getPolymorphStrategy(int index) const { return polymorphs[index].strategy; } inline const NatSet& MixfixModule::getPolymorphFrozen(int index) const { return polymorphs[index].frozen; } inline int MixfixModule::getPolymorphPrec(int index) const { return polymorphs[index].symbolInfo.prec; } inline void MixfixModule::getPolymorphGather(int index, Vector& gather) const { polymorphs[index].symbolInfo.revertGather(gather); } inline const Vector& MixfixModule::getPolymorphFormat(int index) const { return polymorphs[index].symbolInfo.format; } inline int MixfixModule::getPolymorphMetadata(int index) const { return polymorphs[index].metadata; } inline Sort* MixfixModule::getStrategyRangeSort() const { return strategyRangeSort; } inline int MixfixModule::getPrec(Symbol* symbol) const { return symbolInfo[symbol->getIndexWithinModule()].prec; } inline void MixfixModule::getGather(Symbol* symbol, Vector& gather) const { symbolInfo[symbol->getIndexWithinModule()].revertGather(gather); } inline const Vector& MixfixModule::getFormat(Symbol* symbol) const { return symbolInfo[symbol->getIndexWithinModule()].format; } inline MixfixModule::ModuleType MixfixModule::getModuleType() const { return moduleType; } inline const MixfixModule::AliasMap& MixfixModule::getVariableAliases() const { return variableAliases; } inline void MixfixModule::insertPotentialLabels(const set& l) { potentialLabels = l; } inline void MixfixModule::insertPotentialRuleLabels(const set& rls) { ruleLabels.insert(rls.begin(), rls.end()); } inline int MixfixModule::getNrPolymorphs() const { return polymorphs.length(); } inline Sort* MixfixModule::hookSort(Sort* sort) { return (sort->index() == Sort::KIND) ? sort->component()->sort(1) : sort; } inline MixfixModule::ModuleType MixfixModule::join(ModuleType t1, ModuleType t2) { return static_cast(t1 | t2); } inline bool MixfixModule::isTheory(ModuleType t) { return t & THEORY; } inline bool MixfixModule::isTheory() const { return isTheory(getModuleType()); } inline bool MixfixModule::isStrategic(ModuleType t) { return t & STRATEGY; } inline bool MixfixModule::isStrategic() const { return isStrategic(getModuleType()); } inline bool MixfixModule::canImport(ModuleType t1, ModuleType t2) { // // System can import anything; funtional can only import functional. // Theory can import anything; module can only import module. // And then, strategy can import anything; but others cannot import them. // return (t1 | t2) == t1; } inline bool MixfixModule::canHaveAsParameter(ModuleType t1, ModuleType t2) { // // System can be parameterized by anything; functional can only be parameterized by functional. // Only theories can be parameters. // return isTheory(t2) && (((t1 | t2) & (SYSTEM | STRATEGY)) == (t1 & (SYSTEM | STRATEGY))); } #endif maude-3.1/src/Mixfix/userLevelRewritingContext.cc0000755000175200017520000004076113623317311017160 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class UserLevelRewritingContext // //#include // HACK // utility stuff #include "macros.hh" #include "vector.hh" #include "pointerSet.hh" #include "bddUser.hh" #include "timeStuff.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "variable.hh" #include "strategyLanguage.hh" #include "mixfix.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "higher.hh" #include "rawDagArgumentIterator.hh" // core class definitions #include "redexPosition.hh" #include "variableSymbol.hh" #include "rewritingContext.hh" #include "conditionFragment.hh" #include "sortConstraint.hh" #include "equation.hh" #include "rule.hh" #include "narrowingVariableInfo.hh" #include "strategyDefinition.hh" // variable class definitions #include "variableTerm.hh" #include "variableDagNode.hh" // front end class definitions #include "token.hh" #include "userLevelRewritingContext.hh" //#include "preModule.hh" // HACK #include "autoWrapBuffer.hh" #include "interpreter.hh" // HACK #include "global.hh" // HACK shouldn't be accessing global variables // our stuff #include "interact.cc" #include "trial.cc" bool UserLevelRewritingContext::tracePostFlag = false; const char UserLevelRewritingContext::header[] = "*********** "; ostream* UserLevelRewritingContext::printAttrStream = &cout; UserLevelRewritingContext::UserLevelRewritingContext(DagNode* root) : ObjectSystemRewritingContext(root), parent(0), purpose(TOP_LEVEL_EVAL), localTraceFlag(true) { } UserLevelRewritingContext::UserLevelRewritingContext(DagNode* root, UserLevelRewritingContext* parent, int purpose, bool localTraceFlag) : ObjectSystemRewritingContext(root), parent(parent), purpose(purpose), localTraceFlag(localTraceFlag) { } RewritingContext* UserLevelRewritingContext::makeSubcontext(DagNode* root, int purpose) { return new UserLevelRewritingContext(root, this, purpose, localTraceFlag && (purpose != CONDITION_EVAL || interpreter.getFlag(Interpreter::TRACE_CONDITION))); } bool UserLevelRewritingContext::dontTrace(const DagNode* redex, const PreEquation* pe) { Symbol* symbol = redex->symbol(); return (interpreter.getFlag(Interpreter::TRACE_SELECT) && !(interpreter.traceId(symbol->id()) || (pe != 0 && interpreter.traceId(pe->getLabel().id())))) || interpreter.excludedModule(symbol->getModule()->id()) || (pe == 0 && !interpreter.getFlag(Interpreter::TRACE_BUILTIN)); } void UserLevelRewritingContext::checkForPrintAttribute(MixfixModule::ItemType itemType, const PreEquation* item) { if (item != 0) { MixfixModule* m = safeCast(MixfixModule*, item->getModule()); const PrintAttribute* pa = m->getPrintAttribute(itemType, item); if (pa != 0) { pa->print(*printAttrStream, *this); if (interpreter.getFlag(Interpreter::PRINT_ATTRIBUTE_NEWLINE)) *printAttrStream << '\n'; printAttrStream->flush(); } } } void UserLevelRewritingContext::tracePreEqRewrite(DagNode* redex, const Equation* equation, int type) { // // All unusual situations during an equational rewrite are funneled // through this function, by setting the traceFlag in class Module. // This is so that rewriting only has to test a single flag // to get off the fast case, and into the (slow) exception case. // // Possible unusual situations: // (1) Profiling is enabled // (2) Statement print attributes are enabled // (3) Aborting the computation // (4) Single stepping in debugger // (5) Breakpoints are enabled // (6) ^C interrupt // (7) Info interrupt // (8) Tracing is enabled // if (interpreter.getFlag(Interpreter::PROFILE)) { safeCast(ProfileModule*, root()->symbol()->getModule())-> profileEqRewrite(redex, equation, type); } if (interpreter.getFlag(Interpreter::PRINT_ATTRIBUTE)) checkForPrintAttribute(MetadataStore::EQUATION, equation); // // handeDebug() takes care of abort, single stepping, breakpoints, // ^C interrupts and info interrupts, single these are common to // all rewrite types. // if (handleDebug(redex, equation) || !localTraceFlag || !(interpreter.getFlag(Interpreter::TRACE_EQ)) || dontTrace(redex, equation)) { tracePostFlag = false; return; } tracePostFlag = true; if (interpreter.getFlag(Interpreter::TRACE_BODY)) cout << header << "equation\n"; if (equation == 0) { if (type == RewritingContext::BUILTIN) cout << "(built-in equation for symbol " << redex->symbol() << ")\n"; else if (type == RewritingContext::MEMOIZED) cout << "(memo table lookup for symbol " << redex->symbol() << ")\n"; } else { if (interpreter.getFlag(Interpreter::TRACE_BODY)) { cout << equation << '\n'; if (interpreter.getFlag(Interpreter::TRACE_SUBSTITUTION)) printSubstitution(*this, *equation); } else { const Label& label = equation->getLabel(); if (label.id() == NONE) cout << "(unlabeled equation)\n"; else cout << &label << '\n'; } } if (interpreter.getFlag(Interpreter::TRACE_WHOLE)) cout << "Old: " << root() << '\n'; if (interpreter.getFlag(Interpreter::TRACE_REWRITE)) cout << redex << "\n--->\n"; DebugAdvisory(static_cast(redex)); } void UserLevelRewritingContext::tracePostEqRewrite(DagNode* replacement) { if (tracePostFlag) { Assert(!abortFlag, "abort flag set"); if (interpreter.getFlag(Interpreter::TRACE_REWRITE)) cout << replacement << '\n'; DebugAdvisory(static_cast(replacement)); if (interpreter.getFlag(Interpreter::TRACE_WHOLE)) cout << "New: " << root() << '\n'; } } void UserLevelRewritingContext::tracePreRuleRewrite(DagNode* redex, const Rule* rule) { if (redex == 0) { // // Dummy rewrite; need to ignore the following // tracePostRuleRewrite() call. // This capability is used by ConfigSymbol. // tracePostFlag = false; return; } if (interpreter.getFlag(Interpreter::PROFILE)) { safeCast(ProfileModule*, root()->symbol()->getModule())-> profileRlRewrite(redex, rule); } if (interpreter.getFlag(Interpreter::PRINT_ATTRIBUTE)) checkForPrintAttribute(MetadataStore::RULE, rule); if (handleDebug(redex, rule) || !localTraceFlag || !(interpreter.getFlag(Interpreter::TRACE_RL)) || dontTrace(redex, rule)) { tracePostFlag = false; return; } tracePostFlag = true; if (interpreter.getFlag(Interpreter::TRACE_BODY)) cout << header << "rule\n"; if (rule == 0) cout << "(built-in rule for symbol " << redex->symbol() << ")\n"; else { if (interpreter.getFlag(Interpreter::TRACE_BODY)) { cout << rule << '\n'; if (interpreter.getFlag(Interpreter::TRACE_SUBSTITUTION)) printSubstitution(*this, *rule); } else { const Label& label = rule->getLabel(); if (label.id() == NONE) cout << "(unlabeled rule)\n"; else cout << &label << '\n'; } } if (interpreter.getFlag(Interpreter::TRACE_WHOLE)) cout << "Old: " << root() << '\n'; if (interpreter.getFlag(Interpreter::TRACE_REWRITE)) cout << redex << "\n--->\n"; } void UserLevelRewritingContext::tracePostRuleRewrite(DagNode* replacement) { if (tracePostFlag) { if (interpreter.getFlag(Interpreter::TRACE_REWRITE)) cout << replacement << '\n'; if (interpreter.getFlag(Interpreter::TRACE_WHOLE)) cout << "New: " << root() << '\n'; } } void UserLevelRewritingContext::traceNarrowingStep(Rule* rule, DagNode* redex, DagNode* replacement, const NarrowingVariableInfo* variableInfo, const Substitution* substitution, DagNode* newState) { if (handleDebug(redex, rule) || !localTraceFlag || !(interpreter.getFlag(Interpreter::TRACE_RL)) || dontTrace(redex, rule)) return; if (interpreter.getFlag(Interpreter::TRACE_BODY)) { cout << Tty(Tty::MAGENTA) << header << "narrowing step\n" << Tty(Tty::RESET) << rule << '\n'; if (interpreter.getFlag(Interpreter::TRACE_SUBSTITUTION)) { cout << "Rule variable bindings:\n"; printSubstitution(*substitution, *rule); cout << "Subject variable bindings:\n"; int nrSubjectVariables = variableInfo->getNrVariables(); if (nrSubjectVariables == 0) cout << "empty substitution\n"; else { int variableBase = rule->getModule()->getMinimumSubstitutionSize(); for (int i = 0; i < nrSubjectVariables; ++i) { DagNode* v = variableInfo->index2Variable(i); DagNode* d = substitution->value(variableBase + i); Assert(v != 0, "null variable"); cout << v << " --> "; if (d == 0) cout << "(unbound)\n"; else cout << d << '\n'; } } } } if (interpreter.getFlag(Interpreter::TRACE_WHOLE)) cout << "Old: " << root() << '\n'; if (interpreter.getFlag(Interpreter::TRACE_REWRITE)) cout << redex << "\n--->\n" << replacement << '\n'; if (interpreter.getFlag(Interpreter::TRACE_WHOLE)) cout << "New: " << newState << '\n'; } void UserLevelRewritingContext::traceVariantNarrowingStep(Equation* equation, const Vector& oldVariantSubstitution, DagNode* redex, DagNode* replacement, const NarrowingVariableInfo& variableInfo, const Substitution* substitution, DagNode* newState, const Vector& newVariantSubstitution, const NarrowingVariableInfo& originalVariables) { if (handleDebug(redex, equation) || !localTraceFlag || !(interpreter.getFlag(Interpreter::TRACE_EQ)) || dontTrace(redex, equation)) return; if (interpreter.getFlag(Interpreter::TRACE_BODY)) { cout << Tty(Tty::CYAN) << header << "variant narrowing step\n" << Tty(Tty::RESET) << equation << '\n'; if (interpreter.getFlag(Interpreter::TRACE_SUBSTITUTION)) { cout << "Equation variable bindings:\n"; printSubstitution(*substitution, *equation); cout << "Old variant variable bindings:\n"; int nrSubjectVariables = variableInfo.getNrVariables(); if (nrSubjectVariables == 0) cout << "empty substitution\n"; else { int variableBase = equation->getModule()->getMinimumSubstitutionSize(); for (int i = 0; i < nrSubjectVariables; ++i) { DagNode* v = variableInfo.index2Variable(i); DagNode* d = substitution->value(variableBase + i); Assert(v != 0, "null variable"); /* DebugAdvisory(static_cast(v) << " --> " << static_cast(d) << " / " << static_cast(d->symbol())); */ cout << v << " --> "; if (d == 0) cout << "(unbound)\n"; else cout << d << '\n'; } } } } if (interpreter.getFlag(Interpreter::TRACE_WHOLE)) { cout << "\nOld variant: " << root() << '\n'; printSubstitution(oldVariantSubstitution, originalVariables); cout << '\n'; } if (interpreter.getFlag(Interpreter::TRACE_REWRITE)) cout << redex << "\n--->\n" << replacement << '\n'; if (interpreter.getFlag(Interpreter::TRACE_WHOLE)) { cout << "\nNew variant: " << newState << '\n'; printSubstitution(newVariantSubstitution, originalVariables); cout << '\n'; } } void UserLevelRewritingContext::traceStrategyCall(StrategyDefinition* sdef, DagNode* callDag, DagNode* subject, const Substitution* substitution) { if (interpreter.getFlag(Interpreter::PROFILE)) { safeCast(ProfileModule*, root()->symbol()->getModule())->profileSdRewrite(subject, sdef); } if (interpreter.getFlag(Interpreter::PRINT_ATTRIBUTE)) checkForPrintAttribute(MetadataStore::STRAT_DEF, sdef); if (handleDebug(callDag, sdef) || !localTraceFlag || !(interpreter.getFlag(Interpreter::TRACE_SD)) || dontTrace(callDag, sdef)) return; if (interpreter.getFlag(Interpreter::TRACE_BODY)) { cout << header << "strategy call\n"; cout << sdef << '\n'; // callDags uses the auxiliary symbol we should print it readable if (callDag->symbol()->arity() > 0) { cout << "call term --> " << Token::name(sdef->getStrategy()->id()) << "("; RawDagArgumentIterator* arg = callDag->arguments(); while (arg->valid()) { cout << arg->argument(); arg->next(); if (arg->valid()) cout << ", "; } cout << ")" << endl; delete arg; } if (interpreter.getFlag(Interpreter::TRACE_WHOLE)) cout << "subject --> " << subject << endl; if (interpreter.getFlag(Interpreter::TRACE_SUBSTITUTION)) printSubstitution(*substitution, *sdef); } else { const Label& label = sdef->getLabel(); int stratId = sdef->getStrategy()->id(); if (label.id() == NONE) cout << Token::name(stratId) << " (unlabeled definition)\n"; else cout << &label << '\n'; } } void UserLevelRewritingContext::tracePreScApplication(DagNode* subject, const SortConstraint* sc) { if (interpreter.getFlag(Interpreter::PROFILE)) { safeCast(ProfileModule*, root()->symbol()->getModule())-> profileMbRewrite(subject, sc); } if (interpreter.getFlag(Interpreter::PRINT_ATTRIBUTE)) checkForPrintAttribute(MetadataStore::MEMB_AX, sc); if (handleDebug(subject, sc) || !localTraceFlag || !(interpreter.getFlag(Interpreter::TRACE_MB)) || dontTrace(subject, sc)) return; if (interpreter.getFlag(Interpreter::TRACE_BODY)) cout << header << "membership axiom\n"; if (sc == 0) cout << "(built-in membership axiom for symbol " << subject->symbol() << ")\n"; else { if (interpreter.getFlag(Interpreter::TRACE_BODY)) { cout << sc << '\n'; if (interpreter.getFlag(Interpreter::TRACE_SUBSTITUTION)) printSubstitution(*this, *sc); } else { const Label& label = sc->getLabel(); if (label.id() == NONE) cout << "(unlabeled membership axiom)\n"; else cout << &label << '\n'; } } if (interpreter.getFlag(Interpreter::TRACE_WHOLE)) cout << "Whole: " << root() << '\n'; // // Coverity discovered bug - sc could be 0. // if (interpreter.getFlag(Interpreter::TRACE_REWRITE)) cout << subject->getSort() << ": " << subject << " becomes " << sc->getSort() << '\n'; // BUG } void UserLevelRewritingContext::printSubstitution(const Vector& substitution, const NarrowingVariableInfo& variableInfo) { int nrVariables = substitution.size(); for (int i = 0; i < nrVariables; ++i) { DagNode* v = variableInfo.index2Variable(i); DagNode* b = substitution[i]; cout << v << " --> " << b << '\n'; } } void UserLevelRewritingContext::printSubstitution(const Substitution& substitution, const NarrowingVariableInfo& variableInfo) { int nrVariables = substitution.nrFragileBindings(); for (int i = 0; i < nrVariables; ++i) { DagNode* v = variableInfo.index2Variable(i); DagNode* b = substitution.value(i); cout << v << " --> " << b << '\n'; } } void UserLevelRewritingContext::printSubstitution(const Substitution& substitution, const VariableInfo& varInfo, const NatSet& ignoredIndices) { int nrVars = varInfo.getNrRealVariables(); bool printedVariable = false; for (int i = 0; i < nrVars; i++) { if (ignoredIndices.contains(i)) continue; Term* v = varInfo.index2Variable(i); DagNode* d = substitution.value(i); /* DebugAdvisory(static_cast(v) << " --> " << static_cast(d) << " / " << ((d == 0) ? static_cast(0) : static_cast(d->symbol()))); */ Assert(v != 0, "null variable"); cout << v << " --> "; if (d == 0) cout << "(unbound)\n"; else cout << d << '\n'; printedVariable = true; } if (!printedVariable) cout << "empty substitution\n"; } maude-3.1/src/Mixfix/instantiateModuleWithBoundParameters.cc0000644000175200017520000003506213576050735021321 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2019 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // This is the code for instantiation a module FOO that has bound parameters. // Such a module is a final instantiation or a renaming of a module with // bound parameters or a summation of modules at least one of which has // bound parameters. // // The instatiation of a module with bound parameters is subtle. We don't // actually make a transformed copy of the module itself. Rather we go // back and see how it was made, and duplicate the making process, but // with parameters from the enclosing object replaced by their instantiations. // So another way of looking at it is that we are re-evaluating the module // expression that is implicitly stored in the structure of existing modules // and views. // ImportModule* ImportModule::instantiateBoundParameters(const Vector& arguments, ModuleCache* moduleCache) { // // We are a module with parameters that have bound to those in // a parameterized module that imported us. Now that these // parameters have been been instantiated, we need to make a new instantiated // module that is "like us" except that our bound parameters are // instantiated with the new arguments. // // The arguments that instantiate our bound parameters are passed in arguments. // These input vectors have been constructed so that their indices match those in parameterNames. // Assert(hasBoundParameters(), "parameters not bound"); Assert(static_cast(arguments.size()) == getNrParameters(), "arguments size bad"); switch (origin) { case SUMMATION: return handleSummation(arguments, moduleCache); case RENAMING: return handleRenaming(arguments, moduleCache); case INSTANTIATION: return handleFinalInstantiation(arguments, moduleCache); default: CantHappen("bad origin " << origin); } return 0; } ImportModule* ImportModule::handleSummation(const Vector& arguments, ModuleCache* moduleCache) { Assert(savedArguments.empty(), "unexpected saved arguments in summation"); // // We are instantiating a summation expression: // modExp1 + ... + modExpn // where some or all of the modExpi have bound parameters. // // We go through our imports and make an instantiation for each module // expression that has bound parameters. We then form a sum // of the instantiations with any unparamterized modules form the // orginal summation. // Vector instantiatedImports; FOR_EACH_CONST(i, Vector, importedModules) { ImportModule* import = *i; int nrParameters = import->parameterNames.size(); if (nrParameters != 0) { // // The module expression has parameters so form a new argument list // to match the order of arguments required by the module expression. // Vector newArgs(nrParameters); for (int j = 0; j < nrParameters; ++j) { int parameterName = import->parameterNames[j]; int indexInUs = findParameterIndex(parameterName); Assert(indexInUs != NONE, "couldn't find bound parameter " << Token::name(parameterName) << " for instantiation of import " << import << " in sum " << this); newArgs[j] = arguments[indexInUs]; } // // We make a mutually recursive call to make the instantiation of // the module expression. // if (ImportModule* instance = import->instantiateBoundParameters(newArgs, moduleCache)) instantiatedImports.append(instance); else return 0; } else instantiatedImports.append(import); } return moduleCache->makeSummation(instantiatedImports); } ImportModule* ImportModule::handleRenaming(const Vector& arguments, ModuleCache* moduleCache) { DebugEnter("original: " << this); Assert(savedArguments.empty(), "unexpected saved arguments in renaming"); // // We are a renaming of a module (baseModule) with bound parameters. // The bound parameters will be identical to our own so // we first make a new instantiation of our base module and // then rename it. // // ImportModule* newBase = baseModule->instantiateBoundParameters(arguments, moduleCache); if (newBase == 0) { DebugExit("FAILED to instantiate baseModule " << baseModule); return 0; } // // We now need to instantiate the renaming. This requires // instantiating all parameterized sorts occurring in sort mappings // and specific operator mappings within the renaming. // // To instantiate a parameter sort we need a mapping from parameter names // to arguments (view names and parameter names), and we also need to // keep a set of parameter names that survive because they were // instatiated by a theory-view. // // We now go through our parameters and make parameterMap that takes // our parameter names to arguments that are passed in. When // an argument is a theory-view, we add the corresponding parameter name to // extraParameterSet. // ParameterMap parameterMap; ParameterSet extraParameterSet; int nrParameters = parameterNames.size(); for (int i = 0; i < nrParameters; ++i) { int name = parameterNames[i]; Argument* argument = arguments[i]; if (View* argumentView = dynamic_cast(argument)) { // // Our parameter is instantiated with view. // It could be a module-view with parameters bound by the // new enclosing object that requested this instantiation. // parameterMap[name] = argumentView->getCleanName(); ImportModule* toModule = argumentView->getToModule(); if (toModule->isTheory()) { // // It's a theory view so parameter name survives. // extraParameterSet.insert(name); } } else { // // Our parameter is instantiated with with a parameter from // the new enclosing object. // parameterMap[name] = safeCast(Parameter*, argument)->id(); } } // // We now instantiate the renaming. // Renaming* newRenaming = instantiateRenaming(canonicalRenaming, parameterMap, extraParameterSet); // // Now we make a renamed copy of our instantiated base. This will make a private // canonical copy of newRenaming. It's quite possible that that the canonical // renaming will be the empty renaming in which case instance = newBase. // ImportModule* instance = moduleCache->makeRenamedCopy(newBase, newRenaming); // can return 0 // // This instantiated renaming is of no further use. // delete newRenaming; if (instance != 0) { DebugExit("instance: " << instance); return instance; } DebugExit("FAILED to rename " << newBase); return 0; } Renaming* ImportModule::instantiateRenaming(const Renaming* original, const ParameterMap& parameterMap, const ParameterSet& extraParameterSet) { DebugEnter("Original renaming: " << original); Renaming* instance = new Renaming; { int nrSortMappings = original->getNrSortMappings(); for (int i = 0; i < nrSortMappings; i++) { int from = instantiateSortName(original->getSortFrom(i), parameterMap, extraParameterSet); int to = instantiateSortName(original->getSortTo(i), parameterMap, extraParameterSet); instance->addSortMapping(from, to); } } { int nrLabelMappings = original->getNrLabelMappings(); for (int i = 0; i < nrLabelMappings; i++) instance->addLabelMapping(original->getLabelFrom(i), original->getLabelTo(i)); } { Vector token(1); int nrOpMappings = original->getNrOpMappings(); for (int i = 0; i < nrOpMappings; i++) { instance->addOpMappingPartialCopy(original, i); int nrTypes = original->getNrTypes(i); for (int j = 0; j < nrTypes; ++j) { // // Only map one sort from each type. // const set& typeSorts = original->getTypeSorts(i, j); Assert(!typeSorts.empty(), "no sorts"); int sortName = instantiateSortName(*(typeSorts.begin()), parameterMap, extraParameterSet); token[0].tokenize(sortName, FileTable::SYSTEM_CREATED); instance->addType(true, token); } } } { Vector token(1); int nrStratMappings = original->getNrStratMappings(); for (int i = 0; i < nrStratMappings; i++) { instance->addStratMappingPartialCopy(original, i); int nrTypes = original->getNrStratTypes(i); for (int j = 0; j < nrTypes; ++j) { // // Only map one sort from each type. // const set& typeSorts = original->getTypeSorts(i, j); Assert(!typeSorts.empty(), "no sorts"); int sortName = instantiateSortName(*(typeSorts.begin()), parameterMap, extraParameterSet); token[0].tokenize(sortName, FileTable::SYSTEM_CREATED); instance->addType(true, token); } } } DebugExit("Instantiated renaming: " << instance); return instance; } ImportModule* ImportModule::handleFinalInstantiation(const Vector& arguments, ModuleCache* moduleCache) { DebugEnter("original: " << this); Assert(!savedArguments.empty(), "no saved arguments in final instantiation"); // // We are an instantiation of a parameterized module with free parameters so // we build a new set of arguments to instantiate our baseModule on. // // We're going to go through the parameters of our base module. It could have more // parameters than us because the instantiation that created us may have mapped // multiple parameters in our base module to the same parameter from our enclosing // object, or may have eliminated parameters with module-views. // int nrFreeParameters = baseModule->getNrParameters(); Assert(nrFreeParameters == static_cast(savedArguments.size()), "nrFreeParameters clash"); Vector newArgs(nrFreeParameters); Vector extraArgs; for (int i = 0; i < nrFreeParameters; ++i) { // // See what the free parameter was originally instantiated by. // Argument* a = savedArguments[i]; if (Parameter* p = dynamic_cast(a)) { // // The free parameter was originally instantiated by a parameter // from an enclosing object, making it bound in us. So we now look // up its name in our parameters to find the index of its // new instantiation in the argument list we were passed. // int boundParameterName = p->id(); DebugInfo("argument " << i << " of base module is parameter " << Token::name(boundParameterName)); int index = findParameterIndex(boundParameterName); Assert(index != NONE, "didn't find bound parameter"); Argument* newArgument = arguments[index]; // remember arguments was constructed to match our bound arguments vector newArgs[i] = newArgument; // // Need to check for passing a theory-view. // if (View* passedView = dynamic_cast(newArgument)) { if (passedView->getToModule()->isTheory()) { // // Instantiating a bound parameter by a theory-view allows it // to escape. This must be recorded so that it can be rebound // in a subsequent instantiation. // DebugAdvisory("bound parameter " << Token::name(boundParameterName) << " escaped to become free parameter " << Token::name(baseModule->getParameterName(i)) << " that will need rebinding"); extraArgs.append(p); } } } else { View* v = safeCast(View*, a); DebugInfo("argument " << i << " of base module is view " << v); // // The free parameter was originally instantiated by a module-view // so this instantiation does not change except we may have to instantiate // bound parameters in the module-view. // Note that we cannot have a theory-view here since the instantiation // that made us must have been a final instantiation in order to have // parameters from an enclosing object. // Assert(!v->getToModule()->isTheory(), "unexpected theory-view in what should be a final instantiation" << v); int nrViewParameters = v->getNrParameters(); if (nrViewParameters > 0) { // // The module-view has parameters which must be bound. // We go through these bound parameters, looking at their names. // We look them up in our parameters to get an index which tells // us which argument they will be instantiated with. // We construct argument lists and make an instantiation of the // module-view which we will use to instantiate our base module on. // // DebugInfo("view has " << nrViewParameters << " bound parameters"); Vector argumentsForView(nrViewParameters); for (int j = 0; j < nrViewParameters; ++j) { int boundParameterName = v->getParameterName(j); int indexInUs = findParameterIndex(boundParameterName); Assert(indexInUs != NONE, "couldn't find bound parameter " << Token::name(boundParameterName)); argumentsForView[j] = arguments[indexInUs]; } v = v->instantiateBoundParameters(argumentsForView); // // We're not sure whether instantiating a legal view with bound // parameters can ever fail; and this could change in the future. // For robustness we assert that it can't so we notice it during // debugging and then handle in anyway. // Assert(v != 0, "failed to instantiate a view argument for an instantiation of " << this); if (v == 0) return 0; } newArgs[i] = v; } } // // We now instantiate our base module on these new argument lists. // if (ImportModule* instance = moduleCache->makeModuleInstantiation(baseModule, newArgs)) { if (!extraArgs.empty()) { // // Because some of our parameters got instantiated by theory-views, they are still // free the instantiation we just made of our base module. We to do a final // intantiation using the extraArgs vector we accumulated to make them bound. // instance = moduleCache->makeModuleInstantiation(instance, extraArgs); } DebugExit("instance: " << instance); return instance; } DebugExit("FAILED to instantiate " << baseModule); return 0; } maude-3.1/src/Mixfix/graphPrint.cc0000755000175200017520000001012113576050735014066 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Routines for pretty printing a dag as a term graph. // void MixfixModule::graphPrint(ostream& s, DagNode* dagNode) { PointerSet visited; Vector counts; graphCount(dagNode, visited, counts); s << "Begin{Graph Representation}\n[Term has " << counts[0] << " operator symbol" << (counts[0] == 1 ? "" : "s") << " while graph has " << visited.cardinality() << " node" << pluralize(visited.cardinality()) << ".]\n"; int nrNodes = visited.cardinality(); for (int i = 0; i < nrNodes; i++) { if (UserLevelRewritingContext::interrupted()) return; s << '#' << i << " = "; DagNode* dagNode = static_cast(visited.index2Pointer(i)); Symbol* symbol = dagNode->symbol(); SymbolType type = symbolInfo[symbol->getIndexWithinModule()].symbolType; switch (type.getBasicType()) { case SymbolType::VARIABLE: { VariableDagNode* v = safeCast(VariableDagNode*, dagNode); printVariable(s, v->id(), safeCast(VariableSymbol*, symbol)->getSort()); break; } case SymbolType::FLOAT: { s << doubleToString(safeCast(FloatDagNode*, dagNode)->getValue()); break; } case SymbolType::STRING: { string strValue; Token::ropeToString(safeCast(StringDagNode*, dagNode)->getValue(), strValue); s << strValue; break; } case SymbolType::QUOTED_IDENTIFIER: { s << '\'' << Token::name(safeCast(QuotedIdentifierDagNode*, dagNode)->getIdIndex()); break; } case SymbolType::SMT_NUMBER_SYMBOL: { SMT_NumberDagNode* n = safeCast(SMT_NumberDagNode*, dagNode); const mpq_class& value = n->getValue(); // // Look up the index of our sort. // Symbol* symbol = dagNode->symbol(); Sort* sort = symbol->getRangeSort(); // // Figure out what SMT sort we correspond to. // SMT_Info::SMT_Type t = getSMT_Info().getType(sort); Assert(t != SMT_Info::NOT_SMT, "bad SMT sort " << sort); s << value.get_num(); if (t == SMT_Info::REAL) s << '/' << value.get_den(); else Assert(t == SMT_Info::INTEGER, "SMT number sort expected"); break; } default: { s << Token::name(symbol->id()); if (type.hasFlag(SymbolType::ITER)) { const mpz_class& number = safeCast(S_DagNode*, dagNode)->getNumber(); if (number > 1) s << '^' << number; } DagArgumentIterator a(*dagNode); if (a.valid()) { s << '('; for (;;) { s << '#' << visited.pointer2Index(a.argument()); a.next(); if (!(a.valid())) break; s << ", "; } s << ')'; } break; } } s << '\n'; } s << "End{Graph Representation}"; } void MixfixModule::graphCount(DagNode* dagNode, PointerSet& visited, Vector& counts) { visited.insert(dagNode); int index = counts.length(); Assert(index == visited.pointer2Index(dagNode), "counts out of step"); counts.append(0); mpz_class count(1); for(DagArgumentIterator a(*dagNode); a.valid(); a.next()) { DagNode* d = a.argument(); if (!(visited.contains(d))) graphCount(d, visited, counts); mpz_class& childsCount = counts[visited.pointer2Index(d)]; Assert(childsCount != 0, "cycle in dag"); count += childsCount; } counts[index] = count; } maude-3.1/src/Mixfix/banner.cc0000644000175200017520000000327013626321657013221 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2010 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Banner gets recompiled every build to update time; so keep it small. // #if HAVE_CONFIG_H #include #endif #if HAVE_OSTREAM #include #elif HAVE_OSTREAM_H #include #endif using namespace std; #include "timeStuff.hh" #include "tty.hh" void printBanner(std::ostream& s) { struct timeval t; gettimeofday(&t, 0); time_t secs = t.tv_sec; s << "\t\t \\||||||||||||||||||/\n"; s << "\t\t --- Welcome to " << Tty(Tty::RED) << 'M' << Tty(Tty::CYAN) << 'a' << Tty(Tty::BLUE) << 'u' << Tty(Tty::MAGENTA) << 'd' << Tty(Tty::GREEN) << 'e' << Tty(Tty::RESET) << " ---\n"; s << "\t\t /||||||||||||||||||\\\n"; s << "\t " << PACKAGE_STRING << " built: " << __DATE__ << ' ' << __TIME__ << '\n'; s << "\t Copyright 1997-2020 SRI International\n"; s << "\t\t " << ctime(&secs); } maude-3.1/src/Mixfix/printAttribute.cc0000644000175200017520000000563413576050735015002 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2008 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class PrintAttribute. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "variable.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" // core class definitions #include "substitution.hh" #include "preEquation.hh" #include "conditionFragment.hh" // variable class definitions #include "variableTerm.hh" // mixfix class definitions #include "token.hh" #include "printAttribute.hh" void PrintAttribute::fillOut(const PreEquation& statement, const Vector& names, const Vector& sorts) { Assert(names.size() == sorts.size(), "vector size mismatch"); int nrItems = names.size(); for (int i = 0; i < nrItems; ++i) { int name = names[i]; Sort* sort = sorts[i]; if (sort == 0) items.append(name); // string case else { int index = findVariableIndex(statement, name, sort); if (index == NONE) IssueWarning(statement << ": print attribute variable unbound."); else items.append(-1 - index); } } } int PrintAttribute::findVariableIndex(const VariableInfo& variableInfo, int name, Sort* sort) { int nrVariables = variableInfo.getNrRealVariables(); for (int i = 0; i < nrVariables; ++i) { VariableTerm* v = safeCast(VariableTerm*, variableInfo.index2Variable(i)); if (v->id() == name && v->getSort() == sort) return i; } return NONE; } void PrintAttribute::print(ostream& s, const VariableInfo& variableInfo) const { s << "print"; int nrItems = items.size(); for (int i = 0; i < nrItems; ++i) { s << ' '; int item = items[i]; if (item >= 0) s << Token::name(item); else s << variableInfo.index2Variable(-1 - item); } } void PrintAttribute::print(ostream& s, const Substitution& substitution) const { int nrItems = items.size(); for (int i = 0; i < nrItems; ++i) { int item = items[i]; if (item >= 0) s << Token::codeToRope(item); else s << substitution.value(-1 - item); } } maude-3.1/src/Mixfix/lexer.ll0000755000175200017520000004106713713074752013124 00000000000000 /* This file is part of the Maude 3 interpreter. Copyright 1997-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /* // Lexical analyser */ %{ // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "higher.hh" #include "strategyLanguage.hh" #include "mixfix.hh" // core class definitions #include "lineNumber.hh" // front end class definitions #include "token.hh" #include "fileTable.hh" #include "directoryManager.hh" //#include "preModule.hh" #include "lexerAux.hh" #include "global.hh" #include "userLevelRewritingContext.hh" #include "interpreter.hh" // bison generated token file #include "surface.h" #define YY_DECL int yylex(YYSTYPE* lvalp) void getInput(char* buf, yy_size_t& result, yy_size_t max_size); // // result might be an int or a yy_size_t depending on flex version, so we use a temporary. // #define YY_INPUT(buf, result, max_size) \ { yy_size_t safeResult; getInput(buf, safeResult, max_size); result = safeResult; } #define RETURN(token) \ { lvalp->yyToken.tokenize(yytext, lineNumber); return (token); } #define RETURN_FIX_UP(token) \ { lvalp->yyToken.fixUp(yytext, lineNumber); return (token); } #define SAVE(token) \ { savedToken.tokenize(yytext, lineNumber); savedReturn = token; } #define SAVE_FIX_UP(token) \ { savedToken.fixUp(yytext, lineNumber); savedReturn = token; } #define RETURN_SAVED(token) \ { lvalp->yyToken = savedToken; return (token); } #define STORE \ { Token t; t.tokenize(yytext, lineNumber); lexerBubble.append(t); /*DebugAdvisory("Stored " << t);*/ } #define STORE_FIX_UP \ { Token t; t.fixUp(yytext, lineNumber); lexerBubble.append(t); /*DebugAdvisory("Stored fixUp " << t);*/ } #define EXIT(token) \ { yy_pop_state(); RETURN(token) } Token savedToken; int savedReturn; int braceCount; int parenCount; int terminationSet; string accumulator; string fileName; //int terminationCondition; int minLength; extern Vector lexerBubble; %} stringContent ([^[:cntrl:]"\\]|("\\"[^[:cntrl:]])|(\\\n)|\t) string ("\""{stringContent}*"\"") normal ([^[:cntrl:] ()\[\]{},`_"]|{string}) normalSeq ({normal}("`"{normal})*) special ("_"|("`"[()\[\]{},])) maudeId (({special}|{normalSeq})+) %s ID_MODE %s CMD_MODE %s SEEN_DOT %s BUBBLE_MODE %s END_STATEMENT_MODE %s END_COMMAND_MODE %x FILE_NAME_MODE %x FILE_NAME_QUOTE_MODE %x STRING_MODE %x LATEX_MODE %option stack %option noyywrap %% if (UserLevelRewritingContext::interrupted()) yyterminate(); ("***>"|"--->")[^ \t\n\r\f]* { yyless(0); eatComment(false); } ("***"|"---")[^ \t\n\r\f]* { yyless(3); eatComment(true); } { memo RETURN(KW_MEMO) format RETURN(KW_FORMAT) } { in RETURN(KW_IN) } { th|fth|sth|mod|fmod|smod|obj RETURN(KW_MOD) // need to know which one we saw omod RETURN(KW_OMOD) view RETURN(KW_VIEW); load return KW_LOAD; sload return KW_SLOAD; pwd return KW_PWD; cd return KW_CD; pushd return KW_PUSHD; popd return KW_POPD; ls return KW_LS; ll return KW_LL; quit|q return KW_QUIT; eof return KW_EOF; parse return KW_PARSE; norm|normalize return KW_NORMALIZE; red|reduce return KW_REDUCE; cred|creduce return KW_CREDUCE; sred|sreduce return KW_SREDUCE; rew|rewrite return KW_REWRITE; erew|erewrite return KW_EREWRITE; frew|frewrite return KW_FREWRITE; srew|srewrite return KW_SREWRITE; dsrew|dsrewrite return KW_DSREWRITE; check return KW_CHECK; loop return KW_LOOP; cont|continue return KW_CONTINUE; nar|narrow return KW_NARROW; xg-narrow return KW_XG_NARROW; get return KW_GET; variants return KW_VARIANTS; variant return KW_VARIANT; match return KW_MATCH; xmatch return KW_XMATCH; search return KW_SEARCH; unify return KW_UNIFY; set return KW_SET; show return KW_SHOW; on return KW_ON; off return KW_OFF; trace return KW_TRACE; advise|advisory|advisories return KW_ADVISE; verbose return KW_VERBOSE; do return KW_DO; clear return KW_CLEAR; body return KW_BODY; builtin return KW_BUILTIN; whole return KW_WHOLE; select return KW_SELECT; deselect return KW_DESELECT; conceal return KW_CONCEAL; reveal return KW_REVEAL; cond|condition return KW_CONDITION; subst|substitution return KW_SUBSTITUTION; print return KW_PRINT; attr|attribute return KW_ATTRIBUTE; newline return KW_NEWLINE; color return KW_COLOR; graph return KW_GRAPH; mixfix return KW_MIXFIX; flat|flattened return KW_FLAT; with return KW_WITH; paren|parens|parentheses return KW_PARENS; alias|aliases return KW_ALIASES; const|constant|constants return KW_CONST; gc return KW_GC; time return KW_TIME; stats return KW_STATS; timing return KW_TIMING; cmd|command return KW_CMD; all return KW_ALL; modules return KW_MODULES; module return KW_MODULE; views return KW_VIEWS; sort|sorts return KW_SORTS; op|ops return KW_OPS2; var|vars return KW_VARS; mb|mbs return KW_MBS; eq|eqs return KW_EQS; rl|rls|rule|rules return KW_RLS; strat|strats return KW_STRATS; sd|sds return KW_SDS; summary return KW_SUMMARY; kinds|components return KW_KINDS; compile|compiler return KW_COMPILE; count return KW_COUNT; protect return KW_PROTECT; extend return KW_EXTEND; include return KW_INCLUDE; exclude return KW_EXCLUDE; debug return KW_DEBUG; irredundant|irred return KW_IRREDUNDANT; filtered return KW_FILTERED; resume return KW_RESUME; abort return KW_ABORT; step return KW_STEP; where return KW_WHERE; dump return KW_DUMP; break return KW_BREAK; breakdown return KW_BREAKDOWN; path return KW_PATH; label|labels return KW_LABEL; profile return KW_PROFILE; number return KW_NUMBER; rat|rational return KW_RAT; test return KW_TEST; smt-search return KW_SMT_SEARCH; vu-narrow return KW_VU_NARROW; fvu-narrow return KW_FVU_NARROW; [.\[\]()] return *yytext; 0|([1-9][0-9]*) { bool dummy; lvalp->yyInt64 = stringToInt64(yytext, dummy, 10); return SIMPLE_NUMBER; } {maudeId}|[{},] { IssueWarning(LineNumber(lineNumber) << ": skipped unexpected token: " << QUOTE(yytext)); } } /* * In command mode we only recognize special tokens * "in" "(" ")" "[" "]" ":" "." "," and non-negative numbers. * Everything else is an identifier. Furthermore "." is only recognized * at the end of a line or before a comment (ignoring white space). */ { "."(([ \t\r\f\v]*\n)|([ \t\r\f\v]+("***"|"---"))) { yyless(1); RETURN('.') } [:,()\[\]] RETURN(*yytext) [1-9][0-9]* RETURN(NUMERIC_ID) [.{}] RETURN(IDENTIFIER) {maudeId}"." { SAVE_FIX_UP(ENDS_IN_DOT) BEGIN(SEEN_DOT); } {maudeId} RETURN_FIX_UP(IDENTIFIER) } { (([ \t\r\f\v]*\n)|([ \t\r\f\v]+("***"|"---"))) { yyless(0); BEGIN(CMD_MODE); RETURN_SAVED(savedReturn) } . { yyless(0); BEGIN(CMD_MODE); RETURN_SAVED(IDENTIFIER) } } /* * Id mode is used for scanning modules; a whole bunch of special tokens * are recognized. */ { to RETURN(KW_TO) from RETURN(KW_FROM) label RETURN(KW_LABEL) assoc|associative RETURN(KW_ASSOC) comm|commutative RETURN(KW_COMM) id:|identity: RETURN(KW_ID) idem|idempotent RETURN(KW_IDEM) iter|iterated RETURN(KW_ITER) left RETURN(KW_LEFT) right RETURN(KW_RIGHT) prec|precedence RETURN(KW_PREC) gather RETURN(KW_GATHER) metadata RETURN(KW_METADATA) strat RETURN(KW_STRAT) // both strategy attribute and declaration strategy RETURN(KW_ASTRAT) // strategy attribute only strats RETURN(KW_DSTRAT) // declaration of a strategy only frozen RETURN(KW_FROZEN) poly|polymorphic RETURN(KW_POLY) ctor|constructor RETURN(KW_CTOR) latex RETURN(KW_LATEX) special RETURN(KW_SPECIAL) config|configuration RETURN(KW_CONFIG) obj|object RETURN(KW_OBJ) msg|message RETURN(KW_MSG) ditto RETURN(KW_DITTO) id-hook RETURN(KW_ID_HOOK) op-hook RETURN(KW_OP_HOOK) term-hook RETURN(KW_TERM_HOOK) is RETURN(KW_IS) if RETURN(KW_IF) pr|protecting|ex|extending|us|using|inc|including RETURN(KW_IMPORT) sort|sorts RETURN(KW_SORT) subsort|subsorts RETURN(KW_SUBSORT) class RETURN(KW_CLASS) subclass|subclasses RETURN(KW_SUBCLASS) op RETURN(KW_OP) ops RETURN(KW_OPS) msgs RETURN(KW_MSGS) var|vars RETURN(KW_VAR) mb RETURN(KW_MB) cmb RETURN(KW_CMB) eq RETURN(KW_EQ) ceq|cq RETURN(KW_CEQ) rl RETURN(KW_RL) crl RETURN(KW_CRL) sd RETURN(KW_SD) csd RETURN(KW_CSD) end(th|fth|sth|m|fm|sm|om|o)|jbo RETURN(KW_ENDM) endv RETURN(KW_ENDV) "->" RETURN(KW_ARROW) "=>" RETURN(KW_ARROW2) "~>" RETURN(KW_PARTIAL) "::" RETURN(KW_COLON2) ":=" RETURN(KW_ASSIGN) [:()\[\]{}.,<=|+*@] RETURN(*yytext) {maudeId}"." RETURN_FIX_UP(ENDS_IN_DOT) {maudeId} RETURN_FIX_UP(IDENTIFIER) } /* * Bubble mode squirrels tokens away in lexerBubble until some termination criteria is met. */ { : { if (parenCount == 0 && (terminationSet & BAR_COLON) && lexerBubble.length() >= minLength) EXIT(*yytext) else STORE } , { if (parenCount == 0 && (terminationSet & BAR_COMMA) && lexerBubble.length() >= minLength) EXIT(*yytext) else STORE } \[ { if (parenCount == 0 && (terminationSet & BAR_LEFT_BRACKET) && lexerBubble.length() >= minLength) EXIT(*yytext) else STORE } \] { if (parenCount == 0 && (terminationSet & BAR_RIGHT_BRACKET) && lexerBubble.length() >= minLength) EXIT(*yytext) else STORE } = { if (parenCount == 0 && (terminationSet & BAR_EQUALS) && lexerBubble.length() >= minLength) EXIT(*yytext) else STORE } => { if (parenCount == 0 && (terminationSet & BAR_ARROW2) && lexerBubble.length() >= minLength) EXIT(KW_ARROW2) else STORE } := { if (parenCount == 0 && (terminationSet & BAR_ASSIGN) && lexerBubble.length() >= minLength) EXIT(KW_ASSIGN) else STORE } to { if (parenCount == 0 && (terminationSet & BAR_TO) && lexerBubble.length() >= minLength) EXIT(KW_TO) else STORE } if { if (parenCount == 0 && (terminationSet & BAR_IF) && lexerBubble.length() >= minLength) EXIT(KW_IF) else STORE } assoc|associative|comm|commutative|id:|identity:|idem|idempotent|iter|iterated|left|right|prec|precedence|gather|metadata|strat|strategy|frozen|poly|polymorphic|ctor|constructor|latex|special|config|configuration|obj|object|msg|message|ditto|format|memo { if (parenCount == 0 && (terminationSet & BAR_OP_ATTRIBUTE) && lexerBubble.length() >= minLength) { yyless(0); // need to re-lex it to get the correct return value yy_pop_state(); } else STORE } \( { ++parenCount; STORE } \) { if (parenCount == 0) { if ((terminationSet & BAR_RIGHT_PAREN) && lexerBubble.length() >= minLength) EXIT(*yytext) IssueWarning(LineNumber(lineNumber) << ": mismatched parentheses."); } else --parenCount; STORE } [\]{}] STORE \. { if (parenCount == 0 && lexerBubble.length() >= minLength && (terminationSet & (END_STATEMENT | END_COMMAND))) { SAVE(*yytext) BEGIN((terminationSet & END_STATEMENT) ? END_STATEMENT_MODE : END_COMMAND_MODE); } else STORE } {maudeId}"." { if (parenCount == 0 && lexerBubble.length() + 1 >= minLength && (terminationSet & (END_STATEMENT | END_COMMAND))) { SAVE_FIX_UP(ENDS_IN_DOT) BEGIN((terminationSet & END_STATEMENT) ? END_STATEMENT_MODE : END_COMMAND_MODE); } else STORE_FIX_UP } {maudeId} STORE_FIX_UP } /* * We have saved something that looks like a statement terminating period. We now lex the next * token to see if it ends a module or starts a new statement, and if so push the lexed token back * on to the input stream to be re-lexed in a new mode. */ { pr|protecting|ex|extending|us|using|inc|including|sort|sorts|subsort|subsorts|op|ops|var|vars|mb|cmb|eq|cq|ceq|rl|crl|sd|csd|strat|strats|end(th|fth|sth|m|fm|sm|om|o|v|sv)|jbo|msg|msgs|class|classes|subclass|subclasses { yyless(0); // BUG - need to deal with white space and comments after the . yy_pop_state(); RETURN_SAVED(savedReturn) } } { (([ \t\r\f\v]*\n)|([ \t\r\f\v]+("***"|"---"))) { yyless(0); yy_pop_state(); RETURN_SAVED(savedReturn) } } { \. { lexerBubble.append(savedToken); SAVE(*yytext); } {maudeId}"." { lexerBubble.append(savedToken); SAVE_FIX_UP(ENDS_IN_DOT) } {maudeId}|[^ \n\r\f\t\v] { // // We need {maudeId} here so that an identifier such // as .foo doesn't get split by the first rule. // lexerBubble.append(savedToken); yyless(0); BEGIN(BUBBLE_MODE); } } { \" { if (accumulator.empty()) BEGIN(FILE_NAME_QUOTE_MODE); else accumulator += '"'; } \\" " accumulator += ' '; \\\" accumulator += '"'; \\\\ accumulator += '\\'; \\ accumulator += '\\'; [^"\\ \t\n\r\f]+ accumulator += yytext; [ \t\r] { if (!accumulator.empty()) { yy_pop_state(); lvalp->yyString = accumulator.c_str(); eatComment(false); return FILE_NAME_STRING; } } [\n\f] { ++lineNumber; yy_pop_state(); lvalp->yyString = accumulator.c_str(); return FILE_NAME_STRING; } } { ["\t\r] { yy_pop_state(); lvalp->yyString = accumulator.c_str(); eatComment(false); return FILE_NAME_STRING; } [^"\t\n\r\f]+ accumulator += yytext; [\n\f] { ++lineNumber; yy_pop_state(); lvalp->yyString = accumulator.c_str(); return FILE_NAME_STRING; } } { [^\n\r\f]* { yy_pop_state(); lvalp->yyString = yytext; return UNINTERPRETED_STRING; } [\n\r\f] { yyless(0); // so that line numbers will be correct yy_pop_state(); lvalp->yyString = ""; return UNINTERPRETED_STRING; } } { (\\[{}()]{0,1})|([a-zA-Z0-9.:;,?!`'\[\]\-/*@#$%&~_^+=|<> \t]+) accumulator += yytext; \( { if (braceCount == 0) ++parenCount; accumulator += yytext; } \) { if (braceCount == 0) { --parenCount; if (parenCount == 0) { yyless(0); yy_pop_state(); lvalp->yyString = accumulator.c_str(); return LATEX_STRING; } } accumulator += yytext; } \{ { ++braceCount; accumulator += yytext; } \} { --braceCount; accumulator += yytext; } [\n\f] { ++lineNumber; accumulator += yytext; } . yy_pop_state(); // mindless recovery } <> { if (UserLevelRewritingContext::interrupted() || !handleEof()) yyterminate(); } [ \t\r]* ; [\n\f] ++lineNumber; . { IssueWarning(LineNumber(lineNumber) << ": skipped: " << QUOTE(yytext)); } %% #include "lexerAux.cc" maude-3.1/src/Mixfix/symbolType.hh0000644000175200017520000001234613641022630014123 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for holding symbol type info. // #ifndef _symbolType_hh_ #define _symbolType_hh_ class SymbolType { public: // // A symbol type consist of a single basic type combined with // zero or more modification flags. // enum BasicTypes { STANDARD, // // System created symbols. // VARIABLE, SORT_TEST, INTERNAL_TUPLE, // // Special properties. // SYSTEM_TRUE, SYSTEM_FALSE, BUBBLE, // // Special symbols that do not deal with attachments. // FLOAT, STRING, // // Special symbols that do deal with attachments. // BRANCH_SYMBOL, EQUALITY_SYMBOL, FLOAT_OP, STRING_OP, QUOTED_IDENTIFIER, QUOTED_IDENTIFIER_OP, MODEL_CHECKER_SYMBOL, SAT_SOLVER_SYMBOL, META_LEVEL_OP_SYMBOL, LOOP_SYMBOL, SUCC_SYMBOL, MINUS_SYMBOL, NUMBER_OP_SYMBOL, ACU_NUMBER_OP_SYMBOL, CUI_NUMBER_OP_SYMBOL, DIVISION_SYMBOL, RANDOM_OP_SYMBOL, MATRIX_OP_SYMBOL, COUNTER_SYMBOL, SOCKET_MANAGER_SYMBOL, INTERPRETER_MANAGER_SYMBOL, SMT_SYMBOL, SMT_NUMBER_SYMBOL, FILE_MANAGER_SYMBOL, STREAM_MANAGER_SYMBOL, PROCESS_MANAGER_SYMBOL, END_OF_SYMBOLS_WITH_ATTACHMENTS }; enum Flags { // // Syntactic attributes. // PREC = 0x1, GATHER = 0x2, FORMAT = 0x4, LATEX = 0x8, // // Semantic attributes. // STRAT = 0x10, MEMO = 0x20, FROZEN = 0x40, CTOR = 0x80, // // OO attributes. // CONFIG = 0x100, OBJECT = 0x200, MESSAGE = 0x400, // // Theory attributes. // ASSOC = 0x1000, COMM = 0x2000, LEFT_ID = 0x4000, RIGHT_ID = 0x8000, IDEM = 0x10000, ITER = 0x20000, // // Misc. // POLY = 0x400000, DITTO = 0x800000, // // Conjunctions. // AXIOMS = ASSOC | COMM | LEFT_ID | RIGHT_ID | IDEM, COLLAPSE = LEFT_ID | RIGHT_ID | IDEM, SIMPLE_ATTRIBUTES = ASSOC | COMM | IDEM | MEMO | CTOR | CONFIG | OBJECT | MESSAGE, ATTRIBUTES = PREC | GATHER | FORMAT | LATEX | STRAT | MEMO | FROZEN | CONFIG | OBJECT | MESSAGE | AXIOMS | ITER }; SymbolType(); // SymbolType(const SymbolType& other); int getFlags() const; void setFlags(int flags); void clearFlags(int flags); void assignFlags(int flags, bool value); int getBasicType() const; void setBasicType(int type); bool hasFlag(int flag) const; bool hasAllFlags(int flags) const; bool hasAtLeastOneFlag(int flags) const; // bool hasAxioms() const; bool hasAttachments() const; bool hasSpecial() const; // bool isVariable() const; bool isCreatedOnTheFly() const; bool compatible(SymbolType other) const; bool dittoProblem() const; bool nonAlgebraic() const; static int specialNameToBasicType(const char* name); private: enum BitTwiddling { FLAG_MASK = 0xffffff, TYPE_SHIFT = 24 }; int info; }; inline SymbolType::SymbolType() { info = 0; } inline int SymbolType::getFlags() const { return info & FLAG_MASK; } inline void SymbolType::setFlags(int flags) { info |= flags; } inline void SymbolType::clearFlags(int flags) { info &= ~flags; } inline void SymbolType::assignFlags(int flags, bool value) { if (value) setFlags(flags); else clearFlags(flags); } inline int SymbolType::getBasicType() const { return info >> TYPE_SHIFT; } inline void SymbolType::setBasicType(int type) { info = (info & FLAG_MASK) | type << TYPE_SHIFT; } inline bool SymbolType::hasFlag(int flag) const { return getFlags() & flag; } inline bool SymbolType::hasAllFlags(int flags) const { return (getFlags() & flags) == flags; } inline bool SymbolType::hasAtLeastOneFlag(int flags) const { return (getFlags() & flags); } inline bool SymbolType::hasAttachments() const { int t = getBasicType(); return (t >= BRANCH_SYMBOL) && (t < END_OF_SYMBOLS_WITH_ATTACHMENTS); } inline bool SymbolType::hasSpecial() const { int t = getBasicType(); return (t >= SYSTEM_TRUE) && (t < END_OF_SYMBOLS_WITH_ATTACHMENTS); } inline bool SymbolType::nonAlgebraic() const { // // These symbols with these types store nonalebraic "hidden" data. // int t = getBasicType(); return t == STRING || t == FLOAT || t == QUOTED_IDENTIFIER; } inline bool SymbolType::isCreatedOnTheFly() const { int t = getBasicType(); return hasFlag(POLY) || t == VARIABLE || t == SORT_TEST; } #ifndef NO_ASSERT ostream& operator<<(ostream& s, SymbolType st); #endif #endif maude-3.1/src/Mixfix/strategyTranslation.cc0000644000175200017520000003650213576050735016041 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Strategy translation for ImportModule. // // Translation is not done recursively in the StrategyExpression class for the same // reason that condition fragments are copied the same way. // // utility stuff #include "macros.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "strategyLanguage.hh" #include "mixfix.hh" // implementing class #include "importModule.hh" // interface class #include "rawArgumentIterator.hh" // core classes #include "term.hh" #include "conditionFragment.hh" #include "rewriteStrategy.hh" #include "substitution.hh" // mixfix classes #include "importTranslation.hh" // strategy language classes #include "strategicSearch.hh" #include "strategyExpression.hh" #include "trivialStrategy.hh" #include "unionStrategy.hh" #include "concatenationStrategy.hh" #include "callStrategy.hh" #include "iterationStrategy.hh" #include "branchStrategy.hh" #include "applicationStrategy.hh" #include "testStrategy.hh" #include "subtermStrategy.hh" #include "oneStrategy.hh" // higuer language classes #include "assignmentConditionFragment.hh" #include "equalityConditionFragment.hh" #include "rewriteConditionFragment.hh" #include "sortTestConditionFragment.hh" StrategyExpression* ImportModule::deepCopyStrategyExpression(ImportTranslation* importTranslation, StrategyExpression* original) { if (TrivialStrategy* trs = dynamic_cast(original)) return new TrivialStrategy(trs->getResult()); else if (CallStrategy* cs = dynamic_cast(original)) { RewriteStrategy* strategy = importTranslation->translate(cs->getStrategy()); // If strategy is null (to expr mappings), the call must be translated // to a strategy expression if (strategy == 0) { return importTranslation->translateExpr(cs); } // Otherwise, the translation is another call strategy expression return new CallStrategy(strategy, strategy->copyAuxiliaryTerm(cs->getTerm(), importTranslation)); } else if (IterationStrategy* is = dynamic_cast(original)) return new IterationStrategy(deepCopyStrategyExpression(importTranslation, is->getStrategy()), is->getZeroAllowed()); else if (UnionStrategy* us = dynamic_cast(original)) { const Vector& strategies = us->getStrategies(); Vector strategiesCopy(strategies.size()); for (size_t i = 0; i < strategies.size(); i++) strategiesCopy[i] = deepCopyStrategyExpression(importTranslation, strategies[i]); return new UnionStrategy(strategiesCopy); } else if (ConcatenationStrategy* cs = dynamic_cast(original)) { const Vector& strategies = cs->getStrategies(); Vector strategiesCopy(strategies.size()); for (size_t i = 0; i < strategies.size(); i++) strategiesCopy[i] = deepCopyStrategyExpression(importTranslation, strategies[i]); return new ConcatenationStrategy(strategiesCopy); } else if (BranchStrategy* bs = dynamic_cast(original)) { return new BranchStrategy(deepCopyStrategyExpression(importTranslation, bs->getInitialStrategy()), bs->getSuccessAction(), bs->getSuccessStrategy() ? deepCopyStrategyExpression(importTranslation, bs->getSuccessStrategy()) : 0, bs->getFailureAction(), bs->getFailureStrategy() ? deepCopyStrategyExpression(importTranslation, bs->getFailureStrategy()) : 0); } else if (ApplicationStrategy* as = dynamic_cast(original)) { const Vector& strategies = as->getStrategies(); const Vector& variables = as->getVariables(); const Vector& values = as->getValues(); Vector strategiesCopy(strategies.size()); Vector variablesCopy(variables.size()); Vector valuesCopy(values.size()); for (size_t i = 0; i < strategies.size(); i++) strategiesCopy[i] = deepCopyStrategyExpression(importTranslation, strategies[i]); for (size_t i = 0; i < variables.size(); i++) { variablesCopy[i] = variables[i]->deepCopy(importTranslation); valuesCopy[i] = values[i].getTerm()->deepCopy(importTranslation); } int label = importTranslation->translateLabel(as->getLabel()); ApplicationStrategy* copy = new ApplicationStrategy(label, variablesCopy, valuesCopy, strategiesCopy); if (as->getTop()) copy->setTop(); return copy; } else if (TestStrategy* te = dynamic_cast(original)) { Vector conditionCopy(te->getCondition().size()); deepCopyCondition(importTranslation, te->getCondition(), conditionCopy); return new TestStrategy(te->getPatternTerm()->deepCopy(importTranslation), te->getDepth(), conditionCopy); } else if (SubtermStrategy* mrs = dynamic_cast(original)) { const Vector& strategies = mrs->getStrategies(); const Vector& patterns = mrs->getSubterms(); Vector strategiesCopy(strategies.size()); Vector patternsCopy(patterns.size()); Vector conditionCopy(mrs->getCondition().size()); for (size_t i = 0; i < strategies.size(); i++) { strategiesCopy[i] = deepCopyStrategyExpression(importTranslation, strategies[i]); patternsCopy[i] = patterns[i]->deepCopy(importTranslation); } deepCopyCondition(importTranslation, mrs->getCondition(), conditionCopy); return new SubtermStrategy(mrs->getPatternTerm()->deepCopy(importTranslation), mrs->getDepth(), conditionCopy, patternsCopy, strategiesCopy); } else if (OneStrategy* os = dynamic_cast(original)) return new OneStrategy(deepCopyStrategyExpression(importTranslation, os->getStrategy())); CantHappen("unknown strategy expression"); return 0; } StrategyExpression* ImportModule::instantiateExpression(StrategyExpression* expr, const Vector& varMap, const Vector& values, ImportTranslation* translation) { int nrContextSize = varMap.length(); Vector subs(nrContextSize); for (int i = 0; i < nrContextSize; i++) subs[i] = values[varMap[i]]; return instantiateExpression(expr, subs, translation); } Term* ImportModule::instantiateCall(Term* term, RewriteStrategy* strat, const Vector& subs, ImportTranslation* translation) { // // Instantiate the arguments and rebuild the call term // Symbol* symbol = term->symbol(); Vector args(symbol->arity()); RawArgumentIterator* it = term->arguments(); for (size_t i = 0; i < args.size(); i++) { Assert(it->valid(), "non-valid iterator"); args[i] = it->argument()->instantiate(subs, translation); it->next(); } delete it; return strat->makeAuxiliaryTerm(args); } StrategyExpression* ImportModule::instantiateExpression(StrategyExpression* original, const Vector& subs, ImportTranslation* translation) { // // We return an instantiated copy // if (TrivialStrategy* trs = dynamic_cast(original)) return new TrivialStrategy(trs->getResult()); else if (CallStrategy* cs = dynamic_cast(original)) { RewriteStrategy* strategy = translation->translate(cs->getStrategy()); Term* callTerm = cs->getTerm(); Term* instantiated = instantiateCall(callTerm, strategy, subs, translation); Assert(instantiated, "instantiated is null"); return new CallStrategy(strategy, instantiated); } else if (IterationStrategy* is = dynamic_cast(original)) return new IterationStrategy(instantiateExpression(is->getStrategy(), subs, translation), is->getZeroAllowed()); else if (UnionStrategy* us = dynamic_cast(original)) { const Vector& strategies = us->getStrategies(); Vector instantiatedStrats(strategies.size()); for (size_t i = 0; i < strategies.size(); i++) instantiatedStrats[i] = instantiateExpression(strategies[i], subs, translation); return new UnionStrategy(instantiatedStrats); } else if (ConcatenationStrategy* cs = dynamic_cast(original)) { const Vector& strategies = cs->getStrategies(); Vector instantiatedStrats(strategies.size()); for (size_t i = 0; i < strategies.size(); i++) instantiatedStrats[i] = instantiateExpression(strategies[i], subs, translation); return new ConcatenationStrategy(instantiatedStrats); } else if (BranchStrategy* bs = dynamic_cast(original)) { return new BranchStrategy(instantiateExpression(bs->getInitialStrategy(), subs, translation), bs->getSuccessAction(), bs->getSuccessStrategy() ? instantiateExpression(bs->getSuccessStrategy(), subs, translation) : 0, bs->getFailureAction(), bs->getFailureStrategy() ? instantiateExpression(bs->getFailureStrategy(), subs, translation) : 0); } else if (ApplicationStrategy* as = dynamic_cast(original)) { const Vector& strategies = as->getStrategies(); const Vector& variables = as->getVariables(); const Vector& values = as->getValues(); Vector strategiesCopy(strategies.size()); Vector variablesCopy(variables.size()); Vector instantiatedValues(values.size()); for (size_t i = 0; i < strategies.size(); i++) strategiesCopy[i] = instantiateExpression(strategies[i], subs, translation); for (size_t i = 0; i < variables.size(); i++) { variablesCopy[i] = variables[i]->deepCopy(translation); VariableInfo vinfo; instantiatedValues[i] = values[i].getTerm()->instantiate(subs, translation); } int label = translation->translateLabel(as->getLabel()); ApplicationStrategy* copy = new ApplicationStrategy(label, variablesCopy, instantiatedValues, strategiesCopy); if (as->getTop()) copy->setTop(); return copy; } else if (TestStrategy* te = dynamic_cast(original)) { Vector conditionCopy(te->getCondition().size()); // Builds and applies the substitution for the condition { const Vector >& indexTranslation = te->getIndexTranslation(); int contextSize = te->getPattern().getNrRealVariables(); Vector conditionSubs(contextSize); for (int i = 0; i < contextSize; i++) conditionSubs[i] = te->getPattern().index2Variable(i); size_t translationSize = indexTranslation.length(); for (size_t i = 0; i < translationSize; i++) conditionSubs[indexTranslation[i].first] = subs[indexTranslation[i].second]; instantiateCondition(te->getCondition(), conditionCopy, conditionSubs, translation); } return new TestStrategy(te->getPatternTerm()->deepCopy(translation), te->getDepth(), conditionCopy); } else if (SubtermStrategy* mrs = dynamic_cast(original)) { const Vector& strategies = mrs->getStrategies(); const Vector& patterns = mrs->getSubterms(); Vector strategiesCopy(strategies.size()); Vector patternsCopy(patterns.size()); Vector conditionCopy(mrs->getCondition().size()); // Builds and applies the substitution for inside the matchrew { const Vector& contextSpec = mrs->getContextSpec(); int innerContextSize = contextSpec.size(); Vector innerSubs(innerContextSize); for (int i = 0; i < innerContextSize; i++) innerSubs[i] = contextSpec[i] < 0 ? subs[-(1 + contextSpec[i])] : mrs->getPattern().index2Variable(contextSpec[i]); for (size_t i = 0; i < strategies.size(); i++) { strategiesCopy[i] = instantiateExpression(strategies[i], innerSubs, translation); patternsCopy[i] = patterns[i]->deepCopy(translation); } } // Builds and applies the substitution for the condition { const Vector >& indexTranslation = mrs->getIndexTranslation(); int contextSize = mrs->getPattern().getNrRealVariables(); Vector conditionSubs(contextSize); for (int i = 0; i < contextSize; i++) conditionSubs[i] = mrs->getPattern().index2Variable(i); size_t translationSize = indexTranslation.length(); for (size_t i = 0; i < translationSize; i++) conditionSubs[indexTranslation[i].first] = subs[indexTranslation[i].second]; instantiateCondition(mrs->getCondition(), conditionCopy, conditionSubs, translation); } return new SubtermStrategy(mrs->getPatternTerm()->deepCopy(translation), mrs->getDepth(), conditionCopy, patternsCopy, strategiesCopy); } else if (OneStrategy* os = dynamic_cast(original)) return new OneStrategy(instantiateExpression(os->getStrategy(), subs, translation)); CantHappen("unknow strategy expression"); return 0; } void ImportModule::instantiateCondition(const Vector& original, Vector& copy, const Vector& mapping, ImportTranslation* translation) { int nrFragments = original.length(); copy.expandTo(nrFragments); for (int i = 0; i < nrFragments; i++) { ConditionFragment* c = original[i]; ConditionFragment* n; if (EqualityConditionFragment* e = dynamic_cast(c)) { Term* lhs = e->getLhs()->instantiate(mapping, translation); Term* rhs = e->getRhs()->instantiate(mapping, translation); n = new EqualityConditionFragment(lhs, rhs); } else if (SortTestConditionFragment* s = dynamic_cast(c)) { Term* lhs = s->getLhs()->instantiate(mapping, translation); n = new SortTestConditionFragment(lhs, s->getSort()); } else if (AssignmentConditionFragment* a = dynamic_cast(c)) { Term* lhs = a->getLhs()->instantiate(mapping, translation); Term* rhs = a->getRhs()->instantiate(mapping, translation); n = new AssignmentConditionFragment(lhs, rhs); } else if (RewriteConditionFragment* r = dynamic_cast(c)) { Term* lhs = r->getLhs()->instantiate(mapping, translation); Term* rhs = r->getRhs()->instantiate(mapping, translation); n = new RewriteConditionFragment(lhs, rhs); } else { CantHappen("bad condition fragment"); n = 0; // avoid compiler warning } copy[i] = n; } } maude-3.1/src/Mixfix/userLevelRewritingContext.hh0000755000175200017520000001403013736702617017174 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for user level rewriting contexts. // #ifndef _userLevelRewritingContext_hh_ #define _userLevelRewritingContext_hh_ #include #ifdef USE_LIBSIGSEGV #include "sigsegv.h" #endif #include "objectSystemRewritingContext.hh" #include "metadataStore.hh" #include "rule.hh" class Token; // HACK class UserLevelRewritingContext : public ObjectSystemRewritingContext { NO_COPYING(UserLevelRewritingContext); public: enum OtherPurpose { TOP_LEVEL_EVAL = OTHER + 1, META_EVAL }; enum ParseResult { NORMAL, QUIT, RESUME, ABORT, STEP, WHERE }; UserLevelRewritingContext(DagNode* root); static void setHandlers(bool handleCtrlC); static ParseResult commandLoop(); static bool interrupted(); static bool aborted(); static void setInteractive(bool status); static void setPrintAttributeStream(ostream* s); static void beginCommand(); static void setDebug(); static void clearDebug(); //static void clearInterrupt(); static void clearTrialCount(); static void clearInfo(); RewritingContext* makeSubcontext(DagNode* root, int purpose); void beAdoptedBy(UserLevelRewritingContext* newParent); int traceBeginEqTrial(DagNode* subject, const Equation* equation); int traceBeginRuleTrial(DagNode* subject, const Rule* rule); int traceBeginScTrial(DagNode* subject, const SortConstraint* sc); int traceBeginSdTrial(DagNode* subject, const StrategyDefinition* sdef); void traceEndTrial(int trailRef, bool success); void traceExhausted(int trialRef); void tracePreEqRewrite(DagNode* redex, const Equation* equation, int type); void tracePostEqRewrite(DagNode* replacement); void tracePreRuleRewrite(DagNode* redex, const Rule* rule); void tracePostRuleRewrite(DagNode* replacement); void tracePreScApplication(DagNode* subject, const SortConstraint* sc); bool traceAbort(); void traceBeginFragment(int trialRef, const PreEquation* preEquation, int fragmentIndex, bool firstAttempt); void traceEndFragment(int trialRef, const PreEquation* preEquation, int fragmentIndex, bool success); void traceNarrowingStep(Rule* rule, DagNode* redex, DagNode* replacement, const NarrowingVariableInfo* variableInfo, const Substitution* substitution, DagNode* newState); void traceVariantNarrowingStep(Equation* equation, const Vector& oldVariantSubstitution, DagNode* redex, DagNode* replacement, const NarrowingVariableInfo& variableInfo, const Substitution* substitution, DagNode* newState, const Vector& newVariantSubstitution, const NarrowingVariableInfo& originalVariables); void traceStrategyCall(StrategyDefinition* sdef, DagNode* callDag, DagNode* subject, const Substitution* substitution); static void printSubstitution(const Substitution& substitution, const VariableInfo& varInfo, const NatSet& ignoredIndices = NatSet()); static void printSubstitution(const Vector& substitution, const NarrowingVariableInfo& variableInfo); static void printSubstitution(const Substitution& substitution, const NarrowingVariableInfo& variableInfo); private: UserLevelRewritingContext(DagNode* root, UserLevelRewritingContext* parent, int purpose, bool localTraceFlag); static void interruptHandler(int); static void infoHandler(int); static void interruptHandler2(...); #ifdef USE_LIBSIGSEGV static void stackOverflowHandler(int emergency, stackoverflow_context_t scp); static int sigsegvHandler(void* fault_address, int serious); #endif static void internalErrorHandler(int signalNr); static void changePrompt(); static bool dontTrace(const DagNode* redex, const PreEquation* pe); bool handleInterrupt(); bool blockAndHandleInterrupts(sigset_t *normalSet); void checkForPrintAttribute(MetadataStore::ItemType itemType, const PreEquation* item); bool handleDebug(DagNode* subject, const PreEquation* pe); void where(ostream& s); void printStatusReportCommon(); void printStatusReport(DagNode* subject, const PreEquation* pe); static bool tracePostFlag; static int trialCount; static const char header[]; static bool interactiveFlag; static bool ctrlC_Flag; // set in ^C signal handler static bool infoFlag; // set in info signal handler static bool stepFlag; static bool abortFlag; static int debugLevel; static Int64 rewriteCountAtLastInterrupt; static AutoWrapBuffer* wrapOut; static AutoWrapBuffer* wrapErr; static ostream* printAttrStream; UserLevelRewritingContext* parent; const int purpose; bool localTraceFlag; }; inline void UserLevelRewritingContext::setPrintAttributeStream(ostream* s) { printAttrStream = s; } inline void UserLevelRewritingContext::clearTrialCount() { trialCount = 0; } inline bool UserLevelRewritingContext::interrupted() { return ctrlC_Flag; } inline bool UserLevelRewritingContext::aborted() { return abortFlag; } inline void UserLevelRewritingContext::setDebug() { setTraceStatus(true); stepFlag = true; } inline void UserLevelRewritingContext::clearInfo() { infoFlag = false; } inline void UserLevelRewritingContext::beAdoptedBy(UserLevelRewritingContext* newParent) { parent = newParent; } #endif maude-3.1/src/Mixfix/mixfix.hh0000644000175200017520000000423313576050635013271 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Forward declarations for mixfix frontend classes. // #ifndef _mixfix_hh_ #define _mixfix_hh_ class Timer; class AutoWrapBuffer; class Token; class FileTable; class DirectoryManager; class SyntacticPreModule; class PreModule; class MixfixModule; class ImportModule; class ImportTranslation; class UserLevelRewritingContext; class QuotedIdentifierSymbol; class QuotedIdentifierTerm; class QuotedIdentifierDagNode; class QuotedIdentifierOpSymbol; class LoopSymbol; class SymbolType; class XmlBuffer; class MaudemlBuffer; class Interpreter; class Compiler; class ProfileModule; class MixfixParser; class VisibleModule; class CommonTokens; class MetadataStore; class ModuleExpression; class Renaming; class ModuleCache; class View; class SyntacticView; class ModuleDatabase; class ViewDatabase; class Entity; class SyntaxContainer; class FreshVariableSource; class PrintAttribute; class CacheableRewritingContext; class ViewExpression; class ViewCache; class EnclosingObject; class Argument; class Parameter; class ParameterDatabase; // // Support for quantifying just active computations (rather than // including waits for input). // #ifdef QUANTIFY_REWRITING #define QUANTIFY_START() quantify_start_recording_data() #define QANTIFY_STOP() quantify_stop_recording_data() #else #define QUANTIFY_START() #define QUANTIFY_STOP() #endif #endif maude-3.1/src/Mixfix/command.cc0000644000175200017520000002141113576050735013367 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Code for general top level commands. // void SyntacticPreModule::loseFocus() { if (flatModule != 0) { flatModule->clearMemo(); flatModule->reset(); flatModule->economize(); } } void SyntacticPreModule::dump() { #ifdef DUMP getFlatModule()->dump(cout); #endif } void SyntacticPreModule::printSortTokenVector(ostream& s, const Vector& sorts) { int nrTokens = sorts.size(); s << Token::sortName(sorts[0].code()); for (int i = 1; i < nrTokens; ++i) s << ' ' << Token::sortName(sorts[i].code()); } void SyntacticPreModule::showModule(ostream& s) { s << MixfixModule::moduleTypeString(getModuleType()) << ' ' << this; int nrParameters = getNrParameters(); if (nrParameters > 0) { s << '{' << Token::name(getParameterName(0)) << " :: " << getParameter(0); // FIX NAME for (int i = 1; i < nrParameters; ++i) s << ", " << Token::name(getParameterName(i)) << " :: " << getParameter(i); // FIX NAME s << '}'; } s << " is\n"; const char* modeStrings[] = { "protecting", "extending", "including" }; int nrImports = getNrImports(); for (int i = 0; i < nrImports; i++) { if (UserLevelRewritingContext::interrupted()) return; s << " " << modeStrings[getImportMode(i)] << ' ' << getImport(i) << " .\n"; // FIX MODE } int nrSortDecls = sortDecls.length(); for (int i = 0; i < nrSortDecls; i++) { if (UserLevelRewritingContext::interrupted()) return; s << " sorts "; printSortTokenVector(s, sortDecls[i]); s << " .\n"; } int nrSubsortDecls = subsortDecls.length(); for (int i = 0; i < nrSubsortDecls; i++) { if (UserLevelRewritingContext::interrupted()) return; s << " subsorts "; printSortTokenVector(s, subsortDecls[i]); s << " .\n"; } bool follow = false; int nrOpDecls = opDecls.length(); for (int i = 0; i < nrOpDecls; i++) { OpDecl& opDecl = opDecls[i]; int defIndex = opDecl.defIndex; bool newFollow = (i + 1 < nrOpDecls) && (opDecls[i + 1].defIndex == defIndex); if (!follow) { s << ((opDefs[defIndex].symbolType.getBasicType() == SymbolType::VARIABLE) ? " var" : " op") << (newFollow ? "s " : " "); } s << opDecls[i].prefixName << ' '; follow = newFollow; if (!follow) { printOpDef(s, defIndex); if (UserLevelRewritingContext::interrupted()) return; } } int nrStratDecls = stratDecls.length(); for (int i = 0; i < nrStratDecls; i++) { printStratDecl(s, stratDecls[i]); if (UserLevelRewritingContext::interrupted()) return; } int nrStatements = statements.length(); for (int i = 0; i < nrStatements; i++) { if (UserLevelRewritingContext::interrupted()) return; s << " " << statements[i] << " .\n"; } s << MixfixModule::moduleEndString(getModuleType()) << '\n'; } void SyntacticPreModule::printOpDef(ostream&s, int defIndex) { OpDef& opDef = opDefs[defIndex]; s << ": "; if (opDef.symbolType.getBasicType() == SymbolType::VARIABLE) s << opDef.types[0] << ' '; else { int nrArgs = opDef.types.length() - 1; for (int i = 0; i < nrArgs; i++) s << opDef.types[i] << ' '; s << "-> " << opDef.types[nrArgs] << ' '; } printAttributes(s, opDef); s << ".\n"; } void SyntacticPreModule::printStratDecl(ostream& s, const StratDecl& decl) { size_t rangeIndex = decl.types.length() - 1; s << (decl.names.length() == 1 ? " strat " : " strats "); int nrNames = decl.names.length(); for (int i = 0; i < nrNames; i++) s << decl.names[i] << ' '; if (rangeIndex > 0) { s << ": "; for (size_t i = 0; i < rangeIndex; i++) s << decl.types[i] << " "; } s << "@ " << decl.types[rangeIndex] << ' '; printAttributes(s, decl); s << ".\n"; } void SyntacticPreModule::printAttributes(ostream& s, const OpDef& opDef) { SymbolType st = opDef.symbolType; if (!(st.hasFlag(SymbolType::ATTRIBUTES | SymbolType::CTOR | SymbolType::POLY | SymbolType::DITTO)) && opDef.special.empty() && opDef.metadata == NONE) return; const char* space = ""; s << '['; if (st.hasFlag(SymbolType::POLY)) { s << "poly ("; FOR_EACH_CONST(i, NatSet, opDef.polyArgs) { if (*i != 0) { s << space << *i; space = " "; } } if (opDef.polyArgs.contains(0)) { s << space << '0'; space = " "; } s << ')'; } // // Theory attributes. // if (st.hasFlag(SymbolType::ASSOC)) { s << space << "assoc"; space = " "; } if (st.hasFlag(SymbolType::COMM)) { s << space << "comm"; space = " "; } if (st.hasFlag(SymbolType::ITER)) { s << space << "iter"; space = " "; } if (st.hasFlag(SymbolType::MESSAGE)) { s << space << "msg"; space = " "; } if (st.hasFlag(SymbolType::OBJECT)) { s << space << "obj"; space = " "; } if (st.hasFlag(SymbolType::CONFIG)) { s << space << "config"; space = " "; } if (st.hasFlag(SymbolType::LEFT_ID | SymbolType::RIGHT_ID)) { s << space; space = " "; if (!(st.hasFlag(SymbolType::LEFT_ID))) s << "right "; else if (!(st.hasFlag(SymbolType::RIGHT_ID))) s << "left "; s << "id: " << opDef.identity; } if (st.hasFlag(SymbolType::IDEM)) { s << space << "idem"; space = " "; } // // Semantic attributes. // if (st.hasFlag(SymbolType::STRAT)) { s << space << "strat ("; space = " "; int stratLen = opDef.strategy.length(); for (int i = 0; i < stratLen; i++) s << opDef.strategy[i] << ((i == stratLen - 1) ? ')' : ' '); } if (st.hasFlag(SymbolType::MEMO)) { s << space << "memo"; space = " "; } if (st.hasFlag(SymbolType::FROZEN)) { s << space << "frozen"; space = " "; if (!(opDef.frozen.empty())) { s << " ("; const NatSet::const_iterator e = opDef.frozen.end(); for (NatSet::const_iterator i = opDef.frozen.begin();;) { s << *i + 1; if (++i == e) break; s << ' '; } s << ')'; } } if (st.hasFlag(SymbolType::CTOR)) { s << space << "ctor"; space = " "; } // // Syntactic attributes. // if (st.hasFlag(SymbolType::PREC)) { s << space << "prec " << opDef.prec; space = " "; } if (st.hasFlag(SymbolType::GATHER)) { s << space; space = " "; printGather(s, opDef.gather); } if (st.hasFlag(SymbolType::FORMAT)) { s << space; space = " "; printFormat(s, opDef.format); } if (opDef.metadata != NONE) { s << space << "metadata " << Token::name(opDef.metadata); space = " "; } if (!(opDef.special.empty())) { s << space << "special ("; space = " "; FOR_EACH_CONST(i, Vector, opDef.special) { static const char* hookTypes[] = { "id-hook", "op-hook", "term-hook" }; s << "\n " << hookTypes[i->type] << ' ' << Token::name(i->name); if (!(i->details.empty())) s << " (" << i->details << ')'; } s << ')'; } // // Misc attributes. // if (st.hasFlag(SymbolType::DITTO)) { s << space << "ditto"; space = " "; } s << "] "; } void SyntacticPreModule::printGather(ostream& s, const Vector& gather) { static char gatherSymbols[] = {'e', 'E', '&'}; s << "gather ("; int gatherLen = gather.length(); for (int i = 0; i < gatherLen; i++) { s << gatherSymbols[gather[i] - MixfixModule::GATHER_e] << ((i == gatherLen - 1) ? ')' : ' '); } } void SyntacticPreModule::printFormat(ostream& s, const Vector& format) { s << "format ("; int formatLen = format.length(); for (int i = 0; i < formatLen; i++) s << Token::name(format[i]) << ((i == formatLen - 1) ? ')' : ' '); } void SyntacticPreModule::printAttributes(ostream& s, const StratDecl& stratDecl) { if (stratDecl.metadata == NONE) return; s << "[metadata " << Token::name(stratDecl.metadata) << ']'; } maude-3.1/src/Mixfix/instantiateViewWithBoundParameters.cc0000644000175200017520000001047613576050735021010 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2019 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Code to handle the instantiation of views with bound parameters. // View* View::instantiateBoundParameters(const Vector& arguments) { DebugEnter("instantiating bound parameters of view " << this); // // We are a view with bound parameters. We go back to our baseView which has free parameters // and construct a new instantiation that is just "like us" except our bound parameters // are instantiated to new arguments. // int nrFreeParameters = baseView->getNrParameters(); Vector newArgs(nrFreeParameters); Vector extraArgs; for (int i = 0; i < nrFreeParameters; ++i) { // // See what the free parameter was originally instantiated by. // Argument* a = savedArguments[i]; if (Parameter* p = dynamic_cast(a)) { int boundParameterName = p->id(); DebugInfo("argument " << i << " of base view is parameter " << Token::name(boundParameterName)); int index = findParameterIndex(boundParameterName); Assert(index != NONE, "didn't find bound parameter"); Argument* newArgument = arguments[index]; newArgs[i] = newArgument; // // Need to check for passing a theory-view. // if (View* passedView = dynamic_cast(newArgument)) { if (passedView->getToModule()->isTheory()) { // // Instantiating a bound parameter by a theory-view allows it // to escape. This must be recorded so that it can be rebound // in a subsequent instantiation. // DebugInfo("bound parameter " << Token::name(boundParameterName) << " escaped to become free parameter " << Token::name(baseView->getParameterName(i)) << " that will need rebinding"); extraArgs.append(p); } } } else { View* v = safeCast(View*, a); DebugInfo("argument " << i << " of base view is view " << v); // // The free parameter was originally instantiated by a view // so this instantiation does not change except we may have to instantiate // bound parameters in the view. // Assert(!v->getToModule()->isTheory(), "unexpected theory-view " << v); int nrViewParameters = v->getNrParameters(); if (nrViewParameters > 0) { DebugInfo("view has " << nrViewParameters << " bound parameters"); Vector argumentsForView(nrViewParameters); for (int j = 0; j < nrViewParameters; ++j) { int parameterName = v->getParameterName(j); int indexInUs = findParameterIndex(parameterName); Assert(indexInUs != NONE, "failed to find parameter " << Token::name(parameterName) << " in view " << this << " to satisfy view " << v); argumentsForView[j] = arguments[indexInUs]; } v = v->instantiateBoundParameters(argumentsForView); // recursive call to construct an instantiation of this view // // We're not sure whether instantiating a legal view with bound // parameters can ever fail; and this could change in the future. // For robustness we assert that it can't so we notice it during // debugging and then handle in anyway. // Assert(v != 0, "failed to instantiate a view argument for an instantiation of " << this); if (v == 0) return 0; } newArgs[i] = v; } } if (View* instance = owner->makeViewInstantiation(baseView, newArgs)) { if (!extraArgs.empty()) instance = owner->makeViewInstantiation(instance, extraArgs); DebugExit("made instantiated view " << instance); return instance; } DebugExit("failed"); return 0; } maude-3.1/src/Mixfix/quotedIdentifierDagNode.cc0000644000175200017520000000446213576050735016506 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class QuotedIdentifierDagNode. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "NA_Theory.hh" #include "mixfix.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" // front end class definitions #include "quotedIdentifierSymbol.hh" #include "quotedIdentifierDagNode.hh" #include "token.hh" QuotedIdentifierDagNode::QuotedIdentifierDagNode(QuotedIdentifierSymbol* symbol, int idIndex) : NA_DagNode(symbol), idIndex(idIndex) { } size_t QuotedIdentifierDagNode::getHashValue() { return hash(symbol()->getHashValue(), idIndex); } int QuotedIdentifierDagNode::compareArguments(const DagNode* other) const { int otherIndex = static_cast(other)->idIndex; if (idIndex == otherIndex) return 0; return strcmp(Token::name(idIndex), Token::name(otherIndex)); } void QuotedIdentifierDagNode::overwriteWithClone(DagNode* old) { QuotedIdentifierDagNode* d = new(old) QuotedIdentifierDagNode(safeCast(QuotedIdentifierSymbol*, symbol()), idIndex); d->copySetRewritingFlags(this); d->setSortIndex(getSortIndex()); } DagNode* QuotedIdentifierDagNode::makeClone() { QuotedIdentifierDagNode* d = new QuotedIdentifierDagNode(safeCast(QuotedIdentifierSymbol*, symbol()), idIndex); d->copySetRewritingFlags(this); d->setSortIndex(getSortIndex()); return d; } maude-3.1/src/Mixfix/instantiateViewWithFreeParameters.cc0000644000175200017520000007721213576050735020623 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 2019 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Code to handle the instantiation of views with free parameters. // View* View::makeInstantiation(int viewName, int cleanName, const Vector& arguments) { DebugEnter("called on " << this << " to make " << Token::name(viewName)); Assert(status != BAD, "trying to instantiate bad view"); Assert(static_cast(arguments.size()) == getNrParameters(), "viewArgs size mismatch " << getNrParameters() << " expected vs " << arguments.size() << " provided in instantiation " << Token::name(viewName)); // // An instantiation of a view (with free parameters) is a copy of the view // with parameters that disappear (module-view argument), change theory // (theory-view argument) or change name and become bound (parameter // from an enclosing view/module). // View* copy = new View(viewName, cleanName, this, arguments, owner); // // We construct an instantiation renaming which will map the sorts and operations // we got from our parameter theories to those of our view args' targets. // The main purpose of this renaming is to map terms from our toTheory // into the toTheory of our instantiation, which is needed to instantiate // our op->term mappings. // // It's not possible to use the canonicalRenaming from the toModule of our // instantiation for this, because the toModule could be a sum or a renaming // rather than a direct instantiation. // Renaming* canonicalRenaming = new Renaming; // // We assume that fromTheory cannot be instantiated, because we do not support // parameterized theories and we do not allow parameterized modules to be summed // with theories. // copy->fromTheory = fromTheory; // use the same fromTheory fromTheory->addUser(copy); // copy becomes a user of fromTheory // // If we have theory-view args we will have free parameters. // If we have parameter args we will have bound parameters. // Can only have one of these possibilities since theory-view args // are only allowed in non-final instantiations and parameter args // are only allowed in final instantiations. // ParameterMap parameterMap; // maps parameter names to arguments ParameterSet extraParameterSet; // parameters that escape via a theory-view argument if (!handleInstantiationByTheoryView(copy, canonicalRenaming, parameterMap, extraParameterSet, arguments)) { copy->status = BAD; delete canonicalRenaming; return copy; } // // After we've checked for theory views on clashing parameters, it is now safe // to make an instantiation of our toModule. // ImportModule* targetInstance = makeToModule(arguments); if (targetInstance == 0) { copy->status = BAD; delete canonicalRenaming; return copy; } copy->setToModule(targetInstance); // propagates conflicts from targetInstance to copy // // Now handle parameters instantiated by parameters from an enclosing object, and // parameters instantiated by module-views that may use parameters from an enclosing object. // NatSet positionsInstantiatedParameter; handleInstantiationByParameter(copy, canonicalRenaming, parameterMap, positionsInstantiatedParameter, arguments); handleInstantiationByModuleView(copy, canonicalRenaming, parameterMap, positionsInstantiatedParameter, arguments); // // Add renamings for parameterized sorts to canonicalRenaming. These look like // Foo{X} |-> Foo{V}{X} for theory-view V // Foo{X} |-> Foo{Y} for parameter Y from an enclosing object // Foo{X} |-> Foo{V} for module-view V // We do this for all the sorts in our toModule // toModule->handleParameterizedSorts(canonicalRenaming, parameterMap, extraParameterSet); // // Now we have our canonical renaming which takes use from our toModule to // the instantiation our our toModule, targetInstance. // We now use this canonical renaming to instantiate the to-side of our // sort and operator mappings. // // Add a sort mapping to copy for each sort mapping we have. // handleSortMappings(copy, canonicalRenaming); // // Add a specific op->op mappings to copy for operators in our fromTheory // that get mapped by us and/or by our instantiation. // handleOpMappings(copy, canonicalRenaming); // // Ass a op->term mapping to copy for each op->term mapping we have. // handleOpToTermMappings(copy, canonicalRenaming); // // Add a general op->op mappings to copy for polymorphic operators in our // fromTheory that get mapped by us and/or by our instantiation. // handlePolymorphMappings(copy, canonicalRenaming); // // Add strat->strat and strat->expr mappings // handleStratMappings(copy, canonicalRenaming); handleStratToExprMappings(copy, canonicalRenaming); copy->status = GOOD; // // The canonicalRenaming is solely used to instantiate the guts of the view; // i.e. the sort->sort mappings, op->op mappings and op->term mappings. // Once this is done, it is never used again; unlike with modules, there are // no delayed imports of things like equations. // delete canonicalRenaming; DebugExit("successfully made view instantiation " << Token::name(copy->id()) << " which has " << copy->parameters.size() << " parameters"); return copy; } ImportModule* View::makeToModule(const Vector& arguments) const { // // We make an instantiation of our toModule. We require that // toModule have parameters that are bound to our own. // // Because modules are a lot more substantial than views we will use // the module machinery to do the heavy lifting. // Assert(!(toModule->hasFreeParameters()), "free parameters in toModule"); int nrToModuleParameters = toModule->getNrParameters(); Assert(nrToModuleParameters == getNrParameters(), "toModule " << toModule << " has " << nrToModuleParameters << " parameters whereas enclosing view " << this << " has " << getNrParameters() << " parameters"); // // We go through the bound parameters of our toModule construct a permutation of // our argument list. // Vector toModuleArgs(nrToModuleParameters); for (int i = 0; i < nrToModuleParameters; ++i) { int parameterName = toModule->getParameterName(i); int indexInUs = findParameterIndex(parameterName); Assert(indexInUs != NONE, "couldn't find bound parameter " << Token::name(parameterName) << " for instantiation " << toModule << " of view " << this); toModuleArgs[i] = arguments[indexInUs]; } // // We now make an instance of toModule by instantiating its bound parameters. // // We're not sure whether instantiating a legal module with bound parameters // can ever fail; and this could change in the future. // For robustness we assert that it can't so we notice it during // debugging and then handle in anyway. // ImportModule* targetInstance = toModule->instantiateBoundParameters(toModuleArgs, owner); Assert(targetInstance != 0, "failed to instantiate toModule for " << this); return targetInstance; } bool View::handleInstantiationByTheoryView(View* copy, Renaming* canonicalRenaming, ParameterMap& parameterMap, ParameterSet& extraParameterSet, const Vector& arguments) const { // // We return true if all parameters taking theory-view arguments were // successfully instantiated and false if there was a problem. // ParameterSet parametersTakingTheoryViews; int nrParameters = getNrParameters(); for (int i = 0; i < nrParameters; ++i) { if (View* argumentView = dynamic_cast(arguments[i])) { ImportModule* viewToTheory = argumentView->getToModule(); if (viewToTheory->isTheory()) { // // Check to see if we can instantiate this parameter to a theory-view // without trigger a conflict with some other parameter already // instantiated to a theory-view. Note that a parameter can have // a conflict with itself in which case it can never take a theory-view. // int parameterName = parameters[i].name; parametersTakingTheoryViews.insert(parameterName); int firstClash = findFirstClash(parametersTakingTheoryViews, parameterName); if (firstClash != NONE) { if (firstClash == parameterName) { IssueWarning("In nonfinal view instantiation " << QUOTE(copy) << " parameter " << QUOTE(Token::name(parameterName)) << " may not take a theory-view because it has a self-conflict in the underlying view " << QUOTE(this) << "."); } else { IssueWarning("In nonfinal view instantiation " << QUOTE(copy) << " parameters " << QUOTE(Token::name(firstClash)) << " and " << QUOTE(Token::name(parameterName)) << " cannot both be instantiated by theory-views because of a conflict in the underlying view " << QUOTE(this) << "."); } return false; } // // A theory-view changes the theory of a parameter // while maintaining the parameter name. // copy->addParameter(parameterName, viewToTheory); // copy becomes a user of the theory viewToModule // // If parameter X :: T was instantiated by V from T to T' we need to map // // Sort{X} |-> Sort{V}{X} // // If by chance V and X share the same name, we don't add an identity mapping. // int viewName = argumentView->getCleanName(); if (parameterName != viewName) parameterMap[parameterName] = viewName; extraParameterSet.insert(parameterName); // // Since we store parameter theories rather than parameter theory copies (unlike ImportModule) // we need to make the copy - it will already be in the module cache since our toModule imports it. // ImportModule* parameterCopyOfTheory = owner->makeParameterCopy(parameterName, parameters[i].theory); // // We rely on the parameter copies to do the heavy lifting of // adding sort and operator renamings to our canonicalRenaming. // parameterCopyOfTheory->addSortMappingsFromTheoryView(canonicalRenaming, parameterName, argumentView); parameterCopyOfTheory->addOpMappingsFromView(canonicalRenaming, argumentView, parameterCopyOfTheory); parameterCopyOfTheory->addStratMappingsFromView(canonicalRenaming, argumentView, parameterCopyOfTheory); } } } return true; } void View::handleInstantiationByParameter(View* copy, Renaming* canonicalRenaming, ParameterMap& parameterMap, NatSet& positionsInstantiatedParameter, const Vector& arguments) const { int nrParameters = getNrParameters(); for (int i = 0; i < nrParameters; ++i) { if (Parameter* p = dynamic_cast(arguments[i])) { // // We map the old parameter name to the new parameter name. // int newParameterName = p->id(); int oldParameterName = parameters[i].name; if (copy->findParameterIndex(newParameterName) == NONE) { // // Our instantiation doesn't already have a parameter // with this name so we must add one. // // The base parameter theory doesn't change and views deal with // original theories, not parameter copies so we can reuse the // parameter theory from our base view. // ImportModule* baseParameterTheory = parameters[i].theory; DebugInfo("binding parameter " << Token::name(oldParameterName) << " to parameter " << Token::name(newParameterName) << " of theory " << baseParameterTheory << " from an enclosing object"); copy->addParameter(newParameterName, baseParameterTheory); // copy becomes a user of baseParameterTheory copy->addBoundParameter(newParameterName); } if (oldParameterName != newParameterName) { // // If the parameter changed names, say from X to Y, then we need to map // both parameterized sorts and parameter copies of the theory sorts. // // Sort{X} |-> Sort{Y} // parameterMap[oldParameterName] = newParameterName; // // Since we store parameter theories rather than parameter theory copies (unlike ImportModule) // we need to make the copy - it will already be in the module cache since our toModule imports it. // ImportModule* parameterCopyOfTheory = owner->makeParameterCopy(oldParameterName, parameters[i].theory); // // For each Foo -> X$Foo we mapped in the parameter copy of the parameter theory, // X$Foo |-> Y$Foo // parameterCopyOfTheory->addSortRenamingsForParameterChange(canonicalRenaming, newParameterName); } positionsInstantiatedParameter.insert(i); // // In principle we should propagate conflicts between positions instantiated by bare variables // into copy. In practice this is not necessary. // If a parameter is involved in a conflict, the conflict must have come from our toModule // and the parameter must be bound in our toModule. // Now copy will get a toModule that is an instantiated version of our toModule, and // module instantiation takes care of propagating conflicts on bare parameters. Thus // copy will eventually get any such conflicts from its toModule. // } } } void View::handleInstantiationByModuleView(View* copy, Renaming* canonicalRenaming, ParameterMap& parameterMap, const NatSet& positionsInstantiatedParameter, const Vector& arguments) const { int nrParameters = getNrParameters(); for (int i = 0; i < nrParameters; ++i) { Argument* argument = arguments[i]; if (View* argumentView = dynamic_cast(argument)) { if (!(toModule->isTheory())) { // // We map the parmeter name to the argument view name. // int viewName = argumentView->getCleanName(); int parameterName = parameters[i].name; if (parameterName != viewName) parameterMap[parameterName] = viewName; // // Since we store parameter theories rather than parameter theory copies (unlike ImportModule) // we need to make the copy - it will already be in the module cache since our toModule imports it. // ImportModule* parameterCopyOfTheory = owner->makeParameterCopy(parameterName, parameters[i].theory); // // For each Foo -> X$Foo we mapped in the parameter copy of the parameter theory, // we need to have a mapping X$Foo -> Bar where Bar is the target of Foo in our view. // parameterCopyOfTheory->addSortMappingsFromModuleView(canonicalRenaming, argumentView); parameterCopyOfTheory->addOpMappingsFromView(canonicalRenaming, argumentView, parameterCopyOfTheory); parameterCopyOfTheory->addStratMappingsFromView(canonicalRenaming, argumentView, parameterCopyOfTheory); // // Need to check if the argument view itself has bound parameters. // int nrBoundParameters = argumentView->getNrParameters(); if (nrBoundParameters != 0) { DebugInfo("instantiation by module-view " << argumentView << " with bound parameters"); for (int j = 0; j < nrBoundParameters; ++j) { int parameterName = argumentView->getParameterName(j); DebugInfo("--- looking at parameter " << Token::name(parameterName)); // // We need this parameter for our instantiation, because // it is need to instantiate a module-view. Thus it must // be added as a bound parameter for our instantiation. // if (copy->findParameterIndex(parameterName) == NONE) { // // Our instantiation doesn't already have a parameter // with this name so we must add one. // // The base parameter theory doesn't change and views deal with // original theories, not parameter copies so we can reuse the // parameter theory from our argument view. // ImportModule* baseParameterTheory = argumentView->getParameterTheory(j); DebugInfo("--- for parameter " << Token::name(parameterName) << " of theory " << baseParameterTheory << " from enclosing object needed to instantiate argument view " << argumentView << " we make add it as a bound parameter"); copy->addParameter(parameterName, baseParameterTheory); // copy becomes a user of baseParameterTheory copy->addBoundParameter(parameterName); } } } // // Normally any conflicts in a module-view argument would also end up // propagated into the instantiation of our toModule and get into copy that way. // There is an exception though: currently we don't insist that every // parameter in a view be a bound parameter in the view's toModule. // In this unlikely case we need to add-in any conflicts from the // module-view to copy directly. So we do the add-in anyway. // // 5/9/18 We no longer allow toModules not to take all our parameters so we don't // do the copy // //copy->addInAllConflicts(argumentView); // // Need to add any conflicts between the bound parameters in our argument // and bare paramters in the same instantiation. // This is one of two places where new conflicts are generated ab initio. // If the instantiation looks like viewExp'{..., viewExpr,..., X,...} // then X will have a conflict with all bound parameters in viewExpr, since // it has the possibility of leaving them stranded in a nonfinal instantiation // should both recieve theory-views in a nonfinal instantiation. // FOR_EACH_CONST(j, NatSet, positionsInstantiatedParameter) { int bareParameterName = safeCast(Parameter*, arguments[*j])->id(); copy->addConflictsWithBoundParameters(argumentView, bareParameterName); } } } } } void View::handleSortMappings(View* copy, const Renaming* canonicalRenaming) const { // // For each sort in fromTheory, we first push it through our own // sort mappings and then the canonical renaming. This catches pathological // cases where there is a sort X$Elt in fromTheory that is implicitly mapped // to X$Elt in a parameterTheory and then needs to be mapped explicitly // after instantiation. Not even clear we should allow such mischief but // for the moment we support it. // int nrUserSorts = fromTheory->getNrUserSorts(); const Vector& sortVec = fromTheory->getSorts(); for (int i = 0; i < nrUserSorts; ++i) { Sort* s = sortVec[i]; if (!(fromTheory->moduleDeclared(s))) { // // Only theory declared sorts get mapped. // int sortName = s->id(); int ourMapping = renameSort(sortName); int instantiationMapping = canonicalRenaming->renameSort(ourMapping); if (sortName != instantiationMapping) copy->addSortMapping(sortName, instantiationMapping); } } } void View::handleOpMappings(View* copy, const Renaming* canonicalRenaming) const { // // For each operator in fromTheory we first push it through our own // op->op mappings (our op->term mappings are handled separately) // and then through the canonical renaming. This catches the // pathological case where there is an operator in fromTheory // that is implicitly mapped to an operator in a parameter theory // when its domain and/or range sorts are mapped (implicitly or // explicitly) to those from a parameter theory. // DebugNew("canonicalRenaming = " << canonicalRenaming); int nrUserSymbols = fromTheory->getNrUserSymbols(); const Vector& symbolVec = fromTheory->getSymbols(); for (int i = 0; i < nrUserSymbols; ++i) { Symbol* s = symbolVec[i]; if (!(fromTheory->moduleDeclared(s))) { // // Only theory declared operators get mapped. // Term* dummy1; Term* dummy2; if (getOpToTermMapping(s, dummy1, dummy2)) { // // This operator is mapped via an op->term mapping that // we deal with elsewhere. // continue; } int oldId = s->id(); int id = oldId; int index = renameOp(s); if (index != NONE) { id = getOpTo(index); DebugNew("first step " << s << " to " << Token::name(id)); } int nrArgs = s->arity(); Vector domainComponents(nrArgs); for (int j = 0; j < nrArgs; ++j) domainComponents[j] = mapComponent(s->domainComponent(j)); ConnectedComponent* rangeComponent = mapComponent(s->rangeComponent()); Symbol* t = toModule->findSymbol(id, domainComponents, rangeComponent); Assert(t != 0, "can't find operator " << Token::name(id) << " in module " << toModule << " that is translated from " << s << " in theory " << fromTheory << " by view " << this); int index2 = canonicalRenaming->renameOp(t); if (index2 != NONE) { Term* toTerm = canonicalRenaming->getOpTargetTerm(index2); if (toTerm != 0) { handleAwkwardCase(copy, s, canonicalRenaming->getFromTerm(index2), toTerm); continue; } id = canonicalRenaming->getOpTo(index2); DebugNew("second step " << t << " to " << Token::name(id)); } if (oldId != id) { // // Need to add an op->op mapping. We always make it specific. // copy->addOpMapping(oldId); for (int i = 0; i < nrArgs; ++i) copy->addType(s->domainComponent(i)); copy->addType(s->rangeComponent()); copy->addOpTarget(id); DebugNew("adding " << s << " to " << Token::name(id) << " for view instantiation " << this); } } } } void View::handleAwkwardCase(View* copy, Symbol* symbol, Term* fromTerm, Term* toTerm) const { // // We have symbol from our fromTheory which is explicitly or implicity // mapped to a symbol' from one of our parameter theories. Now this parameter // theory has been instantiated by a view that maps symbol' to a term toTerm. // In order to handle this we need to synthesize an op->term mapping that // takes symbol to toTerm and add it to copy. // We do this an a very inefficient manner since this is a rare edge case. // int nrArgs = symbol->arity(); // // First we synthesize a fromTerm for symbol. // Vector arguments(nrArgs); int j = 0; for (ArgumentIterator i(*fromTerm); i.valid(); i.next(), ++j) { VariableTerm* vt = safeCast(VariableTerm*, i.argument()); int variableName = vt->id(); const ConnectedComponent* component = symbol->domainComponent(j); Sort* sort = component->sort(Sort::FIRST_USER_SORT); VariableSymbol* variableSymbol = safeCast(VariableSymbol*, fromTheory->instantiateVariable(sort)); arguments[j] = new VariableTerm(variableSymbol, variableName); } Term* newFromTerm = symbol->makeTerm(arguments); // // We next make a copy of toTerm; this will not have variable indices. // ImportTranslation toTermTranslation(copy->toModule); Term* toTermCopy = toTerm->deepCopy(&toTermTranslation); // // Finally we insert it into the view instantiation. // copy->insertOpToTermMapping(newFromTerm, toTermCopy); DebugNew("inserted " << newFromTerm << " to term " << toTermCopy << " into " << copy << " during the instantiation of " << this); } void View::handleOpToTermMappings(View* copy, Renaming* canonicalRenaming) const { if (!(opTermMap.empty())) { // // For each operator mapping // op f(X, Y, Z) to term t(...) // in us, we need to make an instantiated version in copy. // // Since our fromTheory doesn't change, we just need to make an identity copy for the lhs. // ImportTranslation fromTermTranslation(fromTheory); // // The rhs needs be pushed through the canonicaRenaming to deal with // any operators from parameter theories that got instantiated by // argumentsViews and any sort tests against sorts from parameter theories // that have been instantiated. // ImportTranslation toTermTranslation(copy->toModule, canonicalRenaming); FOR_EACH_CONST(i, OpTermMap, opTermMap) { Term* fromTerm = i->second.first->deepCopy(&fromTermTranslation); Term* toTerm = i->second.second->deepCopy(&toTermTranslation); // // This is a slow way to get toTerm indexed and fromTerm and toTerm inserted // into the map - but we expect this case to be very rare so its not worth // the code to do something smarter. // copy->insertOpToTermMapping(fromTerm, toTerm); DebugNew("instantiating " << this << " to " << copy << " inserted op->term mapping " << fromTerm << " to " << toTerm); } } } void View::handlePolymorphMappings(View* copy, const Renaming* canonicalRenaming) const { int nrPolymorphs = fromTheory->getNrPolymorphs(); for (int i = 0; i < nrPolymorphs; ++i) { if (!(fromTheory->moduleDeclaredPolymorph(i))) { // // Only theory declared polymorphs get mapped. // int name = fromTheory->getPolymorphName(i).code(); // // See if mapped by us. // int index = renamePolymorph(name); int newName = (index == NONE) ? name : getOpTo(index); // // See if mapping in canonicalRenaming. // int index2 = canonicalRenaming->renamePolymorph(newName); if (index2 != NONE) newName = canonicalRenaming->getOpTo(index2); // // If all this resulted in a name change, add a generic // operator mapping to our instantiation. // if (name != newName) { copy->addOpMapping(name); copy->addOpTarget(newName); DebugNew("instantiating " << this << " to " << copy << " inserted polymorph mapping " << Token::name(name) << " to " << Token::name(newName)); } } } } void View::handleStratMappings(View* copy, const Renaming* canonicalRenaming) const { // // For each operator in fromTheory we first push it through our own // op->op mappings (our op->term mappings are handled separately) // and then through the canonical renaming. This catches the // pathological case where there is an operator in fromTheory // that is implicitly mapped to an operator in a parameter theory // when its domain and/or range sorts are mapped (implicitly or // explicitly) to those from a parameter theory. // DebugNew("canonicalRenaming = " << canonicalRenaming); const Vector& symbolVec = fromTheory->getStrategies(); int nrUserSymbols = symbolVec.length(); for (int i = 0; i < nrUserSymbols; ++i) { RewriteStrategy* s = symbolVec[i]; if (!(fromTheory->moduleDeclared(s))) { // // Only theory declared operators get mapped. // CallStrategy* dummy1; StrategyExpression* dummy2; const Vector* dummy3; if (getStratToExprMapping(s, dummy1, dummy2, dummy3)) { // // This operator is mapped via an strat->expr mapping that // we deal with elsewhere. // continue; } int oldId = s->id(); int id = oldId; int index = renameStrat(s); if (index != NONE) { id = getOpTo(index); DebugNew("first step " << s << " to " << Token::name(id)); } int nrArgs = s->arity(); const Vector& domainSorts = s->getDomain(); Vector domainComponents(nrArgs); for (int j = 0; j < nrArgs; ++j) domainComponents[j] = mapComponent(domainSorts[i]->component()); RewriteStrategy* t = toModule->findStrategy(id, domainComponents); Assert(t != 0, "can't find strategy " << Token::name(id) << " in module " << toModule << " that is translated from " << s << " in theory " << fromTheory << " by view " << this); int index2 = canonicalRenaming->renameStrat(t); if (index2 != NONE) { StrategyExpression* toExpr = canonicalRenaming->getStratTargetExpr(index2); if (toExpr != 0) { handleStratAwkwardCase(copy, s, canonicalRenaming->getStratFromCall(index2), toExpr, canonicalRenaming->getStratVarIndices(index2)); continue; } id = canonicalRenaming->getOpTo(index2); DebugNew("second step " << t << " to " << Token::name(id)); } if (oldId != id) { // // Need to add an op->op mapping. We always make it specific. // copy->addStratMapping(oldId); for (int i = 0; i < nrArgs; ++i) copy->addType(domainSorts[i]->component()); copy->addType(s->getSubjectSort()->component()); copy->addStratTarget(id); DebugNew("adding " << s << " to " << Token::name(id) << " for view instantiation " << this); } } } } void View::handleStratAwkwardCase(View* copy, RewriteStrategy* s, CallStrategy* fromCall, StrategyExpression* toExpr, const Vector& varIndices) const { // // This is the same case as handleAwkwardCase, but for strategies. // int nrArgs = s->arity(); // // First we synthesize a fromTerm for symbol. // Vector arguments(nrArgs); const Vector& domain = s->getDomain(); int j = 0; for (ArgumentIterator i(*fromCall->getTerm()); i.valid(); i.next(), ++j) { VariableTerm* vt = safeCast(VariableTerm*, i.argument()); int variableName = vt->id(); const ConnectedComponent* component = domain[j]->component(); Sort* sort = component->sort(Sort::FIRST_USER_SORT); VariableSymbol* variableSymbol = safeCast(VariableSymbol*, fromTheory->instantiateVariable(sort)); arguments[j] = new VariableTerm(variableSymbol, variableName); } CallStrategy* newFromCall = new CallStrategy(s, s->makeAuxiliaryTerm(arguments)); // // We next make a copy of toExpr. // ImportTranslation toExprTranslation(copy->toModule); StrategyExpression* toExprCopy = ImportModule::deepCopyStrategyExpression(&toExprTranslation, toExpr); // // Finally we insert it into the view instantiation. // copy->insertStratToExprMapping(newFromCall, toExprCopy, copy->toModule); copy->addStratMappingVarIndices(varIndices); DebugNew("inserted " << newFromCall << " to expr " << toExprCopy << " into " << copy << " during the instantiation of " << this); } void View::handleStratToExprMappings(View* copy, Renaming* canonicalRenaming) const { if (!(stratExprMap.empty())) { // // For each strategy mapping // strat f(X, Y, Z) to expr e(...) // in us, we need to make an instantiated version in copy. // // Since our fromTheory doesn't change, we just need to make an identity copy for the lhs. // ImportTranslation fromCallTranslation(fromTheory); // // The rhs needs be pushed through the canonicaRenaming to deal with // any operators from parameter theories that got instantiated by // argumentsViews and any sort tests against sorts from parameter theories // that have been instantiated. // ImportTranslation toExprTranslation(copy->toModule, canonicalRenaming); FOR_EACH_CONST(i, StratExprMap, stratExprMap) { CallStrategy* fromCall = static_cast(ImportModule::deepCopyStrategyExpression(&fromCallTranslation, i->second.call)); StrategyExpression* toExpr = ImportModule::deepCopyStrategyExpression(&toExprTranslation, i->second.value); copy->insertStratToExprMapping(fromCall, toExpr, copy->toModule); DebugNew("instantiating " << this << " to " << copy << " inserted strat->expr mapping " << fromCall << " to " << toExpr); } } } maude-3.1/src/Mixfix/Makefile.am0000755000175200017520000001073413720111436013472 00000000000000noinst_LIBRARIES = libmixfix.a if BUILD_COMPILER COMPILER_SRC = compiler.cc endif libmixfix_a_CPPFLAGS = \ -I$(top_srcdir)/src/Utility \ -I$(top_srcdir)/src/Temporal \ -I$(top_srcdir)/src/Interface \ -I$(top_srcdir)/src/Core \ -I$(top_srcdir)/src/Variable \ -I$(top_srcdir)/src/FullCompiler \ -I$(top_srcdir)/src/Higher \ -I$(top_srcdir)/src/CUI_Theory \ -I$(top_srcdir)/src/S_Theory \ -I$(top_srcdir)/src/NA_Theory \ -I$(top_srcdir)/src/FreeTheory \ -I$(top_srcdir)/src/ObjectSystem \ -I$(top_srcdir)/src/Mixfix \ -I$(top_srcdir)/src/BuiltIn \ -I$(top_srcdir)/src/Parser \ -I$(top_srcdir)/src/IO_Stuff \ -I$(top_srcdir)/src/ACU_Persistent \ -I$(top_srcdir)/src/ACU_Theory \ -I$(top_srcdir)/src/AU_Persistent \ -I$(top_srcdir)/src/AU_Theory \ -I$(top_srcdir)/src/Meta \ -I$(top_srcdir)/src/3rdParty \ -I$(top_srcdir)/src/FullCompiler \ -I$(top_srcdir)/src/StrategyLanguage \ -I$(top_srcdir)/src/SMT libmixfix_a_SOURCES = \ parameterDatabase.cc \ syntaxContainer.cc \ renaming.cc \ view.cc \ syntacticView.cc \ entity.cc \ moduleCache.cc \ moduleExpression.cc \ viewExpression.cc \ viewCache.cc \ enclosingObject.cc \ importModule.cc \ importTranslation.cc \ strategyTranslation.cc \ fileTable.cc \ loopSymbol.cc \ quotedIdentifierSymbol.cc \ quotedIdentifierDagNode.cc \ quotedIdentifierTerm.cc \ quotedIdentifierOpSymbol.cc \ mixfixModule.cc \ token.cc \ global.cc \ userLevelRewritingContext.cc \ preModule.cc \ syntacticPreModule.cc \ symbolType.cc \ xmlBuffer.cc \ maudemlBuffer.cc \ interpreter.cc \ moduleDatabase.cc \ viewDatabase.cc \ profileModule.cc \ mixfixParser.cc \ visibleModule.cc \ sharedTokens.cc \ metadataStore.cc \ printAttribute.cc \ banner.cc \ lexer.cc \ tokenizer.cc \ surface.cc \ freshVariableSource.cc \ variableGenerator.cc \ tokenizer.cc \ $(COMPILER_SRC) EXTRA_libmixfix_a_SOURCES = \ compiler.cc BUILT_SOURCES = surface.yy surface.cc surface.h lexer.cc tokenizer.cc CLEANFILES = surface.yy surface.cc surface.h lexer.cc tokenizer.cc surface.yy: \ $(srcdir)/top.yy \ $(srcdir)/modules.yy \ $(srcdir)/commands.yy \ $(srcdir)/bottom.yy cat \ $(srcdir)/top.yy \ $(srcdir)/modules.yy \ $(srcdir)/commands.yy \ $(srcdir)/bottom.yy \ > surface.yy surface.cc surface.h: surface.yy $(BISON) -dv surface.yy -o surface.c mv surface.c surface.cc # According to the manual, automake is supposed to grok # .ll files and do the right thing... but it doesn't # seem to work so... lexer.cc: \ $(srcdir)/lexer.ll surface.h $(FLEX) -t -p -p $(srcdir)/lexer.ll > lexer.cc tokenizer.cc: \ $(srcdir)/tokenizer.ll $(FLEX) -Pzz -t -p -p $(srcdir)/tokenizer.ll > tokenizer.cc EXTRA_DIST = \ renameModule.cc \ parameterization.cc \ instantiateModuleWithFreeParameters.cc \ instantiateModuleWithBoundParameters.cc \ instantiateViewWithFreeParameters.cc \ instantiateViewWithBoundParameters.cc \ lexerAux.cc \ process.cc \ fixUp.cc \ ops.cc \ command.cc \ entry.cc \ prettyPrint.cc \ bufferPrint.cc \ specialSymbolTypes.cc \ specialTokens.cc \ doParse.cc \ makeGrammar.cc \ auxProperty.cc \ termPrint.cc \ dagNodePrint.cc \ sharedPrint.cc \ strategyPrint.cc \ interact.cc \ trial.cc \ execute.cc \ loopMode.cc \ search.cc \ srewrite.cc \ erewrite.cc \ match.cc \ unify.cc \ top.yy \ modules.yy \ commands.yy \ bottom.yy \ lexer.ll \ tokenizer.ll \ graphPrint.cc \ ansiEscapeSequences.cc \ narrowing.cc \ variantUnify.cc \ variantMatch.cc \ getVariants.cc \ smtSearch.cc \ cvc4_Bindings.cc \ yices2_Bindings.cc \ quotedIdentifierOpSignature.cc \ tokenizer.ll noinst_HEADERS = \ renaming.hh \ view.hh \ syntacticView.hh \ entity.hh \ moduleCache.hh \ moduleExpression.hh \ viewCache.hh \ viewExpression.hh \ sharedTokens.hh \ compiler.hh \ fileTable.hh \ importModule.hh \ importTranslation.hh \ interpreter.hh \ lexerAux.hh \ loopSymbol.hh \ global.hh \ maudemlBuffer.hh \ metadataStore.hh \ printAttribute.hh \ mixfix.hh \ mixfixModule.hh \ mixfixParser.hh \ moduleDatabase.hh \ viewDatabase.hh \ preModule.hh \ syntacticPreModule.hh \ profileModule.hh \ quotedIdentifierDagNode.hh \ quotedIdentifierOpSymbol.hh \ quotedIdentifierSymbol.hh \ quotedIdentifierTerm.hh \ symbolType.hh \ token.hh \ userLevelRewritingContext.hh \ visibleModule.hh \ xmlBuffer.hh \ syntaxContainer.hh \ freshVariableSource.hh \ variableGenerator.hh \ cacheableRewritingContext.hh \ cvc4_Bindings.hh \ yices2_Bindings.hh \ enclosingObject.hh \ argument.hh \ parameter.hh \ parameterDatabase.hh maude-3.1/src/Mixfix/maudemlBuffer.hh0000644000175200017520000000562713576050635014553 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class to generate MaudeML from Maude internal data structures. // #ifndef _maudemlBuffer_hh_ #define _maudemlBuffer_hh_ #include "xmlBuffer.hh" class MaudemlBuffer : public XmlBuffer { NO_COPYING(MaudemlBuffer); public: MaudemlBuffer(ostream& output); void generateShowSearchPath(int stateNr); void generateShowSearchGraph(); void generateReduce(DagNode* subject); void generateRewrite(DagNode* subject, Int64 limit); void generateFrewrite(DagNode* subject, Int64 limit, Int64 gas); void generateErewrite(DagNode* subject, Int64 limit, Int64 gas); void generateSRewrite(DagNode* subject, StrategyExpression* expression, Int64 limit, bool depthSearch); void generateSearch(DagNode* subject, PreEquation* pattern, const string& searchType, Int64 limit, Int64 depth); void generateContinue(const string& command, Module* module, Int64 limit); void generateSearchResult(Int64 number, RewriteSequenceSearch* state, const Timer& timer, bool showStats, bool showTiming, bool showBreakdown); void generateSubstitution(const Substitution* substitution, const VariableInfo* varInfo); void generateAssignment(Term* variable, DagNode* value); // void generateShow(const string& item, Module* module = 0); void generate(Term* term); void generate(const ConditionFragment* c); void generate(Rule* rule); void generate(DagNode* dagNode, PointerSet* visited = 0); void generate(StrategyExpression* strat); void generateSearchGraph(RewriteSequenceSearch* graph); void generateSearchPath(RewriteSequenceSearch* graph, int stateNr); void generateCondition(const Vector& condition); void generateResult(RewritingContext& context, const Timer& timer, bool showStats, bool showTiming, bool showBreakdown); private: static string sortString(Sort* sort); static string kindString(ConnectedComponent* kind); void generateStats(RewritingContext& context, const Timer& timer, bool showTiming, bool showBreakdown); }; #endif maude-3.1/src/Mixfix/search.cc0000755000175200017520000003114513730256011013211 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Code for search command. // #include "equalityConditionFragment.hh" #include "SMT_RewriteSequenceSearch.hh" #include "narrowingSequenceSearch3.hh" #include "narrowing.cc" #include "smtSearch.cc" void Interpreter::printSearchTiming(const Timer& timer, RewriteSequenceSearch* state) { if (getFlag(SHOW_STATS)) { cout << "states: " << state->getNrStates() << " "; printStats(timer, *(state->getContext()), getFlag(SHOW_TIMING)); } } bool Interpreter::checkSearchRestrictions(SearchKind searchKind, int searchType, Term* target, const Vector& condition, MixfixModule* module) { switch (searchKind) { case NARROW: case XG_NARROW: case VU_NARROW: case FVU_NARROW: { // // Narrowing does not support conditions. // if (!condition.empty()) { IssueWarning(*target << ": conditions are not currently supported for narrowing."); return false; } break; } case SMT_SEARCH: { // // SMT search does not support =>! mode since states are symbolic. // if (searchType == SequenceSearch::NORMAL_FORM) { IssueWarning(*target << ": =>! mode is not supported for searching modulo SMT."); return false; } // // Only equational condition fragments are supported since they need to pushed in to the SMT solver. // // // Module must satisfy many restrictions. // if (!(module->validForSMT_Rewriting())) { IssueWarning(*module << ": module " << QUOTE(module) << " does not satisfy restrictions for rewriting modulo SMT."); return false; } // // Target can't contain SMT operators. // if (Symbol* s = module->findSMT_Symbol(target)) { IssueWarning(*target << ": pattern contains SMT symbol " << QUOTE(s) << "."); return false; } // // Target can't contain nonlinear variables. // VariableInfo variableInfo; if (Term* v = MixfixModule::findNonlinearVariable(target, variableInfo)) { IssueWarning(*target << ": pattern contains a nonlinear variable " << QUOTE(v) << "."); return false; } break; } default: break; } return true; } void Interpreter::search(const Vector& bubble, Int64 limit, Int64 depth, SearchKind searchKind, bool debug) { VisibleModule* fm = currentModule->getFlatModule(); Term* initial; int searchType; Term* target; Vector condition; if (!(fm->parseSearchCommand(bubble, initial, searchType, target, condition))) return; if (!checkSearchRestrictions(searchKind, searchType, target, condition, fm)) { initial->deepSelfDestruct(); target->deepSelfDestruct(); FOR_EACH_CONST(i, Vector, condition) delete *i; return; } Pattern* pattern = (searchKind == VU_NARROW || searchKind == FVU_NARROW || searchKind == SMT_SEARCH) ? 0 : new Pattern(target, false, condition); // // Regular seach cannot have unbound variables. // if (searchKind == SEARCH && !(pattern->getUnboundVariables().empty())) { IssueWarning(*target << ": variable " << QUOTE(pattern->index2Variable(pattern->getUnboundVariables().min())) << " is used before it is bound in the condition of a search command.\n"); initial->deepSelfDestruct(); delete pattern; return; } DagNode* subjectDag = makeDag(initial); static const char* searchTypeSymbol[] = { "=>1", "=>+", "=>*", "=>!" }; if (getFlag(SHOW_COMMAND)) { static const char* searchKindName[] = { "search", "narrow", "xg-narrow", "smt-search", "vu-narrow", "fvu-narrow"}; UserLevelRewritingContext::beginCommand(); if (debug) cout << "debug "; cout << searchKindName[searchKind] << ' '; printModifiers(limit, depth); cout << subjectDag << ' ' << searchTypeSymbol[searchType] << ' ' << target; if (!condition.empty()) { cout << " such that "; MixfixModule::printCondition(cout, condition); } cout << " ." << endl; if (xmlBuffer != 0) xmlBuffer->generateSearch(subjectDag, pattern, searchTypeSymbol[searchType], limit, depth); // does this work for narrowing? } startUsingModule(fm); if (debug) UserLevelRewritingContext::setDebug(); QUANTIFY_START(); if (searchKind == SEARCH) { RewriteSequenceSearch* state = new RewriteSequenceSearch(new UserLevelRewritingContext(subjectDag), static_cast(searchType), pattern, depth); Timer timer(getFlag(SHOW_TIMING)); doSearching(timer, fm, state, 0, limit); } else if (searchKind == SMT_SEARCH) { const SMT_Info& smtInfo = fm->getSMT_Info(); VariableGenerator* vg = new VariableGenerator(smtInfo); RewritingContext* initial = new UserLevelRewritingContext(subjectDag); // // SMT_RewriteSequenceSearch takes responsibility for deleting // vg and initial. // SMT_RewriteSequenceSearch* smtSearch = new SMT_RewriteSequenceSearch(initial, static_cast(searchType), target, condition, smtInfo, vg, depth, 0); Timer timer(getFlag(SHOW_TIMING)); doSmtSearch(timer, fm, smtSearch, 0, limit); } else if (searchKind == VU_NARROW || searchKind == FVU_NARROW) { target = target->normalize(true); // we don't really need to normalize but we do need to set hash values DagNode* goal = target->term2Dag(); target->deepSelfDestruct(); NarrowingSequenceSearch3* state = new NarrowingSequenceSearch3(new UserLevelRewritingContext(subjectDag), static_cast(searchType), // HACK goal, depth, new FreshVariableSource(fm), (searchKind == FVU_NARROW) ? NarrowingSequenceSearch3::FOLD : 0); Timer timer(getFlag(SHOW_TIMING)); doVuNarrowing(timer, fm, state, 0, limit); } else { NarrowingSequenceSearch* state = new NarrowingSequenceSearch(new UserLevelRewritingContext(subjectDag), static_cast(searchType), // HACK pattern, depth, (searchKind == XG_NARROW ? (NarrowingSearchState::ALLOW_NONEXEC | NarrowingSearchState::SINGLE_POSITION) : NarrowingSearchState::ALLOW_NONEXEC), new FreshVariableSource(fm)); Timer timer(getFlag(SHOW_TIMING)); doNarrowing(timer, fm, state, 0, limit); } } void Interpreter::doSearching(Timer& timer, VisibleModule* module, RewriteSequenceSearch* state, Int64 solutionCount, Int64 limit) { const VariableInfo* variableInfo = state->getGoal(); Int64 i = 0; for (; i != limit; i++) { bool result = state->findNextMatch(); if (UserLevelRewritingContext::aborted()) break; // HACK: Is this safe - shouldn't we destroy context? if (!result) { cout << ((solutionCount == 0) ? "\nNo solution.\n" : "\nNo more solutions.\n"); printSearchTiming(timer, state); if (xmlBuffer != 0) { xmlBuffer->generateSearchResult(NONE, state, timer, getFlag(SHOW_STATS), getFlag(SHOW_TIMING), getFlag(SHOW_BREAKDOWN)); } break; } ++solutionCount; cout << "\nSolution " << solutionCount << " (state " << state->getStateNr() << ")\n"; printSearchTiming(timer, state); UserLevelRewritingContext::printSubstitution(*(state->getSubstitution()), *variableInfo); if (xmlBuffer != 0) { xmlBuffer->generateSearchResult(solutionCount, state, timer, getFlag(SHOW_STATS), getFlag(SHOW_TIMING), getFlag(SHOW_BREAKDOWN)); } } QUANTIFY_STOP(); clearContinueInfo(); // just in case debugger left info // // We always save these things even if we can't continue // in order to allow inspection of the search graph. // savedState = state; savedModule = module; if (i == limit) { // // The loop terminated because we hit user's limit so // continuation is still possible. We save the state, // solutionCount and module, and set a continutation function. // state->getContext()->clearCount(); savedSolutionCount = solutionCount; continueFunc = &Interpreter::searchCont; } UserLevelRewritingContext::clearDebug(); } void Interpreter::searchCont(Int64 limit, bool debug) { RewriteSequenceSearch* state = safeCast(RewriteSequenceSearch*, savedState); VisibleModule* fm = savedModule; savedState = 0; savedModule = 0; continueFunc = 0; if (xmlBuffer != 0 && getFlag(SHOW_COMMAND)) xmlBuffer->generateContinue("search", fm, limit); if (debug) UserLevelRewritingContext::setDebug(); QUANTIFY_START(); Timer timer(getFlag(SHOW_TIMING)); doSearching(timer, fm, state, savedSolutionCount, limit); } void Interpreter::showSearchPath(int stateNr) { RewriteSequenceSearch* savedRewriteSequenceSearch = dynamic_cast(savedState); if (savedRewriteSequenceSearch == 0) { IssueWarning("no state graph."); return; } if (stateNr < 0 || stateNr >= savedRewriteSequenceSearch->getNrStates()) { IssueWarning("bad state number."); return; } if (xmlBuffer != 0 && getFlag(SHOW_COMMAND)) xmlBuffer->generateShowSearchPath(stateNr); Vector steps; for (int i = stateNr; i != NONE; i = savedRewriteSequenceSearch->getStateParent(i)) steps.append(i); for (int i = steps.length() - 1; i >= 0; i--) { int sn = steps[i]; if (sn != 0) cout << "===[ " << savedRewriteSequenceSearch->getStateRule(sn) << " ]===>\n"; DagNode* d = savedRewriteSequenceSearch->getStateDag(sn); cout << "state " << sn << ", " << d->getSort() << ": " << d << '\n'; } if (xmlBuffer != 0) xmlBuffer->generateSearchPath(savedRewriteSequenceSearch, stateNr); } void Interpreter::showSearchPathLabels(int stateNr) { RewriteSequenceSearch* savedRewriteSequenceSearch = dynamic_cast(savedState); if (savedRewriteSequenceSearch == 0) { IssueWarning("no state graph."); return; } if (stateNr < 0 || stateNr >= savedRewriteSequenceSearch->getNrStates()) { IssueWarning("bad state number."); return; } Vector steps; for (int i = stateNr; i != NONE; i = savedRewriteSequenceSearch->getStateParent(i)) steps.append(i); int i = steps.length() - 2; if (i < 0) cout << "Empty path.\n"; else { for (; i >= 0; i--) { const Label& label = savedRewriteSequenceSearch->getStateRule(steps[i])->getLabel(); if (label.id() == NONE) cout << "(unlabeled rule)\n"; else cout << &label << '\n'; } } } void Interpreter::showSearchGraph() { RewriteSequenceSearch* savedRewriteSequenceSearch = dynamic_cast(savedState); if (savedRewriteSequenceSearch == 0) { IssueWarning("no state graph."); return; } if (xmlBuffer != 0 && getFlag(SHOW_COMMAND)) xmlBuffer->generateShowSearchGraph(); int nrStates = savedRewriteSequenceSearch->getNrStates(); for (int i = 0; i < nrStates; i++) { if (i > 0) cout << '\n'; DagNode* d = savedRewriteSequenceSearch->getStateDag(i); cout << "state " << i << ", " << d->getSort() << ": " << d << '\n'; const RewriteSequenceSearch::ArcMap& fwdArcs = savedRewriteSequenceSearch->getStateFwdArcs(i); int arcNr = 0; for (RewriteSequenceSearch::ArcMap::const_iterator j = fwdArcs.begin(); j != fwdArcs.end(); j++, arcNr++) { cout << "arc " << arcNr << " ===> state " << (*j).first; const set& r = (*j).second; for (set::const_iterator k = r.begin(); k != r.end(); k++) cout << " (" << *k << ')'; cout << '\n'; } } if (xmlBuffer != 0) xmlBuffer->generateSearchGraph(savedRewriteSequenceSearch); } maude-3.1/src/Mixfix/moduleExpression.cc0000644000175200017520000000751613576050735015330 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class ModuleExpression. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "core.hh" #include "interface.hh" #include "mixfix.hh" // front end class definitions #include "token.hh" #include "renaming.hh" #include "viewExpression.hh" #include "moduleExpression.hh" ModuleExpression::ModuleExpression(Token moduleName) : type(MODULE), moduleName(moduleName) { } ModuleExpression::ModuleExpression(ModuleExpression* left, ModuleExpression* right) : type(SUMMATION) { if (right->type == SUMMATION) { modules.swap(right->modules); delete right; } else modules.push_front(right); if (left->type == SUMMATION) { modules.splice(modules.begin(), left->modules); delete left; } else modules.push_front(left); } ModuleExpression::ModuleExpression(ModuleExpression* module, Renaming* renaming) : type(RENAMING), module(module), renaming(renaming) { } ModuleExpression::ModuleExpression(ModuleExpression* module, const Vector& arguments) : type(INSTANTIATION), module(module), arguments(arguments) { } void ModuleExpression::deepSelfDestruct() { switch (type) { case RENAMING: { module->deepSelfDestruct(); delete renaming; break; } case INSTANTIATION: { module->deepSelfDestruct(); FOR_EACH_CONST(i, Vector, arguments) (*i)->deepSelfDestruct(); break; } case SUMMATION: { FOR_EACH_CONST(i, list, modules) (*i)->deepSelfDestruct(); break; } case MODULE: break; // nothing to delete - avoid compiler warning } delete this; } ostream& operator<<(ostream& s, const ModuleExpression* expr) { switch (expr->getType()) { case ModuleExpression::MODULE: { s << expr->getModuleName(); break; } case ModuleExpression::SUMMATION: { const list& modules = expr->getModules(); const char* sep = ""; FOR_EACH_CONST(i, list, modules) { s << sep << *i; sep = " + "; } break; } case ModuleExpression::RENAMING: { const ModuleExpression* module = expr->getModule(); if (module->getType() == ModuleExpression::SUMMATION) s << '(' << module << ')'; else s << module; s << " * " << expr->getRenaming(); break; } case ModuleExpression::INSTANTIATION: { const ModuleExpression* module = expr->getModule(); if (module->getType() == ModuleExpression::SUMMATION || module->getType() == ModuleExpression::RENAMING) s << '(' << module << "){"; else s << module << '{'; const Vector& arguments = expr->getArguments(); const Vector::const_iterator e = arguments.end(); for (Vector::const_iterator i = arguments.begin();;) { s << *i; ++i; if (i == e) break; s << ", "; } s << '}'; break; } default: CantHappen("not implemented"); } return s; } maude-3.1/src/Mixfix/sharedTokens.hh0000644000175200017520000000220613576050635014415 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2006 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class to hold codes for special tokens that are shared between various classes. // #ifndef _sharedTokens_hh_ #define _sharedTokens_hh_ class SharedTokens { public: SharedTokens(); protected: #define MACRO(Name, String) \ static int Name; #include "specialTokens.cc" #undef MACRO }; #endif maude-3.1/src/Mixfix/loopSymbol.cc0000644000175200017520000001242513576050735014115 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class LoopSymbol. // // utility stuff #include "macros.hh" #include "vector.hh" //#include "stringTable.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "freeTheory.hh" #include "AU_Theory.hh" #include "NA_Theory.hh" #include "mixfix.hh" // interface class definitions #include "symbol.hh" #include "dagNode.hh" #include "rawDagArgumentIterator.hh" #include "rawArgumentIterator.hh" #include "term.hh" // core class definitions #include "dagArgumentIterator.hh" #include "argumentIterator.hh" #include "substitution.hh" #include "rewritingContext.hh" #include "symbolMap.hh" // free theory class definitions #include "freeDagNode.hh" // AU theory class definitions #include "AU_Symbol.hh" #include "AU_DagNode.hh" // built in class definitions #include "bindingMacros.hh" // front end class definitions #include "token.hh" #include "quotedIdentifierSymbol.hh" #include "quotedIdentifierDagNode.hh" #include "loopSymbol.hh" #include "token.hh" const Vector LoopSymbol::eagerStrategy; LoopSymbol::LoopSymbol(int id) : FreeSymbol(id, 3, eagerStrategy) { qidSymbol = 0; nilQidListSymbol = 0; qidListSymbol = 0; } bool LoopSymbol::attachData(const Vector& opDeclaration, const char* purpose, const Vector& data) { if (strcmp(purpose, "LoopSymbol") == 0) return data.length() == 0; return FreeSymbol::attachData(opDeclaration, purpose, data); } bool LoopSymbol::attachSymbol(const char* purpose, Symbol* symbol) { BIND_SYMBOL(purpose, symbol, qidSymbol, QuotedIdentifierSymbol*); BIND_SYMBOL(purpose, symbol, nilQidListSymbol, Symbol*); BIND_SYMBOL(purpose, symbol, qidListSymbol, AU_Symbol*); return FreeSymbol::attachSymbol(purpose, symbol); } void LoopSymbol::copyAttachments(Symbol* original, SymbolMap* map) { LoopSymbol* orig = safeCast(LoopSymbol*, original); COPY_SYMBOL(orig, qidSymbol, map, QuotedIdentifierSymbol*); COPY_SYMBOL(orig, nilQidListSymbol, map, Symbol*); COPY_SYMBOL(orig, qidListSymbol, map, AU_Symbol*); FreeSymbol::copyAttachments(original, map); } void LoopSymbol::getDataAttachments(const Vector& opDeclaration, Vector& purposes, Vector >& data) { APPEND_DATA(purposes, data, LoopSymbol); FreeSymbol::getDataAttachments(opDeclaration, purposes, data); } void LoopSymbol::getSymbolAttachments(Vector& purposes, Vector& symbols) { APPEND_SYMBOL(purposes, symbols, qidSymbol); APPEND_SYMBOL(purposes, symbols, nilQidListSymbol); APPEND_SYMBOL(purposes, symbols, qidListSymbol); FreeSymbol::getSymbolAttachments(purposes, symbols); } void LoopSymbol::injectInput(DagNode* loopNode, const Vector& bubble) { FreeDagNode* f = static_cast(loopNode); Vector args(3); args[0] = createQidList(bubble); args[1] = f->getArgument(1); args[2] = new FreeDagNode(nilQidListSymbol); DagNode* n = makeDagNode(args); // // We assume that loopNode is a root with no other users so // we can overwrite it in place. // n->overwriteWithClone(loopNode); } DagNode* LoopSymbol::createQidList(const Vector& ids) { int nrIds = ids.length(); if (nrIds == 0) return new FreeDagNode(nilQidListSymbol); if (nrIds == 1) return new QuotedIdentifierDagNode(qidSymbol, ids[0].code()); Vector args(nrIds); for (int i = 0; i < nrIds; i++) args[i] = new QuotedIdentifierDagNode(qidSymbol, Token::backQuoteSpecials(ids[i].code())); return qidListSymbol->makeDagNode(args); } bool LoopSymbol::extractOutput(DagNode* loopNode, Vector& bubble) { FreeDagNode* f = static_cast(loopNode); return extractQidList(f->getArgument(2), bubble); } bool LoopSymbol::extractQid(DagNode* metaQid, int& id) { if (metaQid->symbol() == qidSymbol) { id = Token::unBackQuoteSpecials(static_cast(metaQid)->getIdIndex()); return true; } return false; } bool LoopSymbol::extractQidList(DagNode* metaQidList, Vector& ids) { ids.contractTo(0); Symbol* mq = metaQidList->symbol(); int id; if (mq == qidListSymbol) { for (DagArgumentIterator i(metaQidList); i.valid(); i.next()) { if (!extractQid(i.argument(), id)) return false; ids.append(id); } } else if (extractQid(metaQidList, id)) ids.append(id); else if (mq != nilQidListSymbol) return false; return true; } maude-3.1/src/Mixfix/entity.cc0000644000175200017520000000577613576050735013305 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Implementation for class Entity. // // utility stuff #include "macros.hh" #include "vector.hh" // forward declarations #include "interface.hh" #include "core.hh" #include "strategyLanguage.hh" #include "mixfix.hh" // front end class definitions #include "importModule.hh" #include "syntacticPreModule.hh" #include "view.hh" #include "entity.hh" #ifndef NO_ASSERT ostream& operator<<(ostream& s, const Entity* e) { if (const ImportModule* m = dynamic_cast(e)) s << "module " << m; else if (const View* v = dynamic_cast(e)) s << "view " << v; else s << "unknown entity"; return s; } ostream& operator<<(ostream& s, const Entity::User* u) { if (const PreModule* p = dynamic_cast(u)) s << "premodule " << p; else if (const ImportModule* m = dynamic_cast(u)) s << "module " << m; else if (const View* v = dynamic_cast(u)) s << "view " << v; else s << "unknown user"; return s; } #endif void Entity::addUser(User* user) { if (users.insert(user).second) { //DebugAdvisory("added " << user << " to user set for " << this); } else { //DebugAdvisory(user << " is already in user set for " << this); } } void Entity::removeUser(User* user) { if (users.erase(user) == 1) { //DebugAdvisory("removed " << user << " from user set for " << this); } else { //DebugAdvisory("missing " << user << " in user set for " << this); } } void Entity::informUsers() { //DebugAdvisory(this << " informs users"); // // We need to be careful since informing a user will often cause the user // and/or other users to be removed, invalidating iterators. // const UserSet::const_iterator e = users.end(); User* last = 0; for (;;) { UserSet::iterator i = users.begin(); // first surviving user if (i == e) break; // no more users User* user = *i; if (user == last) users.erase(i); // remove user from set - we normally expect a user to remove itself else { user->regretToInform(this); // invalidates i since user may remove itself from set last = user; } } } maude-3.1/src/Mixfix/xmlBuffer.hh0000644000175200017520000000306213576050635013716 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class to handle XML syntax and formatting. // #ifndef _xmlBuffer_hh_ #define _xmlBuffer_hh_ #include #include class XmlBuffer { NO_COPYING(XmlBuffer); public: XmlBuffer(ostream& output, int flushLevel = NONE); ~XmlBuffer(); void beginElement(const string& name); void endElement(); void attributePair(const string& name, const string& value); void attributePair(const string& name, const string& value, int index); void characterData(const string& charData); void comment(const string& text); private: void indent(); void translate(const string& value); ostream& output; const int flushLevel; stack elements; int indentLevel; bool startTagIncomplete; }; #endif maude-3.1/src/Mixfix/specialTokens.cc0000644000175200017520000000747713576050735014575 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2006 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // List of all the tokens special enough that we keep track of their id // in the symbol table. // // We generate various chunks of linear (branching) code to handle // this hetrogeneous collection by macro expansion. // The format is: // MACRO(name, string) // MACRO(leftParen, "(") MACRO(rightParen, ")") MACRO(leftBracket, "[") MACRO(rightBracket, "]") MACRO(leftBrace, "{") MACRO(rightBrace, "}") MACRO(comma, ",") MACRO(underscore, "_") MACRO(dot, ".") MACRO(equals, "=") MACRO(assign, ":=") MACRO(arrow, "=>") MACRO(arrowOne, "=>1") MACRO(arrowPlus, "=>+") MACRO(arrowStar, "=>*") MACRO(arrowBang, "=>!") MACRO(suchThat, "s.t.") MACRO(such, "such") MACRO(that, "that") MACRO(mb, "mb") MACRO(cmb, "cmb") MACRO(eq, "eq") MACRO(ceq, "ceq") MACRO(rl, "rl") MACRO(crl, "crl") MACRO(cq, "cq") MACRO(sd, "sd") MACRO(csd, "csd") MACRO(ifToken, "if") MACRO(colon, ":") MACRO(colon2, "::") MACRO(wedge, "/\\") MACRO(label, "label") MACRO(metadata, "metadata") MACRO(nonexec, "nonexec") MACRO(otherwise, "otherwise") MACRO(owise, "owise") MACRO(variant, "variant") MACRO(narrowing, "narrowing") MACRO(print, "print") MACRO(lessThan, "<") MACRO(partial, "~>") MACRO(th, "th") MACRO(fth, "fth") MACRO(sth, "sth") MACRO(mod, "mod") MACRO(fmod, "fmod") MACRO(smod, "smod") MACRO(omod, "omod") MACRO(obj, "obj") MACRO(endth, "endth") MACRO(endfth, "endfth") MACRO(endsth, "endsth") MACRO(endm, "endm") MACRO(endfm, "endfm") MACRO(endsm, "endsm") MACRO(endom, "endom") MACRO(endo, "endo") MACRO(jbo, "jbo") MACRO(pr, "pr") MACRO(protecting, "protecting") MACRO(ex, "ex") MACRO(extending, "extending") MACRO(inc, "inc") MACRO(including, "including") MACRO(us, "us") MACRO(usingToken, "using") MACRO(fail, "fail") MACRO(idle, "idle") MACRO(all, "all") MACRO(top, "top") MACRO(one, "one") MACRO(notToken, "not") MACRO(test, "test") MACRO(tryToken, "try") MACRO(semicolon, ";") MACRO(pipe, "|") MACRO(plus, "+") MACRO(star, "*") MACRO(bang, "!") MACRO(query, "?") MACRO(matches, "<=?") MACRO(unifies, "=?") MACRO(assignment, "<-") MACRO(orelse, "or-else") MACRO(match, "match") MACRO(xmatch, "xmatch") MACRO(amatch, "amatch") MACRO(matchrew, "matchrew") MACRO(xmatchrew, "xmatchrew") MACRO(amatchrew, "amatchrew") MACRO(by, "by") MACRO(irreducible, "irreducible") // // Special hook identifier tokens. // MACRO(bubble, "Bubble") MACRO(exclude, "Exclude") MACRO(qidSymbolToken, "qidSymbol") MACRO(nilQidListSymbolToken, "nilQidListSymbol") MACRO(qidListSymbolToken, "qidListSymbol") // // Pseudo-tokens needed as place holders for special terminals. // MACRO(smallNat, "[ SMALL_NAT ]") MACRO(zero, "[ ZERO ]") MACRO(smallNeg, "[ SMALL_NEG ]") MACRO(rational, "[ RATIONAL ]") MACRO(floatToken, "[ FLOAT ]") MACRO(quotedIdentifier, "[ QUOTED_IDENTIFIER ]") MACRO(stringToken, "[ STRING ]") MACRO(endsInColon, "[ ENDS_IN_COLON ]") maude-3.1/src/Mixfix/syntacticPreModule.hh0000644000175200017520000001405213576050635015603 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class for surface syntax of modules. // #ifndef _syntacticPreModule_hh_ #define _syntacticPreModule_hh_ #include #include "preModule.hh" #include "lineNumber.hh" #include "syntaxContainer.hh" #include "sharedTokens.hh" #include "importModule.hh" #include "moduleDatabase.hh" class SyntacticPreModule : public PreModule, public LineNumber, public SyntaxContainer, private SharedTokens { NO_COPYING(SyntacticPreModule); public: enum HookType { ID_HOOK, OP_HOOK, TERM_HOOK }; SyntacticPreModule(Token startToken, Token moduleName, Interpreter* owner); ~SyntacticPreModule(); void loseFocus(); void finishModule(Token endToken); bool isComplete(); void addParameter2(Token name, ModuleExpression* theory); void addImport(Token modeToken, ModuleExpression* expr); void addSortDecl(const Vector& sortDecl); void addSubsortDecl(const Vector& subsortDecl); void addOpDecl(const Vector& opName); void addStratDecl(Token opName); void makeDeclsConsistent(); void addType(bool kind, const Vector& tokens); void convertSortsToKinds(); void setFlag(int flag); void setPrec(Token range); void setGather(const Vector& gather); void setMetadata(Token metaDataTok); void setFormat(const Vector& format); void setIdentity(const Vector& identity); void setStrat(const Vector& strategy); void setFrozen(const Vector& frozen); void setPoly(const Vector& polyArgs); void setLatexMacro(const string& latexMacro); void addHook(HookType type, Token name, const Vector& details); void addVarDecl(Token varName); void addStatement(const Vector& statement); VisibleModule* getFlatSignature(); VisibleModule* getFlatModule(); const ModuleDatabase::ImportMap* getAutoImports() const; void dump(); void showModule(ostream& s = cout); // // Utility functions - maybe they should go elsewhere? // static void printGather(ostream& s, const Vector& gather); static void printFormat(ostream& s, const Vector& format); static bool checkFormatString(const char* string); private: struct Hook { HookType type; int name; Vector details; }; struct OpDecl { Token prefixName; int defIndex; union { Symbol* symbol; int polymorphIndex; }; bool originator; // did we originate this symbol in our flat module? int bubbleSpecIndex; }; struct OpDef { OpDef(); Vector types; Vector identity; Vector special; Vector strategy; NatSet frozen; NatSet polyArgs; int prec; Vector gather; Vector format; int metadata; SymbolType symbolType; string latexMacro; // // Filled out from types after connected components are determined. // Vector domainAndRange; }; struct StratDecl { StratDecl() : metadata(NONE) {} Vector names; Vector types; int metadata; // // Filled out from types after connected components are determined. // Vector domainAndSubject; }; void process(); static void printAttributes(ostream& s, const OpDef& opDef); static void printAttributes(ostream& s, const StratDecl& stratDecl); static void printSortTokenVector(ostream& s, const Vector& sorts); void regretToInform(Entity* doomedEntity); int findHook(const Vector& hookList, HookType type, int name); Symbol* findHookSymbol(const Vector& fullName); void printOpDef(ostream& s, int defIndex); void printStratDecl(ostream& s, const StratDecl& decl); bool defaultFixUp(OpDef& opDef, Symbol* symbol); bool defaultFixUp(OpDef& opDef, int index); void extractSpecialTerms(const Vector& bubble, int begin, ConnectedComponent* component, Vector& terms); Symbol* extractSpecialSymbol(const Vector& bubble, int& pos); void processImports(); void processSorts(); Sort* getSort(Token token); void checkOpTypes(); void checkType(const Type& type); void computeOpTypes(); void computeStrategyTypes(); Sort* computeType(const Type& type); void processOps(); void fixUpSymbols(); void processStrategies(); void processStatements(); bool compatible(int endTokenCode); int startTokenCode; Bool lastSawOpDecl; Bool isStrategy; Bool isCompleteFlag; Vector > sortDecls; Vector > subsortDecls; Vector opDecls; Vector opDefs; Vector stratDecls; Vector > statements; set potentialLabels; set potentialRuleLabels; ModuleDatabase::ImportMap autoImports; VisibleModule* flatModule; }; inline bool SyntacticPreModule::isComplete() { return isCompleteFlag; } inline void SyntacticPreModule::addSortDecl(const Vector& sortDecl) { if (sortDecl.empty()) IssueWarning("skipped empty sort declaration."); // would be nice to have a line number else sortDecls.append(sortDecl); } inline void SyntacticPreModule::addSubsortDecl(const Vector& subsortDecl) { subsortDecls.append(subsortDecl); } inline const ModuleDatabase::ImportMap* SyntacticPreModule::getAutoImports() const { return &autoImports; } #endif maude-3.1/src/Mixfix/moduleDatabase.hh0000644000175200017520000000400713576050635014676 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Class to hold database of modules. // #ifndef _moduleDatabase_hh_ #define _moduleDatabase_hh_ #include #include #include "importModule.hh" class ModuleDatabase { NO_COPYING(ModuleDatabase); public: typedef map ImportMap; typedef set ImportSet; ModuleDatabase(){} bool insertModule(int name, PreModule* module); // true if existing module displaced PreModule* getModule(int name) const; // 0 if doesn't exist bool deleteModule(int name); // true if module deleted void deleteNamedModules(); void setAutoImport(ImportModule::ImportMode importMode, Token name, bool polarity); void setOmodInclude(Token name, bool polarity); const ImportMap& getAutoImports() const; const ImportSet& getOmodIncludes() const; void showNamedModules(ostream& s) const; private: typedef map ModuleMap; ModuleMap moduleMap; ImportMap autoImports; ImportSet defaultOmodIncludes; }; inline const ModuleDatabase::ImportMap& ModuleDatabase::getAutoImports() const { return autoImports; } inline const ModuleDatabase::ImportSet& ModuleDatabase::getOmodIncludes() const { return defaultOmodIncludes; } #endif maude-3.1/src/Mixfix/match.cc0000644000175200017520000001336413703742272013051 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Code for match and xmatch commands. // void Interpreter::printDecisionTime(const Timer& timer) { Int64 real; Int64 virt; Int64 prof; if (getFlag(SHOW_STATS) && getFlag(SHOW_TIMING) && timer.isRunning() && timer.getTimes(real, virt, prof)) { cout << "Decision time: " << prof / 1000 << "ms cpu (" << real / 1000 << "ms real)\n"; } } void Interpreter::match(const Vector& bubble, bool withExtension, Int64 limit) { VisibleModule* fm = currentModule->getFlatModule(); Term* patternTerm; Term* subjectTerm; Vector condition; if (!(fm->parseMatchCommand(bubble, patternTerm, subjectTerm, condition))) return; Pattern* pattern = new Pattern(patternTerm, withExtension, condition); if (!(pattern->getUnboundVariables().empty())) { IssueWarning(*subjectTerm << ": variable " << QUOTE(pattern->index2Variable(pattern->getUnboundVariables().min())) << " is used before it is bound in condition of match command."); subjectTerm->deepSelfDestruct(); delete pattern; return; } DagNode* subjectDag = makeDag(subjectTerm); if (getFlag(SHOW_COMMAND)) { UserLevelRewritingContext::beginCommand(); if (withExtension) cout << 'x'; cout << "match "; if (limit != NONE) cout << '[' << limit << "] "; cout << "in " << currentModule << " : " << pattern->getLhs() << " <=? " << subjectDag; if (condition.length() > 0) { cout << " such that "; MixfixModule::printCondition(cout, condition); } cout << " ." << endl; } startUsingModule(fm); UserLevelRewritingContext* context = new UserLevelRewritingContext(subjectDag); QUANTIFY_START(); Timer timer(getFlag(SHOW_TIMING)); subjectDag->computeTrueSort(*context); if (UserLevelRewritingContext::aborted()) { delete context; delete pattern; fm->unprotect(); return; } MatchSearchState* state = new MatchSearchState(context, pattern, MatchSearchState::GC_PATTERN | MatchSearchState::GC_CONTEXT, 0, withExtension ? 0 : NONE); doMatching(timer, fm, state, 0, limit); } void Interpreter::doMatching(Timer& timer, VisibleModule* module, MatchSearchState* state, int solutionCount, int limit) { RewritingContext* context = state->getContext(); VariableInfo* variableInfo = state->getPattern(); int i = 0; for (; i != limit; i++) { bool result = state->findNextMatch(); if (UserLevelRewritingContext::aborted()) break; // // There might not be any rewriting happening to catch a // ^C so we check here for safety, though if it does // happen, we can't drop into the debugger and have to // treat it as an abort. We need to bail before outputing // a matcher. // // If there is rewriting happening to resolve a condition // then we have a race condition and whether we drop into // the debugger or just abort depends on the instant the ^C // interrupt arrives. We tolerate this uncertainty because // having Maude ignore ^C while spewing thousands of // matchers that won't print correctly would be worse. // if (UserLevelRewritingContext::interrupted()) break; if (!result) { if (solutionCount == 0) { printDecisionTime(timer); cout << "No match.\n"; } break; } ++solutionCount; if (solutionCount == 1) printDecisionTime(timer); cout << "\nMatcher " << solutionCount << '\n'; ExtensionInfo* extensionInfo = state->getExtensionInfo(); if (extensionInfo != 0) { cout << "Matched portion = "; if (extensionInfo->matchedWhole()) cout << "(whole)\n"; else cout << extensionInfo->buildMatchedPortion() << '\n'; } UserLevelRewritingContext::printSubstitution(*context, *variableInfo); } QUANTIFY_STOP(); clearContinueInfo(); // just in case debugger left info state->getContext()->clearCount(); if (i == limit) { // // The loop terminated because we hit user's limit so // continuation is still possible. We save the state, // solutionCount and module, and set a continutation function. // savedState = state; savedSolutionCount = solutionCount; savedModule = module; continueFunc = &Interpreter::matchCont; } else { // // Either user aborted or interrupted or we ran out of solutions; // either way we need to tidy up. // delete state; module->unprotect(); } UserLevelRewritingContext::clearDebug(); MemoryCell::okToCollectGarbage(); } void Interpreter::matchCont(Int64 limit, bool /* debug */) { MatchSearchState* state = safeCast(MatchSearchState*, savedState); VisibleModule* fm = savedModule; savedState = 0; savedModule = 0; continueFunc = 0; QUANTIFY_START(); Timer timer(getFlag(SHOW_TIMING)); doMatching(timer, fm, state, savedSolutionCount, limit); } maude-3.1/src/Mixfix/modules.yy0000644000175200017520000004575413617421515013507 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2020 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /* * Module expressions. */ moduleExprDot : tokenBarDot expectedDot { $$ = new ModuleExpression($1); } | endsInDot '.' { $$ = new ModuleExpression($1); } | parenExpr expectedDot | renameExpr expectedDot | instantExpr expectedDot | moduleExpr '+' moduleExprDot { $$ = new ModuleExpression($1, $3); } | ENDS_IN_DOT { Token t; t.dropChar($1); missingSpace(t); $$ = new ModuleExpression(t); } ; moduleExpr : moduleExpr2 | moduleExpr '+' moduleExpr { $$ = new ModuleExpression($1, $3); } ; moduleExpr2 : moduleExpr3 | renameExpr ; moduleExpr3 : parenExpr | instantExpr | token { $$ = new ModuleExpression($1); } ; renameExpr : moduleExpr2 '*' renaming { $$ = new ModuleExpression($1, currentRenaming); currentRenaming = 0; } ; instantExpr : moduleExpr3 '{' instantArgs '}' { $$ = new ModuleExpression($1, *($3)); delete $3; } ; parenExpr : '(' moduleExpr ')' { $$ = $2; } ; /* * View expressions (parameters are treated as uninstantiated views for syntax purposes). */ viewExpr : viewExpr '{' instantArgs '}' { $$ = new ViewExpression($1, *($3)); delete $3; } | token { $$ = new ViewExpression($1); } ; instantArgs : instantArgs ',' viewExpr { $1->append($3); $$ = $1; } | viewExpr { Vector* t = new Vector(); t->append($1); $$ = t; } ; /* * Renamings. */ renaming : '(' { oldSyntaxContainer = currentSyntaxContainer; currentSyntaxContainer = currentRenaming = new Renaming; } renaming2 /* must succeed so we can restore currentSyntaxContainer */ { currentSyntaxContainer = oldSyntaxContainer; } ')' ; renaming2 : mappingList | error ; mappingList : mappingList ',' mapping | mapping ; mapping : KW_SORT sortName KW_TO sortName { currentRenaming->addSortMapping($2, $4); } | KW_LABEL token KW_TO token { currentRenaming->addLabelMapping($2, $4); } | KW_OP { lexBubble(BAR_COLON | BAR_TO, 1); } fromSpec KW_TO { lexBubble(BAR_COMMA | BAR_LEFT_BRACKET | BAR_RIGHT_PAREN, 1); } toAttributes {} | KW_STRAT identifier { currentRenaming->addStratMapping($2); } fromStratSpec KW_TO identifier { currentRenaming->addStratTarget($6); } ; /* * The ':' alternative forces lookahead which allows the lexer to grab the bubble. */ fromSpec : ':' { Token::peelParens(lexerBubble); currentRenaming->addOpMapping(lexerBubble); } typeList arrow typeName {} | { Token::peelParens(lexerBubble); currentRenaming->addOpMapping(lexerBubble); } ; fromStratSpec : stratSignature | ; /* * The '[' alternative forces lookahead which allows the lexer to grab the bubble. */ toAttributes : '[' { Token::peelParens(lexerBubble); currentRenaming->addOpTarget(lexerBubble); } toAttributeList ']' {} | { Token::peelParens(lexerBubble); currentRenaming->addOpTarget(lexerBubble); } ; toAttributeList : toAttributeList toAttribute | toAttribute ; toAttribute : KW_PREC IDENTIFIER { currentRenaming->setPrec($2); } | KW_GATHER '(' { clear(); } idList ')' { currentRenaming->setGather(tokenSequence); } | KW_FORMAT '(' { clear(); } idList ')' { currentRenaming->setFormat(tokenSequence); } | KW_LATEX '(' { lexerLatexMode(); } LATEX_STRING ')' { currentRenaming->setLatexMacro($4); } ; /* * Views. */ view : KW_VIEW { lexerIdMode(); } token { fileTable.beginModule($1, $3); interpreter.setCurrentView(new SyntacticView($3, &interpreter)); currentSyntaxContainer = CV; } parameters KW_FROM moduleExpr KW_TO moduleExpr expectedIs viewDecList KW_ENDV { CV->addFrom($7); CV->addTo($9); lexerInitialMode(); fileTable.endModule(lineNumber); interpreter.insertView(($3).code(), CV); CV->finishView(); } ; viewDecList : viewDecList viewDeclaration | {} ; skipStrayArrow : KW_ARROW { IssueWarning(LineNumber($1.lineNumber()) << ": skipping " << QUOTE("->") << " in variable declaration."); } | {} ; viewDeclaration : KW_SORT sortName KW_TO sortDot { CV->addSortMapping($2, $4); } | KW_VAR varNameList ':' skipStrayArrow typeDot {} | KW_OP { lexBubble(BAR_COLON | BAR_TO, 1); } viewEndOpMap | KW_STRAT viewStratMap | error '.' ; sortDot : sortName expectedDot { $$ = $1; } | ENDS_IN_DOT { Token t; t.dropChar($1); missingSpace(t); $$ = t; } ; viewEndOpMap : ':' { // // Specific op->op mapping. // Token::peelParens(lexerBubble); // remove any enclosing parens from op name CV->addOpMapping(lexerBubble); } typeList arrow typeName KW_TO { lexBubble(END_STATEMENT, 1); } endBubble { Token::peelParens(lexerBubble); // remove any enclosing parens from op name CV->addOpTarget(lexerBubble); } | KW_TO { // // At this point we don't know if we have an op->term mapping // or a generic op->op mapping so we save the from description and // press on. // opDescription = lexerBubble; lexBubble(END_STATEMENT, 1); } endBubble { if (lexerBubble[0].code() == Token::encode("term")) { // // Op->term mapping. // CV->addOpTermMapping(opDescription, lexerBubble); } else { // // Generic op->op mapping. // Token::peelParens(opDescription); // remove any enclosing parens from op name CV->addOpMapping(opDescription); Token::peelParens(lexerBubble); // remove any enclosing parens from op name CV->addOpTarget(lexerBubble); } } ; strategyCall : identifier { strategyCall.resize(1); strategyCall[0] = $1; } | identifier '(' { lexBubble(BAR_RIGHT_PAREN, 1); } ')' { // Adds the identifier and parentheses to the lexer bubble int bubbleSize = lexerBubble.length(); strategyCall.resize(bubbleSize + 3); strategyCall[0] = $1; strategyCall[1] = $2; for (int i = 0; i < bubbleSize; i++) strategyCall[2 + i] = lexerBubble[i]; strategyCall[bubbleSize + 2] = $4; } viewStratMap : identifier { CV->addStratMapping($1); } stratSignature KW_TO identifier '.' { CV->addStratTarget($5); } | strategyCall KW_TO { lexBubble(END_STATEMENT, 1); } endBubble { if (lexerBubble[0].code() == Token::encode("expr")) { // // Strat->expr mapping. // CV->addStratExprMapping(strategyCall, lexerBubble); } else if (strategyCall.length() == 1 && lexerBubble.length() == 1) { // // Generic strat->strat mapping. // CV->addStratMapping(strategyCall[0]); CV->addStratTarget(lexerBubble[0]); } else { IssueWarning(LineNumber(strategyCall[0].lineNumber()) << ": bad syntax for strategy mapping."); } } ; endBubble : '.' {} | ENDS_IN_DOT { Token t; t.dropChar($1); missingSpace(t); lexerBubble.append(t); } ; parenBubble : '(' { lexBubble(BAR_RIGHT_PAREN, 1); } ')' {} ; /* * Modules and theories. */ module : startModule { lexerIdMode(); } token { interpreter.setCurrentModule(new SyntacticPreModule($1, $3, &interpreter)); currentSyntaxContainer = CM; fileTable.beginModule($1, $3); } parameters expectedIs decList KW_ENDM { lexerInitialMode(); fileTable.endModule(lineNumber); CM->finishModule($8); } ; dot : '.' {} | ENDS_IN_DOT { Token t; t.dropChar($1); missingSpace(t); store(t); } ; parameters : '{' parameterList '}' {} | {} ; parameterList : parameterList ',' parameter | parameter ; parameter : token colon2 moduleExpr { currentSyntaxContainer->addParameter2($1, $3); } ; colon2 : KW_COLON2 {} | ':' { IssueWarning(LineNumber($1.lineNumber()) << ": saw " << QUOTE(':') << " instead of " << QUOTE("::") << " in parameter declaration."); } ; badType : ENDS_IN_DOT { singleton[0].dropChar($1); missingSpace(singleton[0]); currentSyntaxContainer->addType(false, singleton); $$ = $1; // needed for line number } ; typeDot : typeName expectedDot | badType {} ; startModule : KW_MOD | KW_OMOD ; decList : decList declaration | {} ; declaration : KW_IMPORT moduleExprDot { CM->addImport($1, $2); } | KW_SORT { clear(); } sortNameList dot { CM->addSortDecl(tokenSequence); } | KW_SUBSORT { clear(); } subsortList dot { CM->addSubsortDecl(tokenSequence); } | KW_OP { lexBubble(BAR_COLON, 1); } ':' { Token::peelParens(lexerBubble); CM->addOpDecl(lexerBubble); } domainRangeAttr {} | KW_OPS opNameList ':' domainRangeAttr {} | KW_VAR varNameList ':' skipStrayArrow typeDot {} | KW_MB { lexBubble($1, BAR_COLON, 1); } ':' { lexContinueBubble($3, END_STATEMENT, 1); } endBubble { CM->addStatement(lexerBubble); } | KW_CMB { lexBubble($1, BAR_COLON, 1); } ':' { lexContinueBubble($3, BAR_IF, 1); } KW_IF { lexContinueBubble($5, END_STATEMENT, 1); } endBubble { CM->addStatement(lexerBubble); } | KW_EQ { lexBubble($1, BAR_EQUALS, 1); } '=' { lexContinueBubble($3, END_STATEMENT, 1); } endBubble { CM->addStatement(lexerBubble); } | KW_CEQ { lexBubble($1, BAR_EQUALS, 1); } '=' { lexContinueBubble($3, BAR_IF, 1); } KW_IF { lexContinueBubble($5, END_STATEMENT, 1); } endBubble { CM->addStatement(lexerBubble); } | KW_RL { lexBubble($1, BAR_ARROW2, 1); } KW_ARROW2 { lexContinueBubble($3, END_STATEMENT, 1); } endBubble { CM->addStatement(lexerBubble); } | KW_CRL { lexBubble($1, BAR_ARROW2, 1); } KW_ARROW2 { lexContinueBubble($3, BAR_IF, 1); } KW_IF { lexContinueBubble($5, END_STATEMENT, 1); } endBubble { CM->addStatement(lexerBubble); } | KW_SD { lexBubble($1, BAR_ASSIGN, 1); } KW_ASSIGN { lexContinueBubble($3, END_STATEMENT, 1); } endBubble { CM->addStatement(lexerBubble); } | KW_CSD { lexBubble($1, BAR_ASSIGN, 1); } KW_ASSIGN { lexContinueBubble($3, BAR_IF, 1); } KW_IF { lexContinueBubble($5, END_STATEMENT, 1); } endBubble { CM->addStatement(lexerBubble); } | stratDeclKeyword { clear(); } stratIdList stratSignature stratAttributes dot {} | KW_MSG { lexBubble(BAR_COLON, 1); } ':' { Token::peelParens(lexerBubble); CM->addOpDecl(lexerBubble); } domainRangeAttr { CM->setFlag(SymbolType::MESSAGE); } | KW_MSGS opNameList ':' domainRangeAttr { CM->setFlag(SymbolType::MESSAGE); } | KW_CLASS token { } classDef '.' { } | KW_SUBCLASS { clear(); } subsortList dot { CM->addSubsortDecl(tokenSequence); } | error '.' { // // Fix things that might be in a bad state due // to a partially processed declaration. // cleanUpModuleExpression(); CM->makeDeclsConsistent(); } ; classDef : '|' {} | '|' cPairList {} ; cPairList : cPair | cPairList ',' cPair ; cPair : tokenBarDot ':' token { } ; varNameList : varNameList tokenBarColon { currentSyntaxContainer->addVarDecl($2); } | tokenBarColon { currentSyntaxContainer->addVarDecl($1); } ; opNameList : opNameList simpleOpName | simpleOpName ; simpleOpName : tokenBarColon { singleton[0] = $1; CM->addOpDecl(singleton); } | parenBubble { CM->addOpDecl(lexerBubble); } ; domainRangeAttr : typeName typeList dra2 | rangeAttr | badType { IssueWarning(LineNumber(lineNumber) << ": missing " << QUOTE("->") << " in constant declaration."); } ; stratDeclKeyword : KW_STRAT | KW_DSTRAT ; stratIdList : stratIdList stratId | stratId ; stratId : identifier { CM->addStratDecl($1); } ; stratSignature : '@' typeName | ':' typeList '@' typeName ; stratAttributes : '[' stratAttrList ']' {} | {} ; stratAttrList : KW_METADATA IDENTIFIER { CM->setMetadata($2); } ; skipStrayColon : ':' { IssueWarning(LineNumber($1.lineNumber()) << ": skipping stray " << QUOTE(":") << " in operator declaration."); } | {} ; dra2 : skipStrayColon rangeAttr | '.' { IssueWarning(LineNumber($1.lineNumber()) << ": missing " << QUOTE("->") << " in operator declaration."); } | badType { IssueWarning(LineNumber($1.lineNumber()) << ": missing " << QUOTE("->") << " in operator declaration."); } ; rangeAttr : arrow typeAttr { if ($1) CM->convertSortsToKinds(); } ; typeAttr : typeName attributes expectedDot | badType {} ; arrow : KW_ARROW { $$ = false; } | KW_PARTIAL { $$ = true; } ; typeList : typeList typeName | {} ; typeName : sortName { singleton[0] = $1; currentSyntaxContainer->addType(false, singleton); } | '[' { clear(); } sortNames ']' { currentSyntaxContainer->addType(true, tokenSequence); } ; sortNames : sortNames ',' sortName { store($3); } | sortName { store($1); } ; attributes : '[' attributeList ']' {} | {} ; attributeList : attributeList attribute | attribute ; idKeyword : KW_ID { CM->setFlag(SymbolType::LEFT_ID | SymbolType::RIGHT_ID); } | KW_LEFT KW_ID { CM->setFlag(SymbolType::LEFT_ID); } | KW_RIGHT KW_ID { CM->setFlag(SymbolType::RIGHT_ID); } ; attribute : KW_ASSOC { CM->setFlag(SymbolType::ASSOC); } | KW_COMM { CM->setFlag(SymbolType::COMM); } | idKeyword { lexBubble(BAR_RIGHT_BRACKET | BAR_OP_ATTRIBUTE, 1); } identity { CM->setIdentity(lexerBubble); } | KW_IDEM { CM->setFlag(SymbolType::IDEM); } | KW_ITER { CM->setFlag(SymbolType::ITER); } | KW_PREC IDENTIFIER { CM->setPrec($2); } | KW_GATHER '(' { clear(); } idList ')' { CM->setGather(tokenSequence); } | KW_FORMAT '(' { clear(); } idList ')' { CM->setFormat(tokenSequence); } | KW_STRAT '(' { clear(); } idList ')' { CM->setStrat(tokenSequence); } | KW_ASTRAT '(' { clear(); } idList ')' { CM->setStrat(tokenSequence); } | KW_POLY '(' { clear(); } idList ')' { CM->setPoly(tokenSequence); } | KW_MEMO { CM->setFlag(SymbolType::MEMO); } | KW_CTOR { CM->setFlag(SymbolType::CTOR); } | KW_FROZEN { clear(); CM->setFrozen(tokenSequence); } | KW_FROZEN '(' { clear(); } idList ')' { CM->setFrozen(tokenSequence); } | KW_CONFIG { CM->setFlag(SymbolType::CONFIG); } | KW_OBJ { CM->setFlag(SymbolType::OBJECT); } | KW_MSG { CM->setFlag(SymbolType::MESSAGE); } | KW_METADATA IDENTIFIER { CM->setMetadata($2); } | KW_LATEX '(' { lexerLatexMode(); } LATEX_STRING ')' { CM->setLatexMacro($4); } | KW_SPECIAL '(' hookList ')' {} | KW_DITTO { CM->setFlag(SymbolType::DITTO); } ; /* * The ony point of this rule is to force a one token lookahead and allow the lexer to grab the * bubble corresponding to the identity. We never see a FORCE_LOOKAHEAD token. */ identity : FORCE_LOOKAHEAD | {} ; idList : idList IDENTIFIER { store($2); } | IDENTIFIER { store($1); } ; hookList : hookList hook {} | hook {} ; hook : KW_ID_HOOK token { clear(); CM->addHook(SyntacticPreModule::ID_HOOK, $2, tokenSequence); } | KW_ID_HOOK token parenBubble { CM->addHook(SyntacticPreModule::ID_HOOK, $2, lexerBubble); } | KW_OP_HOOK token parenBubble { CM->addHook(SyntacticPreModule::OP_HOOK, $2, lexerBubble); } | KW_TERM_HOOK token parenBubble { CM->addHook(SyntacticPreModule::TERM_HOOK, $2, lexerBubble); } ; /* * Recovery from missing tokens */ expectedIs : KW_IS {} | { IssueWarning(LineNumber(lineNumber) << ": missing " << QUOTE("is") << " keyword."); } ; expectedDot : '.' {} | { IssueWarning(LineNumber(lineNumber) << ": missing period."); } ; /* * Sort and subsort lists. */ sortNameList : sortNameList sortName { store($2); } | {} ; subsortList : subsortList sortName { store($2); } | subsortList '<' { store($2); } | sortName { store($1); } sortNameList '<' { store($4); } ; /* * Sort names */ sortName : sortNameFrag { Token t; if (fragments.size() == 1) t = fragments[0]; else t.tokenize(Token::bubbleToPrefixNameCode(fragments), fragments[0].lineNumber()); fragClear(); $$ = t; } ; sortNameFrag : sortToken { fragStore($1); } | sortNameFrag '{' { fragStore($2); } sortNameFrags '}' { fragStore($5); } ; sortNameFrags : sortNameFrags ',' { fragStore($2); } sortNameFrag {} | sortNameFrag {} ; /* * Token types. */ token : identifier | startKeyword | midKeyword | attrKeyword | '.' ; tokenBarDot : inert | ',' | KW_TO | startKeyword | midKeyword | attrKeyword ; tokenBarColon : identifier | startKeyword | attrKeyword | '.' | '<' | KW_ARROW | KW_PARTIAL | '=' | KW_ARROW2 | KW_IF ; sortToken : IDENTIFIER | startKeyword | attrKeyword2 | '=' | '|' | '+' | '*' | KW_ARROW2 | KW_IF | KW_IS | KW_LABEL | KW_TO ; endsInDot : '.' | ENDS_IN_DOT ; /* * Keywords (in id mode). */ inert : IDENTIFIER | '{' | '}' | '+' | '*' | '|' | KW_COLON2 | KW_LABEL | KW_FROM | KW_IS ; identifier : inert | ENDS_IN_DOT | ',' | KW_TO ; startKeyword : KW_MSG | startKeyword2 // TODO if we add KW_STRATS here => 71 conflicts red-red appear (there seem to be no need) ; startKeyword2 : KW_IMPORT | KW_SORT | KW_SUBSORT | KW_OP | KW_OPS | KW_VAR | KW_DSTRAT | KW_MSGS | KW_CLASS | KW_SUBCLASS | KW_MB | KW_CMB | KW_EQ | KW_CEQ | KW_RL | KW_CRL | KW_ENDM | KW_ENDV | KW_SD | KW_CSD ; midKeyword : '<' | ':' | KW_ARROW | KW_PARTIAL | '=' | KW_ARROW2 | KW_IF ; attrKeyword : '[' | ']' | attrKeyword2 ; attrKeyword2 : KW_ASSOC | KW_COMM | KW_ID | KW_IDEM | KW_ITER | KW_LEFT | KW_RIGHT | KW_PREC | KW_GATHER | KW_STRAT | KW_POLY | KW_MEMO | KW_CTOR | KW_LATEX | KW_SPECIAL | KW_FROZEN | KW_METADATA | KW_CONFIG | KW_OBJ | KW_DITTO | KW_FORMAT | KW_ID_HOOK | KW_OP_HOOK | KW_TERM_HOOK ; maude-3.1/src/Mixfix/makeGrammar.cc0000755000175200017520000013752413720014635014203 00000000000000/* This file is part of the Maude 3 interpreter. Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ // // Functions for making a Maude grammar from a signature. // void MixfixModule::makeGrammar(bool complexFlag) { DebugInfo("module = " << this << " (" << ((void*) this) << ")" << " complexFlag = " << complexFlag << " parser = " << parser); if (parser != 0) { if (!complexFlag || parser->isComplex()) { DebugInfo("reusing parser; parser->isComplex() = " << parser->isComplex() << " complexFlag = " << complexFlag); return; } DebugInfo("deleting old parser; parser->isComplex() = " << parser->isComplex() << " complexFlag = " << complexFlag); delete parser; } else DebugInfo("no existing parser"); // // NonTerminals are allocated as follows: // fixed one-off: -1,..., componentNonTerminalBase + 1 // per component: componentNonTerminalBase,..., componentNonTerminalBase - NUMBER_OF_TYPES * #components + 1 // on demand: componentNonTerminalBase - NUMBER_OF_TYPES * #components,... downwards // int componentNonTerminalBase = complexFlag ? COMPLEX_BASE : SIMPLE_BASE; int nextNonTerminal = componentNonTerminalBase - NUMBER_OF_TYPES * getConnectedComponents().length() + 1; parser = new MixfixParser(*this, complexFlag, componentNonTerminalBase, nextNonTerminal); DebugInfo("new parser = " << parser << " complexFlag = " << complexFlag << " componentNonTerminalBase = " << componentNonTerminalBase << " nextNonTerminal = " << nextNonTerminal); if (complexFlag) { makeComplexProductions(); makeStrategyLanguageProductions(); } makeLabelProductions(); makeStatementProductions(); makeConditionProductions(); makeAttributeProductions(); makeParameterizedSortProductions(); makeComponentProductions(); makeSymbolProductions(); makeVariableProductions(); makeBoolProductions(); makeSpecialProductions(); makePolymorphProductions(); makeBubbleProductions(); // // These two data structures are only used for making the grammar and must be cleared in // case we ever need to regenerate the grammar, since the nonterminals they contain will // no longer be valid. // iterSymbols.clear(); leadTokens.clear(); } void MixfixModule::makeParameterizedSortProductions() { FOR_EACH_CONST(i, SortMap, sortNames) { int name= i->first; if (Token::auxProperty(name) == Token::AUX_STRUCTURED_SORT) { // // Need to make a non-terminal for each lead token of a parameterized sort // so we can parse on-the-fly variables. // Vector parts; Token::splitParameterizedSort(name, parts); int lead = parts[0]; pair p = leadTokens.insert(IntMap::value_type(lead, GARBAGE)); if (p.second) { // // First time we've seen this lead token so we need to make a nonterminal, // terminal and production for it so we can parse on-the-fly variables for // for parameterized sorts starting with this token. // int nt = parser->newNonTerminal(); string leadString(Token::name(lead)); int t = Token::encode((leadString + " variable").c_str()); p.first->second = nt; Vector rhs(1); rhs[0] = t; //cout << "para " << nt << " ::= " << rhs[0] << endl; parser->insertProduction(nt, rhs, 0, emptyGather); parser->insertVariableTerminal(lead, t); } } } } void MixfixModule::makeComplexProductions() { #if PARSER_DEBUG cout << "\n"; #endif static Vector rhs(3); rhs.resize(1); rhs[0] = arrowOne; parser->insertProduction(SEARCH_CONNECTIVE, rhs, 0, emptyGather, MixfixParser::NOP, RewriteSequenceSearch::ONE_STEP); rhs[0] = arrowPlus; parser->insertProduction(SEARCH_CONNECTIVE, rhs, 0, emptyGather, MixfixParser::NOP, RewriteSequenceSearch::AT_LEAST_ONE_STEP); rhs[0] = arrowStar; parser->insertProduction(SEARCH_CONNECTIVE, rhs, 0, emptyGather, MixfixParser::NOP, RewriteSequenceSearch::ANY_STEPS); rhs[0] = arrowBang; parser->insertProduction(SEARCH_CONNECTIVE, rhs, 0, emptyGather, MixfixParser::NOP, RewriteSequenceSearch::NORMAL_FORM); rhs[0] = MATCH_PAIR; parser->insertProduction(MATCH_COMMAND, rhs, 0, gatherAny); // // ::= // parser->insertProduction(MULTI_MATCH_COMMAND, rhs, 0, gatherAny); rhs[0] = UNIFY_PAIR; parser->insertProduction(UNIFY_COMMAND, rhs, 0, gatherAny); rhs[0] = SEARCH_PAIR; parser->insertProduction(SEARCH_COMMAND, rhs, 0, gatherAny); rhs[0] = TERM; parser->insertProduction(GET_VARIANTS_COMMAND, rhs, 0, gatherAny); rhs[0] = UNIFY_COMMAND; parser->insertProduction(VARIANT_UNIFY_COMMAND, rhs, 0, gatherAny); // // ::= // rhs[0] = MULTI_MATCH_COMMAND; parser->insertProduction(VARIANT_MATCH_COMMAND, rhs, 0, gatherAny); rhs[0] = suchThat; parser->insertProduction(SUCH_THAT, rhs, 0, emptyGather); rhs.resize(2); rhs[0] = such; rhs[1] = that; parser->insertProduction(SUCH_THAT, rhs, 0, emptyGather); rhs.resize(3); rhs[0] = MATCH_PAIR; rhs[1] = SUCH_THAT; rhs[2] = CONDITION; parser->insertProduction(MATCH_COMMAND, rhs, 0, gatherAnyAnyAny, MixfixParser::CONDITIONAL_COMMAND); rhs[0] = SEARCH_PAIR; rhs[2] = RULE_CONDITION; parser->insertProduction(SEARCH_COMMAND, rhs, 0, gatherAnyAnyAny, MixfixParser::CONDITIONAL_COMMAND); // // ::= /\ // rhs[0] = UNIFY_PAIR; rhs[1] = wedge; rhs[2] = UNIFY_COMMAND; parser->insertProduction(UNIFY_COMMAND, rhs, 0, gatherAnyAny, MixfixParser::PAIR_LIST); // // ::= /\ // rhs[0] = MATCH_PAIR; rhs[1] = wedge; rhs[2] = MULTI_MATCH_COMMAND; parser->insertProduction(MULTI_MATCH_COMMAND, rhs, 0, gatherAnyAny, MixfixParser::PAIR_LIST); rhs.resize(4); rhs[0] = TERM; rhs[1] = SUCH_THAT; rhs[2] = TERM_LIST; rhs[3] = irreducible; parser->insertProduction(GET_VARIANTS_COMMAND, rhs, 0, gatherAnyAnyAny, MixfixParser::MAKE_TERM_LIST); // // ::= irreducible // rhs.resize(4); rhs[0] = UNIFY_COMMAND; rhs[1] = SUCH_THAT; rhs[2] = TERM_LIST; rhs[3] = irreducible; parser->insertProduction(VARIANT_UNIFY_COMMAND, rhs, 0, gatherAnyAnyAny, MixfixParser::MAKE_TERM_LIST); // // ::= irreducible // rhs.resize(4); rhs[0] = MULTI_MATCH_COMMAND; rhs[1] = SUCH_THAT; rhs[2] = TERM_LIST; rhs[3] = irreducible; parser->insertProduction(VARIANT_MATCH_COMMAND, rhs, 0, gatherAnyAnyAny, MixfixParser::MAKE_TERM_LIST); // // Hetrogeneous term lists. // rhs.resize(1); rhs[0] = TERM; parser->insertProduction(TERM_LIST, rhs, 0, gatherAny, MixfixParser::PASS_THRU); rhs.resize(3); rhs[0] = TERM; rhs[1] = comma; rhs[2] = TERM_LIST; parser->insertProduction(TERM_LIST, rhs, PREFIX_GATHER, gatherPrefixPrefix, MixfixParser::MAKE_TERM_LIST); // // Substitutions. // rhs.resize(1); rhs[0] = ASSIGNMENT; parser->insertProduction(SUBSTITUTION, rhs, 0, gatherAny, MixfixParser::PASS_THRU); rhs.resize(3); rhs[0] = ASSIGNMENT; rhs[1] = comma; rhs[2] = SUBSTITUTION; parser->insertProduction(SUBSTITUTION, rhs, PREFIX_GATHER, gatherPrefixPrefix, MixfixParser::MAKE_SUBSTITUTION); } void MixfixModule::makeStrategyLanguageProductions() { #if PARSER_DEBUG cout << "\n"; #endif static Vector rhs(3); // // We assume that rules have been flattened in. For each label occuring in a rule, // we add a production. // rhs.resize(1); { set handled; for (int label : ruleLabels) { if (label != NONE && handled.find(label) == handled.end()) { rhs[0] = label; parser->insertProduction(RULE_LABEL, rhs, 0, emptyGather, MixfixParser::NOP, label); handled.insert(label); } } } // // Create grammar productions for each named strategy. // (as any other prefix operator) // { const Vector &strategies = getStrategies(); for (size_t i = 0; i < strategies.size(); i++) { Symbol * symbol = strategies[i]->getSymbol(); int nrArgs = symbol->arity(); rhs.resize(1); rhs[0] = strategies[i]->id(); if (nrArgs == 0) { // // Strategy without parameters can be written when no rule with that name exits. // if (ruleLabels.find(rhs[0]) == ruleLabels.end()) parser->insertProduction(STRATEGY_CALL_EXPRESSION, rhs, 0, emptyGather, MixfixParser::NOP, i); // // Strategy without parameters can be written () // rhs.resize(3); rhs[1] = leftParen; rhs[2] = rightParen; parser->insertProduction(STRATEGY_CALL_EXPRESSION, rhs, 0, emptyGather, MixfixParser::NOP, i); } else { Vector gather; // // Strategies wiht parameters are read in a prefixed form // rhs.append(leftParen); gather.resize(0); for (int j = 0; j < nrArgs; j++) { gather.append(PREFIX_GATHER); rhs.append(nonTerminal(domainComponentIndex(symbol, j), TERM_TYPE)); rhs.append(j == nrArgs - 1 ? rightParen : comma); } parser->insertProduction(STRATEGY_CALL_EXPRESSION, rhs, 0, gather, MixfixParser::NOP, i); } } } rhs.resize(1); rhs[0] = fail; parser->insertProduction(STRATEGY_EXPRESSION, rhs, 0, emptyGather, MixfixParser::MAKE_TRIVIAL, false); rhs[0] = idle; parser->insertProduction(STRATEGY_EXPRESSION, rhs, 0, emptyGather, MixfixParser::MAKE_TRIVIAL, true); rhs[0] = all; parser->insertProduction(STRATEGY_EXPRESSION, rhs, 0, emptyGather, MixfixParser::MAKE_ALL); { // // =